<?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>185145</bug_id>
          
          <creation_ts>2018-04-30 15:09:23 -0700</creation_ts>
          <short_desc>Introduce WTF::CodePtr and use it to replace MetaAllocatorPtr, MacroAssemblerCodePtr, and FunctionPtr.</short_desc>
          <delta_ts>2022-08-22 19:12:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1419129</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-30 15:09:23 -0700</bug_when>
    <thetext>See https://bugs.webkit.org/show_bug.cgi?id=185110#c2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1892875</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-08-21 19:59:59 -0700</bug_when>
    <thetext>MetaAllocatorPtr, MacroAssemblerCodePtr, and FunctionPtr all work the same way for the most part:
1. they embed a code pointer.
2. the type of the code pointer has been erased.
3. they provide some utilities for tagging, untagging, and retagging the code pointer.

This patch introduces WTF::CodePtr which combines all 3 of these into a single implementation.

Also, with FunctionPtr (which previously represent the &quot;untyped&quot; function pointer) now removed, we can renamed TypedFunctionPtr to FunctionPtr.  The &quot;untyped&quot; function pointer is now the CodePtr.

Also renamed the following method names for conciseness and consistency:
1. executableAddress =&gt; taggedPtr
2. untaggedExecutableAddress =&gt; untaggedPtr
3. retaggedExecutableAddress =&gt; retaggedPtr
4. createFromExecutableAddress =&gt; fromTaggedPtr
5. makeFromRawPointer =&gt; fromUntaggedPtr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1892876</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-08-21 20:00:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/98957747&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1892879</commentid>
    <comment_count>3</comment_count>
      <attachid>461784</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-08-21 20:41:23 -0700</bug_when>
    <thetext>Created attachment 461784
EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1892881</commentid>
    <comment_count>4</comment_count>
      <attachid>461785</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-08-21 20:42:38 -0700</bug_when>
    <thetext>Created attachment 461785
EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1892892</commentid>
    <comment_count>5</comment_count>
      <attachid>461789</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-08-21 22:46:40 -0700</bug_when>
    <thetext>Created attachment 461789
EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1892894</commentid>
    <comment_count>6</comment_count>
      <attachid>461790</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-08-21 23:25:46 -0700</bug_when>
    <thetext>Created attachment 461790
EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1892983</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-08-22 09:31:21 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/3538</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1893135</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-08-22 19:12:06 -0700</bug_when>
    <thetext>Committed 253667@main (096596f719fb): &lt;https://commits.webkit.org/253667@main&gt;

Reviewed commits have been landed. Closing PR #3538 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>461784</attachid>
            <date>2022-08-21 20:41:23 -0700</date>
            <delta_ts>2022-08-21 20:42:38 -0700</delta_ts>
            <desc>EWS testing.</desc>
            <filename>wip-codeptr4.patch</filename>
            <type>text/plain</type>
            <size>364022</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgKaW5kZXggYjgwNTg4YmE3N2Q3Li5mNDUzOWYwOTQzYTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNiBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGU+IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBl
OwogICAgIHR5cGVkZWYgQXNzZW1ibGVyVHlwZSBBc3NlbWJsZXJUeXBlX1Q7CiAKLSAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRh
Zz47CiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVJlZiA9IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjx0YWc+OwogCiAgICAgZW51bSBjbGFzcyBDUFVJRENoZWNrU3RhdGUgewpAQCAt
ODY4LDcgKzg2Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgYVRh
ZywgUHRyVGFnIGJUYWc+Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPGFUYWc+JiBhLCBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8YlRhZz4mIGIpCisgICAgc3RhdGljIHB0cmRpZmZfdCBkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoY29uc3QgQ29kZVB0cjxhVGFnPiYgYSwgY29uc3QgQ29kZVB0cjxiVGFn
PiYgYikKICAgICB7CiAgICAgICAgIHJldHVybiBiLnRlbXBsYXRlIGRhdGFMb2NhdGlvbjxwdHJk
aWZmX3Q+KCkgLSBhLnRlbXBsYXRlIGRhdGFMb2NhdGlvbjxwdHJkaWZmX3Q+KCk7CiAgICAgfQpA
QCAtODkyLDkgKzg5MSw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgotICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxh
YmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiB2YWx1ZSkKKyAgICBzdGF0aWMg
dm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBsYWJlbCwgQ29kZVB0
cjx0YWc+IHZhbHVlKQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIo
Y29kZSwgbGFiZWwsIHZhbHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBBc3NlbWJs
ZXJUeXBlOjpsaW5rUG9pbnRlcihjb2RlLCBsYWJlbCwgdmFsdWUudGFnZ2VkUHRyKCkpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC05MjIsNyArOTIxLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rVGFpbENhbGwobmVhckNhbGwuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXI6Ci0gICAgICAgICAgICBB
c3NlbWJsZXJUeXBlOjpyZWxpbmtDYWxsKG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5h
dGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVy
VHlwZTo6cmVsaW5rQ2FsbChuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udW50
YWdnZWRQdHIoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkzNiw3ICs5MzUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgTmVhckNhbGxNb2RlOjpUYWlsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+KHRhZ0NvZGVQdHI8ZGVzdFRhZz4oQXNzZW1ibGVyVHlwZTo6
cHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXBDb25jdXJyZW50bHkobmVhckNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKSkpOwogICAgICAgICBjYXNlIE5lYXJD
YWxsTW9kZTo6UmVndWxhcjoKLSAgICAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDxk
ZXN0VGFnPih0YWdDb2RlUHRyPGRlc3RUYWc+KEFzc2VtYmxlclR5cGU6OnByZXBhcmVGb3JBdG9t
aWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5h
dGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpKSk7CisgICAgICAgICAgICByZXR1cm4g
Q29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihBc3NlbWJsZXJU
eXBlOjpwcmVwYXJlRm9yQXRvbWljUmVsaW5rQ2FsbENvbmN1cnJlbnRseShuZWFyQ2FsbC5kYXRh
TG9jYXRpb24oKSwgZGVzdGluYXRpb24udW50YWdnZWRQdHIoKSkpKTsKICAgICAgICAgfQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCmluZGV4IDA3NTA0YmEwNGU1OS4u
NzNlMjVmNDk5ZjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0NvZGVMb2NhdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29k
ZUxvY2F0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Miw4ICs0Miw4IEBAIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyOwogdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRp
b25Db252ZXJ0aWJsZUxvYWQ7CiAKIC8vIFRoZSBDb2RlTG9jYXRpb24qIHR5cGVzIGFyZSBhbGwg
cHJldHR5IG11Y2ggZG8tbm90aGluZyB3cmFwcGVycyBhcm91bmQKLS8vIENvZGVQdHIgKG9yIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciwgdG8gZ2l2ZSBpdCBpdHMgZnVsbCBuYW1lKS4gIFRoZXNlCi0v
LyBjbGFzc2VzIG9ubHkgZXhpc3QgdG8gcHJvdmlkZSB0eXBlLXNhZmV0eSB3aGVuIGxpbmtpbmcg
YW5kIHBhdGNoaW5nIGNvZGUuCisvLyBDb2RlUHRyLiBUaGVzZSBjbGFzc2VzIG9ubHkgZXhpc3Qg
dG8gcHJvdmlkZSB0eXBlLXNhZmV0eSB3aGVuIGxpbmtpbmcgYW5kCisvLyBwYXRjaGluZyBjb2Rl
LgogLy8KIC8vIFRoZSBvbmUgbmV3IHBpZWNlIG9mIGZ1bmN0aW9uYWxsaXR5IGludHJvZHVjZWQg
YnkgdGhlc2UgY2xhc3NlcyBpcyB0aGUKIC8vIGFiaWxpdHkgdG8gY3JlYXRlIChvciBwdXQgYW5v
dGhlciB3YXksIHRvIHJlLWRpc2NvdmVyKSBhbm90aGVyIENvZGVMb2NhdGlvbgpAQCAtNTMsOCAr
NTMsOCBAQCB0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9h
ZDsKIC8vIG9uZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgd2Ugd2lsbCB1c2UgdGhlICpBdE9m
ZnNldCBtZXRob2RzIHByb3ZpZGVkIGJ5CiAvLyBDb2RlTG9jYXRpb25Db21tb24gdG8gZmluZCB0
aGUgb3RoZXIgcG9pbnRzIGluIHRoZSBjb2RlIHRvIG1vZGlmeS4KIHRlbXBsYXRlPFB0clRhZyB0
YWc+Ci1jbGFzcyBDb2RlTG9jYXRpb25Db21tb24gOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPHRhZz4gewotICAgIHVzaW5nIEJhc2UgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjsK
K2NsYXNzIENvZGVMb2NhdGlvbkNvbW1vbiA6IHB1YmxpYyBDb2RlUHRyPHRhZz4geworICAgIHVz
aW5nIEJhc2UgPSBDb2RlUHRyPHRhZz47CiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8UHRyVGFnIHJl
c3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb248cmVzdWx0VGFnPiBpbnN0cnVj
dGlvbkF0T2Zmc2V0KGludCBvZmZzZXQpOwogICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcg
PSB0YWc+IENvZGVMb2NhdGlvbkxhYmVsPHJlc3VsdFRhZz4gbGFiZWxBdE9mZnNldChpbnQgb2Zm
c2V0KTsKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8Q29kZUxvY2F0aW9u
Q29tbW9uPHRhZz4sIFQ+Ojp2YWx1ZT4+CiAgICAgb3BlcmF0b3IgVCgpCiAgICAgewotICAgICAg
ICByZXR1cm4gVChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHRoaXMtPmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgcmV0dXJuIFQo
Q29kZVB0cjx0YWc+Ojpmcm9tVGFnZ2VkUHRyKHRoaXMtPnRhZ2dlZFB0cigpKSk7CiAgICAgfQog
CiBwcm90ZWN0ZWQ6CkBAIC04MCw4ICs4MCw4IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQog
Ci0gICAgQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0
aW9uKQotICAgICAgICA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKQorICAg
IENvZGVMb2NhdGlvbkNvbW1vbihDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAgIDogQ29k
ZVB0cjx0YWc+KGxvY2F0aW9uKQogICAgIHsKICAgICB9CiB9OwpAQCAtOTAsMjYgKzkwLDI2IEBA
IHRlbXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbiA6IHB1
YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9u
SW5zdHJ1Y3Rpb24oKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICBleHBsaWNpdCBDb2RlTG9j
YXRpb25JbnN0cnVjdGlvbihDb2RlUHRyPHRhZz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxv
Y2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkluc3RydWN0aW9uKHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CisgICAgICAg
IDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4oQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiB9
OwogCiB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogY2xhc3MgQ29kZUxvY2F0aW9uTGFiZWwgOiBwdWJs
aWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgogICAgIENvZGVMb2NhdGlvbkxh
YmVsKCkgeyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTGFiZWwoQ29k
ZVB0cjx0YWc+IGxvY2F0aW9uKQogICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KGxv
Y2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25MYWJlbCh2b2lkKiBsb2NhdGlv
bikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+
KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1Rh
Zz4KICAgICBDb2RlTG9jYXRpb25MYWJlbDxuZXdUYWc+IHJldGFnZ2VkKCkgeyByZXR1cm4gQ29k
ZUxvY2F0aW9uTGFiZWw8bmV3VGFnPihDb2RlTG9jYXRpb25Db21tb248dGFnPjo6dGVtcGxhdGUg
cmV0YWdnZWQ8bmV3VGFnPigpKTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQq
PgotICAgIFQgdW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIENvZGVM
b2NhdGlvbkNvbW1vbjx0YWc+Ojp0ZW1wbGF0ZSB1bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPFQ+
KCk7IH0KKyAgICBUIHVudGFnZ2VkUHRyKCkgY29uc3QgeyByZXR1cm4gQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz46OnRlbXBsYXRlIHVudGFnZ2VkUHRyPFQ+KCk7IH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQgPSB2b2lkKj4KICAgICBUIGRhdGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIENv
ZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojp0ZW1wbGF0ZSBkYXRhTG9jYXRpb248VD4oKTsgfQpAQCAt
MTE5LDIzICsxMTksMjMgQEAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KIGNsYXNzIENvZGVMb2NhdGlv
bkp1bXAgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgogICAgIENv
ZGVMb2NhdGlvbkp1bXAoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkp1bXAoQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQogICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKHZvaWQq
IGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz4oQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiAKICAgICB0ZW1wbGF0ZTxQdHJU
YWcgbmV3VGFnPgotICAgIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPiByZXRhZ2dlZCgpIHsgcmV0
dXJuIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6
dGVtcGxhdGUgcmV0YWdnZWQ8bmV3VGFnPigpKTsgfQorICAgIENvZGVMb2NhdGlvbkp1bXA8bmV3
VGFnPiByZXRhZ2dlZCgpIHsgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPihDb2RlUHRy
PHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0KIH07CiAKIHRlbXBsYXRlPFB0
clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25DYWxsIDogcHVibGljIENvZGVMb2NhdGlvbkNv
bW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25DYWxsKCkgeyB9Ci0gICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlv
bikKKyAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25DYWxsKENvZGVQdHI8dGFnPiBsb2NhdGlvbikK
ICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uQ2FsbCh2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9j
YXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsg
fQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8dGFnPihsb2NhdGlv
bikpIHsgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KICAgICBDb2RlTG9jYXRpb25D
YWxsPG5ld1RhZz4gcmV0YWdnZWQoKSB7IHJldHVybiBDb2RlTG9jYXRpb25DYWxsPG5ld1RhZz4o
Q29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0K
QEAgLTE0NSwxMCArMTQ1LDEwIEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9j
YXRpb25OZWFyQ2FsbCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6
CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRp
b25OZWFyQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbiwgTmVhckNhbGxN
b2RlIGNhbGxNb2RlKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbk5lYXJDYWxsKENvZGVQdHI8
dGFnPiBsb2NhdGlvbiwgTmVhckNhbGxNb2RlIGNhbGxNb2RlKQogICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSwgbV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CiAgICAg
ZXhwbGljaXQgQ29kZUxvY2F0aW9uTmVhckNhbGwodm9pZCogbG9jYXRpb24sIE5lYXJDYWxsTW9k
ZSBjYWxsTW9kZSkKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpLCBtX2NhbGxNb2RlKGNhbGxNb2RlKSB7IH0KKyAg
ICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihDb2RlUHRyPHRhZz4obG9jYXRpb24pKSwg
bV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CiAgICAgTmVhckNhbGxNb2RlIGNhbGxNb2RlKCkgeyBy
ZXR1cm4gbV9jYWxsTW9kZTsgfQogcHJpdmF0ZToKICAgICBOZWFyQ2FsbE1vZGUgbV9jYWxsTW9k
ZSB7IE5lYXJDYWxsTW9kZTo6UmVndWxhciB9OwpAQCAtMTU4LDQwICsxNTgsNDAgQEAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KIGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVibGljIENv
ZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWwzMigpIHsgfQotICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyKENvZGVQdHI8dGFnPiBsb2NhdGlvbikKICAgICAgICAgOiBDb2RlTG9jYXRpb25D
b21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsMzIodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KKyAgICAgICAgOiBDb2Rl
TG9jYXRpb25Db21tb248dGFnPihDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KIH07CiAKIHRl
bXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IDog
cHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxDb21wYWN0KCkgeyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsQ29tcGFjdChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICBleHBs
aWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0KENvZGVQdHI8dGFnPiBsb2NhdGlvbikK
ICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCh2b2lkKiBsb2NhdGlvbikKLSAgICAg
ICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihs
b2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8
dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KIGNsYXNzIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7
CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKCkgeyB9Ci0gICAgZXhwbGlj
aXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxv
Y2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cihDb2RlUHRyPHRh
Zz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24p
IHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cih2b2lkKiBsb2NhdGlv
bikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+
KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4K
IGNsYXNzIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCA6IHB1YmxpYyBDb2RlTG9jYXRpb25D
b21tb248dGFnPiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKCkg
eyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNvbnZl
cnRpYmxlTG9hZChDb2RlUHRyPHRhZz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxvY2F0aW9u
Q29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNvbnZl
cnRpYmxlTG9hZCh2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248
dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6
IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsK
IAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuY3BwCmluZGV4IDI3NmVlNmMwOTQzOS4uNDIwN2NlMDllNzQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKQEAgLTY1
LDcgKzY1LDcgQEAgTGlua0J1ZmZlcjo6Q29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBMaW5rQnVm
ZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXAKICAgICAgICAgdmFfc3RhcnQoYXJn
TGlzdCwgZm9ybWF0KTsKICAgICAgICAgb3V0LnZwcmludGYoZm9ybWF0LCBhcmdMaXN0KTsKICAg
ICAgICAgdmFfZW5kKGFyZ0xpc3QpOwotICAgICAgICBQZXJmTG9nOjpsb2cob3V0LnRvQ1N0cmlu
ZygpLCByZXN1bHQuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Y29uc3QgdWludDhf
dCo+KCksIHJlc3VsdC5zaXplKCkpOworICAgICAgICBQZXJmTG9nOjpsb2cob3V0LnRvQ1N0cmlu
ZygpLCByZXN1bHQuY29kZSgpLnVudGFnZ2VkUHRyPGNvbnN0IHVpbnQ4X3QqPigpLCByZXN1bHQu
c2l6ZSgpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtOTAsMTQgKzkwLDE0IEBAIExpbmtCdWZmZXI6
OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERp
c2Fzc2VtYmx5SW1wCiAgICAgICAgIHZzbnByaW50ZihidWZmZXIgKyBzaXplb2YocHJlZml4KSAt
IDEsIHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7CiAgICAgICAgIG91dC5wcmlu
dGYoIiVzIiwgYnVmZmVyKTsKIAotICAgICAgICByZWdpc3RlckxhYmVsKHJlc3VsdC5jb2RlKCku
dW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLCBXVEZNb3ZlKGxhYmVsKSk7CisgICAgICAgIHJl
Z2lzdGVyTGFiZWwocmVzdWx0LmNvZGUoKS51bnRhZ2dlZFB0cigpLCBXVEZNb3ZlKGxhYmVsKSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIG91dC52cHJpbnRmKGZvcm1hdCwgYXJnTGlzdCk7CiAKICAg
ICB2YV9lbmQoYXJnTGlzdCk7CiAgICAgb3V0LnByaW50ZigiOlxuIik7CiAKLSAgICB1aW50OF90
KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRk
cmVzczx1aW50OF90Kj4oKTsKKyAgICB1aW50OF90KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlc3Vs
dC5jb2RlKCkudW50YWdnZWRQdHI8dWludDhfdCo+KCk7CiAgICAgb3V0LnByaW50ZigiICAgIENv
ZGUgYXQgWyVwLCAlcCklc1xuIiwgZXhlY3V0YWJsZUFkZHJlc3MsIGV4ZWN1dGFibGVBZGRyZXNz
ICsgcmVzdWx0LnNpemUoKSwganVzdER1bXBpbmdIZWFkZXIgPyAiLiIgOiAiOiIpOwogICAgIAog
ICAgIENTdHJpbmcgaGVhZGVyID0gb3V0LnRvQ1N0cmluZygpOwpAQCAtMTA4LDcgKzEwOCw3IEBA
IExpbmtCdWZmZXI6OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxp
emVDb2RlV2l0aERpc2Fzc2VtYmx5SW1wCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIAotICAgIHZvaWQqIGNvZGVTdGFydCA9IGVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+
KCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGNvZGVTdGFydCA9IGVu
dHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50YWdnZWRQdHIoKTsKICAgICB2b2lkKiBj
b2RlRW5kID0gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb2RlU3RhcnQpICsgc2l6ZSgpOwogCiAg
ICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSkgewpAQCAtNDY3LDcgKzQ2Nyw3IEBA
IHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVy
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlCiAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIGVmZm9ydCk7
CiAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Nv
ZGUgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9leGVjdXRhYmxl
TWVtb3J5LT5zdGFydCgpLnJldGFnZ2VkUHRyPExpbmtCdWZmZXJQdHJUYWc+KCkpOworICAgIG1f
Y29kZSA9IENvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9leGVjdXRhYmxlTWVtb3J5LT5zdGFy
dCgpLnJldGFnZ2VkUHRyPExpbmtCdWZmZXJQdHJUYWc+KCkpOwogICAgIG1fc2l6ZSA9IGluaXRp
YWxTaXplOwogICAgIG1fZGlkQWxsb2NhdGUgPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCBmOWNmM2ZmZmQwOTguLmMzY2VkNTVj
N2U3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgK
QEAgLTYwLDcgKzYwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBMaW5rQnVmZmVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShMaW5rQnVmZmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVB0ciA9IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+OwogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IHVzaW5nIENv
ZGVSZWYgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPjsKICAgICB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBMYWJlbDsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpKdW1wIEp1
bXA7CkBAIC0xMjcsNyArMTI2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0
clRhZyB0YWc+Ci0gICAgTGlua0J1ZmZlcihNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNvZGUsIHNpemVfdCBzaXplLCBQcm9maWxlIHBy
b2ZpbGUgPSBQcm9maWxlOjpVbmNhdGVnb3JpemVkLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQgPSBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZvcm1CcmFuY2hD
b21wYWN0aW9uID0gdHJ1ZSkKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fz
c2VtYmxlciwgQ29kZVB0cjx0YWc+IGNvZGUsIHNpemVfdCBzaXplLCBQcm9maWxlIHByb2ZpbGUg
PSBQcm9maWxlOjpVbmNhdGVnb3JpemVkLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0
aW9uID0gdHJ1ZSkKICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAgICAgLCBtX2RpZEFsbG9j
YXRlKGZhbHNlKQogI2lmbmRlZiBOREVCVUcKQEAgLTE3MiwxMiArMTcxLDEyIEBAIHB1YmxpYzoK
ICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19mdW5jdGlvbjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVy
PEZ1bmM+Ojp0eXBlPjo6dmFsdWU+PgogICAgIHZvaWQgbGluayhDYWxsIGNhbGwsIEZ1bmMgZnVu
Y05hbWUpCiAgICAgewotICAgICAgICBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKGZ1bmNOYW1l
KTsKKyAgICAgICAgQ29kZVB0cjx0YWc+IGZ1bmN0aW9uKGZ1bmNOYW1lKTsKICAgICAgICAgbGlu
ayhjYWxsLCBmdW5jdGlvbik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAg
ICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQorICAgIHZv
aWQgbGluayhDYWxsIGNhbGwsIENvZGVQdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAg
IEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOwogICAgICAgICBjYWxsLm1f
bGFiZWwgPSBhcHBseU9mZnNldChjYWxsLm1fbGFiZWwpOwpAQCAtMTg3LDcgKzE4Niw3IEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogICAgIHZvaWQgbGluayhDYWxsIGNhbGws
IENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbGFiZWwpCiAgICAgewotICAgICAgICBsaW5rKGNhbGws
IGxhYmVsLnRvRnVuY3Rpb25QdHIoKSk7CisgICAgICAgIGxpbmsoY2FsbCwgQ29kZVB0cjx0YWc+
KGxhYmVsKSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC00MjMs
NyArNDIyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYWxyZWFkeURpc2Fzc2VtYmxlZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX2lzVGh1bmsgeyBmYWxzZSB9OwogICAgIFByb2ZpbGUgbV9wcm9m
aWxlIHsgUHJvZmlsZTo6VW5jYXRlZ29yaXplZCB9OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CisgICAgQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFn
PiBtX2NvZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYp
Pj4+IG1fbGlua1Rhc2tzOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtC
dWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoKT4+PiBtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXgg
NGM0YTA1YWE0N2JmLi5lYTY3NjU3NjkwYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0zOTUwLDEwICszOTUw
LDEwIEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIENhbGwgY2FsbChSZWdpc3RlcklEIHRh
cmdldCwgUmVnaXN0ZXJJRCBjYWxsVGFnKSB7IHJldHVybiBVTlVTRURfUEFSQU0oY2FsbFRhZyks
IGNhbGwodGFyZ2V0LCBOb1B0clRhZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIENhbGwgY2FsbChB
ZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgY2FsbFRhZykgeyByZXR1cm4gVU5VU0VEX1BBUkFN
KGNhbGxUYWcpLCBjYWxsKGFkZHJlc3MsIE5vUHRyVGFnKTsgfQogCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3QgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBv
cGVyYXRpb24pCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3QgQ29k
ZVB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKICAgICB7CiAgICAgICAgIGF1dG8gdG1w
ID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIob3BlcmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCB0bXApOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIob3BlcmF0aW9uLnRhZ2dlZFB0cigpKSwgdG1wKTsK
ICAgICAgICAgY2FsbCh0bXAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgfQogCkBAIC00NjQxLDkg
KzQ2NDEsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRh
ZywgUHRyVGFnIGxvY2F0aW9uVGFnPgotICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+
IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCisgICAg
c3RhdGljIENvZGVQdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxs
PGxvY2F0aW9uVGFnPiBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxyZXN1bHRUYWc+KEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9j
YXRpb24oKSkpLnRvRnVuY3Rpb25QdHIoKTsKKyAgICAgICAgcmV0dXJuIENvZGVQdHI8cmVzdWx0
VGFnPihBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKTsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgpAQCAtNDcxOSwxMyArNDcxOSwxMyBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgogICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwg
Q29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBB
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQQVRD
SF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2Fs
bC5kYXRhTGFiZWxQdHJBdE9mZnNldChSRVBBVENIX09GRlNFVF9DQUxMX1RPX1BPSU5URVIpLmRh
dGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgotICAgIHN0YXRpYyB2b2lkIHJl
cGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVz
dFRhZz4gZGVzdGluYXRpb24pCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAg
IHsKLSAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0YUxvY2F0aW9uKCksIGRl
c3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBBc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9U
T19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udGFnZ2VkUHRyKCkpOwogICAg
IH0KIAogICAgIEpTQ19PUEVSQVRJT05fVkFMSURBVElPTl9NQUNST0FTU0VNQkxFUl9BUk02NF9T
VVBQT1JUKCk7CkBAIC01Mzc4LDE0ICs1Mzc4LDE0IEBAIHByb3RlY3RlZDoKICAgICBmcmllbmQg
Y2xhc3MgTGlua0J1ZmZlcjsKIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgc3RhdGlj
IHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1
bmN0aW9uKQorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwg
Q29kZVB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYgKCFjYWxsLmlzRmxhZ1Nl
dChDYWxsOjpOZWFyKSkKLSAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwg
Y2FsbC5tX2xhYmVsLmxhYmVsQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVS
KSwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtQb2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KFJFUEFUQ0hfT0ZG
U0VUX0NBTExfVE9fUE9JTlRFUiksIGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxz
ZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udW50YWdnZWRFeGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5t
X2xhYmVsLCBmdW5jdGlvbi51bnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnVudGFn
Z2VkRXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtDYWxs
KGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udW50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29sbGVjdENQVUZlYXR1cmVzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmgKaW5kZXggMmY0NTYwZDViNzdhLi43NGRjYTA4MzU1YWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yMzksMTAgKzIzOSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGwoZGF0YVRlbXBSZWdp
c3RlciwgdGFnKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlv
bihjb25zdCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlvbihjb25zdCBDb2RlUHRyPE9wZXJhdGlvblB0clRh
Zz4gb3BlcmF0aW9uKQogICAgIHsKICAgICAgICAgYXV0byB0bXAgPSBnZXRDYWNoZWREYXRhVGVt
cFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihv
cGVyYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIHRtcCk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihvcGVyYXRpb24udGFnZ2VkUHRyKCkpLCB0bXApOwogICAgICAgICBjYWxsKHRtcCwg
T3BlcmF0aW9uUHRyVGFnKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKaW5kZXggMDBiOGVkNjg5MWU0Li5m
YzdjOTIyZjk3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjMzNiw5ICsyMzM2LDkgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgQ2FsbCBjYWxs
KFJlZ2lzdGVySUQgdGFyZ2V0LCBSZWdpc3RlcklEIGNhbGxUYWcpIHsgcmV0dXJuIFVOVVNFRF9Q
QVJBTShjYWxsVGFnKSwgY2FsbCh0YXJnZXQsIE5vUHRyVGFnKTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBjYWxsVGFnKSB7IHJldHVy
biBVTlVTRURfUEFSQU0oY2FsbFRhZyksIGNhbGwoYWRkcmVzcywgTm9QdHJUYWcpOyB9CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlvbihjb25zdCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJh
dGlvbihjb25zdCBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gb3BlcmF0aW9uKQogICAgIHsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwg
YWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihvcGVyYXRp
b24udGFnZ2VkUHRyKCkpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKICAgICAgICAgY2FsbChhZGRy
ZXNzVGVtcFJlZ2lzdGVyLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIH0KIApAQCAtMjUwOSw5ICsy
NTA5LDkgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgRGF0YUxhYmVsUHRyIHN0b3JlUHRy
V2l0aFBhdGNoKEFkZHJlc3MgYWRkcmVzcykgeyByZXR1cm4gc3RvcmVQdHJXaXRoUGF0Y2goVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgYWRkcmVzcyk7IH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyBy
ZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4KLSAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVz
dWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxs
KQorICAgIHN0YXRpYyBDb2RlUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0
aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlv
blB0cjxyZXN1bHRUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihBUk12N0Fzc2VtYmxl
cjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgcmV0dXJu
IENvZGVQdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3Nl
bWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CiAgICAgfQogICAg
IAogICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI1NjQsMTMgKzI1NjQsMTMgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KICAgICBzdGF0aWMg
dm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2Nh
dGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgQVJNdjdBc3Nl
bWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFSTXY3QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwu
ZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLnRhZ2dlZFB0cigpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+Ci0gICAgc3RhdGljIHZvaWQg
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxk
ZXN0VGFnPiBkZXN0aW5hdGlvbikKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVQdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAg
ICAgewotICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlv
bigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgQVJNdjdBc3Nl
bWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udGFnZ2Vk
UHRyKCkpOwogICAgIH0KIAogcHJvdGVjdGVkOgpAQCAtMjcyMSwxNCArMjcyMSwxNCBAQCBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogCiAgICAgdGVtcGxhdGU8UHRyVGFn
IHRhZz4KLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1
bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCog
Y29kZSwgQ2FsbCBjYWxsLCBDb2RlUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBp
ZiAoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKQotICAgICAgICAgICAgQXNzZW1ibGVyOjps
aW5rUG9pbnRlcihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldCgtMiksIGZ1bmN0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rUG9pbnRl
cihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldCgtMiksIGZ1bmN0aW9uLnRhZ2dlZFB0
cigpKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAg
ICAgICAgICBBc3NlbWJsZXI6OmxpbmtUYWlsQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rVGFp
bENhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVs
LCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6
bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAgICAg
fQogCiAgICAgYm9vbCBtX21ha2VKdW1wUGF0Y2hhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCmluZGV4
IGYzNWM1NTkwODNmMC4uNGMwZTkwYjM0YWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCkBAIC0zNSwz
MCArMzUsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyQmFzZTo6ZHVtcFdpdGhOYW1lKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCB2b2lkKiBkYXRh
TG9jYXRpb24sIGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpCi17Ci0gICAgaWYg
KCFleGVjdXRhYmxlQWRkcmVzcykgewotICAgICAgICBvdXQucHJpbnQobmFtZSwgIihudWxsKSIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcyA9PSBk
YXRhTG9jYXRpb24pIHsKLSAgICAgICAgb3V0LnByaW50KG5hbWUsICIoIiwgUmF3UG9pbnRlcihl
eGVjdXRhYmxlQWRkcmVzcyksICIpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0
LnByaW50KG5hbWUsICIoZXhlY3V0YWJsZSA9ICIsIFJhd1BvaW50ZXIoZXhlY3V0YWJsZUFkZHJl
c3MpLCAiLCBkYXRhTG9jYXRpb24gPSAiLCBSYXdQb2ludGVyKGRhdGFMb2NhdGlvbiksICIpIik7
Ci19Ci0KLWJvb2wgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6dHJ5VG9EaXNhc3NlbWJsZShN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+IGNvZGVQdHIsIHNpemVfdCBz
aXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCitib29sIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZkJhc2U6OnRyeVRvRGlzYXNzZW1ibGUoQ29kZVB0cjxEaXNhc3NlbWJseVB0
clRhZz4gY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJl
YW0mIG91dCkKIHsKICAgICByZXR1cm4gSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIsIHNp
emUsIHByZWZpeCwgb3V0KTsKIH0KIAotYm9vbCBNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjp0
cnlUb0Rpc2Fzc2VtYmxlKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4g
Y29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCkKK2Jvb2wgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmQmFzZTo6dHJ5VG9EaXNhc3NlbWJsZShDb2RlUHRyPERpc2Fzc2VtYmx5UHRy
VGFnPiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4KQogewogICAgIHJl
dHVybiB0cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIsIHNpemUsIHByZWZpeCwgV1RGOjpkYXRhRmls
ZSgpKTsKIH0KIAotQ1N0cmluZyBNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjpkaXNhc3NlbWJs
eShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+IGNvZGVQdHIsIHNpemVf
dCBzaXplKQorQ1N0cmluZyBNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjpkaXNhc3NlbWJseShD
b2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBT
dHJpbmdQcmludFN0cmVhbSBvdXQ7CiAgICAgaWYgKCF0cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIs
IHNpemUsICIiLCBvdXQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKaW5kZXggZmMyOGY2YTc0ZWZkLi5hNDk1MjQy
ZGUwNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaApAQCAtMjcsMjYgKzI3LDIwIEBACiAKICNpbmNsdWRlICJF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlLmgiCiAjaW5jbHVkZSAiSlNDUHRyVGFnLmgiCisjaW5jbHVk
ZSA8d3RmL0NvZGVQdHIuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLS8vIEFTU0VS
VF9WQUxJRF9DT0RFX1BPSU5URVIgY2hlY2tzIHRoYXQgcHRyIGlzIGEgbm9uLW51bGwgcG9pbnRl
ciwgYW5kIHRoYXQgaXQgaXMgYSB2YWxpZAotLy8gaW5zdHJ1Y3Rpb24gYWRkcmVzcyBvbiB0aGUg
cGxhdGZvcm0gKGZvciBleGFtcGxlLCBjaGVjayBhbnkgYWxpZ25tZW50IHJlcXVpcmVtZW50cyku
CiAjaWYgQ1BVKEFSTV9USFVNQjIpICYmIEVOQUJMRShKSVQpCiAvLyBBUk0gaW5zdHJ1Y3Rpb25z
IG11c3QgYmUgMTYtYml0IGFsaWduZWQuIFRodW1iMiBjb2RlIHBvaW50ZXJzIHRvIGJlIGxvYWRl
ZCBpbnRvCiAvLyBpbnRvIHRoZSBwcm9jZXNzb3IgYXJlIGRlY29yYXRlZCB3aXRoIHRoZSBib3R0
b20gYml0IHNldCwgd2hpbGUgdHJhZGl0aW9uYWwgQVJNIGhhcwogLy8gdGhlIGxvd2VyIGJpdCBj
bGVhci4gU2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb2YgcG9pbnRlciwgd2UgY2hlY2sg
Zm9yIGJvdGgKIC8vIGRlY29yYXRlZCBhbmQgdW5kZWNvcmF0ZWQgbnVsbC4KLSNkZWZpbmUgQVNT
RVJUX1ZBTElEX0NPREVfUE9JTlRFUihwdHIpIFwKLSAgICBBU1NFUlQocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4ocHRyKSAmIH4xKQogI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQo
b2Zmc2V0KSBcCiAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMSkpIC8vIE11c3QgYmUgbXVsdGlwbGUg
b2YgMi4KICNlbHNlCi0jZGVmaW5lIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIocHRyKSBcCi0g
ICAgQVNTRVJUKHB0cikKICNkZWZpbmUgQVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCkg
Ly8gQW55dGhpbmcgZ29lcyEKICNlbmRpZgogCkBAIC01Nyw3ICs1MSw2IEBAIGVudW0gY2xhc3Mg
Q29tcGlsYXRpb25Nb2RlIDogdWludDhfdDsKIH0gLy8gbmFtZXNwYWNlIFdhc20KIAogY2xhc3Mg
Q29kZUJsb2NrOwotdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7
CiAKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIApAQCAtMTA1LDE2NiArOTgsNiBAQCBwcml2
YXRlOgogICAgIGNvbnN0IHZvaWQqIG1fdmFsdWUgeyBudWxscHRyIH07CiB9OwogCi0vLyBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6Ci0vLwotLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNob3VsZCBi
ZSB1c2VkIHRvIHdyYXAgcG9pbnRlcnMgdG8gSklUIGdlbmVyYXRlZCBjb2RlLgotY2xhc3MgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyQmFzZSB7Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgZHVt
cFdpdGhOYW1lKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCB2b2lkKiBkYXRhTG9jYXRpb24sIGNv
bnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpOwotfTsKLQotLy8gRklYTUU6IE1ha2Ug
SlNDIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbmplcml0IGZyb20gTWV0YUFsbG9jYXRvclB0ci4K
LS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUxNDUKLXRlbXBs
YXRlPFB0clRhZyB0YWc+Ci1jbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgOiBwcml2YXRlIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgewotcHVibGljOgotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cigpID0gZGVmYXVsdDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoc3RkOjpudWxscHRy
X3QpIDogbV92YWx1ZShudWxscHRyKSB7IH0KLQotICAgIGV4cGxpY2l0IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cihjb25zdCB2b2lkKiB2YWx1ZSkKLSNpZiBDUFUoQVJNX1RIVU1CMikKLSAgICAgICAg
Ly8gRGVjb3JhdGUgdGhlIHBvaW50ZXIgYXMgYSB0aHVtYiBjb2RlIHBvaW50ZXIuCi0gICAgICAg
IDogbV92YWx1ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSkgKyAxKQotI2Vs
c2UKLSAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotI2VuZGlmCi0gICAgewotICAgICAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGg8dGFnPih2YWx1ZSk7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0jaWYg
Q1BVKEFSTV9USFVNQjIpCi0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pih2YWx1ZSkgJiAxKSk7Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9J
TlRFUihtX3ZhbHVlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhjb25zdCB2b2lkKiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIo
dmFsdWUpOwotICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8dGFnPih2YWx1ZSk7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
dmFsdWU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKFJldHVybkFkZHJlc3NQdHIgcmEpCi0gICAgICAgIDogbV92YWx1
ZShyZXRhZ0NvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZywgdGFnPihyYS52YWx1ZSgpKSkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChyYS51bnRhZ2dlZFZhbHVlKCkpOwotICAgICAgICBBU1NFUlRf
VkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPFB0clRh
ZyBuZXdUYWc+Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPG5ld1RhZz4gcmV0YWdnZWQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3ZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+KCk7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8bmV3VGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnZ2Vk
RXhlY3V0YWJsZUFkZHJlc3M8bmV3VGFnPigpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUID0gdm9pZCo+Ci0gICAgVCBleGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KG1fdmFsdWUpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KLSAgICBUIHVudGFnZ2VkRXhlY3V0YWJsZUFkZHJl
c3MoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHVudGFnQ29kZVB0cjxULCB0YWc+KG1f
dmFsdWUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPFB0clRhZyBuZXdUYWcsIHR5cGVuYW1lIFQg
PSB2b2lkKj4KLSAgICBUIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIHJldGFnQ29kZVB0cjxULCB0YWcsIG5ld1RhZz4obV92YWx1ZSk7Ci0g
ICAgfQotCi0jaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgLy8gVG8gdXNlIHRoaXMgcG9pbnRlciBh
cyBhIGRhdGEgYWRkcmVzcyByZW1vdmUgdGhlIGRlY29yYXRpb24uCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCA9IHZvaWQqPgotICAgIFQgZGF0YUxvY2F0aW9uKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7Ci0gICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8VD4obV92YWx1ZSA/IGJpdHdpc2VfY2FzdDxjaGFyKj4obV92YWx1ZSkgLSAx
IDogbnVsbHB0cik7Ci0gICAgfQotI2Vsc2UKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9p
ZCo+Ci0gICAgVCBkYXRhTG9jYXRpb24oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUX1ZB
TElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHVudGFnQ29kZVB0cjxU
LCB0YWc+KG1fdmFsdWUpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3ZhbHVlOwotICAgIH0KLSAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKnRoaXMpOyB9Ci0gICAgCi0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgb3RoZXIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOwotICAgIH0K
LQotICAgIC8vIERpc2FsbG93IGFueSBjYXN0aW5nIG9wZXJhdGlvbnMgKGV4Y2VwdCBmb3IgYm9v
bGVhbnMpLiBJbnN0ZWFkLCB0aGUgY2xpZW50Ci0gICAgLy8gc2hvdWxkIGJlIGFza2luZyBleGVj
dXRhYmxlQWRkcmVzcygpIGV4cGxpY2l0bHkuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgYm9vbD46OnZhbHVlICYm
ICFzdGQ6OmlzX3NhbWU8VCwgRnVuY3Rpb25QdHI8dGFnPj46OnZhbHVlPj4KLSAgICBvcGVyYXRv
ciBUKCkgPSBkZWxldGU7Ci0KLSAgICBGdW5jdGlvblB0cjx0YWc+IHRvRnVuY3Rpb25QdHIoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHRhZz46OmZyb21BbHJlYWR5
VGFnZ2VkUG9pbnRlcihleGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICB9Ci0KLSAgICBvcGVyYXRv
ciBGdW5jdGlvblB0cjx0YWc+KCkgY29uc3QgeyByZXR1cm4gdG9GdW5jdGlvblB0cigpOyB9Ci0K
LSAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0
KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1fdmFsdWUpCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGF0
YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShudWxscHRyLCBudWxscHRyLCBuYW1l
LCBvdXQpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdCB7
IGR1bXBXaXRoTmFtZSgiQ29kZVB0ciIsIG91dCk7IH0KLQotICAgIGVudW0gRW1wdHlWYWx1ZVRh
ZyB7IEVtcHR5VmFsdWUgfTsKLSAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1
ZSB9OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cihFbXB0eVZhbHVlVGFnKQotICAg
ICAgICA6IG1fdmFsdWUoZW1wdHlWYWx1ZSgpKQotICAgIHsgfQotICAgIAotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cihEZWxldGVkVmFsdWVUYWcpCi0gICAgICAgIDogbV92YWx1ZShkZWxldGVk
VmFsdWUoKSkKLSAgICB7IH0KLSAgICAKLSAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUgPT0gZW1wdHlWYWx1ZSgpOyB9Ci0gICAgYm9vbCBpc0RlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gZGVsZXRlZFZhbHVlKCk7IH0KLQotICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBQdHJIYXNoPGNvbnN0IHZvaWQqPjo6aGFzaCht
X3ZhbHVlKTsgfQotCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotCi1wcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdCB2b2lkKiBlbXB0eVZhbHVlKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOyB9Ci0gICAgc3RhdGljIGNvbnN0IHZv
aWQqIGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KDIpKTsgfQotCi0gICAgY29uc3Qgdm9pZCogbV92YWx1ZSB7IG51bGxwdHIg
fTsKLX07Ci0KLXRlbXBsYXRlPFB0clRhZyB0YWc+Ci1zdHJ1Y3QgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRySGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPHRhZz4mIHB0cikgeyByZXR1cm4gcHRyLmhhc2goKTsgfQotICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+JiBhLCBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8dGFnPiYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0g
ICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IHRydWU7Ci19OwotCiAvLyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6CiAvLwogLy8gQSBy
ZWZlcmVuY2UgdG8gYSBzZWN0aW9uIG9mIEpJVCBnZW5lcmF0ZWQgY29kZS4gIEEgQ29kZVJlZiBj
b25zaXN0cyBvZiBhCkBAIC0yNzIsOSArMTA1LDkgQEAgc3RydWN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ckhhc2ggewogLy8gd2FzIGFsbG9jYXRlZC4KIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZkJhc2UgewogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBib29sIHRyeVRvRGlzYXNzZW1ibGUoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiwgc2l6ZV90LCBjb25zdCBjaGFy
KiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpOwotICAgIHN0YXRpYyBib29sIHRyeVRvRGlzYXNz
ZW1ibGUoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiwgc2l6ZV90LCBj
b25zdCBjaGFyKiBwcmVmaXgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5n
IGRpc2Fzc2VtYmx5KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4sIHNp
emVfdCk7CisgICAgc3RhdGljIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShDb2RlUHRyPERpc2Fzc2Vt
Ymx5UHRyVGFnPiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQp
OworICAgIHN0YXRpYyBib29sIHRyeVRvRGlzYXNzZW1ibGUoQ29kZVB0cjxEaXNhc3NlbWJseVB0
clRhZz4sIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4KTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgQ1N0cmluZyBkaXNhc3NlbWJseShDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiwg
c2l6ZV90KTsKIH07CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC0yODIsNyArMTE1LDcgQEAg
Y2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWZCYXNlIHsKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyBwcml2YXRlIGJlY2F1c2UgaXQncyBk
YW5nZXJvdXMgZW5vdWdoIHRoYXQgd2Ugd2FudCB1c2VzIG9mIGl0CiAgICAgLy8gdG8gYmUgZWFz
eSB0byBmaW5kIC0gaGVuY2UgdGhlIHN0YXRpYyBjcmVhdGUgbWV0aG9kIGJlbG93LgotICAgIGV4
cGxpY2l0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBj
b2RlUHRyKQorICAgIGV4cGxpY2l0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZihDb2RlUHRyPHRhZz4g
Y29kZVB0cikKICAgICAgICAgOiBtX2NvZGVQdHIoY29kZVB0cikKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2NvZGVQdHIpOwpAQCAtMzAyLDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0
ZTxQdHJUYWcgb3RoZXJUYWc+CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBvcGVyYXRvcj0o
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPG90aGVyVGFnPiYgb3RoZXJDb2RlUmVmKQogICAg
IHsKLSAgICAgICAgbV9jb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhvdGhlckNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFn
Z2VkRXhlY3V0YWJsZUFkZHJlc3M8dGFnPigpKTsKKyAgICAgICAgbV9jb2RlUHRyID0gQ29kZVB0
cjx0YWc+Ojpmcm9tVGFnZ2VkUHRyKG90aGVyQ29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdn
ZWRQdHI8dGFnPigpKTsKICAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gb3RoZXJDb2RlUmVm
Lm1fZXhlY3V0YWJsZU1lbW9yeTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTMx
MCw3ICsxNDMsNyBAQCBwdWJsaWM6CiAgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93
IHRoYXQgdGhlIGNvZGVQdHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcwogICAgIC8vIGFscmVhZHkg
YmVpbmcga2VwdCBhbGl2ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlz
IG1lYW5zCiAgICAgLy8gdGhhdCBjb2RlUHRyIGlzIGltbW9ydGFsLgotICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjx0YWc+IGNvZGVQdHIpCisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoQ29kZVB0cjx0YWc+IGNvZGVQdHIpCiAgICAgewogICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKGNvZGVQdHIpOwogICAgIH0KQEAgLTMy
MCwxMyArMTUzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZU1lbW9y
eS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gY29k
ZSgpIGNvbnN0CisgICAgQ29kZVB0cjx0YWc+IGNvZGUoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fY29kZVB0cjsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFnPgot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+IHJldGFnZ2VkQ29kZSgpIGNvbnN0Cisg
ICAgQ29kZVB0cjxuZXdUYWc+IHJldGFnZ2VkQ29kZSgpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9jb2RlUHRyLnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKTsKICAgICB9CkBAIC0z
NzUsNyArMjA4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgKnRoaXMgPSBvdGhlckNvZGVSZWY7CiAg
ICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbV9jb2RlUHRyOworICAgIENv
ZGVQdHI8dGFnPiBtX2NvZGVQdHI7CiAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IG1fZXhlY3V0YWJsZU1lbW9yeTsKIAogICAgIHRlbXBsYXRlPFB0clRhZz4gZnJpZW5kIGNsYXNz
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKQEAgLTM4NSwxMyArMjE4LDMgQEAgYm9vbCBzaG91bGRE
dW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7CiBib29sIHNob3VsZER1bXBEaXNhc3NlbWJs
eUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKLQotbmFt
ZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsK
LXRlbXBsYXRlPEpTQzo6UHRyVGFnIHRhZz4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6TWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4+IDogSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoPHRh
Zz4geyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKLXRlbXBs
YXRlPEpTQzo6UHRyVGFnIHRhZz4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8dGFnPj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxKU0M6Ok1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+PiB7IH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKaW5kZXgg
NDg4ODU4NDYwYjc1Li5mMjk1ZWJhMzNhOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM3MDEsOSArMzcwMSw5IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcg
bG9jYXRpb25UYWc+Ci0gICAgc3RhdGljIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxU
YXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKKyAgICBzdGF0aWMgQ29k
ZVB0cjxyZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25U
YWc+IGNhbGwpCiAgICAgewotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihy
ZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oTUlQU0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQo
Y2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgcmV0dXJuIENvZGVQdHI8cmVzdWx0VGFn
PihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oTUlQU0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJn
ZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcg
c3RhcnRUYWcsIFB0clRhZyBkZXN0VGFnPgpAQCAtMzc2NywxMyArMzc2NywxMyBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgogICAgIHN0YXRp
YyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgQ29kZUxv
Y2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBNSVBTQXNz
ZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgICAgICBNSVBTQXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwu
ZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLnRhZ2dlZFB0cigpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+Ci0gICAgc3RhdGljIHZvaWQg
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxk
ZXN0VGFnPiBkZXN0aW5hdGlvbikKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVQdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAg
ICAgewotICAgICAgICBNSVBTQXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9u
KCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBNSVBTQXNzZW1i
bGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLnRhZ2dlZFB0
cigpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNzg0LDEyICszNzg0LDEyIEBAIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgotICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rp
b25QdHI8dGFnPiBmdW5jdGlvbikKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2Rl
LCBDYWxsIGNhbGwsIENvZGVQdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmIChj
YWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSkKLSAgICAgICAgICAgIE1JUFNBc3NlbWJsZXI6Omxp
bmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWws
IGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgTUlQU0Fz
c2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgICAgIE1JUFNBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNh
bGwubV9sYWJlbCwgZnVuY3Rpb24udGFnZ2VkUHRyKCkpOwogICAgIH0KIAogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJSSVNDVjY0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUklTQ1Y2
NC5oCmluZGV4IGZjOThmOWI1MjIxNC4uYmU2YjA3YWIzY2FmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUklTQ1Y2NC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJSSVNDVjY0LmgKQEAg
LTE3MjcsNyArMTcyNyw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFn
LCBQdHJUYWcgbG9jYXRpb25UYWc+CiAgICAgc3RhdGljIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4g
cmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cjxyZXN1bHRUYWc+KE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxyZXN1bHRUYWc+KEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRp
b24oKSkpKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4oQ29kZVB0cjxy
ZXN1bHRUYWc+KEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkp
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCmlu
ZGV4IGI0MDFlM2JmYTQ4MS4uMThmYWYyMmEzYzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzkzMSwxMyArMzkzMSwxMyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KICAg
ICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aFZNSGFsdChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGlu
c3RydWN0aW9uU3RhcnQpCiAgICAgewotICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRo
SGx0KGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIFg4NkFz
c2VtYmxlcjo6cmVwbGFjZVdpdGhIbHQoaW5zdHJ1Y3Rpb25TdGFydC50YWdnZWRQdHIoKSk7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHN0YXJ0VGFnLCBQdHJUYWcgZGVzdFRhZz4KICAg
ICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWw8c3RhcnRUYWc+
IGluc3RydWN0aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9u
KQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rp
b25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rpb25T
dGFydC50YWdnZWRQdHIoKSwgZGVzdGluYXRpb24udGFnZ2VkUHRyKCkpOwogICAgIH0KICAgICAK
ICAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1bXBSZXBsYWNlbWVudFNpemUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
CmluZGV4IDEzZWE1ODViNzVjNS4uMWRhODI1YWIzYTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQ5
LDkgKzI0OSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAg
ICB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3QgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBv
cGVyYXRpb24pCisgICAgdm9pZCBjYWxsT3BlcmF0aW9uKGNvbnN0IENvZGVQdHI8T3BlcmF0aW9u
UHRyVGFnPiBvcGVyYXRpb24pCiAgICAgewotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIob3Bl
cmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihvcGVyYXRpb24udGFnZ2VkUHRyKCkpLCBzY3JhdGNoUmVnaXN0
ZXIoKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmNhbGwoc2NyYXRjaFJlZ2lzdGVyKCkpOwogICAg
IH0KIApAQCAtMjAxOCw5ICsyMDE4LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzRmxvYXRpbmdQb2ludEFicygpIHsgcmV0dXJuIHRydWU7IH0KICAgICAKICAgICB0ZW1wbGF0
ZTxQdHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcgbG9jYXRpb25UYWc+Ci0gICAgc3RhdGljIEZ1bmN0
aW9uUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlv
blRhZz4gY2FsbCkKKyAgICBzdGF0aWMgQ29kZVB0cjxyZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0
KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCiAgICAgewotICAgICAgICByZXR1
cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihYODZBc3NlbWJsZXI6OnJlYWRQb2ludGVyKGNhbGwu
ZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRp
b24oKSkpOworICAgICAgICByZXR1cm4gQ29kZVB0cjxyZXN1bHRUYWc+KFg4NkFzc2VtYmxlcjo6
cmVhZFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FM
TF9SMTEpLmRhdGFMb2NhdGlvbigpKSk7CiAgICAgfQogCiAgICAgYm9vbCBoYXZlU2NyYXRjaFJl
Z2lzdGVyRm9yQmxpbmRpbmcoKSB7IHJldHVybiBtX2FsbG93U2NyYXRjaFJlZ2lzdGVyOyB9CkBA
IC0yMDY2LDMxICsyMDY2LDMxIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgog
ICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRy
V2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQWRkcmVz
cywgdm9pZCogaW5pdGlhbFZhbHVlKQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXZl
cnRKdW1wVG9fbW92cV9pNjRyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5pdGlhbFZhbHVlKSwgc19zY3JhdGNoUmVnaXN0
ZXIpOworICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZxX2k2NHIoaW5zdHJ1
Y3Rpb25TdGFydC50YWdnZWRQdHIoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5pdGlh
bFZhbHVlKSwgc19zY3JhdGNoUmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRh
ZyB0YWc+CiAgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVC
cmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQs
IEFkZHJlc3MsIGludDMyX3QgaW5pdGlhbFZhbHVlKQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1i
bGVyOjpyZXZlcnRKdW1wVG9fbW92bF9pMzJyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgaW5pdGlhbFZhbHVlLCBzX3NjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIFg4NkFz
c2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX21vdmxfaTMycihpbnN0cnVjdGlvblN0YXJ0LnRhZ2dlZFB0
cigpLCBpbml0aWFsVmFsdWUsIHNfc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPgogICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRv
QnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFy
dCwgUmVnaXN0ZXJJRCwgdm9pZCogaW5pdGlhbFZhbHVlKQogICAgIHsKLSAgICAgICAgWDg2QXNz
ZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92cV9pNjRyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5pdGlhbFZhbHVlKSwgc19z
Y3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3Zx
X2k2NHIoaW5zdHJ1Y3Rpb25TdGFydC50YWdnZWRQdHIoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oaW5pdGlhbFZhbHVlKSwgc19zY3JhdGNoUmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KICAgICBzdGF0aWMgdm9pZCBy
ZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxh
YmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9D
QUxMX1IxMSkuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRy
QXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSwgZGVzdGlu
YXRpb24udGFnZ2VkUHRyKCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFn
LCBQdHJUYWcgZGVzdFRhZz4KLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsPGNhbGxUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQor
ICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2Fs
bCwgQ29kZVB0cjxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAgIFg4NkFzc2Vt
Ymxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9P
RkZTRVRfQ0FMTF9SMTEpLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFM
YWJlbFB0ckF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCks
IGRlc3RpbmF0aW9uLnRhZ2dlZFB0cigpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0yMTEwLDE0
ICsyMTEwLDE0IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKICAg
ICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgotICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNv
ZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikKKyAgICBzdGF0aWMgdm9p
ZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIENvZGVQdHI8dGFnPiBmdW5jdGlvbikK
ICAgICB7CiAgICAgICAgIGlmICghY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpCi0gICAgICAg
ICAgICBYODZBc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbC5sYWJlbEF0
T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSksIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOworICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rUG9pbnRlcihjb2RlLCBjYWxs
Lm1fbGFiZWwubGFiZWxBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLCBmdW5jdGlv
bi50YWdnZWRQdHIoKSk7CiAgICAgICAgIGVsc2UgaWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRh
aWwpKQotICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFi
ZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgWDg2QXNzZW1i
bGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBj
YWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAg
WDg2QXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnRhZ2dl
ZFB0cigpKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
dGVzdG1hc20uY3BwCmluZGV4IGEyMzNhOTJlMzhkMi4uYWQyNzZkZTk4NTU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzOCw3ICsyMzgs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29tcGlsZShHZW5lcmF0
b3ImJiBnZW5lcmF0ZSkKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KIFQgaW52b2tlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiYg
Y29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAgICB2b2lkKiBleGVjdXRhYmxlQWRk
cmVzcyA9IHVudGFnQ0Z1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNvZGUuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVu
Y3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY29kZS5jb2RlKCkudGFnZ2VkUHRyKCkpOwogICAgIFQg
KCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4u
Lik+KGV4ZWN1dGFibGVBZGRyZXNzKTsKIAogI2lmIENQVShSSVNDVjY0KQpAQCAtNDkyMCw3ICs0
OTIwLDcgQEAgdm9pZCB0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVyKCkKICAgICAgICAg
Ly8gV3JpdGUgZXhwZWN0ZWQgdmFsdWVzIGludG8gdGhlIHJlZ2lzdGVycy4KICAgICAgICAgaml0
LnByb2JlRGVidWcoWyZdIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgewogICAgICAgICAgICAg
cHJvYmVDYWxsQ291bnQrKzsKLSAgICAgICAgICAgIGNvbnRleHQuY3B1LnBjKCkgPSByZXRhZ0Nv
ZGVQdHI8SlNFbnRyeVB0clRhZywgSklUUHJvYmVQQ1B0clRhZz4oY29udGludWF0aW9uLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIGNvbnRleHQuY3B1LnBjKCkgPSBy
ZXRhZ0NvZGVQdHI8SlNFbnRyeVB0clRhZywgSklUUHJvYmVQQ1B0clRhZz4oY29udGludWF0aW9u
LmNvZGUoKS50YWdnZWRQdHIoKSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGppdC5icmVha3Bv
aW50KCk7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAppbmRleCA4M2E4MGY3NmRhMWYuLmZkZDA4NzFhZDlmOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcApAQCAtNjAyLDcg
KzYwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIEp1bXBUYWJsZUNvZGVQ
dHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNTd2l0Y2hQdHJUYWc+OworICAgICAgICAgICAg
ICAgICAgICAgICAgdXNpbmcgSnVtcFRhYmxlQ29kZVB0ciA9IENvZGVQdHI8SlNTd2l0Y2hQdHJU
YWc+OwogICAgICAgICAgICAgICAgICAgICAgICAgSnVtcFRhYmxlQ29kZVB0cioganVtcFRhYmxl
ID0gc3RhdGljX2Nhc3Q8SnVtcFRhYmxlQ29kZVB0cio+KAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtcy5wcm9jKCkuYWRkRGF0YVNlY3Rpb24oc2l6ZW9mKEp1bXBUYWJsZUNvZGVQ
dHIpICogdGFibGVTaXplKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRGlzYXNzZW1ibGVyLmNwcAppbmRleCAxYTU2NGQ3NWMwMTYuLmM0YTFkOWNlZjdjMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEaXNhc3NlbWJsZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcApA
QCAtNzEsNyArNzEsNyBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6YWRkSW5zdChJbnN0KiBpbnN0LCBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgc3RhcnQsIE1hY3JvQXNzZW1ibAogCiB2b2lkIERpc2Fzc2Vt
Ymxlcjo6ZHVtcChDb2RlJiBjb2RlLCBQcmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyLCBjb25zdCBjaGFyKiBhaXJQcmVmaXgsIGNvbnN0IGNoYXIqIGFzbVByZWZpeCwgY29u
c3QgU2NvcGVkTGFtYmRhPHZvaWQoSW5zdCYpPiYgZG9Ub0VhY2hJbnN0KQogewotICAgIHZvaWQq
IGNvZGVTdGFydCA9IGxpbmtCdWZmZXIuZW50cnlwb2ludDxEaXNhc3NlbWJseVB0clRhZz4oKS51
bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCogY29kZVN0YXJ0ID0gbGlua0J1
ZmZlci5lbnRyeXBvaW50PERpc2Fzc2VtYmx5UHRyVGFnPigpLnVudGFnZ2VkUHRyKCk7CiAgICAg
dm9pZCogY29kZUVuZCA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oY29kZVN0YXJ0KSArICBsaW5r
QnVmZmVyLnNpemUoKTsKIAogICAgIGF1dG8gZHVtcEFzbVJhbmdlID0gWyZdIChDQ2FsbEhlbHBl
cnM6OkxhYmVsIHN0YXJ0TGFiZWwsIENDYWxsSGVscGVyczo6TGFiZWwgZW5kTGFiZWwpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCmluZGV4IGI2MzhiZWNkMzMzOS4u
MGIzMTIzMmM0ZjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rl
c3RhaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05OSw3ICs5OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShC
Mzo6UHJvY2VkdXJlJiBwcm9jKQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgogVCBpbnZva2UoY29uc3QgQ29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCiB7Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlv
blB0cjxKSVRDb21waWxhdGlvblB0clRhZz4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cjxKSVRD
b21waWxhdGlvblB0clRhZz4oY29kZS5jb2RlKCkudGFnZ2VkUHRyKCkpOwogICAgIFQgKCpmdW5j
dGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGV4
ZWN1dGFibGVBZGRyZXNzKTsKICAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCA4ZmVhOGRmZDU4YWIuLjNlYjY0ZGM3NTVl
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5Nyw5ICsxOTcsOSBAQCBpbmxp
bmUgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjb21waWxlUHJvYyhQcm9jZWR1cmUmIHBy
b2NlZHVyZSwgdW5zaWduZWQgbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4u
LiBBcmd1bWVudHM+Ci1UIGludm9rZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUQ29tcGlsYXRp
b25QdHJUYWc+IHB0ciwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK1QgaW52b2tlKENvZGVQdHI8
SklUQ29tcGlsYXRpb25QdHJUYWc+IHB0ciwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAg
ICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ0Z1bmN0aW9uUHRyPEpJVENvbXBpbGF0
aW9uUHRyVGFnPihwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgdm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cjxKSVRDb21waWxhdGlvblB0clRhZz4ocHRyLnRh
Z2dlZFB0cigpKTsKICAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nh
c3Q8VCgqKShBcmd1bWVudHMuLi4pPihleGVjdXRhYmxlQWRkcmVzcyk7CiAgICAgcmV0dXJuIGZ1
bmN0aW9uKGFyZ3VtZW50cy4uLik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzXzYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM182LmNw
cAppbmRleCBhMWM5N2EzNmI3ZTAuLjkyMDMxOTExNDc2MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiM182LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzXzYuY3BwCkBAIC0xNjc3LDggKzE2NzcsOCBAQCB2b2lkIHRlc3RJbnRlcnByZXRl
cigpCiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CiAgICAgICAgICAgICBWZWN0b3I8Qm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBs
YWJlbHMgPSBwYXJhbXMuc3VjY2Vzc29yTGFiZWxzKCk7CiAKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU1N3aXRjaFB0clRhZz4qIGp1bXBUYWJsZSA9IGJpdHdpc2VfY2FzdDxN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNTd2l0Y2hQdHJUYWc+Kj4oCi0gICAgICAgICAgICAgICAg
cGFyYW1zLnByb2MoKS5hZGREYXRhU2VjdGlvbihzaXplb2YoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTU3dpdGNoUHRyVGFnPikgKiBsYWJlbHMuc2l6ZSgpKSk7CisgICAgICAgICAgICBDb2RlUHRy
PEpTU3dpdGNoUHRyVGFnPioganVtcFRhYmxlID0gYml0d2lzZV9jYXN0PENvZGVQdHI8SlNTd2l0
Y2hQdHJUYWc+Kj4oCisgICAgICAgICAgICAgICAgcGFyYW1zLnByb2MoKS5hZGREYXRhU2VjdGlv
bihzaXplb2YoQ29kZVB0cjxKU1N3aXRjaFB0clRhZz4pICogbGFiZWxzLnNpemUoKSkpOwogCiAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCBiODY2Zjk3
MzBiMDIuLmIxNDFlYzcyY2Y0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxNTgsNyArMjE1OCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VGb3JDdXN0
b20pLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHVpZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLm1fY3VzdG9tQWNjZXNzb3Iu
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkubV9j
dXN0b21BY2Nlc3Nvci50YWdnZWRQdHIoKSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxHZXRWYWx1ZUZ1bmM+KAogICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9i
amVjdCksCkBAIC0yMTcyLDcgKzIxNzIsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUZvckN1c3RvbSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodWlkKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkubV9j
dXN0b21BY2Nlc3Nvci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZT4oKS5tX2N1c3RvbUFjY2Vzc29yLnRhZ2dlZFB0cigpKSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPFB1dFZh
bHVlRnVuYz4oCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoZ2xvYmFsT2JqZWN0KSwKQEAgLTIxOTAsOSArMjE5MCw5IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soWz0sIHRoaXNdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVENhZ2UoKSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0
b21BY2Nlc3NvckdldHRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHZtRW50cnlDdXN0
b21HZXR0ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIHZtRW50cnlDdXN0b21HZXR0ZXIpOwogICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih2bUVudHJ5Q3Vz
dG9tU2V0dGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25DYWxsLCB2bUVudHJ5Q3VzdG9tU2V0dGVyKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9w
ZXJhdGlvbkNhbGwsIHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkubV9jdXN0b21B
Y2Nlc3Nvcik7CiAgICAgICAgICAgICB9KTsKQEAgLTIyNTIsNyArMjI1Miw3IEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAg
ICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogICAgICAgICAgICAgYXV0byBv
cGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCkpOworICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlv
bldyaXRlQmFycmllclNsb3dQYXRoKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgc3Rh
dGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUpOwogCkBA
IC0yMzQ3LDkgKzIzNDcsOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVy
YXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0
aW9uUHRyVGFnPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0
aWFsQ2FwYWNpdHkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25SZWFs
bG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSk7
CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0
aW5nIChpLmUuIHRoZSBvbGQgc3RydWN0dXJlL2J1dHRlcmZseQpAQCAtMjM1OSw5ICsyMzU5LDkg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBz
dGF0ZSkKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAg
ICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblJlYWxsb2Nh
dGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdl
KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2VTbmlwcGV0UGFyYW1zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKaW5kZXggOGZiOTE4M2FkMWYyLi41NjRiN2I2MzA4
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
U25pcHBldFBhcmFtcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKICAgICAgICAgYXV0byBmdW5jdGlvbiA9IG1fZnVuY3Rpb247CiAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KGZ1bmN0aW9uKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25DYWxsLCBmdW5jdGlvbik7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGpp
dC5zZXR1cFJlc3VsdHMobV9yZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAppbmRleCA1MDQ5YzYzMjA3NjguLmUwMmYzYjQ1OTE1YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAK
QEAgLTEwOCw3ICsxMDgsNyBAQCBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBD
YWxsTGlua0luZm86OmRvbmVMb2NhdGlvbigpCiAgICAgcmV0dXJuIG1fZG9uZUxvY2F0aW9uOwog
fQogCi12b2lkIENhbGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCit2b2lkIENhbGxMaW5rSW5m
bzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCog
Y2FsbGVlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKICAgICBSRUxFQVNFX0FT
U0VSVCghKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxlZSkgJiBwb2x5bW9ycGhpY0NhbGxl
ZU1hc2spKTsKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFr
KFZNJiB2bSkKICAgICB9CiB9CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxE
ZXN0aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikK
K3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbiA9
IGNvZGVQdHI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmgKaW5kZXggM2YyYjEzMmYwZTNiLi4xODZkMzM1NjQ3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKQEAgLTE5OSw4ICsxOTksOCBAQCBw
dWJsaWM6CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9j
YXRpb24oKTsKIAotICAgIHZvaWQgc2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mLCBKU0NlbGwqLCBK
U09iamVjdCogY2FsbGVlLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4pOwotICAgIHZvaWQgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKKyAgICB2b2lkIHNldE1vbm9tb3JwaGljQ2Fs
bGVlKFZNJiwgSlNDZWxsKiwgSlNPYmplY3QqIGNhbGxlZSwgQ29kZUJsb2NrKiwgQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPik7CisgICAgdm9pZCBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KTsKICAgICB2b2lkIGNsZWFyQ2FsbGVlKCk7CiAgICAgSlNPYmpl
Y3QqIGNhbGxlZSgpOwogCkBAIC0zODMsNyArMzgzLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdWlu
dDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFy
Z3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6
IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCiAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGlu
YXRpb247CisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CiAgICAgICAgIFVuaW9uVHlwZSgpCiAgICAgICAg
ICAgICA6IGRhdGFJQyB7IG51bGxwdHIsIG51bGxwdHIgfQpAQCAtMzkxLDcgKzM5MSw3IEBAIHBy
b3RlY3RlZDoKIAogICAgICAgICBzdHJ1Y3QgRGF0YUlDIHsKICAgICAgICAgICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7IC8vIFRoaXMgaXMgd2Vla2x5IGhlbGQuIEFuZCBjbGVhcmVkIHdoZW5l
dmVyIG1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gaXMgY2hhbmdlZC4KLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21vbm9tb3JwaGljQ2FsbERl
c3RpbmF0aW9uOworICAgICAgICAgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21vbm9tb3Jw
aGljQ2FsbERlc3RpbmF0aW9uOwogICAgICAgICB9IGRhdGFJQzsKIAogICAgICAgICBzdHJ1Y3Qg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKaW5k
ZXggMjY5Yjk4YTBkYWE0Li4xZDI5NTBkY2IyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcApAQCAtMjg2LDcgKzI4Niw3IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFj
aygKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewogICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXM7CiAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24gPSBudWxs
cHRyOwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBj
dXN0b21BY2Nlc3NvckdldHRlcjsKKyAgICAgICAgICAgICAgICBDb2RlUHRyPEN1c3RvbUFjY2Vz
c29yUHRyVGFnPiBjdXN0b21BY2Nlc3NvckdldHRlcjsKICAgICAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlOwogICAgICAgICAg
ICAgICAgIGJvb2wgaGF2ZURPTUF0dHJpYnV0ZSA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVZhcmlhbnQuY3BwCmluZGV4IDU0OTQ4ZGI1ZDI3Zi4u
MDk2NmQwMWM4ODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlWYXJpYW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlWYXJpYW50LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUdl
dEJ5VmFyaWFudDo6R2V0QnlWYXJpYW50KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
Y29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cywgSlNGdW5jdGlvbiogaW50cmlu
c2ljRnVuY3Rpb24sIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nl
c3NvckdldHRlciwgc3RkOjp1bmlxdWVfcHRyPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0
dHJpYnV0ZSkKK0dldEJ5VmFyaWFudDo6R2V0QnlWYXJpYW50KENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cywgSlNGdW5j
dGlvbiogaW50cmluc2ljRnVuY3Rpb24sIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGN1
c3RvbUFjY2Vzc29yR2V0dGVyLCBzdGQ6OnVuaXF1ZV9wdHI8RE9NQXR0cmlidXRlQW5ub3RhdGlv
bj4gZG9tQXR0cmlidXRlKQogICAgIDogbV9zdHJ1Y3R1cmVTZXQoc3RydWN0dXJlU2V0KQogICAg
ICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQpA
QCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgR2V0QnlWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogICAgIGlmIChtX2ludHJp
bnNpY0Z1bmN0aW9uKQogICAgICAgICBvdXQucHJpbnQoIiwgaW50cmluc2ljID0gIiwgKm1faW50
cmluc2ljRnVuY3Rpb24pOwogICAgIGlmIChtX2N1c3RvbUFjY2Vzc29yR2V0dGVyKQotICAgICAg
ICBvdXQucHJpbnQoIiwgY3VzdG9tYWNjZXNzb3JnZXR0ZXIgPSAiLCBSYXdQb2ludGVyKG1fY3Vz
dG9tQWNjZXNzb3JHZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICBvdXQucHJp
bnQoIiwgY3VzdG9tYWNjZXNzb3JnZXR0ZXIgPSAiLCBSYXdQb2ludGVyKG1fY3VzdG9tQWNjZXNz
b3JHZXR0ZXIudGFnZ2VkUHRyKCkpKTsKICAgICBpZiAobV9kb21BdHRyaWJ1dGUpIHsKICAgICAg
ICAgb3V0LnByaW50KCIsIGRvbWNsYXNzID0gIiwgUmF3UG9pbnRlcihtX2RvbUF0dHJpYnV0ZS0+
Y2xhc3NJbmZvKSk7CiAgICAgICAgIGlmIChtX2RvbUF0dHJpYnV0ZS0+ZG9tSklUKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5VmFyaWFudC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5VmFyaWFudC5oCmluZGV4IDA5OWFlZDc3
MzYzOC4uM2VkMDdmNjA5OWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlWYXJpYW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5VmFyaWFudC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQo
KSwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiA9IG51bGxwdHIsCiAg
ICAgICAgIEpTRnVuY3Rpb24qID0gbnVsbHB0ciwKLSAgICAgICAgRnVuY3Rpb25QdHI8Q3VzdG9t
QWNjZXNzb3JQdHJUYWc+IGN1c3RvbUFjY2Vzc29yR2V0dGVyID0gbnVsbHB0ciwKKyAgICAgICAg
Q29kZVB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIgPSBudWxs
cHRyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gPSBu
dWxscHRyKTsKIAogICAgIH5HZXRCeVZhcmlhbnQoKTsKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGlj
OgogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0KICAgICBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1faW50cmluc2ljRnVuY3Rpb247IH0KICAgICBJbnRyaW5zaWMg
aW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gbV9pbnRyaW5zaWNGdW5jdGlvbiA/IG1faW50cmlu
c2ljRnVuY3Rpb24tPmludHJpbnNpYygpIDogTm9JbnRyaW5zaWM7IH0KLSAgICBGdW5jdGlvblB0
cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2N1c3RvbUFjY2Vzc29yR2V0dGVyOyB9CisgICAgQ29kZVB0cjxDdXN0b21BY2Nlc3Nv
clB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1c3RvbUFj
Y2Vzc29yR2V0dGVyOyB9CiAgICAgRE9NQXR0cmlidXRlQW5ub3RhdGlvbiogZG9tQXR0cmlidXRl
KCkgY29uc3QgeyByZXR1cm4gbV9kb21BdHRyaWJ1dGUuZ2V0KCk7IH0KIAogICAgIGJvb2wgaXNQ
cm9wZXJ0eVVuc2V0KCkgY29uc3QgeyByZXR1cm4gb2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNldDsg
fQpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZz
ZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVz
OwogICAgIEpTRnVuY3Rpb24qIG1faW50cmluc2ljRnVuY3Rpb247Ci0gICAgRnVuY3Rpb25QdHI8
Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IG1fY3VzdG9tQWNjZXNzb3JHZXR0ZXI7CisgICAgQ29kZVB0
cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gbV9jdXN0b21BY2Nlc3NvckdldHRlcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gbV9kb21BdHRyaWJ1dGU7CiAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCmlu
ZGV4IDAxOTU5MzZhN2EwNi4uNWJlMjIyNzM5YTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDksNyArNDksNyBAQCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZQogCiBSZWY8QWNjZXNzQ2FzZT4g
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAogICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgYm9vbCB2aWFQcm94eSwgV2F0Y2hw
b2ludFNldCogYWRkaXRpb25hbFNldCwgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+
IGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLAorICAgIGJvb2wgdmlhUHJv
eHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQ
dHJUYWc+IGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLAogICAgIHN0ZDo6
b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlLCBSZWZQdHI8UG9s
eVByb3RvQWNjZXNzQ2hhaW4+JiYgcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiB7CiAgICAgc3dpdGNo
ICh0eXBlKSB7CkBAIC02MywxNyArNjMsMTcgQEAgUmVmPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKHZtLCBvd25lciwgdHlwZSwgaWRlbnRpZmllciwgb2Zmc2V0
LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHksIGFkZGl0aW9uYWxTZXQsIGN1c3Rv
bVNsb3RCYXNlLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkpOwogICAgIHJlc3VsdC0+
bV9kb21BdHRyaWJ1dGUgPSBkb21BdHRyaWJ1dGU7Ci0gICAgcmVzdWx0LT5tX2N1c3RvbUFjY2Vz
c29yID0gY3VzdG9tR2V0dGVyID8gRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KGN1
c3RvbUdldHRlcikgOiBudWxscHRyOworICAgIHJlc3VsdC0+bV9jdXN0b21BY2Nlc3NvciA9IGN1
c3RvbUdldHRlciA/IGN1c3RvbUdldHRlciA6IG51bGxwdHI7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogUmVmPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAog
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFJlZlB0
cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4mJiBwcm90b3R5cGVBY2Nlc3NDaGFpbiwgYm9vbCB2aWFQ
cm94eSwgCi0gICAgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGN1c3RvbVNldHRl
ciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQorICAgIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQ
dHJUYWc+IGN1c3RvbVNldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQogewogICAgIEFT
U0VSVCh0eXBlID09IFNldHRlciB8fCB0eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IHR5cGUg
PT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5l
dyBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKHZtLCBvd25lciwgdHlwZSwgaWRlbnRpZmllciwgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHksIG51bGxwdHIsIGN1c3RvbVNs
b3RCYXNlLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkpOwotICAgIHJlc3VsdC0+bV9j
dXN0b21BY2Nlc3NvciA9IGN1c3RvbVNldHRlciA/IEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29y
UHRyVGFnPihjdXN0b21TZXR0ZXIpIDogbnVsbHB0cjsKKyAgICByZXN1bHQtPm1fY3VzdG9tQWNj
ZXNzb3IgPSBjdXN0b21TZXR0ZXIgPyBjdXN0b21TZXR0ZXIgOiBudWxscHRyOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIEdldHRlclNldHRlckFjY2Vz
c0Nhc2U6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQsIENvbW1hUHJpbnRlciYgY29tbWEsIElu
ZAogICAgIG91dC5wcmludChjb21tYSwgImN1c3RvbVNsb3RCYXNlID0gIiwgUmF3UG9pbnRlcihj
dXN0b21TbG90QmFzZSgpKSk7CiAgICAgaWYgKGNhbGxMaW5rSW5mbygpKQogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJjYWxsTGlua0luZm8gPSAiLCBSYXdQb2ludGVyKGNhbGxMaW5rSW5mbygp
KSk7Ci0gICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9tQWNjZXNzb3IgPSAiLCBSYXdQb2ludGVy
KG1fY3VzdG9tQWNjZXNzb3IuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIG91dC5wcmludChj
b21tYSwgImN1c3RvbUFjY2Vzc29yID0gIiwgUmF3UG9pbnRlcihtX2N1c3RvbUFjY2Vzc29yLnRh
Z2dlZFB0cigpKSk7CiB9CiAKIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJ
VEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBjb25zdCBET01KSVQ6OkdldHRl
clNldHRlciogZG9tSklULCBHUFJSZWcgYmFzZUZvckdldEdQUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oCmluZGV4
IDk2NTdiZjI2MDQzZC4uZDc2ZmM4ODk0MTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgKQEAgLTU1LDE5ICs1
NSwxOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVmPEFjY2Vzc0Nhc2U+IGNyZWF0ZSgKICAg
ICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBDYWNoZWFibGVJZGVudGlmaWVy
LCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFs
U2V0LCBGdW5jdGlvblB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tR2V0dGVyLAorICAg
ICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wgdmlhUHJveHksIFdh
dGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+
IGN1c3RvbUdldHRlciwKICAgICAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBzdGQ6Om9w
dGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hh
aW4+JiYpOwogCiAgICAgc3RhdGljIFJlZjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwq
IG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBQcm9w
ZXJ0eU9mZnNldCwKICAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBS
ZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+JiYsIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKLSAg
ICAgICAgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGN1c3RvbVNldHRlciA9IG51
bGxwdHIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOworICAgICAgICBDb2Rl
UHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21TZXR0ZXIgPSBudWxscHRyLCBKU09iamVj
dCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKIAogICAgIHZvaWQgZHVtcEltcGwoUHJpbnRT
dHJlYW0mLCBDb21tYVByaW50ZXImLCBJbmRlbnRlciYpIGNvbnN0IGZpbmFsOwogICAgIFJlZjxB
Y2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0IGZpbmFsOwogCiAgICAgfkdldHRlclNldHRlckFjY2Vz
c0Nhc2UoKSBmaW5hbDsKIAotICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBj
dXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3I7IH0KKyAgICBD
b2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0
dXJuIG1fY3VzdG9tQWNjZXNzb3I7IH0KIAogcHJpdmF0ZToKICAgICBHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJv
cGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgSlNPYmplY3Qq
IGN1c3RvbVNsb3RCYXNlLCBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+JiYpOwpAQCAtNzYs
NyArNzYsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2N1c3Rv
bVNsb3RCYXNlOwogICAgIE9wdGltaXppbmdDYWxsTGlua0luZm8qIG1fY2FsbExpbmtJbmZvIHsg
bnVsbHB0ciB9OwotICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBtX2N1c3Rv
bUFjY2Vzc29yOworICAgIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IG1fY3VzdG9tQWNj
ZXNzb3I7CiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBtX2RvbUF0
dHJpYnV0ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmgKaW5kZXggOTZlNzMxYWVmOWY4Li43NzkzMzk0OWI5ZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
CkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCAh
PSBHZW5lcmF0ZWRGaW5hbENvZGUpOwogICAgIH0KICAgICAKLSAgICBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0KEtpbmQga2luZCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBjb2RlKQorICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQoS2luZCBraW5kLCBDb2RlUHRy
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlKQogICAgICAgICA6IG1fa2luZChraW5kKQogICAg
ICAgICAsIG1fY29kZShjb2RlKQogICAgIHsKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAg
IAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIAotICAgIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUoKSBj
b25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICBjb25zdCBDb2RlUHRyPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiYgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZTsgfQogICAgIAogICAgIGJvb2wg
bWFkZU5vQ2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBNYWRlTm9DaGFuZ2VzOyB9
CiAgICAgYm9vbCBnYXZlVXAoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gR2F2ZVVwOyB9CkBA
IC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICBLaW5kIG1fa2lu
ZDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IG1fY29k
ZTsKKyAgICBDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGU7CiAgICAgVmVjdG9y
PHN0ZDo6cGFpcjxJbmxpbmVXYXRjaHBvaW50U2V0JiwgU3RyaW5nRmlyZURldGFpbD4+IG1fd2F0
Y2hwb2ludHNUb0ZpcmU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVw
YXRjaC5jcHAKaW5kZXggYjliMTJiYTRhYTg3Li5hYjE4OTc5NzdjY2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0
aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQogCiB2b2lkIGxpbmtN
b25vbW9ycGhpY0NhbGwoCiAgICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAgIEpT
T2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyKQorICAgIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cikKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwogCkBAIC0xNjYsNyArMTY2
LDcgQEAgdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8p
CiAgICAgICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJTGlua0NhbGwo
KS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQsIEpTT2JqZWN0KiBjYWxsZWUpCitDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpz
VG9XYXNtSUNDb2RlUHRyKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNPYmplY3QqIGNh
bGxlZSkKIHsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYgKCFjYWxsZWUpCkBAIC0x
ODQsMjYgKzE4NCwyNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNU
b1dhc21JQ0NvZGVQdHIoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraQogCiAjaWYgRU5BQkxFKEpJ
VCkKIAotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdPcGVyYXRpb25X
aXRoVmFsaWRhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKK3N0
YXRpYyBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlv
bihDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gb3BlcmF0aW9uKQogewogICAgIEpTQ19SRVRVUk5f
UkVUQUdHRURfT1BFUkFUSU9OX1dJVEhfVkFMSURBVElPTihvcGVyYXRpb24pOwogfQogCi1zdGF0
aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZXRhZ0NhbGxUYXJnZXRXaXRoVmFsaWRh
dGlvbihDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwpCitzdGF0aWMgQ29k
ZVB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKENvZGVM
b2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCkKIHsKICAgICBKU0NfUkVUVVJOX1JF
VEFHR0VEX0NBTExfVEFSR0VUX1dJVEhfVkFMSURBVElPTihjYWxsKTsKIH0KIAotc3RhdGljIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorc3RhdGljIENvZGVQdHI8
Q0Z1bmN0aW9uUHRyVGFnPiByZWFkUHV0SUNDYWxsVGFyZ2V0KENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNl
RGF0YUlDKCkpCiAgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKHN0
dWJJbmZvLm1fc2xvd09wZXJhdGlvbik7CiAgICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFs
UHRyVGFnPiBjYWxsID0gc3R1YkluZm8ubV9zbG93UGF0aENhbGxMb2NhdGlvbjsKICNpZiBFTkFC
TEUoRlRMX0pJVCkKICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRM
SklUKSB7Ci0gICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQgPSBNYWNy
b0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwpOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRodW5rID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNz
KHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgcmV0dXJuIHJldGFnT3BlcmF0
aW9uV2l0aFZhbGlkYXRpb24oY29kZUJsb2NrLT52bSgpLmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1Bh
dGhDYWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKSk7CisgICAgICAgIENvZGVQdHI8SklUVGh1
bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVu
a1B0clRhZz4oY2FsbCk7CisgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0
aW9uKGNvZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHRh
cmdldCkuY2FsbFRhcmdldCgpKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb2Rl
QmxvY2spOwpAQCAtMjExLDE3ICsyMTAsMTYgQEAgc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3QKICAg
ICByZXR1cm4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oY2FsbCk7CiB9CiAKLXZvaWQg
ZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRp
b25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxs
LCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAjaWYgRU5B
QkxFKEZUTF9KSVQpCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZU
TEpJVCkgewogICAgICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgICAgIEZUTDo6
VGh1bmtzJiB0aHVua3MgPSAqdm0uZnRsVGh1bmtzOwotICAgICAgICBGdW5jdGlvblB0cjxKSVRU
aHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRo
dW5rUHRyVGFnPihjYWxsKTsKLSAgICAgICAgYXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNz
KHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgQ29kZVB0cjxKSVRUaHVua1B0
clRhZz4gc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRU
aHVua1B0clRhZz4oY2FsbCk7CiAgICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRo
dW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRodW5rKTsKICAgICAgICAga2V5
ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIHRodW5rcy5nZXRTbG93UGF0aENhbGxUaHVuayh2
bSwga2V5KS5jb2RlKCkudG9GdW5jdGlvblB0cigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDYWxsKGNhbGwsIHRodW5rcy5nZXRTbG93UGF0aENhbGxUaHVuayh2bSwga2V5KS5j
b2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQp
CkBAIC0yMzAsNyArMjI4LDcgQEAgdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFAKICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3Bl
cmF0aW9uUHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2FsbChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQorc3RhdGljIHZvaWQgcmVw
YXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7
CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgc3R1YkluZm8ubV9z
bG93T3BlcmF0aW9uID0gbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFn
PigpOwpAQCAtMjg0LDcgKzI4Miw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgZmlyZVdh
dGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQoVk0mIHZtLCBTdHJ1Y3R1cmVTCiAgICAgfQog
fQogCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGlt
aXppbmdHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoraW5saW5lIENvZGVQdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBr
aW5kKQogewogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgpA
QCAtMzA1LDcgKzMwMyw3IEBAIGlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFw
cHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oR2V0QnlLaW5kCiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoraW5saW5lIENv
ZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rpb24oR2V0QnlLaW5k
IGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6
CkBAIC01NDQsNyArNTQyLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKgogCiAgICAgICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCiAgICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9m
ZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpID8gRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KHNsb3QuY3VzdG9t
R2V0dGVyKCkpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Qud2F0Y2hw
b2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBDb2RlUHRyPEN1c3RvbUFjY2Vz
c29yUHRyVGFnPihzbG90LmN1c3RvbUdldHRlcigpKSA6IG51bGxwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpICE9
IGJhc2VWYWx1ZSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkb21BdHRyaWJ1dGUsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC03MTcsNyArNzE1LDcgQEAgdm9pZCByZXBhdGNoQXJyYXlHZXRC
eVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlMKICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVy
YXRpb25HZXRCeVZhbEdlbmVyaWMpOwogfQogCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5
U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQorc3RhdGlj
IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9u
KGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2lu
ZCBwdXRLaW5kKQogewogICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CiAgICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5SWQ6IHsKQEAgLTc2NCw3ICs3NjIsNyBAQCBzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFBybwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5
U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQorc3RhdGlj
IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0
aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0
S2luZCBwdXRLaW5kKQogewogICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CiAgICAgY2FzZSBQdXRC
eUtpbmQ6OkJ5SWQ6CkBAIC0xMjA5LDcgKzEyMDcsNyBAQCB2b2lkIHJlcGF0Y2hEZWxldGVCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRl
UAogICAgIH0KIH0KIAotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9w
cmlhdGVPcHRpbWl6aW5nSW5CeUZ1bmN0aW9uKEluQnlLaW5kIGtpbmQpCitpbmxpbmUgQ29kZVB0
cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihJbkJ5
S2luZCBraW5kKQogewogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgSW5CeUtpbmQ6OkJ5
SWQ6CkBAIC0xMjIyLDcgKzEyMjAsNyBAQCBpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVuY3Rpb24oSW5CeUtpbmQgawogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWlubGluZSBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5k
KQoraW5saW5lIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5
RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKIHsKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNl
IEluQnlLaW5kOjpCeUlkOgpAQCAtMTU3NSw3ICsxNTczLDcgQEAgdm9pZCByZXBhdGNoSW5zdGFu
Y2VPZigKIAogdm9pZCBsaW5rRGlyZWN0Q2FsbCgKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
T3B0aW1pemluZ0NhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNv
ZGVCbG9jaywKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cikKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgQVNTRVJUKCFj
YWxsTGlua0luZm8uc3R1YigpKTsKICAgICAKQEAgLTE2MTgsNyArMTYxNiw3IEBAIHN0YXRpYyB2
b2lkIGxpbmtWaXJ0dWFsRm9yKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJCiBuYW1lc3BhY2Ugewogc3RydWN0IENhbGxUb0NvZGVQdHIgewogICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBjb2RlUHRyOworICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsK
IH07CiB9IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNlCiAKQEAgLTE4MzIsNyArMTgzMCw3IEBAIHZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAgICAgICAgIFBvbHltb3JwaGljQ2FsbENhc2UmIGNhbGxD
YXNlID0gY2FsbENhc2VzW2Nhc2VJbmRleF07CiAgICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQg
PSBjYWxsQ2FzZS52YXJpYW50KCk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICAgICAgQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyOwogICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkpIHsKICAgICAg
ICAgICAgIEFTU0VSVCh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7
CiAgICAgICAgICAgICAKQEAgLTE5MTYsNyArMTkxNCw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q2FsCiAgICAgLy8gMy4gSWYgd2UncmUgYSBkYXRhIElDLCB0aGVuIHRoZSByZXR1cm4gYWRkcmVz
cyBpcyBhbHJlYWR5IGNvcnJlY3QKICAgICAvLyBUaHVzIHdlIG5lZWQgdG8gcHV0IGl0IGZvciB0
aGUgc2xvdy1wYXRoIGNhbGwuCiAgICAgaWYgKCFpc0RhdGFJQykgewotICAgICAgICBzdHViSml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5kb25lTG9jYXRp
b24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAg
ICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZv
LmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkUHRyKCkpLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgICAg
IHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBhcmUgbm90IGRvaW5nIGEgcmVh
bCB0YWlsLWNhbGwgaW4gdGhpcyBjYXNlLiBXZSBsZWF2ZSBzdGFjayBlbnRyaWVzIGluIHRoZSBj
YWxsZXIsIGFuZCB3ZSBhcmUgbm90IHJ1bm5pbmcgcHJlcGFyZUZvclRhaWxDYWxsLCB0aHVzLApA
QCAtMTkyOSw3ICsxOTI3LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICAgICAgICAg
ICAgICBBU1NFUlQoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmpp
dFR5cGUoKSkpOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENh
bGwoKSkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihKSVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvciku
Y29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAg
ICAgICAgICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZt
LmdldENUSVN0dWIoSklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IpLmNvZGUoKS51bnRh
Z2dlZFB0cigpKSwgR1BSSW5mbzo6cmVnVDQpOwogICAgICAgICAgICAgICAgIHN0dWJKaXQucmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTM4LDcgKzE5MzYsNyBAQCB2b2lkIGxpbmtQ
b2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENhbAogICAgICAgICAgICAgLy8gV2hpbGUgQmFzZWxpbmUgLyBMTEludCBzaGFy
ZXMgQmFzZWxpbmVDYWxsTGlua0luZm8sIE9wdGltaXppbmdDYWxsTGlua0luZm8gaXMgZXhjbHVz
aXZlbHkgdXNlZCBmb3Igb25lIEpJVCBjb2RlLgogICAgICAgICAgICAgLy8gVGh1cywgd2UgY2Fu
IHNhZmVseSB1c2UgZG9uZUxvY2F0aW9uLgogICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5p
c1RhaWxDYWxsKCkpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgICAgICAgICAgICAgc3R1Ykpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0
aW9uKCkudW50YWdnZWRQdHIoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAgICAgICAgICAgICBz
dHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk1Niw3ICsxOTU0LDcgQEAg
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChjYWxsQ2Fz
ZXMuc2l6ZSgpID09IGNhbGxzLnNpemUoKSk7CiAgICAgZm9yIChDYWxsVG9Db2RlUHRyIGNhbGxU
b0NvZGVQdHIgOiBjYWxscykKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRy
LmNhbGwsIGNhbGxUb0NvZGVQdHIuY29kZVB0ci50b0Z1bmN0aW9uUHRyKCkpOworICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgY2FsbFRvQ29kZVB0ci5jb2RlUHRy
KTsKIAogICAgIGlmICghZG9uZS5lbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVCghaXNEYXRhSUMp
OwpAQCAtMTk2OCw3ICsxOTY2LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICAgICAg
RklOQUxJWkVfQ09ERV9GT1IoCiAgICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVm
ZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgICAgICJQb2x5bW9ycGhpYyBjYWxs
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldHMgJXMiLAotICAgICAgICAgICAg
ICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1ibHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2Rl
QmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCisgICAgICAgICAgICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0
b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0
aW9uKCkudGFnZ2VkUHRyKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGNh
bGxDYXNlcykpLmRhdGEoKSksCiAgICAgICAgIHZtLCBvd25lciwgY2FsbEZyYW1lLT5jYWxsZXJG
cmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcywKICAgICAgICAgV1RGTW92ZShmYXN0Q291
bnRzKSkpOwpAQCAtMjAwOCwxMSArMjAwNiwxMSBAQCB2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbgog
CiB2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCiB7Ci0gICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4g
b3B0aW1pemVkRnVuY3Rpb247CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5SWQ6IHsKICAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIEZ1bmN0aW9uVHlwZSB1
bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQ
dXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5m
bykudGFnZ2VkUHRyKCkpOwogICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplKQogICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CiAgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKQEAgLTIwMzEsNyArMjAy
OSw3IEBAIHZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQga2luCiAgICAgfQogICAgIGNhc2UgUHV0QnlLaW5k
OjpCeVZhbDogewogICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGlt
aXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0Nh
bGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxG
dW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykudGFn
Z2VkUHRyKCkpOwogICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplKQogICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOwogICAgICAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaAppbmRleCBiYWE3NGQ5NjZlZmUu
LjhlMjQxZWUzMGE0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5o
CkBAIC03MSw4ICs3MSw4IEBAIHZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9i
amVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlCiB2b2lkIHJlcGF0Y2hD
aGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0Kiwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaFNl
dFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQg
cmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBK
U1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1YkluZm8mLCBib29sIHdhc0ZvdW5kKTsKLXZv
aWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENv
ZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPik7Ci12b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIE9wdGltaXppbmdDYWxs
TGlua0luZm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4pOwordm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKFZNJiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJ
bmZvJiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxlZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFn
Pik7Cit2b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIE9wdGltaXppbmdDYWxsTGlua0lu
Zm8mLCBDb2RlQmxvY2sqLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKIHZvaWQgbGlua1Nsb3dG
b3IoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxs
TGlua0luZm8mKTsKIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKQEAgLTg0LDggKzg0LDcgQEAg
dm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owogdm9pZCByZXNldEluc3RhbmNlT2YoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
IHZvaWQgcmVzZXRDaGVja1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwogdm9pZCByZXNldFNldFByaXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiwgQ29kZUxv
Y2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBuZXdDYWxsZWVGdW5jdGlvbik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4ganNUb1dhc21JQ0NvZGVQdHIoQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqIGNh
bGxlZSk7Ci0KK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayosIENvZGVM
b2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4sIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBu
ZXdDYWxsZWVGdW5jdGlvbik7CitDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2Rl
UHRyKENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiBjYWxsZWUpOwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9S
ZXBhdGNoSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJ
bmxpbmVzLmgKaW5kZXggMWNjN2ZmNDNhZTk2Li42MTAwOTk0MTA0YzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDE5ICs0OSwxOSBA
QCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZQogICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxv
d0dDOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgICAgIHZt
LmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGgoKS5jb2RlKCkudGFnZ2VkUHRyKCksCiAgICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIExMSW50
OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpLAorICAgICAgICAgICAgICAgIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50
cnlwb2ludCgpLmNvZGUoKS50YWdnZWRQdHIoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwg
PyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KIAogICAgICAgICBB
U1NFUlQoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CiAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9y
KGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0g
ICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS50YWdnZWRQdHIoKSwKICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KIApAQCAtNzcsMTcg
Kzc3LDE3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lCiAgICAgICAgIERpc2FsbG93R0MgZGlz
YWxsb3dHQzsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElU
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGgoKS5jb2RlKCkudGFnZ2VkUHRyKCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChMTEludDo6Z2V0SG9zdENhbGxSZXR1
cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkudGFnZ2VkUHRyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KIAogICAgIEFTU0VSVChjb25zdHJ1Y3REYXRh
LnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwogICAgIHRocm93RXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwg
Y2FsbGVlKSk7CiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgdm0uZ2V0Q1RJVGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCks
CisgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUo
KS50YWdnZWRQdHIoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7CiB9CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0
dXJuVHlwZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0Kgog
ICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFz
VmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKICAgICAgICAgaWYgKGF1
dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPihj
YWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihraW5kKTsKKyAgICAgICAgICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZt
LmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKIAogICAgICAgICAgICAgaWYgKCFjYWxsTGlua0lu
Zm8tPnNlZW5PbmNlKCkpCkBAIC0xMTQsNyArMTE0LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0
aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVj
dCoKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxs
KHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlv
biwgY29kZVB0cik7CiAKLSAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9IGNvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9IGNv
ZGVQdHIudGFnZ2VkUHRyKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtl
ZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgp
ID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogICAg
ICAgICB9CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0
Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0lu
Zm8pKTsKQEAgLTEyNCw3ICsxMjQsNyBAQCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KgogICAgIEpT
U2NvcGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CiAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICBDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogCiAg
ICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gYW55IGNv
ZGUgdW50aWwgYWZ0ZXIgd2UgbGluayB0aGUgY2FsbC4KQEAgLTEzNyw3ICsxMzcsNyBAQCBBTFdB
WVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJh
bWUsIEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUp
OwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAg
ICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHZvaWQq
IHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCku
Y29kZSgpLnRhZ2dlZFB0cigpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJv
d1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAg
IH07CiAKQEAgLTE2Niw3ICsxNjYsNyBAQCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KgogICAgIGVs
c2UKICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlu
a0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKIAotICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZy
YW1lIDogS2VlcFRoZUZyYW1lKSk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLnRh
Z2dlZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2Rl
KCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoRnVuY3Rp
b24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxs
KQpAQCAtMTgyLDkgKzE4Miw5IEBAIEFMV0FZU19JTkxJTkUgU2xvd1BhdGhSZXR1cm5UeXBlIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgY2FsbGVl
QXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWND
YXN0PEludGVybmFsRnVuY3Rpb24qPihjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRl
cm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAgICAgIENvZGVQdHI8SlNF
bnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKGtpbmQpOwogICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWls
ID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChjb2RlUHRyLnRhZ2dlZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihj
YWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1l
IDogS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNh
bGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwogICAgIH0KQEAgLTE5OSw3ICsxOTksNyBAQCBB
TFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsK
IAogICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAg
ICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICB2b2lkKiB0
aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNv
ZGUoKS50YWdnZWRQdHIoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dU
YXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9
OwogCkBAIC0yMTYsNyArMjE2LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUg
dmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAvLyBG
SVhNRTogU3VwcG9ydCB3YXNtIElDLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGV4ZWN1dGFibGUt
PmVudHJ5cG9pbnRGb3IoCi0gICAgICAgIGtpbmQsIE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkudGFnZ2VkUHRyKCksCiAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9
PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHAKaW5kZXggZDI5MjQxMjY1YThmLi5hMTVkMzlmNjU1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcApAQCAtNDEx
LDcgKzQxMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2V0Q2Fj
aGVUeXBlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmCiAgICAgbV9jYWNoZVR5cGUgPSBu
ZXdDYWNoZVR5cGU7CiB9CiAKLXN0YXRpYyBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IHNs
b3dPcGVyYXRpb25Gcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhjb25zdCBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQorc3RhdGljIENvZGVQdHI8T3BlcmF0
aW9uUHRyVGFnPiBzbG93T3BlcmF0aW9uRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oY29u
c3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKIHsKICAgICBz
d2l0Y2ggKHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSkgewogICAgIGNhc2UgQWNjZXNzVHlw
ZTo6RGVsZXRlQnlWYWw6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IGQyNDBmYTI1ZGU4OC4uZGQ0ZTZjODgyNmEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aApAQCAtMzkyLDEwICszOTIsMTAgQEAgcHVibGljOgogCiAgICAgdW5pb24gewogICAgICAgICBD
b2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhDYWxsTG9jYXRpb247
Ci0gICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gbV9zbG93T3BlcmF0aW9uOwor
ICAgICAgICBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gbV9zbG93T3BlcmF0aW9uOwogICAgIH07
CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IG1fY29k
ZVB0cjsKKyAgICBDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGVQdHI7CiAKICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAKaW5kZXggNGRkMjA0NTk3OTM5Li5hOTI1NjM3YjUyYTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAKQEAg
LTE2Miw3ICsxNjIsNyBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTGlua0J1ZgogICAgICAgICBwcmVmaXhC
dWZmZXJbaSArIHByZWZpeExlbmd0aF0gPSAnICc7CiAgICAgcHJlZml4QnVmZmVyW3ByZWZpeExl
bmd0aCArIGFtb3VudE9mTm9kZVdoaXRlU3BhY2VdID0gMDsKICAgICAKLSAgICB2b2lkKiBjb2Rl
U3RhcnQgPSBsaW5rQnVmZmVyLmVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGNvZGVTdGFydCA9IGxpbmtCdWZmZXIu
ZW50cnlwb2ludDxEaXNhc3NlbWJseVB0clRhZz4oKS51bnRhZ2dlZFB0cigpOwogICAgIHZvaWQq
IGNvZGVFbmQgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvZGVTdGFydCkgKyAgbGlua0J1ZmZl
ci5zaXplKCk7CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxEaXNhc3NlbWJseVB0clRhZz4gc3Rh
cnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJUYWc+KHByZXZpb3VzTGFi
ZWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IGNhNTY2ZDNhNDg0ZS4u
NWNmOWIwMDhiN2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC0xMDc4
LDcgKzEwNzgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiAqbV91bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaW5kZXhdOyB9CiAgICAgU3Ry
aW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0
dXJuIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpbmRleF07IH0KIAotICAgIHZvaWQgYXBwZW5k
Q2F0Y2hFbnRyeXBvaW50KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1hY2hpbmVDb2RlLCBWZWN0b3I8Rmx1
c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRzKQorICAgIHZvaWQgYXBwZW5kQ2F0Y2hFbnRyeXBv
aW50KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPiBtYWNoaW5lQ29kZSwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0
cykKICAgICB7CiAgICAgICAgIG1fY2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQoQ2F0Y2hFbnRyeXBv
aW50RGF0YSB7IG1hY2hpbmVDb2RlLCBGaXhlZFZlY3RvcjxGbHVzaEZvcm1hdD4oV1RGTW92ZShh
cmd1bWVudEZvcm1hdHMpKSwgYnl0ZWNvZGVJbmRleCB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IGNiZDYyMjExMGQzNC4uNWE5
YjhhYjQ4MTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcApAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikKICAgICAgICAgQVNTRVJUKG1fZXhpdFNpdGVMYWJlbHMuc2l6ZSgpID09
IG1fb3NyRXhpdC5zaXplKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9l
eGl0U2l0ZUxhYmVscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmVjdG9yPExhYmVsPiYg
bGFiZWxzID0gbV9leGl0U2l0ZUxhYmVsc1tpXTsKLSAgICAgICAgICAgIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+IGFkZHJlc3NlczsKKyAgICAgICAgICAg
IFZlY3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBhZGRyZXNzZXM7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGFiZWxzLnNpemUoKTsgKytqKQogICAgICAgICAg
ICAgICAgIGFkZHJlc3Nlcy5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGxhYmVsc1tqXSkpOwogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5h
ZGRPU1JFeGl0U2l0ZShhZGRyZXNzZXMpOwpAQCAtNTM1LDExICs1MzUsMTEgQEAgdm9pZCBKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICBtX3NwZWN1bGF0aXZlLT5saW5rT1NSRW50
cmllcygqbGlua0J1ZmZlcik7CiAgICAgCiAgICAgaWYgKHJlcXVpcmVzQXJpdHlGaXh1cCkKLSAg
ICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgdm0oKS5nZXRDVElTdHViKGFy
aXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKS50b0Z1bmN0aW9uUHRyKCkpOworICAgICAgICBsaW5r
QnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCB2bSgpLmdldENUSVN0dWIoYXJpdHlGaXh1cEdl
bmVyYXRvcikuY29kZSgpKTsKIAogICAgIGRpc2Fzc2VtYmxlKCpsaW5rQnVmZmVyKTsKIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IGxp
bmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oYXJpdHlDaGVjayk7CisgICAgQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXItPmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4oYXJpdHlDaGVjayk7CiAKICAgICBtX2ppdENvZGUtPmluaXRpYWxp
emVDb2RlUmVmRm9yREZHKAogICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbGlua0J1ZmZlciwg
SlNFbnRyeVB0clRhZywgIkRGRyBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2Nr
V2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkRGR0pJVCkpLmRhdGEoKSksCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggMjAzOGNjM2JhOTVj
Li40NDE0OWE5MzM4YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgKQEAgLTY2LDE0ICs2NiwxNCBAQCBzdHJ1Y3QgT1NSRXhpdDsKIC8vIEV2ZXJ5IENhbGxM
aW5rUmVjb3JkIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjYWxsIGluc3RydWN0aW9uICYg
dGhlIGZ1bmN0aW9uCiAvLyB0aGF0IGl0IG5lZWRzIHRvIGJlIGxpbmtlZCB0by4KIHN0cnVjdCBD
YWxsTGlua1JlY29yZCB7Ci0gICAgQ2FsbExpbmtSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBmdW5jdGlvbikKKyAgICBDYWxsTGlu
a1JlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBDb2RlUHRyPE9wZXJhdGlvblB0clRh
Zz4gZnVuY3Rpb24pCiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAgICwgbV9mdW5jdGlv
bihmdW5jdGlvbikKICAgICB7CiAgICAgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9j
YWxsOwotICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gbV9mdW5jdGlvbjsKKyAgICBD
b2RlUHRyPE9wZXJhdGlvblB0clRhZz4gbV9mdW5jdGlvbjsKIH07CiAKIC8vID09PSBKSVRDb21w
aWxlciA9PT0KQEAgLTE0MSwxNCArMTQxLDE0IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBB
ZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4K
LSAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBm
dW5jdGlvbikKKyAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGZ1
bmN0aW9uQ2FsbCwgZnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSk7CiAgICAg
ICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgfQogCi0gICAgQ2FsbCBhcHBlbmRPcGVyYXRp
b25DYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAg
Q2FsbCBhcHBlbmRPcGVyYXRpb25DYWxsKGNvbnN0IENvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPiBm
dW5jdGlvbikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbChPcGVyYXRp
b25QdHJUYWcpOwogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChmdW5jdGlv
bkNhbGwsIGZ1bmN0aW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVEZpbmFsaXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZp
bmFsaXplci5jcHAKaW5kZXggY2NkNzVjZmYxYjg2Li5lYTVlYzk5OTQ2M2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKQEAgLTM2LDcgKzM2LDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1KSVRGaW5hbGl6ZXI6OkpJ
VEZpbmFsaXplcihQbGFuJiBwbGFuLCBSZWY8SklUQ29kZT4mJiBqaXRDb2RlLCBzdGQ6OnVuaXF1
ZV9wdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorSklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxh
biYgcGxhbiwgUmVmPEpJVENvZGU+JiYgaml0Q29kZSwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZm
ZXI+IGxpbmtCdWZmZXIsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCiAg
ICAgOiBGaW5hbGl6ZXIocGxhbikKICAgICAsIG1faml0Q29kZShXVEZNb3ZlKGppdENvZGUpKQog
ICAgICwgbV9saW5rQnVmZmVyKFdURk1vdmUobGlua0J1ZmZlcikpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAppbmRleCBkYjRlMmIxNTNjOWYuLjhmOWM4M2Mx
Y2UwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCkBA
IC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3Mg
SklURmluYWxpemVyIGZpbmFsIDogcHVibGljIEZpbmFsaXplciB7CiBwdWJsaWM6Ci0gICAgSklU
RmluYWxpemVyKFBsYW4mLCBSZWY8SklUQ29kZT4mJiwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZm
ZXI+LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sg
PSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+OjpFbXB0eVZhbHVlKSk7CisgICAgSklURmluYWxpemVyKFBsYW4m
LCBSZWY8SklUQ29kZT4mJiwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+LCBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+OjpFbXB0eVZhbHVlKSk7CiAgICAgfkpJVEZpbmFsaXplcigpIGZp
bmFsOwogICAgIAogICAgIHNpemVfdCBjb2RlU2l6ZSgpIGZpbmFsOwpAQCAtNDUsNyArNDUsNyBA
QCBwcml2YXRlOgogICAgIAogICAgIFJlZjxKSVRDb2RlPiBtX2ppdENvZGU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPExpbmtCdWZmZXI+IG1fbGlua0J1ZmZlcjsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gbV93aXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IG1fd2l0aEFyaXR5Q2hlY2s7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IGY5ZmY1MDY1OGU5My4uNDYx
NDQ3YjE2MmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtMjc5LDcgKzI3
OSw3IEBAIHN0cnVjdCBTdGFja0FjY2Vzc0RhdGEgewogfTsKIAogc3RydWN0IENhbGxET01HZXR0
ZXJEYXRhIHsKLSAgICBGdW5jdGlvblB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tQWNj
ZXNzb3JHZXR0ZXI7CisgICAgQ29kZVB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tQWNj
ZXNzb3JHZXR0ZXI7CiAgICAgY29uc3QgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVCB7IG51
bGxwdHIgfTsKICAgICBET01KSVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0KiBzbmlwcGV0IHsgbnVs
bHB0ciB9OwogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgeyAwIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCmluZGV4IDgwMmI5MjM5YWU1YS4uYzcwZjZj
YjJlMjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIE9T
UkVudHJ5RGF0YTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQobV9ieXRlY29kZUluZGV4LCAiLCBtYWNo
aW5lIGNvZGUgPSAiLCBSYXdQb2ludGVyKG1fbWFjaGluZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOworICAgIG91dC5wcmludChtX2J5dGVjb2RlSW5kZXgsICIsIG1hY2hpbmUgY29kZSA9ICIs
IFJhd1BvaW50ZXIobV9tYWNoaW5lQ29kZS50YWdnZWRQdHIoKSkpOwogICAgIG91dC5wcmludCgi
LCBzdGFjayBydWxlcyA9IFsiKTsKICAgICAKICAgICBhdXRvIHByaW50T3BlcmFuZCA9IFsmXSAo
VmlydHVhbFJlZ2lzdGVyIHJlZykgewpAQCAtMjUyLDggKzI1Miw4IEBAIHZvaWQqIHByZXBhcmVP
U1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvCiAgICAgCiAgICAgKmJpdHdpc2VfY2FzdDxzaXplX3QqPihzY3JhdGNoICsgMCkg
PSBmcmFtZVNpemU7CiAgICAgCi0gICAgdm9pZCogdGFyZ2V0UEMgPSBlbnRyeS0+bV9tYWNoaW5l
Q29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+
aml0Q29kZSgpLT5jb250YWlucyhlbnRyeS0+bV9tYWNoaW5lQ29kZS51bnRhZ2dlZEV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICB2b2lkKiB0YXJnZXRQQyA9IGVudHJ5LT5tX21hY2hpbmVDb2Rl
LnRhZ2dlZFB0cigpOworICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5j
b250YWlucyhlbnRyeS0+bV9tYWNoaW5lQ29kZS51bnRhZ2dlZFB0cigpKSk7CiAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIE9TUiB1c2luZyB0YXJnZXQgUEMgIiwg
UmF3UG9pbnRlcih0YXJnZXRQQykpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldFBDKTsKICAg
ICAqYml0d2lzZV9jYXN0PHZvaWQqKj4oc2NyYXRjaCArIDEpID0gdGFnQ29kZVB0cldpdGhTdGFj
a1BvaW50ZXJGb3JKSVRDYWxsKHVudGFnQ29kZVB0cjxPU1JFbnRyeVB0clRhZz4odGFyZ2V0UEMp
LCBjYWxsRnJhbWUpOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNv
CiAgICAgcmV0dXJuIHNjcmF0Y2g7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBDb2RlQmxvY2sqIG9wdGlt
aXplZENvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorQ29kZVB0cjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBDb2RlQmxvY2sqIG9w
dGltaXplZENvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIEFT
U0VSVChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQgfHwg
b3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKTsKICAgICBB
U1NFUlQob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxs
VmFsaWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKaW5kZXggYjli
ZTE5NzllNWMwLi5kNzg0NWUzMWNlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmgKQEAgLTc1LDcgKzc1LDcgQEAgaW5saW5lIEJ5dGVjb2RlSW5kZXggZ2V0T1NSRW50
cnlEYXRhQnl0ZWNvZGVJbmRleChPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YSkKIHN0cnVjdCBD
YXRjaEVudHJ5cG9pbnREYXRhIHsKICAgICAvLyBXZSB1c2UgdGhpcyB3aGVuIGRvaW5nIE9TUiBl
bnRyeSBhdCBjYXRjaC4gV2UgcHJvdmUgdGhlIGFyZ3VtZW50cwogICAgIC8vIGFyZSBvZiB0aGUg
ZXhwZWN0ZWQgdHlwZSBiZWZvcmUgZW50ZXJpbmcgYXQgYSBjYXRjaCBibG9jay4KLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGU7Cisg
ICAgQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtYWNoaW5lQ29kZTsKICAgICBGaXhl
ZFZlY3RvcjxGbHVzaEZvcm1hdD4gYXJndW1lbnRGb3JtYXRzOwogICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleDsKIH07CkBAIC04NSw5ICs4NSw5IEBAIHN0cnVjdCBDYXRjaEVudHJ5cG9p
bnREYXRhIHsKIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYsIENhbGxGcmFtZSosIENvZGVCbG9j
ayosIEJ5dGVjb2RlSW5kZXgpOwogCiAvLyBJZiBudWxsIGlzIHJldHVybmVkLCB3ZSBjYW4ndCBP
U1IgZW50ZXIuIElmIGl0J3Mgbm90IG51bGwsIGl0J3MgdGhlIFBDIHRvIGp1bXAgdG8uCi1NYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NS
RW50cnkoVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBDb2Rl
QmxvY2sqIG9wdGltaXplZENvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCk7CitDb2RlUHRyPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXgpOwogI2Vsc2UKLWlubGluZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZU9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwg
Q29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCkgeyByZXR1cm4gbnVsbHB0cjsgfQoraW5saW5lIENv
ZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZU9TUkVudHJ5KFZNJiwgQ2FsbEZy
YW1lKiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2Vu
ZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCmluZGV4IDdkNDQ4NDhhZDdkNC4uODEzMTdlNzIwMTZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTUsNyArMjE1LDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBpbGVPU1JFeGl0LCB2b2lkLCAo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHYKICAgICBpZiAoZXhpdC5jb2RlTG9jYXRpb25Gb3JSZXBh
dGNoKCkpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVMb2Nh
dGlvbkZvclJlcGF0Y2goKSwgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRXhpdFB0clRhZz4oZXhpdENv
ZGUuY29kZSgpKSk7CiAKLSAgICB2bS5vc3JFeGl0SnVtcERlc3RpbmF0aW9uID0gZXhpdENvZGUu
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm0ub3NyRXhpdEp1bXBEZXN0aW5hdGlv
biA9IGV4aXRDb2RlLmNvZGUoKS50YWdnZWRQdHIoKTsKIH0KIAogSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJmcmFtZS1hZGRyZXNzIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCA2ZDRmN2M3MWZiNWIuLjJjMzM1
ZWU3ZDQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzOSwxNCArMTM5LDE0IEBAIHZvaWQgaGFuZGxl
RXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYg
ZXhpdCkKICAgICBkb25lQWRqdXN0aW5nLmxpbmsoJmppdCk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRl
eCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZCwgYm9vbCYgY2FsbGVy
SXNMTEludCkKK3N0YXRpYyBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5
dGVjb2RlSW5kZXgsIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGJv
b2wmIGNhbGxlcklzTExJbnQpCiB7CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNl
T1NSRXhpdFRvTExJbnQoKSB8fCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7CiAKICAgICBpZiAoY2FsbEJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKQogICAgICAgICByZXR1cm4gTExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0
RnJvbUlubGluZWRDYWxsVHJhbXBvbGluZVRodW5rKCkuY29kZSgpOwogCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGp1bXBUYXJnZXQ7CisgICAgQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCiAgICAgY29uc3QgYXV0byYgY2FsbEluc3RydWN0aW9u
ID0gKmJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsQnl0
ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKQEAgLTI3Niw3ICsy
NzYsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBhdXRvIGNhbGxCeXRlY29kZUluZGV4ID0g
dHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2lu
ZCwgY2FsbGVySXNMTEludCk7CisgICAgICAgICAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGp1
bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2Fs
bEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCk7CiAKICAg
ICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICAg
ICAgICAgIGppdC5hZGRQdHIoCkBAIC0yODgsMTEgKzI4OCwxMSBAQCB2b2lkIHJlaWZ5SW5saW5l
ZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQog
CiAjaWYgQ1BVKEFSTTY0RSkKICAgICAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9m
KHZvaWQqKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7Ci0g
ICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRh
cmdldC51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAg
ICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdl
dC51bnRhZ2dlZFB0cigpKSwgR1BSSW5mbzo6cmVnVDQpOwogICAgICAgICAgICAgaml0LnRhZ1B0
cihHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDQpOwogICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKEdQUkluZm86OnJlZ1Q0LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0
KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOwogI2Vsc2UKLSAgICAgICAgICAg
IGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldC51
bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JC
eXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOworICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0
LnVudGFnZ2VkUHRyKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlu
bGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOwogI2VuZGlmCiAgICAgICAgIH0KIApA
QCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIGlmIChleGl0VG9M
TEludCkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4KCk7CiAgICAgICAgIGNvbnN0IGF1dG8mIGN1cnJlbnRJbnN0cnVjdGlvbiA9
ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIo
KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0
aW9uOworICAgICAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uOwogICAgICAg
ICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCiAgICAgICAgICAgICBkZXN0aW5hdGlv
biA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKICAg
ICAgICAgZWxzZSAKQEAgLTM5OCwxMyArMzk4LDEzIEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFy
Z2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQog
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9y
RXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQ
Uik7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2tGb3JFeGl0LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpw
YkdQUik7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7Ci0gICAgICAgIGp1
bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CisgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxP
U1JFeGl0UHRyVGFnPigpLnRhZ2dlZFB0cigpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0
YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOwogICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVKSVREYXRhKCkp
LCBKSVQ6OnNfY29uc3RhbnRzR1BSKTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRl
eCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uOworICAgICAgICBDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uOwogICAgICAgICBpZiAoZXhpdEluZGV4LmNoZWNr
cG9pbnQoKSkKICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6OmNoZWNrcG9pbnRPU1JF
eGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOwogICAgICAgICBlbHNlIHsKQEAgLTQxNCw3ICs0
MTQsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKIAogICAgICAgICBBU1NFUlQoZGVzdGluYXRp
b24pOwogCi0gICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0
UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0
aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLnRhZ2dlZFB0cigpOwogICAgIH0KIAog
ICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCBmYTZhMDkxZWQ0YTIuLmM2NDEwMDdiNDUz
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0y
ODMxLDggKzI4MzEsOCBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRmluZFN3
aXRjaEltbVRhcmdldEZvckRvdWJsZSwgY2hhciosIChWTSogdm1QbwogICAgIGRvdWJsZSBhc0Rv
dWJsZSA9IHZhbHVlLmFzRG91YmxlKCk7CiAgICAgaW50MzJfdCBhc0ludDMyID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oYXNEb3VibGUpOwogICAgIGlmIChhc0RvdWJsZSA9PSBhc0ludDMyKQotICAg
ICAgICByZXR1cm4gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUobWluLCBhc0ludDMyKS5leGVjdXRh
YmxlQWRkcmVzczxjaGFyKj4oKTsKLSAgICByZXR1cm4gbGlua2VkVGFibGUubV9jdGlEZWZhdWx0
LmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICByZXR1cm4gbGlua2VkVGFibGUu
Y3RpRm9yVmFsdWUobWluLCBhc0ludDMyKS50YWdnZWRQdHI8Y2hhcio+KCk7CisgICAgcmV0dXJu
IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC50YWdnZWRQdHI8Y2hhcio+KCk7CiB9CiAKIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIGNoYXIqLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgc2l6ZV90IHRhYmxlSW5kZXgsIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlKiB1bmxpbmtlZFRhYmxlLCBKU1N0cmluZyogc3RyaW5nKSkKQEAgLTI4
NDcsNyArMjg0Nyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hT
dHJpbmcsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwotICAgIHJldHVybiBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJsZSwgc3Ry
SW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgcmV0dXJuIGxpbmtlZFRhYmxl
LmN0aUZvclZhbHVlKCp1bmxpbmtlZFRhYmxlLCBzdHJJbXBsKS50YWdnZWRQdHI8Y2hhcio+KCk7
CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21wYXJlU3RyaW5nSW1w
bExlc3MsIHVpbnRwdHJfdCwgKFN0cmluZ0ltcGwqIGEsIFN0cmluZ0ltcGwqIGIpKQpAQCAtMzcz
Nyw3ICszNzM3LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaXJl
Y3RDYWxsLCB2b2lkLCAoT3B0aW1pemluZ0NhbGxMaW5rSW5mbyoKIAogICAgIC8vIEZJWE1FOiBT
dXBwb3J0IHdhc20gSUMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMDMzOQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyOworICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CiAgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsg
Ly8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIGxpbmsgdG8g
aXQuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKaW5kZXggYTBkMThhM2UyNzQ5Li4zMjhmZWNjY2Y0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC01NTAyLDcgKzU1MDIsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUqIG5vZGUsIEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
ICAgICAgICAgYXV0byBzbG93UGF0aEVuZCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICBt
X2ppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc2xvd1BhdGhFbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0gc3RhdGljX2Nhc3Q8Y2hh
cio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihs
aW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLnRhZ2dlZFB0cigpKSAtIHN0YXRpY19j
YXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkudGFnZ2VkUHRy
KCkpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXpl
OwogICAgICAgICAgICAgfSk7CiAjZW5kaWYKQEAgLTU1MjUsNyArNTUyNSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSogbm9kZSwgSklUQmluYXJ5TWF0aElDPEdl
bmVyYXRvcj4qIG1hdGhJCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxp
bmVFbmQgPSBtX2ppdC5sYWJlbCgpOwogICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNo
YXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzcygp
KSAtIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0
PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS50YWdnZWRQdHIoKSkgLSBz
dGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0KS50YWdn
ZWRQdHIoKSk7CiAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwog
ICAgIH0pOwogI2VuZGlmCkBAIC02MTE1LDcgKzYxMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTWF0aElDKE5vZGUqIG5vZGUsIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQwogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgICAgICAgICAgYXV0byBzbG93UGF0
aEVuZCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICBtX2ppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9
IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRp
b25PZihzbG93UGF0aFN0YXJ0KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAg
ICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
c2xvd1BhdGhFbmQpLnRhZ2dlZFB0cigpKSAtIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkudGFnZ2VkUHRyKCkpOwogICAgICAgICAgICAgICAg
IG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgICAgICAgICAgfSk7CiAj
ZW5kaWYKQEAgLTYxMzAsNyArNjEzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVN
YXRoSUMoTm9kZSogbm9kZSwgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDCiAjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBtX2ppdC5sYWJlbCgp
OwogICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKSAtIHN0YXRpY19jYXN0PGNoYXIq
PihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoaW5saW5lRW5kKS50YWdnZWRQdHIoKSkgLSBzdGF0aWNfY2FzdDxjaGFyKj4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0KS50YWdnZWRQdHIoKSk7CiAgICAgICAgIG1h
dGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgIH0pOwogI2VuZGlmCkBAIC0x
MTAwMywxMyArMTEwMDMsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00o
Tm9kZSogbm9kZSkKICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCArIDE7CiAgICAgc3dpdGNoIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykgewogICAgIGNhc2UgMToKLSAgICAgICAgY2FsbE9wZXJhdGlvbihyZWludGVy
cHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dQPihmdW5jdGlvbi5nZXQoKSksIGV4dHJhY3RSZXN1
bHQocmVzdWx0UmVncyksIEpJVENvbXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1faml0LCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcmVnc1swXSk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HUD4o
ZnVuY3Rpb24udW50eXBlZEZ1bmMoKSksIGV4dHJhY3RSZXN1bHQocmVzdWx0UmVncyksIEpJVENv
bXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1faml0LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcmVnc1swXSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgMjoKLSAgICAgICAgY2FsbE9wZXJhdGlvbihyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dQUD4oZnVuY3Rpb24uZ2V0KCkpLCBleHRyYWN0UmVzdWx0KHJlc3VsdFJlZ3MpLCBKSVRD
b21waWxlcjo6TGlua2FibGVDb25zdGFudChtX2ppdCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJlZ3NbMF0sIHJlZ3NbMV0pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR1BQPihmdW5jdGlvbi51
bnR5cGVkRnVuYygpKSwgZXh0cmFjdFJlc3VsdChyZXN1bHRSZWdzKSwgSklUQ29tcGlsZXI6Okxp
bmthYmxlQ29uc3RhbnQobV9qaXQsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCByZWdzWzBdLCByZWdzWzFdKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSAzOgotICAgICAgICBjYWxsT3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRp
b25fR1BQUD4oZnVuY3Rpb24uZ2V0KCkpLCBleHRyYWN0UmVzdWx0KHJlc3VsdFJlZ3MpLCBKSVRD
b21waWxlcjo6TGlua2FibGVDb25zdGFudChtX2ppdCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJlZ3NbMF0sIHJlZ3NbMV0sIHJlZ3NbMl0pOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR1BQUD4o
ZnVuY3Rpb24udW50eXBlZEZ1bmMoKSksIGV4dHJhY3RSZXN1bHQocmVzdWx0UmVncyksIEpJVENv
bXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1faml0LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcmVnc1swXSwgcmVnc1sxXSwgcmVnc1syXSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0xMTAyNCw3ICsxMTAyNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDYWxsRE9NR2V0dGVyKE5vZGUqIG5vZGUpCiB7CiAgICAgRE9NSklUOjpDYWxsRE9NR2V0dGVy
U25pcHBldCogc25pcHBldCA9IG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPnNuaXBwZXQ7CiAg
ICAgaWYgKCFzbmlwcGV0KSB7Ci0gICAgICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRy
VGFnPiBnZXR0ZXIgPSBub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5jdXN0b21BY2Nlc3Nvckdl
dHRlcjsKKyAgICAgICAgQ29kZVB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gZ2V0dGVyID0gbm9k
ZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7CiAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBK
U1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKQEAgLTExMDMzLDcgKzExMDMzLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET01HZXR0ZXIoTm9kZSogbm9kZSkK
IAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklU
Q2FnZSgpKQotICAgICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8Sl9KSVRPcGVyYXRpb25f
R0pJUD4oSklUQ29tcGlsZXI6OkxpbmthYmxlQ29uc3RhbnQobV9qaXQsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1
ZShiYXNlR1BSKSwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0
ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXIpKSwgVHJ1c3RlZEltbVB0cihnZXR0ZXIuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8Sl9KSVRP
cGVyYXRpb25fR0pJUD4oSklUQ29tcGlsZXI6OkxpbmthYmxlQ29uc3RhbnQobV9qaXQsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6
OkNlbGxWYWx1ZShiYXNlR1BSKSwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUtPmNh
bGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXIpKSwgVHJ1c3RlZEltbVB0cihnZXR0
ZXIudGFnZ2VkUHRyKCkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHM8Sl9KSVRPcGVyYXRpb25fR0pJPihKSVRDb21waWxlcjo6TGlua2FibGVDb25zdGFu
dChtX2ppdCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZp
ZXJVSUQobm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+aWRlbnRpZmllck51bWJlcikpKTsKIApA
QCAtMTEwNDIsNyArMTEwNDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERP
TUdldHRlcihOb2RlKiBub2RlKQogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUQ2FnZSgpKQog
ICAgICAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbCh2bUVudHJ5Q3VzdG9tR2V0dGVyKTsKICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGJ5cGFz
c2VkRnVuY3Rpb24gPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPihXVEY6
OnRhZ05hdGl2ZUNvZGVQdHJJbXBsPE9wZXJhdGlvblB0clRhZz4oV1RGOjp1bnRhZ05hdGl2ZUNv
ZGVQdHJJbXBsPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihnZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpKS50b0Z1bmN0aW9uUHRyKCk7CisgICAgICAgICAgICBDb2RlUHRyPE9wZXJhdGlvblB0clRh
Zz4gYnlwYXNzZWRGdW5jdGlvbihXVEY6OnRhZ05hdGl2ZUNvZGVQdHJJbXBsPE9wZXJhdGlvblB0
clRhZz4oV1RGOjp1bnRhZ05hdGl2ZUNvZGVQdHJJbXBsPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihn
ZXR0ZXIudGFnZ2VkUHRyKCkpKSk7CiAgICAgICAgICAgICBtX2ppdC5hcHBlbmRPcGVyYXRpb25D
YWxsKGJ5cGFzc2VkRnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgICAgIG1faml0LnNldHVwUmVz
dWx0cyhyZXN1bHRSZWdzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAppbmRleCAxZDc1YjlkMjNiZjYuLmQ2Y2E0MjI3YjZkYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMTAwMCw3ICsxMDAw
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYWRkIGNhbGwgaW5z
dHJ1Y3Rpb25zLCBvcHRpb25hbGx5IHNldHRpbmcgcmVzdWx0cywgYW5kIG9wdGlvbmFsbHkgcm9s
bGluZyBiYWNrIHRoZSBjYWxsIGZyYW1lIG9uIGFuIGV4Y2VwdGlvbi4KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVu
Y3Rpb24pCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbChjb25zdCBDb2RlUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJu
YWxDYWxsKCk7CiAgICAgICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKQEAgLTEwMTQsMjEgKzEwMTQsMjEgQEAgcHVibGljOgogICAg
ICAgICBtX2ppdC5hcHBlbmRDYWxsKGFkZHJlc3MpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZE9wZXJhdGlvbkNhbGwoY29uc3QgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPiBmdW5jdGlvbikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRPcGVyYXRpb25DYWxs
KGNvbnN0IENvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAg
IHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKTsKICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9y
aWdpbihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICByZXR1cm4gbV9q
aXQuYXBwZW5kT3BlcmF0aW9uQ2FsbChmdW5jdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IENv
ZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2tXaXRoQ2FsbEZyYW1lUm9sbGJhY2soKTsKICAgICAgICAgcmV0dXJuIGNhbGw7
CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uU2V0UmVzdWx0KGNvbnN0IENv
ZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAg
ICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24oZnVuY3Rpb24pOwogICAgICAgICBpZiAoKHJlc3VsdCAhPSBJbnZh
bGlkR1BSUmVnKSAmJiAocmVzdWx0ICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKSkKQEAgLTEw
NTgsNyArMTA1OCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBl
bmRDYWxsU2V0UmVzdWx0KGNvbnN0IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwg
R1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVn
KQpAQCAtMTA2NiwxNCArMTA2NiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjYWxsOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdDEsIEdQ
UlJlZyByZXN1bHQyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQo
Y29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0MSwg
R1BSUmVnIHJlc3VsdDIpCiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIG1faml0LnNldHVwUmVzdWx0cyhyZXN1bHQx
LCByZXN1bHQyKTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKQogICAgIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgcmVzdWx0
UmVncy5ncHIoKSk7CkBAIC0xMDgyLDcgKzEwODIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9
CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBDb2RlUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIGlmIChyZXN1
bHQgIT0gSW52YWxpZEZQUlJlZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNw
cAppbmRleCBhMzQyMWM2N2Q1NjcuLjI5Yzg4YTMwN2JlNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYg
dm0pCiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpERkdUaHVuayk7CiAgICAgCi0gICAgcGF0Y2hCdWZmZXIubGlu
ayhmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ29t
cGlsZU9TUkV4aXQpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oZnVu
Y3Rpb25DYWxsLCBvcGVyYXRpb25Db21waWxlT1NSRXhpdCk7CiAKICAgICByZXR1cm4gRklOQUxJ
WkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZHIE9TUiBleGl0IGdlbmVy
YXRpb24gdGh1bmsiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNh
c3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAKaW5kZXggNjJhMjBlMWY2YTRjLi5kYmMw
YjFhMTM5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIv
QVJNNjREaXNhc3NlbWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3Nl
bWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCkBAIC0zNCw5ICszNCw5IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIHZvaWQqIGNvZGVT
dGFydCwgdm9pZCogY29kZUVuZCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0
KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IENvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+
JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2RlRW5kLCBj
b25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7Ci0gICAgdWludDMyX3QqIGN1
cnJlbnRQQyA9IGNvZGVQdHIudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx1aW50MzJfdCo+KCk7
CisgICAgdWludDMyX3QqIGN1cnJlbnRQQyA9IGNvZGVQdHIudW50YWdnZWRQdHI8dWludDMyX3Qq
PigpOwogICAgIHNpemVfdCBieXRlQ291bnQgPSBzaXplOwogCiAgICAgdWludDMyX3QqIGFybUNv
ZGVTdGFydCA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdCo+KGNvZGVTdGFydCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0NhcHN0b25lRGlzYXNzZW1ibGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQ2Fwc3RvbmVEaXNhc3Nl
bWJsZXIuY3BwCmluZGV4IGY0OTBlNDYxYTc0OS4uMTZiZGZkMWU1YTQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0NhcHN0b25lRGlzYXNzZW1ibGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0NhcHN0b25lRGlzYXNz
ZW1ibGVyLmNwcApAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCB0
cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0
clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqIHBy
ZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBDb2Rl
UHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIHZvaWQqLCB2b2lk
KiwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIGNzaCBoYW5k
bGU7CiAgICAgY3NfaW5zbiogaW5zdHJ1Y3Rpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCmluZGV4IDFlZTZkMWVkZDU1NC4u
Y2VlNzFkNjQxMWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9EaXNhc3NlbWJsZXIuY3BwCkBAIC01NSwxMiArNTUsMTIgQEAgc3RhdGljIExhYmVsTWFw
JiBlbnN1cmVMYWJlbE1hcCgpIFdURl9SRVFVSVJFU19MT0NLKGxhYmVsTWFwTG9jaykKIAogfSAv
LyBuYW1lc3BhY2UgRGlzYXNzZW1ibGVyCiAKLXZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUs
IHZvaWQqIGNvZGVTdGFydCwgdm9pZCogY29kZUVuZCwgY29uc3QgY2hhciogcHJlZml4LCBQcmlu
dFN0cmVhbSYgb3V0KQordm9pZCBkaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERpc2Fzc2VtYmx5
UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIHZvaWQqIGNvZGVTdGFydCwgdm9pZCogY29k
ZUVuZCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIGlmICh0
cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIsIHNpemUsIGNvZGVTdGFydCwgY29kZUVuZCwgcHJlZml4
LCBvdXQpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgb3V0LnByaW50ZigiJXNkaXNhc3Nl
bWJseSBub3QgYXZhaWxhYmxlIGZvciByYW5nZSAlcC4uLiVwXG4iLCBwcmVmaXgsIGNvZGVQdHIu
dW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLCBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3M8Y2hhcio+KCkgKyBzaXplKTsKKyAgICBvdXQucHJpbnRmKCIlc2Rpc2Fzc2VtYmx5IG5v
dCBhdmFpbGFibGUgZm9yIHJhbmdlICVwLi4uJXBcbiIsIHByZWZpeCwgY29kZVB0ci51bnRhZ2dl
ZFB0cigpLCBjb2RlUHRyLnVudGFnZ2VkUHRyPGNoYXIqPigpICsgc2l6ZSk7CiB9CiAKIG5hbWVz
cGFjZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rp
c2Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3Nl
bWJsZXIuaAppbmRleCBjNDZmZWQ1ZGNlNjguLjYwZmI2MzZiZjQ5OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCkBAIC0yOCwzMSAr
MjgsMzEgQEAKICNpbmNsdWRlICJKU0NQdHJUYWcuaCIKICNpbmNsdWRlICJKU0V4cG9ydE1hY3Jv
cy5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0NvZGVQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCi10ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjsKIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OwogCiAjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCB2b2lk
KiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJl
YW0mKTsKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERpc2Fzc2VtYmx5UHRy
VGFnPiYsIHNpemVfdCwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2RlRW5kLCBjb25zdCBjaGFy
KiBwcmVmaXgsIFByaW50U3RyZWFtJik7CiAjZWxzZQotaW5saW5lIGJvb2wgdHJ5VG9EaXNhc3Nl
bWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6
ZV90LCB2b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqLCBQcmludFN0cmVhbSYpCitpbmxpbmUgYm9v
bCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IENvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6
ZV90LCB2b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqLCBQcmludFN0cmVhbSYpCiB7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogI2VuZGlmCiAKLWlubGluZSBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZSwgc2l6ZV90
IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK2lubGluZSBib29s
IHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGUs
IHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAg
ICAgcmV0dXJuIHRyeVRvRGlzYXNzZW1ibGUoY29kZSwgc2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwg
cHJlZml4LCBvdXQpOwogfQogCiAvLyBQcmludHMgZWl0aGVyIHRoZSBkaXNhc3NlbWJseSwgb3Ig
YSBsaW5lIG9mIHRleHQgaW5kaWNhdGluZyB0aGF0IGRpc2Fzc2VtYmx5IGZhaWxlZCBhbmQKIC8v
IHRoZSByYW5nZSBvZiBtYWNoaW5lIGNvZGUgYWRkcmVzc2VzLgotdm9pZCBkaXNhc3NlbWJsZShj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCB2
b2lkKiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRT
dHJlYW0mIG91dCk7Cit2b2lkIGRpc2Fzc2VtYmxlKGNvbnN0IENvZGVQdHI8RGlzYXNzZW1ibHlQ
dHJUYWc+Jiwgc2l6ZV90LCB2b2lkKiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNo
YXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCk7CiAKIC8vIEFzeW5jaHJvbm91cyBkaXNhc3Nl
bWJseS4gVGhpcyBoYXBwZW5zIG9uIGFub3RoZXIgdGhyZWFkLCBhbmQgY2FsbHMgdGhlIHByb3Zp
ZGVkCiAvLyBjYWxsYmFjayB3aGVuIHRoZSBkaXNhc3NlbWJseSBpcyBkb25lLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9SSVNDVjY0RGlzYXNzZW1ibGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvUklTQ1Y2NERpc2Fzc2Vt
Ymxlci5jcHAKaW5kZXggNzQxMDU3YjZjZTJlLi42YTdjNzc2ZTRkMDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvUklTQ1Y2NERpc2Fzc2VtYmxlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9SSVNDVjY0RGlzYXNzZW1i
bGVyLmNwcApAQCAtNjMzLDcgKzYzMyw3IEBAIENTdHJpbmcgZGlzYXNzZW1ibGVPcGNvZGUodWlu
dDMyX3QgKnBjKQogCiB9IC8vIG5hbWVzcGFjZSBSSVNDVjY0RGlzYXNzZW1ibGVyCiAKLWJvb2wg
dHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQ
dHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCosIHZvaWQqLCBjb25zdCBjaGFyKiBw
cmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCitib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgQ29k
ZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lkKiwgdm9p
ZCosIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICB1aW50MzJf
dCogY3VycmVudFBDID0gY29kZVB0ci51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPHVpbnQzMl90
Kj4oKTsKICAgICBzaXplX3QgYnl0ZUNvdW50ID0gc2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAppbmRleCAzNDlk
MzZkZTM4MzYuLmEwOWY0ZDU3OTdkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcApAQCAtMzMsNyArMzMsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2
b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK2Jvb2wg
dHJ5VG9EaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0
ciwgc2l6ZV90IHNpemUsIHZvaWQqLCB2b2lkKiwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0
cmVhbSYgb3V0KQogewogICAgIFp5ZGlzRGVjb2RlciBkZWNvZGVyOwogICAgIFp5ZGlzRGVjb2Rl
ckluaXQoJmRlY29kZXIsIFpZRElTX01BQ0hJTkVfTU9ERV9MT05HXzY0LCBaWURJU19BRERSRVNT
X1dJRFRIXzY0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kb21qaXQvRE9N
SklUU2lnbmF0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZG9taml0L0RPTUpJVFNpZ25h
dHVyZS5oCmluZGV4IGQzMWZiNGNiYjVhMS4uYjU3YmJhNDI1NWI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZG9taml0L0RPTUpJVFNpZ25hdHVyZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kb21qaXQvRE9NSklUU2lnbmF0dXJlLmgKQEAgLTI4LDcgKzI4LDcgQEAK
ICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJET01KSVRFZmZlY3QuaCIKICNpbmNs
dWRlICJTcGVjdWxhdGVkVHlwZS5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvblB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Db2RlUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRE9NSklU
IHsKIApAQCAtNDAsMTEgKzQwLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRE9NSklU
IHsKIAogY2xhc3MgU2lnbmF0dXJlIHsKIHB1YmxpYzoKLSAgICB1c2luZyBGdW5jdGlvblB0ciA9
IFdURjo6RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPjsKKyAgICB1c2luZyBDb2RlUHRyID0g
V1RGOjpDb2RlUHRyPENGdW5jdGlvblB0clRhZz47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+Ci0gICAgY29uc3RleHByIFNpZ25hdHVyZShGdW5jdGlvblB0ciBmdW5jdGlv
bldpdGhvdXRUeXBlQ2hlY2ssIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBFZmZlY3QgZWZm
ZWN0LCBTcGVjdWxhdGVkVHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAg
ICAgIDogZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrUHRyKGZ1bmN0aW9uV2l0aG91dFR5cGVDaGVj
ay5nZXQoKSkKKyAgICBjb25zdGV4cHIgU2lnbmF0dXJlKENvZGVQdHIgZnVuY3Rpb25XaXRob3V0
VHlwZUNoZWNrLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgRWZmZWN0IGVmZmVjdCwgU3Bl
Y3VsYXRlZFR5cGUgcmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IGZ1
bmN0aW9uV2l0aG91dFR5cGVDaGVja1B0cihmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2sudW50eXBl
ZEZ1bmMoKSkKICAgICAgICAgLCBjbGFzc0luZm8oY2xhc3NJbmZvKQogICAgICAgICAsIHJlc3Vs
dChyZXN1bHQpCiAgICAgICAgICwgYXJndW1lbnRzIHtzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlw
ZT4oYXJndW1lbnRzKS4uLn0KQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKLSAgICBGdW5jdGlvblB0ciBmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2soKSBjb25zdCB7IHJl
dHVybiBGdW5jdGlvblB0cihmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2tQdHIpOyB9CisgICAgQ29k
ZVB0ciBmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2soKSBjb25zdCB7IHJldHVybiBDb2RlUHRyKGZ1
bmN0aW9uV2l0aG91dFR5cGVDaGVja1B0cik7IH0KIAotICAgIGNvbnN0IFdURl9WVEJMX0ZVTkNQ
VFJfUFRSQVVUSChET01KSVRTaWduYXR1cmUpIEZ1bmN0aW9uUHRyOjpQdHIgZnVuY3Rpb25XaXRo
b3V0VHlwZUNoZWNrUHRyOworICAgIGNvbnN0IFdURl9WVEJMX0ZVTkNQVFJfUFRSQVVUSChET01K
SVRTaWduYXR1cmUpIENvZGVQdHI6OlVudHlwZWRGdW5jIGZ1bmN0aW9uV2l0aG91dFR5cGVDaGVj
a1B0cjsKICAgICBjb25zdCBDbGFzc0luZm8qIGNvbnN0IGNsYXNzSW5mbzsKICAgICBjb25zdCBT
cGVjdWxhdGVkVHlwZSByZXN1bHQ7CiAgICAgY29uc3QgU3BlY3VsYXRlZFR5cGUgYXJndW1lbnRz
W0pTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNdOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5jcHAKaW5kZXggN2FlMTEyOWEwY2ZjLi4yMjM3YTYzYTUwNmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc2LDcgKzc2LDcg
QEAgdm9pZCBKSVRDb2RlOjppbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiBlbnRyeXBvaW50KQogICAgIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQgPSBl
bnRyeXBvaW50OwogfQogCi1KSVRDb2RlOjpDb2RlUHRyPEpTRW50cnlQdHJUYWc+IEpJVENvZGU6
OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFyaXR5Q2hlY2spCitDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFyaXR5Q2hl
Y2spCiB7CiAgICAgc3dpdGNoIChhcml0eUNoZWNrKSB7CiAgICAgY2FzZSBBcml0eUNoZWNrTm90
UmVxdWlyZWQ6CkBAIC05MSw5ICs5MSw5IEBAIEpJVENvZGU6OkNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHlDaGVjCiB2b2lk
KiBKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAg
ICAgaWYgKCFvZmZzZXQpCi0gICAgICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CisgICAgICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsLnRhZ2dlZFB0cigp
OwogCi0gICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3MgPSBtX2FkZHJlc3NGb3JDYWxsLnVudGFn
Z2VkRXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgY2hhciogZXhlY3V0YWJsZUFkZHJl
c3MgPSBtX2FkZHJlc3NGb3JDYWxsLnVudGFnZ2VkUHRyPGNoYXIqPigpOwogICAgIHJldHVybiB0
YWdDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNzICsgb2Zmc2V0KTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhD
YWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aENhbGwuaApp
bmRleCA3NGZkNmVjN2I3MmYuLjE1MWEzMjA1ZWJlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBl
LCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogUmVmPExhenlTbG93UGF0aDo6R2VuZXJhdG9y
PiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICBWTSYgdm0sIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gZnVuY3Rpb24sIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGVzLi4u
IGFyZ3VtZW50cykKKyAgICBWTSYgdm0sIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlv
biwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQogewogICAg
IHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKICAgICAgICAgWz0sICZ2bV0g
KENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggZjdkM2E1M2U0OWJk
Li4xNTA4YWY5NmI1NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TGluay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcApAQCAt
MTAwLDkgKzEwMCw5IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAg
c3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVj
aywgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihjb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVj
aykpOworICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluazxPcGVyYXRpb25QdHJUYWc+KGNhbGxB
cml0eUNoZWNrLCBjb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVj
dEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjayk7CiAgICAgICAgICAgICBsaW5r
QnVmZmVyLT5saW5rKGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKHZt
LmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxp
bmsoY2FsbEFyaXR5Rml4dXAsIHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29k
ZSgpLnRvRnVuY3Rpb25QdHIoKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxB
cml0eUZpeHVwLCB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSk7CiAg
ICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcHMsIHN0YXRlLmdlbmVyYXRl
ZEZ1bmN0aW9uKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAKaW5kZXggNDdjYzNkMDhkMjgzLi40ZWY1YWJiZThlNmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTMyNSw4
ICszMjUsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KAogICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHRocm93Q2FsbCwg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dF
cnJvcikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhsb29r
dXBFeGNlcHRpb25IYW5kbGVyQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4odGhyb3dD
YWxsLCBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0
aW9uSGFuZGxlckNhbGwsIG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVy
RnJhbWUpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwpAQCAtMjQ1OSw3ICsyNDU5LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhFbmQg
PSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkuZXhlY3V0
YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFy
dCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLnRhZ2dl
ZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS50YWdn
ZWRQdHI8Y2hhcio+KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dl
bmVyYXRlZENvZGVTaXplICs9IHNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICNl
bmRpZgpAQCAtMjQ3Myw3ICsyNDczLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICAgICAgICAgICAgICBhdXRvIGlubGluZUVuZCA9IGppdC5sYWJlbCgpOwogICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9j
YXRpb25PZihpbmxpbmVTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVu
ZCkudGFnZ2VkUHRyPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0
KS50YWdnZWRQdHI8Y2hhcio+KCk7CiAgICAgICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5l
cmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgICAgICAgICAgICAgIH0pOwogI2VuZGlmCkBAIC0y
NTcwLDcgKzI1NzAsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aEVuZCA9IGppdC5sYWJlbCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoRW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4o
KSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS5leGVjdXRhYmxlQWRkcmVz
czxjaGFyKj4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkudGFnZ2VkUHRyPGNoYXIqPigpIC0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLnRhZ2dlZFB0cjxjaGFyKj4oKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0g
c2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogI2VuZGlmCkBAIC0yNTg0LDcgKzI1
ODQsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgICAgICAgICAg
ICAgIGF1dG8gaW5saW5lRW5kID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAg
ICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVFbmQpLmV4ZWN1
dGFibGVBZGRyZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0
KS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS50YWdnZWRQdHI8Y2hhcio+
KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLnRhZ2dlZFB0cjxjaGFyKj4o
KTsKICAgICAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRlZENvZGVTaXplICs9IHNp
emU7CiAgICAgICAgICAgICAgICAgfSk7CiAjZW5kaWYKQEAgLTE1NzUwLDEzICsxNTc1MCwxMyBA
QCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIGF1dG8gZnVuY3Rpb24gPSBzaWdu
YXR1cmUtPmZ1bmN0aW9uV2l0aG91dFR5cGVDaGVjaygpOwogICAgICAgICBzd2l0Y2ggKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7CiAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJl
c3VsdCA9IHZtQ2FsbChJbnQ2NCwgcmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HUD4o
ZnVuY3Rpb24uZ2V0KCkpLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBvcGVyYW5kc1swXSk7
CisgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIHJlaW50ZXJwcmV0X2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR1A+KGZ1bmN0aW9uLnVudHlwZWRGdW5jKCkpLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLCBvcGVyYW5kc1swXSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSAyOgotICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCByZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0dQUD4oZnVuY3Rpb24uZ2V0KCkpLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0pOworICAgICAgICAgICAgcmVzdWx0ID0g
dm1DYWxsKEludDY0LCByZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dQUD4oZnVuY3Rp
b24udW50eXBlZEZ1bmMoKSksIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIG9wZXJhbmRzWzBd
LCBvcGVyYW5kc1sxXSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAzOgotICAg
ICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCByZWludGVycHJldF9jYXN0PEpfSklUT3Bl
cmF0aW9uX0dQUFA+KGZ1bmN0aW9uLmdldCgpKSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
b3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7CisgICAgICAgICAgICByZXN1
bHQgPSB2bUNhbGwoSW50NjQsIHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR1BQUD4o
ZnVuY3Rpb24udW50eXBlZEZ1bmMoKSksIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIG9wZXJh
bmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMTU3NzgsMTEgKzE1Nzc4LDExIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAg
ICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX291dC5hYnNvbHV0ZSgmdm0o
KS50b3BDYWxsRnJhbWUpKTsKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVRDYWdlKCkp
IHsKICAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICB2bUNh
bGwoSW50NjQsIHZtRW50cnlDdXN0b21HZXR0ZXIsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCks
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3JhcGguaWRl
bnRpZmllcnMoKVttX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXJd
KSwgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5jdXN0b21B
Y2Nlc3NvckdldHRlci5leGVjdXRhYmxlQWRkcmVzcygpKSkpOworICAgICAgICAgICAgICAgICAg
ICB2bUNhbGwoSW50NjQsIHZtRW50cnlDdXN0b21HZXR0ZXIsIHdlYWtQb2ludGVyKGdsb2JhbE9i
amVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVttX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJO
dW1iZXJdKSwgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5j
dXN0b21BY2Nlc3NvckdldHRlci50YWdnZWRQdHIoKSkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGdldHRl
ciA9IG1fbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7Ci0g
ICAgICAgICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBieXBhc3NlZEZ1bmN0
aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4oV1RGOjp0YWdOYXRp
dmVDb2RlUHRySW1wbDxPcGVyYXRpb25QdHJUYWc+KFdURjo6dW50YWdOYXRpdmVDb2RlUHRySW1w
bDxDdXN0b21BY2Nlc3NvclB0clRhZz4oZ2V0dGVyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSkudG9G
dW5jdGlvblB0cigpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBi
eXBhc3NlZEZ1bmN0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdEludFB0cihtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9u
b2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyXSkpKTsKKyAgICAgICAg
ICAgICAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBnZXR0ZXIgPSBtX25vZGUtPmNh
bGxET01HZXR0ZXJEYXRhKCktPmN1c3RvbUFjY2Vzc29yR2V0dGVyOworICAgICAgICAgICAgICAg
IENvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPiBieXBhc3NlZEZ1bmN0aW9uKFdURjo6dGFnTmF0aXZl
Q29kZVB0ckltcGw8T3BlcmF0aW9uUHRyVGFnPihXVEY6OnVudGFnTmF0aXZlQ29kZVB0ckltcGw8
Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KGdldHRlci50YWdnZWRQdHIoKSkpKTsKKyAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIGJ5cGFzc2VkRnVuY3Rpb24sIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50
UHRyKG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlk
ZW50aWZpZXJOdW1iZXJdKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC0yMDUyMiw3ICsyMDUyMiw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19F
TkQKICAgICBMVmFsdWUgdm1DYWxsKExUeXBlIHR5cGUsIE9wZXJhdGlvblR5cGUgZnVuY3Rpb24s
IEFyZ3MmJi4uLiBhcmdzKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19z
YW1lPE9wZXJhdGlvblR5cGUsIExWYWx1ZT46OnZhbHVlKTsKLSAgICAgICAgaWYgY29uc3RleHBy
ICghc3RkOjppc19zYW1lX3Y8RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiwgT3BlcmF0aW9u
VHlwZT4pCisgICAgICAgIGlmIGNvbnN0ZXhwciAoIXN0ZDo6aXNfc2FtZV92PENvZGVQdHI8T3Bl
cmF0aW9uUHRyVGFnPiwgT3BlcmF0aW9uVHlwZT4pCiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0
KEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpjQ2FsbEFyaXR5KCkgPT0gc2l6ZW9mLi4u
KEFyZ3MpLCAiU2FuaXR5IGNoZWNrIik7CiAgICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKICAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwodHlwZSwgbV9vdXQub3BlcmF0aW9uKGZ1bmN0
aW9uKSwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggYzUyMTA4MDg5YTJkLi5mMTgzNTgzMzc1ODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM0LDcgKzEz
NCw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAKICAgICBjYWxsRnJhbWUtPnNldENv
ZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0ID0gZW50cnlD
b2RlLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgdm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbChBcml0
eUNoZWNrTm90UmVxdWlyZWQpLnRhZ2dlZFB0cigpOwogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgIiAgICBFbnRyeSB3aWxsIHN1Y2NlZWQsIGdvaW5nIHRvIGFkZHJlc3Mg
IiwgUmF3UG9pbnRlcihyZXN1bHQpKTsKIAogICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ3JlIGNv
bW1pdHRlZCB0byB0cmlnZ2VyaW5nIGFuIE9TUiBlbnRyeSBpbW1lZGlhdGVseSBhZnRlciB3ZSBy
ZXR1cm4uIEhlbmNlLCBpdCBpcyBzYWZlIHRvIG1vZGlmeSBzdGFjayBoZXJlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDA4MjFk
NjhhYjllYi4uNjFkMjBlZTE5MmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgxLDcgKzY4MSw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Db21waWxlRlRMT1NSRXhpdCwgdm9pZCosIChDYWxsRnJh
bWUqIGNhbGxGcmFtCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAogICAgICAgICBl
eGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWw8
T1NSRXhpdFB0clRhZz4oZXhpdC5tX2NvZGUuY29kZSgpKSk7CiAgICAgCi0gICAgcmV0dXJuIGV4
aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHJldHVybiBleGl0Lm1f
Y29kZS5jb2RlKCkudGFnZ2VkUHRyKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCmluZGV4IDg2MGVj
YjczNWI0MS4uMTc4NTI5MzA2NGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3BlcmF0aW9ucy5jcHAKQEAgLTc0Nyw3ICs3NDcsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uQ29tcGlsZUZUTExhenlTbG93UGF0aCwgdm9pZCosIChDYWxsRnJhbWUqIGNh
bAogICAgIExhenlTbG93UGF0aCYgbGF6eVNsb3dQYXRoID0gKmppdENvZGUtPmxhenlTbG93UGF0
aHNbaW5kZXhdOwogICAgIGxhenlTbG93UGF0aC5nZW5lcmF0ZShjb2RlQmxvY2spOwogCi0gICAg
cmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cisg
ICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkuY29kZSgpLnRhZ2dlZFB0cigpOwogfQogCiBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT05fV0lUSF9BVFRSSUJVVEVTKG9wZXJhdGlvblJlcG9ydEJv
dW5kc0NoZWNrRWxpbWluYXRpb25FcnJvckFuZENyYXNoLCBOT19SRVRVUk5fRFVFX1RPX0NSQVNI
LCB2b2lkLCAoaW50cHRyX3QgY29kZUJsb2NrQXNJbnRQdHIsIGludDMyX3Qgbm9kZUluZGV4LCBp
bnQzMl90IGNoaWxkMUluZGV4LCBpbnQzMl90IGNoaWxkMkluZGV4LCBpbnQzMl90IGNoZWNrZWRJ
bmRleCwgaW50MzJfdCBib3VuZHMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgK
aW5kZXggZWQ4ZmY3M2UxYTNhLi41ZjQ1N2M0NjQyZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQwNSw3ICs0MDUsNyBAQCBwdWJsaWM6CiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDMyNAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0aW9uVHlwZT4KICAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBm
dW5jdGlvbikgeyByZXR1cm4gY29uc3RJbnRQdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqLCBPcGVy
YXRpb25QdHJUYWc+KGZ1bmN0aW9uKSk7IH0KLSAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pIHsgcmV0dXJuIGNvbnN0SW50UHRyKGZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOyB9CisgICAgTFZhbHVlIG9wZXJhdGlvbihDb2RlUHRy
PE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pIHsgcmV0dXJuIGNvbnN0SW50UHRyKGZ1bmN0aW9u
LnRhZ2dlZFB0cigpKTsgfQogCiAgICAgdm9pZCBqdW1wKExCYXNpY0Jsb2NrKTsKICAgICB2b2lk
IGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwgV2VpZ2h0IHRha2Vu
V2VpZ2h0LCBMQmFzaWNCbG9jayBub3RUYWtlbiwgV2VpZ2h0IG5vdFRha2VuV2VpZ2h0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAppbmRleCBlZGNl
ZjlmNmEzZGIuLjA3MTNjZjlhMzJlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsLmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIFNsb3dQYXRoQ2FsbENvbnRl
eHQ6On5TbG93UGF0aENhbGxDb250ZXh0KCkKICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiB9CiAKLVNsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250ZXh0
OjprZXlXaXRoVGFyZ2V0KEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdldCkg
Y29uc3QKK1Nsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0
KENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KSBjb25zdAogewogICAgIHVpbnQ4
X3QgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxl
ZCA9IDA7CiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmNsb2JiZXJBbGxSZWdzSW5GVExJQ1Ns
b3dQYXRoKCkpKQpAQCAtMTMwLDcgKzEzMCw3IEBAIFNsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENh
bGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KENDYWxsSGVscGVyczo6QWRkcmVzcyBhZGRyZXNzCiAg
ICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleShtX3RodW5rU2F2ZVNldCwgbnVsbHB0ciwgbnVtYmVy
T2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCwgbV9vZmZz
ZXQsIGFkZHJlc3Mub2Zmc2V0KTsKIH0KIAotU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRl
eHQ6Om1ha2VDYWxsKFZNJiB2bSwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFy
Z2V0KQorU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwg
Q29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQpCiB7CiAgICAgU2xvd1BhdGhDYWxs
S2V5IGtleSA9IGtleVdpdGhUYXJnZXQoY2FsbFRhcmdldCk7CiAgICAgU2xvd1BhdGhDYWxsIHJl
c3VsdCA9IFNsb3dQYXRoQ2FsbChtX2ppdC5jYWxsKEpJVFRodW5rUHRyVGFnKSwga2V5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCmluZGV4IGNmOTYxNmUz
YmJlNi4uYzQ3ZDlmYWRlNTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsLmgKQEAgLTU5LDExICs1OSwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBOT1RFOiBU
aGUgY2FsbCB0aGF0IHRoaXMgcmV0dXJucyBpcyBhbHJlYWR5IGdvaW5nIHRvIGJlIGxpbmtlZCBi
eSB0aGUgSklUIHVzaW5nIGFkZExpbmtUYXNrKCksCiAgICAgLy8gc28gdGhlcmUgaXMgbm8gbmVl
ZCBmb3IgeW91IHRvIGxpbmsgaXQgeW91cnNlbGYuCi0gICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxs
KFZNJiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KTsKKyAgICBTbG93
UGF0aENhbGwgbWFrZUNhbGwoVk0mLCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdl
dCk7CiAgICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxsKFZNJiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KTsKIAogcHJpdmF0ZToKLSAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0aFRhcmdldChGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQpIGNvbnN0OworICAgIFNsb3dQYXRoQ2Fs
bEtleSBrZXlXaXRoVGFyZ2V0KENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KSBj
b25zdDsKICAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0aFRhcmdldChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MpIGNvbnN0OwogICAgIAogICAgIFJlZ2lzdGVyU2V0IG1fYXJndW1lbnRSZWdpc3RlcnM7
CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgVk0mIHZtLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENDYWxsSGVscGVy
czo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKLSAgICBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3Vt
ZW50cykKKyAgICBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1
bHRHUFIsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQogewogICAgIFNsb3dQYXRoQ2FsbCBj
YWxsOwogICAgIHsKQEAgLTk2LDcgKzk2LDcgQEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24o
CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxP
cGVyYXRpb24oCiAgICAgVk0mIHZtLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q0NhbGxIZWxwZXJzJiBqaXQsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwKLSAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRHUFIsCisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rp
b24sIEdQUlJlZyByZXN1bHRHUFIsCiAgICAgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7
CiAgICAgaWYgKGNhbGxTaXRlSW5kZXgpIHsKQEAgLTExMiw3ICsxMTIsNyBAQCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKFN0YXRlJiwgQ29kZU9yaWdpbik7CiB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRp
b24oCiAgICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q0NhbGxIZWxwZXJzJiBqaXQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKLSAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQor
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwgQ29kZVB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmd1bWVudFR5cGVzLi4uIGFy
Z3VtZW50cykKIHsKICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbigKICAgICAgICAgc3RhdGUudm0o
KSwgdXNlZFJlZ2lzdGVycywgaml0LCBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdpbihzdGF0ZSwg
Y29kZU9yaWdpbiksIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAKaW5kZXggMDgzYjM1MzZhNThl
Li5hMWIyYTRkNTFhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U2xvd1BhdGhDYWxsS2V5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNs
b3dQYXRoQ2FsbEtleS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAogdm9pZCBTbG93UGF0aENhbGxLZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoIjx1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVn
aXN0ZXJzLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCwgIiwgaW5kaXJlY3RPZmZzZXQgPSAiLCBt
X2luZGlyZWN0T2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0gIiwgUmF3UG9pbnRlcihtX2NhbGxUYXJn
ZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIG91dC5wcmludCgiPHVzZWRSZWdpc3RlcnMg
PSAiLCBtX3VzZWRSZWdpc3RlcnMsICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0LCAiLCBpbmRpcmVj
dE9mZnNldCA9ICIsIG1faW5kaXJlY3RPZmZzZXQsICIsIGNhbGxUYXJnZXQgPSAiLCBSYXdQb2lu
dGVyKG1fY2FsbFRhcmdldC50YWdnZWRQdHIoKSkpOwogICAgIGlmIChPcHRpb25zOjpjbG9iYmVy
QWxsUmVnc0luRlRMSUNTbG93UGF0aCgpKQogICAgICAgICBvdXQucHJpbnQoIiwgYXJndW1lbnRS
ZWdpc3RlcnMgPSAiLCBhcmd1bWVudFJlZ2lzdGVyc0lmQ2xvYmJlcmluZ0NoZWNrSXNFbmFibGVk
KCkpOwogICAgIG91dC5wcmludCgiPiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsS2V5LmgKaW5kZXggMDlhYjhhZDFjYmI5Li42OTgwZTVlZmE3YmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU2LDcgKzU2LDcgQEAgcHVibGljOgogCiAgICAgU2xvd1BhdGhDYWxsS2V5KCkgPSBkZWZhdWx0
OwogICAgIAotICAgIFNsb3dQYXRoQ2FsbEtleShjb25zdCBSZWdpc3RlclNldCYgc2V0LCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQsIHVpbnQ4X3QgbnVtYmVyT2ZVc2Vk
QXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCwgc2l6ZV90IG9mZnNl
dCwgaW50MzJfdCBpbmRpcmVjdE9mZnNldCkKKyAgICBTbG93UGF0aENhbGxLZXkoY29uc3QgUmVn
aXN0ZXJTZXQmIHNldCwgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQsIHVpbnQ4
X3QgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxl
ZCwgc2l6ZV90IG9mZnNldCwgaW50MzJfdCBpbmRpcmVjdE9mZnNldCkKICAgICAgICAgOiBtX251
bWJlck9mVXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZDbG9iYmVyaW5nQ2hlY2tJc0VuYWJsZWQobnVt
YmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCkKICAg
ICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgICAgICwgbV91c2VkUmVnaXN0ZXJzKHNldCkK
QEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQob2Zmc2V0ID09IG1fb2Zm
c2V0KTsKICAgICB9CiAgICAgCi0gICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjYWxs
VGFyZ2V0KCkgY29uc3QKKyAgICBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gY2FsbFRhcmdldCgp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAodHlwZSgpID09IFR5cGU6OkRpcmVjdCkKICAgICAg
ICAgICAgIHJldHVybiBtX2NhbGxUYXJnZXQ7CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIFNsb3dQYXRoQ2FsbEtleSB3aXRoQ2Fs
bFRhcmdldChGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQpCisgICAgU2xv
d1BhdGhDYWxsS2V5IHdpdGhDYWxsVGFyZ2V0KENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxs
VGFyZ2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0
ZXJzKCksIGNhbGxUYXJnZXQsIG51bWJlck9mVXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZDbG9iYmVy
aW5nQ2hlY2tJc0VuYWJsZWQoKSwgb2Zmc2V0KCksIGluZGlyZWN0T2Zmc2V0KCkpOwogICAgIH0K
QEAgLTEzNSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICAvLyBtX251bWJlck9m
VXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZDbG9iYmVyaW5nQ2hlY2tJc0VuYWJsZWQgaXMgaW50ZW50
aW9uYWxseSBub3QgaW5jbHVkZWQgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSAwCiAgICAgICAg
IC8vIHVubGVzcyBPcHRpb25zOjpjbG9iYmVyQWxsUmVnc0luRlRMSUNTbG93UGF0aCgpIGlzIHNl
dCwgYW5kIE9wdGlvbnM6OmNsb2JiZXJBbGxSZWdzSW5GVExJQ1Nsb3dQYXRoKCkgaXMgb25seSBz
ZXQgaW4gZGVidWdnaW5nIHVzZSBjYXNlcy4KLSAgICAgICAgcmV0dXJuIFB0ckhhc2g8dm9pZCo+
OjpoYXNoKGNhbGxUYXJnZXQoKS5leGVjdXRhYmxlQWRkcmVzcygpKSArIG1fb2Zmc2V0ICsgbV91
c2VkUmVnaXN0ZXJzLmhhc2goKSArIGluZGlyZWN0T2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4odHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKGNhbGxU
YXJnZXQoKS50YWdnZWRQdHIoKSkgKyBtX29mZnNldCArIG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkg
KyBpbmRpcmVjdE9mZnNldCgpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUoKSk7CiAgICAg
fQogCiBwcml2YXRlOgpAQCAtMTQ1LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQogCiAgICAgdW5p
b24gewotICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fY2FsbFRhcmdldCB7
IH07CisgICAgICAgIENvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPiBtX2NhbGxUYXJnZXQgeyB9Owog
ICAgICAgICBpbnQzMl90IG1faW5kaXJlY3RPZmZzZXQ7CiAgICAgfTsKICAgICBzaXplX3QgbV9u
dW1iZXJPZlVzZWRBcmd1bWVudFJlZ2lzdGVyc0lmQ2xvYmJlcmluZ0NoZWNrSXNFbmFibGVkIDog
OCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAppbmRleCAyMjE5
YzE0NjIzMjEuLjRkNTZhNGExOTUwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1
bmtzLmNwcApAQCAtNDYsNyArNDYsNyBAQCBlbnVtIGNsYXNzIEZyYW1lQW5kU3RhY2tBZGp1c3Rt
ZW50UmVxdWlyZW1lbnQgewogfTsKIAogc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKLSAgICBWTSYgdm0s
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZ2VuZXJhdGlvbkZ1bmN0aW9uLCBQdHJUYWcg
cmVzdWx0VGFnLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUs
IEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgZnJhbWVBbmRTdGFja0FkanVzdG1l
bnRSZXF1aXJlbWVudCkKKyAgICBWTSYgdm0sIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBnZW5l
cmF0aW9uRnVuY3Rpb24sIFB0clRhZyByZXN1bHRUYWcsIGNvbnN0IGNoYXIqIG5hbWUsIHVuc2ln
bmVkIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVu
dCBmcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50KQogewogICAgIEFzc2VtYmx5SGVs
cGVycyBqaXQobnVsbHB0cik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCmlu
ZGV4IGVmN2E0MTE4NzFjNC4uM2ZhOWU4NzNlZWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVGh1bmtzLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFy
Z3VtZW50Pgogc3RydWN0IFRodW5rTWFwIHsKICAgICB0eXBlZGVmIEtleVR5cGVBcmd1bWVudCBL
ZXlUeXBlOwogICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlUeXBlLCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+PiBUb1RodW5rTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+LCBLZXlUeXBlPiBGcm9tVGh1bmtNYXA7
CisgICAgdHlwZWRlZiBIYXNoTWFwPENvZGVQdHI8SklUVGh1bmtQdHJUYWc+LCBLZXlUeXBlPiBG
cm9tVGh1bmtNYXA7CiAgICAgCiAgICAgVG9UaHVua01hcCBtX3RvVGh1bms7CiAgICAgRnJvbVRo
dW5rTWFwIG1fZnJvbVRodW5rOwpAQCAtNjcsNyArNjcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlSWZOZWNlc3NhcnkoCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE1hcFR5cGU+Ci10eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRodW5rKE1h
cFR5cGUmIG1hcCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBwdHIpCit0
eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRodW5rKE1hcFR5cGUmIG1hcCwgQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gcHRyKQogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OkZyb21UaHVu
a01hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX2Zyb21UaHVuay5maW5kKHB0cik7CiAgICAgUkVM
RUFTRV9BU1NFUlQoaXRlciAhPSBtYXAubV9mcm9tVGh1bmsuZW5kKCkpOwpAQCAtODUsNyArODUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KHZtLCBtX3Ns
b3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcik7CiAgICAg
fQogCi0gICAgU2xvd1BhdGhDYWxsS2V5IGtleUZvclNsb3dQYXRoQ2FsbFRodW5rKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gcHRyKQorICAgIFNsb3dQYXRoQ2FsbEtleSBr
ZXlGb3JTbG93UGF0aENhbGxUaHVuayhDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBwdHIpCiAgICAg
ewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CiAgICAgICAgIHJldHVybiBrZXlG
b3JUaHVuayhtX3Nsb3dQYXRoQ2FsbFRodW5rcywgcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGExMTFlM2U4MzdiMS4u
OTFhMzk2MmViN2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKQEAgLTEwNjIsNyArMTA2Miw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09i
amVjdCoKICAgICAgICAgQVNTRVJUKGppdENvZGUgPT0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVj
dXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLnB0cigpKTsKICAgICAgICAgcmVzdWx0
ID0gaml0Q29kZS0+ZXhlY3V0ZSgmdm0sICZwcm90b0NhbGxGcmFtZSk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlUb05hdGl2ZShjYWxsRGF0
YS5uYXRpdmUuZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSwgJnZtLCAmcHJvdG9DYWxsRnJh
bWUpKTsKKyAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlUb05hdGl2ZShj
YWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24udGFnZ2VkUHRyKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1l
KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsK
ICAgICB9CiAKQEAgLTExNDEsNyArMTE0MSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPCiAg
ICAgICAgIEFTU0VSVChqaXRDb2RlID09IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRh
YmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkucHRyKCkpOwogICAgICAgICByZXN1
bHQgPSBqaXRDb2RlLT5leGVjdXRlKCZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvTmF0aXZlKGNvbnN0
cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksICZ2bSwgJnByb3Rv
Q2FsbEZyYW1lKSk7CisgICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9O
YXRpdmUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24udGFnZ2VkUHRyKCksICZ2bSwgJnBy
b3RvQ2FsbEZyYW1lKSk7CiAKICAgICAgICAgaWYgKExJS0VMWSghdGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNPYmplY3QoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCmluZGV4
IDc0MDc2MjZhNzJkNi4uZjhkMGNiNTkzZDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTA5LDcgKzEwOSw3IEBAIHVzaW5nIEpT
T3JXYXNtSW5zdHJ1Y3Rpb24gPSBzdGQ6OnZhcmlhbnQ8Y29uc3QgSlNJbnN0cnVjdGlvbiosIGNv
bnN0IFdhc21JbnN0cnVjCiAgICAgICAgIGJvb2wgbV92YWxpZCB7IGZhbHNlIH07CiAgICAgICAg
IEhhbmRsZXJUeXBlIG1fdHlwZTsKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbV9uYXRpdmVDb2RlOworICAgICAg
ICBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1fbmF0aXZlQ29kZTsKICNlbmRpZgog
CiAgICAgICAgIEpTT3JXYXNtSW5zdHJ1Y3Rpb24gbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKaW5kZXggNTNkOGQxZWE2
YWU3Li44MGIwMTg5ZGE1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q0NhbGxIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHQKICAgICBs
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2Nv
cGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpl
bWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdo
ZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNo
YXIqIGRlc2NyaXB0aW9uKQordm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihDb2Rl
UHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBl
cnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQogewogICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAgICAgZW1pdENvZGUoaml0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ND
YWxsSGVscGVycy5oCmluZGV4IGU4YWU5ZmMxODE0Mi4uODUxNjdhNjA1YmI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKQEAgLTkzOCw3ICs5MzgsNyBAQCBwdWJs
aWM6CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91
bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQ
UiwgR1BSUmVnIHNjcmF0Y2gyKTsKIAotICAgIHN0YXRpYyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFNjb3BlZExhbWJk
YTx2b2lkKENDYWxsSGVscGVycyYpPiwgY29uc3QgY2hhciopOworICAgIHN0YXRpYyB2b2lkIGVt
aXRKSVRDb2RlT3ZlcihDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1i
ZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4sIGNvbnN0IGNoYXIqKTsKIAogICAgIHZvaWQgZW1pdENU
SVRodW5rUHJvbG9ndWUoYm9vbCByZXR1cm5BZGRyZXNzQWxyZWFkeVRhZ2dlZCA9IGZhbHNlKTsK
ICAgICB2b2lkIGVtaXRDVElUaHVua0VwaWxvZ3VlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAppbmRleCA4N2M3OWU2ZDk5MjMuLmMx
MGViYzU3MzBhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuY3BwCkBAIC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJh
dG8KICAgICBsb2NhbDIubGluaygmaml0KTsKICAgICBqaXQucmV0KCk7CiAKLSAgICBhdXRvIHN0
dWJCYXNlQ29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPih0
YWdDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KHN0dWJCYXNlKSk7CisgICAgYXV0byBzdHViQmFz
ZUNvZGVQdHIgPSBDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KHRhZ0NvZGVQdHI8TGlua0J1ZmZl
clB0clRhZz4oc3R1YkJhc2UpKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBzdHVi
QmFzZUNvZGVQdHIsIHN0dWJTaXplLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAg
Ly8gV2UgZG9uJ3QgdXNlIEZJTkFMSVpFX0NPREUoKSBmb3IgdHdvIHJlYXNvbnMuCiAgICAgLy8g
VGhlIGZpcnN0IGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0aGUgd3JpdGVhYmxlIGFkZHJlc3MsIGFz
IGRpc2Fzc2VtYmxlZCBpbnN0cnVjdGlvbnMsCkBAIC0yODUsNyArMjg1LDcgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gQUxXQVlTX0lOTElORSBqaXRXcml0
ZVRodW5rR2VuZXJhdG8KICAgICBmdW5jdGlvbkFzSW50IC09IDE7CiAgICAgZnVuY3Rpb24gPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbkFzSW50KTsKICNlbmRpZgotICAgIGF1dG8g
Y29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4odGFnQ0Z1bmN0
aW9uUHRyPEpJVFRodW5rUHRyVGFnPihmdW5jdGlvbikpOworICAgIGF1dG8gY29kZVB0ciA9IENv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+KHRhZ0NGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4oZnVu
Y3Rpb24pKTsKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
Pjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGNvZGVQdHIpOwogfQogI2VuZGlmIC8vIFVTRShF
WEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQpAQCAtMzM2LDcgKzMzNiw3IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6ZVNlcGFyYXRlZFdYSGVhcHModm9pZCogc3R1
YkJhc2UsIHNpemVfdCBzdHViCiAgICAgbWVtc2V0X3MoJndyaXRhYmxlQWRkciwgc2l6ZW9mKHdy
aXRhYmxlQWRkciksIDAsIHNpemVvZih3cml0YWJsZUFkZHIpKTsKIAogI2lmIEVOQUJMRShTRVBB
UkFURURfV1hfSEVBUCkKLSAgICBnX2pzY0NvbmZpZy5qaXRXcml0ZVNlcGFyYXRlSGVhcHMgPSBy
ZWludGVycHJldF9jYXN0PEpJVFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uPih3cml0ZVRodW5r
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBnX2pzY0NvbmZpZy5qaXRXcml0ZVNl
cGFyYXRlSGVhcHMgPSByZWludGVycHJldF9jYXN0PEpJVFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0
aW9uPih3cml0ZVRodW5rLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApAQCAtNzU0
LDcgKzc1NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlciBq
aXQ7CiAgICAgICAgICAgICAgICAgYXV0byBuZWFyVGFpbENhbGwgPSBqaXQubmVhclRhaWxDYWxs
KCk7Ci0gICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPE5vUHRyVGFnPihjdXJyZW50SXNsYW5kKSwgaXNsYW5kU2l6ZUluQnl0ZXMs
IExpbmtCdWZmZXI6OlByb2ZpbGU6Okp1bXBJc2xhbmQsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBD
b2RlUHRyPE5vUHRyVGFnPihjdXJyZW50SXNsYW5kKSwgaXNsYW5kU2l6ZUluQnl0ZXMsIExpbmtC
dWZmZXI6OlByb2ZpbGU6Okp1bXBJc2xhbmQsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGZh
bHNlKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQo
KSk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgdGhpcyB0byBhcHBlYXNlIHRoZSBhc3Nl
cnRpb24gdGhhdCB3ZSdyZSBub3QgZmluYWxpemluZyBvbiBhIGNvbXBpbGVyIHRocmVhZC4gSW4g
dGhpcyBzaXR1YXRpb24sIGl0J3MKQEAgLTEyODMsNyArMTI4Myw3IEBAIFJlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlOjpjcmVhdGVJbXBsKHNpemVf
dCBzaXplSW5CCiAgICAgdm9pZCoga2V5ID0gaml0X2hlYXBfdHJ5X2FsbG9jYXRlKHNpemVJbkJ5
dGVzKTsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKE1lbW9yeVB0cjo6bWFrZUZyb21S
YXdQb2ludGVyKGtleSksIGppdF9oZWFwX2dldF9zaXplKGtleSkpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUoTWVtb3J5UHRyOjpmcm9tVW50YWdnZWRQ
dHIoa2V5KSwgaml0X2hlYXBfZ2V0X3NpemUoa2V5KSkpOwogfQogCiBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlOjp+RXhlY3V0YWJsZU1lbW9yeUhhbmRsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVNZW1vcnlIYW5kbGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCmluZGV4IDY4MGVkMGI1ZWYwYy4u
NjIyMDM3M2IxYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVNZW1vcnlIYW5kbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVNZW1vcnlIYW5kbGUuaApAQCAtMjYsNyArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNp
ZiBVU0UoTElCUEFTX0pJVF9IRUFQKSAmJiBFTkFCTEUoSklUKQotI2luY2x1ZGUgPHd0Zi9NZXRh
QWxsb2NhdG9yUHRyLmg+CisjaW5jbHVkZSA8d3RmL0NvZGVQdHIuaD4KICNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNlbHNlCiAjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0
b3JIYW5kbGUuaD4KQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgRXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxFeGVjdXRhYmxlTWVtb3J5SGFuZGwKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlKTsKIAogcHVibGljOgotICAgIHVzaW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxv
Y2F0b3JQdHI8V1RGOjpIYW5kbGVNZW1vcnlQdHJUYWc+OworICAgIHVzaW5nIE1lbW9yeVB0ciA9
IENvZGVQdHI8V1RGOjpIYW5kbGVNZW1vcnlQdHJUYWc+OwogCiAgICAgLy8gRG9uJ3QgY2FsbCB0
aGlzIGRpcmVjdGx5IC0gZm9yIHByb3BlciBhY2NvdW50aW5nIGl0J3MgbmVjZXNzYXJ5IHRvIGNh
bGwKICAgICAvLyBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZSgpLgpAQCAtNTQsNyArNTQs
NyBAQCBwdWJsaWM6CiAKICAgICBNZW1vcnlQdHIgZW5kKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBNZW1vcnlQdHI6Om1ha2VGcm9tUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZv
aWQqPihlbmRBc0ludGVnZXIoKSkpOworICAgICAgICByZXR1cm4gTWVtb3J5UHRyOjpmcm9tVW50
YWdnZWRQdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kQXNJbnRlZ2VyKCkpKTsKICAgICB9
CiAKICAgICB1aW50cHRyX3Qgc3RhcnRBc0ludGVnZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCmluZGV4IGJkYjdiN2I4ZGU3Zi4uY2E4Njg1OTRiMDI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCkBAIC02MSwxMCArNjEsMTAgQEAgU2Vjb25kcyB0b3RhbEZUTENvbXBp
bGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTERGR0NvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZU
TEIzQ29tcGlsZVRpbWU7CiAKLXZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBu
ZXdDYWxsZWVGdW5jdGlvbikKK3ZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0Nh
bGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgKLSAgICAg
ICAgQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLAorICAgICAgICBDb2Rl
TG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KENvZGVQdHI8UmV0dXJuQWRkcmVzc1B0
clRhZz46OmZyb21UYWdnZWRQdHIoY29uc3RfY2FzdDx2b2lkKj4ocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKSkpLAogICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJU
YWc+KCkpOwogfQogCkBAIC05OTUsNyArOTk1LDcgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAg
ICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKICAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2Rl
IGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOworICAgIENvZGVQdHI8SlNF
bnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50
cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7CiAgICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBC
YXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOwogCiAgICAgbV9qaXRDb2Rl
LT5tX3VubGlua2VkQ2FsbHMgPSBGaXhlZFZlY3RvcjxVbmxpbmtlZENhbGxMaW5rSW5mbz4obV91
bmxpbmtlZENhbGxzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCAxZDgxMDEy
MjE1YjEuLjg1ZjYyYTE4ZjFjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC03MiwxMyAr
NzIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KICAgICBz
dHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb207Ci0g
ICAgICAgIEZ1bmN0aW9uUHRyPHRhZz4gY2FsbGVlOworICAgICAgICBDb2RlUHRyPHRhZz4gY2Fs
bGVlOwogCiAgICAgICAgIENhbGxSZWNvcmQoKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb20sIEZ1bmN0aW9uUHRyPHRh
Zz4gY2FsbGVlKQorICAgICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb20s
IENvZGVQdHI8dGFnPiBjYWxsZWUpCiAgICAgICAgICAgICA6IGZyb20oZnJvbSkKICAgICAgICAg
ICAgICwgY2FsbGVlKGNhbGxlZSkKICAgICAgICAgewpAQCAtMTQ4LDcgKzE0OCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlu
a0luZm87CiAgICAgfTsKIAotICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJl
dHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVu
Y3Rpb24pOworICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJl
c3NQdHIsIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKICAg
ICBjbGFzcyBKSVQgZmluYWwgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmll
bmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwpAQCAtMTk4LDcgKzE5OCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sq
LCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJv
bSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCi0gICAgICAgIENhbGwgYXBw
ZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorICAg
ICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uKQogICAgICAgICB7CiAgICAgICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgIG1fZmFyQ2FsbHMuYXBwZW5kKEZhckNhbGxSZWNv
cmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsK
QEAgLTIxMSw3ICsyMTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAjaWYgT1Mo
V0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aFNsb3dQ
YXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQorICAgICAgICBDYWxsIGFwcGVuZENhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IENv
ZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewogICAgICAgICAgICAg
Q2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlwZShPcGVyYXRpb25Q
dHJUYWcpOwogICAgICAgICAgICAgbV9mYXJDYWxscy5hcHBlbmQoRmFyQ2FsbFJlY29yZChmdW5j
dGlvbkNhbGwsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpOwpAQCAtNjkz
LDEzICs2OTMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaGFzQW55
U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9
CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBDb2RlUHRy
PENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soQWRkcmVzcyk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBD
b2RlUHRyPENGdW5jdGlvblB0clRhZz4pOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBDb2RlUHRy
PENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lk
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgQ29kZVB0cjxD
RnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJl
c3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmluZGV4IDRlZDQ3NTFhNzE3Yy4uMWRmOWI1YTg2
YjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAg
LTc0Niw3ICs3NDYsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBKU0luc3RydWN0aW9uKgogI2lmIEVOQUJMRShNQVRI
X0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKICAgICBhZGRMaW5rVGFz
ayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4o
KSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8
Y2hhcio+KCk7CisgICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlu
bGluZUVuZCkudGFnZ2VkUHRyPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGlu
ZVN0YXJ0KS50YWdnZWRQdHI8Y2hhcio+KCk7CiAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRD
b2RlU2l6ZSArPSBzaXplOwogICAgIH0pOwogI2VuZGlmCkBAIC04MTMsNyArODEzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMs
IGNvbnN0IEpTSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRv
IGlubGluZUVuZCA9IGxhYmVsKCk7CiAgICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
KGlubGluZUVuZCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBz
aXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVFbmQpLnRhZ2dlZFB0cjxj
aGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVTdGFydCkudGFnZ2VkUHRyPGNo
YXIqPigpOwogICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKICAg
ICB9KTsKICNlbmRpZgpAQCAtODUxLDcgKzg1MSw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEpTSW5zdHJ1Y3Rpb24q
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVs
KCk7CiAgICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoRW5kKS5leGVj
dXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0
YXJ0KS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLnRhZ2dlZFB0cjxjaGFyKj4oKSAtIGxp
bmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS50YWdnZWRQdHI8Y2hhcio+KCk7CiAg
ICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgIH0pOwogI2Vu
ZGlmCkBAIC05MTIsNyArOTEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEpTSW5zdHJ1Y3Rpb24KICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKICAgICBh
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90
IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLmV4ZWN1dGFibGVBZGRy
ZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLmV4ZWN1
dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihzbG93UGF0aEVuZCkudGFnZ2VkUHRyPGNoYXIqPigpIC0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLnRhZ2dlZFB0cjxjaGFyKj4oKTsKICAgICAgICAgbWF0
aElDLT5tX2dlbmVyYXRlZENvZGVTaXplICs9IHNpemU7CiAgICAgfSk7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCmluZGV4IDY4MTU5YmRmNjljNi4uOTQ0MDE0NTBj
MzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjAsMTEgKzE2
MCwxMSBAQCBKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRDb2RlV2l0aENvZGVSZWYoKQogdm9pZCog
SklUQ29kZVdpdGhDb2RlUmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZz
ZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwotICAgIGFzc2VydElzVGFnZ2VkV2l0
aDxKU0VudHJ5UHRyVGFnPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
YXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KG1fcmVmLmNvZGUoKS50YWdnZWRQdHIo
KSk7CiAgICAgaWYgKCFvZmZzZXQpCi0gICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKS50YWdnZWRQdHIoKTsK
IAotICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDb2RlUHRyPGNoYXIqLCBKU0Vu
dHJ5UHRyVGFnPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgY2hhciog
ZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NvZGVQdHI8Y2hhciosIEpTRW50cnlQdHJUYWc+KG1f
cmVmLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAgICAgcmV0dXJuIHRhZ0NvZGVQdHI8SlNFbnRyeVB0
clRhZz4oZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQpOwogfQogCkBAIC0xNzgsNyArMTc4LDcg
QEAgdm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBv
ZmZzZXQpCiB1bnNpZ25lZCBKSVRDb2RlV2l0aENvZGVSZWY6Om9mZnNldE9mKHZvaWQqIHBvaW50
ZXJJbnRvQ29kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7Ci0gICAgaW50cHRyX3Qg
cmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlckludG9Db2RlKSAtIG1f
cmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzczxpbnRwdHJfdD4oKTsKKyAgICBpbnRwdHJfdCBy
ZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0gbV9y
ZWYuY29kZSgpLnRhZ2dlZFB0cjxpbnRwdHJfdD4oKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpKSA9PSByZXN1bHQpOwogICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KTsKIH0KQEAgLTIwMCw3ICsyMDAs
NyBAQCBEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVFR5cGUgaml0VHlwZSkKIHsKIH0K
IAotRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRDb2RlOjpDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVj
aywgSklUVHlwZSBqaXRUeXBlLCBKSVRDb2RlOjpTaGFyZUF0dHJpYnV0ZSBzaGFyZUF0dHJpYnV0
ZSkKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoSklUQ29kZTo6Q29kZVJlZjxKU0VudHJ5
UHRyVGFnPiByZWYsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2ssIEpJVFR5
cGUgaml0VHlwZSwgSklUQ29kZTo6U2hhcmVBdHRyaWJ1dGUgc2hhcmVBdHRyaWJ1dGUpCiAgICAg
OiBKSVRDb2RlV2l0aENvZGVSZWYocmVmLCBqaXRUeXBlLCBzaGFyZUF0dHJpYnV0ZSkKICAgICAs
IG1fd2l0aEFyaXR5Q2hlY2sod2l0aEFyaXR5Q2hlY2spCiB7CkBAIC0yMDgsNyArMjA4LDcgQEAg
RGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRDb2RlOjpDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IHJlZiwgSklUQ29kZTo6Q29kZVAKICAgICBBU1NFUlQobV93aXRoQXJpdHlDaGVjayk7CiB9
CiAKLURpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoSklUQ29kZTo6Q29kZVJlZjxKU0VudHJ5
UHRyVGFnPiByZWYsIEpJVENvZGU6OkNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2ssIEpJVFR5cGUgaml0VHlwZSwgSW50cmluc2ljIGludHJpbnNpYywgSklUQ29kZTo6U2hhcmVB
dHRyaWJ1dGUgc2hhcmVBdHRyaWJ1dGUpCitEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJ
VENvZGU6OkNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVmLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlIGppdFR5cGUsIEludHJpbnNpYyBpbnRyaW5zaWMsIEpJ
VENvZGU6OlNoYXJlQXR0cmlidXRlIHNoYXJlQXR0cmlidXRlKQogICAgIDogSklUQ29kZVdpdGhD
b2RlUmVmKHJlZiwgaml0VHlwZSwgc2hhcmVBdHRyaWJ1dGUpCiAgICAgLCBtX3dpdGhBcml0eUNo
ZWNrKHdpdGhBcml0eUNoZWNrKQogewpAQCAtMjIxLDcgKzIyMSw3IEBAIERpcmVjdEpJVENvZGU6
On5EaXJlY3RKSVRDb2RlKCkKIHsKIH0KIAotdm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXpl
Q29kZVJlZkZvckRGRyhKSVRDb2RlOjpDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlZiwgSklUQ29k
ZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKK3ZvaWQgRGlyZWN0SklU
Q29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkcoSklUQ29kZTo6Q29kZVJlZjxKU0VudHJ5UHRy
VGFnPiByZWYsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fcmVmKTsKICAgICBtX3JlZiA9IHJlZjsKQEAgLTIzMCw3ICsyMzAs
NyBAQCB2b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmRm9yREZHKEpJVENvZGU6
OkNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVmLAogICAgIEFTU0VSVChtX3dpdGhBcml0eUNoZWNr
KTsKIH0KIAotSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBEaXJlY3RKSVRDb2RlOjph
ZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkKK0NvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gRGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHkpCiB7
CiAgICAgc3dpdGNoIChhcml0eSkgewogICAgIGNhc2UgQXJpdHlDaGVja05vdFJlcXVpcmVkOgpA
QCAtMjU5LDcgKzI1OSw3IEBAIE5hdGl2ZUpJVENvZGU6On5OYXRpdmVKSVRDb2RlKCkKIHsKIH0K
IAotSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBOYXRpdmVKSVRDb2RlOjphZGRyZXNz
Rm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkKK0NvZGVQdHI8SlNFbnRyeVB0clRhZz4gTmF0
aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHkpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHN3aXRjaCAoYXJpdHkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgKaW5kZXggYTllNmI4YWFlMTA5Li5lMzllZjRjNDc1MGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCkBAIC02Nyw3ICs2Nyw2IEBAIHN0YXRpY19hc3Nl
cnQoV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIoc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5
cGVfdDxKSVRUeXBlCiAKIGNsYXNzIEpJVENvZGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8SklUQ29kZT4gewogcHVibGljOgotICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IHVzaW5nIENv
ZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjsKICAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPiB1c2luZyBDb2RlUmVmID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz47CiAKICAgICBz
dGF0aWMgQVNDSUlMaXRlcmFsIHR5cGVOYW1lKEpJVFR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlSW5saW5lcy5oCmluZGV4IGJjZmJjZmY5NWFhYy4uNjY4ZTFkODgwZTlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGVJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlSW5saW5lcy5oCkBAIC0zOCw3
ICszOCw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVRDb2RlOjpleGVjdXRlKFZNKiB2bSwg
UHJvdG9DYWxsRnJhbWUqIHByb3RvQ2FsbEZyYW1lKQogICAgICAgICB2bS0+ZGlkRW50ZXJWTSA9
IHRydWU7CiAgICAgfSk7CiAgICAgdm9pZCogZW50cnlBZGRyZXNzOwotICAgIGVudHJ5QWRkcmVz
cyA9IGFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgIGVudHJ5QWRkcmVzcyA9IGFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS50YWdnZWRQ
dHIoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9KYXZh
U2NyaXB0KGVudHJ5QWRkcmVzcywgdm0sIHByb3RvQ2FsbEZyYW1lKSk7CiAgICAgcmV0dXJuIHNj
b3BlLmV4Y2VwdGlvbigpID8ganNOdWxsKCkgOiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvbXBpbGF0aW9uLmgKaW5kZXggYWQ4OWM2M2FmZmQzLi4wMDdlMTFjZTcy
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb24u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uLmgKQEAgLTQ4
LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKENv
bXBpbGF0aW9uJiYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVENvbXBpbGF0aW9uUHRyVGFnPiBjb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlUmVmLmNvZGUoKTsgfQorICAgIENvZGVQdHI8SklUQ29tcGlsYXRp
b25QdHJUYWc+IGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9CiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVENvbXBpbGF0aW9uUHRyVGFnPiBjb2RlUmVmKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlUmVmOyB9CiAgICAgCiAgICAgQ1N0cmluZyBkaXNhc3NlbWJseSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZVJlZi5kaXNhc3NlbWJseSgpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAKaW5kZXggYTE4ZmQ2M2YxMjc5Li44
MDIzZGM0ZDcyYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlz
YXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2Vt
Ymxlci5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgSklURGlzYXNzZW1ibGVyOjp+SklURGlzYXNzZW1i
bGVyKCkKIAogdm9pZCBKSVREaXNhc3NlbWJsZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikKIHsKLSAgICBtX2NvZGVTdGFydCA9IGxpbmtCdWZmZXIuZW50
cnlwb2ludDxEaXNhc3NlbWJseVB0clRhZz4oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgbV9jb2RlU3RhcnQgPSBsaW5rQnVmZmVyLmVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJU
YWc+KCkudW50YWdnZWRQdHIoKTsKICAgICBtX2NvZGVFbmQgPSBiaXR3aXNlX2Nhc3Q8dWludDhf
dCo+KG1fY29kZVN0YXJ0KSArIGxpbmtCdWZmZXIuc2l6ZSgpOwogCiAgICAgZHVtcEhlYWRlcihv
dXQsIGxpbmtCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5jcHAKaW5kZXggNzhhN2IwMDYxYjliLi5mNzUxZDlkY2MwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNjEsNyArNjEsNyBAQCB2b2lkIGdl
bmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoaGFuZGxl
ci5tX3ZhbGlkKSB7CiAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGhhbmRsZXIubV9j
YXRjaFBDRm9ySW50ZXJwcmV0ZXI7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgY2F0Y2hSb3V0
aW5lID0gaGFuZGxlci5tX25hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAg
Y2F0Y2hSb3V0aW5lID0gaGFuZGxlci5tX25hdGl2ZUNvZGUudGFnZ2VkUHRyKCk7CiAjZWxzZQog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICNlcnJvciBXQVNNIHJlcXVpcmVzIHRoZSBKSVQsIHNv
IHRoaXMgc2VjdGlvbiBhc3N1bWVzIHdlIGFyZSBpbiBKUwpAQCAtNzUsNyArNzUsNyBAQCB2b2lk
IGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgICAg
IGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRDb2RlUHRyKHBjLT5vcGNvZGVJRCgpKTsKICNlbmRp
ZgogICAgIH0gZWxzZQotICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTEludDo6aGFuZGxlVW5jYXVn
aHRFeGNlcHRpb24odm0pLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBjYXRj
aFJvdXRpbmUgPSBMTEludDo6aGFuZGxlVW5jYXVnaHRFeGNlcHRpb24odm0pLmNvZGUoKS50YWdn
ZWRQdHIoKTsKIAogICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsRnJhbWUp
IDwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odm0udG9wRW50cnlGcmFtZSkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IGY5NTUzOTFlYThjZi4uMWFkNzhmMmM5
NmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtOTEsNyArOTEs
NyBAQCBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZE5lYXJDYWxsKENvZGVQ
dHI8Tm9QdHJUYWc+IHRhcmdldCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8g
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KICAgICBDYWxsIG5ha2Vk
Q2FsbCA9IG5lYXJDYWxsKCk7Ci0gICAgbV9uZWFyQ2FsbHMuYXBwZW5kKE5lYXJDYWxsUmVjb3Jk
KG5ha2VkQ2FsbCwgdGFyZ2V0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCkudG9GdW5jdGlv
blB0cigpKSk7CisgICAgbV9uZWFyQ2FsbHMuYXBwZW5kKE5lYXJDYWxsUmVjb3JkKG5ha2VkQ2Fs
bCwgdGFyZ2V0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCkpKTsKICAgICByZXR1cm4gbmFr
ZWRDYWxsOwogfQogCkBAIC05OSw3ICs5OSw3IEBAIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJ
VDo6ZW1pdE5ha2VkTmVhclRhaWxDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IHRhcmdldCkKIHsKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJUYWlsQ2FsbCgpOwotICAg
IG1fbmVhckNhbGxzLmFwcGVuZChOZWFyQ2FsbFJlY29yZChuYWtlZENhbGwsIHRhcmdldC5yZXRh
Z2dlZDxKU0ludGVybmFsUHRyVGFnPigpLnRvRnVuY3Rpb25QdHIoKSkpOworICAgIG1fbmVhckNh
bGxzLmFwcGVuZChOZWFyQ2FsbFJlY29yZChuYWtlZENhbGwsIHRhcmdldC5yZXRhZ2dlZDxKU0lu
dGVybmFsUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKIH0KIApAQCAtMTE4LDcg
KzExOCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgpCiAg
ICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3Qg
Q29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogewogICAgIHVwZGF0ZVRvcENhbGxG
cmFtZSgpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0
aW9uKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MgZnVuY3Rpb24pCiAgICAgZXhjZXB0aW9uQ2hl
Y2soKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25z
dCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiB7CiAgICAgdXBkYXRlVG9wQ2Fs
bEZyYW1lKCk7IC8vIFRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdG9wQ2Fs
bEZyYW1lIHRvIHRoZWlyIGNhbGxlcgogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsKGZ1bmN0aW9uKTsKQEAgLTE0MSw3ICsxNDEsNyBAQCBBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBDb2RlUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVu
Y3Rpb24pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7
CkBAIC0xNTUsNyArMTU1LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoQWRkcmVzcyBmdW4KIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IENv
ZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVKU1IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRN
YXRoSUMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKaW5kZXggMmFi
Njg0Nzc1NDFmLi4yMWIwNDI0ZTQ5NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUTWF0aElDLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRo
SUMuaApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFJlcGxhY2VtZW50KQorICAgIHZvaWQg
Z2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVQdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBjYWxsUmVwbGFjZW1lbnQpCiAgICAgewogICAgICAgICBhdXRvIGxpbmtKdW1wVG9P
dXRPZkxpbmVTbmlwcGV0ID0gWyZdICgpIHsKICAgICAgICAgICAgIENDYWxsSGVscGVycyBqaXQo
Y29kZUJsb2NrKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faW5saW5l
U3RhcnQgPSBzdGFydDsKIAogICAgICAgICBtX2lubGluZUVuZCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihzdGF0ZS5mYXN0UGF0aEVuZCk7Ci0gICAgICAgIEFTU0VS
VChtX2lubGluZUVuZC51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkgPiBtX2lubGluZVN0YXJ0
LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFTU0VSVChtX2lubGluZUVu
ZC51bnRhZ2dlZFB0cigpID4gbV9pbmxpbmVTdGFydC51bnRhZ2dlZFB0cigpKTsKIAogICAgICAg
ICBtX3Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KHN0YXRlLnNsb3dQYXRoQ2FsbCk7CiAgICAgICAgIG1fc2xvd1BhdGhTdGFydExv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHN0YXRlLnNs
b3dQYXRoU3RhcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5k
ZXggYmM5MDczNThjYzU5Li43ODI5ZjI3ZWI3N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcApAQCAtNzI2LDcgKzcyNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkK
ICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CiAKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRy
YUNUSVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvdykpOworICAgIHBhdGNoQnVmZmVyLmxpbms8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb24sIG9wZXJhdGlvblRocm93KTsKICAgICByZXR1cm4g
RklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9w
X3Rocm93X2hhbmRsZXIiKTsKIH0KIApAQCAtMTMxMSwxMCArMTMxMSwxMCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRv
cihWTSYgdm0pCiAgICAgaml0LnJldCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJDYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKSk7Cisg
ICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldyaXRlQmFycmll
ckNhbGwsIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKTsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBpZiAoT3B0aW9uczo6dXNlREZHSklUKCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsob3BlcmF0aW9uT3B0aW1pemVDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbk9wdGltaXplKSk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25PcHRpbWl6ZUNhbGwsIG9wZXJhdGlvbk9wdGltaXplKTsKICNlbmRpZgog
ICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJC
YXNlbGluZTogb3BfZW50ZXJfaGFuZGxlciIpOwogfQpAQCAtMTU1OSw3ICsxNTU5LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hh
bmRsZXJHZW5lcmF0b3IoVk0mIHYKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAo
KTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
b3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhbmRsZVRy
YXBzKSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbiwg
b3BlcmF0aW9uSGFuZGxlVHJhcHMpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hl
Y2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9USFVO
SyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfY2hlY2tfdHJhcHNf
aGFuZGxlciIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggMDg3MTA3ZTE2NzY2Li4xNGY0ODcyMjhiNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMTgyLDcgKzE4Miw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NYXRlcmlhbGl6ZVJlbW90ZUZ1bmN0aW9uVGFyZ2V0
Q29kZSwgU2xvd1BhdGhSCiAgICAgICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVG
b3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgdGFyZ2V0RnVuY3Rpb24sIHNjb3Bl
LCBDb2RlRm9yQ2FsbCwgY29kZUJsb2NrU2xvdCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZVJlc3VsdChudWxscHRyLCBudWxscHRyKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChleGVjdXRhYmxlLT5lbnRyeXBvaW50
Rm9yKENvZGVGb3JDYWxsLCBNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgY29k
ZUJsb2NrU2xvdCk7CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50
cnlwb2ludEZvcihDb2RlRm9yQ2FsbCwgTXVzdENoZWNrQXJpdHkpLnRhZ2dlZFB0cigpLCBjb2Rl
QmxvY2tTbG90KTsKICAgICB9CiB9CiAKQEAgLTIwNDQsNyArMjA0NCw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWl6ZSwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoVk0q
IHZtUG9pbnRlciwKIAogICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwogICAgICAg
ICBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPnNldERpZE9wdGltaXplKFRyaVN0YXRl
OjpUcnVlKTsKLSAgICAgICAgdm9pZCogdGFyZ2V0UEMgPSB1bnRhZ0NvZGVQdHI8SklUVGh1bmtQ
dHJUYWc+KHZtLmdldENUSVN0dWIoREZHOjpvc3JFbnRyeVRodW5rR2VuZXJhdG9yKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHZvaWQqIHRhcmdldFBDID0gdW50YWdDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKERGRzo6b3NyRW50cnlUaHVua0dlbmVy
YXRvcikuY29kZSgpLnRhZ2dlZFB0cigpKTsKICAgICAgICAgdGFyZ2V0UEMgPSB0YWdDb2RlUHRy
V2l0aFN0YWNrUG9pbnRlckZvckpJVENhbGwodGFyZ2V0UEMsIGNhbGxGcmFtZSk7CiAgICAgICAg
IHJldHVybiBlbmNvZGVSZXN1bHQodGFyZ2V0UEMsIGRhdGFCdWZmZXIpOwogICAgIH0KQEAgLTIw
OTgsOCArMjA5OCw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcnlPU1JF
bnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsIFNsb3dQYXRoUmV0CiAgICAgc3dpdGNoIChvcHRp
bWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0gREZHOjpwcmVwYXJlQ2F0Y2hPU1JF
bnRyeSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIG9wdGltaXplZFJlcGxhY2VtZW50LCBieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChlbnRyeS5leGVjdXRhYmxl
QWRkcmVzczxjaGFyKj4oKSwgb3B0aW1pemVkUmVwbGFjZW1lbnQpOworICAgICAgICBDb2RlUHRy
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0gREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRy
eSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIG9wdGltaXplZFJlcGxhY2VtZW50LCBieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChlbnRyeS50YWdnZWRQdHI8Y2hh
cio+KCksIG9wdGltaXplZFJlcGxhY2VtZW50KTsKICAgICB9CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgYnJlYWs7CkBAIC0yNzY2LDE0ICsyNzY2LDE0IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKEpTR2xvYmFs
CiAKICAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5i
YXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2Nr
LT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwotICAg
IHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC50YWdnZWRQ
dHIoKTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBKU1N0cmluZyogc3Ry
aW5nID0gYXNTdHJpbmcoa2V5KTsKICAgICAgICAgaWYgKHN0cmluZy0+bGVuZ3RoKCkgPT0gMSkg
ewogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gc3RyaW5nLT52YWx1ZShnbG9iYWxPYmplY3Qp
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsK
LSAgICAgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKG1pbiwgdmFsdWVb
MF0pLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXN1bHQgPSBsaW5rZWRUYWJs
ZS5jdGlGb3JWYWx1ZShtaW4sIHZhbHVlWzBdKS50YWdnZWRQdHIoKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMjc5MywxMSArMjc5MywxMSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKFZNKiB2bVBvaQogICAg
IEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1f
bWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQot
ICAgICAgICByZXN1bHQgPSBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZShtaW4sIGtleS5hc0ludDMy
KCkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0
aUZvclZhbHVlKG1pbiwga2V5LmFzSW50MzIoKSkudGFnZ2VkUHRyKCk7CiAgICAgZWxzZSBpZiAo
a2V5LmlzRG91YmxlKCkgJiYga2V5LmFzRG91YmxlKCkgPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
a2V5LmFzRG91YmxlKCkpKQotICAgICAgICByZXN1bHQgPSBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1
ZShtaW4sIHN0YXRpY19jYXN0PGludDMyX3Q+KGtleS5hc0RvdWJsZSgpKSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKKyAgICAgICAgcmVzdWx0ID0gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUobWluLCBz
dGF0aWNfY2FzdDxpbnQzMl90PihrZXkuYXNEb3VibGUoKSkpLnRhZ2dlZFB0cigpOwogICAgIGVs
c2UKLSAgICAgICAgcmVzdWx0ID0gbGlua2VkVGFibGUubV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVB
ZGRyZXNzKCk7CisgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC50YWdn
ZWRQdHIoKTsKICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNTd2l0Y2hQdHJUYWc+KHJlc3VsdCk7
CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CkBAIC0yODIw
LDkgKzI4MjAsOSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3Ry
aW5nV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKEpTR2xvYgogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAgICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgcmVzdWx0ID0gbGlua2VkVGFi
bGUuY3RpRm9yVmFsdWUodW5saW5rZWRUYWJsZSwgdmFsdWUpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKHVubGlua2VkVGFibGUs
IHZhbHVlKS50YWdnZWRQdHIoKTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gbGlua2Vk
VGFibGUuY3RpRGVmYXVsdCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHJlc3VsdCA9
IGxpbmtlZFRhYmxlLmN0aURlZmF1bHQoKS50YWdnZWRQdHIoKTsKIAogICAgIGFzc2VydElzVGFn
Z2VkV2l0aDxKU1N3aXRjaFB0clRhZz4ocmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4ocmVzdWx0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggNWFlOGYyYzczMmY3Li5hZmI5YTE5ZjhmMWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0x
NjYwLDcgKzE2NjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bQogICAgIEp1bXAgZXhjZXB0
aW9uQ2hlY2sgPSBqaXQuanVtcCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lKSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbiwgb3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUp
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7CiB9CkBAIC0xODkw
LDcgKzE4OTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdgogICAgIEp1bXAganVtcFRvSGFu
ZGxlciA9IGppdC5qdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25HZXRGcm9tU2NvcGUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUpOwogICAgIGF1dG8gaGFuZGxl
ciA9IHZtLmdldENUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlv
bkdlbmVyYXRvcik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhqdW1wVG9IYW5kbGVyLCBDb2RlTG9j
YXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVy
biBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTog
c2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwpAQCAtMjA5MCw3ICsyMDkwLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3RvX3Njb3BlR2Vu
ZXJhdG9yKFZNJiB2bSkKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAoKTsKIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0
aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblB1dFRvU2NvcGUpKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uLCBvcGVyYXRp
b25QdXRUb1Njb3BlKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2Rl
TG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcHV0X3RvX3Njb3BlIik7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0
aWNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2l6ZVN0YXRpc3RpY3MuY3Bw
CmluZGV4IGE2YTMwNTBmYzgxNC4uZDJkMWMxZWJkYzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmNwcApAQCAtNDYsNyArNDYsNyBAQCB2b2lk
IEpJVFNpemVTdGF0aXN0aWNzOjptYXJrRW5kKE1hcmtlciBtYXJrZXIsIENDYWxsSGVscGVycyYg
aml0KQogewogICAgIENDYWxsSGVscGVyczo6TGFiZWwgZW5kID0gaml0LmxhYmVsSWdub3JpbmdX
YXRjaHBvaW50cygpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPSwgdGhpc10gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8Tm9QdHJUYWc+KGVuZCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxp
bmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obWFya2VyLnN0YXJ0KS51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxOb1B0clRhZz4oZW5kKS51bnRhZ2dlZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxOb1B0clRhZz4obWFya2VyLnN0YXJ0KS51bnRhZ2dlZFB0cjxjaGFyKj4o
KTsKICAgICAgICAgbGlua0J1ZmZlci5hZGRNYWluVGhyZWFkRmluYWxpemF0aW9uVGFzayhbPSwg
dGhpc10gewogICAgICAgICAgICAgYXV0byYgZW50cnkgPSBtX2RhdGEuYWRkKG1hcmtlci5pZGVu
dGlmaWVyLCBFbnRyeSB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICsrZW50cnku
Y291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0
aW5lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKaW5kZXgg
MzdhMDIyZGU1MjI3Li4yMDFiZGRjOTg5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJSb3V0aW5lLmgKQEAgLTYxLDggKzYxLDcgQEAgcHVibGljOgogICAgIAogICAgIC8v
IFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBDb2RlUHRyIHRvIHNvbWVvbmUgd2hvIGlu
c2lzdHMgb24gdGFraW5nCiAgICAgLy8gYSBSZWZQdHI8SklUU3R1YlJvdXRpbmU+LgotICAgIHN0
YXRpYyBSZWY8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZSgKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiByYXdDb2RlUG9p
bnRlcikKKyAgICBzdGF0aWMgUmVmPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVTZWxmTWFuYWdlZFJv
dXRpbmUoQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gcmF3Q29kZVBvaW50ZXIpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBKSVRTdHViUm91dGluZShNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYocmF3Q29kZVBvaW50ZXIpKSk7CiAgICAgfQpAQCAtNzUsOSArNzQsOSBAQCBwdWJsaWM6CiAg
ICAgLy8gdGhlIGNodXJuLgogICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4mIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KICAgICAKLSAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBhc0Nv
ZGVQdHIoUmVmPEpJVFN0dWJSb3V0aW5lPiYmIHN0dWJSb3V0aW5lKQorICAgIHN0YXRpYyBDb2Rl
UHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBhc0NvZGVQdHIoUmVmPEpJVFN0dWJSb3V0aW5lPiYm
IHN0dWJSb3V0aW5lKQogICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiByZXN1bHQgPSBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKTsKKyAg
ICAgICAgQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gcmVzdWx0ID0gc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCk7CiAgICAgICAgIEFTU0VSVCghIXJlc3VsdCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCmlu
ZGV4IDc5MTg1NDdkMzdjNy4uZWViYzUwZGZkYTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRUaHVua3MuY3BwCkBAIC05MywzNyArOTMsMzcgQEAgaW5saW5lIGJvb2wgSklUVGh1bmtz
OjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0
YWIKICAgICByZXR1cm4gYUV4ZWN1dGFibGUuZnVuY3Rpb24oKSA9PSBzdGQ6OmdldDwwPihiKSAm
JiBhRXhlY3V0YWJsZS5jb25zdHJ1Y3RvcigpID09IHN0ZDo6Z2V0PDE+KGIpICYmIGFFeGVjdXRh
YmxlLmltcGxlbWVudGF0aW9uVmlzaWJpbGl0eSgpID09IHN0ZDo6Z2V0PDI+KGIpICYmIGFFeGVj
dXRhYmxlLm5hbWUoKSA9PSBzdGQ6OmdldDwzPihiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGwoVk0mIHZtKQorQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNJiB2bSkKIHsK
ICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBu
YXRpdmVDYWxsR2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0mIHZtKQorQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0mIHZt
KQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIo
dm0sIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGwoVk0m
IHZtKQorQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2Fs
bChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICByZXR1cm4g
Y3RpU3R1Yih2bSwgbmF0aXZlVGFpbENhbGxHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxD
YWxsV2l0aG91dFNhdmVkVGFncyhWTSYgdm0pCitDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRU
aHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSYgdm0pCiB7CiAgICAg
QVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZl
VGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0
aW9uQ2FsbChWTSYgdm0pCitDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUlu
dGVybmFsRnVuY3Rpb25DYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklU
KCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRv
cikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJ
VFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChWTSYgdm0pCitDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0m
IHZtKQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0
dWIodm0sIGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCmluZGV4IDhlOTg4NzhmOWU4ZS4uM2ZiYzgyZjBm
Y2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKQEAgLTU2LDEyICs1Niwx
MiBAQCBwdWJsaWM6CiAgICAgSklUVGh1bmtzKCk7CiAgICAgfkpJVFRodW5rcygpIGZpbmFsOwog
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVDYWxs
KFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRp
dmVDb25zdHJ1Y3QoVk0mKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJU
YWc+IGN0aU5hdGl2ZVRhaWxDYWxsKFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiBjdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0mKTsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rp
b25DYWxsKFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBj
dGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJik7CisgICAgQ29kZVB0cjxKSVRUaHVua1B0
clRhZz4gY3RpTmF0aXZlQ2FsbChWTSYpOworICAgIENvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0
aU5hdGl2ZUNvbnN0cnVjdChWTSYpOworICAgIENvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5h
dGl2ZVRhaWxDYWxsKFZNJik7CisgICAgQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZl
VGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNJik7CisgICAgQ29kZVB0cjxKSVRUaHVua1B0clRh
Zz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0mKTsKKyAgICBDb2RlUHRyPEpJVFRodW5rUHRy
VGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJik7CiAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGN0aVN0dWIoVk0mLCBUaHVua0dlbmVyYXRvcik7
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjdGlTbG93UGF0aEZ1
bmN0aW9uU3R1YihWTSYsIFNsb3dQYXRoRnVuY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbG93UGF0aENhbGwuY3BwCmluZGV4IGIwNmUwYmZlNjhmMi4uYWI0ZTAyMjY5N2E0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCkBAIC05Miw3ICs5
Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUU2xvd1BhdGhD
YWxsOjpnZW5lcmF0ZVRodW5rKFZNJiB2bSwgU2xvCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGV4
Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmsp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihzbG93UGF0aEZ1bmN0aW9uKSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25QdHJU
YWc+KGNhbGwsIHNsb3dQYXRoRnVuY3Rpb24pOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0
aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTEla
RV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTbG93UGF0aENhbGwiKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKaW5k
ZXggNTk2YjBjMDUyMjE4Li5mOGJkYjkyZDU0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC0xNTMsNyArMTUzLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXQoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmaW5hbGl6ZShNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGZhbGxiYWNrLCBjb25zdCBjaGFyKiB0aHVu
a0tpbmQpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZmlu
YWxpemUoQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gZmFsbGJhY2ssIGNvbnN0IGNoYXIqIHRodW5r
S2luZCkKICAgICAgICAgewogICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhp
cywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpTcGVjaWFsaXplZFRodW5r
KTsKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9u
TGFiZWw8SklUVGh1bmtQdHJUYWc+KGZhbGxiYWNrKSk7CkBAIC0xNjQsMTIgKzE2NCwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIHRhcmdldCBmdW5j
dGlvbiB1c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBmaXJzdCBhcmd1bWVudAogICAgICAgICAvLyBh
bmQgcmV0dXJuIHZhbHVlLiBMaWtlIGFueSBzZW5zaWJsZSBhcmNoaXRlY3R1cmUgd291bGQuCi0g
ICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlKEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24pCisgICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlKENvZGVQdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewogICAgICAgICAgICAgbV9jYWxscy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBmdW5jdGlvbi5yZXRh
Z2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
dm9pZCBjYWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5nUmV0dXJuKEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlUHJl
c2VydmluZ1JldHVybihDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAg
IHsKICAgICAgICAgICAgIGlmICghaXNYODYoKSkKICAgICAgICAgICAgICAgICBwcmVzZXJ2ZVJl
dHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwpAQCAtMTk2LDcgKzE5Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgbV9mYWlsdXJlczsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+Pj4gbV9jYWxsczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFp
cjxDYWxsLCBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4+PiBtX2NhbGxzOwogICAgIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA3
NmFmYzJiNjQzMmYuLjgyMmNlZWE2MzY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtNTUsNyArNTUsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCiAg
ICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogCiAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFD
VElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOworICAgIHBh
dGNoQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb24sIG9wZXJhdGlvbkxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpOwogICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb24iKTsKIH0KIApAQCAtNzEsNyArNzEs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYQogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5k
bGVyKHZtKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVy
Lmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uLCBvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25I
YW5kbGVyRnJvbUNhbGxlckZyYW1lKTsKICAgICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrIik7CiB9CiAKQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxsTW9kZSBtbwog
ICAgIC8vIE51bGxTZXR0ZXJGdW5jdGlvblR5cGUgZG9lcyBub3QgZ2V0IHRoZSBmYXN0IHBhdGgg
c3VwcG9ydC4gQnV0IGl0IGlzIE9LIHNpbmNlIHVzaW5nIE51bGxTZXR0ZXJGdW5jdGlvblR5cGUg
aXMgZXh0cmVtZWx5IHJhcmUuCiAgICAgbm90SlNGdW5jdGlvbi5saW5rKCZqaXQpOwogICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUeXBlKEdQUkluZm86OnJlZ1QwLCBJbnRlcm5h
bEZ1bmN0aW9uVHlwZSkpOwotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdm0uZ2V0Q1RJ
SW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25U
cmFtcG9saW5lRm9yKGtpbmQpLnRhZ2dlZFB0cigpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlQWRkcmVzcyksIEdQUkluZm86OnJlZ1Q0KTsKIAog
ICAgIGlzTmF0aXZlLmxpbmsoJmppdCk7CkBAIC00MjUsNyArNDI1LDcgQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlRm9yR2VuZXJhdG9yKFZNJiB2
bSwgVGh1bmtGdW4KICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICAgICAgICAgIGF1dG8gb3BlcmF0aW9uQ2FsbCA9IGpp
dC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odm1FbnRyeUhv
c3RGdW5jdGlvbikpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbkNhbGwsIHZtRW50cnlIb3N0RnVuY3Rpb24pOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24p
LCBIb3N0RnVuY3Rpb25QdHJUYWcpOwpAQCAtNDM2LDcgKzQzNiw3IEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUZvckdlbmVyYXRvcihWTSYgdm0s
IFRodW5rRnVuCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1
bmN0aW9uRm9yKGtpbmQpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICAgICAgICAgIGF1
dG8gb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4odm1FbnRyeUhvc3RGdW5jdGlvbikpOworICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIHZtRW50cnlIb3N0RnVu
Y3Rpb24pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaml0
LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSW50ZXJu
YWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIEhvc3RGdW5jdGlv
blB0clRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4
IDY3MDc3NTdiYzVjNC4uMTc5ODg4OWZkM2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnREYXRhLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBpbml0aWFsaXplKCkKIAog
I2lmIEVOQUJMRShKSVRfQ0FHRSkKICAgICBpZiAoT3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAg
ICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRl
OjpqaXRDYWdlUHRyKV0gPSBqaXRDYWdlUHRyVGh1bmsoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oR2F0ZTo6aml0Q2FnZVB0cildID0gaml0Q2FnZVB0clRodW5rKCkuY29kZSgpLnRhZ2dl
ZFB0cigpOwogI2VuZGlmCiAKICNkZWZpbmUgSU5JVElBTElaRV9KU19HQVRFKG5hbWUsIHRhZykg
XApAQCAtMTExLDkgKzExMSw5IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICBjb2Rl
UmVmMTYuY29uc3RydWN0KExMSW50OjpnZXRXaWRlMTZDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0
clRhZz4oanNfdHJhbXBvbGluZV8jI25hbWUpKTsgXAogICAgICAgICAgICAgY29kZVJlZjMyLmNv
bnN0cnVjdChMTEludDo6Z2V0V2lkZTMyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KGpz
X3RyYW1wb2xpbmVfIyNuYW1lKSk7IFwKICAgICAgICAgfSBcCi0gICAgICAgIGdfanNjQ29uZmln
LmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUpXSA9IGNvZGVS
ZWY4LmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyBcCi0gICAgICAgIGdfanNjQ29u
ZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI193aWRl
MTYpXSA9IGNvZGVSZWYxNi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgXAotICAg
ICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRl
OjpuYW1lIyNfd2lkZTMyKV0gPSBjb2RlUmVmMzIuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oR2F0ZTo6bmFtZSldID0gY29kZVJlZjguZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigp
OyBcCisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNvZGVSZWYxNi5nZXQoKS5jb2RlKCkudGFnZ2Vk
UHRyKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oR2F0ZTo6bmFtZSMjX3dpZGUzMildID0gY29kZVJlZjMyLmdldCgpLmNvZGUoKS50
YWdnZWRQdHIoKTsgXAogICAgIH0gd2hpbGUgKDApOwogCiAgICAgSlNDX0pTX0dBVEVfT1BDT0RF
UyhJTklUSUFMSVpFX0pTX0dBVEUpCkBAIC0xMzQsOSArMTM0LDkgQEAgdm9pZCBpbml0aWFsaXpl
KCkKICAgICAgICAgICAgIGNvZGVSZWYxNi5jb25zdHJ1Y3QoTExJbnQ6OmdldFdpZGUxNkNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPih3YXNtX3RyYW1wb2xpbmVfIyNuYW1lKSk7IFwKICAg
ICAgICAgICAgIGNvZGVSZWYzMi5jb25zdHJ1Y3QoTExJbnQ6OmdldFdpZGUzMkNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPih3YXNtX3RyYW1wb2xpbmVfIyNuYW1lKSk7IFwKICAgICAgICAg
fSBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEdhdGU6Om5hbWUpXSA9IGNvZGVSZWY4LmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOyBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNvZGVSZWYxNi5nZXQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsgXAotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNfd2lkZTMyKV0gPSBjb2RlUmVmMzIuZ2V0
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxp
bnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bmFtZSldID0gY29kZVJlZjgu
Z2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOyBcCisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50Lmdh
dGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNvZGVS
ZWYxNi5nZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxp
bnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bmFtZSMjX3dpZGUzMildID0g
Y29kZVJlZjMyLmdldCgpLmNvZGUoKS50YWdnZWRQdHIoKTsgXAogICAgIH0gd2hpbGUgKDApOwog
CiAgICAgSlNDX1dBU01fR0FURV9PUENPREVTKElOSVRJQUxJWkVfV0FTTV9HQVRFKQpAQCAtMTQ4
LDU0ICsxNDgsNTQgQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZUpJVCgpKQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlSlNHYXRlVGh1bmso
cmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE9wZXJhdGlvblB0clRhZz4oJnZt
RW50cnlUb0phdmFTY3JpcHRHYXRlQWZ0ZXIpLCBKU0VudHJ5UHRyVGFnLCAidm1FbnRyeVRvSmF2
YVNjcmlwdCIpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3Qo
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFn
Pjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0
aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ2bUVudHJ5VG9KYXZhU2NyaXB0VHJh
bXBvbGluZSkpKSk7Ci0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEdhdGU6OnZtRW50cnlUb0phdmFTY3JpcHQpXSA9IGNvZGVSZWYuZ2V0KCku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVj
dChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2Vs
Zk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6ZnJvbVRhZ2dl
ZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnPigmdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmUpKSkpOworICAgICAgICBnX2pz
Y0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp2bUVudHJ5
VG9KYXZhU2NyaXB0KV0gPSBjb2RlUmVmLmdldCgpLmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9
CiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0
aW9uczo6dXNlSklUKCkpCiAgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWls
Q2FsbEdhdGUoSlNFbnRyeVB0clRhZywgdHJ1ZSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRl
UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdD
b2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRh
aWxDYWxsSlNFbnRyeVRyYW1wb2xpbmUpKSkpOwotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5n
YXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50cnlQdHJUYWcp
XT0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAg
IGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQ
dHJUYWc+Ojpmcm9tVGFnZ2VkUHRyKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFn
LCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKSkpKTsK
KyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
R2F0ZTo6dGFpbENhbGxKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dl
ZFB0cigpOwogICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAg
ICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAgIGNvZGVSZWYuY29uc3Ry
dWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFnLCB0cnVlKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxl
QWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRH
YXRlUHRyVGFnPigmdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lKSkpKTsKLSAgICAg
ICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6
dGFpbENhbGxKU0VudHJ5U2xvd1BhdGhQdHJUYWcpXSA9IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKENvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6ZnJvbVRhZ2dlZFB0cihyZXRh
Z0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigm
dGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19qc2NDb25m
aWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0Vu
dHJ5U2xvd1BhdGhQdHJUYWcpXSA9IGNvZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOwog
ICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAgICAgIGlm
IChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0
ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFnLCBmYWxzZSkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mo
cmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz4oJnRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUpKSkpOwotICAgICAgICBn
X2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWls
Q2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlQdHJUYWcpXT0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYoQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+Ojpmcm9tVGFnZ2VkUHRyKHJldGFn
Q29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0
YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19qc2ND
b25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxX
aXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0
cigpOwogICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0
KGV4Y2VwdGlvbkhhbmRsZXJHYXRlVGh1bmsoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0Nv
ZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmZXhj
ZXB0aW9uSGFuZGxlclRyYW1wb2xpbmUpKSkpOwotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5n
YXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpleGNlcHRpb25IYW5kbGVyKV0gPSBj
b2RlUmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgY29k
ZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihDb2RlUHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz46OmZyb21UYWdnZWRQdHIocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz4oJmV4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lKSkpKTsKKyAg
ICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0
ZTo6ZXhjZXB0aW9uSGFuZGxlcildID0gY29kZVJlZi5nZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7
CiAgICAgfQogICAgIHsKICAgICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QocmV0
dXJuRnJvbUxMSW50R2F0ZVRodW5rKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2Rl
UmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFn
Pjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVU
b0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRy
PHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnJldHVybkZy
b21MTEludFRyYW1wb2xpbmUpKSkpOwotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFw
W3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpyZXR1cm5Gcm9tTExJbnQpXSA9IGNvZGVSZWYu
Z2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBjb2RlUmVmLmNv
bnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6ZnJv
bVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9K
SVRHYXRlUHRyVGFnPigmcmV0dXJuRnJvbUxMSW50VHJhbXBvbGluZSkpKSk7CisgICAgICAgIGdf
anNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnJldHVy
bkZyb21MTEludCldID0gY29kZVJlZi5nZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7CiAgICAgfQog
CiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7Ci0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50
LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Omxvb3BPU1JFbnRyeSldID0gbG9v
cE9TUkVudHJ5R2F0ZVRodW5rKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAg
IGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OmVu
dHJ5T1NSRW50cnkpXSA9IGVudHJ5T1NSRW50cnlHYXRlVGh1bmsoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKLSAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oR2F0ZTo6d2FzbU9TUkVudHJ5KV0gPSB3YXNtT1NSRW50cnlHYXRlVGh1bmso
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQu
Z2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bG9vcE9TUkVudHJ5KV0gPSBsb29w
T1NSRW50cnlHYXRlVGh1bmsoKS5jb2RlKCkudGFnZ2VkUHRyKCk7CisgICAgICAgIGdfanNjQ29u
ZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OmVudHJ5T1NSRW50
cnkpXSA9IGVudHJ5T1NSRW50cnlHYXRlVGh1bmsoKS5jb2RlKCkudGFnZ2VkUHRyKCk7CisgICAg
ICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6
Ondhc21PU1JFbnRyeSldID0gd2FzbU9TUkVudHJ5R2F0ZVRodW5rKCkuY29kZSgpLnRhZ2dlZFB0
cigpOwogICAgIH0KIAogI2RlZmluZSBJTklUSUFMSVpFX1RBR19BTkRfVU5UQUdfVEhVTktTKG5h
bWUpIFwKQEAgLTIwOSw4ICsyMDksOCBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgICAgICAgICAg
dGFnQ29kZVJlZi5jb25zdHJ1Y3QoTExJbnQ6OmdldENvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPihqc190cmFtcG9saW5lXyMjbmFtZSMjX3RhZykpOyBcCiAgICAgICAgICAgICB1bnRhZ0Nv
ZGVSZWYuY29uc3RydWN0KExMSW50OjpnZXRDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4o
anNfdHJhbXBvbGluZV8jI25hbWUjI191bnRhZykpOyBcCiAgICAgICAgIH0gXAotICAgICAgICBn
X2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpuYW1l
IyNUYWcpXSA9IHRhZ0NvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IFwK
LSAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
R2F0ZTo6bmFtZSMjVW50YWcpXSA9IHVudGFnQ29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsgXAorICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNUYWcpXSA9IHRhZ0NvZGVSZWYuZ2V0KCkuY29kZSgp
LnRhZ2dlZFB0cigpOyBcCisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI1VudGFnKV0gPSB1bnRhZ0NvZGVSZWYuZ2V0KCku
Y29kZSgpLnRhZ2dlZFB0cigpOyBcCiAgICAgfSB3aGlsZSAoMCk7CiAKICAgICBJTklUSUFMSVpF
X1RBR19BTkRfVU5UQUdfVEhVTktTKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNr
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAppbmRleCAxNTExNWVlMDdk
MjQuLjhiZmVmMjU1Yzc4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
aApAQCAtNjYsOSArNjYsOSBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjb25zdCBPcGNvZGUqIGdl
dE9wY29kZUFkZHJlc3MoT3Bjb2RlSUQpOwogICAgIGZyaWVuZCBjb25zdCBPcGNvZGUqIGdldE9w
Y29kZVdpZGUxNkFkZHJlc3MoT3Bjb2RlSUQpOwogICAgIGZyaWVuZCBjb25zdCBPcGNvZGUqIGdl
dE9wY29kZVdpZGUzMkFkZHJlc3MoT3Bjb2RlSUQpOwotICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
IGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBnZXRDb2RlUHRyKE9wY29kZUlEKTsK
LSAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRh
Zz4gZ2V0V2lkZTE2Q29kZVB0cihPcGNvZGVJRCk7Ci0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4g
ZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIoT3Bjb2Rl
SUQpOworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IGZyaWVuZCBDb2RlUHRyPHRhZz4gZ2V0Q29k
ZVB0cihPcGNvZGVJRCk7CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gZnJpZW5kIENvZGVQdHI8
dGFnPiBnZXRXaWRlMTZDb2RlUHRyKE9wY29kZUlEKTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PiBmcmllbmQgQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIoT3Bjb2RlSUQpOwogICAgIHRl
bXBsYXRlPFB0clRhZyB0YWc+IGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBnZXRD
b2RlUmVmKE9wY29kZUlEKTsKIH07CiAKQEAgLTE0NywxMiArMTQ3LDEyIEBAIGlubGluZSBjb25z
dCBPcGNvZGUqIGdldE9wY29kZVdpZGUzMkFkZHJlc3MoT3Bjb2RlSUQgaWQpCiAjZW5kaWYKIAog
dGVtcGxhdGU8UHRyVGFnIHRhZz4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PHRhZz4gZ2V0Q29kZVB0ckltcGwoY29uc3QgT3Bjb2RlIG9wY29kZSwgY29uc3Qgdm9pZCogb3Bj
b2RlQWRkcmVzcykKK0FMV0FZU19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldENvZGVQdHJJbXBsKGNv
bnN0IE9wY29kZSBvcGNvZGUsIGNvbnN0IHZvaWQqIG9wY29kZUFkZHJlc3MpCiB7CiAgICAgdm9p
ZCogb3Bjb2RlVmFsdWUgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcGNvZGUpOwogICAgIHZv
aWQqIHVudGFnZ2VkT3Bjb2RlID0gdW50YWdBZGRyZXNzRGl2ZXJzaWZpZWRDb2RlUHRyPEJ5dGVj
b2RlUHRyVGFnPihvcGNvZGVWYWx1ZSwgb3Bjb2RlQWRkcmVzcyk7CiAgICAgdm9pZCogcmV0YWdn
ZWRPcGNvZGUgPSB0YWdDb2RlUHRyPHRhZz4odW50YWdnZWRPcGNvZGUpOwotICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dGFnZ2VkT3Bjb2RlKTsKKyAgICByZXR1cm4gQ29kZVB0cjx0YWc+Ojpmcm9tVGFnZ2VkUHRyKHJl
dGFnZ2VkT3Bjb2RlKTsKIH0KIAogI2lmIEVOQUJMRShBUk02NEUpICYmICFFTkFCTEUoQ09NUFVU
RURfR09UT19PUENPREVTKQpAQCAtMTYwLDcgKzE2MCw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0ckltcGwoY29uc3QgT3Bjb2RlIG9wY29kZSwg
Y29uCiAjZW5kaWYKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KLUFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKK0FMV0FZ
U19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldENvZGVQdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAj
aWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29k
ZSA9IGdldE9wY29kZUFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIEFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNvZGVJRCBv
cGNvZGVJRCkKIH0KIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KLUFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkK
K0FMV0FZU19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldFdpZGUxNkNvZGVQdHIoT3Bjb2RlSUQgb3Bj
b2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBP
cGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUxNkFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMTgy
LDcgKzE4Miw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0
V2lkZTE2Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKIH0KIAogdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTMyQ29k
ZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKK0FMV0FZU19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldFdp
ZGUzMkNvZGVQdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dP
VE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUzMkFk
ZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMjE1LDkgKzIxNSw5IEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+
CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRDb2RlRnVuY3Rpb25QdHIoT3Bjb2RlSUQgb3Bj
b2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxMTEludENvZGU+KGdldENvZGVQdHI8dGFnPihvcGNvZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRDb2RlUHRyPHRh
Zz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsKICNlbHNlCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8TExJbnRDb2RlPihnZXRDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4o
Z2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYK
IH0KIApAQCAtMjI1LDkgKzIyNSw5IEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5M
SU5FIExMSW50Q29kZSBnZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHIoT3Bjb2RlSUQgb3Bjb2RlSUQp
CiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTElu
dENvZGU+KGdldFdpZGUxNkNvZGVQdHI8dGFnPihvcGNvZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMTZDb2Rl
UHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsKICNlbHNlCi0gICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMTZDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRl
bXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PExMSW50Q29kZT4oZ2V0V2lkZTE2Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0ZSB0YWdn
ZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjM1LDkgKzIzNSw5IEBAIHRlbXBsYXRlPFB0clRh
ZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHIo
T3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUzMkNvZGVQdHI8dGFnPihvcGNvZGVJRCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRD
b2RlPihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsKICNlbHNl
Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMzJDb2RlUHRy
PHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0V2lkZTMyQ29kZVB0cjx0YWc+KG9wY29k
ZUlEKS50ZW1wbGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjkwLDcgKzI5MCw3
IEBAIGlubGluZSBjb25zdCBPcGNvZGUqIGdldE9wY29kZVdpZGUzMkFkZHJlc3MoV2FzbU9wY29k
ZUlEIGlkKQogI2VuZGlmCiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci1BTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldENvZGVQdHIoV2FzbU9wY29kZUlEIG9wY29kZUlE
KQorQUxXQVlTX0lOTElORSBDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bj
b2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBP
cGNvZGUqIG9wY29kZSA9IGdldE9wY29kZUFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMzAxLDcgKzMw
MSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0
cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB9CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci1BTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUxNkNvZGVQdHIoV2Fz
bU9wY29kZUlEIG9wY29kZUlEKQorQUxXQVlTX0lOTElORSBDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2
Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dP
VE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUxNkFk
ZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMzEyLDcgKzMxMiw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2Rl
SUQpCiB9CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIoV2FzbU9wY29kZUlEIG9wY29kZUlEKQor
QUxXQVlTX0lOTElORSBDb2RlUHRyPHRhZz4gZ2V0V2lkZTMyQ29kZVB0cihXYXNtT3Bjb2RlSUQg
b3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25z
dCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUzMkFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAt
MzQ0LDkgKzM0NCw5IEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50
Q29kZSBnZXRDb2RlRnVuY3Rpb25QdHIoV2FzbU9wY29kZUlEIG9wY29kZUlEKQogewogI2lmIENP
TVBJTEVSKE1TVkMpCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRD
b2RlUHRyPHRhZz4ob3Bjb2RlSUQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50YWdn
ZWRQdHIoKSk7CiAjZWxzZQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4o
Z2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0ZSBleGVjdXRhYmxlQWRkcmVzcygpKTsK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldENvZGVQdHI8dGFnPihv
cGNvZGVJRCkudGVtcGxhdGUgdGFnZ2VkUHRyKCkpOwogI2VuZGlmCiB9CiAKQEAgLTM1NCw5ICsz
NTQsOSBAQCB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogQUxXQVlTX0lOTElORSBMTEludENvZGUgZ2V0
V2lkZTE2Q29kZUZ1bmN0aW9uUHRyKFdhc21PcGNvZGVJRCBvcGNvZGVJRCkKIHsKICNpZiBDT01Q
SUxFUihNU1ZDKQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0V2lk
ZTE2Q29kZVB0cjx0YWc+KG9wY29kZUlEKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUxNkNvZGVQdHI8dGFnPihvcGNv
ZGVJRCkudGFnZ2VkUHRyKCkpOwogI2Vsc2UKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxM
TEludENvZGU+KGdldFdpZGUxNkNvZGVQdHI8dGFnPihvcGNvZGVJRCkudGVtcGxhdGUgZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihn
ZXRXaWRlMTZDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIHRhZ2dlZFB0cigpKTsKICNl
bmRpZgogfQogCkBAIC0zNjQsOSArMzY0LDkgQEAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KIEFMV0FZ
U19JTkxJTkUgTExJbnRDb2RlIGdldFdpZGUzMkNvZGVGdW5jdGlvblB0cihXYXNtT3Bjb2RlSUQg
b3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxMTEludENvZGU+KGdldFdpZGUzMkNvZGVQdHI8dGFnPihvcGNvZGVJRCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRX
aWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsKICNlbHNlCi0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bj
b2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PExMSW50Q29kZT4oZ2V0V2lkZTMyQ29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1w
bGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAppbmRleCBkZjY0NWQ4Yzc0YjYuLjRiMWI3ZDA0
MzBkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlw
b2ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2lu
dC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgZXh0ZXJuICJDIiB2b2lkIGpzVHJhbXBvbGluZUZ1bmN0
aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1Byb2xvZ3VlKHZvaWQpOwogdGVtcGxhdGU8dHlwZW5h
bWUgUHRyVHlwZT4KIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4g
ZW50cnlwb2ludFRyYW1wb2xpbmUoUHRyVHlwZSBhZGRyZXNzKQogewotICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
ZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRh
YmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgSlNFbnRyeVB0
clRhZz4oYWRkcmVzcykpKTsKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoQ29kZVB0cjxKU0VudHJ5UHRyVGFn
Pjo6ZnJvbVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgSlNF
bnRyeVB0clRhZz4oYWRkcmVzcykpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCBkMzFmOWNkZTVkZTIuLmI2YjA3
MDQ4NmJjOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCkBAIC0xNjYsMTQgKzE2NiwxNCBAQCBpbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cgogI2Rl
ZmluZSBMTElOVF9DQUxMX1RIUk9XKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uVG9UaHJvdykgZG8g
eyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBfX2N0X2dsb2Jh
bE9iamVjdCA9IChnbG9iYWxPYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIHRocm93RXhjZXB0aW9uKF9fY3RfZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBleGNlcHRpb25Ub1Rocm93KTsgICAgICAgIFwKLSAgICAgICAgTExJTlRfQ0FMTF9FTkRfSU1Q
TChudWxscHRyLCBjYWxsVG9UaHJvdyh2bSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICBMTElOVF9D
QUxMX0VORF9JTVBMKG51bGxwdHIsIGNhbGxUb1Rocm93KHZtKS5jb2RlKCkudGFnZ2VkUHRyKCks
IEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUg
KGZhbHNlKQogCiAjZGVmaW5lIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGdsb2JhbE9iamVj
dCkgZG8geyAgICAgICAgICAgICAgIFwKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIF9fY2NlX2ds
b2JhbE9iamVjdCA9IChnbG9iYWxPYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgZG9FeGNlcHRpb25GdXp6aW5nSWZFbmFibGVkKF9fY2NlX2dsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgIkxMSW50U2xvd1BhdGhzL2NhbGwiLCBudWxscHRyKTsgXAogICAg
ICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgTExJTlRfQ0FMTF9FTkRfSU1QTChudWxscHRyLCBj
YWxsVG9UaHJvdyh2bSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOyBcCisgICAgICAgICAgICBMTElOVF9DQUxMX0VORF9JTVBMKG51bGxwdHIsIGNh
bGxUb1Rocm93KHZtKS5jb2RlKCkudGFnZ2VkUHRyKCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
OyBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUgTExJTlRfQ0FMTF9SRVRVUk4oZ2xv
YmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbFRhcmdldCwgY2FsbFRhcmdldFRhZykgZG8geyBc
CkBAIC00MjUsNyArNDI1LDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnkKICAgICBpZiAoa2lu
ZCA9PSBQcm9sb2d1ZSkKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKGtpbmQgPT0g
QXJpdHlDaGVjayk7Ci0gICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+
YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxw
dHIpOworICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmFkZHJlc3NG
b3JDYWxsKE11c3RDaGVja0FyaXR5KS50YWdnZWRQdHIoKSwgbnVsbHB0cik7CiB9CiAjZWxzZSAv
LyBFTkFCTEUoSklUKQogc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKQEAgLTQ4MCw3ICs0ODAsNyBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICAgICAgdWludHB0cl90KiBwdHIg
PSB2bS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIocGMpOwogICAgICAgICAqcHRyICs9IGNv
ZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLm1fYWN0aXZlVGhyZXNob2xkOwogICAgICAg
ICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQo
KSkKLSAgICAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5
RnJvbUxvb3BIaW50RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxs
RnJhbWUtPnRvcE9mRnJhbWUoKSk7CisgICAgICAgICAgICBMTElOVF9SRVRVUk5fVFdPKExMSW50
OjpmdXp6ZXJSZXR1cm5FYXJseUZyb21Mb29wSGludEVudHJ5cG9pbnQoKS5jb2RlKCkudGFnZ2Vk
UHRyKCksIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsKICAgICB9CiAgICAgCiAgICAgCkBAIC01
MDIsNyArNTAyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCi0g
ICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24udGFnZ2VkUHRyKCk7CiAgICAgQVNT
RVJUKGp1bXBUYXJnZXQpOwogICAgIAogICAgIExMSU5UX1JFVFVSTl9UV08oanVtcFRhcmdldCwg
Y2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOwpAQCAtMTg1MCw3ICsxODUwLDcgQEAgc3RhdGljIFNs
b3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBK
U1ZhbHVlIGNhbGxlZSwKICAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVl
ID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVj
dCgpLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CiAg
ICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQ
Qzo6c2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFs
T2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICAg
ICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhv
c3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLnRhZ2dlZFB0cigpLCBKU0VudHJ5
UHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2xvd1BhdGhMb2coIkNhbGwg
Y2FsbGVlIGlzIG5vdCBhIGZ1bmN0aW9uOiAiLCBjYWxsZWUsICJcbiIpOwpAQCAtMTg3MCw3ICsx
ODcwLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJh
bWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgdm0uZW5jb2RlZEhvc3RD
YWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChj
YWxsZWUpLT5nbG9iYWxPYmplY3QoKSwgY2FsbGVlRnJhbWUpOwogICAgICAgICBEaXNhbGxvd0dD
IGRpc2FsbG93R0M7CiAgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxs
ZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIExMSU5UX0NBTExfUkVUVVJO
KGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50
cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAg
ICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6Omdl
dEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLnRhZ2dlZFB0cigpLCBKU0Vu
dHJ5UHRyVGFnKTsKICAgICB9CiAgICAgCiAgICAgc2xvd1BhdGhMb2coIkNvbnN0cnVjdG9yIGNh
bGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2FsbGVlLCAiXG4iKTsKQEAgLTE4OTIsMTEgKzE4
OTIsMTEgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBj
YWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKICAgICBpZiAoIWNhbGxl
ZUFzRnVuY3Rpb25DZWxsKSB7CiAgICAgICAgIGlmIChjYWxsZWVBc1ZhbHVlLmluaGVyaXRzPElu
dGVybmFsRnVuY3Rpb24+KCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xp
bmVGb3Ioa2luZCk7CisgICAgICAgICAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIg
PSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAg
ICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpT
RW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBh
c3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci50YWdnZWRQdHIoKSk7CiAg
ICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQ
Qzo6c2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFs
T2JqZWN0LCBjYWxsZXJTUCwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRy
VGFnKTsKKyAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVy
U1AsIGNvZGVQdHIudGFnZ2VkUHRyKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChjYWxsZWVG
cmFtZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOwogICAgIH0KQEAgLTE5MDYsNyArMTkwNiw3IEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJh
bWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAKICAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0p
OyAvLyBXZSBjYW4ndCBqZXR0aXNvbiB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0
LgogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7Cisg
ICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIC8vIEZJWE1FOiBTdXBwb3J0
IHdhc20gSUMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMDMzOQogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQpAQCAtMTkzMiw5
ICsxOTMyLDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1l
KiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kKICAgICB9CiAKICAgICBBU1NFUlQo
ISFjb2RlUHRyKTsKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0
clRhZz4oY29kZVB0ci50YWdnZWRQdHIoKSk7CiAgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVG
cmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKLSAgICBMTElOVF9DQUxM
X1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCksIEpTRW50cnlQdHJUYWcpOworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwg
Y2FsbGVyU1AsIGNvZGVQdHIudGFnZ2VkUHRyKCksIEpTRW50cnlQdHJUYWcpOwogfQogCiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncykKQEAgLTIw
NjgsNyArMjA2OCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEpTSW5zdHJ1Y3RpCiAgICAgY2FsbGVlRnJhbWUt
PnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgY2Fs
bGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgY2FsbGVlRnJhbWUtPnVu
Y2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVl
QXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9pbnQuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIGNhbGxlZUZyYW1lLT5zZXRSZXR1cm5QQyhyZXR1
cm5Qb2ludC5jb2RlKCkudGFnZ2VkUHRyKCkpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxv
Y2sobnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKICAgICAKQEAg
LTIwNzgsNyArMjA3OCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2
YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEpTSW5zdHJ1Y3RpCiAgICAgdm0uZW5jb2Rl
ZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoZXZhbChnbG9iYWxPYmplY3Qs
IGNhbGxlZUZyYW1lLCBieXRlY29kZS5tX2VjbWFNb2RlKSk7CiAgICAgRGlzYWxsb3dHQyBkaXNh
bGxvd0dDOwogICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnM7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0
LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgIExMSU5UX0NBTExf
UkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZh
bHVlRW50cnlwb2ludCgpLmNvZGUoKS50YWdnZWRQdHIoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAg
ICAgCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQpAQCAtMjM4NSw5
ICsyMzg1LDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkaXNwYXRjaFRvTmV4dEluc3Ry
dWN0aW9uRHVyaW5nRXhpdChUaHJvd1Njb3BlJiBzY29wZSwKICAgICBpZiAoT3B0aW9uczo6Zm9y
Y2VPU1JFeGl0VG9MTEludCgpIHx8IGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bmspIHsKICAgICAgICAgY29uc3QgSlNJbnN0cnVjdGlvbiogbmV4dFBDID0g
cGMubmV4dCgpLnB0cigpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQobmV4dFBDLCBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChuZXh0
UEMsIExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpLnRhZ2dlZFB0
cigpKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBDLCBMTEludDo6
Z2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihub3JtYWxfb3NyX2V4aXRfdHJhbXBvbGluZSkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG5l
eHRQQywgTExJbnQ6OmdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4obm9ybWFsX29zcl9leGl0X3Ry
YW1wb2xpbmUpLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTIzOTUs
NyArMjM5NSw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZGlzcGF0Y2hUb05leHRJbnN0
cnVjdGlvbkR1cmluZ0V4aXQoVGhyb3dTY29wZSYgc2NvcGUsCiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKICAgICBCeXRlY29kZUluZGV4
IG5leHRCeXRlY29kZUluZGV4ID0gcGMubmV4dCgpLmluZGV4KCk7CiAgICAgYXV0byBuZXh0Qnl0
ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKG5leHRCeXRlY29kZUluZGV4KTsK
LSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8
dWludHB0cl90PigxKSksIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PigxKSksIG5leHRCeXRlY29kZS50YWdnZWRQdHIoKSk7CiAjZW5kaWYKICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCmluZGV4IGJkNGM0ZTRhNDc0OC4u
NzM1YzFkZTUyNmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJDb21waWxhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCkBAIC04Miw3ICs4Miw3IEBAIEV4ZWN1dGlvbkNv
dW50ZXIqIENvbXBpbGF0aW9uOjpleGVjdXRpb25Db3VudGVyRm9yKGNvbnN0IE9yaWdpblN0YWNr
JiBvcmlnaW4pCiAgICAgcmV0dXJuIGNvdW50ZXIuZ2V0KCk7CiB9CiAKLXZvaWQgQ29tcGlsYXRp
b246OmFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJ
bnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKQordm9pZCBDb21waWxhdGlvbjo6YWRkT1NS
RXhpdFNpdGUoY29uc3QgVmVjdG9yPENvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRk
cmVzc2VzKQogewogICAgIG1fb3NyRXhpdFNpdGVzLmFwcGVuZChPU1JFeGl0U2l0ZShjb2RlQWRk
cmVzc2VzKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJDb21waWxhdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQ29tcGlsYXRpb24uaAppbmRleCA0ZjM2ZjU2MDI0ZDkuLjI4MzQ3ODY2MDY3MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRp
b24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxh
dGlvbi5oCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZERlc2NyaXB0aW9u
KGNvbnN0IENvbXBpbGVkQnl0ZWNvZGUmKTsKICAgICB2b2lkIGFkZERlc2NyaXB0aW9uKGNvbnN0
IE9yaWdpblN0YWNrJiwgY29uc3QgQ1N0cmluZyYgZGVzY3JpcHRpb24pOwogICAgIEV4ZWN1dGlv
bkNvdW50ZXIqIGV4ZWN1dGlvbkNvdW50ZXJGb3IoY29uc3QgT3JpZ2luU3RhY2smKTsKLSAgICB2
b2lkIGFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJ
bnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKTsKKyAgICB2b2lkIGFkZE9TUkV4aXRTaXRl
KGNvbnN0IFZlY3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29kZUFkZHJlc3Nlcyk7
CiAgICAgT1NSRXhpdCogYWRkT1NSRXhpdCh1bnNpZ25lZCBpZCwgY29uc3QgT3JpZ2luU3RhY2sm
LCBFeGl0S2luZCwgYm9vbCBpc1dhdGNocG9pbnQpOwogICAgIAogICAgIHZvaWQgc2V0SmV0dGlz
b25SZWFzb24oSmV0dGlzb25SZWFzb24sIGNvbnN0IEZpcmVEZXRhaWwqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5oCmluZGV4
IGU4MTE4MThlZWExZC4uZWU4NDU3ZjE2NDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmgKQEAgLTMzLDE3ICszMywxNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFByb2ZpbGVyIHsKIAogY2xhc3MgT1NSRXhpdFNp
dGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKQorICAg
IGV4cGxpY2l0IE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQdHJU
YWc+PiYgY29kZUFkZHJlc3NlcykKICAgICAgICAgOiBtX2NvZGVBZGRyZXNzZXMoY29kZUFkZHJl
c3NlcykKICAgICB7CiAgICAgfQogICAgIAotICAgIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZUFkZHJlc3NlczsgfQorICAgIGNvbnN0IFZlY3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQ
dHJUYWc+PiYgY29kZUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGVBZGRyZXNzZXM7IH0K
ICAgICAKICAgICBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKIAogcHJpdmF0
ZToKLSAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBt
X2NvZGVBZGRyZXNzZXM7CisgICAgVmVjdG9yPENvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+IG1f
Y29kZUFkZHJlc3NlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpQcm9maWxlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwCmluZGV4
IDJkOTRlMTRmNmQ2Yy4uMTkwMzU1ZGM0MjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgRXhl
Y3V0YWJsZUJhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBzd2l0Y2ggKHR5
cGUoKSkgewogICAgIGNhc2UgTmF0aXZlRXhlY3V0YWJsZVR5cGU6IHsKICAgICAgICAgTmF0aXZl
RXhlY3V0YWJsZSogbmF0aXZlID0ganNDYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihyZWFsVGhpcyk7
Ci0gICAgICAgIG91dC5wcmludCgiTmF0aXZlRXhlY3V0YWJsZToiLCBSYXdQb2ludGVyKG5hdGl2
ZS0+ZnVuY3Rpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpKSwgIi8iLCBSYXdQb2ludGVyKG5hdGl2
ZS0+Y29uc3RydWN0b3IoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIG91dC5wcmlu
dCgiTmF0aXZlRXhlY3V0YWJsZToiLCBSYXdQb2ludGVyKG5hdGl2ZS0+ZnVuY3Rpb24oKS50YWdn
ZWRQdHIoKSksICIvIiwgUmF3UG9pbnRlcihuYXRpdmUtPmNvbnN0cnVjdG9yKCkudGFnZ2VkUHRy
KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlw
ZTogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZUJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgK
aW5kZXggZTgyOTdkNzNiZmI0Li5hNzc0ZThkMDBkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaApAQCAtMTMwLDcgKzEzMCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsKICAgICB9
CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludEZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQorICAg
IENvZGVQdHI8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludEZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQogICAgIHsKICAgICAgICAgLy8gQ2hlY2sg
aWYgd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQuIFdlIG9ubHkgaGF2ZSBpdCBmb3IgYXJpdHkgY2hl
Y2sgYmVjYXVzZSB3ZSB1c2UgdGhlCiAgICAgICAgIC8vIG5vLWFyaXR5IGVudHJ5cG9pbnQgaW4g
bm9uLXZpcnR1YWwgY2FsbHMsIHdoaWNoIHdpbGwgImNhY2hlIiB0aGlzIHZhbHVlIGRpcmVjdGx5
IGluCkBAIC0xMzgsMTYgKzEzOCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChhcml0eSA9PSBN
dXN0Q2hlY2tBcml0eSkgewogICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgICAg
ICBjYXNlIENvZGVGb3JDYWxsOgotICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNo
ZWNrKQorICAgICAgICAgICAgICAgIGlmIChDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9
IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaykKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ29k
ZUZvckNvbnN0cnVjdDoKLSAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrKQorICAgICAgICAgICAgICAgIGlmIChDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9
IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBy
ZXN1bHQgPSBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbChhcml0eSk7
CisgICAgICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gZ2VuZXJhdGVkSklUQ29k
ZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoYXJpdHkpOwogICAgICAgICBpZiAoYXJpdHkgPT0g
TXVzdENoZWNrQXJpdHkpIHsKICAgICAgICAgICAgIC8vIENhY2hlIHRoZSByZXN1bHQ7IHRoaXMg
aXMgbmVjZXNzYXJ5IGZvciB0aGUgSklUJ3MgdmlydHVhbCBjYWxsIG9wdGltaXphdGlvbnMuCiAg
ICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKQEAgLTIwMyw4ICsyMDMsOCBAQCBwdWJsaWM6CiBw
cm90ZWN0ZWQ6CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZUZvckNhbGw7CiAgICAgUmVm
UHRyPEpJVENvZGU+IG1faml0Q29kZUZvckNvbnN0cnVjdDsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOwotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX2ppdENvZGVGb3JDb25zdHJ1
Y3RXaXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1faml0Q29kZUZv
ckNhbGxXaXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYWNoaW5lQ29udGV4dC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFjaGluZUNvbnRleHQuaAppbmRleCBl
YWQ0YzNiNGEyN2IuLmI1NmU5MDVhMzA4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFjaGluZUNvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYWNoaW5lQ29udGV4dC5oCkBAIC00MSw5ICs0MSw5IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQgPSB2b2lkKj4gVCBzdGFja1BvaW50ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsK
IAogI2lmIE9TKFdJTkRPV1MpIHx8IEhBVkUoTUFDSElORV9DT05URVhUKQogdGVtcGxhdGU8dHlw
ZW5hbWUgVCA9IHZvaWQqPiBUIGZyYW1lUG9pbnRlcihjb25zdCBQbGF0Zm9ybVJlZ2lzdGVycyYp
OwotaW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFn
PiBsaW5rUmVnaXN0ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsKLWlubGluZSBzdGQ6Om9w
dGlvbmFsPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPj4g
aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnN0IFBsYXRmb3JtUmVnaXN0ZXJzJik7Ci1pbmxpbmUgdm9p
ZCBzZXRJbnN0cnVjdGlvblBvaW50ZXIoUGxhdGZvcm1SZWdpc3RlcnMmLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CitpbmxpbmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lz
dGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsKK2lu
bGluZSBzdGQ6Om9wdGlvbmFsPENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4+IGlu
c3RydWN0aW9uUG9pbnRlcihjb25zdCBQbGF0Zm9ybVJlZ2lzdGVycyYpOworaW5saW5lIHZvaWQg
c2V0SW5zdHJ1Y3Rpb25Qb2ludGVyKFBsYXRmb3JtUmVnaXN0ZXJzJiwgQ29kZVB0cjxDRnVuY3Rp
b25QdHJUYWc+KTsKIAogdGVtcGxhdGU8c2l6ZV90IE4+IHZvaWQqJiBhcmd1bWVudFBvaW50ZXIo
UGxhdGZvcm1SZWdpc3RlcnMmKTsKIHRlbXBsYXRlPHNpemVfdCBOPiB2b2lkKiBhcmd1bWVudFBv
aW50ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsKQEAgLTY2LDcgKzY2LDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkKiYgZnJhbWVQb2ludGVySW1wbChtY29udGV4dF90Jik7CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQgPSB2b2lkKj4gVCBzdGFja1BvaW50ZXIoY29uc3QgbWNvbnRleHRfdCYpOwog
dGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPiBUIGZyYW1lUG9pbnRlcihjb25zdCBtY29udGV4
dF90Jik7Ci1pbmxpbmUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQ
dHJUYWc+IGluc3RydWN0aW9uUG9pbnRlcihjb25zdCBtY29udGV4dF90Jik7CitpbmxpbmUgQ29k
ZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3Qg
bWNvbnRleHRfdCYpOwogCiB0ZW1wbGF0ZTxzaXplX3QgTj4gdm9pZComIGFyZ3VtZW50UG9pbnRl
cihtY29udGV4dF90Jik7CiB0ZW1wbGF0ZTxzaXplX3QgTj4gdm9pZCogYXJndW1lbnRQb2ludGVy
KGNvbnN0IG1jb250ZXh0X3QmKTsKQEAgLTQyNiw3ICs0MjYsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQqJiBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzKQogfQog
I2VuZGlmIC8vICFVU0UoUExBVEZPUk1fUkVHSVNURVJTX1dJVEhfUFJPRklMRSkKIAotaW5saW5l
IHN0ZDo6b3B0aW9uYWw8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQ
dHJUYWc+PiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3Mp
CitpbmxpbmUgc3RkOjpvcHRpb25hbDxDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+
PiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MpCiB7CiAj
aWYgVVNFKFBMQVRGT1JNX1JFR0lTVEVSU19XSVRIX1BST0ZJTEUpCiAgICAgdm9pZCogdmFsdWUg
PSBXVEZfUkVBRF9QTEFURk9STV9SRUdJU1RFUlNfUENfV0lUSF9QUk9GSUxFKHJlZ3MpOwpAQCAt
NDM2LDIyICs0MzYsMjIgQEAgaW5saW5lIHN0ZDo6b3B0aW9uYWw8TWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+PiBpbnN0cnVjdGkKICAgICB2b2lkKiB2YWx1
ZSA9IGluc3RydWN0aW9uUG9pbnRlckltcGwoY29uc3RfY2FzdDxQbGF0Zm9ybVJlZ2lzdGVycyY+
KHJlZ3MpKTsKICNlbmRpZgogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBzdGQ6Om1h
a2Vfb3B0aW9uYWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJU
YWc+KG51bGxwdHIpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbChDb2RlUHRy
PFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KG51bGxwdHIpKTsKICAgICBpZiAoIXVzZXNQb2lu
dGVyVGFnZ2luZygpKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPih2YWx1ZSkpOworICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsKENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0
clRhZz4odmFsdWUpKTsKICAgICBpZiAoaXNUYWdnZWRXaXRoPFBsYXRmb3JtUmVnaXN0ZXJzUENQ
dHJUYWc+KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbChNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4odmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbChDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQ
dHJUYWc+KHZhbHVlKSk7CiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotaW5saW5lIHZv
aWQgc2V0SW5zdHJ1Y3Rpb25Qb2ludGVyKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiB2YWx1ZSkKK2lubGluZSB2b2lkIHNldElu
c3RydWN0aW9uUG9pbnRlcihQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncywgQ29kZVB0cjxDRnVuY3Rp
b25QdHJUYWc+IHZhbHVlKQogewogI2lmIFVTRShQTEFURk9STV9SRUdJU1RFUlNfV0lUSF9QUk9G
SUxFKQotICAgIFdURl9XUklURV9QTEFURk9STV9SRUdJU1RFUlNfUENfV0lUSF9QUk9GSUxFKHJl
Z3MsIHZhbHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIFdURl9XUklURV9QTEFURk9STV9S
RUdJU1RFUlNfUENfV0lUSF9QUk9GSUxFKHJlZ3MsIHZhbHVlLnRhZ2dlZFB0cigpKTsKICNlbGlm
IFVTRShEQVJXSU5fUkVHSVNURVJfTUFDUk9TKQotICAgIF9fZGFyd2luX2FybV90aHJlYWRfc3Rh
dGU2NF9zZXRfcGNfZnB0cihyZWdzLCB2YWx1ZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBf
X2Rhcndpbl9hcm1fdGhyZWFkX3N0YXRlNjRfc2V0X3BjX2ZwdHIocmVncywgdmFsdWUudGFnZ2Vk
UHRyKCkpOwogI2Vsc2UKLSAgICBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKHJlZ3MpID0gdmFsdWUu
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKHJlZ3MpID0g
dmFsdWUudGFnZ2VkUHRyKCk7CiAjZW5kaWYKIH0KICNlbmRpZiAvLyBPUyhXSU5ET1dTKSB8fCBI
QVZFKE1BQ0hJTkVfQ09OVEVYVCkKQEAgLTUyMSw3ICs1MjEsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQqJiBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKG1jb250ZXh0X3QmIG1hY2hpbmVDb250ZXh0KQog
fQogI2VuZGlmIC8vICFVU0UoUExBVEZPUk1fUkVHSVNURVJTX1dJVEhfUFJPRklMRSkKIAotaW5s
aW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBpbnN0
cnVjdGlvblBvaW50ZXIoY29uc3QgbWNvbnRleHRfdCYgbWFjaGluZUNvbnRleHQpCitpbmxpbmUg
Q29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBpbnN0cnVjdGlvblBvaW50ZXIoY29u
c3QgbWNvbnRleHRfdCYgbWFjaGluZUNvbnRleHQpCiB7CiAjaWYgVVNFKERBUldJTl9SRUdJU1RF
Ul9NQUNST1MpCiAgICAgcmV0dXJuICppbnN0cnVjdGlvblBvaW50ZXIobWFjaGluZUNvbnRleHQt
Pl9fc3MpOwpAQCAtNTMzLDcgKzUzMyw3IEBAIGlubGluZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gaW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnN0CiAgICAg
dm9pZCogdmFsdWUgPSBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKGNvbnN0X2Nhc3Q8bWNvbnRleHRf
dCY+KG1hY2hpbmVDb250ZXh0KSk7CiAjZW5kaWYKIAotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4odmFsdWUpOworICAgIHJldHVybiBD
b2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KHZhbHVlKTsKICNlbmRpZgogfQogI2Vu
ZGlmIC8vIEhBVkUoTUFDSElORV9DT05URVhUKQpAQCAtNTQzLDE0ICs1NDMsMTQgQEAgaW5saW5l
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBpbnN0cnVj
dGlvblBvaW50ZXIoY29uc3QKIAogI2lmIE9TKERBUldJTikgJiYgX19EQVJXSU5fVU5JWDAzICYm
IENQVShBUk02NCkKIAotaW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lz
dGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3Mp
CitpbmxpbmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIo
Y29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MpCiB7CiAjaWYgVVNFKFBMQVRGT1JNX1JFR0lT
VEVSU19XSVRIX1BST0ZJTEUpCiAgICAgdm9pZCogdmFsdWUgPSBXVEZfUkVBRF9QTEFURk9STV9S
RUdJU1RFUlNfTFJfV0lUSF9QUk9GSUxFKHJlZ3MpOwogI2Vsc2UKICAgICB2b2lkKiB2YWx1ZSA9
IF9fZGFyd2luX2FybV90aHJlYWRfc3RhdGU2NF9nZXRfbHJfZnB0cihyZWdzKTsKICNlbmRpZgot
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNMUlB0clRh
Zz4odmFsdWUpOworICAgIHJldHVybiBDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzTFJQdHJUYWc+
KHZhbHVlKTsKIH0KICNlbmRpZiAvLyBPUyhEQVJXSU4pICYmIF9fREFSV0lOX1VOSVgwMyAmJiBD
UFUoQVJNNjQpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZl
RXhlY3V0YWJsZS5jcHAKaW5kZXggOTEwZGZjMjU5YjA1Li41M2ZjYzk5ZTU0YTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCkBA
IC02MCwxMCArNjAsMTAgQEAgdm9pZCBOYXRpdmVFeGVjdXRhYmxlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFJlZjxKSVRDb2RlPiYmIGNhbGxUaHVuaywgUmVmPEpJVEMKICAgICBtX2ppdENvZGVG
b3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1faml0Q29kZUZvckNvbnN0cnVjdC0+YWRkcmVz
c0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpOwogICAgIG1fbmFtZSA9IG5hbWU7CiAKLSAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0Zv
ckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBh
c3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2RlRm9yQ29uc3RydWN0LT5h
ZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwotICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFnPihtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2suZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRX
aXRoPEpTRW50cnlQdHJUYWc+KG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFn
PihtX2ppdENvZGVGb3JDYWxsLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQp
LnRhZ2dlZFB0cigpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9q
aXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQp
LnRhZ2dlZFB0cigpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLnRhZ2dlZFB0cigpKTsKKyAgICBhc3NlcnRJc1Rh
Z2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hl
Y2sudGFnZ2VkUHRyKCkpOwogfQogCiBOYXRpdmVFeGVjdXRhYmxlOjpOYXRpdmVFeGVjdXRhYmxl
KFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0
aW9uIGNvbnN0cnVjdG9yLCBJbXBsZW1lbnRhdGlvblZpc2liaWxpdHkgaW1wbGVtZW50YXRpb25W
aXNpYmlsaXR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0
aXZlRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0
aW9uLmgKaW5kZXggZDcyNTIzYzY2ZDk1Li41ZGY4MmE0ZGQ4NzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRnVuY3Rpb24uaApAQCAtMzQsNyArMzQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbEZyYW1lOwogCi11c2luZyBOYXRpdmVGdW5jdGlv
biA9IFR5cGVkRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpTQ0hvc3RDYWxs
PjsKK3VzaW5nIE5hdGl2ZUZ1bmN0aW9uID0gRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnLCBF
bmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopLCBGdW5jdGlvbkF0dHJp
YnV0ZXM6OkpTQ0hvc3RDYWxsPjsKIAogc3RydWN0IE5hdGl2ZUZ1bmN0aW9uSGFzaCB7CiAgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goTmF0aXZlRnVuY3Rpb24ga2V5KSB7IHJldHVybiBjb21wdXRl
SGFzaChrZXkpOyB9CkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBOYXRpdmVGdW5jdGlvbkhhc2gg
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7CiB9OwogCi11c2luZyBUYWdnZWROYXRpdmVGdW5jdGlvbiA9IFR5cGVkRnVuY3Rp
b25QdHI8SG9zdEZ1bmN0aW9uUHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpTQ0hvc3RDYWxsPjsKK3VzaW5nIFRh
Z2dlZE5hdGl2ZUZ1bmN0aW9uID0gRnVuY3Rpb25QdHI8SG9zdEZ1bmN0aW9uUHRyVGFnLCBFbmNv
ZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0
ZXM6OkpTQ0hvc3RDYWxsPjsKIAogc3RydWN0IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uSGFzaCB7CiAg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goVGFnZ2VkTmF0aXZlRnVuY3Rpb24ga2V5KSB7IHJldHVy
biBjb21wdXRlSGFzaChrZXkpOyB9CkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBXVEYgewog
CiBpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIEpTQzo6TmF0aXZlRnVuY3Rpb24ga2V5
KQogewotICAgIGFkZChoYXNoZXIsIGtleS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBhZGQo
aGFzaGVyLCBrZXkudGFnZ2VkUHRyKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IERlZmF1bHRIYXNoOwpAQCAtNzIsNyArNzIsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6Ok5hdGl2ZUZ1bmN0aW9uPiA6IEpTQzo6TmF0aXZlRnVuY3Rpb25IYXNoIHsgfQog
CiBpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIEpTQzo6VGFnZ2VkTmF0aXZlRnVuY3Rp
b24ga2V5KQogewotICAgIGFkZChoYXNoZXIsIGtleS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICBhZGQoaGFzaGVyLCBrZXkudGFnZ2VkUHRyKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IERlZmF1bHRIYXNoOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlTbG90LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVNsb3QuaAppbmRleCBhZDc4MDlkMzYyZjkuLmUwOTJlNmY1YzhjZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKQEAgLTg2LDExICs4NiwxMSBA
QCBpbmxpbmUgdW5zaWduZWQgYXR0cmlidXRlc0ZvclN0cnVjdHVyZSh1bnNpZ25lZCBhdHRyaWJ1
dGVzKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihhdHRyaWJ1dGVzKTsKIH0KIAot
dXNpbmcgR2V0VmFsdWVGdW5jID0gVHlwZWRGdW5jdGlvblB0cjxHZXRWYWx1ZUZ1bmNQdHJUYWcs
IEVuY29kZWRKU1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5
TmFtZSksIEZ1bmN0aW9uQXR0cmlidXRlczo6SklUT3BlcmF0aW9uPjsKLXVzaW5nIEdldFZhbHVl
RnVuY1dpdGhQdHIgPSBUeXBlZEZ1bmN0aW9uUHRyPEdldFZhbHVlRnVuY1dpdGhQdHJQdHJUYWcs
IEVuY29kZWRKU1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5
TmFtZSwgdm9pZCopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpJVE9wZXJhdGlvbj47Cit1c2luZyBH
ZXRWYWx1ZUZ1bmMgPSBGdW5jdGlvblB0cjxHZXRWYWx1ZUZ1bmNQdHJUYWcsIEVuY29kZWRKU1Zh
bHVlKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSksIEZ1bmN0
aW9uQXR0cmlidXRlczo6SklUT3BlcmF0aW9uPjsKK3VzaW5nIEdldFZhbHVlRnVuY1dpdGhQdHIg
PSBGdW5jdGlvblB0cjxHZXRWYWx1ZUZ1bmNXaXRoUHRyUHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIHZvaWQqKSwgRnVu
Y3Rpb25BdHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+OwogCi11c2luZyBQdXRWYWx1ZUZ1bmMgPSBU
eXBlZEZ1bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1B0clRhZywgYm9vbChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKSwgRnVuY3Rpb25B
dHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+OwotdXNpbmcgUHV0VmFsdWVGdW5jV2l0aFB0ciA9IFR5
cGVkRnVuY3Rpb25QdHI8UHV0VmFsdWVGdW5jV2l0aFB0clB0clRhZywgYm9vbChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lLCB2b2lk
KiksIEZ1bmN0aW9uQXR0cmlidXRlczo6SklUT3BlcmF0aW9uPjsKK3VzaW5nIFB1dFZhbHVlRnVu
YyA9IEZ1bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1B0clRhZywgYm9vbChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKSwgRnVuY3Rpb25B
dHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+OwordXNpbmcgUHV0VmFsdWVGdW5jV2l0aFB0ciA9IEZ1
bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1dpdGhQdHJQdHJUYWcsIGJvb2woSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSwgdm9pZCopLCBG
dW5jdGlvbkF0dHJpYnV0ZXM6OkpJVE9wZXJhdGlvbj47CiAKIGNsYXNzIFByb3BlcnR5U2xvdCB7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5
U2xvdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgK
aW5kZXggN2RiYmY1N2U3MDQ1Li5jYTZkMzc3NWY3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU0Z1bmN0aW9uOwogICAgIAotdXNp
bmcgQ3VzdG9tQWNjZXNzb3JWYWx1ZUZ1bmMgPSBUeXBlZEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vz
c29yUHRyVGFnLCBib29sKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBQcm9wZXJ0eU5hbWUpPjsKK3VzaW5nIEN1c3RvbUFjY2Vzc29yVmFsdWVGdW5jID0g
RnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWcsIGJvb2woSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk+OwogCiBjbGFzcyBQ
dXRQcm9wZXJ0eVNsb3QgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAppbmRleCBmYjBkZGRlNzlmNDUuLjJmYjRiZTU1
MTI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5jcHAKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRh
a2VTYW1wbGUoU2Vjb25kcyYgc3RhY2tUcmFjZVByb2Nlc3NpbmdUaW1lKQogICAgICAgICAgICAg
ICAgIGNhbGxGcmFtZSA9IHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KG1hY2hpbmVGcmFtZSk7CiAg
ICAgICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlvblBvaW50ZXIgPSBNYWNoaW5lQ29udGV4dDo6
aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAgICAgaWYgKGluc3Ry
dWN0aW9uUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgbWFjaGluZVBDID0gaW5zdHJ1Y3Rp
b25Qb2ludGVyLT51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAg
ICAgIG1hY2hpbmVQQyA9IGluc3RydWN0aW9uUG9pbnRlci0+dW50YWdnZWRQdHIoKTsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9IG51bGxwdHI7
CiAgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlbW92ZUNvZGVQdHJUYWcoTWFjaGluZUNvbnRl
eHQ6OmxsaW50SW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lzdGVycykpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAppbmRleCA5NmM5NTcz
ODk5MzguLjViOTI3ZWIxNDdiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKQEAgLTc1LDggKzc1LDggQEAgdm9pZCBTY3JpcHRF
eGVjdXRhYmxlOjpjbGVhckNvZGUoSXNvQ2VsbFNldCYgY2xlYXJhYmxlQ29kZVNldCkKIHsKICAg
ICBtX2ppdENvZGVGb3JDYWxsID0gbnVsbHB0cjsKICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3Qg
PSBudWxscHRyOwotICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwotICAgIG1faml0Q29kZUZvckNvbnN0cnVj
dFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7
CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPigpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPigpOwogCiAgICAgc3dpdGNoICh0eXBlKCkpIHsKICAgICBjYXNlIEZ1
bmN0aW9uRXhlY3V0YWJsZVR5cGU6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApp
bmRleCBlODAyYjM5MWExM2EuLmE3NWI0MjIxM2IzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcApAQCAtNzE3LDcgKzcxNyw3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRS
ZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbikKICAgICByZXR1cm4gZ2V0T3JDcmVhdGUo
bV9mYXN0UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFZN
OjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDhjMTFmNTM5NDQwYi4uYTg5ZjE2
Zjk2M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTU2NCw3ICs1NjQsNyBA
QCBwdWJsaWM6CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlz
SlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdl
dFJlbW90ZUZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uKTsKIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGdl
dENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElMaW5rQ2Fs
bCgpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElUaHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IGdldENUSVZpcnR1YWxDYWxsKENhbGxNb2RlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKaW5kZXggYjUxMDUyOTdiODQ0Li5j
NDZjMTg3Y2ZmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3Bw
CkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdHJ1Y3QgVk1UcmFwczo6U2ln
bmFsQ29udGV4dCB7CiBwcml2YXRlOgotICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycywgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQ
dHJUYWc+IHRyYXBQQykKKyAgICBTaWduYWxDb250ZXh0KFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnMsIENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gdHJhcFBDKQogICAgICAg
ICA6IHJlZ2lzdGVycyhyZWdpc3RlcnMpCiAgICAgICAgICwgdHJhcFBDKHRyYXBQQykKICAgICAg
ICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihyZWdpc3RlcnMp
KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVyczsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3Rl
cnNQQ1B0clRhZz4gdHJhcFBDOworICAgIENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRh
Zz4gdHJhcFBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lkKiBmcmFtZVBvaW50
ZXI7CiB9OwpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJl
YWtwb2ludHMoVk1UcmFwczo6U2lnbmFsQ29udGV4dCYgY29udGV4dCwgU3RhY2tCbwogICAgIC8v
IFRoaXMgbXVzdCBiZSB0aGUgaW5pdGlhbCBzaWduYWwgdG8gZ2V0IHRoZSBtdXRhdG9yIHRocmVh
ZCdzIGF0dGVudGlvbi4KICAgICAvLyBMZXQncyBnZXQgdGhlIHRocmVhZCB0byBicmVhayBhdCBp
bnZhbGlkYXRpb24gcG9pbnRzIGlmIG5lZWRlZC4KICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwot
ICAgIHZvaWQqIHRyYXBQQyA9IGNvbnRleHQudHJhcFBDLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICB2b2lkKiB0cmFwUEMgPSBjb250ZXh0LnRyYXBQQy51bnRhZ2dlZFB0cigpOwog
ICAgIC8vIFdlIG11c3QgZW5zdXJlIHdlJ3JlIGluIEpJVC9MTGludCBjb2RlLiBJZiB3ZSBhcmUs
IHdlIGtub3cgYSBmZXcgdGhpbmdzOgogICAgIC8vIC0gVGhlIEpTIHRocmVhZCBpc24ndCBob2xk
aW5nIHRoZSBtYWxsb2MgbG9jay4gVGhlcmVmb3JlLCBpdCdzIHNhZmUgdG8gbWFsbG9jIGJlbG93
LgogICAgIC8vIC0gVGhlIEpTIHRocmVhZCBpc24ndCBob2xkaW5nIHRoZSBDb2RlQmxvY2tTZXQg
bG9jay4KQEAgLTIxMyw3ICsyMTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFz
aWduYWxDb250ZXh0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpO
b3RIYW5kbGVkOwogCi0gICAgICAgICAgICAgICAgdm9pZCogdHJhcFBDID0gc2lnbmFsQ29udGV4
dC0+dHJhcFBDLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICB2
b2lkKiB0cmFwUEMgPSBzaWduYWxDb250ZXh0LT50cmFwUEMudW50YWdnZWRQdHIoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWlzSklUUEModHJhcFBDKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCmluZGV4IDZkNjlhNGRmMmUyMy4u
YjM2YjU1NzQ3ZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2ln
aWxsQ3Jhc2hBbmFseXplci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Np
Z2lsbENyYXNoQW5hbHl6ZXIuY3BwCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKIHByaXZhdGU6Ci0gICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJl
Z2lzdGVycyYgcmVnaXN0ZXJzLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3Rl
cnNQQ1B0clRhZz4gbWFjaGluZVBDKQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycywgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBtYWNoaW5l
UEMpCiAgICAgICAgIDogcmVnaXN0ZXJzKHJlZ2lzdGVycykKICAgICAgICAgLCBtYWNoaW5lUEMo
bWFjaGluZVBDKQogICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQ
b2ludGVyKHJlZ2lzdGVycykpCkBAIC0xNDAsMTYgKzE0MCwxNiBAQCBwdWJsaWM6CiAgICAgICAg
IGxvZygieCVkOiAlMDE2bGx4IGZwOiAlMDE2bGx4IGxyOiAlMDE2bGx4IiwKICAgICAgICAgICAg
IGksIHJlZ2lzdGVycy5fX3hbaV0sCiAgICAgICAgICAgICBNYWNoaW5lQ29udGV4dDo6ZnJhbWVQ
b2ludGVyPHVpbnQ2NF90PihyZWdpc3RlcnMpLAotICAgICAgICAgICAgTWFjaGluZUNvbnRleHQ6
OmxpbmtSZWdpc3RlcihyZWdpc3RlcnMpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dWludDY0
X3Q+KCkpOworICAgICAgICAgICAgTWFjaGluZUNvbnRleHQ6OmxpbmtSZWdpc3RlcihyZWdpc3Rl
cnMpLnVudGFnZ2VkUHRyPHVpbnQ2NF90PigpKTsKICAgICAgICAgbG9nKCJzcDogJTAxNmxseCBw
YzogJTAxNmxseCBjcHNyOiAlMDh4IiwKICAgICAgICAgICAgIE1hY2hpbmVDb250ZXh0OjpzdGFj
a1BvaW50ZXI8dWludDY0X3Q+KHJlZ2lzdGVycyksCi0gICAgICAgICAgICBtYWNoaW5lUEMudW50
YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx1aW50NjRfdD4oKSwKKyAgICAgICAgICAgIG1hY2hpbmVQ
Qy51bnRhZ2dlZFB0cjx1aW50NjRfdD4oKSwKICAgICAgICAgICAgIHJlZ2lzdGVycy5fX2Nwc3Ip
OwogI2VuZGlmCiAgICAgfQogCiAgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVyczsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gbWFjaGlu
ZVBDOworICAgIENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gbWFjaGluZVBDOwog
ICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lkKiBmcmFtZVBvaW50ZXI7CiB9OwpAQCAt
MTY0LDcgKzE2NCw3IEBAIHN0YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogICAgICAg
ICBpZiAoIXNpZ25hbENvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpO
b3RIYW5kbGVkOwogICAgICAgICAgICAgCi0gICAgICAgIHZvaWQqIG1hY2hpbmVQQyA9IHNpZ25h
bENvbnRleHQtPm1hY2hpbmVQQy51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
IHZvaWQqIG1hY2hpbmVQQyA9IHNpZ25hbENvbnRleHQtPm1hY2hpbmVQQy51bnRhZ2dlZFB0cigp
OwogICAgICAgICBpZiAoIWlzSklUUEMobWFjaGluZVBDKSkKICAgICAgICAgICAgIHJldHVybiBT
aWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CiAKQEAgLTE4NSw3ICsxODUsNyBAQCBzdHJ1Y3QgU2ln
bmFsQ29udGV4dCB7CiAKICAgICB2b2lkIGR1bXAoKSB7IH0KIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBtYWNoaW5lUEM7CisgICAgQ29kZVB0
cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBtYWNoaW5lUEM7CiAgICAgdm9pZCogc3RhY2tQ
b2ludGVyOwogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKIH07CkBAIC0yMzYsNyArMjM2LDcgQEAg
YXV0byBTaWdpbGxDcmFzaEFuYWx5emVyOjphbmFseXplKFNpZ25hbENvbnRleHQmIGNvbnRleHQp
IC0+IENyYXNoU291cmNlCiAgICAgICAgIH0KICAgICAgICAgTG9ja2VyIGxvY2tlciB7IEFkb3B0
TG9jaywgaW5zcGVjdG9yLmdldExvY2soKSB9OwogCi0gICAgICAgIHZvaWQqIHBjID0gY29udGV4
dC5tYWNoaW5lUEMudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICB2b2lkKiBw
YyA9IGNvbnRleHQubWFjaGluZVBDLnVudGFnZ2VkUHRyKCk7CiAgICAgICAgIGF1dG8gaXNJbkpJ
VE1lbW9yeSA9IGluc3BlY3Rvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShwYyk7CiAgICAgICAg
IGlmICghaXNJbkpJVE1lbW9yeSkgewogICAgICAgICAgICAgbG9nKCJFUlJPUjogVGltZWQgb3V0
OiBub3QgYWJsZSB0byBkZXRlcm1pbmUgaWYgcGMgJXAgaXMgaW4gdmFsaWQgSklUIGV4ZWN1dGFi
bGUgbWVtb3J5IiwgcGMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5jcHAKaW5kZXggMWNlY2ZkMmVhODVjLi40MWIwY2QzMGVhMWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApA
QCAtMzM4Niw3ICszMzg2LDcgQEAgVG1wIEFpcklSR2VuZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKENh
dGNoS2luZCBraW5kLCBDb250cm9sVHlwZSYgZGF0YSwgdW5zaWduZWQgZXgKICAgICAgICAgaml0
Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUpKTsK
KyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KGNhbGwsIG9wZXJh
dGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUpOwogICAgICAgICB9
KTsKICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCmluZGV4IDhkZTEwZmE3YzI5Ny4uM2YxMDRiNThmOGQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0yNzEx
LDcgKzI3MTEsNyBAQCBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbChDYXRjaEtp
bmQga2luZCwgQ29udHJvbFR5cGUmIGRhdGEsIHVuc2lnbmVkCiAgICAgICAgIGppdC5tb3ZlKHBh
cmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQu
YWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlKSk7CisgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihjYWxsLCBvcGVyYXRpb25XYXNt
UmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlKTsKICAgICAgICAgfSk7CiAgICAg
fSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBm
YmQ2ODI2ODEyOWYuLjc4NDRhMmQyYjE5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIEZJTkFMSVpFX1dBU01fQ09ERV9GT1Jf
TU9ERShDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0aW9u
UHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9mdW5j
dGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmlu
ZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAg
ICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKKyAgICBD
b2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICB7CiAgICAgICAgIFJlZjxC
QlFDYWxsZWU+IGNhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVu
dHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVT
ZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh0aWVyVXApLCBXVEZNb3Zl
KHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKSwgV1RGTW92ZShmdW5jdGlvbi0+c3RhY2ttYXBzKSwg
V1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnMpLCBXVEZNb3ZlKGxvb3BFbnRyeXBvaW50TG9jYXRpb25zKSwgZnVuY3Rp
b24tPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwogICAgICAgICBmb3IgKGF1dG8mIG1vdmVM
b2NhdGlvbiA6IGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zKQpAQCAtMTYxLDcgKzE2MSw3
IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAg
IG1fY2FsbGVlR3JvdXAtPnNldEJCUUNhbGxlZShsb2NrZXIsIG1fZnVuY3Rpb25JbmRleCwgY2Fs
bGVlLmNvcHlSZWYoKSk7CiAKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNt
VG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxX
YXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgICAgICAgICBDb2RlUHRyPFdhc21FbnRy
eVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhT
cGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKICAgICAg
ICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jYWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0
dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CiAgICAgICAgICAgICBlbHNlCkBA
IC0yOTAsNyArMjkwLDcgQEAgdm9pZCBCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkK
IAogICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7
CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKKyAg
ICAgICAgICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKICAg
ICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKSkgewogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5z
dGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25kaXRpb24gc2hvdWxkIGJl
IHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjY0NjIKICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9
IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuY29kZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAppbmRleCAzMjAyZjU0
ODBjYTQuLjczY2QzYmRlNTVhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxlZS5jcHAKQEAgLTExMCwxMiArMTEwLDEyIEBAIExMSW50Q2FsbGVlOjpMTEludENhbGxlZShG
dW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciYgZ2VuZXJhdG9yLCBzaXplX3QgaW5kZXgsIHN0CiAg
ICAgfQogfQogCi12b2lkIExMSW50Q2FsbGVlOjpzZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQpCit2b2lkIExMSW50Q2FsbGVlOjpz
ZXRFbnRyeXBvaW50KENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50KQogewogICAg
IG1fZW50cnlwb2ludCA9IGVudHJ5cG9pbnQ7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxX
YXNtRW50cnlQdHJUYWc+IExMSW50Q2FsbGVlOjplbnRyeXBvaW50KCkgY29uc3QKK0NvZGVQdHI8
V2FzbUVudHJ5UHRyVGFnPiBMTEludENhbGxlZTo6ZW50cnlwb2ludCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fZW50cnlwb2ludDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21DYWxsZWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
ZWUuaAppbmRleCBkOGFkZjRiMTMwZmEuLmY5YTdjNDllNzQzMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsZWUuaApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgSW5k
ZXhPck5hbWUgaW5kZXhPck5hbWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4T3JOYW1lOyB9CiAg
ICAgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29t
cGlsYXRpb25Nb2RlOyB9CiAKLSAgICB2aXJ0dWFsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2RlUHRy
PFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSAwOwogICAgIHZpcnR1
YWwgc3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+IHJhbmdlKCkgY29uc3QgPSAwOwogCkBAIC03OSw3
ICs3OSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSklUQ2FsbGVlIDogcHVibGljIENhbGxlZSB7
CiBwdWJsaWM6Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50
cnlwb2ludCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlv
bi0+Y29kZSgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsgfQorICAgIENvZGVQdHI8V2Fz
bUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9lbnRy
eXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOyB9
CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSBvdmVycmlk
ZSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KICAgICBGaXhl
ZFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgd2FzbVRvV2FzbUNhbGxzaXRlcygpIHsg
cmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQogCkBAIC0yMjUsOCArMjI1LDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBMTEludENhbGxlZShnZW5lcmF0b3Is
IGluZGV4LCBXVEZNb3ZlKG5hbWUpKSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBlbnRyeXBvaW50KCkgY29uc3QgZmluYWw7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzZXRFbnRyeXBvaW50KENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCBm
aW5hbDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVl
U2F2ZVJlZ2lzdGVycygpIGZpbmFsOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0ZDo6dHVwbGU8
dm9pZCosIHZvaWQqPiByYW5nZSgpIGNvbnN0IGZpbmFsOwogCkBAIC0zMTMsNyArMzEzLDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8T3B0aW1pemluZ0pJVENhbGxlZT4gbV9yZXBsYWNlbWVudHNb
V2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2Rlc107CiAgICAgUmVmUHRyPE9TUkVudHJ5Q2FsbGVlPiBt
X29zckVudHJ5Q2FsbGVlc1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsKICNlbmRpZgotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IG1fZW50cnlwb2ludDsKKyAg
ICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gbV9lbnRyeXBvaW50OwogfTsKIAogdXNpbmcgTExJ
bnRDYWxsZWVzID0gVGhyZWFkU2FmZVJlZkNvdW50ZWRGaXhlZFZlY3RvcjxSZWY8TExJbnRDYWxs
ZWU+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVH
cm91cC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAuY3Bw
CmluZGV4IDFiZWJjOWNiMWEyYi4uNWQ1ZjZiMDI2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgQ2FsbGVl
R3JvdXA6OkNhbGxlZUdyb3VwKFZNJiB2bSwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1h
dGlvbiYgbW9kdWxlSW5mb3IKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzID0gRml4ZWRWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+KG1fY2FsbGVlQ291bnQp
OworICAgICAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHMgPSBGaXhlZFZlY3Rv
cjxDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+KG1fY2FsbGVlQ291bnQpOwogCiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxsZWVDb3VudDsgKytpKQogICAgICAgICAg
ICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2ldID0gbV9sbGludENhbGxlZXMt
PmF0KGkpLT5lbnRyeXBvaW50KCk7CkBAIC05Niw3ICs5Niw3IEBAIENhbGxlZUdyb3VwOjpDYWxs
ZWVHcm91cChWTSYgdm0sIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVs
ZUluZm9yCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50cyA9IEZpeGVkVmVjdG9yPE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+PihtX2NhbGxlZUNvdW50KTsKKyAgICAgICAg
ICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzID0gRml4ZWRWZWN0b3I8Q29kZVB0cjxX
YXNtRW50cnlQdHJUYWc+PihtX2NhbGxlZUNvdW50KTsKIAogICAgICAgICAgICAgQkJRUGxhbiog
YmJxUGxhbiA9IHN0YXRpY19jYXN0PEJCUVBsYW4qPihtX3BsYW4uZ2V0KCkpOwogICAgICAgICAg
ICAgYmJxUGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwg
UmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4mJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUsIFJlZlB0cjxCQlFDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnQpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmgKaW5kZXggNmUyMThmYjg4YzZhLi43NTFh
ZmU2ZWIzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
ZWVHcm91cC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91
cC5oCkBAIC0xNDIsMTQgKzE0MiwxNCBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiogZW50cnlwb2ludExvYWRMb2Nh
dGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQor
ICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiogZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21G
dW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0
Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNw
YWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgICAgICByZXR1cm4gJm1fd2FzbUluZGly
ZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XTsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiB3YXNtVG9XYXNtRXhpdFN0dWIodW5zaWduZWQg
ZnVuY3Rpb25JbmRleCkKKyAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvV2FzbUV4
aXRTdHViKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICByZXR1cm4gbV93
YXNtVG9XYXNtRXhpdFN0dWJzW2Z1bmN0aW9uSW5kZXhdLmNvZGUoKTsKICAgICB9CkBAIC0xNzgs
NyArMTc4LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIFJlZlB0cjxMTEludENhbGxlZXM+IG1f
bGxpbnRDYWxsZWVzOwogICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxFbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWU+LCBEZWZhdWx0SGFzaDx1aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyQ2FsbGVlczsKLSAgICBGaXhlZFZl
Y3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtSW5kaXJl
Y3RDYWxsRW50cnlQb2ludHM7CisgICAgRml4ZWRWZWN0b3I8Q29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+PiBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50czsKICAgICBGaXhlZFZlY3RvcjxWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKICAgICBG
aXhlZFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNt
VG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxFbnRyeVBsYW4+IG1fcGxhbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAK
aW5kZXggMmRlOWYxNjZmYTdlLi4zNzE2NDRlMzEyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC01OSw3ICs1
OSw3IEBAIHN0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2ln
SW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlCiAgICAgYXV0byBpbnN0cnVjdGlvblBvaW50
ZXIgPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpOwogICAgIGlm
ICghaW5zdHJ1Y3Rpb25Qb2ludGVyKQogICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RI
YW5kbGVkOwotICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvblBvaW50
ZXItPnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lkKiBmYXVsdGluZ0luc3Ry
dWN0aW9uID0gaW5zdHJ1Y3Rpb25Qb2ludGVyLT51bnRhZ2dlZFB0cigpOwogICAgIGRhdGFMb2dM
bklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRlcm5hbDo6dmVyYm9zZSwgInN0YXJ0aW5nIGhh
bmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1Y3Rpb24pKTsK
IAogICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRlcm5hbDo6dmVyYm9z
ZSwgIkpJVCBtZW1vcnkgc3RhcnQ6ICIsIFJhd1BvaW50ZXIoc3RhcnRPZkZpeGVkRXhlY3V0YWJs
ZU1lbW9yeVBvb2woKSksICIgZW5kOiAiLCBSYXdQb2ludGVyKGVuZE9mRml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5k
ZXggMzY2ZDY1YjJlYjk1Li42YTBmMWQ2N2FiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmgKQEAgLTQ2MSw3ICs0NjEsNyBAQCBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlv
biB7CiAvLyBtZWFudCBhcyBmYXN0IGxvb2t1cCB0YWJsZXMgZm9yIHRoZXNlIG9wY29kZXMgYW5k
IGRvIG5vdCBvd24gY29kZS4KIHN0cnVjdCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsK
ICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7Ci0gICAgdXNpbmcgTG9hZExvY2F0
aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4qOworICAgIHVzaW5n
IExvYWRMb2NhdGlvbiA9IENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPio7CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIHR5cGVJbmRleCk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBlbnRyeXBvaW50TG9hZExv
Y2F0aW9uKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SGFuZGxlckluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJ
bmZvLmNwcAppbmRleCA0YjU4OWU1NWI3MDAuLjcyM2QyMmMxOGE3OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uY3BwCkBAIC0zNCw3ICszNCw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBXYXNtIHsKIAotdm9pZCBIYW5kbGVySW5mbzo6
aW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEluZm8sIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBsYWJlbCkKK3ZvaWQgSGFu
ZGxlckluZm86OmluaXRpYWxpemUoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRJ
bmZvLCBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGxhYmVsKQogewogICAgIG1fdHlw
ZSA9IHVubGlua2VkSW5mby5tX3R5cGU7CiAgICAgbV9zdGFydCA9IHVubGlua2VkSW5mby5tX3N0
YXJ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJ
bmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaAppbmRl
eCA4M2ZhMmYwMjM4YmQuLmNlYjg4YzcwOWRkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKQEAgLTg3LDcgKzg3LDcgQEAgc3RydWN0IFVubGlua2Vk
SGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKIHN0cnVjdCBIYW5kbGVySW5m
byA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgewogICAgIHN0YXRpYyBjb25zdCBIYW5kbGVySW5m
byogaGFuZGxlckZvckluZGV4KEluc3RhbmNlJiwgY29uc3QgRml4ZWRWZWN0b3I8SGFuZGxlcklu
Zm8+JiBleGVwdGlvbkhhbmRsZXJzLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgV2FzbTo6VGFnKiBl
eGNlcHRpb25UYWcpOwogCi0gICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxl
ckluZm8mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4pOwor
ICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiwgQ29kZVB0cjxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPik7CiAKICAgICB1bnNpZ25lZCB0YWcoKSBjb25zdAogICAg
IHsKQEAgLTEwMSw3ICsxMDEsNyBAQCBzdHJ1Y3QgSGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxl
ckluZm9CYXNlIHsKICAgICAgICAgcmV0dXJuIG1fZGVsZWdhdGVUYXJnZXQ7CiAgICAgfQogCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1fbmF0aXZl
Q29kZTsKKyAgICBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1fbmF0aXZlQ29kZTsK
IAogcHJpdmF0ZToKICAgICB1bmlvbiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgKaW5kZXggOTY4OTVmZTgwNjg0Li4wY2MzY2Q0
MmE0NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JUkdlbmVy
YXRvckhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVJHZW5l
cmF0b3JIZWxwZXJzLmgKQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW1p
dFJldGhyb3dJbXBsKENDYWxsSGVscGVycyYgaml0KQogICAgIENDYWxsSGVscGVyczo6Q2FsbCBj
YWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgaml0LmFkZExp
bmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNt
UmV0aHJvdykpOworICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihjYWxs
LCBvcGVyYXRpb25XYXNtUmV0aHJvdyk7CiAgICAgfSk7CiB9CiAKQEAgLTE1OSw3ICsxNTksNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZW1pdFRocm93SW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgdW5z
aWduZWQgZXhjZXB0aW9uSW5kZXgpCiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
Y2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBqaXQuYWRkTGlua1Rhc2soW2Nh
bGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhj
YWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UaHJvdykpOwor
ICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihjYWxsLCBvcGVyYXRpb25X
YXNtVGhyb3cpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21J
bnN0YW5jZS5oCmluZGV4IGM4NjFlOWJlNjNhYy4uNjM2NDhmM2NhZjk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApAQCAtMTk1LDcgKzE5NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgLy8gVGFyZ2V0IGluc3RhbmNlIGFuZCBlbnRyeXBvaW50IGFyZSBvbmx5IHNl
dCBmb3Igd2FzbS0+d2FzbSBjYWxscywgYW5kIGFyZSBvdGhlcndpc2UgbnVsbHB0ci4gVGhlIGVt
YmVkZGVyLXNwZWNpZmljIGxvZ2ljIG9jY3VycyB0aHJvdWdoIGltcG9ydCBmdW5jdGlvbi4KICAg
ICAgICAgSW5zdGFuY2UqIHRhcmdldEluc3RhbmNlIHsgbnVsbHB0ciB9OwogICAgICAgICBXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24geyBudWxscHRyIH07Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YjsKKyAgICAgICAgQ29kZVB0cjxXYXNtRW50
cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YjsKICAgICAgICAgdm9pZCogaW1wb3J0RnVuY3Rp
b24geyBudWxscHRyIH07IC8vIEluIGEgSlMgZW1iZWRkaW5nLCB0aGlzIGlzIGEgV3JpdGVCYXJy
aWVyPEpTT2JqZWN0Pi4KICAgICB9OwogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtSW1wb3J0RnVuY3Rpb25zOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCmluZGV4IDU4MTQyNjcxZThiZi4uNTJmYzNi
MmE0MTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQ
bGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNw
cApAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgTExJbnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0
aW9uKCkKIAogICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzKSB7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVz
czsKKyAgICAgICAgICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVz
czsKICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rp
b25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKSkgewogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4g
QjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNo
b3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULgogICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA4OTBkOGQyMDk3YWYuLjk1
ZmMxZDE5OTJjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9y
dCkKIAogICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50
ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgQ29k
ZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgewogICAgICAgICBBU1NFUlQo
bV9jYWxsZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSgpKSk7
CiAgICAgICAgIFJlZjxPTUdDYWxsZWU+IGNhbGxlZSA9IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1v
dmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHVubGlua2Vk
Q2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50
ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRs
ZXJMb2NhdGlvbnMpKTsKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29t
cGlsYXRpb25FZmZvcnQpCiAgICAgICAgIG1fY2FsbGVlR3JvdXAtPnNldE9NR0NhbGxlZShsb2Nr
ZXIsIG1fZnVuY3Rpb25JbmRleCwgY2FsbGVlLmNvcHlSZWYoKSk7CiAKICAgICAgICAgZm9yIChh
dXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAg
ICAgICAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAg
IGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlv
bigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKICAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0g
bV9jYWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNw
YWNlXS5jb2RlKCk7CiAgICAgICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCmluZGV4IDFjNWQyMWVhZDY4Ny4uY2E1ODBkY2Mw
N2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQ
bGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFu
LmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0
aW9uRWZmb3J0KQogCiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NhbGxlZUdyb3VwLT5tX2xv
Y2sgfTsKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNp
dGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+IGVudHJ5cG9pbnQ7CisgICAgICAgICAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50
cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9k
dWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKICAgICAgICAg
ICAgICAgICBlbnRyeXBvaW50ID0gbV9jYWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJz
W2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CiAgICAgICAgICAgICBlbHNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggOTA3YjRj
OTlkOWM4Li5jMTNmYmM3ODBjNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT3BlcmF0aW9ucy5jcHAKQEAgLTIxNiw3ICsyMTYsNyBAQCBzdGF0aWMgdm9pZCBkb09TUkVu
dHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxl
ZSYgYwogI2VuZGlmCiAgICAgLy8gNC4gQ29uZmlndXJlIGFyZ3VtZW50IHJlZ2lzdGVycyB0byBq
dW1wIHRvIE9TUiBlbnRyeSBmcm9tIHRoZSBjYWxsZXIgb2YgdGhpcyBydW50aW1lIGZ1bmN0aW9u
LgogICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPSBiaXR3aXNlX2Nhc3Q8
VUNQVVJlZ2lzdGVyPihidWZmZXIpOwotICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50
R1BSMSkgPSBiaXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVyPihvc3JFbnRyeUNhbGxlZS5lbnRyeXBv
aW50KCkuZXhlY3V0YWJsZUFkZHJlc3M8PigpKTsKKyAgICBjb250ZXh0LmdwcihHUFJJbmZvOjph
cmd1bWVudEdQUjEpID0gYml0d2lzZV9jYXN0PFVDUFVSZWdpc3Rlcj4ob3NyRW50cnlDYWxsZWUu
ZW50cnlwb2ludCgpLnRhZ2dlZFB0cjw+KCkpOwogfQogCiBpbmxpbmUgYm9vbCBzaG91bGRKSVQo
dW5zaWduZWQgZnVuY3Rpb25JbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmNwcAppbmRleCBmYTlhYTc3OGU2OGMuLjNhMzc1MzM1NjQ2MiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgUGxhbjo6dXBk
YXRlQ2FsbFNpdGVzVG9DYWxsVXMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNhbGxlZUdyb3VwTG9j
a2VyLCBDYWxsCiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykgewogICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYoV2FzbVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5n
IHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRh
TG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsK
ICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4
U3BhY2UpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtUGxhbkludGVybmFsOjp2
ZXJib3NlLCAiUmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0
aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0byAiLCBSYXdQb2ludGVyKGVudHJ5cG9pbnQuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21QbGFuSW50
ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5j
YWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIoZW50cnlwb2lu
dC50YWdnZWRQdHIoKSkpOwogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
TmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIHN0YWdlZENhbGxzLmdldChjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IGVkMjA3Yzk1MjM0
Yy4uMGRhODcwMDFlNDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xv
d1BhdGhzLmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wocHJvbG9n
dWVfb3NyKQogICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoY2FsbGVlLCBpbnN0
YW5jZSkpCiAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKIAotICAg
IFdBU01fUkVUVVJOX1RXTyhjYWxsZWUtPnJlcGxhY2VtZW50KGluc3RhbmNlLT5tZW1vcnkoKS0+
bW9kZSgpKS0+ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOworICAg
IFdBU01fUkVUVVJOX1RXTyhjYWxsZWUtPnJlcGxhY2VtZW50KGluc3RhbmNlLT5tZW1vcnkoKS0+
bW9kZSgpKS0+ZW50cnlwb2ludCgpLnRhZ2dlZFB0cigpLCBudWxscHRyKTsKIH0KIAogV0FTTV9T
TE9XX1BBVEhfREVDTChsb29wX29zcikKQEAgLTIxMCw3ICsyMTAsNyBAQCBXQVNNX1NMT1dfUEFU
SF9ERUNMKGxvb3Bfb3NyKQogICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgOiBvc3JF
bnRyeURhdGEudmFsdWVzKQogICAgICAgICAgICAgYnVmZmVyW2luZGV4KytdID0gUkVBRChyZWcp
LmVuY29kZWRKU1ZhbHVlKCk7CiAKLSAgICAgICAgV0FTTV9SRVRVUk5fVFdPKGJ1ZmZlciwgYmJx
Q2FsbGVlLT5sb29wRW50cnlwb2ludHMoKVtvc3JFbnRyeURhdGEubG9vcEluZGV4XS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICAgICAgV0FTTV9SRVRVUk5fVFdPKGJ1ZmZlciwgYmJxQ2FsbGVl
LT5sb29wRW50cnlwb2ludHMoKVtvc3JFbnRyeURhdGEubG9vcEluZGV4XS50YWdnZWRQdHIoKSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29uc3QgYXV0byBkb09TUkVudHJ5ID0gWyZdKFdhc206
Ok9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSkgewogICAgICAgICAgICAgaWYgKG9zckVu
dHJ5Q2FsbGVlLT5sb29wSW5kZXgoKSAhPSBvc3JFbnRyeURhdGEubG9vcEluZGV4KQpAQCAtMjI2
LDcgKzIyNiw3IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgICAgICAgICBm
b3IgKFZpcnR1YWxSZWdpc3RlciByZWcgOiBvc3JFbnRyeURhdGEudmFsdWVzKQogICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IFJFQUQocmVnKS5lbmNvZGVkSlNWYWx1ZSgpOwogCi0g
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08oYnVmZmVyLCBvc3JFbnRyeUNhbGxlZS0+ZW50cnlw
b2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgV0FTTV9SRVRVUk5fVFdP
KGJ1ZmZlciwgb3NyRW50cnlDYWxsZWUtPmVudHJ5cG9pbnQoKS50YWdnZWRQdHIoKSk7CiAgICAg
ICAgIH07CiAKICAgICAgICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5vc3JF
bnRyeUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCkBAIC00NTEsNyArNDUxLDcg
QEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsKFdhc206Okluc3RhbmNlKiBp
bnN0YW5jZSwgdW5zaWduZWQgZnVuY3Rpb24KIHsKICAgICB1aW50MzJfdCBpbXBvcnRGdW5jdGlv
bkNvdW50ID0gaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVu
Y3Rpb25Db3VudCgpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRh
Zz4gY29kZVB0cjsKKyAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gY29kZVB0cjsKIAogICAg
IGlmIChmdW5jdGlvbkluZGV4IDwgaW1wb3J0RnVuY3Rpb25Db3VudCkgewogICAgICAgICBXYXNt
OjpJbnN0YW5jZTo6SW1wb3J0RnVuY3Rpb25JbmZvKiBmdW5jdGlvbkluZm8gPSBpbnN0YW5jZS0+
aW1wb3J0RnVuY3Rpb25JbmZvKGZ1bmN0aW9uSW5kZXgpOwpAQCAtNDY3LDcgKzQ2Nyw3IEBAIGlu
bGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2FsbChXYXNtOjpJbnN0YW5jZSogaW5zdGFu
Y2UsIHVuc2lnbmVkIGZ1bmN0aW9uCiAgICAgICAgIGNvZGVQdHIgPSAqaW5zdGFuY2UtPmNhbGxl
ZUdyb3VwKCktPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXgpOwogICAgIH0KIAotICAgIFdBU01fQ0FMTF9SRVRVUk4oaW5zdGFuY2UsIGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICBXQVNNX0NB
TExfUkVUVVJOKGluc3RhbmNlLCBjb2RlUHRyLnRhZ2dlZFB0cigpLCBXYXNtRW50cnlQdHJUYWcp
OwogfQogCiBXQVNNX1NMT1dfUEFUSF9ERUNMKGNhbGwpCkBAIC01MDYsNyArNTA2LDcgQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsSW5kaXJlY3QoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIFdhc206Okluc3RhbmMKICAgICBpZiAodGFyZ2V0SW5zdGFuY2UgIT0gaW5zdGFuY2Up
CiAgICAgICAgIHRhcmdldEluc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGluc3RhbmNlLT5j
YWNoZWRTdGFja0xpbWl0KCkpOwogCi0gICAgV0FTTV9DQUxMX1JFVFVSTih0YXJnZXRJbnN0YW5j
ZSwgZnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbi0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwg
V2FzbUVudHJ5UHRyVGFnKTsKKyAgICBXQVNNX0NBTExfUkVUVVJOKHRhcmdldEluc3RhbmNlLCBm
dW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0aW9uLT50YWdnZWRQdHIoKSwgV2FzbUVudHJ5UHRy
VGFnKTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChjYWxsX2luZGlyZWN0KQpAQCAtNTQzLDcg
KzU0Myw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2FsbFJlZihDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGNhCiAKICAgICBBU1NFUlQoV2FzbTo6VHlw
ZUluZm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZShmdW5jdGlvbi50eXBlSW5kZXgpID09
IENBTExFRSgpLT5zaWduYXR1cmUodHlwZUluZGV4KSk7CiAgICAgVU5VU0VEX1BBUkFNKHR5cGVJ
bmRleCk7Ci0gICAgV0FTTV9DQUxMX1JFVFVSTihjYWxsZWVJbnN0YW5jZSwgZnVuY3Rpb24uZW50
cnlwb2ludExvYWRMb2NhdGlvbi0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgV2FzbUVudHJ5UHRyVGFn
KTsKKyAgICBXQVNNX0NBTExfUkVUVVJOKGNhbGxlZUluc3RhbmNlLCBmdW5jdGlvbi5lbnRyeXBv
aW50TG9hZExvY2F0aW9uLT50YWdnZWRQdHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKIH0KIAogV0FT
TV9TTE9XX1BBVEhfREVDTChjYWxsX3JlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRodW5rcy5jcHAKaW5kZXggZmVjMmExMzc3OWJmLi41NDcyZjFhMDA4NzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRo
dW5rR2VuZXJhdG9yKGNvbnN0CiAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5v
dCByZWFjaCB0aGlzLgogCiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtVGh1bmspOwotICAgIGxpbmtCdWZmZXIu
bGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21Ub0pT
RXhjZXB0aW9uKSk7CisgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2FsbCwg
b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOwogICAgIHJldHVybiBGSU5BTElaRV9XQVNNX0NP
REUobGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJUaHJvdyBleGNlcHRpb24gZnJvbSBXYXNt
Iik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9X
YXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAppbmRl
eCA1MDU4MTEzMjM3NDguLjlhM2U3Mzc1MTA2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAtODcsNyArODcsNyBAQCB2b2lkIG1hcnNoYWxsSlNSZXN1
bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlv
biwgYwogICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZSh3YXNtQ29u
dGV4dEluc3RhbmNlR1BSKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpPih3YXNtQ29udGV4dElu
c3RhbmNlR1BSLCBpbnB1dEpTUik7Ci0gICAgICAgICAgICBqaXQuY2FsbE9wZXJhdGlvbihGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNvbnZlcnRUb0JpZ0ludCkpOworICAg
ICAgICAgICAgaml0LmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydFRvQmlnSW50KTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBib3hXYXNtUmVzdWx0KGppdCwgc2lnbmF0dXJlLnJl
dHVyblR5cGUoMCksIHdhc21GcmFtZUNvbnZlbnRpb24ucmVzdWx0c1swXSwgSlNSSW5mbzo6cmV0
dXJuVmFsdWVKU1IpOwogICAgIH0gZWxzZSB7CkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBtYXJz
aGFsbEpTUmVzdWx0KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgdHlw
ZURlZmluaXRpb24sIGMKIAogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoYWRkcmVzcywg
dmFsdWVKU1IpOwogICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpPih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCB2YWx1ZUpT
Uik7Ci0gICAgICAgICAgICAgICAgaml0LmNhbGxPcGVyYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpKTsKKyAgICAgICAgICAgICAgICBq
aXQuY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpOwogICAgICAgICAgICAg
ICAgIGppdC5zdG9yZVZhbHVlKEpTUkluZm86OnJldHVyblZhbHVlSlNSLCBhZGRyZXNzKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgbWFyc2hhbGxK
U1Jlc3VsdChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgVHlwZURlZmluaXRpb24mIHR5cGVEZWZp
bml0aW9uLCBjCiAgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIEFTU0VSVCh3YXNtQ29udGV4dEluc3RhbmNlR1BSICE9
IHNhdmVkUmVzdWx0c0dQUik7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25BbGxvY2F0ZVJlc3VsdHNBcnJheSk+KHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdHlwZURlZmluaXRpb24pLCBpbmRleGluZ1R5cGUs
IHNhdmVkUmVzdWx0c0dQUik7Ci0gICAgICAgIGppdC5jYWxsT3BlcmF0aW9uKEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXkpKTsKKyAgICAg
ICAgaml0LmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXkpOwogICAg
ICAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAg
ICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmgKaW5kZXggMTY4YmI5YzE4ZmI0Li5jNjUxNjNiODgzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTczLDcg
KzczLDcgQEAgcHVibGljOgogICAgIFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXhGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3Q7CiAKICAgICBF
eHBlY3RlZDx2b2lkLCBXYXNtOjpCaW5kaW5nRmFpbHVyZT4gZ2VuZXJhdGVXYXNtVG9KU1N0dWJz
KFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2FzbVRv
RW1iZWRkZXJTdHViKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gbV93YXNtVG9K
U0V4aXRTdHVic1tpbXBvcnRGdW5jdGlvbk51bV0uY29kZSgpOyB9CisgICAgQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0p
IHsgcmV0dXJuIG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0RnVuY3Rpb25OdW1dLmNvZGUoKTsg
fQogCiAgICAgdm9pZCBjbGVhckpTQ2FsbElDcyhWTSYpOwogICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dhc21Ub0pTLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcAppbmRleCAxNTNkYTNlNWZiNjMuLjU1Mzc4NDgzNGFlNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAtMjY4LDcgKzI2OCw3IEBAIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4g
d2FzbVRvSlMoVk0mIHZtCiAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChq
aXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOwogICAgICAgICAgICAgICAgIGppdC5zdG9yZVZh
bHVlKEpTUkluZm86OnJldHVyblZhbHVlSlNSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxl
ZUZyYW1lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Db252ZXJ0VG9C
aWdJbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0
clRhZz4oY2FsbCwgb3BlcmF0aW9uQ29udmVydFRvQmlnSW50KTsKICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVv
ZihSZWdpc3Rlcik7CkBAIC0zMjUsNyArMzI1LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0K
ICAgICAgICAgICAgIGppdC5tb3ZlVmFsdWVSZWdzKEpTUkluZm86OnJldHVyblZhbHVlSlNSLCBk
ZXN0KTsKIAogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNvbnZlcnRUb0k2NCkpOworICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KGNhbGwsIG9wZXJhdGlvbkNv
bnZlcnRUb0k2NCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0zNDksNyArMzQ5LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICNlbmRpZgog
CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ29udmVydFRvSTMyKSk7CisgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2FsbCwgb3BlcmF0aW9uQ29udmVydFRv
STMyKTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CkBA
IC0zODEsNyArMzgxLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgICAgIGpp
dC5tb3ZlKEZQUkluZm86OnJldHVyblZhbHVlRlBSICwgZGVzdCk7CiAKICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25Db252ZXJ0VG9GMzIpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8
T3BlcmF0aW9uUHRyVGFnPihjYWxsLCBvcGVyYXRpb25Db252ZXJ0VG9GMzIpOwogICAgICAgICAg
ICAgfSk7CiAKICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKQEAgLTQxMiw3ICs0MTIsNyBA
QCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGlu
Z0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICAgICAgaml0Lm1vdmUoRlBSSW5mbzo6
cmV0dXJuVmFsdWVGUFIsIGRlc3QpOwogCiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ29udmVydFRv
RjY0KSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4o
Y2FsbCwgb3BlcmF0aW9uQ29udmVydFRvRjY0KTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAg
ICAgICBkb25lLmxpbmsoJmppdCk7CkBAIC00NDEsNyArNDQxLDcgQEAgRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9K
UyhWTSYgdm0KICAgICAgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAoc2F2ZWRSZXN1bHRzR1BS
LCBKU1JJbmZvOjpyZXR1cm5WYWx1ZUpTUikpOwogICAgICAgICBBU1NFUlQod2FzbUNvbnRleHRJ
bnN0YW5jZUdQUiAhPSBzYXZlZFJlc3VsdHNHUFIpOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVu
dHM8ZGVjbHR5cGUob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpPih3YXNtQ29udGV4dEluc3RhbmNl
R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnR5cGVEZWZpbml0aW9uKSwgSlNSSW5m
bzo6cmV0dXJuVmFsdWVKU1IsIHNhdmVkUmVzdWx0c0dQUiwgQ0NhbGxIZWxwZXJzOjpmcmFtZVBv
aW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5jYWxsT3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpKTsKKyAgICAgICAgaml0LmNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpOwogICAgICAgICBpZiBjb25zdGV4
cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCkBAIC00NzAsNyArNDcw
LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJp
bmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIodm0pOwogCiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21VbndpbmQpKTsKKyAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KGNhbGwsIG9wZXJhdGlvbldhc21Vbndp
bmQpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIGVtaXRU
aHJvd1dhc21Ub0pTRXhjZXB0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgd2FzbUluc3Rh
bmNlLCBXYXNtOjpFeAogICAgIGppdC5icmVha3BvaW50KCk7IC8vIFdlIHNob3VsZCBub3QgcmVh
Y2ggdGhpcy4KIAogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4oV2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pKTsKKyAgICAgICAgbGlu
a0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2FsbCwgV2FzbTo6b3BlcmF0aW9uV2FzbVRv
SlNFeGNlcHRpb24pOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDE0YWNjMjg4MWMwOC4u
ZDU4ZWViMzJiMzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsCiAgICAgdm0ud2FzbUNvbnRleHQuc3RvcmUod2FzbUluc3RhbmNlLCB2bS5z
b2Z0U3RhY2tMaW1pdCgpKTsKICAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsK
ICAgICBBU1NFUlQoJndhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKSA9PSB2bS53
YXNtQ29udGV4dC5sb2FkKCkpOwotICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50
cnlUb1dhc20od2FzbUZ1bmN0aW9uLT5qc0VudHJ5cG9pbnQoTXVzdENoZWNrQXJpdHkpLmV4ZWN1
dGFibGVBZGRyZXNzKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKKyAgICBFbmNvZGVkSlNWYWx1
ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9XYXNtKHdhc21GdW5jdGlvbi0+anNFbnRyeXBvaW50KE11
c3RDaGVja0FyaXR5KS50YWdnZWRQdHIoKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwogICAgIGlm
IChwcmV2V2FzbUluc3RhbmNlICE9IHdhc21JbnN0YW5jZSkgewogICAgICAgICAvLyBUaGlzIGlz
IGp1c3QgZm9yIHNvbWUgZXh0cmEgc2FmZXR5IGluc3RlYWQgb2YgbGVhdmluZyBhIGNhY2hlZAog
ICAgICAgICAvLyB2YWx1ZSBpbiB0aGVyZS4gSWYgd2UgZXZlciBmb3JnZXQgdG8gc2V0IHRoZSB2
YWx1ZSB0byBiZSBhIHJlYWwKQEAgLTE3OSw3ICsxNzksNyBAQCBXYXNtOjpJbnN0YW5jZSogV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6cHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQorQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xv
dygpCiB7CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBDQ2FsbEhlbHBlcnMgaml0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5oCmluZGV4IDY2OGYxNTJlMWIyMS4uNjU3ZDAwZWI4MzVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCkBAIC02MCw3ICs2
MCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlG
dW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25l
ZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBq
c0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiwg
V2FzbTo6VHlwZUluZGV4KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFdhc21FbnRyeVB0clRhZz4ganNFbnRyeXBvaW50KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQor
ICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBqc0VudHJ5cG9pbnQoQXJpdHlDaGVja01vZGUg
YXJpdHkpCiAgICAgewogICAgICAgICBpZiAoYXJpdHkgPT0gQXJpdHlDaGVja05vdFJlcXVpcmVk
KQogICAgICAgICAgICAgcmV0dXJuIG1fanNFbnRyeXBvaW50OwpAQCAtNjgsNyArNjgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2pzRW50cnlwb2ludDsKICAgICB9CiAKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludCgpCisgICAg
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50KCkKICAgICB7CiAgICAgICAg
IGlmIChtX2pzQ2FsbEVudHJ5cG9pbnQpCiAgICAgICAgICAgICByZXR1cm4gbV9qc0NhbGxFbnRy
eXBvaW50LmNvZGUoKTsKQEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRh
YmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlw
b2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9p
bnRMb2FkTG9jYXRpb24sIFdhc206OlR5cGVJbmRleCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKKyAgICBDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7CiAgICAgcHRyZGlmZl90IHBy
ZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSBjb25zdDsKICAgICBib29sIHVzZXNUYWdSZWdpc3RlcnMo
KSBjb25zdDsKIApAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIC8vIEl0J3Mgc2FmZSB0
byBqdXN0IGhvbGQgdGhlIHJhdyBqc0VudHJ5cG9pbnQgYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJl
bmNlCiAgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3aGljaCBwb2ludHMgdG8gdGhlIE1vZHVsZSB0
aGF0IGV4cG9ydGVkIHVzLCB3aGljaAogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNp
Z25hdHVyZS9jb2RlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IG1fanNFbnRyeXBvaW50OworICAgIENvZGVQdHI8V2Fz
bUVudHJ5UHRyVGFnPiBtX2pzRW50cnlwb2ludDsKICAgICBXcml0ZUJhcnJpZXI8SlNUb1dhc21J
Q0NhbGxlZT4gbV9qc1RvV2FzbUlDQ2FsbGVlOwogICAgIC8vIFVzZWQgZm9yIEpTIGNhbGxpbmcg
aW50byBXYXNtLgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBtX2pz
Q2FsbEVudHJ5cG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJyRGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJEaXNh
c3NlbWJsZXIuY3BwCmluZGV4IDY0ZGMwNjQ4OTUyNS4uYTVhNmY2YTMzNmE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyRGlzYXNzZW1ibGVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyRGlzYXNzZW1ibGVyLmNwcApAQCAtNTgsNyAr
NTgsNyBAQCBZYXJyRGlzYXNzZW1ibGVyOjp+WWFyckRpc2Fzc2VtYmxlcigpCiAKIHZvaWQgWWFy
ckRpc2Fzc2VtYmxlcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKQogewotICAgIG1fY29kZVN0YXJ0ID0gbGlua0J1ZmZlci5lbnRyeXBvaW50PERpc2Fzc2Vt
Ymx5UHRyVGFnPigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBtX2NvZGVTdGFy
dCA9IGxpbmtCdWZmZXIuZW50cnlwb2ludDxEaXNhc3NlbWJseVB0clRhZz4oKS51bnRhZ2dlZFB0
cigpOwogICAgIG1fY29kZUVuZCA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4obV9jb2RlU3RhcnQp
ICsgbGlua0J1ZmZlci5zaXplKCk7CiAKICAgICBkdW1wSGVhZGVyKG91dCwgbGlua0J1ZmZlcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKaW5kZXggMzFmNmJmZDRiMDM4Li42ODhk
M2UxYmJhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKQEAgLTMzMyw5ICsz
MzMsOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZSgpKTsKICNpZiBDUFUo
QVJNNjRFKQogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICAgICAg
cmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50cnlUb1lhcnJKSVQoaW5wdXQsIHN0YXJ0LCBsZW5ndGgs
IG91dHB1dCwgbWF0Y2hpbmdDb250ZXh0LCByZXRhZ0NvZGVQdHI8WWFycjhCaXRQdHJUYWcsIFlh
cnJFbnRyeVB0clRhZz4obV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSkpOworICAg
ICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50cnlUb1lhcnJKSVQoaW5wdXQsIHN0YXJ0
LCBsZW5ndGgsIG91dHB1dCwgbWF0Y2hpbmdDb250ZXh0LCByZXRhZ0NvZGVQdHI8WWFycjhCaXRQ
dHJUYWcsIFlhcnJFbnRyeVB0clRhZz4obV9yZWY4LmNvZGUoKS50YWdnZWRQdHIoKSkpKTsKICNl
bmRpZgotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJ
VENvZGU4LCBZYXJyOEJpdFB0clRhZz4obV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
KShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRjaGluZ0NvbnRleHQpKTsKKyAgICAg
ICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlOCwgWWFy
cjhCaXRQdHJUYWc+KG1fcmVmOC5jb2RlKCkudGFnZ2VkUHRyKCkpKGlucHV0LCBzdGFydCwgbGVu
Z3RoLCBvdXRwdXQsIG1hdGNoaW5nQ29udGV4dCkpOwogICAgIH0KIAogICAgIE1hdGNoUmVzdWx0
IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoLCBpbnQqIG91dHB1dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQp
CkBAIC0zNDMsOSArMzQzLDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaGFzMTZCaXRDb2Rl
KCkpOwogI2lmIENQVShBUk02NEUpCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVRDYWdlKCkp
Ci0gICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodm1FbnRyeVRvWWFyckpJVChpbnB1dCwg
c3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRjaGluZ0NvbnRleHQsIHJldGFnQ29kZVB0cjxZYXJy
MTZCaXRQdHJUYWcsIFlhcnJFbnRyeVB0clRhZz4obV9yZWYxNi5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpKTsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh2bUVudHJ5VG9ZYXJy
SklUKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIG1hdGNoaW5nQ29udGV4dCwgcmV0YWdD
b2RlUHRyPFlhcnIxNkJpdFB0clRhZywgWWFyckVudHJ5UHRyVGFnPihtX3JlZjE2LmNvZGUoKS50
YWdnZWRQdHIoKSkpKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdD
RnVuY3Rpb25QdHI8WWFyckpJVENvZGUxNiwgWWFycjE2Qml0UHRyVGFnPihtX3JlZjE2LmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRj
aGluZ0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9u
UHRyPFlhcnJKSVRDb2RlMTYsIFlhcnIxNkJpdFB0clRhZz4obV9yZWYxNi5jb2RlKCkudGFnZ2Vk
UHRyKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIG1hdGNoaW5nQ29udGV4dCkpOwog
ICAgIH0KIAogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0LCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBNYXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNo
aW5nQ29udGV4dCkKQEAgLTM1Myw5ICszNTMsOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCho
YXM4Qml0Q29kZU1hdGNoT25seSgpKTsKICNpZiBDUFUoQVJNNjRFKQogICAgICAgICBpZiAoT3B0
aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50
cnlUb1lhcnJKSVQoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG51bGxwdHIsIG1hdGNoaW5nQ29udGV4
dCwgcmV0YWdDb2RlUHRyPFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnLCBZYXJyRW50cnlQdHJUYWc+
KG1fbWF0Y2hPbmx5OC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdCh2bUVudHJ5VG9ZYXJySklUKGlucHV0LCBzdGFydCwgbGVuZ3Ro
LCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQsIHJldGFnQ29kZVB0cjxZYXJyTWF0Y2hPbmx5OEJp
dFB0clRhZywgWWFyckVudHJ5UHRyVGFnPihtX21hdGNoT25seTguY29kZSgpLnRhZ2dlZFB0cigp
KSkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0
cjxZYXJySklUQ29kZU1hdGNoT25seTgsIFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnPihtX21hdGNo
T25seTguY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBu
dWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVu
dGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5OCwgWWFyck1hdGNoT25seThCaXRQ
dHJUYWc+KG1fbWF0Y2hPbmx5OC5jb2RlKCkudGFnZ2VkUHRyKCkpKGlucHV0LCBzdGFydCwgbGVu
Z3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsKICAgICB9CiAKICAgICBNYXRjaFJlc3Vs
dCBleGVjdXRlKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxl
bmd0aCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQpCkBAIC0zNjMsOSAr
MzYzLDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaGFzMTZCaXRDb2RlTWF0Y2hPbmx5KCkp
OwogI2lmIENQVShBUk02NEUpCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodm1FbnRyeVRvWWFyckpJVChpbnB1dCwgc3Rh
cnQsIGxlbmd0aCwgbnVsbHB0ciwgbWF0Y2hpbmdDb250ZXh0LCByZXRhZ0NvZGVQdHI8WWFyck1h
dGNoT25seTE2Qml0UHRyVGFnLCBZYXJyRW50cnlQdHJUYWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKSk7CisgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQo
dm1FbnRyeVRvWWFyckpJVChpbnB1dCwgc3RhcnQsIGxlbmd0aCwgbnVsbHB0ciwgbWF0Y2hpbmdD
b250ZXh0LCByZXRhZ0NvZGVQdHI8WWFyck1hdGNoT25seTE2Qml0UHRyVGFnLCBZYXJyRW50cnlQ
dHJUYWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLnRhZ2dlZFB0cigpKSkpOwogI2VuZGlmCi0gICAg
ICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZU1hdGNo
T25seTE2LCBZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBudWxscHRyLCBtYXRjaGlu
Z0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRy
PFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTYsIFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4obV9tYXRj
aE9ubHkxNi5jb2RlKCkudGFnZ2VkUHRyKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBudWxscHRy
LCBtYXRjaGluZ0NvbnRleHQpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcp
CkBAIC0zNzQsNyArMzc0LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWhhczhCaXRDb2RlTWF0
Y2hPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICByZXR1cm4gbV9tYXRj
aE9ubHk4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXR1cm4gbV9tYXRj
aE9ubHk4LmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9CiAKICAgICB2b2lkICpnZXQxNkJpdE1h
dGNoT25seUFkZHIoKQpAQCAtMzgyLDcgKzM4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFo
YXMxNkJpdENvZGVNYXRjaE9ubHkoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAg
IHJldHVybiBtX21hdGNoT25seTE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAg
ICByZXR1cm4gbV9tYXRjaE9ubHkxNi5jb2RlKCkudGFnZ2VkUHRyKCk7CiAgICAgfQogCiAgICAg
dm9pZCAqZ2V0OEJpdE1hdGNoQWRkcigpCkBAIC0zOTAsNyArMzkwLDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIWhhczhCaXRDb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAg
ICByZXR1cm4gbV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXR1
cm4gbV9yZWY4LmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9CiAKICAgICB2b2lkICpnZXQxNkJp
dE1hdGNoQWRkcigpCkBAIC0zOTgsNyArMzk4LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWhh
czE2Qml0Q29kZSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgcmV0dXJuIG1f
cmVmMTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHJldHVybiBtX3JlZjE2
LmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGU5Yjk2YTM2YTk5Li4zMWM0YWM0MmY3ODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAzLDcgKzIwMyw2
IEBACiAJCUREM0RDODdEMjdBNEJGOEUwMDdFNUI2MSAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4
MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzREM4N0UyN0E0QkY4RTAwN0U1QjYxIC8q
IEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEE0NzI2NzE1MUE4MjVBMDA0MTIzRkYgLyogQnVtcFBvaW50ZXJBbGxv
Y2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlERDNEQzg3RjI3QTRCRjhFMDA3RTVCNjEgLyogTG9nZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzdDRDg2QTFGRDlDRkQyMDA4Mjg1ODcgLyog
TG9nZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJREQzREM4ODAyN0E0QkY4RTAwN0U1QjYxIC8qIE1ldGFBbGxvY2F0b3JQdHIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNzQ5N0VEMjA5MTYzMDYw
MDAzNTY1QiAvKiBNZXRhQWxsb2NhdG9yUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzREM4ODEyN0E0QkY4RTAwN0U1QjYxIC8qIE1ldGFB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MkNFMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzREM4ODIyN0E0QkY4RTAw
N0U1QjYxIC8qIENoZWNrZWRQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlCQjkxRjUxMjY0OEVBNEQwMEE1NjIxNyAvKiBDaGVja2VkUHRyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzREM4ODMy
N0E0QkY4RTAwN0U1QjYxIC8qIE9iamVjdElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzQThBQzNEMUZBQkJFOTQwMDIwNjRBQyAvKiBP
YmplY3RJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTgxNiw2ICs4MTUsOCBAQAogCQlGRTFFMkM0MjIyNDE4N0M2MDBGNkI3Mjkg
LyogUGxhdGZvcm1SZWdpc3RlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUxRTJDNDEyMjQxODdDNjAwRjZCNzI5IC8qIFBsYXRmb3JtUmVnaXN0
ZXJzLmNwcCAqLzsgfTsKIAkJRkUzNUQwOTIyN0RDNUVDQzAwOURGQTVCIC8qIFN0YWNrQ2hlY2su
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNUQw
OTEyN0RDNUVDQzAwOURGQTVCIC8qIFN0YWNrQ2hlY2suY3BwICovOyB9OwogCQlGRTdBQ0ZFRjI4
NURDMkY5MDA3RkM4RTkgLyogUmF3SGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTdBQ0ZFRTI4NURDMkY4MDA3RkM4RTkgLyogUmF3SGV4LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU5QjhCMUEy
OEIxNDUzRDAwODhDNkUxIC8qIENvZGVQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFOUI4QjE5MjhCMTQ1M0QwMDg4QzZFMSAvKiBDb2RlUHRyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU5QjhC
MUUyOEIxQjFDNzAwODhDNkUxIC8qIENvZGVQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5QjhCMUQyOEIxQjFDNjAwODhDNkUxIC8qIENvZGVQ
dHIuY3BwICovOyB9OwogCQlGRUMyNkJGMzI4OURCQkQzMDA2MzlBNTkgLyogRnVuY3Rpb25QdHIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQzI2QkYy
Mjg5REJCRDMwMDYzOUE1OSAvKiBGdW5jdGlvblB0ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBT
dGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLzsgfTsKIAkJ
RkVFQTRERjkyMTZEN0JFNDAwQUMwNjAyIC8qIFN0YWNrUG9pbnRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUVBNERGODIxNkQ3QkU0MDBBQzA2
MDIgLyogU3RhY2tQb2ludGVyLmNwcCAqLzsgfTsKQEAgLTE3MTcsMTMgKzE3MTgsMTQgQEAKIAkJ
RkUzNUQwOTEyN0RDNUVDQzAwOURGQTVCIC8qIFN0YWNrQ2hlY2suY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMzg0MjM0MjMyNUNDODAwMDlERDQ0NSAvKiBSZXNvdXJjZVVzYWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlVXNhZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU3NDk3RTQyMDhGRkNBQTAwMDM1NjVCIC8qIFB0clRh
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdHJUYWcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU3NDk3RUQyMDkxNjMwNjAwMDM1NjVCIC8qIE1ldGFBbGxv
Y2F0b3JQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0YUFsbG9jYXRv
clB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTdBQ0ZFRTI4NURDMkY4MDA3
RkM4RTkgLyogUmF3SGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhd0hl
eC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTgyMjUzMDFCMkExRTVCMDBCQTY4
RkQgLyogTmFrZWRQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRQ
dHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU4NkE4NzQxRTU5NDQwMjAwMTEx
QkJGIC8qIEZvcmJpZEhlYXBBbGxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvcmJpZEhlYXBBbGxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFODkyNUFGMUQwMERBRUMwMDQ2OTA3RSAvKiBJbmRlbnRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmRlbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTk3RjZBODI0NUNFNUREMDBDNjNGQzYgLyogU3RkSW50RXh0cmFzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZEludEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTk5NkI1MjI0QTg0NUFGMDAxRDJFNjMgLyogRmFpbHVyZUFjdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGYWlsdXJlQWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOUI4QjE5MjhCMTQ1M0QwMDg4QzZFMSAvKiBDb2Rl
UHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQdHIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5QjhCMUQyOEIxQjFDNjAwODhDNkUxIC8qIENvZGVQ
dHIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZVB0ci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFQjZCMDM1MjAxQkUwQjYwMEI5NThDMSAv
KiBQb2ludGVyUHJlcGFyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvaW50ZXJQcmVwYXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVD
MjZCRjIyODlEQkJEMzAwNjM5QTU5IC8qIEZ1bmN0aW9uUHRyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrU3RhdHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTk1MCw2ICsxOTUyLDggQEAKIAkJCQk5QkYwMDEzNDI2N0M0Q0NG
MDBEQ0ZCM0YgLyogQ2hlY2tlZFJlZi5oICovLAogCQkJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQz
RiAvKiBDbG9ja1R5cGUuY3BwICovLAogCQkJCTBGNjZCMjgxMURDOTdCQUIwMDRBMUQzRiAvKiBD
bG9ja1R5cGUuaCAqLywKKwkJCQlGRTlCOEIxRDI4QjFCMUM2MDA4OEM2RTEgLyogQ29kZVB0ci5j
cHAgKi8sCisJCQkJRkU5QjhCMTkyOEIxNDUzRDAwODhDNkUxIC8qIENvZGVQdHIuaCAqLywKIAkJ
CQkwRkM0RURFNTE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQcmludGVyLmggKi8sCiAJCQkJRTND
Rjc2OTAyMTE1RDZCQTAwOTFERTQ4IC8qIENvbXBhY3RQb2ludGVyVHVwbGUuaCAqLywKIAkJCQlG
RkVFNDZGMzI4MjVERjgwMDAzQkM5ODEgLyogQ29tcGFjdFB0ci5oICovLApAQCAtMjExNiw3ICsy
MTIwLDYgQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvci5j
cHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuaCAq
LywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
ICovLAotCQkJCUZFNzQ5N0VEMjA5MTYzMDYwMDAzNTY1QiAvKiBNZXRhQWxsb2NhdG9yUHRyLmgg
Ki8sCiAJCQkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuY3BwICov
LAogCQkJCTBGNjZCMjgzMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggKi8sCiAJ
CQkJRkU4MjI1MzAxQjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggKi8sCkBAIC0zMDQxLDcg
KzMwNDQsNiBAQAogCQkJCUREM0RDOTI0MjdBNEJGOEUwMDdFNUI2MSAvKiBNZXNzYWdlUXVldWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RDODgxMjdBNEJGOEUwMDdFNUI2MSAvKiBNZXRhQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlERDNEQzg3MDI3QTRCRjhFMDA3RTVCNjEgLyog
TWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJREQzREM4ODAyN0E0QkY4
RTAwN0U1QjYxIC8qIE1ldGFBbGxvY2F0b3JQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCURERjMw
NkRCMjdDMDg2NTQwMDZBNTI2RiAvKiBNZXRhZGF0YVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
REQzREM5NjgyN0E0QkY4RTAwN0U1QjYxIC8qIE1vbm90b25pY1RpbWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUREM0RDOTYyMjdBNEJGOEUwMDdFNUI2MSAvKiBOYWtlZFB0ci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMTcxLDYgKzMxNzMsNyBAQAogCQkJCUREM0RDOTk1MjdBNEJGOEUwMDdFNUI2MSAv
KiBTdGFja1BvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RDOEZFMjdBNEJGOEUwMDdF
NUI2MSAvKiBTdGFja1Nob3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RDOEExMjdBNEJGOEUw
MDdFNUI2MSAvKiBTdGFja1Nob3RQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU5QjhC
MUEyOEIxNDUzRDAwODhDNkUxIC8qIENvZGVQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RD
OTdBMjdBNEJGOEUwMDdFNUI2MSAvKiBTdGFja1N0YXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlE
RDNEQzk5QzI3QTRCRjhFMDA3RTVCNjEgLyogU3RhY2tUcmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJREQzREM5NDgyN0E0QkY4RTAwN0U1QjYxIC8qIFN0ZEZpbGVzeXN0ZW0uaCBpbiBIZWFkZXJz
ICovLApAQCAtMzYyMiw2ICszNjI1LDcgQEAKIAkJCQkwRjk1QjYzMzIwQ0I0Qjc3MDA0Nzk2MzUg
LyogRGVidWdIZWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0FFMTUxQTgyNUIwMDQx
MjNGRiAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNCMDE1MUE4MjVCMDA0
MTIzRkYgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAqLywKKwkJCQlGRTlCOEIx
RTI4QjFCMUM3MDA4OEM2RTEgLyogQ29kZVB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzNCQTE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDNE
REU5NjIwQzhCQzM3MDA3Rjc2RkEgLyogRW50aXRsZW1lbnRzLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTBERTM1RjUyMTVCQjAxNTAwQjk3OUM3IC8qIEV4dGVybmFsU3RyaW5nSW1wbC5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggNWZhNjQ0Yjg3MGU3Li43NWUzZGFh
MzhhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0zMyw2ICszMyw3IEBAIHNldChXVEZfUFVC
TElDX0hFQURFUlMKICAgICBDaGVja2VkUHRyLmgKICAgICBDaGVja2VkUmVmLmgKICAgICBDbG9j
a1R5cGUuaAorICAgIENvZGVQdHIuaAogICAgIENvbW1hUHJpbnRlci5oCiAgICAgQ29tcGFjdFBv
aW50ZXJUdXBsZS5oCiAgICAgQ29tcGFjdFB0ci5oCkBAIC0xNTgsNyArMTU5LDYgQEAgc2V0KFdU
Rl9QVUJMSUNfSEVBREVSUwogICAgIE1lc3NhZ2VRdWV1ZS5oCiAgICAgTWV0YUFsbG9jYXRvci5o
CiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZS5oCi0gICAgTWV0YUFsbG9jYXRvclB0ci5oCiAgICAg
TW9ub3RvbmljVGltZS5oCiAgICAgTmFrZWRQdHIuaAogICAgIE5ha2VkUmVmLmgKQEAgLTQxNyw2
ICs0MTcsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBCaXRWZWN0b3IuY3BwCiAgICAgQ1BVVGlt
ZS5jcHAKICAgICBDbG9ja1R5cGUuY3BwCisgICAgQ29kZVB0ci5jcHAKICAgICBDb21waWxhdGlv
blRocmVhZC5jcHAKICAgICBDb25jdXJyZW50QnVmZmVyLmNwcAogICAgIENvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ29kZVB0ci5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9Db2RlUHRyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLmMwNjYwMjVjYzA0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Nv
ZGVQdHIuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0NvZGVQ
dHIuaD4KKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsK
Kwordm9pZCBDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNz
LCB2b2lkKiBkYXRhTG9jYXRpb24sIGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQp
Cit7CisgICAgaWYgKCFleGVjdXRhYmxlQWRkcmVzcykgeworICAgICAgICBvdXQucHJpbnQobmFt
ZSwgIihudWxsKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChleGVjdXRhYmxl
QWRkcmVzcyA9PSBkYXRhTG9jYXRpb24pIHsKKyAgICAgICAgb3V0LnByaW50KG5hbWUsICIoIiwg
UmF3UG9pbnRlcihleGVjdXRhYmxlQWRkcmVzcyksICIpIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgb3V0LnByaW50KG5hbWUsICIoZXhlY3V0YWJsZSA9ICIsIFJhd1BvaW50ZXIoZXhl
Y3V0YWJsZUFkZHJlc3MpLCAiLCBkYXRhTG9jYXRpb24gPSAiLCBSYXdQb2ludGVyKGRhdGFMb2Nh
dGlvbiksICIpIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvQ29kZVB0ci5oIGIvU291cmNlL1dURi93dGYvQ29kZVB0ci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmIwZDJkOTJlYmEyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvQ29kZVB0ci5oCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvRnVuY3Rpb25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL1B0clRhZy5oPgor
CituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07Cit0ZW1wbGF0ZTxQdHJUYWcg
dGFnLCB0eXBlbmFtZSwgRnVuY3Rpb25BdHRyaWJ1dGVzPiBjbGFzcyBGdW5jdGlvblB0cjsKKwor
Ly8gQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUiBjaGVja3MgdGhhdCBwdHIgaXMgYSBub24tbnVs
bCBwb2ludGVyLCBhbmQgdGhhdCBpdCBpcyBhIHZhbGlkCisvLyBpbnN0cnVjdGlvbiBhZGRyZXNz
IG9uIHRoZSBwbGF0Zm9ybSAoZm9yIGV4YW1wbGUsIGNoZWNrIGFueSBhbGlnbm1lbnQgcmVxdWly
ZW1lbnRzKS4KKyNpZiBDUFUoQVJNX1RIVU1CMikgJiYgRU5BQkxFKEpJVCkKKy8vIEFSTSBpbnN0
cnVjdGlvbnMgbXVzdCBiZSAxNi1iaXQgYWxpZ25lZC4gVGh1bWIyIGNvZGUgcG9pbnRlcnMgdG8g
YmUgbG9hZGVkIGludG8KKy8vIGludG8gdGhlIHByb2Nlc3NvciBhcmUgZGVjb3JhdGVkIHdpdGgg
dGhlIGJvdHRvbSBiaXQgc2V0LCB3aGlsZSB0cmFkaXRpb25hbCBBUk0gaGFzCisvLyB0aGUgbG93
ZXIgYml0IGNsZWFyLiBTaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQga2luZCBvZiBwb2ludGVyLCB3
ZSBjaGVjayBmb3IgYm90aAorLy8gZGVjb3JhdGVkIGFuZCB1bmRlY29yYXRlZCBudWxsLgorI2Rl
ZmluZSBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgXAorICAgIEFTU0VSVChyZWludGVy
cHJldF9jYXN0PGludHB0cl90PihwdHIpICYgfjEpCisjZWxzZQorI2RlZmluZSBBU1NFUlRfVkFM
SURfQ09ERV9QT0lOVEVSKHB0cikgXAorICAgIEFTU0VSVChwdHIpCisjZW5kaWYKKworc3RydWN0
IENvZGVQdHJCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBXZSBuZWVkIHRvIGRlY2xhcmUgdGhpcyBp
biB0aGlzIG5vbi10ZW1wbGF0ZSBiYXNlLiBPdGhlcndpc2UsIGV2ZXJ5IHVzZSBvZgorICAgIC8v
IEFscmVhZHlUYWdnZWRWYWx1ZVRhZyB3aWxsIHJlcXVpcmUgYSBzcGVjaWFsaXplZCB0ZW1wbGF0
ZSBxdWFsaWZpY2F0aW9uLgorICAgIGVudW0gQWxyZWFkeVRhZ2dlZFZhbHVlVGFnIHsgQWxyZWFk
eVRhZ2dlZFZhbHVlIH07CisKKyAgICBzdGF0aWMgdm9pZCBkdW1wV2l0aE5hbWUodm9pZCogZXhl
Y3V0YWJsZUFkZHJlc3MsIHZvaWQqIGRhdGFMb2NhdGlvbiwgY29uc3QgY2hhciogbmFtZSwgUHJp
bnRTdHJlYW0mIG91dCk7Cit9OworCit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCBGdW5jdGlvbkF0dHJp
YnV0ZXMgYXR0ciA9IEZ1bmN0aW9uQXR0cmlidXRlczo6Tm9uZT4KK2NsYXNzIENvZGVQdHIgOiBw
dWJsaWMgQ29kZVB0ckJhc2UgeworICAgIHVzaW5nIEJhc2UgPSBDb2RlUHRyQmFzZTsKK3B1Ymxp
YzoKKyAgICB1c2luZyBVbnR5cGVkRnVuYyA9IHZvaWQoKikoKTsKKworICAgIENvZGVQdHIoKSA9
IGRlZmF1bHQ7CisgICAgQ29kZVB0cihzdGQ6Om51bGxwdHJfdCkgOiBtX3ZhbHVlKG51bGxwdHIp
IHsgfQorCisgICAgZXhwbGljaXQgQ29kZVB0cih2b2lkKiB2YWx1ZSkKKyNpZiBDUFUoQVJNX1RI
VU1CMikKKyAgICAgICAgLy8gRGVjb3JhdGUgdGhlIHBvaW50ZXIgYXMgYSB0aHVtYiBjb2RlIHBv
aW50ZXIuCisgICAgICAgIDogbV92YWx1ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2
YWx1ZSkgKyAxKQorI2Vsc2UKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorI2VuZGlmCisgICAg
eworICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8dGFnPih2YWx1ZSk7CisgICAgICAgIEFTU0VS
VCh2YWx1ZSk7CisjaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkgJiAxKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJU
X1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluPgorICAgIGNvbnN0ZXhwciBDb2RlUHRyKE91dCgqcHRy
KShJbi4uLikpCisgICAgICAgIDogbV92YWx1ZShlbmNvZGVGdW5jKHB0cikpCisgICAgeyB9CisK
Ky8vIE1TVkMgZG9lc24ndCBzZWVtIHRvIHRyZWF0IGZ1bmN0aW9ucyB3aXRoIGRpZmZlcmVudCBj
YWxsaW5nIGNvbnZlbnRpb25zIGFzCisvLyBkaWZmZXJlbnQgdHlwZXM7IHRoZXNlIG1ldGhvZHMg
YWxyZWFkeSBkZWZpbmVkIGZvciBmYXN0Y2FsbCwgYmVsb3cuCisjaWYgQ0FMTElOR19DT05WRU5U
SU9OX0lTX1NURENBTEwgJiYgIU9TKFdJTkRPV1MpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0
LCB0eXBlbmFtZS4uLiBJbj4KKyAgICBjb25zdGV4cHIgQ29kZVB0cihPdXQoQ0RFQ0wgKnB0ciko
SW4uLi4pKQorICAgICAgICA6IG1fdmFsdWUoZW5jb2RlRnVuYyhwdHIpKQorICAgIHsgfQorI2Vu
ZGlmCisKKyNpZiBDT01QSUxFUl9TVVBQT1JUUyhGQVNUQ0FMTF9DQUxMSU5HX0NPTlZFTlRJT04p
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbj4KKyAgICBjb25zdGV4
cHIgQ29kZVB0cihPdXQoRkFTVENBTEwgKnB0cikoSW4uLi4pKQorICAgICAgICA6IG1fdmFsdWUo
ZW5jb2RlRnVuYyhwdHIpKQorICAgIHsgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoSklUKQorICAg
IC8vIFRoZXNlIDIgY29uc3RydWN0b3JzIGlnbm9yZXMgdGhlIEZ1bmN0aW9uQXR0cmlidXRlcyBv
ZiB0aGUgRnVuY3Rpb25QdHIgcGFyYW1ldGVyIHdoZW4KKyAgICAvLyBjcmVhdGluZyB0aGUgRnVu
Y3Rpb25QdHIuIEluIGdlbmVyYWwsIHRoaXMgY2FuIGJlIGEgcHJvYmxlbSBvbiB4ODYgcG9ydHMg
KGVzcGVjaWFsbHkgZm9yCisgICAgLy8gV2luZG93cykuIEhvd2V2ZXIsIHRoZXNlIGNvbnN0cnVj
dG9ycyBhcmUgb25seSB1c2VkIGluIFJlcGF0Y2guY3BwIGZvciBFTkFCTEUoSklUKS4KKyAgICAv
LyBTaW5jZSB3ZSBubyBsb25nZXIgc3VwcG9ydCBFTkFCTEUoSklUKSBmb3IgeDg2LCB0aGlzIGlz
IG5vdCByZWFsbHkgYW4gaXNzdWUuCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXQsIHR5cGVu
YW1lLi4uIEluLCBGdW5jdGlvbkF0dHJpYnV0ZXMgb3RoZXJBdHRyPgorICAgIENvZGVQdHIoY29u
c3QgRnVuY3Rpb25QdHI8dGFnLCBPdXQoSW4uLi4pLCBvdGhlckF0dHI+JiBvdGhlcikKKyAgICAg
ICAgOiBDb2RlUHRyKEFscmVhZHlUYWdnZWRWYWx1ZSwgb3RoZXIudGFnZ2VkUHRyKCkpCisgICAg
eyB9CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJUYWcsIHR5cGVuYW1lIE91dCwgdHlwZW5h
bWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRlcyBvdGhlckF0dHI+CisgICAgQ29kZVB0cihjb25z
dCBGdW5jdGlvblB0cjxvdGhlclRhZywgT3V0KEluLi4uKSwgb3RoZXJBdHRyPiYgb3RoZXIpCisg
ICAgICAgIDogQ29kZVB0cihBbHJlYWR5VGFnZ2VkVmFsdWUsIG90aGVyLnRlbXBsYXRlIHJldGFn
Z2VkUHRyPHRhZz4oKSkKKyAgICB7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIENvZGVQdHIgZnJv
bVRhZ2dlZFB0cih2b2lkKiBwdHIpCisgICAgeworICAgICAgICBBU1NFUlQocHRyKTsKKyAgICAg
ICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihwdHIpOworICAgICAgICBhc3NlcnRJc1RhZ2dl
ZFdpdGg8dGFnPihwdHIpOworICAgICAgICByZXR1cm4gQ29kZVB0cihBbHJlYWR5VGFnZ2VkVmFs
dWUsIHB0cik7CisgICAgfQorCisgICAgc3RhdGljIENvZGVQdHIgZnJvbVVudGFnZ2VkUHRyKHZv
aWQqIHB0cikKKyAgICB7CisgICAgICAgIEFTU0VSVChwdHIpOworICAgICAgICBBU1NFUlRfVkFM
SURfQ09ERV9QT0lOVEVSKHB0cik7CisgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHB0cik7Cisg
ICAgICAgIHJldHVybiBDb2RlUHRyKEFscmVhZHlUYWdnZWRWYWx1ZSwgdGFnQ29kZVB0cjx0YWc+
KHB0cikpOworICAgIH0KKworICAgIHRlbXBsYXRlPFB0clRhZyBuZXdUYWc+CisgICAgQ29kZVB0
cjxuZXdUYWcsIGF0dHI+IHJldGFnZ2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV92
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBDb2RlUHRyPG5ld1RhZywgYXR0cj4oKTsKKyAgICAg
ICAgcmV0dXJuIENvZGVQdHI8bmV3VGFnLCBhdHRyPihBbHJlYWR5VGFnZ2VkVmFsdWUsIHJldGFn
Z2VkUHRyPG5ld1RhZz4oKSk7CisgICAgfQorCisgICAgY29uc3RleHByIFVudHlwZWRGdW5jIHVu
dHlwZWRGdW5jKCkgY29uc3QgeyByZXR1cm4gZGVjb2RlRnVuYyhtX3ZhbHVlKTsgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQgdGFnZ2VkUHRyKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4obV92YWx1ZSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQgdW50YWdnZWRQdHIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVudGFnQ29kZVB0cjxULCB0YWc+KG1fdmFsdWUpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPFB0clRhZyBuZXdUYWcsIHR5cGVuYW1lIFQgPSB2b2lkKj4K
KyAgICBUIHJldGFnZ2VkUHRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZXRhZ0Nv
ZGVQdHI8VCwgdGFnLCBuZXdUYWc+KG1fdmFsdWUpOworICAgIH0KKworI2lmIENQVShBUk1fVEhV
TUIyKQorICAgIC8vIFRvIHVzZSB0aGlzIHBvaW50ZXIgYXMgYSBkYXRhIGFkZHJlc3MgcmVtb3Zl
IHRoZSBkZWNvcmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KKyAgICBU
IGRhdGFMb2NhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9Q
T0lOVEVSKG1fdmFsdWUpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KG1fdmFsdWUg
PyBiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1fdmFsdWUpIC0gMSA6IG51bGxwdHIpOworICAgIH0KKyNl
bHNlCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQgZGF0YUxvY2F0aW9u
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1
ZSk7CisgICAgICAgIHJldHVybiB1bnRhZ0NvZGVQdHI8VCwgdGFnPihtX3ZhbHVlKTsKKyAgICB9
CisjZW5kaWYKKworICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhbV92YWx1ZTsKKyAgICB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICEoISp0aGlzKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
b2RlUHRyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90
aGVyLm1fdmFsdWU7CisgICAgfQorCisgICAgLy8gRGlzYWxsb3cgYW55IGNhc3Rpbmcgb3BlcmF0
aW9ucyAoZXhjZXB0IGZvciBib29sZWFucykuIEluc3RlYWQsIHRoZSBjbGllbnQKKyAgICAvLyBz
aG91bGQgYmUgYXNraW5nIHRhZ2dlZFB0cigpIGV4cGxpY2l0bHkuCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgYm9v
bD46OnZhbHVlPj4KKyAgICBvcGVyYXRvciBUKCkgPSBkZWxldGU7CisKKyAgICBDb2RlUHRyIG9w
ZXJhdG9yKyhzaXplX3Qgc2l6ZUluQnl0ZXMpIGNvbnN0IHsgcmV0dXJuIENvZGVQdHI6OmZyb21V
bnRhZ2dlZFB0cih1bnRhZ2dlZFB0cjx1aW50OF90Kj4oKSArIHNpemVJbkJ5dGVzKTsgfQorICAg
IENvZGVQdHIgb3BlcmF0b3ItKHNpemVfdCBzaXplSW5CeXRlcykgY29uc3QgeyByZXR1cm4gQ29k
ZVB0cjo6ZnJvbVVudGFnZ2VkUHRyKHVudGFnZ2VkUHRyPHVpbnQ4X3QqPigpIC0gc2l6ZUluQnl0
ZXMpOyB9CisKKyAgICBDb2RlUHRyJiBvcGVyYXRvcis9KHNpemVfdCBzaXplSW5CeXRlcykgeyBy
ZXR1cm4gKnRoaXMgPSAqdGhpcyArIHNpemVJbkJ5dGVzOyB9CisgICAgQ29kZVB0ciYgb3BlcmF0
b3ItPShzaXplX3Qgc2l6ZUluQnl0ZXMpIHsgcmV0dXJuICp0aGlzID0gKnRoaXMgLSBzaXplSW5C
eXRlczsgfQorCisgICAgdm9pZCBkdW1wV2l0aE5hbWUoY29uc3QgY2hhciogbmFtZSwgUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAg
ICAgQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZSh0YWdnZWRQdHIoKSwgZGF0YUxvY2F0aW9uKCks
IG5hbWUsIG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIENvZGVQdHJCYXNlOjpkdW1w
V2l0aE5hbWUobnVsbHB0ciwgbnVsbHB0ciwgbmFtZSwgb3V0KTsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QgeyBkdW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBv
dXQpOyB9CisKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51
bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICAKKyAgICBDb2RlUHRyKEVt
cHR5VmFsdWVUYWcpCisgICAgICAgIDogbV92YWx1ZShlbXB0eVZhbHVlKCkpCisgICAgeyB9Cisg
ICAgCisgICAgQ29kZVB0cihEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV92YWx1ZShkZWxl
dGVkVmFsdWUoKSkKKyAgICB7IH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWUgPT0gZW1wdHlWYWx1ZSgpOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gZGVsZXRlZFZhbHVlKCk7IH0KKworICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBQdHJIYXNoPHZvaWQqPjo6aGFzaChtX3Zh
bHVlKTsgfQorCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOworCitwcml2YXRlOgorICAg
IENvZGVQdHIoQWxyZWFkeVRhZ2dlZFZhbHVlVGFnLCB2b2lkKiBwdHIpCisgICAgICAgIDogbV92
YWx1ZShwdHIpCisgICAgeworICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8dGFnPihwdHIpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBlbXB0eVZhbHVlKCkgeyByZXR1cm4gYml0d2lzZV9j
YXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOyB9CisgICAgc3RhdGljIHZvaWQq
IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KDIpKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY1B0cj4KKyAgICBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdm9pZCogZW5jb2RlRnVuYyhGdW5jUHRyIHB0
cikKKyAgICB7CisgICAgICAgIC8vIE5vdGU6IHdlIGNhbm5vdCBkbyB0aGUgYXNzZXJ0IGJlZm9y
ZSB0aGlzIGNoZWNrIGJlY2F1c2UgaXQgd2lsbCBkaXNxdWFsaWZ5CisgICAgICAgIC8vIHRoaXMg
ZnVuY3Rpb24gZm9yIHVzZSBpbiBhbiBjb25zdGV4cHIgY29udGV4dCBmb3Igc29tZSB1c2UgY2Fz
ZXMuCisgICAgICAgIGlmIGNvbnN0ZXhwciAodGFnID09IENGdW5jdGlvblB0clRhZykKKyAgICAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihwdHIpOworICAgICAgICBhc3Nl
cnRJc051bGxPckNGdW5jdGlvblB0cihwdHIpOworICAgICAgICByZXR1cm4gcmV0YWdDb2RlUHRy
PHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIHRhZz4ocHRyKTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgVW50eXBlZEZ1bmMgZGVjb2RlRnVuYyh2b2lkKiBwdHIp
CisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKHRhZyA9PSBDRnVuY3Rpb25QdHJUYWcpCisg
ICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxVbnR5cGVkRnVuYz4ocHRyKTsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSByZXRhZ0NvZGVQdHI8VW50eXBlZEZ1bmMsIHRhZywgQ0Z1bmN0
aW9uUHRyVGFnPihwdHIpOworICAgICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0cihyZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQqIG1fdmFsdWUg
eyBudWxscHRyIH07CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcsIEZ1bmN0aW9uQXR0cmlidXRlcz4g
ZnJpZW5kIGNsYXNzIENvZGVQdHI7Cit9OworCit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCBGdW5jdGlv
bkF0dHJpYnV0ZXMgYXR0cj4KK3N0cnVjdCBDb2RlUHRySGFzaCB7CisgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgQ29kZVB0cjx0YWcsIGF0dHI+JiBwdHIpIHsgcmV0dXJuIHB0ci5oYXNo
KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb2RlUHRyPHRhZywgYXR0cj4mIGEs
IGNvbnN0IENvZGVQdHI8dGFnLCBhdHRyPiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09
IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCBGdW5jdGlvbkF0dHJpYnV0ZXMgYXR0cj4K
K3N0cnVjdCBEZWZhdWx0SGFzaDxDb2RlUHRyPHRhZywgYXR0cj4+IDogQ29kZVB0ckhhc2g8dGFn
LCBhdHRyPiB7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwor
dGVtcGxhdGU8UHRyVGFnIHRhZywgRnVuY3Rpb25BdHRyaWJ1dGVzIGF0dHI+CitzdHJ1Y3QgSGFz
aFRyYWl0czxDb2RlUHRyPHRhZywgYXR0cj4+IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8Q29k
ZVB0cjx0YWcsIGF0dHI+PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OkNvZGVQdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GdW5jdGlvblB0ci5oIGIvU291
cmNlL1dURi93dGYvRnVuY3Rpb25QdHIuaAppbmRleCAyNjYwMDgwMGFhMDUuLjU4NDE5OGEzZTJl
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRnVuY3Rpb25QdHIuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9GdW5jdGlvblB0ci5oCkBAIC00NSw3ICs0NSw3IEBAIGVudW0gY2xhc3MgRnVuY3Rp
b25BdHRyaWJ1dGVzIHsKICAgICBKU0NIb3N0Q2FsbCwgLy8gSlNDX0hPU1RfQ0FMTF9BVFRSSUJV
VEVTCiB9OwogCi10ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSwgRnVuY3Rpb25BdHRyaWJ1
dGVzID0gRnVuY3Rpb25BdHRyaWJ1dGVzOjpOb25lPiBjbGFzcyBUeXBlZEZ1bmN0aW9uUHRyOwor
dGVtcGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUsIEZ1bmN0aW9uQXR0cmlidXRlcyA9IEZ1bmN0
aW9uQXR0cmlidXRlczo6Tm9uZT4gY2xhc3MgRnVuY3Rpb25QdHI7CiAKIHRlbXBsYXRlPEZ1bmN0
aW9uQXR0cmlidXRlcywgdHlwZW5hbWU+IHN0cnVjdCBGdW5jdGlvbkNhbGxDb252ZW50aW9uOwog
CkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBGdW5jdGlvbkNhbGxDb252ZW50aW9uPEZ1bmN0aW9u
QXR0cmlidXRlczo6SlNDSG9zdENhbGwsIE91dChJbi4uLik+IHsKIH07CiAKIAotY2xhc3MgVHlw
ZWRGdW5jdGlvblB0ckJhc2UgeworY2xhc3MgRnVuY3Rpb25QdHJCYXNlIHsKIHB1YmxpYzoKICAg
ICAvLyBXZSBuZWVkIHRvIGRlY2xhcmUgdGhpcyBpbiB0aGlzIG5vbi10ZW1wbGF0ZSBiYXNlLiBP
dGhlcndpc2UsIGV2ZXJ5IHVzZSBvZgogICAgIC8vIEFscmVhZHlUYWdnZWRWYWx1ZVRhZyB3aWxs
IHJlcXVpcmUgYSBzcGVjaWFsaXplZCB0ZW1wbGF0ZSBxdWFsaWZpY2F0aW9uLgpAQCAtNzMsMjcg
KzczLDI3IEBAIHB1YmxpYzoKIH07CiAKIHRlbXBsYXRlPFB0clRhZyB0YWcsIHR5cGVuYW1lIE91
dCwgdHlwZW5hbWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRlcyBhdHRyPgotY2xhc3MgVHlwZWRG
dW5jdGlvblB0cjx0YWcsIE91dChJbi4uLiksIGF0dHI+IDogcHVibGljIFR5cGVkRnVuY3Rpb25Q
dHJCYXNlIHsKK2NsYXNzIEZ1bmN0aW9uUHRyPHRhZywgT3V0KEluLi4uKSwgYXR0cj4gOiBwdWJs
aWMgRnVuY3Rpb25QdHJCYXNlIHsKIHB1YmxpYzoKICAgICB1c2luZyBQdHIgPSB0eXBlbmFtZSBG
dW5jdGlvbkNhbGxDb252ZW50aW9uPGF0dHIsIE91dChJbi4uLik+OjpUeXBlOwogCi0gICAgY29u
c3RleHByIFR5cGVkRnVuY3Rpb25QdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQotICAgIGNvbnN0
ZXhwciBUeXBlZEZ1bmN0aW9uUHRyKHN0ZDo6bnVsbHB0cl90KSA6IG1fcHRyKG51bGxwdHIpIHsg
fQorICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cigpIDogbV9wdHIobnVsbHB0cikgeyB9CisgICAg
Y29uc3RleHByIEZ1bmN0aW9uUHRyKHN0ZDo6bnVsbHB0cl90KSA6IG1fcHRyKG51bGxwdHIpIHsg
fQogCi0gICAgY29uc3RleHByIFR5cGVkRnVuY3Rpb25QdHIoT3V0KCpwdHIpKEluLi4uKSkKKyAg
ICBjb25zdGV4cHIgRnVuY3Rpb25QdHIoT3V0KCpwdHIpKEluLi4uKSkKICAgICAgICAgOiBtX3B0
cihlbmNvZGUocHRyKSkKICAgICB7IH0KIAogLy8gTVNWQyBkb2Vzbid0IHNlZW0gdG8gdHJlYXQg
ZnVuY3Rpb25zIHdpdGggZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnMgYXMKIC8vIGRpZmZl
cmVudCB0eXBlczsgdGhlc2UgbWV0aG9kcyBhbHJlYWR5IGRlZmluZWQgZm9yIGZhc3RjYWxsLCBi
ZWxvdy4KICNpZiBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTCAmJiAhT1MoV0lORE9XUykK
LSAgICBjb25zdGV4cHIgVHlwZWRGdW5jdGlvblB0cihPdXQoQ0RFQ0wgKnB0cikoSW4uLi4pKQor
ICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cihPdXQoQ0RFQ0wgKnB0cikoSW4uLi4pKQogICAgICAg
ICA6IG1fcHRyKGVuY29kZShwdHIpKQogICAgIHsgfQogI2VuZGlmCiAKICNpZiBDT01QSUxFUl9T
VVBQT1JUUyhGQVNUQ0FMTF9DQUxMSU5HX0NPTlZFTlRJT04pCi0gICAgY29uc3RleHByIFR5cGVk
RnVuY3Rpb25QdHIoT3V0KEZBU1RDQUxMICpwdHIpKEluLi4uKSkKKyAgICBjb25zdGV4cHIgRnVu
Y3Rpb25QdHIoT3V0KEZBU1RDQUxMICpwdHIpKEluLi4uKSkKICAgICAgICAgOiBtX3B0cihlbmNv
ZGUocHRyKSkKICAgICB7IH0KICNlbmRpZgpAQCAtMTA3LDUwICsxMDcsNTAgQEAgcHVibGljOgog
ICAgIGNvbnN0ZXhwciBQdHIgZ2V0KCkgY29uc3QgeyByZXR1cm4gZGVjb2RlKG1fcHRyKTsgfQog
CiAgICAgdGVtcGxhdGU8UHRyVGFnIG90aGVyVGFnPgotICAgIFR5cGVkRnVuY3Rpb25QdHI8b3Ro
ZXJUYWcsIE91dChJbi4uLiksIGF0dHI+IHJldGFnZ2VkKCkgY29uc3QKKyAgICBGdW5jdGlvblB0
cjxvdGhlclRhZywgT3V0KEluLi4uKSwgYXR0cj4gcmV0YWdnZWQoKSBjb25zdAogICAgIHsKICAg
ICAgICAgc3RhdGljX2Fzc2VydCh0YWcgIT0gb3RoZXJUYWcpOwotICAgICAgICByZXR1cm4gVHlw
ZWRGdW5jdGlvblB0cjxvdGhlclRhZywgT3V0KEluLi4uKSwgYXR0cj4oQWxyZWFkeVRhZ2dlZFZh
bHVlLCByZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPG90aGVyVGFnPigpKTsKKyAgICAgICAgcmV0
dXJuIEZ1bmN0aW9uUHRyPG90aGVyVGFnLCBPdXQoSW4uLi4pLCBhdHRyPihBbHJlYWR5VGFnZ2Vk
VmFsdWUsIHJldGFnZ2VkUHRyPG90aGVyVGFnPigpKTsKICAgICB9CiAKLSAgICBjb25zdGV4cHIg
dm9pZCogZXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihtX3B0cik7IH0KKyAgICBjb25zdGV4cHIgdm9pZCogdGFnZ2VkUHRyKCkgY29uc3Qg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9wdHIpOyB9CiAKICAgICB0ZW1wbGF0
ZTxQdHJUYWcgbmV3VGFnPgotICAgIHZvaWQqIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSBj
b25zdAorICAgIHZvaWQqIHJldGFnZ2VkUHRyKCkgY29uc3QKICAgICB7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQodGFnICE9IG5ld1RhZyk7CiAgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8dm9p
ZCosIHRhZywgbmV3VGFnPihtX3B0cik7CiAgICAgfQogCi0gICAgdm9pZCogdW50YWdnZWRFeGVj
dXRhYmxlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIHVudGFnQ29kZVB0cjx2b2lkKiwgdGFnPiht
X3B0cik7IH0KKyAgICB2b2lkKiB1bnRhZ2dlZFB0cigpIGNvbnN0IHsgcmV0dXJuIHVudGFnQ29k
ZVB0cjx2b2lkKiwgdGFnPihtX3B0cik7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fcHRyOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhbV9wdHI7IH0KIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUeXBlZEZ1bmN0
aW9uUHRyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0gb3RoZXIubV9wdHI7IH0KLSAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgVHlwZWRGdW5jdGlvblB0ciYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIG1fcHRyICE9IG90aGVyLm1fcHRyOyB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZ1bmN0aW9uUHRyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0gb3RoZXIubV9wdHI7
IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX3B0ciAhPSBvdGhlci5tX3B0cjsgfQogCi0gICAgVHlwZWRGdW5jdGlvblB0ciYg
b3BlcmF0b3I9KFB0ciBwdHIpCisgICAgRnVuY3Rpb25QdHImIG9wZXJhdG9yPShQdHIgcHRyKQog
ICAgIHsKICAgICAgICAgbV9wdHIgPSBlbmNvZGUocHRyKTsKICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRhZz4KLSAgICBUeXBlZEZ1bmN0
aW9uUHRyJiBvcGVyYXRvcj0oY29uc3QgVHlwZWRGdW5jdGlvblB0cjxvdGhlclRhZywgT3V0KElu
Li4uKSwgYXR0cj4mIG90aGVyKQorICAgIEZ1bmN0aW9uUHRyJiBvcGVyYXRvcj0oY29uc3QgRnVu
Y3Rpb25QdHI8b3RoZXJUYWcsIE91dChJbi4uLiksIGF0dHI+JiBvdGhlcikKICAgICB7CiAgICAg
ICAgIG1fcHRyID0gZW5jb2RlKG90aGVyLmdldCgpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIH0KIAotICAgIFR5cGVkRnVuY3Rpb25QdHImIG9wZXJhdG9yPShzdGQ6Om51bGxwdHJfdCkK
KyAgICBGdW5jdGlvblB0ciYgb3BlcmF0b3I9KHN0ZDo6bnVsbHB0cl90KQogICAgIHsKICAgICAg
ICAgbV9wdHIgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiBwcm90
ZWN0ZWQ6Ci0gICAgVHlwZWRGdW5jdGlvblB0cihBbHJlYWR5VGFnZ2VkVmFsdWVUYWcsIHZvaWQq
IHB0cikKKyAgICBGdW5jdGlvblB0cihBbHJlYWR5VGFnZ2VkVmFsdWVUYWcsIHZvaWQqIHB0cikK
ICAgICAgICAgOiBtX3B0cihiaXR3aXNlX2Nhc3Q8UHRyPihwdHIpKQogICAgIHsKICAgICAgICAg
YXNzZXJ0SXNOdWxsT3JUYWdnZWRXaXRoPHRhZz4ocHRyKTsKQEAgLTE3NywxMDEgKzE3NywyNSBA
QCBwcm90ZWN0ZWQ6CiAKICAgICBQdHIgbV9wdHI7CiAKLSAgICB0ZW1wbGF0ZTxQdHJUYWcsIHR5
cGVuYW1lLCBGdW5jdGlvbkF0dHJpYnV0ZXM+IGZyaWVuZCBjbGFzcyBUeXBlZEZ1bmN0aW9uUHRy
OworICAgIHRlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUsIEZ1bmN0aW9uQXR0cmlidXRlcz4gZnJp
ZW5kIGNsYXNzIEZ1bmN0aW9uUHRyOwogfTsKIAotc3RhdGljX2Fzc2VydChzaXplb2YoVHlwZWRG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWcsIHZvaWQoKT4pID09IHNpemVvZih2b2lkKikpOwor
c3RhdGljX2Fzc2VydChzaXplb2YoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnLCB2b2lkKCk+
KSA9PSBzaXplb2Yodm9pZCopKTsKICNpZiBDT01QSUxFUl9TVVBQT1JUUyhCVUlMVElOX0lTX1RS
SVZJQUxMWV9DT1BZQUJMRSkKLXN0YXRpY19hc3NlcnQoX19pc190cml2aWFsbHlfY29weWFibGUo
VHlwZWRGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWcsIHZvaWQoKT4pKTsKK3N0YXRpY19hc3Nl
cnQoX19pc190cml2aWFsbHlfY29weWFibGUoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnLCB2
b2lkKCk+KSk7CiAjZW5kaWYKIAotCi10ZW1wbGF0ZTxQdHJUYWcgdGFnLCBGdW5jdGlvbkF0dHJp
YnV0ZXMgYXR0ciA9IEZ1bmN0aW9uQXR0cmlidXRlczo6Tm9uZT4KLWNsYXNzIEZ1bmN0aW9uUHRy
IDogcHVibGljIFR5cGVkRnVuY3Rpb25QdHI8dGFnLCB2b2lkKCksIGF0dHI+IHsKLSAgICB1c2lu
ZyBCYXNlID0gVHlwZWRGdW5jdGlvblB0cjx0YWcsIHZvaWQoKT47Ci0gICAgdXNpbmcgUHRyVHlw
ZSA9IHZvaWQoKikoKTsKLSAgICB1c2luZyBUeXBlZEZ1bmN0aW9uUHRyQmFzZTo6QWxyZWFkeVRh
Z2dlZFZhbHVlOwotcHVibGljOgotICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cigpID0gZGVmYXVs
dDsKLSAgICBjb25zdGV4cHIgRnVuY3Rpb25QdHIoc3RkOjpudWxscHRyX3QpIDogQmFzZShudWxs
cHRyKSB7IH0KLQotICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cih2b2lkKiBwdHIpCi0gICAgICAg
IDogQmFzZShyZWludGVycHJldF9jYXN0PFB0clR5cGU+KHB0cikpCi0gICAgeyB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluPgotICAgIGNvbnN0ZXhwciBGdW5j
dGlvblB0cihPdXQoKnB0cikoSW4uLi4pKQotICAgICAgICA6IEJhc2UocmVpbnRlcnByZXRfY2Fz
dDxQdHJUeXBlPihwdHIpKQotICAgIHsgfQotCi0vLyBNU1ZDIGRvZXNuJ3Qgc2VlbSB0byB0cmVh
dCBmdW5jdGlvbnMgd2l0aCBkaWZmZXJlbnQgY2FsbGluZyBjb252ZW50aW9ucyBhcwotLy8gZGlm
ZmVyZW50IHR5cGVzOyB0aGVzZSBtZXRob2RzIGFscmVhZHkgZGVmaW5lZCBmb3IgZmFzdGNhbGws
IGJlbG93LgotI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMICYmICFPUyhXSU5ET1dT
KQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE91dCwgdHlwZW5hbWUuLi4gSW4+Ci0gICAgY29uc3Rl
eHByIEZ1bmN0aW9uUHRyKE91dChDREVDTCAqcHRyKShJbi4uLikpCi0gICAgICAgIDogQmFzZShy
ZWludGVycHJldF9jYXN0PFB0clR5cGU+KHB0cikpCi0gICAgeyB9Ci0jZW5kaWYKLQotI2lmIENP
TVBJTEVSX1NVUFBPUlRTKEZBU1RDQUxMX0NBTExJTkdfQ09OVkVOVElPTikKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluPgotICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0
cihPdXQoRkFTVENBTEwgKnB0cikoSW4uLi4pKQotICAgICAgICA6IEJhc2UocmVpbnRlcnByZXRf
Y2FzdDxQdHJUeXBlPihwdHIpKQotICAgIHsgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoSklUKQot
ICAgIC8vIFRoZXNlIDIgY29uc3RydWN0b3JzIGlnbm9yZXMgdGhlIEZ1bmN0aW9uQXR0cmlidXRl
cyBvZiB0aGUgVHlwZWRGdW5jdGlvblB0ciBwYXJhbWV0ZXIgd2hlbgotICAgIC8vIGNyZWF0aW5n
IHRoZSBGdW5jdGlvblB0ci4gSW4gZ2VuZXJhbCwgdGhpcyBjYW4gYmUgYSBwcm9ibGVtIG9uIHg4
NiBwb3J0cyAoZXNwZWNpYWxseSBmb3IKLSAgICAvLyBXaW5kb3dzKS4gSG93ZXZlciwgdGhlc2Ug
Y29uc3RydWN0b3JzIGFyZSBvbmx5IHVzZWQgaW4gUmVwYXRjaC5jcHAgZm9yIEVOQUJMRShKSVQp
LgotICAgIC8vIFNpbmNlIHdlIG5vIGxvbmdlciBzdXBwb3J0IEVOQUJMRShKSVQpIGZvciB4ODYs
IHRoaXMgaXMgbm90IHJlYWxseSBhbiBpc3N1ZS4KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE91
dCwgdHlwZW5hbWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRlcyBvdGhlckF0dHI+Ci0gICAgRnVu
Y3Rpb25QdHIoY29uc3QgVHlwZWRGdW5jdGlvblB0cjx0YWcsIE91dChJbi4uLiksIG90aGVyQXR0
cj4mIG90aGVyKQotICAgICAgICA6IEJhc2UoQWxyZWFkeVRhZ2dlZFZhbHVlLCBvdGhlci5leGVj
dXRhYmxlQWRkcmVzcygpKQotICAgIHsgfQotCi0gICAgdGVtcGxhdGU8UHRyVGFnIG90aGVyVGFn
LCB0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluLCBGdW5jdGlvbkF0dHJpYnV0ZXMgb3RoZXJB
dHRyPgotICAgIEZ1bmN0aW9uUHRyKGNvbnN0IFR5cGVkRnVuY3Rpb25QdHI8b3RoZXJUYWcsIE91
dChJbi4uLiksIG90aGVyQXR0cj4mIG90aGVyKQotICAgICAgICA6IEJhc2UoQWxyZWFkeVRhZ2dl
ZFZhbHVlLCBvdGhlci50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPHRhZz4oKSkK
LSAgICB7IH0KLSNlbmRpZgotCi0gICAgc3RhdGljIEZ1bmN0aW9uUHRyIGZyb21BbHJlYWR5VGFn
Z2VkUG9pbnRlcih2b2lkKiBwdHIpCi0gICAgewotICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8
dGFnPihwdHIpOwotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIoQWxyZWFkeVRhZ2dlZFZhbHVl
LCBwdHIpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRhZz4KLSAgICBGdW5j
dGlvblB0cjxvdGhlclRhZz4gcmV0YWdnZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uUHRyPG90aGVyVGFnPihBbHJlYWR5VGFnZ2VkVmFsdWUsIEJhc2U6OnRlbXBsYXRl
IHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8b3RoZXJUYWc+KCkpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBGdW5jdGlvblB0cih0eXBlbmFtZSBCYXNlOjpBbHJlYWR5VGFnZ2VkVmFsdWVUYWcs
IHZvaWQqIHB0cikKLSAgICAgICAgOiBCYXNlKEFscmVhZHlUYWdnZWRWYWx1ZSwgcHRyKQotICAg
IHsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbj4KLSAgICBP
dXQgb3BlcmF0b3IoKShJbi4uLikgY29uc3QgPSBkZWxldGU7Ci0KLSAgICB0ZW1wbGF0ZTxQdHJU
YWcsIEZ1bmN0aW9uQXR0cmlidXRlcz4gZnJpZW5kIGNsYXNzIEZ1bmN0aW9uUHRyOwotfTsKLQog
dGVtcGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbiwgRnVuY3Rp
b25BdHRyaWJ1dGVzIGF0dHI+Ci1zdHJ1Y3QgRnVuY3Rpb25UcmFpdHM8VHlwZWRGdW5jdGlvblB0
cjx0YWcsIE91dChJbi4uLiksIGF0dHI+PiA6IHB1YmxpYyBGdW5jdGlvblRyYWl0czxPdXQoSW4u
Li4pPiB7CitzdHJ1Y3QgRnVuY3Rpb25UcmFpdHM8RnVuY3Rpb25QdHI8dGFnLCBPdXQoSW4uLi4p
LCBhdHRyPj4gOiBwdWJsaWMgRnVuY3Rpb25UcmFpdHM8T3V0KEluLi4uKT4gewogfTsKIAogdGVt
cGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbiwgRnVuY3Rpb25B
dHRyaWJ1dGVzIGF0dHI+Ci12b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgVHlwZWRGdW5j
dGlvblB0cjx0YWcsIE91dChJbi4uLiksIGF0dHI+JiBwdHIpCit2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgY29uc3QgRnVuY3Rpb25QdHI8dGFnLCBPdXQoSW4uLi4pLCBhdHRyPiYgcHRyKQogewot
ICAgIGFkZChoYXNoZXIsIHB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBhZGQoaGFzaGVy
LCBwdHIudGFnZ2VkUHRyKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RG
OjpGdW5jdGlvbkF0dHJpYnV0ZXM7CiB1c2luZyBXVEY6OkZ1bmN0aW9uUHRyOwotdXNpbmcgV1RG
OjpUeXBlZEZ1bmN0aW9uUHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAppbmRleCBlZWY4OWI3
N2U3YmQuLmVjOGMwMjZkZWYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKQEAgLTY4LDcg
KzY4LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IExvY2tIb2xkZXImLCBN
ZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiAgICAgICAgIE1lbW9yeVB0ciBzdGFydCA9IGhh
bmRsZS5zdGFydCgpOwogICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUuc2l6ZUlu
Qnl0ZXMoKTsKICAgICAgICAgZGVjcmVtZW50UGFnZU9jY3VwYW5jeShzdGFydC51bnRhZ2dlZFB0
cigpLCBzaXplSW5CeXRlcyk7Ci0gICAgICAgIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRs
ZShGcmVlU3BhY2VQdHIoc3RhcnQpLCBzaXplSW5CeXRlcyk7CisgICAgICAgIGFkZEZyZWVTcGFj
ZUZyb21SZWxlYXNlZEhhbmRsZShzdGFydC5yZXRhZ2dlZDxGcmVlU3BhY2VQdHJUYWc+KCksIHNp
emVJbkJ5dGVzKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoISFtX3RyYWNrZXIpKQpAQCAt
MTE0LDcgKzExNCw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCBu
ZXdTaXplSW5CeXRlcykKICAgICBpZiAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPCBmcmVlRW5k
KQogICAgICAgICBhbGxvY2F0b3IuZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJldF9j
YXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0VmFsdWUpKTsKIAotICAgIGFsbG9jYXRvci5hZGRG
cmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUoTWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlUHRyKGZy
ZWVTdGFydCksIGZyZWVTaXplKTsKKyAgICBhbGxvY2F0b3IuYWRkRnJlZVNwYWNlRnJvbVJlbGVh
c2VkSGFuZGxlKGZyZWVTdGFydC5yZXRhZ2dlZDxGcmVlU3BhY2VQdHJUYWc+KCksIGZyZWVTaXpl
KTsKIAogICAgIG1fZW5kID0gZnJlZVN0YXJ0OwogfQpAQCAtMTkwLDcgKzE5MCw3IEBAIFJlZlB0
cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBMb2Nr
SG9sZGVyJiwgc2l6ZV90IHNpCiAgICAgbV9udW1BbGxvY2F0aW9ucysrOwogI2VuZGlmCiAKLSAg
ICBhdXRvIGhhbmRsZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSgqdGhpcywg
TWVtb3J5UHRyKHN0YXJ0KSwgc2l6ZUluQnl0ZXMpKTsKKyAgICBhdXRvIGhhbmRsZSA9IGFkb3B0
UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSgqdGhpcywgc3RhcnQucmV0YWdnZWQ8SGFuZGxl
TWVtb3J5UHRyVGFnPigpLCBzaXplSW5CeXRlcykpOwogCiAgICAgaWYgKFVOTElLRUxZKCEhbV90
cmFja2VyKSkKICAgICAgICAgbV90cmFja2VyLT5ub3RpZnkoKmhhbmRsZS5wdHIoKSk7CkBAIC0y
ODksNyArMjg5LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSh2b2lk
KiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgIENvbmZpZzo6QXNzZXJ0Tm90RnJvemVu
U2NvcGUgYXNzZXJ0Tm90RnJvemVuU2NvcGU7CiAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9
OwogICAgIG1fYnl0ZXNSZXNlcnZlZCArPSBzaXplSW5CeXRlczsKLSAgICBhZGRGcmVlU3BhY2Uo
RnJlZVNwYWNlUHRyOjptYWtlRnJvbVJhd1BvaW50ZXIoc3RhcnQpLCBzaXplSW5CeXRlcyk7Cisg
ICAgYWRkRnJlZVNwYWNlKEZyZWVTcGFjZVB0cjo6ZnJvbVVudGFnZ2VkUHRyKHN0YXJ0KSwgc2l6
ZUluQnl0ZXMpOwogfQogCiBzaXplX3QgTWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXpl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaCBiL1NvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuaAppbmRleCA1ZmI3MmMyODBlZGMuLmY2ZmJlOTQ0NGRiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBNZXRhQWxsb2Nh
dG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZXRhQWxsb2NhdG9yKTsKIAogcHVibGlj
OgotICAgIHVzaW5nIEZyZWVTcGFjZVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8RnJlZVNwYWNlUHRy
VGFnPjsKKyAgICB1c2luZyBGcmVlU3BhY2VQdHIgPSBDb2RlUHRyPEZyZWVTcGFjZVB0clRhZz47
CiAgICAgdXNpbmcgTWVtb3J5UHRyID0gTWV0YUFsbG9jYXRvckhhbmRsZTo6TWVtb3J5UHRyOwog
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1ldGFBbGxvY2F0b3IoTG9jayYsIHNpemVfdCBhbGxv
Y2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaCBiL1NvdXJjZS9XVEYv
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAppbmRleCA5YjlmYjI4OTJkMDkuLjg5MDIwY2FjNjRi
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaApAQCAtMjksNyArMjksNyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9NZXRhQWxsb2NhdG9yUHRyLmg+CisjaW5jbHVkZSA8d3RmL0NvZGVQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVkQmxhY2tUcmVlLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CiAKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHUKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihNZXRhQWxsb2NhdG9ySGFu
ZGxlKTsKIAogcHVibGljOgotICAgIHVzaW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8
SGFuZGxlTWVtb3J5UHRyVGFnPjsKKyAgICB1c2luZyBNZW1vcnlQdHIgPSBDb2RlUHRyPEhhbmRs
ZU1lbW9yeVB0clRhZz47CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1ldGFBbGxvY2F0b3JI
YW5kbGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvclB0ci5o
IGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvclB0ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1NTBjMWIxZTBlODEuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9NZXRhQWxsb2NhdG9yUHRyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9QdHJUYWcu
aD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10
ZW1wbGF0ZTxQdHJUYWcgdGFnPgotY2xhc3MgTWV0YUFsbG9jYXRvclB0ciB7Ci1wdWJsaWM6Ci0g
ICAgTWV0YUFsbG9jYXRvclB0cigpID0gZGVmYXVsdDsKLSAgICBNZXRhQWxsb2NhdG9yUHRyKHN0
ZDo6bnVsbHB0cl90KSB7IH0KLQotICAgIHN0YXRpYyBNZXRhQWxsb2NhdG9yUHRyIG1ha2VGcm9t
UmF3UG9pbnRlcih2b2lkKiBwdHIpIHsgcmV0dXJuIE1ldGFBbGxvY2F0b3JQdHIocHRyKTsgfQot
Ci0gICAgdGVtcGxhdGU8UHRyVGFnIG90aGVyVGFnPgotICAgIGV4cGxpY2l0IE1ldGFBbGxvY2F0
b3JQdHIoTWV0YUFsbG9jYXRvclB0cjxvdGhlclRhZz4gb3RoZXIpCi0gICAgICAgIDogbV9wdHIo
b3RoZXIudGVtcGxhdGUgcmV0YWdnZWRQdHI8dGFnPigpKQotICAgIHsgfQotCi0gICAgZXhwbGlj
aXQgTWV0YUFsbG9jYXRvclB0cih1aW50cHRyX3QgcHRyQXNJbnQpCi0gICAgICAgIDogTWV0YUFs
bG9jYXRvclB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwdHJBc0ludCkpCi0gICAgeyB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+Ci0gICAgVCB1bnRhZ2dlZFB0cigpIGNv
bnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPih1bnRhZ0NvZGVQdHI8dGFnPihtX3B0cikpOyB9
Ci0KLSAgICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFnLCB0eXBlbmFtZSBUID0gdm9pZCo+Ci0gICAg
VCByZXRhZ2dlZFB0cigpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihyZXRhZ0NvZGVQ
dHI8dGFnLCBuZXdUYWc+KG1fcHRyKSk7IH0KLQotICAgIC8vIERpc2FsbG93IGFueSBjYXN0aW5n
IG9wZXJhdGlvbnMgKGV4Y2VwdCBmb3IgYm9vbGVhbnMpLgotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2
YWx1ZT4+Ci0gICAgb3BlcmF0b3IgVCgpID0gZGVsZXRlOwotCi0gICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9wdHI7IH0KLSAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFtX3B0cjsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KE1ldGFBbGxv
Y2F0b3JQdHIgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09IG90aGVyLm1fcHRyOyB9Ci0g
ICAgYm9vbCBvcGVyYXRvciE9KE1ldGFBbGxvY2F0b3JQdHIgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IG1fcHRyICE9IG90aGVyLm1fcHRyOyB9Ci0KLSAgICBNZXRhQWxsb2NhdG9yUHRyIG9wZXJhdG9y
KyhzaXplX3Qgc2l6ZUluQnl0ZXMpIGNvbnN0IHsgcmV0dXJuIE1ldGFBbGxvY2F0b3JQdHIodW50
YWdnZWRQdHI8dWludDhfdCo+KCkgKyBzaXplSW5CeXRlcyk7IH0KLSAgICBNZXRhQWxsb2NhdG9y
UHRyIG9wZXJhdG9yLShzaXplX3Qgc2l6ZUluQnl0ZXMpIGNvbnN0IHsgcmV0dXJuIE1ldGFBbGxv
Y2F0b3JQdHIodW50YWdnZWRQdHI8dWludDhfdCo+KCkgLSBzaXplSW5CeXRlcyk7IH0KLQotICAg
IE1ldGFBbGxvY2F0b3JQdHImIG9wZXJhdG9yKz0oc2l6ZV90IHNpemVJbkJ5dGVzKQotICAgIHsK
LSAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyBzaXplSW5CeXRlczsKLSAgICB9Ci0KLSAg
ICBNZXRhQWxsb2NhdG9yUHRyJiBvcGVyYXRvci09KHNpemVfdCBzaXplSW5CeXRlcykKLSAgICB7
Ci0gICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gc2l6ZUluQnl0ZXM7Ci0gICAgfQotCi0g
ICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OwotICAgIGVudW0gRGVsZXRlZFZh
bHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07Ci0KLSAgICBNZXRhQWxsb2NhdG9yUHRyKEVtcHR5VmFs
dWVUYWcpCi0gICAgICAgIDogbV9wdHIoZW1wdHlWYWx1ZSgpKQotICAgIHsgfQotCi0gICAgTWV0
YUFsbG9jYXRvclB0cihEZWxldGVkVmFsdWVUYWcpCi0gICAgICAgIDogbV9wdHIoZGVsZXRlZFZh
bHVlKCkpCi0gICAgeyB9Ci0KLSAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcHRyID09IGVtcHR5VmFsdWUoKTsgfQotICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3B0ciA9PSBkZWxldGVkVmFsdWUoKTsgfQotCi0gICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0IHsgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1fcHRyKTsgfQotCi1wcml2
YXRlOgotICAgIGV4cGxpY2l0IE1ldGFBbGxvY2F0b3JQdHIodm9pZCogcHRyKQotICAgICAgICA6
IG1fcHRyKHRhZ0NvZGVQdHI8dGFnPihwdHIpKQotICAgIHsKLSAgICAgICAgYXNzZXJ0SXNOb3RU
YWdnZWQocHRyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCogZW1wdHlWYWx1ZSgpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDEpOyB9Ci0gICAgc3RhdGljIHZvaWQqIGRlbGV0
ZWRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDIpOyB9Ci0KLSAgICB2
b2lkKiBtX3B0ciB7IG51bGxwdHIgfTsKLX07Ci0KLXRlbXBsYXRlPFB0clRhZyB0YWc+Ci1zdHJ1
Y3QgTWV0YUFsbG9jYXRvclB0ckhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IE1ldGFBbGxvY2F0b3JQdHI8dGFnPiYgcHRyKSB7IHJldHVybiBwdHIuaGFzaCgpOyB9Ci0gICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTWV0YUFsbG9jYXRvclB0cjx0YWc+JiBhLCBjb25zdCBN
ZXRhQWxsb2NhdG9yUHRyPHRhZz4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwot
ICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBEZWZhdWx0SGFz
aDsKLXRlbXBsYXRlPFB0clRhZyB0YWc+IHN0cnVjdCBEZWZhdWx0SGFzaDxNZXRhQWxsb2NhdG9y
UHRyPHRhZz4+IDogTWV0YUFsbG9jYXRvclB0ckhhc2g8dGFnPiB7IH07Ci0KLXRlbXBsYXRlPFB0
clRhZyB0YWc+IHN0cnVjdCBIYXNoVHJhaXRzPE1ldGFBbGxvY2F0b3JQdHI8dGFnPj4gOiBwdWJs
aWMgQ3VzdG9tSGFzaFRyYWl0czxNZXRhQWxsb2NhdG9yUHRyPHRhZz4+IHsgfTsKLQotfSAvLyBu
YW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6TWV0YUFsbG9jYXRvclB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVz
ZS5oCmluZGV4IGFmNWE1MGQ4YTlkYy4uMGYyNmI4ZjIwNTBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgK
QEAgLTM1MCw3ICszNTAsNyBAQAogI2lmICFkZWZpbmVkKFVTRV9MSUJQQVNfSklUX0hFQVApICYm
ICFVU0UoU1lTVEVNX01BTExPQykKICNpbmNsdWRlIDxibWFsbG9jL0JQbGF0Zm9ybS5oPgogI2lm
IEJFTkFCTEUoTElCUEFTKSAmJiAoT1MoREFSV0lOKSB8fCBPUyhMSU5VWCkpCi0jZGVmaW5lIFVT
RV9MSUJQQVNfSklUX0hFQVAgMQorI2RlZmluZSBVU0VfTElCUEFTX0pJVF9IRUFQIDAgLyogbWxh
bSAxICovCiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKaW5kZXggMmQ1YzJmYmY2NjE4Li44ZGZiNDU5MGE1NTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHAKQEAgLTM1Myw3ICszNTMsNyBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpjbGVhckRPTUd1
YXJkZWRPYmplY3RzKCkgY29uc3QKIEpTRnVuY3Rpb24qIEpTRE9NR2xvYmFsT2JqZWN0OjpjcmVh
dGVDcm9zc09yaWdpbkZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlv
biwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBDcm9zc09yaWdpbk1hcEtleSBrZXkgPSBzdGQ6Om1ha2VfcGFpcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBuYXRpdmVGdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICBDcm9zc09yaWdpbk1hcEtleSBrZXkgPSBzdGQ6Om1ha2VfcGFpcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBuYXRpdmVGdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAKICAgICAvLyBXZWFrR0NNYXA6OmVu
c3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5vdCBpbnZva2UgR0Mgc2luY2UgR0MgY2FuIG1vZGlm
eSBXZWFrR0NNYXAgaW4gdGhlIG1pZGRsZSBvZiBIYXNoTWFwOjplbnN1cmUuCiAgICAgLy8gV2Ug
dXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRvIGludm9rZSBHQyB3aGVuIGV4ZWN1dGluZyBXZWFr
R0NNYXA6OmVuc3VyZVZhbHVlIGFuZCAoMikgdG8gYXZvaWQgbG9va2luZyB1cCBIYXNoTWFwIHR3
aWNlLgpAQCAtMzY3LDcgKzM2Nyw3IEBAIEdldHRlclNldHRlciogSlNET01HbG9iYWxPYmplY3Q6
OmNyZWF0ZUNyb3NzT3JpZ2luR2V0dGVyU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBsCiB7CiAgICAg
QVNTRVJUKGdldHRlciB8fCBzZXR0ZXIpOwogICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBDcm9zc09yaWdpbk1hcEtleSBrZXkgPSBzdGQ6Om1ha2VfcGFpcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnZXR0ZXIgPyBnZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSA6
IHNldHRlci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBDcm9zc09yaWdpbk1hcEtleSBrZXkg
PSBzdGQ6Om1ha2VfcGFpcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnZXR0ZXIgPyBnZXR0ZXIudGFn
Z2VkUHRyKCkgOiBzZXR0ZXIudGFnZ2VkUHRyKCkpOwogCiAgICAgLy8gV2Vha0dDTWFwOjplbnN1
cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDIHNpbmNlIEdDIGNhbiBtb2RpZnkg
V2Vha0dDTWFwIGluIHRoZSBtaWRkbGUgb2YgSGFzaE1hcDo6ZW5zdXJlLgogICAgIC8vIFdlIHVz
ZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0byBpbnZva2UgR0Mgd2hlbiBleGVjdXRpbmcgV2Vha0dD
TWFwOjplbnN1cmVWYWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxvb2tpbmcgdXAgSGFzaE1hcCB0d2lj
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9Db21waWxlZFNlbGVjdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvQ29tcGlsZWRTZWxlY3Rvci5oCmluZGV4IDc2ZGJjZWFk
NDExMi4uMmZkZWRjY2JhNTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvQ29t
cGlsZWRTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9Db21waWxlZFNlbGVj
dG9yLmgKQEAgLTU0LDcgKzU0LDcgQEAgc3RydWN0IENvbXBpbGVkU2VsZWN0b3IgewogCiAgICAg
fkNvbXBpbGVkU2VsZWN0b3IoKQogICAgIHsKLSAgICAgICAgaWYgKGNvZGVSZWYuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpCisgICAgICAgIGlmIChjb2RlUmVmLmNvZGUoKS50YWdnZWRQdHIo
KSkKICAgICAgICAgICAgIGRhdGFMb2dGKCJDb21waWxlZFNlbGVjdG9yICVkIFwiJXNcIlxuIiwg
dXNlQ291bnQsIHNlbGVjdG9yLT5zZWxlY3RvclRleHQoKS51dGY4KCkuZGF0YSgpKTsKICAgICB9
CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5o
IGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCmluZGV4IDk0OGJiMTRmYzNm
MS4uOTAwZDlhNzcxNGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rp
b25DYWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCkBAIC0z
Nyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnVuY3Rpb25DYWxsIHsK
IHB1YmxpYzoKLSAgICBGdW5jdGlvbkNhbGwoSlNDOjpNYWNyb0Fzc2VtYmxlciYgYXNzZW1ibGVy
LCBSZWdpc3RlckFsbG9jYXRvciYgcmVnaXN0ZXJBbGxvY2F0b3IsIFN0YWNrQWxsb2NhdG9yJiBz
dGFja0FsbG9jYXRvciwgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxs
LCBGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4+LCAzMj4mIGNhbGxSZWdpc3RyeSkK
KyAgICBGdW5jdGlvbkNhbGwoSlNDOjpNYWNyb0Fzc2VtYmxlciYgYXNzZW1ibGVyLCBSZWdpc3Rl
ckFsbG9jYXRvciYgcmVnaXN0ZXJBbGxvY2F0b3IsIFN0YWNrQWxsb2NhdG9yJiBzdGFja0FsbG9j
YXRvciwgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxsLCBDb2RlUHRy
PEpTQzo6T3BlcmF0aW9uUHRyVGFnPj4sIDMyPiYgY2FsbFJlZ2lzdHJ5KQogICAgICAgICA6IG1f
YXNzZW1ibGVyKGFzc2VtYmxlcikKICAgICAgICAgLCBtX3JlZ2lzdGVyQWxsb2NhdG9yKHJlZ2lz
dGVyQWxsb2NhdG9yKQogICAgICAgICAsIG1fc3RhY2tBbGxvY2F0b3Ioc3RhY2tBbGxvY2F0b3Ip
CkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBzZXRG
dW5jdGlvbkFkZHJlc3MoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGZ1bmN0aW9u
QWRkcmVzcykKKyAgICB2b2lkIHNldEZ1bmN0aW9uQWRkcmVzcyhDb2RlUHRyPEpTQzo6T3BlcmF0
aW9uUHRyVGFnPiBmdW5jdGlvbkFkZHJlc3MpCiAgICAgewogICAgICAgICBtX2Z1bmN0aW9uQWRk
cmVzcyA9IGZ1bmN0aW9uQWRkcmVzczsKICAgICB9CkBAIC0xMTAsNyArMTEwLDcgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgcHJlcGFyZUFuZENhbGwoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
ZnVuY3Rpb25BZGRyZXNzLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBBU1NFUlQobV9m
dW5jdGlvbkFkZHJlc3MudGFnZ2VkUHRyKCkpOwogICAgICAgICBBU1NFUlQoIW1fZmlyc3RBcmd1
bWVudCB8fCAobV9maXJzdEFyZ3VtZW50ICYmICFtX3NlY29uZEFyZ3VtZW50KSB8fCAobV9maXJz
dEFyZ3VtZW50ICYmIG1fc2Vjb25kQXJndW1lbnQpKTsKIAogICAgICAgICBzYXZlQWxsb2NhdGVk
Q2FsbGVyU2F2ZWRSZWdpc3RlcnMoKTsKQEAgLTE3OSwxMiArMTc5LDEyIEBAIHByaXZhdGU6CiAg
ICAgSlNDOjpNYWNyb0Fzc2VtYmxlciYgbV9hc3NlbWJsZXI7CiAgICAgUmVnaXN0ZXJBbGxvY2F0
b3ImIG1fcmVnaXN0ZXJBbGxvY2F0b3I7CiAgICAgU3RhY2tBbGxvY2F0b3ImIG1fc3RhY2tBbGxv
Y2F0b3I7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxsLCBG
dW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4+LCAzMj4mIG1fY2FsbFJlZ2lzdHJ5Owor
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCwgQ29kZVB0cjxK
U0M6Ok9wZXJhdGlvblB0clRhZz4+LCAzMj4mIG1fY2FsbFJlZ2lzdHJ5OwogCiAgICAgUmVnaXN0
ZXJWZWN0b3IgbV9zYXZlZFJlZ2lzdGVyczsKICAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZl
cmVuY2VWZWN0b3IgbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzOwogICAgIAotICAgIEZ1
bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBtX2Z1bmN0aW9uQWRkcmVzczsKKyAgICBD
b2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBtX2Z1bmN0aW9uQWRkcmVzczsKICAgICB1bnNp
Z25lZCBtX2FyZ3VtZW50Q291bnQ7CiAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBtX2ZpcnN0QXJndW1lbnQ7CiAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBt
X3NlY29uZEFyZ3VtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
Y3BwCmluZGV4IDlhM2E2YWM5ODFmNi4uNGM2MjIzMTA1OWRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCkBAIC0yNzYsNyArMjc2LDcgQEAgc3RydWN0IFNl
bGVjdG9yRnJhZ21lbnQgewogICAgIFZlY3Rvcjxjb25zdCBWZWN0b3I8QXRvbVN0cmluZz4qPiBs
YW5ndWFnZUFyZ3VtZW50c0xpc3Q7CiAgICAgVmVjdG9yPGNvbnN0IEF0b21TdHJpbmdJbXBsKiwg
OD4gY2xhc3NOYW1lczsKICAgICBIYXNoU2V0PHVuc2lnbmVkPiBwc2V1ZG9DbGFzc2VzOwotICAg
IFZlY3RvcjxGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4sIDQ+IHVub3B0aW1pemVk
UHNldWRvQ2xhc3NlczsKKyAgICBWZWN0b3I8Q29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4s
IDQ+IHVub3B0aW1pemVkUHNldWRvQ2xhc3NlczsKICAgICBWZWN0b3I8QXR0cmlidXRlTWF0Y2hp
bmdJbmZvLCA0PiBhdHRyaWJ1dGVzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBpbnQ+LCAy
PiBudGhDaGlsZEZpbHRlcnM7CiAgICAgVmVjdG9yPE50aENoaWxkT2ZTZWxlY3RvckluZm8+IG50
aENoaWxkT2ZGaWx0ZXJzOwpAQCAtMzY5LDcgKzM2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBn
ZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBtYXRjaGluZ1RhZ05h
bWVGYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW5nUG9zdFRhZ05hbWVG
YWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKICAgICB2b2lkIGdlbmVyYXRl
RWxlbWVudERhdGFNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNv
bnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudExpbmtNYXRj
aGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJh
Z21lbnQmKTsKLSAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEZ1bmN0aW9uQ2FsbFRlc3QoQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0
clRhZz4pOworICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzQWN0aXZlKEFzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAgIHZvaWQgZ2VuZXJh
dGVFbGVtZW50SXNFbXB0eShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOwogICAg
IHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNGaXJzdENoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZh
aWx1cmVDYXNlcyk7CkBAIC0zODUsNyArMzg1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdlbmVy
YXRlRWxlbWVudEF0dHJpYnV0ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBBc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgZGVjSW5kZXhSZWdpc3RlciwgY29uc3QgQXR0cmlidXRlTWF0Y2hp
bmdJbmZvJiBhdHRyaWJ1dGVJbmZvKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0
ZVZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0dHJpYnV0ZU1h
dGNoaW5nSW5mbyYgYXR0cmlidXRlSW5mbyk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRBdHRy
aWJ1dGVWYWx1ZUV4YWN0TWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2Vz
LCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0
b21TdHJpbmcmIGV4cGVjdGVkVmFsdWUsIEF0dHJpYnV0ZUNhc2VTZW5zaXRpdml0eSB2YWx1ZUNh
c2VTZW5zaXRpdml0eSk7Ci0gICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlv
bkNhbGxWYWx1ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdG9tU3Ry
aW5nJiBleHBlY3RlZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkgdmFsdWVDYXNlU2Vu
c2l0aXZpdHksIEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBjYXNlU2Vuc2l0aXZl
VGVzdCwgRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGNhc2VJbnNlbnNpdGl2ZVRl
c3QpOworICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rpb25DYWxsVmFsdWVN
YXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXRvbVN0cmluZyYgZXhwZWN0
ZWRWYWx1ZSwgQXR0cmlidXRlQ2FzZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNpdGl2aXR5LCBD
b2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBjYXNlU2Vuc2l0aXZlVGVzdCwgQ29kZVB0cjxK
U0M6Ok9wZXJhdGlvblB0clRhZz4gY2FzZUluc2Vuc2l0aXZlVGVzdCk7CiAgICAgdm9pZCBnZW5l
cmF0ZUVsZW1lbnRIYXNUYWdOYW1lKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
Y29uc3QgQ1NTU2VsZWN0b3ImIHRhZ01hdGNoaW5nU2VsZWN0b3IpOwogICAgIHZvaWQgZ2VuZXJh
dGVFbGVtZW50SGFzSWQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBM
b2NhbFJlZ2lzdGVyJiBlbGVtZW50RGF0YUFkZHJlc3MsIGNvbnN0IEF0b21TdHJpbmcmIGlkVG9N
YXRjaCk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRIYXNDbGFzc2VzKEFzc2VtYmxlcjo6SnVt
cExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgTG9jYWxSZWdpc3RlciYgZWxlbWVudERhdGFBZGRy
ZXNzLCBjb25zdCBWZWN0b3I8Y29uc3QgQXRvbVN0cmluZ0ltcGwqLCA4PiYgY2xhc3NOYW1lcyk7
CkBAIC00MzMsNyArNDMzLDcgQEAgcHJpdmF0ZToKICAgICBBc3NlbWJsZXIgbV9hc3NlbWJsZXI7
CiAgICAgUmVnaXN0ZXJBbGxvY2F0b3IgbV9yZWdpc3RlckFsbG9jYXRvcjsKICAgICBTdGFja0Fs
bG9jYXRvciBtX3N0YWNrQWxsb2NhdG9yOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1ibGVy
OjpDYWxsLCBGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4+LCAzMj4gbV9mdW5jdGlv
bkNhbGxzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1ibGVyOjpDYWxsLCBDb2RlUHRyPEpT
Qzo6T3BlcmF0aW9uUHRyVGFnPj4sIDMyPiBtX2Z1bmN0aW9uQ2FsbHM7CiAKICAgICBTZWxlY3Rv
ckNvbnRleHQgbV9zZWxlY3RvckNvbnRleHQ7CiAgICAgRnVuY3Rpb25UeXBlIG1fZnVuY3Rpb25U
eXBlOwpAQCAtODE2LDEzOCArODE2LDEzOCBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBh
ZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAg
IHN3aXRjaCAodHlwZSkgewogICAgIC8vIFVub3B0aW1pemVkIHBzZXVkbyBzZWxlY3Rvci4gVGhl
eSBhcmUganVzdCBmdW5jdGlvbiBjYWxsIHRvIGEgc2ltcGxlIHRlc3RpbmcgZnVuY3Rpb24uCiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBdXRvZmlsbDoKLSAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uSXNBdXRvZmlsbGVkKSk7CisgICAgICAgIGZyYWdtZW50LnVu
b3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uSXNBdXRvZmlsbGVkKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0F1dG9maWxsQW5kT2JzY3VyZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bklzQXV0b2ZpbGxlZEFuZE9ic2N1cmVkKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVk
UHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uSXNBdXRvZmlsbGVkQW5kT2JzY3VyZWQpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlw
ZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzQXV0b2ZpbGxTdHJvbmdQYXNzd29yZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uSXNBdXRvZmlsbGVkU3Ryb25nUGFzc3dvcmQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25Jc0F1dG9maWxsZWRTdHJvbmdQYXNzd29yZCkpOwogICAgICAgICByZXR1cm4g
RnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NBdXRvZmlsbFN0cm9uZ1Bhc3N3b3JkVmlld2FibGU6Ci0gICAgICAgIGZy
YWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzQXV0b2ZpbGxlZFN0cm9uZ1Bhc3N3b3JkVmlld2Fi
bGUpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChD
b2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0F1dG9maWxsZWRTdHJvbmdQ
YXNzd29yZFZpZXdhYmxlKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNl
bGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0NoZWNrZWQ6
Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rp
b25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzQ2hlY2tlZCkpOworICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzQ2hlY2tlZCkpOwogICAgICAgICByZXR1cm4gRnVu
Y3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NEZWZhdWx0OgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0Ns
YXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25N
YXRjaGVzRGVmYXVsdFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVk
UHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uTWF0Y2hlc0RlZmF1bHRQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NEaXNhYmxlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hl
c0Rpc2FibGVkUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25N
YXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBl
OjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NFbmFibGVkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBw
ZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRW5h
YmxlZFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xh
c3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hl
c0VuYWJsZWRQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1w
bGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEZWZp
bmVkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1
bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0RlZmluZWRFbGVtZW50
KSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29k
ZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNEZWZpbmVkRWxlbWVudCkpOwog
ICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGb2N1czoKLSAgICAgICAgZnJhZ21lbnQudW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1
cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NGb2N1c1Zpc2libGU6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbk1hdGNoZXNGb2N1c1Zpc2libGVQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGb2N1c1Zpc2libGVQc2V1ZG9DbGFzcykpOwogICAg
ICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGb2N1c1dpdGhpbjoKLSAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0ZvY3VzV2l0aGluUHNldWRvQ2xhc3MpKTsKKyAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRm9jdXNXaXRoaW5Qc2V1ZG9DbGFzcykp
OwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGdWxsUGFnZU1lZGlhOgotICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc01lZGlhRG9jdW1lbnQpKTsKKyAgICAgICAgZnJh
Z21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25Jc01lZGlhRG9jdW1lbnQpKTsKICAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzSW5SYW5nZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9D
bGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
SXNJblJhbmdlKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5h
cHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNJblJhbmdlKSk7
CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0luZGV0ZXJtaW5hdGU6Ci0gICAgICAgIGZy
YWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNJbmRldGVybWluYXRlUHNldWRvQ2xhc3Mp
KTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2Rl
UHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzSW5kZXRlcm1pbmF0ZVBz
ZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9y
Q2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ludmFsaWQ6Ci0gICAg
ICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8
SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzSW52YWxpZCkpOworICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbklzSW52YWxpZCkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NPcHRpb25hbDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNPcHRp
b25hbEZvcm1Db250cm9sKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xh
c3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNPcHRp
b25hbEZvcm1Db250cm9sKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNl
bGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc091dE9mUmFu
Z2U6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVu
Y3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzT3V0T2ZSYW5nZSkpOwor
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8
SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzT3V0T2ZSYW5nZSkpOwogICAgICAgICBy
ZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NSZWFkT25seToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uTWF0Y2hlc1JlYWRPbmx5UHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25NYXRjaGVzUmVhZE9ubHlQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1
cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NSZWFkV3JpdGU6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVk
UHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbk1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51
bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbk1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1
cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NSZXF1aXJlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uSXNSZXF1aXJlZEZvcm1Db250cm9sKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uSXNSZXF1aXJlZEZvcm1Db250cm9sKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5
cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc1ZhbGlkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBw
ZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc1ZhbGlkKSk7
CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0
cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNWYWxpZCkpOwogICAgICAgICByZXR1
cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NXaW5kb3dJbmFjdGl2ZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uSXNXaW5kb3dJbmFjdGl2ZSkpOworICAgICAgICBmcmFnbWVudC51bm9wdGlt
aXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbklzV2luZG93SW5hY3RpdmUpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6
U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFNjcmVlbjoKLSAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0Z1bGxTY3JlZW5Qc2V1ZG9DbGFzcykpOworICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlND
OjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGdWxsU2NyZWVuUHNldWRvQ2xhc3Mp
KTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFNjcmVlbkRvY3VtZW50OgotICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRy
PEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnVsbFNjcmVlbkRvY3VtZW50
UHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnVs
bFNjcmVlbkRvY3VtZW50UHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlw
ZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzRnVsbFNjcmVlbkFuY2VzdG9yOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25NYXRjaGVzRnVsbFNjcmVlbkFuY2VzdG9yUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnVsbFNjcmVlbkFuY2VzdG9yUHNldWRvQ2xhc3MpKTsK
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQW5pbWF0aW5nRnVsbFNjcmVlblRyYW5zaXRp
b246Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVu
Y3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGdWxsU2NyZWVu
QW5pbWF0aW5nRnVsbFNjcmVlblRyYW5zaXRpb25Qc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGdWxsU2NyZWVuQW5pbWF0aW5nRnVsbFNjcmVlblRy
YW5zaXRpb25Qc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1w
bGVTZWxlY3RvckNoZWNrZXI7CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1
bGxTY3JlZW5Db250cm9sc0hpZGRlbjoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uTWF0Y2hlc0Z1bGxTY3JlZW5Db250cm9sc0hpZGRlblBzZXVkb0NsYXNzKSk7CisgICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0Z1bGxTY3JlZW5Db250cm9sc0hpZGRlblBz
ZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9y
Q2hlY2tlcjsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBJQ1RVUkVfSU5fUElDVFVSRV9BUEkpCiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NQaWN0dXJlSW5QaWN0dXJlOgotICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpT
Qzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzUGljdHVyZUluUGljdHVyZVBzZXVk
b0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBl
bmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1BpY3R1cmVJ
blBpY3R1cmVQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1w
bGVTZWxlY3RvckNoZWNrZXI7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1dHVyZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uTWF0Y2hlc0Z1dHVyZUN1ZVBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdt
ZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0Z1dHVyZUN1ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAg
IHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Bhc3Q6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVk
UHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbk1hdGNoZXNQYXN0Q3VlUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25NYXRjaGVzUGFzdEN1ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBG
dW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc1BsYXlpbmc6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bk1hdGNoZXNQbGF5aW5nUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25NYXRjaGVzUGxheWluZ1BzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlv
blR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc1BhdXNlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hl
c1BhdXNlZFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0
Y2hlc1BhdXNlZFBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNp
bXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Nl
ZWtpbmc6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
RnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNTZWVraW5n
UHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzU2Vl
a2luZ1BzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNl
bGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0J1ZmZlcmlu
ZzoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5j
dGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0J1ZmZlcmluZ1Bz
ZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5h
cHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0J1ZmZl
cmluZ1BzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNl
bGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1N0YWxsZWQ6
Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rp
b25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNTdGFsbGVkUHNldWRv
Q2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVu
ZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzU3RhbGxlZFBz
ZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9y
Q2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc011dGVkOgotICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpT
Qzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzTXV0ZWRQc2V1ZG9DbGFzcykpOwor
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8
SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNNdXRlZFBzZXVkb0NsYXNzKSk7
CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1ZvbHVtZUxvY2tlZDoKLSAgICAgICAgZnJh
Z21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1ZvbHVtZUxvY2tlZFBzZXVkb0NsYXNzKSk7
CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0
cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1ZvbHVtZUxvY2tlZFBzZXVk
b0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcjsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hhc0F0dGFjaG1lbnQ6Ci0gICAgICAgIGZyYWdtZW50
LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbkhhc0F0dGFjaG1lbnQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25IYXNBdHRhY2htZW50KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICNlbmRpZgogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NNb2RhbDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0
Y2hlc01vZGFsUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25N
YXRjaGVzTW9kYWxQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpT
aW1wbGVTZWxlY3RvckNoZWNrZXI7CiAKICAgICAvLyBUaGVzZSBwc2V1ZG8tY2xhc3NlcyBvbmx5
IGhhdmUgbWVhbmluZyB3aXRoIHNjcm9sbGJhcnMuCkBAIC0zMzc4LDcgKzMzNzgsNyBAQCB2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRlVmFsdWVFeGFj
dE1hdGNoaW5nKEFzc2VtYmxlcgogICAgIH0KIH0KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3Vy
cmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0b21TdHJpbmcmIGV4cGVjdGVkVmFsdWUsIEF0
dHJpYnV0ZUNhc2VTZW5zaXRpdml0eSB2YWx1ZUNhc2VTZW5zaXRpdml0eSwgRnVuY3Rpb25QdHI8
SlNDOjpPcGVyYXRpb25QdHJUYWc+IGNhc2VTZW5zaXRpdmVUZXN0LCBGdW5jdGlvblB0cjxKU0M6
Ok9wZXJhdGlvblB0clRhZz4gY2FzZUluc2Vuc2l0aXZlVGVzdCkKK3ZvaWQgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxWYWx1ZU1hdGNo
aW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdG9tU3RyaW5nJiBleHBlY3RlZFZh
bHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkgdmFsdWVDYXNlU2Vuc2l0aXZpdHksIENvZGVQ
dHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGNhc2VTZW5zaXRpdmVUZXN0LCBDb2RlUHRyPEpTQzo6
T3BlcmF0aW9uUHRyVGFnPiBjYXNlSW5zZW5zaXRpdmVUZXN0KQogewogICAgIExvY2FsUmVnaXN0
ZXJXaXRoUHJlZmVyZW5jZSBleHBlY3RlZFZhbHVlUmVnaXN0ZXIobV9yZWdpc3RlckFsbG9jYXRv
ciwgSlNDOjpHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIG1fYXNzZW1ibGVyLm1vdmUoQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGV4cGVjdGVkVmFsdWUuaW1wbCgpKSwgZXhwZWN0ZWRWYWx1
ZVJlZ2lzdGVyKTsKQEAgLTM0MzQsNyArMzQzNCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxWYWx1ZU1hdGNoaW5nKEFz
CiAgICAgfQogfQogCi12b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50
RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEZ1bmN0
aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiB0ZXN0RnVuY3Rpb24pCit2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IHRl
c3RGdW5jdGlvbikKIHsKICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudEFkZHJlc3Mg
PSBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyOwogICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwo
bV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVu
Y3Rpb25DYWxscyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JD
b21waWxlci5oIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuaAppbmRl
eCAxYjNkN2YxNDAzNTEuLjdiODFlOWM2ZGJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2Vs
ZWN0b3JDb21waWxlci5oCkBAIC01OCwxMCArNTgsMTAgQEAgaW5saW5lIHVuc2lnbmVkIHJ1bGVD
b2xsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIoQ29tcGlsZWRTZWxlY3RvciYgY29tcGlsZWRT
ZWwKICAgICBBU1NFUlQoY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMgPT0gU2VsZWN0b3JDb21waWxh
dGlvblN0YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2VyKTsKICNpZiBDUFUoQVJNNjRFKQogICAg
IGlmIChKU0M6Ok9wdGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgcmV0dXJuIHZtRW50cnlU
b0NTU0pJVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbGVtZW50KSwgYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4odmFsdWUpLCAwLCBjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgICAgICByZXR1cm4gdm1FbnRyeVRvQ1NTSklUKGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KGVsZW1lbnQpLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSks
IDAsIGNvbXBpbGVkU2VsZWN0b3IuY29kZVJlZi5jb2RlKCkudGFnZ2VkUHRyKCkpOwogI2VuZGlm
CiAgICAgdXNpbmcgUnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciA9IHVuc2lnbmVk
KCopKGNvbnN0IEVsZW1lbnQqLCB1bnNpZ25lZCopOwotICAgIHJldHVybiB1bnRhZ0NGdW5jdGlv
blB0cjxSdWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyLCBKU0M6OkNTU1NlbGVjdG9y
UHRyVGFnPihjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKGVsZW1lbnQsIHZhbHVlKTsKKyAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8UnVsZUNv
bGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciwgSlNDOjpDU1NTZWxlY3RvclB0clRhZz4oY29t
cGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS50YWdnZWRQdHIoKSkoZWxlbWVudCwgdmFsdWUp
OwogfQogCiBpbmxpbmUgdW5zaWduZWQgcXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tl
cihDb21waWxlZFNlbGVjdG9yJiBjb21waWxlZFNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVt
ZW50KQpAQCAtNjksMTAgKzY5LDEwIEBAIGlubGluZSB1bnNpZ25lZCBxdWVyeVNlbGVjdG9yU2lt
cGxlU2VsZWN0b3JDaGVja2VyKENvbXBpbGVkU2VsZWN0b3ImIGNvbXBpbGVkU2VsCiAgICAgQVNT
RVJUKGNvbXBpbGVkU2VsZWN0b3Iuc3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcik7CiAjaWYgQ1BVKEFSTTY0RSkKICAgICBpZiAoSlNDOjpP
cHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgIHJldHVybiB2bUVudHJ5VG9DU1NKSVQoYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4oZWxlbWVudCksIDAsIDAsIGNvbXBpbGVkU2VsZWN0b3IuY29k
ZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHJldHVybiB2bUVudHJ5
VG9DU1NKSVQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZWxlbWVudCksIDAsIDAsIGNvbXBpbGVk
U2VsZWN0b3IuY29kZVJlZi5jb2RlKCkudGFnZ2VkUHRyKCkpOwogI2VuZGlmCiAgICAgdXNpbmcg
UXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciA9IHVuc2lnbmVkKCopKGNvbnN0IEVs
ZW1lbnQqKTsKLSAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxlY3RvclNpbXBs
ZVNlbGVjdG9yQ2hlY2tlciwgSlNDOjpDU1NTZWxlY3RvclB0clRhZz4oY29tcGlsZWRTZWxlY3Rv
ci5jb2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShlbGVtZW50KTsKKyAgICByZXR1
cm4gdW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciwg
SlNDOjpDU1NTZWxlY3RvclB0clRhZz4oY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS50
YWdnZWRQdHIoKSkoZWxlbWVudCk7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBydWxlQ29sbGVjdG9y
U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dChDb21waWxlZFNlbGVjdG9yJiBjb21w
aWxlZFNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OkNo
ZWNraW5nQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQqIHZhbHVlKQpAQCAtODAsMTAgKzgwLDEw
IEBAIGlubGluZSB1bnNpZ25lZCBydWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNr
aW5nQ29udGV4dChDb21waWxlZFNlbGVjdG9yCiAgICAgQVNTRVJUKGNvbXBpbGVkU2VsZWN0b3Iu
c3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhD
aGVja2luZ0NvbnRleHQpOwogI2lmIENQVShBUk02NEUpCiAgICAgaWYgKEpTQzo6T3B0aW9uczo6
dXNlSklUQ2FnZSgpKQotICAgICAgICByZXR1cm4gdm1FbnRyeVRvQ1NTSklUKGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KGVsZW1lbnQpLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb250ZXh0KSwg
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpLCBjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYu
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICByZXR1cm4gdm1FbnRyeVRvQ1NT
SklUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVsZW1lbnQpLCBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pihjb250ZXh0KSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpLCBjb21waWxlZFNl
bGVjdG9yLmNvZGVSZWYuY29kZSgpLnRhZ2dlZFB0cigpKTsKICNlbmRpZgogICAgIHVzaW5nIFJ1
bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0ID0gdW5zaWduZWQo
KikoY29uc3QgRWxlbWVudCosIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiwgdW5z
aWduZWQqKTsKLSAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8UnVsZUNvbGxlY3RvclNlbGVj
dG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQsIEpTQzo6Q1NTU2VsZWN0b3JQdHJUYWc+KGNv
bXBpbGVkU2VsZWN0b3IuY29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoZWxlbWVu
dCwgY29udGV4dCwgdmFsdWUpOworICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0cjxSdWxlQ29s
bGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCwgSlNDOjpDU1NTZWxlY3Rv
clB0clRhZz4oY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS50YWdnZWRQdHIoKSkoZWxl
bWVudCwgY29udGV4dCwgdmFsdWUpOwogfQogCiBpbmxpbmUgdW5zaWduZWQgcXVlcnlTZWxlY3Rv
clNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQoQ29tcGlsZWRTZWxlY3RvciYgY29t
cGlsZWRTZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgU2VsZWN0b3JDaGVj
a2VyOjpDaGVja2luZ0NvbnRleHQqIGNvbnRleHQpCkBAIC05MSwxMCArOTEsMTAgQEAgaW5saW5l
IHVuc2lnbmVkIHF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0
KENvbXBpbGVkU2VsZWN0b3IKICAgICBBU1NFUlQoY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMgPT0g
U2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29u
dGV4dCk7CiAjaWYgQ1BVKEFSTTY0RSkKICAgICBpZiAoSlNDOjpPcHRpb25zOjp1c2VKSVRDYWdl
KCkpCi0gICAgICAgIHJldHVybiB2bUVudHJ5VG9DU1NKSVQoYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oZWxlbWVudCksIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvbnRleHQpLCAwLCBjb21waWxl
ZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBy
ZXR1cm4gdm1FbnRyeVRvQ1NTSklUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVsZW1lbnQpLCBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb250ZXh0KSwgMCwgY29tcGlsZWRTZWxlY3Rvci5jb2Rl
UmVmLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAjZW5kaWYKICAgICB1c2luZyBRdWVyeVNlbGVjdG9y
U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCA9IHVuc2lnbmVkKCopKGNvbnN0IEVs
ZW1lbnQqLCBjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCopOwotICAgIHJl
dHVybiB1bnRhZ0NGdW5jdGlvblB0cjxRdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENo
ZWNraW5nQ29udGV4dCwgSlNDOjpDU1NTZWxlY3RvclB0clRhZz4oY29tcGlsZWRTZWxlY3Rvci5j
b2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShlbGVtZW50LCBjb250ZXh0KTsKKyAg
ICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlcldp
dGhDaGVja2luZ0NvbnRleHQsIEpTQzo6Q1NTU2VsZWN0b3JQdHJUYWc+KGNvbXBpbGVkU2VsZWN0
b3IuY29kZVJlZi5jb2RlKCkudGFnZ2VkUHRyKCkpKGVsZW1lbnQsIGNvbnRleHQpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBTZWxlY3RvckNvbXBpbGVyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCmluZGV4IGI5MWY2OGVjMGNjMS4uM2ViZWJhODk0
NTRlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2Nh
dG9yLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9y
LmNwcApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgbV9wYXJlbnQtPmFkZGl0aW9uYWxQYWdlc0luSGVhcCArPSBudW1QYWdlczsKICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZyZWVTcGFjZVB0cjo6bWFrZUZyb21SYXdQ
b2ludGVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZyZWVTcGFjZVB0cjo6ZnJv
bVVudGFnZ2VkUHRyKHJlc3VsdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBkZWZhdWx0Ogo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>461785</attachid>
            <date>2022-08-21 20:42:38 -0700</date>
            <delta_ts>2022-08-21 22:46:40 -0700</delta_ts>
            <desc>EWS testing.</desc>
            <filename>wip-codeptr4.patch</filename>
            <type>text/plain</type>
            <size>363586</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgKaW5kZXggYjgwNTg4YmE3N2Q3Li5mNDUzOWYwOTQzYTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNiBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGU+IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBl
OwogICAgIHR5cGVkZWYgQXNzZW1ibGVyVHlwZSBBc3NlbWJsZXJUeXBlX1Q7CiAKLSAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRh
Zz47CiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVJlZiA9IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjx0YWc+OwogCiAgICAgZW51bSBjbGFzcyBDUFVJRENoZWNrU3RhdGUgewpAQCAt
ODY4LDcgKzg2Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgYVRh
ZywgUHRyVGFnIGJUYWc+Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPGFUYWc+JiBhLCBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8YlRhZz4mIGIpCisgICAgc3RhdGljIHB0cmRpZmZfdCBkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoY29uc3QgQ29kZVB0cjxhVGFnPiYgYSwgY29uc3QgQ29kZVB0cjxiVGFn
PiYgYikKICAgICB7CiAgICAgICAgIHJldHVybiBiLnRlbXBsYXRlIGRhdGFMb2NhdGlvbjxwdHJk
aWZmX3Q+KCkgLSBhLnRlbXBsYXRlIGRhdGFMb2NhdGlvbjxwdHJkaWZmX3Q+KCk7CiAgICAgfQpA
QCAtODkyLDkgKzg5MSw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgotICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxh
YmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiB2YWx1ZSkKKyAgICBzdGF0aWMg
dm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBsYWJlbCwgQ29kZVB0
cjx0YWc+IHZhbHVlKQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIo
Y29kZSwgbGFiZWwsIHZhbHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBBc3NlbWJs
ZXJUeXBlOjpsaW5rUG9pbnRlcihjb2RlLCBsYWJlbCwgdmFsdWUudGFnZ2VkUHRyKCkpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC05MjIsNyArOTIxLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rVGFpbENhbGwobmVhckNhbGwuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXI6Ci0gICAgICAgICAgICBB
c3NlbWJsZXJUeXBlOjpyZWxpbmtDYWxsKG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5h
dGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVy
VHlwZTo6cmVsaW5rQ2FsbChuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udW50
YWdnZWRQdHIoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkzNiw3ICs5MzUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgTmVhckNhbGxNb2RlOjpUYWlsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+KHRhZ0NvZGVQdHI8ZGVzdFRhZz4oQXNzZW1ibGVyVHlwZTo6
cHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXBDb25jdXJyZW50bHkobmVhckNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKSkpOwogICAgICAgICBjYXNlIE5lYXJD
YWxsTW9kZTo6UmVndWxhcjoKLSAgICAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDxk
ZXN0VGFnPih0YWdDb2RlUHRyPGRlc3RUYWc+KEFzc2VtYmxlclR5cGU6OnByZXBhcmVGb3JBdG9t
aWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5h
dGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpKSk7CisgICAgICAgICAgICByZXR1cm4g
Q29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihBc3NlbWJsZXJU
eXBlOjpwcmVwYXJlRm9yQXRvbWljUmVsaW5rQ2FsbENvbmN1cnJlbnRseShuZWFyQ2FsbC5kYXRh
TG9jYXRpb24oKSwgZGVzdGluYXRpb24udW50YWdnZWRQdHIoKSkpKTsKICAgICAgICAgfQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCmluZGV4IDA3NTA0YmEwNGU1OS4u
NzNlMjVmNDk5ZjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0NvZGVMb2NhdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29k
ZUxvY2F0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Miw4ICs0Miw4IEBAIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyOwogdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRp
b25Db252ZXJ0aWJsZUxvYWQ7CiAKIC8vIFRoZSBDb2RlTG9jYXRpb24qIHR5cGVzIGFyZSBhbGwg
cHJldHR5IG11Y2ggZG8tbm90aGluZyB3cmFwcGVycyBhcm91bmQKLS8vIENvZGVQdHIgKG9yIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciwgdG8gZ2l2ZSBpdCBpdHMgZnVsbCBuYW1lKS4gIFRoZXNlCi0v
LyBjbGFzc2VzIG9ubHkgZXhpc3QgdG8gcHJvdmlkZSB0eXBlLXNhZmV0eSB3aGVuIGxpbmtpbmcg
YW5kIHBhdGNoaW5nIGNvZGUuCisvLyBDb2RlUHRyLiBUaGVzZSBjbGFzc2VzIG9ubHkgZXhpc3Qg
dG8gcHJvdmlkZSB0eXBlLXNhZmV0eSB3aGVuIGxpbmtpbmcgYW5kCisvLyBwYXRjaGluZyBjb2Rl
LgogLy8KIC8vIFRoZSBvbmUgbmV3IHBpZWNlIG9mIGZ1bmN0aW9uYWxsaXR5IGludHJvZHVjZWQg
YnkgdGhlc2UgY2xhc3NlcyBpcyB0aGUKIC8vIGFiaWxpdHkgdG8gY3JlYXRlIChvciBwdXQgYW5v
dGhlciB3YXksIHRvIHJlLWRpc2NvdmVyKSBhbm90aGVyIENvZGVMb2NhdGlvbgpAQCAtNTMsOCAr
NTMsOCBAQCB0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9h
ZDsKIC8vIG9uZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgd2Ugd2lsbCB1c2UgdGhlICpBdE9m
ZnNldCBtZXRob2RzIHByb3ZpZGVkIGJ5CiAvLyBDb2RlTG9jYXRpb25Db21tb24gdG8gZmluZCB0
aGUgb3RoZXIgcG9pbnRzIGluIHRoZSBjb2RlIHRvIG1vZGlmeS4KIHRlbXBsYXRlPFB0clRhZyB0
YWc+Ci1jbGFzcyBDb2RlTG9jYXRpb25Db21tb24gOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPHRhZz4gewotICAgIHVzaW5nIEJhc2UgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjsK
K2NsYXNzIENvZGVMb2NhdGlvbkNvbW1vbiA6IHB1YmxpYyBDb2RlUHRyPHRhZz4geworICAgIHVz
aW5nIEJhc2UgPSBDb2RlUHRyPHRhZz47CiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8UHRyVGFnIHJl
c3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb248cmVzdWx0VGFnPiBpbnN0cnVj
dGlvbkF0T2Zmc2V0KGludCBvZmZzZXQpOwogICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcg
PSB0YWc+IENvZGVMb2NhdGlvbkxhYmVsPHJlc3VsdFRhZz4gbGFiZWxBdE9mZnNldChpbnQgb2Zm
c2V0KTsKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8Q29kZUxvY2F0aW9u
Q29tbW9uPHRhZz4sIFQ+Ojp2YWx1ZT4+CiAgICAgb3BlcmF0b3IgVCgpCiAgICAgewotICAgICAg
ICByZXR1cm4gVChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHRoaXMtPmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgcmV0dXJuIFQo
Q29kZVB0cjx0YWc+Ojpmcm9tVGFnZ2VkUHRyKHRoaXMtPnRhZ2dlZFB0cigpKSk7CiAgICAgfQog
CiBwcm90ZWN0ZWQ6CkBAIC04MCw4ICs4MCw4IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQog
Ci0gICAgQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0
aW9uKQotICAgICAgICA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKQorICAg
IENvZGVMb2NhdGlvbkNvbW1vbihDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAgIDogQ29k
ZVB0cjx0YWc+KGxvY2F0aW9uKQogICAgIHsKICAgICB9CiB9OwpAQCAtOTAsMjYgKzkwLDI2IEBA
IHRlbXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbiA6IHB1
YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9u
SW5zdHJ1Y3Rpb24oKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICBleHBsaWNpdCBDb2RlTG9j
YXRpb25JbnN0cnVjdGlvbihDb2RlUHRyPHRhZz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxv
Y2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkluc3RydWN0aW9uKHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CisgICAgICAg
IDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4oQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiB9
OwogCiB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogY2xhc3MgQ29kZUxvY2F0aW9uTGFiZWwgOiBwdWJs
aWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgogICAgIENvZGVMb2NhdGlvbkxh
YmVsKCkgeyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTGFiZWwoQ29k
ZVB0cjx0YWc+IGxvY2F0aW9uKQogICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KGxv
Y2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25MYWJlbCh2b2lkKiBsb2NhdGlv
bikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+
KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1Rh
Zz4KICAgICBDb2RlTG9jYXRpb25MYWJlbDxuZXdUYWc+IHJldGFnZ2VkKCkgeyByZXR1cm4gQ29k
ZUxvY2F0aW9uTGFiZWw8bmV3VGFnPihDb2RlTG9jYXRpb25Db21tb248dGFnPjo6dGVtcGxhdGUg
cmV0YWdnZWQ8bmV3VGFnPigpKTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQq
PgotICAgIFQgdW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIENvZGVM
b2NhdGlvbkNvbW1vbjx0YWc+Ojp0ZW1wbGF0ZSB1bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPFQ+
KCk7IH0KKyAgICBUIHVudGFnZ2VkUHRyKCkgY29uc3QgeyByZXR1cm4gQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz46OnRlbXBsYXRlIHVudGFnZ2VkUHRyPFQ+KCk7IH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQgPSB2b2lkKj4KICAgICBUIGRhdGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIENv
ZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojp0ZW1wbGF0ZSBkYXRhTG9jYXRpb248VD4oKTsgfQpAQCAt
MTE5LDIzICsxMTksMjMgQEAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KIGNsYXNzIENvZGVMb2NhdGlv
bkp1bXAgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgogICAgIENv
ZGVMb2NhdGlvbkp1bXAoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkp1bXAoQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQogICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKHZvaWQq
IGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz4oQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiAKICAgICB0ZW1wbGF0ZTxQdHJU
YWcgbmV3VGFnPgotICAgIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPiByZXRhZ2dlZCgpIHsgcmV0
dXJuIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6
dGVtcGxhdGUgcmV0YWdnZWQ8bmV3VGFnPigpKTsgfQorICAgIENvZGVMb2NhdGlvbkp1bXA8bmV3
VGFnPiByZXRhZ2dlZCgpIHsgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPihDb2RlUHRy
PHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0KIH07CiAKIHRlbXBsYXRlPFB0
clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25DYWxsIDogcHVibGljIENvZGVMb2NhdGlvbkNv
bW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25DYWxsKCkgeyB9Ci0gICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlv
bikKKyAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25DYWxsKENvZGVQdHI8dGFnPiBsb2NhdGlvbikK
ICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uQ2FsbCh2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9j
YXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsg
fQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8dGFnPihsb2NhdGlv
bikpIHsgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KICAgICBDb2RlTG9jYXRpb25D
YWxsPG5ld1RhZz4gcmV0YWdnZWQoKSB7IHJldHVybiBDb2RlTG9jYXRpb25DYWxsPG5ld1RhZz4o
Q29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0K
QEAgLTE0NSwxMCArMTQ1LDEwIEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9j
YXRpb25OZWFyQ2FsbCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6
CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRp
b25OZWFyQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbiwgTmVhckNhbGxN
b2RlIGNhbGxNb2RlKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbk5lYXJDYWxsKENvZGVQdHI8
dGFnPiBsb2NhdGlvbiwgTmVhckNhbGxNb2RlIGNhbGxNb2RlKQogICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSwgbV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CiAgICAg
ZXhwbGljaXQgQ29kZUxvY2F0aW9uTmVhckNhbGwodm9pZCogbG9jYXRpb24sIE5lYXJDYWxsTW9k
ZSBjYWxsTW9kZSkKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpLCBtX2NhbGxNb2RlKGNhbGxNb2RlKSB7IH0KKyAg
ICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihDb2RlUHRyPHRhZz4obG9jYXRpb24pKSwg
bV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CiAgICAgTmVhckNhbGxNb2RlIGNhbGxNb2RlKCkgeyBy
ZXR1cm4gbV9jYWxsTW9kZTsgfQogcHJpdmF0ZToKICAgICBOZWFyQ2FsbE1vZGUgbV9jYWxsTW9k
ZSB7IE5lYXJDYWxsTW9kZTo6UmVndWxhciB9OwpAQCAtMTU4LDQwICsxNTgsNDAgQEAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KIGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVibGljIENv
ZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWwzMigpIHsgfQotICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyKENvZGVQdHI8dGFnPiBsb2NhdGlvbikKICAgICAgICAgOiBDb2RlTG9jYXRpb25D
b21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsMzIodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KKyAgICAgICAgOiBDb2Rl
TG9jYXRpb25Db21tb248dGFnPihDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KIH07CiAKIHRl
bXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IDog
cHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxDb21wYWN0KCkgeyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsQ29tcGFjdChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICBleHBs
aWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0KENvZGVQdHI8dGFnPiBsb2NhdGlvbikK
ICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCh2b2lkKiBsb2NhdGlvbikKLSAgICAg
ICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihs
b2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8
dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KIGNsYXNzIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7
CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKCkgeyB9Ci0gICAgZXhwbGlj
aXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxv
Y2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cihDb2RlUHRyPHRh
Zz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24p
IHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cih2b2lkKiBsb2NhdGlv
bikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+
KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4K
IGNsYXNzIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCA6IHB1YmxpYyBDb2RlTG9jYXRpb25D
b21tb248dGFnPiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKCkg
eyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNvbnZl
cnRpYmxlTG9hZChDb2RlUHRyPHRhZz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxvY2F0aW9u
Q29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNvbnZl
cnRpYmxlTG9hZCh2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248
dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6
IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsK
IAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuY3BwCmluZGV4IDI3NmVlNmMwOTQzOS4uNDIwN2NlMDllNzQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKQEAgLTY1
LDcgKzY1LDcgQEAgTGlua0J1ZmZlcjo6Q29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBMaW5rQnVm
ZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXAKICAgICAgICAgdmFfc3RhcnQoYXJn
TGlzdCwgZm9ybWF0KTsKICAgICAgICAgb3V0LnZwcmludGYoZm9ybWF0LCBhcmdMaXN0KTsKICAg
ICAgICAgdmFfZW5kKGFyZ0xpc3QpOwotICAgICAgICBQZXJmTG9nOjpsb2cob3V0LnRvQ1N0cmlu
ZygpLCByZXN1bHQuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Y29uc3QgdWludDhf
dCo+KCksIHJlc3VsdC5zaXplKCkpOworICAgICAgICBQZXJmTG9nOjpsb2cob3V0LnRvQ1N0cmlu
ZygpLCByZXN1bHQuY29kZSgpLnVudGFnZ2VkUHRyPGNvbnN0IHVpbnQ4X3QqPigpLCByZXN1bHQu
c2l6ZSgpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtOTAsMTQgKzkwLDE0IEBAIExpbmtCdWZmZXI6
OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERp
c2Fzc2VtYmx5SW1wCiAgICAgICAgIHZzbnByaW50ZihidWZmZXIgKyBzaXplb2YocHJlZml4KSAt
IDEsIHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7CiAgICAgICAgIG91dC5wcmlu
dGYoIiVzIiwgYnVmZmVyKTsKIAotICAgICAgICByZWdpc3RlckxhYmVsKHJlc3VsdC5jb2RlKCku
dW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLCBXVEZNb3ZlKGxhYmVsKSk7CisgICAgICAgIHJl
Z2lzdGVyTGFiZWwocmVzdWx0LmNvZGUoKS51bnRhZ2dlZFB0cigpLCBXVEZNb3ZlKGxhYmVsKSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIG91dC52cHJpbnRmKGZvcm1hdCwgYXJnTGlzdCk7CiAKICAg
ICB2YV9lbmQoYXJnTGlzdCk7CiAgICAgb3V0LnByaW50ZigiOlxuIik7CiAKLSAgICB1aW50OF90
KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRk
cmVzczx1aW50OF90Kj4oKTsKKyAgICB1aW50OF90KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlc3Vs
dC5jb2RlKCkudW50YWdnZWRQdHI8dWludDhfdCo+KCk7CiAgICAgb3V0LnByaW50ZigiICAgIENv
ZGUgYXQgWyVwLCAlcCklc1xuIiwgZXhlY3V0YWJsZUFkZHJlc3MsIGV4ZWN1dGFibGVBZGRyZXNz
ICsgcmVzdWx0LnNpemUoKSwganVzdER1bXBpbmdIZWFkZXIgPyAiLiIgOiAiOiIpOwogICAgIAog
ICAgIENTdHJpbmcgaGVhZGVyID0gb3V0LnRvQ1N0cmluZygpOwpAQCAtMTA4LDcgKzEwOCw3IEBA
IExpbmtCdWZmZXI6OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxp
emVDb2RlV2l0aERpc2Fzc2VtYmx5SW1wCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIAotICAgIHZvaWQqIGNvZGVTdGFydCA9IGVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+
KCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGNvZGVTdGFydCA9IGVu
dHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50YWdnZWRQdHIoKTsKICAgICB2b2lkKiBj
b2RlRW5kID0gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb2RlU3RhcnQpICsgc2l6ZSgpOwogCiAg
ICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSkgewpAQCAtNDY3LDcgKzQ2Nyw3IEBA
IHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVy
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlCiAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIGVmZm9ydCk7
CiAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Nv
ZGUgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9leGVjdXRhYmxl
TWVtb3J5LT5zdGFydCgpLnJldGFnZ2VkUHRyPExpbmtCdWZmZXJQdHJUYWc+KCkpOworICAgIG1f
Y29kZSA9IENvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9leGVjdXRhYmxlTWVtb3J5LT5zdGFy
dCgpLnJldGFnZ2VkUHRyPExpbmtCdWZmZXJQdHJUYWc+KCkpOwogICAgIG1fc2l6ZSA9IGluaXRp
YWxTaXplOwogICAgIG1fZGlkQWxsb2NhdGUgPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCBmOWNmM2ZmZmQwOTguLmMzY2VkNTVj
N2U3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgK
QEAgLTYwLDcgKzYwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBMaW5rQnVmZmVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShMaW5rQnVmZmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVB0ciA9IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+OwogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IHVzaW5nIENv
ZGVSZWYgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPjsKICAgICB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBMYWJlbDsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpKdW1wIEp1
bXA7CkBAIC0xMjcsNyArMTI2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0
clRhZyB0YWc+Ci0gICAgTGlua0J1ZmZlcihNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNvZGUsIHNpemVfdCBzaXplLCBQcm9maWxlIHBy
b2ZpbGUgPSBQcm9maWxlOjpVbmNhdGVnb3JpemVkLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQgPSBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZvcm1CcmFuY2hD
b21wYWN0aW9uID0gdHJ1ZSkKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fz
c2VtYmxlciwgQ29kZVB0cjx0YWc+IGNvZGUsIHNpemVfdCBzaXplLCBQcm9maWxlIHByb2ZpbGUg
PSBQcm9maWxlOjpVbmNhdGVnb3JpemVkLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0
aW9uID0gdHJ1ZSkKICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAgICAgLCBtX2RpZEFsbG9j
YXRlKGZhbHNlKQogI2lmbmRlZiBOREVCVUcKQEAgLTE3MiwxMiArMTcxLDEyIEBAIHB1YmxpYzoK
ICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19mdW5jdGlvbjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVy
PEZ1bmM+Ojp0eXBlPjo6dmFsdWU+PgogICAgIHZvaWQgbGluayhDYWxsIGNhbGwsIEZ1bmMgZnVu
Y05hbWUpCiAgICAgewotICAgICAgICBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKGZ1bmNOYW1l
KTsKKyAgICAgICAgQ29kZVB0cjx0YWc+IGZ1bmN0aW9uKGZ1bmNOYW1lKTsKICAgICAgICAgbGlu
ayhjYWxsLCBmdW5jdGlvbik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAg
ICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQorICAgIHZv
aWQgbGluayhDYWxsIGNhbGwsIENvZGVQdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAg
IEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOwogICAgICAgICBjYWxsLm1f
bGFiZWwgPSBhcHBseU9mZnNldChjYWxsLm1fbGFiZWwpOwpAQCAtMTg3LDcgKzE4Niw3IEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogICAgIHZvaWQgbGluayhDYWxsIGNhbGws
IENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbGFiZWwpCiAgICAgewotICAgICAgICBsaW5rKGNhbGws
IGxhYmVsLnRvRnVuY3Rpb25QdHIoKSk7CisgICAgICAgIGxpbmsoY2FsbCwgQ29kZVB0cjx0YWc+
KGxhYmVsKSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC00MjMs
NyArNDIyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYWxyZWFkeURpc2Fzc2VtYmxlZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX2lzVGh1bmsgeyBmYWxzZSB9OwogICAgIFByb2ZpbGUgbV9wcm9m
aWxlIHsgUHJvZmlsZTo6VW5jYXRlZ29yaXplZCB9OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CisgICAgQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFn
PiBtX2NvZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYp
Pj4+IG1fbGlua1Rhc2tzOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtC
dWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoKT4+PiBtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXgg
NGM0YTA1YWE0N2JmLi5lYTY3NjU3NjkwYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0zOTUwLDEwICszOTUw
LDEwIEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIENhbGwgY2FsbChSZWdpc3RlcklEIHRh
cmdldCwgUmVnaXN0ZXJJRCBjYWxsVGFnKSB7IHJldHVybiBVTlVTRURfUEFSQU0oY2FsbFRhZyks
IGNhbGwodGFyZ2V0LCBOb1B0clRhZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIENhbGwgY2FsbChB
ZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgY2FsbFRhZykgeyByZXR1cm4gVU5VU0VEX1BBUkFN
KGNhbGxUYWcpLCBjYWxsKGFkZHJlc3MsIE5vUHRyVGFnKTsgfQogCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3QgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBv
cGVyYXRpb24pCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3QgQ29k
ZVB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKICAgICB7CiAgICAgICAgIGF1dG8gdG1w
ID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIob3BlcmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCB0bXApOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIob3BlcmF0aW9uLnRhZ2dlZFB0cigpKSwgdG1wKTsK
ICAgICAgICAgY2FsbCh0bXAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgfQogCkBAIC00NjQxLDkg
KzQ2NDEsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRh
ZywgUHRyVGFnIGxvY2F0aW9uVGFnPgotICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+
IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCisgICAg
c3RhdGljIENvZGVQdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxs
PGxvY2F0aW9uVGFnPiBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxyZXN1bHRUYWc+KEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9j
YXRpb24oKSkpLnRvRnVuY3Rpb25QdHIoKTsKKyAgICAgICAgcmV0dXJuIENvZGVQdHI8cmVzdWx0
VGFnPihBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKTsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgpAQCAtNDcxOSwxMyArNDcxOSwxMyBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgogICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwg
Q29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBB
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQQVRD
SF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2Fs
bC5kYXRhTGFiZWxQdHJBdE9mZnNldChSRVBBVENIX09GRlNFVF9DQUxMX1RPX1BPSU5URVIpLmRh
dGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgotICAgIHN0YXRpYyB2b2lkIHJl
cGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVz
dFRhZz4gZGVzdGluYXRpb24pCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAg
IHsKLSAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0YUxvY2F0aW9uKCksIGRl
c3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBBc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9U
T19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udGFnZ2VkUHRyKCkpOwogICAg
IH0KIAogICAgIEpTQ19PUEVSQVRJT05fVkFMSURBVElPTl9NQUNST0FTU0VNQkxFUl9BUk02NF9T
VVBQT1JUKCk7CkBAIC01Mzc4LDE0ICs1Mzc4LDE0IEBAIHByb3RlY3RlZDoKICAgICBmcmllbmQg
Y2xhc3MgTGlua0J1ZmZlcjsKIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgc3RhdGlj
IHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1
bmN0aW9uKQorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwg
Q29kZVB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYgKCFjYWxsLmlzRmxhZ1Nl
dChDYWxsOjpOZWFyKSkKLSAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwg
Y2FsbC5tX2xhYmVsLmxhYmVsQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVS
KSwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtQb2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KFJFUEFUQ0hfT0ZG
U0VUX0NBTExfVE9fUE9JTlRFUiksIGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxz
ZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udW50YWdnZWRFeGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5t
X2xhYmVsLCBmdW5jdGlvbi51bnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnVudGFn
Z2VkRXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtDYWxs
KGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udW50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29sbGVjdENQVUZlYXR1cmVzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmgKaW5kZXggMmY0NTYwZDViNzdhLi43NGRjYTA4MzU1YWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yMzksMTAgKzIzOSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGwoZGF0YVRlbXBSZWdp
c3RlciwgdGFnKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlv
bihjb25zdCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlvbihjb25zdCBDb2RlUHRyPE9wZXJhdGlvblB0clRh
Zz4gb3BlcmF0aW9uKQogICAgIHsKICAgICAgICAgYXV0byB0bXAgPSBnZXRDYWNoZWREYXRhVGVt
cFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihv
cGVyYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIHRtcCk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihvcGVyYXRpb24udGFnZ2VkUHRyKCkpLCB0bXApOwogICAgICAgICBjYWxsKHRtcCwg
T3BlcmF0aW9uUHRyVGFnKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKaW5kZXggMDBiOGVkNjg5MWU0Li5m
YzdjOTIyZjk3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjMzNiw5ICsyMzM2LDkgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgQ2FsbCBjYWxs
KFJlZ2lzdGVySUQgdGFyZ2V0LCBSZWdpc3RlcklEIGNhbGxUYWcpIHsgcmV0dXJuIFVOVVNFRF9Q
QVJBTShjYWxsVGFnKSwgY2FsbCh0YXJnZXQsIE5vUHRyVGFnKTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBjYWxsVGFnKSB7IHJldHVy
biBVTlVTRURfUEFSQU0oY2FsbFRhZyksIGNhbGwoYWRkcmVzcywgTm9QdHJUYWcpOyB9CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlvbihjb25zdCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJh
dGlvbihjb25zdCBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gb3BlcmF0aW9uKQogICAgIHsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwg
YWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihvcGVyYXRp
b24udGFnZ2VkUHRyKCkpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKICAgICAgICAgY2FsbChhZGRy
ZXNzVGVtcFJlZ2lzdGVyLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIH0KIApAQCAtMjUwOSw5ICsy
NTA5LDkgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgRGF0YUxhYmVsUHRyIHN0b3JlUHRy
V2l0aFBhdGNoKEFkZHJlc3MgYWRkcmVzcykgeyByZXR1cm4gc3RvcmVQdHJXaXRoUGF0Y2goVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgYWRkcmVzcyk7IH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyBy
ZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4KLSAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVz
dWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxs
KQorICAgIHN0YXRpYyBDb2RlUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0
aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlv
blB0cjxyZXN1bHRUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihBUk12N0Fzc2VtYmxl
cjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgcmV0dXJu
IENvZGVQdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3Nl
bWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CiAgICAgfQogICAg
IAogICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI1NjQsMTMgKzI1NjQsMTMgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KICAgICBzdGF0aWMg
dm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2Nh
dGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgQVJNdjdBc3Nl
bWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFSTXY3QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwu
ZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLnRhZ2dlZFB0cigpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+Ci0gICAgc3RhdGljIHZvaWQg
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxk
ZXN0VGFnPiBkZXN0aW5hdGlvbikKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVQdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAg
ICAgewotICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlv
bigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgQVJNdjdBc3Nl
bWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udGFnZ2Vk
UHRyKCkpOwogICAgIH0KIAogcHJvdGVjdGVkOgpAQCAtMjcyMSwxNCArMjcyMSwxNCBAQCBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogCiAgICAgdGVtcGxhdGU8UHRyVGFn
IHRhZz4KLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1
bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCog
Y29kZSwgQ2FsbCBjYWxsLCBDb2RlUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBp
ZiAoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKQotICAgICAgICAgICAgQXNzZW1ibGVyOjps
aW5rUG9pbnRlcihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldCgtMiksIGZ1bmN0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rUG9pbnRl
cihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldCgtMiksIGZ1bmN0aW9uLnRhZ2dlZFB0
cigpKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAg
ICAgICAgICBBc3NlbWJsZXI6OmxpbmtUYWlsQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rVGFp
bENhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVs
LCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6
bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAgICAg
fQogCiAgICAgYm9vbCBtX21ha2VKdW1wUGF0Y2hhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCmluZGV4
IGYzNWM1NTkwODNmMC4uNGMwZTkwYjM0YWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCkBAIC0zNSwz
MCArMzUsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyQmFzZTo6ZHVtcFdpdGhOYW1lKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCB2b2lkKiBkYXRh
TG9jYXRpb24sIGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpCi17Ci0gICAgaWYg
KCFleGVjdXRhYmxlQWRkcmVzcykgewotICAgICAgICBvdXQucHJpbnQobmFtZSwgIihudWxsKSIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcyA9PSBk
YXRhTG9jYXRpb24pIHsKLSAgICAgICAgb3V0LnByaW50KG5hbWUsICIoIiwgUmF3UG9pbnRlcihl
eGVjdXRhYmxlQWRkcmVzcyksICIpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0
LnByaW50KG5hbWUsICIoZXhlY3V0YWJsZSA9ICIsIFJhd1BvaW50ZXIoZXhlY3V0YWJsZUFkZHJl
c3MpLCAiLCBkYXRhTG9jYXRpb24gPSAiLCBSYXdQb2ludGVyKGRhdGFMb2NhdGlvbiksICIpIik7
Ci19Ci0KLWJvb2wgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6dHJ5VG9EaXNhc3NlbWJsZShN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+IGNvZGVQdHIsIHNpemVfdCBz
aXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCitib29sIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZkJhc2U6OnRyeVRvRGlzYXNzZW1ibGUoQ29kZVB0cjxEaXNhc3NlbWJseVB0
clRhZz4gY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJl
YW0mIG91dCkKIHsKICAgICByZXR1cm4gSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIsIHNp
emUsIHByZWZpeCwgb3V0KTsKIH0KIAotYm9vbCBNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjp0
cnlUb0Rpc2Fzc2VtYmxlKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4g
Y29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCkKK2Jvb2wgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmQmFzZTo6dHJ5VG9EaXNhc3NlbWJsZShDb2RlUHRyPERpc2Fzc2VtYmx5UHRy
VGFnPiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4KQogewogICAgIHJl
dHVybiB0cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIsIHNpemUsIHByZWZpeCwgV1RGOjpkYXRhRmls
ZSgpKTsKIH0KIAotQ1N0cmluZyBNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjpkaXNhc3NlbWJs
eShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+IGNvZGVQdHIsIHNpemVf
dCBzaXplKQorQ1N0cmluZyBNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjpkaXNhc3NlbWJseShD
b2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBT
dHJpbmdQcmludFN0cmVhbSBvdXQ7CiAgICAgaWYgKCF0cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIs
IHNpemUsICIiLCBvdXQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKaW5kZXggZmMyOGY2YTc0ZWZkLi5hNDk1MjQy
ZGUwNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaApAQCAtMjcsMjYgKzI3LDIwIEBACiAKICNpbmNsdWRlICJF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlLmgiCiAjaW5jbHVkZSAiSlNDUHRyVGFnLmgiCisjaW5jbHVk
ZSA8d3RmL0NvZGVQdHIuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLS8vIEFTU0VS
VF9WQUxJRF9DT0RFX1BPSU5URVIgY2hlY2tzIHRoYXQgcHRyIGlzIGEgbm9uLW51bGwgcG9pbnRl
ciwgYW5kIHRoYXQgaXQgaXMgYSB2YWxpZAotLy8gaW5zdHJ1Y3Rpb24gYWRkcmVzcyBvbiB0aGUg
cGxhdGZvcm0gKGZvciBleGFtcGxlLCBjaGVjayBhbnkgYWxpZ25tZW50IHJlcXVpcmVtZW50cyku
CiAjaWYgQ1BVKEFSTV9USFVNQjIpICYmIEVOQUJMRShKSVQpCiAvLyBBUk0gaW5zdHJ1Y3Rpb25z
IG11c3QgYmUgMTYtYml0IGFsaWduZWQuIFRodW1iMiBjb2RlIHBvaW50ZXJzIHRvIGJlIGxvYWRl
ZCBpbnRvCiAvLyBpbnRvIHRoZSBwcm9jZXNzb3IgYXJlIGRlY29yYXRlZCB3aXRoIHRoZSBib3R0
b20gYml0IHNldCwgd2hpbGUgdHJhZGl0aW9uYWwgQVJNIGhhcwogLy8gdGhlIGxvd2VyIGJpdCBj
bGVhci4gU2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb2YgcG9pbnRlciwgd2UgY2hlY2sg
Zm9yIGJvdGgKIC8vIGRlY29yYXRlZCBhbmQgdW5kZWNvcmF0ZWQgbnVsbC4KLSNkZWZpbmUgQVNT
RVJUX1ZBTElEX0NPREVfUE9JTlRFUihwdHIpIFwKLSAgICBBU1NFUlQocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4ocHRyKSAmIH4xKQogI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9PRkZTRVQo
b2Zmc2V0KSBcCiAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMSkpIC8vIE11c3QgYmUgbXVsdGlwbGUg
b2YgMi4KICNlbHNlCi0jZGVmaW5lIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIocHRyKSBcCi0g
ICAgQVNTRVJUKHB0cikKICNkZWZpbmUgQVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VUKG9mZnNldCkg
Ly8gQW55dGhpbmcgZ29lcyEKICNlbmRpZgogCkBAIC01Nyw3ICs1MSw2IEBAIGVudW0gY2xhc3Mg
Q29tcGlsYXRpb25Nb2RlIDogdWludDhfdDsKIH0gLy8gbmFtZXNwYWNlIFdhc20KIAogY2xhc3Mg
Q29kZUJsb2NrOwotdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7
CiAKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIApAQCAtMTA1LDE2NiArOTgsNiBAQCBwcml2
YXRlOgogICAgIGNvbnN0IHZvaWQqIG1fdmFsdWUgeyBudWxscHRyIH07CiB9OwogCi0vLyBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6Ci0vLwotLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNob3VsZCBi
ZSB1c2VkIHRvIHdyYXAgcG9pbnRlcnMgdG8gSklUIGdlbmVyYXRlZCBjb2RlLgotY2xhc3MgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyQmFzZSB7Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgZHVt
cFdpdGhOYW1lKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCB2b2lkKiBkYXRhTG9jYXRpb24sIGNv
bnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpOwotfTsKLQotLy8gRklYTUU6IE1ha2Ug
SlNDIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbmplcml0IGZyb20gTWV0YUFsbG9jYXRvclB0ci4K
LS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUxNDUKLXRlbXBs
YXRlPFB0clRhZyB0YWc+Ci1jbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgOiBwcml2YXRlIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgewotcHVibGljOgotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cigpID0gZGVmYXVsdDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoc3RkOjpudWxscHRy
X3QpIDogbV92YWx1ZShudWxscHRyKSB7IH0KLQotICAgIGV4cGxpY2l0IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cihjb25zdCB2b2lkKiB2YWx1ZSkKLSNpZiBDUFUoQVJNX1RIVU1CMikKLSAgICAgICAg
Ly8gRGVjb3JhdGUgdGhlIHBvaW50ZXIgYXMgYSB0aHVtYiBjb2RlIHBvaW50ZXIuCi0gICAgICAg
IDogbV92YWx1ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSkgKyAxKQotI2Vs
c2UKLSAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotI2VuZGlmCi0gICAgewotICAgICAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGg8dGFnPih2YWx1ZSk7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0jaWYg
Q1BVKEFSTV9USFVNQjIpCi0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pih2YWx1ZSkgJiAxKSk7Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9J
TlRFUihtX3ZhbHVlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhjb25zdCB2b2lkKiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIo
dmFsdWUpOwotICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8dGFnPih2YWx1ZSk7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
dmFsdWU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKFJldHVybkFkZHJlc3NQdHIgcmEpCi0gICAgICAgIDogbV92YWx1
ZShyZXRhZ0NvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZywgdGFnPihyYS52YWx1ZSgpKSkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChyYS51bnRhZ2dlZFZhbHVlKCkpOwotICAgICAgICBBU1NFUlRf
VkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPFB0clRh
ZyBuZXdUYWc+Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPG5ld1RhZz4gcmV0YWdnZWQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3ZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+KCk7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8bmV3VGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnZ2Vk
RXhlY3V0YWJsZUFkZHJlc3M8bmV3VGFnPigpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUID0gdm9pZCo+Ci0gICAgVCBleGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KG1fdmFsdWUpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KLSAgICBUIHVudGFnZ2VkRXhlY3V0YWJsZUFkZHJl
c3MoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHVudGFnQ29kZVB0cjxULCB0YWc+KG1f
dmFsdWUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPFB0clRhZyBuZXdUYWcsIHR5cGVuYW1lIFQg
PSB2b2lkKj4KLSAgICBUIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIHJldGFnQ29kZVB0cjxULCB0YWcsIG5ld1RhZz4obV92YWx1ZSk7Ci0g
ICAgfQotCi0jaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgLy8gVG8gdXNlIHRoaXMgcG9pbnRlciBh
cyBhIGRhdGEgYWRkcmVzcyByZW1vdmUgdGhlIGRlY29yYXRpb24uCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCA9IHZvaWQqPgotICAgIFQgZGF0YUxvY2F0aW9uKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7Ci0gICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8VD4obV92YWx1ZSA/IGJpdHdpc2VfY2FzdDxjaGFyKj4obV92YWx1ZSkgLSAx
IDogbnVsbHB0cik7Ci0gICAgfQotI2Vsc2UKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9p
ZCo+Ci0gICAgVCBkYXRhTG9jYXRpb24oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUX1ZB
TElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHVudGFnQ29kZVB0cjxU
LCB0YWc+KG1fdmFsdWUpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3ZhbHVlOwotICAgIH0KLSAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKnRoaXMpOyB9Ci0gICAgCi0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgb3RoZXIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOwotICAgIH0K
LQotICAgIC8vIERpc2FsbG93IGFueSBjYXN0aW5nIG9wZXJhdGlvbnMgKGV4Y2VwdCBmb3IgYm9v
bGVhbnMpLiBJbnN0ZWFkLCB0aGUgY2xpZW50Ci0gICAgLy8gc2hvdWxkIGJlIGFza2luZyBleGVj
dXRhYmxlQWRkcmVzcygpIGV4cGxpY2l0bHkuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgYm9vbD46OnZhbHVlICYm
ICFzdGQ6OmlzX3NhbWU8VCwgRnVuY3Rpb25QdHI8dGFnPj46OnZhbHVlPj4KLSAgICBvcGVyYXRv
ciBUKCkgPSBkZWxldGU7Ci0KLSAgICBGdW5jdGlvblB0cjx0YWc+IHRvRnVuY3Rpb25QdHIoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHRhZz46OmZyb21BbHJlYWR5
VGFnZ2VkUG9pbnRlcihleGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICB9Ci0KLSAgICBvcGVyYXRv
ciBGdW5jdGlvblB0cjx0YWc+KCkgY29uc3QgeyByZXR1cm4gdG9GdW5jdGlvblB0cigpOyB9Ci0K
LSAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0
KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1fdmFsdWUpCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGF0
YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShudWxscHRyLCBudWxscHRyLCBuYW1l
LCBvdXQpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdCB7
IGR1bXBXaXRoTmFtZSgiQ29kZVB0ciIsIG91dCk7IH0KLQotICAgIGVudW0gRW1wdHlWYWx1ZVRh
ZyB7IEVtcHR5VmFsdWUgfTsKLSAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1
ZSB9OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cihFbXB0eVZhbHVlVGFnKQotICAg
ICAgICA6IG1fdmFsdWUoZW1wdHlWYWx1ZSgpKQotICAgIHsgfQotICAgIAotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cihEZWxldGVkVmFsdWVUYWcpCi0gICAgICAgIDogbV92YWx1ZShkZWxldGVk
VmFsdWUoKSkKLSAgICB7IH0KLSAgICAKLSAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUgPT0gZW1wdHlWYWx1ZSgpOyB9Ci0gICAgYm9vbCBpc0RlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gZGVsZXRlZFZhbHVlKCk7IH0KLQotICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBQdHJIYXNoPGNvbnN0IHZvaWQqPjo6aGFzaCht
X3ZhbHVlKTsgfQotCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotCi1wcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdCB2b2lkKiBlbXB0eVZhbHVlKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOyB9Ci0gICAgc3RhdGljIGNvbnN0IHZv
aWQqIGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KDIpKTsgfQotCi0gICAgY29uc3Qgdm9pZCogbV92YWx1ZSB7IG51bGxwdHIg
fTsKLX07Ci0KLXRlbXBsYXRlPFB0clRhZyB0YWc+Ci1zdHJ1Y3QgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRySGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPHRhZz4mIHB0cikgeyByZXR1cm4gcHRyLmhhc2goKTsgfQotICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+JiBhLCBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8dGFnPiYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0g
ICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IHRydWU7Ci19OwotCiAvLyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6CiAvLwogLy8gQSBy
ZWZlcmVuY2UgdG8gYSBzZWN0aW9uIG9mIEpJVCBnZW5lcmF0ZWQgY29kZS4gIEEgQ29kZVJlZiBj
b25zaXN0cyBvZiBhCkBAIC0yNzIsOSArMTA1LDkgQEAgc3RydWN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ckhhc2ggewogLy8gd2FzIGFsbG9jYXRlZC4KIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZkJhc2UgewogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBib29sIHRyeVRvRGlzYXNzZW1ibGUoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiwgc2l6ZV90LCBjb25zdCBjaGFy
KiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpOwotICAgIHN0YXRpYyBib29sIHRyeVRvRGlzYXNz
ZW1ibGUoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiwgc2l6ZV90LCBj
b25zdCBjaGFyKiBwcmVmaXgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDU3RyaW5n
IGRpc2Fzc2VtYmx5KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4sIHNp
emVfdCk7CisgICAgc3RhdGljIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShDb2RlUHRyPERpc2Fzc2Vt
Ymx5UHRyVGFnPiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQp
OworICAgIHN0YXRpYyBib29sIHRyeVRvRGlzYXNzZW1ibGUoQ29kZVB0cjxEaXNhc3NlbWJseVB0
clRhZz4sIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4KTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgQ1N0cmluZyBkaXNhc3NlbWJseShDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiwg
c2l6ZV90KTsKIH07CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC0yODIsNyArMTE1LDcgQEAg
Y2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWZCYXNlIHsKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyBwcml2YXRlIGJlY2F1c2UgaXQncyBk
YW5nZXJvdXMgZW5vdWdoIHRoYXQgd2Ugd2FudCB1c2VzIG9mIGl0CiAgICAgLy8gdG8gYmUgZWFz
eSB0byBmaW5kIC0gaGVuY2UgdGhlIHN0YXRpYyBjcmVhdGUgbWV0aG9kIGJlbG93LgotICAgIGV4
cGxpY2l0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBj
b2RlUHRyKQorICAgIGV4cGxpY2l0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZihDb2RlUHRyPHRhZz4g
Y29kZVB0cikKICAgICAgICAgOiBtX2NvZGVQdHIoY29kZVB0cikKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2NvZGVQdHIpOwpAQCAtMzAyLDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0
ZTxQdHJUYWcgb3RoZXJUYWc+CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBvcGVyYXRvcj0o
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPG90aGVyVGFnPiYgb3RoZXJDb2RlUmVmKQogICAg
IHsKLSAgICAgICAgbV9jb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhvdGhlckNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFn
Z2VkRXhlY3V0YWJsZUFkZHJlc3M8dGFnPigpKTsKKyAgICAgICAgbV9jb2RlUHRyID0gQ29kZVB0
cjx0YWc+Ojpmcm9tVGFnZ2VkUHRyKG90aGVyQ29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdn
ZWRQdHI8dGFnPigpKTsKICAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gb3RoZXJDb2RlUmVm
Lm1fZXhlY3V0YWJsZU1lbW9yeTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTMx
MCw3ICsxNDMsNyBAQCBwdWJsaWM6CiAgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93
IHRoYXQgdGhlIGNvZGVQdHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcwogICAgIC8vIGFscmVhZHkg
YmVpbmcga2VwdCBhbGl2ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlz
IG1lYW5zCiAgICAgLy8gdGhhdCBjb2RlUHRyIGlzIGltbW9ydGFsLgotICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjx0YWc+IGNvZGVQdHIpCisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoQ29kZVB0cjx0YWc+IGNvZGVQdHIpCiAgICAgewogICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKGNvZGVQdHIpOwogICAgIH0KQEAgLTMy
MCwxMyArMTUzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZU1lbW9y
eS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gY29k
ZSgpIGNvbnN0CisgICAgQ29kZVB0cjx0YWc+IGNvZGUoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fY29kZVB0cjsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFnPgot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+IHJldGFnZ2VkQ29kZSgpIGNvbnN0Cisg
ICAgQ29kZVB0cjxuZXdUYWc+IHJldGFnZ2VkQ29kZSgpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9jb2RlUHRyLnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKTsKICAgICB9CkBAIC0z
NzUsNyArMjA4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgKnRoaXMgPSBvdGhlckNvZGVSZWY7CiAg
ICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbV9jb2RlUHRyOworICAgIENv
ZGVQdHI8dGFnPiBtX2NvZGVQdHI7CiAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IG1fZXhlY3V0YWJsZU1lbW9yeTsKIAogICAgIHRlbXBsYXRlPFB0clRhZz4gZnJpZW5kIGNsYXNz
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKQEAgLTM4NSwxMyArMjE4LDMgQEAgYm9vbCBzaG91bGRE
dW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7CiBib29sIHNob3VsZER1bXBEaXNhc3NlbWJs
eUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKLQotbmFt
ZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsK
LXRlbXBsYXRlPEpTQzo6UHRyVGFnIHRhZz4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6TWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4+IDogSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoPHRh
Zz4geyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKLXRlbXBs
YXRlPEpTQzo6UHRyVGFnIHRhZz4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8dGFnPj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxKU0M6Ok1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+PiB7IH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKaW5kZXgg
NDg4ODU4NDYwYjc1Li5mMjk1ZWJhMzNhOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM3MDEsOSArMzcwMSw5IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcg
bG9jYXRpb25UYWc+Ci0gICAgc3RhdGljIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxU
YXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKKyAgICBzdGF0aWMgQ29k
ZVB0cjxyZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25U
YWc+IGNhbGwpCiAgICAgewotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihy
ZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oTUlQU0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQo
Y2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgcmV0dXJuIENvZGVQdHI8cmVzdWx0VGFn
PihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oTUlQU0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJn
ZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcg
c3RhcnRUYWcsIFB0clRhZyBkZXN0VGFnPgpAQCAtMzc2NywxMyArMzc2NywxMyBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgogICAgIHN0YXRp
YyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgQ29kZUxv
Y2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBNSVBTQXNz
ZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgICAgICBNSVBTQXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwu
ZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLnRhZ2dlZFB0cigpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+Ci0gICAgc3RhdGljIHZvaWQg
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxk
ZXN0VGFnPiBkZXN0aW5hdGlvbikKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVQdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAg
ICAgewotICAgICAgICBNSVBTQXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9u
KCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBNSVBTQXNzZW1i
bGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLnRhZ2dlZFB0
cigpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNzg0LDEyICszNzg0LDEyIEBAIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgotICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rp
b25QdHI8dGFnPiBmdW5jdGlvbikKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2Rl
LCBDYWxsIGNhbGwsIENvZGVQdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmIChj
YWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSkKLSAgICAgICAgICAgIE1JUFNBc3NlbWJsZXI6Omxp
bmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWws
IGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgTUlQU0Fz
c2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgICAgIE1JUFNBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNh
bGwubV9sYWJlbCwgZnVuY3Rpb24udGFnZ2VkUHRyKCkpOwogICAgIH0KIAogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJSSVNDVjY0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUklTQ1Y2
NC5oCmluZGV4IGZjOThmOWI1MjIxNC4uYmU2YjA3YWIzY2FmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUklTQ1Y2NC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJSSVNDVjY0LmgKQEAg
LTE3MjcsNyArMTcyNyw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxQdHJUYWcgcmVzdWx0VGFn
LCBQdHJUYWcgbG9jYXRpb25UYWc+CiAgICAgc3RhdGljIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4g
cmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cjxyZXN1bHRUYWc+KE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxyZXN1bHRUYWc+KEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRp
b24oKSkpKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4oQ29kZVB0cjxy
ZXN1bHRUYWc+KEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkp
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCmlu
ZGV4IGI0MDFlM2JmYTQ4MS4uMThmYWYyMmEzYzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzkzMSwxMyArMzkzMSwxMyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KICAg
ICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aFZNSGFsdChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGlu
c3RydWN0aW9uU3RhcnQpCiAgICAgewotICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRo
SGx0KGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIFg4NkFz
c2VtYmxlcjo6cmVwbGFjZVdpdGhIbHQoaW5zdHJ1Y3Rpb25TdGFydC50YWdnZWRQdHIoKSk7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHN0YXJ0VGFnLCBQdHJUYWcgZGVzdFRhZz4KICAg
ICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWw8c3RhcnRUYWc+
IGluc3RydWN0aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9u
KQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rp
b25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rpb25T
dGFydC50YWdnZWRQdHIoKSwgZGVzdGluYXRpb24udGFnZ2VkUHRyKCkpOwogICAgIH0KICAgICAK
ICAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1bXBSZXBsYWNlbWVudFNpemUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
CmluZGV4IDEzZWE1ODViNzVjNS4uMWRhODI1YWIzYTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQ5
LDkgKzI0OSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAg
ICB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3QgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBv
cGVyYXRpb24pCisgICAgdm9pZCBjYWxsT3BlcmF0aW9uKGNvbnN0IENvZGVQdHI8T3BlcmF0aW9u
UHRyVGFnPiBvcGVyYXRpb24pCiAgICAgewotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIob3Bl
cmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihvcGVyYXRpb24udGFnZ2VkUHRyKCkpLCBzY3JhdGNoUmVnaXN0
ZXIoKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmNhbGwoc2NyYXRjaFJlZ2lzdGVyKCkpOwogICAg
IH0KIApAQCAtMjAxOCw5ICsyMDE4LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzRmxvYXRpbmdQb2ludEFicygpIHsgcmV0dXJuIHRydWU7IH0KICAgICAKICAgICB0ZW1wbGF0
ZTxQdHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcgbG9jYXRpb25UYWc+Ci0gICAgc3RhdGljIEZ1bmN0
aW9uUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlv
blRhZz4gY2FsbCkKKyAgICBzdGF0aWMgQ29kZVB0cjxyZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0
KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCiAgICAgewotICAgICAgICByZXR1
cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihYODZBc3NlbWJsZXI6OnJlYWRQb2ludGVyKGNhbGwu
ZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRp
b24oKSkpOworICAgICAgICByZXR1cm4gQ29kZVB0cjxyZXN1bHRUYWc+KFg4NkFzc2VtYmxlcjo6
cmVhZFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FM
TF9SMTEpLmRhdGFMb2NhdGlvbigpKSk7CiAgICAgfQogCiAgICAgYm9vbCBoYXZlU2NyYXRjaFJl
Z2lzdGVyRm9yQmxpbmRpbmcoKSB7IHJldHVybiBtX2FsbG93U2NyYXRjaFJlZ2lzdGVyOyB9CkBA
IC0yMDY2LDMxICsyMDY2LDMxIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgog
ICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRy
V2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQWRkcmVz
cywgdm9pZCogaW5pdGlhbFZhbHVlKQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXZl
cnRKdW1wVG9fbW92cV9pNjRyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5pdGlhbFZhbHVlKSwgc19zY3JhdGNoUmVnaXN0
ZXIpOworICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZxX2k2NHIoaW5zdHJ1
Y3Rpb25TdGFydC50YWdnZWRQdHIoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5pdGlh
bFZhbHVlKSwgc19zY3JhdGNoUmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRh
ZyB0YWc+CiAgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVC
cmFuY2gzMldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbDx0YWc+IGluc3RydWN0aW9uU3RhcnQs
IEFkZHJlc3MsIGludDMyX3QgaW5pdGlhbFZhbHVlKQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1i
bGVyOjpyZXZlcnRKdW1wVG9fbW92bF9pMzJyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgaW5pdGlhbFZhbHVlLCBzX3NjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIFg4NkFz
c2VtYmxlcjo6cmV2ZXJ0SnVtcFRvX21vdmxfaTMycihpbnN0cnVjdGlvblN0YXJ0LnRhZ2dlZFB0
cigpLCBpbml0aWFsVmFsdWUsIHNfc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPgogICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRv
QnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFy
dCwgUmVnaXN0ZXJJRCwgdm9pZCogaW5pdGlhbFZhbHVlKQogICAgIHsKLSAgICAgICAgWDg2QXNz
ZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92cV9pNjRyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5pdGlhbFZhbHVlKSwgc19z
Y3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3Zx
X2k2NHIoaW5zdHJ1Y3Rpb25TdGFydC50YWdnZWRQdHIoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oaW5pdGlhbFZhbHVlKSwgc19zY3JhdGNoUmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KICAgICBzdGF0aWMgdm9pZCBy
ZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxh
YmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9D
QUxMX1IxMSkuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRy
QXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSwgZGVzdGlu
YXRpb24udGFnZ2VkUHRyKCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFn
LCBQdHJUYWcgZGVzdFRhZz4KLSAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsPGNhbGxUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQor
ICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2Fs
bCwgQ29kZVB0cjxkZXN0VGFnPiBkZXN0aW5hdGlvbikKICAgICB7Ci0gICAgICAgIFg4NkFzc2Vt
Ymxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9P
RkZTRVRfQ0FMTF9SMTEpLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFM
YWJlbFB0ckF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCks
IGRlc3RpbmF0aW9uLnRhZ2dlZFB0cigpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0yMTEwLDE0
ICsyMTEwLDE0IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKICAg
ICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgotICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNv
ZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikKKyAgICBzdGF0aWMgdm9p
ZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIENvZGVQdHI8dGFnPiBmdW5jdGlvbikK
ICAgICB7CiAgICAgICAgIGlmICghY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpCi0gICAgICAg
ICAgICBYODZBc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbC5sYWJlbEF0
T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSksIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOworICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rUG9pbnRlcihjb2RlLCBjYWxs
Lm1fbGFiZWwubGFiZWxBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLCBmdW5jdGlv
bi50YWdnZWRQdHIoKSk7CiAgICAgICAgIGVsc2UgaWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRh
aWwpKQotICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFi
ZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgWDg2QXNzZW1i
bGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBj
YWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAg
WDg2QXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnRhZ2dl
ZFB0cigpKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL3Rlc3RtYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
dGVzdG1hc20uY3BwCmluZGV4IGEyMzNhOTJlMzhkMi4uYWQyNzZkZTk4NTU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzOCw3ICsyMzgs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29tcGlsZShHZW5lcmF0
b3ImJiBnZW5lcmF0ZSkKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KIFQgaW52b2tlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiYg
Y29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAgICB2b2lkKiBleGVjdXRhYmxlQWRk
cmVzcyA9IHVudGFnQ0Z1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNvZGUuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVu
Y3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY29kZS5jb2RlKCkudGFnZ2VkUHRyKCkpOwogICAgIFQg
KCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4u
Lik+KGV4ZWN1dGFibGVBZGRyZXNzKTsKIAogI2lmIENQVShSSVNDVjY0KQpAQCAtNDkyMCw3ICs0
OTIwLDcgQEAgdm9pZCB0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVyKCkKICAgICAgICAg
Ly8gV3JpdGUgZXhwZWN0ZWQgdmFsdWVzIGludG8gdGhlIHJlZ2lzdGVycy4KICAgICAgICAgaml0
LnByb2JlRGVidWcoWyZdIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgewogICAgICAgICAgICAg
cHJvYmVDYWxsQ291bnQrKzsKLSAgICAgICAgICAgIGNvbnRleHQuY3B1LnBjKCkgPSByZXRhZ0Nv
ZGVQdHI8SlNFbnRyeVB0clRhZywgSklUUHJvYmVQQ1B0clRhZz4oY29udGludWF0aW9uLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIGNvbnRleHQuY3B1LnBjKCkgPSBy
ZXRhZ0NvZGVQdHI8SlNFbnRyeVB0clRhZywgSklUUHJvYmVQQ1B0clRhZz4oY29udGludWF0aW9u
LmNvZGUoKS50YWdnZWRQdHIoKSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGppdC5icmVha3Bv
aW50KCk7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAppbmRleCA4M2E4MGY3NmRhMWYuLmZkZDA4NzFhZDlmOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcApAQCAtNjAyLDcg
KzYwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIEp1bXBUYWJsZUNvZGVQ
dHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNTd2l0Y2hQdHJUYWc+OworICAgICAgICAgICAg
ICAgICAgICAgICAgdXNpbmcgSnVtcFRhYmxlQ29kZVB0ciA9IENvZGVQdHI8SlNTd2l0Y2hQdHJU
YWc+OwogICAgICAgICAgICAgICAgICAgICAgICAgSnVtcFRhYmxlQ29kZVB0cioganVtcFRhYmxl
ID0gc3RhdGljX2Nhc3Q8SnVtcFRhYmxlQ29kZVB0cio+KAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtcy5wcm9jKCkuYWRkRGF0YVNlY3Rpb24oc2l6ZW9mKEp1bXBUYWJsZUNvZGVQ
dHIpICogdGFibGVTaXplKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRGlzYXNzZW1ibGVyLmNwcAppbmRleCAxYTU2NGQ3NWMwMTYuLmM0YTFkOWNlZjdjMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEaXNhc3NlbWJsZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcApA
QCAtNzEsNyArNzEsNyBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6YWRkSW5zdChJbnN0KiBpbnN0LCBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgc3RhcnQsIE1hY3JvQXNzZW1ibAogCiB2b2lkIERpc2Fzc2Vt
Ymxlcjo6ZHVtcChDb2RlJiBjb2RlLCBQcmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyLCBjb25zdCBjaGFyKiBhaXJQcmVmaXgsIGNvbnN0IGNoYXIqIGFzbVByZWZpeCwgY29u
c3QgU2NvcGVkTGFtYmRhPHZvaWQoSW5zdCYpPiYgZG9Ub0VhY2hJbnN0KQogewotICAgIHZvaWQq
IGNvZGVTdGFydCA9IGxpbmtCdWZmZXIuZW50cnlwb2ludDxEaXNhc3NlbWJseVB0clRhZz4oKS51
bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCogY29kZVN0YXJ0ID0gbGlua0J1
ZmZlci5lbnRyeXBvaW50PERpc2Fzc2VtYmx5UHRyVGFnPigpLnVudGFnZ2VkUHRyKCk7CiAgICAg
dm9pZCogY29kZUVuZCA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oY29kZVN0YXJ0KSArICBsaW5r
QnVmZmVyLnNpemUoKTsKIAogICAgIGF1dG8gZHVtcEFzbVJhbmdlID0gWyZdIChDQ2FsbEhlbHBl
cnM6OkxhYmVsIHN0YXJ0TGFiZWwsIENDYWxsSGVscGVyczo6TGFiZWwgZW5kTGFiZWwpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCmluZGV4IGI2MzhiZWNkMzMzOS4u
MGIzMTIzMmM0ZjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rl
c3RhaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05OSw3ICs5OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShC
Mzo6UHJvY2VkdXJlJiBwcm9jKQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgogVCBpbnZva2UoY29uc3QgQ29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCiB7Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlv
blB0cjxKSVRDb21waWxhdGlvblB0clRhZz4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cjxKSVRD
b21waWxhdGlvblB0clRhZz4oY29kZS5jb2RlKCkudGFnZ2VkUHRyKCkpOwogICAgIFQgKCpmdW5j
dGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGV4
ZWN1dGFibGVBZGRyZXNzKTsKICAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCA4ZmVhOGRmZDU4YWIuLjNlYjY0ZGM3NTVl
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5Nyw5ICsxOTcsOSBAQCBpbmxp
bmUgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjb21waWxlUHJvYyhQcm9jZWR1cmUmIHBy
b2NlZHVyZSwgdW5zaWduZWQgbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4u
LiBBcmd1bWVudHM+Ci1UIGludm9rZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUQ29tcGlsYXRp
b25QdHJUYWc+IHB0ciwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK1QgaW52b2tlKENvZGVQdHI8
SklUQ29tcGlsYXRpb25QdHJUYWc+IHB0ciwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAg
ICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ0Z1bmN0aW9uUHRyPEpJVENvbXBpbGF0
aW9uUHRyVGFnPihwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgdm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cjxKSVRDb21waWxhdGlvblB0clRhZz4ocHRyLnRh
Z2dlZFB0cigpKTsKICAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nh
c3Q8VCgqKShBcmd1bWVudHMuLi4pPihleGVjdXRhYmxlQWRkcmVzcyk7CiAgICAgcmV0dXJuIGZ1
bmN0aW9uKGFyZ3VtZW50cy4uLik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzXzYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM182LmNw
cAppbmRleCBhMWM5N2EzNmI3ZTAuLjkyMDMxOTExNDc2MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiM182LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzXzYuY3BwCkBAIC0xNjc3LDggKzE2NzcsOCBAQCB2b2lkIHRlc3RJbnRlcnByZXRl
cigpCiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CiAgICAgICAgICAgICBWZWN0b3I8Qm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBs
YWJlbHMgPSBwYXJhbXMuc3VjY2Vzc29yTGFiZWxzKCk7CiAKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU1N3aXRjaFB0clRhZz4qIGp1bXBUYWJsZSA9IGJpdHdpc2VfY2FzdDxN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNTd2l0Y2hQdHJUYWc+Kj4oCi0gICAgICAgICAgICAgICAg
cGFyYW1zLnByb2MoKS5hZGREYXRhU2VjdGlvbihzaXplb2YoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTU3dpdGNoUHRyVGFnPikgKiBsYWJlbHMuc2l6ZSgpKSk7CisgICAgICAgICAgICBDb2RlUHRy
PEpTU3dpdGNoUHRyVGFnPioganVtcFRhYmxlID0gYml0d2lzZV9jYXN0PENvZGVQdHI8SlNTd2l0
Y2hQdHJUYWc+Kj4oCisgICAgICAgICAgICAgICAgcGFyYW1zLnByb2MoKS5hZGREYXRhU2VjdGlv
bihzaXplb2YoQ29kZVB0cjxKU1N3aXRjaFB0clRhZz4pICogbGFiZWxzLnNpemUoKSkpOwogCiAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCBiODY2Zjk3
MzBiMDIuLmIxNDFlYzcyY2Y0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxNTgsNyArMjE1OCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VGb3JDdXN0
b20pLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHVpZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLm1fY3VzdG9tQWNjZXNzb3Iu
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkubV9j
dXN0b21BY2Nlc3Nvci50YWdnZWRQdHIoKSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxHZXRWYWx1ZUZ1bmM+KAogICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9i
amVjdCksCkBAIC0yMTcyLDcgKzIxNzIsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUZvckN1c3RvbSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodWlkKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkubV9j
dXN0b21BY2Nlc3Nvci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZT4oKS5tX2N1c3RvbUFjY2Vzc29yLnRhZ2dlZFB0cigpKSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPFB1dFZh
bHVlRnVuYz4oCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoZ2xvYmFsT2JqZWN0KSwKQEAgLTIxOTAsOSArMjE5MCw5IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soWz0sIHRoaXNdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVENhZ2UoKSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0
b21BY2Nlc3NvckdldHRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHZtRW50cnlDdXN0
b21HZXR0ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIHZtRW50cnlDdXN0b21HZXR0ZXIpOwogICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih2bUVudHJ5Q3Vz
dG9tU2V0dGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25DYWxsLCB2bUVudHJ5Q3VzdG9tU2V0dGVyKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9w
ZXJhdGlvbkNhbGwsIHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkubV9jdXN0b21B
Y2Nlc3Nvcik7CiAgICAgICAgICAgICB9KTsKQEAgLTIyNTIsNyArMjI1Miw3IEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAg
ICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogICAgICAgICAgICAgYXV0byBv
cGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCkpOworICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlv
bldyaXRlQmFycmllclNsb3dQYXRoKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgc3Rh
dGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUpOwogCkBA
IC0yMzQ3LDkgKzIzNDcsOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVy
YXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0
aW9uUHRyVGFnPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0
aWFsQ2FwYWNpdHkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25SZWFs
bG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSk7
CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0
aW5nIChpLmUuIHRoZSBvbGQgc3RydWN0dXJlL2J1dHRlcmZseQpAQCAtMjM1OSw5ICsyMzU5LDkg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBz
dGF0ZSkKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAg
ICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblJlYWxsb2Nh
dGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdl
KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2VTbmlwcGV0UGFyYW1zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKaW5kZXggOGZiOTE4M2FkMWYyLi41NjRiN2I2MzA4
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
U25pcHBldFBhcmFtcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKICAgICAgICAgYXV0byBmdW5jdGlvbiA9IG1fZnVuY3Rpb247CiAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KGZ1bmN0aW9uKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25DYWxsLCBmdW5jdGlvbik7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGpp
dC5zZXR1cFJlc3VsdHMobV9yZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAppbmRleCA1MDQ5YzYzMjA3NjguLmUwMmYzYjQ1OTE1YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAK
QEAgLTEwOCw3ICsxMDgsNyBAQCBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBD
YWxsTGlua0luZm86OmRvbmVMb2NhdGlvbigpCiAgICAgcmV0dXJuIG1fZG9uZUxvY2F0aW9uOwog
fQogCi12b2lkIENhbGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCit2b2lkIENhbGxMaW5rSW5m
bzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCog
Y2FsbGVlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKICAgICBSRUxFQVNFX0FT
U0VSVCghKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxlZSkgJiBwb2x5bW9ycGhpY0NhbGxl
ZU1hc2spKTsKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFr
KFZNJiB2bSkKICAgICB9CiB9CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxE
ZXN0aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikK
K3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbiA9
IGNvZGVQdHI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmgKaW5kZXggM2YyYjEzMmYwZTNiLi4xODZkMzM1NjQ3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKQEAgLTE5OSw4ICsxOTksOCBAQCBw
dWJsaWM6CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9j
YXRpb24oKTsKIAotICAgIHZvaWQgc2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mLCBKU0NlbGwqLCBK
U09iamVjdCogY2FsbGVlLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4pOwotICAgIHZvaWQgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKKyAgICB2b2lkIHNldE1vbm9tb3JwaGljQ2Fs
bGVlKFZNJiwgSlNDZWxsKiwgSlNPYmplY3QqIGNhbGxlZSwgQ29kZUJsb2NrKiwgQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPik7CisgICAgdm9pZCBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KTsKICAgICB2b2lkIGNsZWFyQ2FsbGVlKCk7CiAgICAgSlNPYmpl
Y3QqIGNhbGxlZSgpOwogCkBAIC0zODMsNyArMzgzLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdWlu
dDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFy
Z3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6
IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCiAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGlu
YXRpb247CisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CiAgICAgICAgIFVuaW9uVHlwZSgpCiAgICAgICAg
ICAgICA6IGRhdGFJQyB7IG51bGxwdHIsIG51bGxwdHIgfQpAQCAtMzkxLDcgKzM5MSw3IEBAIHBy
b3RlY3RlZDoKIAogICAgICAgICBzdHJ1Y3QgRGF0YUlDIHsKICAgICAgICAgICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7IC8vIFRoaXMgaXMgd2Vla2x5IGhlbGQuIEFuZCBjbGVhcmVkIHdoZW5l
dmVyIG1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gaXMgY2hhbmdlZC4KLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21vbm9tb3JwaGljQ2FsbERl
c3RpbmF0aW9uOworICAgICAgICAgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21vbm9tb3Jw
aGljQ2FsbERlc3RpbmF0aW9uOwogICAgICAgICB9IGRhdGFJQzsKIAogICAgICAgICBzdHJ1Y3Qg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKaW5k
ZXggMjY5Yjk4YTBkYWE0Li4xZDI5NTBkY2IyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcApAQCAtMjg2LDcgKzI4Niw3IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFj
aygKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewogICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXM7CiAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24gPSBudWxs
cHRyOwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBj
dXN0b21BY2Nlc3NvckdldHRlcjsKKyAgICAgICAgICAgICAgICBDb2RlUHRyPEN1c3RvbUFjY2Vz
c29yUHRyVGFnPiBjdXN0b21BY2Nlc3NvckdldHRlcjsKICAgICAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlOwogICAgICAgICAg
ICAgICAgIGJvb2wgaGF2ZURPTUF0dHJpYnV0ZSA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVZhcmlhbnQuY3BwCmluZGV4IDU0OTQ4ZGI1ZDI3Zi4u
MDk2NmQwMWM4ODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlWYXJpYW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlWYXJpYW50LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUdl
dEJ5VmFyaWFudDo6R2V0QnlWYXJpYW50KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
Y29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cywgSlNGdW5jdGlvbiogaW50cmlu
c2ljRnVuY3Rpb24sIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nl
c3NvckdldHRlciwgc3RkOjp1bmlxdWVfcHRyPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0
dHJpYnV0ZSkKK0dldEJ5VmFyaWFudDo6R2V0QnlWYXJpYW50KENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cywgSlNGdW5j
dGlvbiogaW50cmluc2ljRnVuY3Rpb24sIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGN1
c3RvbUFjY2Vzc29yR2V0dGVyLCBzdGQ6OnVuaXF1ZV9wdHI8RE9NQXR0cmlidXRlQW5ub3RhdGlv
bj4gZG9tQXR0cmlidXRlKQogICAgIDogbV9zdHJ1Y3R1cmVTZXQoc3RydWN0dXJlU2V0KQogICAg
ICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQpA
QCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgR2V0QnlWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogICAgIGlmIChtX2ludHJp
bnNpY0Z1bmN0aW9uKQogICAgICAgICBvdXQucHJpbnQoIiwgaW50cmluc2ljID0gIiwgKm1faW50
cmluc2ljRnVuY3Rpb24pOwogICAgIGlmIChtX2N1c3RvbUFjY2Vzc29yR2V0dGVyKQotICAgICAg
ICBvdXQucHJpbnQoIiwgY3VzdG9tYWNjZXNzb3JnZXR0ZXIgPSAiLCBSYXdQb2ludGVyKG1fY3Vz
dG9tQWNjZXNzb3JHZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICBvdXQucHJp
bnQoIiwgY3VzdG9tYWNjZXNzb3JnZXR0ZXIgPSAiLCBSYXdQb2ludGVyKG1fY3VzdG9tQWNjZXNz
b3JHZXR0ZXIudGFnZ2VkUHRyKCkpKTsKICAgICBpZiAobV9kb21BdHRyaWJ1dGUpIHsKICAgICAg
ICAgb3V0LnByaW50KCIsIGRvbWNsYXNzID0gIiwgUmF3UG9pbnRlcihtX2RvbUF0dHJpYnV0ZS0+
Y2xhc3NJbmZvKSk7CiAgICAgICAgIGlmIChtX2RvbUF0dHJpYnV0ZS0+ZG9tSklUKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5VmFyaWFudC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5VmFyaWFudC5oCmluZGV4IDA5OWFlZDc3
MzYzOC4uM2VkMDdmNjA5OWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlWYXJpYW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5VmFyaWFudC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQo
KSwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiA9IG51bGxwdHIsCiAg
ICAgICAgIEpTRnVuY3Rpb24qID0gbnVsbHB0ciwKLSAgICAgICAgRnVuY3Rpb25QdHI8Q3VzdG9t
QWNjZXNzb3JQdHJUYWc+IGN1c3RvbUFjY2Vzc29yR2V0dGVyID0gbnVsbHB0ciwKKyAgICAgICAg
Q29kZVB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIgPSBudWxs
cHRyLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gPSBu
dWxscHRyKTsKIAogICAgIH5HZXRCeVZhcmlhbnQoKTsKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGlj
OgogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbExpbmtTdGF0dXMuZ2V0KCk7IH0KICAgICBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1faW50cmluc2ljRnVuY3Rpb247IH0KICAgICBJbnRyaW5zaWMg
aW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gbV9pbnRyaW5zaWNGdW5jdGlvbiA/IG1faW50cmlu
c2ljRnVuY3Rpb24tPmludHJpbnNpYygpIDogTm9JbnRyaW5zaWM7IH0KLSAgICBGdW5jdGlvblB0
cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2N1c3RvbUFjY2Vzc29yR2V0dGVyOyB9CisgICAgQ29kZVB0cjxDdXN0b21BY2Nlc3Nv
clB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1c3RvbUFj
Y2Vzc29yR2V0dGVyOyB9CiAgICAgRE9NQXR0cmlidXRlQW5ub3RhdGlvbiogZG9tQXR0cmlidXRl
KCkgY29uc3QgeyByZXR1cm4gbV9kb21BdHRyaWJ1dGUuZ2V0KCk7IH0KIAogICAgIGJvb2wgaXNQ
cm9wZXJ0eVVuc2V0KCkgY29uc3QgeyByZXR1cm4gb2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNldDsg
fQpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZz
ZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVz
OwogICAgIEpTRnVuY3Rpb24qIG1faW50cmluc2ljRnVuY3Rpb247Ci0gICAgRnVuY3Rpb25QdHI8
Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IG1fY3VzdG9tQWNjZXNzb3JHZXR0ZXI7CisgICAgQ29kZVB0
cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gbV9jdXN0b21BY2Nlc3NvckdldHRlcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gbV9kb21BdHRyaWJ1dGU7CiAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCmlu
ZGV4IDAxOTU5MzZhN2EwNi4uNWJlMjIyNzM5YTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDksNyArNDksNyBAQCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZQogCiBSZWY8QWNjZXNzQ2FzZT4g
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAogICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgYm9vbCB2aWFQcm94eSwgV2F0Y2hw
b2ludFNldCogYWRkaXRpb25hbFNldCwgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+
IGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLAorICAgIGJvb2wgdmlhUHJv
eHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQ
dHJUYWc+IGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLAogICAgIHN0ZDo6
b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlLCBSZWZQdHI8UG9s
eVByb3RvQWNjZXNzQ2hhaW4+JiYgcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiB7CiAgICAgc3dpdGNo
ICh0eXBlKSB7CkBAIC02MywxNyArNjMsMTcgQEAgUmVmPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKHZtLCBvd25lciwgdHlwZSwgaWRlbnRpZmllciwgb2Zmc2V0
LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHksIGFkZGl0aW9uYWxTZXQsIGN1c3Rv
bVNsb3RCYXNlLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkpOwogICAgIHJlc3VsdC0+
bV9kb21BdHRyaWJ1dGUgPSBkb21BdHRyaWJ1dGU7Ci0gICAgcmVzdWx0LT5tX2N1c3RvbUFjY2Vz
c29yID0gY3VzdG9tR2V0dGVyID8gRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KGN1
c3RvbUdldHRlcikgOiBudWxscHRyOworICAgIHJlc3VsdC0+bV9jdXN0b21BY2Nlc3NvciA9IGN1
c3RvbUdldHRlciA/IGN1c3RvbUdldHRlciA6IG51bGxwdHI7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogUmVmPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAog
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFJlZlB0
cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4mJiBwcm90b3R5cGVBY2Nlc3NDaGFpbiwgYm9vbCB2aWFQ
cm94eSwgCi0gICAgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGN1c3RvbVNldHRl
ciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQorICAgIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQ
dHJUYWc+IGN1c3RvbVNldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQogewogICAgIEFT
U0VSVCh0eXBlID09IFNldHRlciB8fCB0eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IHR5cGUg
PT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5l
dyBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKHZtLCBvd25lciwgdHlwZSwgaWRlbnRpZmllciwgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHksIG51bGxwdHIsIGN1c3RvbVNs
b3RCYXNlLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkpOwotICAgIHJlc3VsdC0+bV9j
dXN0b21BY2Nlc3NvciA9IGN1c3RvbVNldHRlciA/IEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29y
UHRyVGFnPihjdXN0b21TZXR0ZXIpIDogbnVsbHB0cjsKKyAgICByZXN1bHQtPm1fY3VzdG9tQWNj
ZXNzb3IgPSBjdXN0b21TZXR0ZXIgPyBjdXN0b21TZXR0ZXIgOiBudWxscHRyOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIEdldHRlclNldHRlckFjY2Vz
c0Nhc2U6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQsIENvbW1hUHJpbnRlciYgY29tbWEsIElu
ZAogICAgIG91dC5wcmludChjb21tYSwgImN1c3RvbVNsb3RCYXNlID0gIiwgUmF3UG9pbnRlcihj
dXN0b21TbG90QmFzZSgpKSk7CiAgICAgaWYgKGNhbGxMaW5rSW5mbygpKQogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJjYWxsTGlua0luZm8gPSAiLCBSYXdQb2ludGVyKGNhbGxMaW5rSW5mbygp
KSk7Ci0gICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9tQWNjZXNzb3IgPSAiLCBSYXdQb2ludGVy
KG1fY3VzdG9tQWNjZXNzb3IuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIG91dC5wcmludChj
b21tYSwgImN1c3RvbUFjY2Vzc29yID0gIiwgUmF3UG9pbnRlcihtX2N1c3RvbUFjY2Vzc29yLnRh
Z2dlZFB0cigpKSk7CiB9CiAKIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJ
VEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBjb25zdCBET01KSVQ6OkdldHRl
clNldHRlciogZG9tSklULCBHUFJSZWcgYmFzZUZvckdldEdQUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oCmluZGV4
IDk2NTdiZjI2MDQzZC4uZDc2ZmM4ODk0MTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgKQEAgLTU1LDE5ICs1
NSwxOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVmPEFjY2Vzc0Nhc2U+IGNyZWF0ZSgKICAg
ICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBDYWNoZWFibGVJZGVudGlmaWVy
LCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFs
U2V0LCBGdW5jdGlvblB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tR2V0dGVyLAorICAg
ICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wgdmlhUHJveHksIFdh
dGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+
IGN1c3RvbUdldHRlciwKICAgICAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBzdGQ6Om9w
dGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hh
aW4+JiYpOwogCiAgICAgc3RhdGljIFJlZjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwq
IG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBQcm9w
ZXJ0eU9mZnNldCwKICAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBS
ZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+JiYsIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKLSAg
ICAgICAgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGN1c3RvbVNldHRlciA9IG51
bGxwdHIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOworICAgICAgICBDb2Rl
UHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21TZXR0ZXIgPSBudWxscHRyLCBKU09iamVj
dCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKIAogICAgIHZvaWQgZHVtcEltcGwoUHJpbnRT
dHJlYW0mLCBDb21tYVByaW50ZXImLCBJbmRlbnRlciYpIGNvbnN0IGZpbmFsOwogICAgIFJlZjxB
Y2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0IGZpbmFsOwogCiAgICAgfkdldHRlclNldHRlckFjY2Vz
c0Nhc2UoKSBmaW5hbDsKIAotICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBj
dXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3I7IH0KKyAgICBD
b2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0
dXJuIG1fY3VzdG9tQWNjZXNzb3I7IH0KIAogcHJpdmF0ZToKICAgICBHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJv
cGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgSlNPYmplY3Qq
IGN1c3RvbVNsb3RCYXNlLCBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+JiYpOwpAQCAtNzYs
NyArNzYsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2N1c3Rv
bVNsb3RCYXNlOwogICAgIE9wdGltaXppbmdDYWxsTGlua0luZm8qIG1fY2FsbExpbmtJbmZvIHsg
bnVsbHB0ciB9OwotICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBtX2N1c3Rv
bUFjY2Vzc29yOworICAgIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IG1fY3VzdG9tQWNj
ZXNzb3I7CiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBtX2RvbUF0
dHJpYnV0ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmgKaW5kZXggOTZlNzMxYWVmOWY4Li43NzkzMzk0OWI5ZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
CkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCAh
PSBHZW5lcmF0ZWRGaW5hbENvZGUpOwogICAgIH0KICAgICAKLSAgICBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0KEtpbmQga2luZCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBjb2RlKQorICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQoS2luZCBraW5kLCBDb2RlUHRy
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlKQogICAgICAgICA6IG1fa2luZChraW5kKQogICAg
ICAgICAsIG1fY29kZShjb2RlKQogICAgIHsKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAg
IAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIAotICAgIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUoKSBj
b25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICBjb25zdCBDb2RlUHRyPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiYgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZTsgfQogICAgIAogICAgIGJvb2wg
bWFkZU5vQ2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBNYWRlTm9DaGFuZ2VzOyB9
CiAgICAgYm9vbCBnYXZlVXAoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gR2F2ZVVwOyB9CkBA
IC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICBLaW5kIG1fa2lu
ZDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IG1fY29k
ZTsKKyAgICBDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGU7CiAgICAgVmVjdG9y
PHN0ZDo6cGFpcjxJbmxpbmVXYXRjaHBvaW50U2V0JiwgU3RyaW5nRmlyZURldGFpbD4+IG1fd2F0
Y2hwb2ludHNUb0ZpcmU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVw
YXRjaC5jcHAKaW5kZXggYjliMTJiYTRhYTg3Li5hYjE4OTc5NzdjY2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0
aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQogCiB2b2lkIGxpbmtN
b25vbW9ycGhpY0NhbGwoCiAgICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAgIEpT
T2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyKQorICAgIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cikKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwogCkBAIC0xNjYsNyArMTY2
LDcgQEAgdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8p
CiAgICAgICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJTGlua0NhbGwo
KS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQsIEpTT2JqZWN0KiBjYWxsZWUpCitDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpz
VG9XYXNtSUNDb2RlUHRyKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNPYmplY3QqIGNh
bGxlZSkKIHsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYgKCFjYWxsZWUpCkBAIC0x
ODQsMjYgKzE4NCwyNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNU
b1dhc21JQ0NvZGVQdHIoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraQogCiAjaWYgRU5BQkxFKEpJ
VCkKIAotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdPcGVyYXRpb25X
aXRoVmFsaWRhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKK3N0
YXRpYyBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlv
bihDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gb3BlcmF0aW9uKQogewogICAgIEpTQ19SRVRVUk5f
UkVUQUdHRURfT1BFUkFUSU9OX1dJVEhfVkFMSURBVElPTihvcGVyYXRpb24pOwogfQogCi1zdGF0
aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZXRhZ0NhbGxUYXJnZXRXaXRoVmFsaWRh
dGlvbihDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwpCitzdGF0aWMgQ29k
ZVB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKENvZGVM
b2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCkKIHsKICAgICBKU0NfUkVUVVJOX1JF
VEFHR0VEX0NBTExfVEFSR0VUX1dJVEhfVkFMSURBVElPTihjYWxsKTsKIH0KIAotc3RhdGljIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorc3RhdGljIENvZGVQdHI8
Q0Z1bmN0aW9uUHRyVGFnPiByZWFkUHV0SUNDYWxsVGFyZ2V0KENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNl
RGF0YUlDKCkpCiAgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKHN0
dWJJbmZvLm1fc2xvd09wZXJhdGlvbik7CiAgICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFs
UHRyVGFnPiBjYWxsID0gc3R1YkluZm8ubV9zbG93UGF0aENhbGxMb2NhdGlvbjsKICNpZiBFTkFC
TEUoRlRMX0pJVCkKICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRM
SklUKSB7Ci0gICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQgPSBNYWNy
b0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwpOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRodW5rID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNz
KHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgcmV0dXJuIHJldGFnT3BlcmF0
aW9uV2l0aFZhbGlkYXRpb24oY29kZUJsb2NrLT52bSgpLmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1Bh
dGhDYWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKSk7CisgICAgICAgIENvZGVQdHI8SklUVGh1
bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVu
a1B0clRhZz4oY2FsbCk7CisgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0
aW9uKGNvZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHRh
cmdldCkuY2FsbFRhcmdldCgpKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb2Rl
QmxvY2spOwpAQCAtMjExLDE3ICsyMTAsMTYgQEAgc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3QKICAg
ICByZXR1cm4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oY2FsbCk7CiB9CiAKLXZvaWQg
ZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRp
b25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxs
LCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAjaWYgRU5B
QkxFKEZUTF9KSVQpCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZU
TEpJVCkgewogICAgICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgICAgIEZUTDo6
VGh1bmtzJiB0aHVua3MgPSAqdm0uZnRsVGh1bmtzOwotICAgICAgICBGdW5jdGlvblB0cjxKSVRU
aHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRo
dW5rUHRyVGFnPihjYWxsKTsKLSAgICAgICAgYXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNz
KHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgQ29kZVB0cjxKSVRUaHVua1B0
clRhZz4gc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRU
aHVua1B0clRhZz4oY2FsbCk7CiAgICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRo
dW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRodW5rKTsKICAgICAgICAga2V5
ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIHRodW5rcy5nZXRTbG93UGF0aENhbGxUaHVuayh2
bSwga2V5KS5jb2RlKCkudG9GdW5jdGlvblB0cigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDYWxsKGNhbGwsIHRodW5rcy5nZXRTbG93UGF0aENhbGxUaHVuayh2bSwga2V5KS5j
b2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQp
CkBAIC0yMzAsNyArMjI4LDcgQEAgdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFAKICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3Bl
cmF0aW9uUHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2FsbChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQorc3RhdGljIHZvaWQgcmVw
YXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7
CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgc3R1YkluZm8ubV9z
bG93T3BlcmF0aW9uID0gbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFn
PigpOwpAQCAtMjg0LDcgKzI4Miw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgZmlyZVdh
dGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQoVk0mIHZtLCBTdHJ1Y3R1cmVTCiAgICAgfQog
fQogCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGlt
aXppbmdHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoraW5saW5lIENvZGVQdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBr
aW5kKQogewogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgpA
QCAtMzA1LDcgKzMwMyw3IEBAIGlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFw
cHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oR2V0QnlLaW5kCiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoraW5saW5lIENv
ZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rpb24oR2V0QnlLaW5k
IGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6
CkBAIC01NDQsNyArNTQyLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKgogCiAgICAgICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCiAgICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9m
ZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpID8gRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KHNsb3QuY3VzdG9t
R2V0dGVyKCkpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Qud2F0Y2hw
b2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBDb2RlUHRyPEN1c3RvbUFjY2Vz
c29yUHRyVGFnPihzbG90LmN1c3RvbUdldHRlcigpKSA6IG51bGxwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpICE9
IGJhc2VWYWx1ZSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkb21BdHRyaWJ1dGUsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC03MTcsNyArNzE1LDcgQEAgdm9pZCByZXBhdGNoQXJyYXlHZXRC
eVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlMKICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVy
YXRpb25HZXRCeVZhbEdlbmVyaWMpOwogfQogCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5
U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQorc3RhdGlj
IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9u
KGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2lu
ZCBwdXRLaW5kKQogewogICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CiAgICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5SWQ6IHsKQEAgLTc2NCw3ICs3NjIsNyBAQCBzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFBybwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5
U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQorc3RhdGlj
IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0
aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0
S2luZCBwdXRLaW5kKQogewogICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CiAgICAgY2FzZSBQdXRC
eUtpbmQ6OkJ5SWQ6CkBAIC0xMjA5LDcgKzEyMDcsNyBAQCB2b2lkIHJlcGF0Y2hEZWxldGVCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRl
UAogICAgIH0KIH0KIAotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9w
cmlhdGVPcHRpbWl6aW5nSW5CeUZ1bmN0aW9uKEluQnlLaW5kIGtpbmQpCitpbmxpbmUgQ29kZVB0
cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihJbkJ5
S2luZCBraW5kKQogewogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgSW5CeUtpbmQ6OkJ5
SWQ6CkBAIC0xMjIyLDcgKzEyMjAsNyBAQCBpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVuY3Rpb24oSW5CeUtpbmQgawogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWlubGluZSBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5k
KQoraW5saW5lIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5
RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKIHsKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNl
IEluQnlLaW5kOjpCeUlkOgpAQCAtMTU3NSw3ICsxNTczLDcgQEAgdm9pZCByZXBhdGNoSW5zdGFu
Y2VPZigKIAogdm9pZCBsaW5rRGlyZWN0Q2FsbCgKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
T3B0aW1pemluZ0NhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNv
ZGVCbG9jaywKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cikKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgQVNTRVJUKCFj
YWxsTGlua0luZm8uc3R1YigpKTsKICAgICAKQEAgLTE2MTgsNyArMTYxNiw3IEBAIHN0YXRpYyB2
b2lkIGxpbmtWaXJ0dWFsRm9yKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJCiBuYW1lc3BhY2Ugewogc3RydWN0IENhbGxUb0NvZGVQdHIgewogICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBjb2RlUHRyOworICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsK
IH07CiB9IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNlCiAKQEAgLTE4MzIsNyArMTgzMCw3IEBAIHZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAgICAgICAgIFBvbHltb3JwaGljQ2FsbENhc2UmIGNhbGxD
YXNlID0gY2FsbENhc2VzW2Nhc2VJbmRleF07CiAgICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQg
PSBjYWxsQ2FzZS52YXJpYW50KCk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICAgICAgQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyOwogICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkpIHsKICAgICAg
ICAgICAgIEFTU0VSVCh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7
CiAgICAgICAgICAgICAKQEAgLTE5MTYsNyArMTkxNCw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q2FsCiAgICAgLy8gMy4gSWYgd2UncmUgYSBkYXRhIElDLCB0aGVuIHRoZSByZXR1cm4gYWRkcmVz
cyBpcyBhbHJlYWR5IGNvcnJlY3QKICAgICAvLyBUaHVzIHdlIG5lZWQgdG8gcHV0IGl0IGZvciB0
aGUgc2xvdy1wYXRoIGNhbGwuCiAgICAgaWYgKCFpc0RhdGFJQykgewotICAgICAgICBzdHViSml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5kb25lTG9jYXRp
b24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAg
ICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZv
LmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkUHRyKCkpLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgICAg
IHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBhcmUgbm90IGRvaW5nIGEgcmVh
bCB0YWlsLWNhbGwgaW4gdGhpcyBjYXNlLiBXZSBsZWF2ZSBzdGFjayBlbnRyaWVzIGluIHRoZSBj
YWxsZXIsIGFuZCB3ZSBhcmUgbm90IHJ1bm5pbmcgcHJlcGFyZUZvclRhaWxDYWxsLCB0aHVzLApA
QCAtMTkyOSw3ICsxOTI3LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICAgICAgICAg
ICAgICBBU1NFUlQoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmpp
dFR5cGUoKSkpOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENh
bGwoKSkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihKSVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvciku
Y29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAg
ICAgICAgICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZt
LmdldENUSVN0dWIoSklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IpLmNvZGUoKS51bnRh
Z2dlZFB0cigpKSwgR1BSSW5mbzo6cmVnVDQpOwogICAgICAgICAgICAgICAgIHN0dWJKaXQucmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTM4LDcgKzE5MzYsNyBAQCB2b2lkIGxpbmtQ
b2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENhbAogICAgICAgICAgICAgLy8gV2hpbGUgQmFzZWxpbmUgLyBMTEludCBzaGFy
ZXMgQmFzZWxpbmVDYWxsTGlua0luZm8sIE9wdGltaXppbmdDYWxsTGlua0luZm8gaXMgZXhjbHVz
aXZlbHkgdXNlZCBmb3Igb25lIEpJVCBjb2RlLgogICAgICAgICAgICAgLy8gVGh1cywgd2UgY2Fu
IHNhZmVseSB1c2UgZG9uZUxvY2F0aW9uLgogICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5p
c1RhaWxDYWxsKCkpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgICAgICAgICAgICAgc3R1Ykpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0
aW9uKCkudW50YWdnZWRQdHIoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAgICAgICAgICAgICBz
dHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk1Niw3ICsxOTU0LDcgQEAg
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChjYWxsQ2Fz
ZXMuc2l6ZSgpID09IGNhbGxzLnNpemUoKSk7CiAgICAgZm9yIChDYWxsVG9Db2RlUHRyIGNhbGxU
b0NvZGVQdHIgOiBjYWxscykKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRy
LmNhbGwsIGNhbGxUb0NvZGVQdHIuY29kZVB0ci50b0Z1bmN0aW9uUHRyKCkpOworICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgY2FsbFRvQ29kZVB0ci5jb2RlUHRy
KTsKIAogICAgIGlmICghZG9uZS5lbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVCghaXNEYXRhSUMp
OwpAQCAtMTk2OCw3ICsxOTY2LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICAgICAg
RklOQUxJWkVfQ09ERV9GT1IoCiAgICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVm
ZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgICAgICJQb2x5bW9ycGhpYyBjYWxs
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldHMgJXMiLAotICAgICAgICAgICAg
ICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1ibHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2Rl
QmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCisgICAgICAgICAgICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0
b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0
aW9uKCkudGFnZ2VkUHRyKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGNh
bGxDYXNlcykpLmRhdGEoKSksCiAgICAgICAgIHZtLCBvd25lciwgY2FsbEZyYW1lLT5jYWxsZXJG
cmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcywKICAgICAgICAgV1RGTW92ZShmYXN0Q291
bnRzKSkpOwpAQCAtMjAwOCwxMSArMjAwNiwxMSBAQCB2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbgog
CiB2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCiB7Ci0gICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4g
b3B0aW1pemVkRnVuY3Rpb247CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5SWQ6IHsKICAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIEZ1bmN0aW9uVHlwZSB1
bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQ
dXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5m
bykudGFnZ2VkUHRyKCkpOwogICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplKQogICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CiAgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKQEAgLTIwMzEsNyArMjAy
OSw3IEBAIHZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQga2luCiAgICAgfQogICAgIGNhc2UgUHV0QnlLaW5k
OjpCeVZhbDogewogICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGlt
aXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0Nh
bGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxG
dW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykudGFn
Z2VkUHRyKCkpOwogICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplKQogICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOwogICAgICAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaAppbmRleCBiYWE3NGQ5NjZlZmUu
LjhlMjQxZWUzMGE0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5o
CkBAIC03MSw4ICs3MSw4IEBAIHZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9i
amVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlCiB2b2lkIHJlcGF0Y2hD
aGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0Kiwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaFNl
dFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQg
cmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBK
U1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1YkluZm8mLCBib29sIHdhc0ZvdW5kKTsKLXZv
aWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENv
ZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPik7Ci12b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIE9wdGltaXppbmdDYWxs
TGlua0luZm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4pOwordm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKFZNJiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJ
bmZvJiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxlZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFn
Pik7Cit2b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIE9wdGltaXppbmdDYWxsTGlua0lu
Zm8mLCBDb2RlQmxvY2sqLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKIHZvaWQgbGlua1Nsb3dG
b3IoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxs
TGlua0luZm8mKTsKIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKQEAgLTg0LDggKzg0LDcgQEAg
dm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owogdm9pZCByZXNldEluc3RhbmNlT2YoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
IHZvaWQgcmVzZXRDaGVja1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwogdm9pZCByZXNldFNldFByaXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiwgQ29kZUxv
Y2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBuZXdDYWxsZWVGdW5jdGlvbik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4ganNUb1dhc21JQ0NvZGVQdHIoQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqIGNh
bGxlZSk7Ci0KK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayosIENvZGVM
b2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4sIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBu
ZXdDYWxsZWVGdW5jdGlvbik7CitDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2Rl
UHRyKENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiBjYWxsZWUpOwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9S
ZXBhdGNoSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJ
bmxpbmVzLmgKaW5kZXggMWNjN2ZmNDNhZTk2Li42MTAwOTk0MTA0YzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDE5ICs0OSwxOSBA
QCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZQogICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxv
d0dDOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgICAgIHZt
LmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGgoKS5jb2RlKCkudGFnZ2VkUHRyKCksCiAgICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIExMSW50
OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpLAorICAgICAgICAgICAgICAgIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50
cnlwb2ludCgpLmNvZGUoKS50YWdnZWRQdHIoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwg
PyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KIAogICAgICAgICBB
U1NFUlQoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CiAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9y
KGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0g
ICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS50YWdnZWRQdHIoKSwKICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KIApAQCAtNzcsMTcg
Kzc3LDE3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lCiAgICAgICAgIERpc2FsbG93R0MgZGlz
YWxsb3dHQzsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElU
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGgoKS5jb2RlKCkudGFnZ2VkUHRyKCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChMTEludDo6Z2V0SG9zdENhbGxSZXR1
cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkudGFnZ2VkUHRyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KIAogICAgIEFTU0VSVChjb25zdHJ1Y3REYXRh
LnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwogICAgIHRocm93RXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwg
Y2FsbGVlKSk7CiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgdm0uZ2V0Q1RJVGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCks
CisgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUo
KS50YWdnZWRQdHIoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7CiB9CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0
dXJuVHlwZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0Kgog
ICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFz
VmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKICAgICAgICAgaWYgKGF1
dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPihj
YWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihraW5kKTsKKyAgICAgICAgICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZt
LmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKIAogICAgICAgICAgICAgaWYgKCFjYWxsTGlua0lu
Zm8tPnNlZW5PbmNlKCkpCkBAIC0xMTQsNyArMTE0LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0
aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVj
dCoKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxs
KHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlv
biwgY29kZVB0cik7CiAKLSAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9IGNvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9IGNv
ZGVQdHIudGFnZ2VkUHRyKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtl
ZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgp
ID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogICAg
ICAgICB9CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0
Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0lu
Zm8pKTsKQEAgLTEyNCw3ICsxMjQsNyBAQCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KgogICAgIEpT
U2NvcGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CiAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICBDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogCiAg
ICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsgLy8gV2UgY2FuJ3QgamV0dGlzb24gYW55IGNv
ZGUgdW50aWwgYWZ0ZXIgd2UgbGluayB0aGUgY2FsbC4KQEAgLTEzNyw3ICsxMzcsNyBAQCBBTFdB
WVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJh
bWUsIEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUp
OwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAg
ICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHZvaWQq
IHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCku
Y29kZSgpLnRhZ2dlZFB0cigpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJv
d1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAg
IH07CiAKQEAgLTE2Niw3ICsxNjYsNyBAQCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KgogICAgIGVs
c2UKICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlu
a0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKIAotICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZy
YW1lIDogS2VlcFRoZUZyYW1lKSk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLnRh
Z2dlZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2Rl
KCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoRnVuY3Rp
b24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxs
KQpAQCAtMTgyLDkgKzE4Miw5IEBAIEFMV0FZU19JTkxJTkUgU2xvd1BhdGhSZXR1cm5UeXBlIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgY2FsbGVl
QXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWND
YXN0PEludGVybmFsRnVuY3Rpb24qPihjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRl
cm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAgICAgIENvZGVQdHI8SlNF
bnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKGtpbmQpOwogICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWls
ID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChjb2RlUHRyLnRhZ2dlZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihj
YWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1l
IDogS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNh
bGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwogICAgIH0KQEAgLTE5OSw3ICsxOTksNyBAQCBB
TFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsK
IAogICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAg
ICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICB2b2lkKiB0
aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNv
ZGUoKS50YWdnZWRQdHIoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dU
YXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9
OwogCkBAIC0yMTYsNyArMjE2LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUg
dmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAvLyBG
SVhNRTogU3VwcG9ydCB3YXNtIElDLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjAzMzkKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGV4ZWN1dGFibGUt
PmVudHJ5cG9pbnRGb3IoCi0gICAgICAgIGtpbmQsIE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkudGFnZ2VkUHRyKCksCiAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9
PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHAKaW5kZXggZDI5MjQxMjY1YThmLi5hMTVkMzlmNjU1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcApAQCAtNDEx
LDcgKzQxMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2V0Q2Fj
aGVUeXBlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmCiAgICAgbV9jYWNoZVR5cGUgPSBu
ZXdDYWNoZVR5cGU7CiB9CiAKLXN0YXRpYyBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IHNs
b3dPcGVyYXRpb25Gcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhjb25zdCBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQorc3RhdGljIENvZGVQdHI8T3BlcmF0
aW9uUHRyVGFnPiBzbG93T3BlcmF0aW9uRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oY29u
c3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKIHsKICAgICBz
d2l0Y2ggKHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSkgewogICAgIGNhc2UgQWNjZXNzVHlw
ZTo6RGVsZXRlQnlWYWw6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IGQyNDBmYTI1ZGU4OC4uZGQ0ZTZjODgyNmEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aApAQCAtMzkyLDEwICszOTIsMTAgQEAgcHVibGljOgogCiAgICAgdW5pb24gewogICAgICAgICBD
b2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhDYWxsTG9jYXRpb247
Ci0gICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gbV9zbG93T3BlcmF0aW9uOwor
ICAgICAgICBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gbV9zbG93T3BlcmF0aW9uOwogICAgIH07
CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IG1fY29k
ZVB0cjsKKyAgICBDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGVQdHI7CiAKICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAKaW5kZXggNGRkMjA0NTk3OTM5Li5hOTI1NjM3YjUyYTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAKQEAg
LTE2Miw3ICsxNjIsNyBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTGlua0J1ZgogICAgICAgICBwcmVmaXhC
dWZmZXJbaSArIHByZWZpeExlbmd0aF0gPSAnICc7CiAgICAgcHJlZml4QnVmZmVyW3ByZWZpeExl
bmd0aCArIGFtb3VudE9mTm9kZVdoaXRlU3BhY2VdID0gMDsKICAgICAKLSAgICB2b2lkKiBjb2Rl
U3RhcnQgPSBsaW5rQnVmZmVyLmVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGNvZGVTdGFydCA9IGxpbmtCdWZmZXIu
ZW50cnlwb2ludDxEaXNhc3NlbWJseVB0clRhZz4oKS51bnRhZ2dlZFB0cigpOwogICAgIHZvaWQq
IGNvZGVFbmQgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvZGVTdGFydCkgKyAgbGlua0J1ZmZl
ci5zaXplKCk7CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxEaXNhc3NlbWJseVB0clRhZz4gc3Rh
cnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RGlzYXNzZW1ibHlQdHJUYWc+KHByZXZpb3VzTGFi
ZWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IGNhNTY2ZDNhNDg0ZS4u
NWNmOWIwMDhiN2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC0xMDc4
LDcgKzEwNzgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiAqbV91bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaW5kZXhdOyB9CiAgICAgU3Ry
aW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0
dXJuIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpbmRleF07IH0KIAotICAgIHZvaWQgYXBwZW5k
Q2F0Y2hFbnRyeXBvaW50KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1hY2hpbmVDb2RlLCBWZWN0b3I8Rmx1
c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRzKQorICAgIHZvaWQgYXBwZW5kQ2F0Y2hFbnRyeXBv
aW50KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPiBtYWNoaW5lQ29kZSwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0
cykKICAgICB7CiAgICAgICAgIG1fY2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQoQ2F0Y2hFbnRyeXBv
aW50RGF0YSB7IG1hY2hpbmVDb2RlLCBGaXhlZFZlY3RvcjxGbHVzaEZvcm1hdD4oV1RGTW92ZShh
cmd1bWVudEZvcm1hdHMpKSwgYnl0ZWNvZGVJbmRleCB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IGNiZDYyMjExMGQzNC4uNWE5
YjhhYjQ4MTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcApAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikKICAgICAgICAgQVNTRVJUKG1fZXhpdFNpdGVMYWJlbHMuc2l6ZSgpID09
IG1fb3NyRXhpdC5zaXplKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9l
eGl0U2l0ZUxhYmVscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmVjdG9yPExhYmVsPiYg
bGFiZWxzID0gbV9leGl0U2l0ZUxhYmVsc1tpXTsKLSAgICAgICAgICAgIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+IGFkZHJlc3NlczsKKyAgICAgICAgICAg
IFZlY3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBhZGRyZXNzZXM7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGFiZWxzLnNpemUoKTsgKytqKQogICAgICAgICAg
ICAgICAgIGFkZHJlc3Nlcy5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGxhYmVsc1tqXSkpOwogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5h
ZGRPU1JFeGl0U2l0ZShhZGRyZXNzZXMpOwpAQCAtNTM1LDExICs1MzUsMTEgQEAgdm9pZCBKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICBtX3NwZWN1bGF0aXZlLT5saW5rT1NSRW50
cmllcygqbGlua0J1ZmZlcik7CiAgICAgCiAgICAgaWYgKHJlcXVpcmVzQXJpdHlGaXh1cCkKLSAg
ICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgdm0oKS5nZXRDVElTdHViKGFy
aXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKS50b0Z1bmN0aW9uUHRyKCkpOworICAgICAgICBsaW5r
QnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCB2bSgpLmdldENUSVN0dWIoYXJpdHlGaXh1cEdl
bmVyYXRvcikuY29kZSgpKTsKIAogICAgIGRpc2Fzc2VtYmxlKCpsaW5rQnVmZmVyKTsKIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IGxp
bmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oYXJpdHlDaGVjayk7CisgICAgQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXItPmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4oYXJpdHlDaGVjayk7CiAKICAgICBtX2ppdENvZGUtPmluaXRpYWxp
emVDb2RlUmVmRm9yREZHKAogICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbGlua0J1ZmZlciwg
SlNFbnRyeVB0clRhZywgIkRGRyBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2Nr
V2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkRGR0pJVCkpLmRhdGEoKSksCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggMjAzOGNjM2JhOTVj
Li40NDE0OWE5MzM4YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgKQEAgLTY2LDE0ICs2NiwxNCBAQCBzdHJ1Y3QgT1NSRXhpdDsKIC8vIEV2ZXJ5IENhbGxM
aW5rUmVjb3JkIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjYWxsIGluc3RydWN0aW9uICYg
dGhlIGZ1bmN0aW9uCiAvLyB0aGF0IGl0IG5lZWRzIHRvIGJlIGxpbmtlZCB0by4KIHN0cnVjdCBD
YWxsTGlua1JlY29yZCB7Ci0gICAgQ2FsbExpbmtSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBmdW5jdGlvbikKKyAgICBDYWxsTGlu
a1JlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBDb2RlUHRyPE9wZXJhdGlvblB0clRh
Zz4gZnVuY3Rpb24pCiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAgICwgbV9mdW5jdGlv
bihmdW5jdGlvbikKICAgICB7CiAgICAgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9j
YWxsOwotICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gbV9mdW5jdGlvbjsKKyAgICBD
b2RlUHRyPE9wZXJhdGlvblB0clRhZz4gbV9mdW5jdGlvbjsKIH07CiAKIC8vID09PSBKSVRDb21w
aWxlciA9PT0KQEAgLTE0MSwxNCArMTQxLDE0IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBB
ZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4K
LSAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBm
dW5jdGlvbikKKyAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGZ1
bmN0aW9uQ2FsbCwgZnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSk7CiAgICAg
ICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgfQogCi0gICAgQ2FsbCBhcHBlbmRPcGVyYXRp
b25DYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAg
Q2FsbCBhcHBlbmRPcGVyYXRpb25DYWxsKGNvbnN0IENvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPiBm
dW5jdGlvbikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbChPcGVyYXRp
b25QdHJUYWcpOwogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChmdW5jdGlv
bkNhbGwsIGZ1bmN0aW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVEZpbmFsaXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZp
bmFsaXplci5jcHAKaW5kZXggY2NkNzVjZmYxYjg2Li5lYTVlYzk5OTQ2M2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKQEAgLTM2LDcgKzM2LDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1KSVRGaW5hbGl6ZXI6OkpJ
VEZpbmFsaXplcihQbGFuJiBwbGFuLCBSZWY8SklUQ29kZT4mJiBqaXRDb2RlLCBzdGQ6OnVuaXF1
ZV9wdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorSklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxh
biYgcGxhbiwgUmVmPEpJVENvZGU+JiYgaml0Q29kZSwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZm
ZXI+IGxpbmtCdWZmZXIsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCiAg
ICAgOiBGaW5hbGl6ZXIocGxhbikKICAgICAsIG1faml0Q29kZShXVEZNb3ZlKGppdENvZGUpKQog
ICAgICwgbV9saW5rQnVmZmVyKFdURk1vdmUobGlua0J1ZmZlcikpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAppbmRleCBkYjRlMmIxNTNjOWYuLjhmOWM4M2Mx
Y2UwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCkBA
IC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3Mg
SklURmluYWxpemVyIGZpbmFsIDogcHVibGljIEZpbmFsaXplciB7CiBwdWJsaWM6Ci0gICAgSklU
RmluYWxpemVyKFBsYW4mLCBSZWY8SklUQ29kZT4mJiwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZm
ZXI+LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sg
PSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+OjpFbXB0eVZhbHVlKSk7CisgICAgSklURmluYWxpemVyKFBsYW4m
LCBSZWY8SklUQ29kZT4mJiwgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+LCBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+OjpFbXB0eVZhbHVlKSk7CiAgICAgfkpJVEZpbmFsaXplcigpIGZp
bmFsOwogICAgIAogICAgIHNpemVfdCBjb2RlU2l6ZSgpIGZpbmFsOwpAQCAtNDUsNyArNDUsNyBA
QCBwcml2YXRlOgogICAgIAogICAgIFJlZjxKSVRDb2RlPiBtX2ppdENvZGU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPExpbmtCdWZmZXI+IG1fbGlua0J1ZmZlcjsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gbV93aXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IG1fd2l0aEFyaXR5Q2hlY2s7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IGY5ZmY1MDY1OGU5My4uNDYx
NDQ3YjE2MmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtMjc5LDcgKzI3
OSw3IEBAIHN0cnVjdCBTdGFja0FjY2Vzc0RhdGEgewogfTsKIAogc3RydWN0IENhbGxET01HZXR0
ZXJEYXRhIHsKLSAgICBGdW5jdGlvblB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tQWNj
ZXNzb3JHZXR0ZXI7CisgICAgQ29kZVB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tQWNj
ZXNzb3JHZXR0ZXI7CiAgICAgY29uc3QgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVCB7IG51
bGxwdHIgfTsKICAgICBET01KSVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0KiBzbmlwcGV0IHsgbnVs
bHB0ciB9OwogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgeyAwIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCmluZGV4IDgwMmI5MjM5YWU1YS4uYzcwZjZj
YjJlMjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIE9T
UkVudHJ5RGF0YTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQobV9ieXRlY29kZUluZGV4LCAiLCBtYWNo
aW5lIGNvZGUgPSAiLCBSYXdQb2ludGVyKG1fbWFjaGluZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOworICAgIG91dC5wcmludChtX2J5dGVjb2RlSW5kZXgsICIsIG1hY2hpbmUgY29kZSA9ICIs
IFJhd1BvaW50ZXIobV9tYWNoaW5lQ29kZS50YWdnZWRQdHIoKSkpOwogICAgIG91dC5wcmludCgi
LCBzdGFjayBydWxlcyA9IFsiKTsKICAgICAKICAgICBhdXRvIHByaW50T3BlcmFuZCA9IFsmXSAo
VmlydHVhbFJlZ2lzdGVyIHJlZykgewpAQCAtMjUyLDggKzI1Miw4IEBAIHZvaWQqIHByZXBhcmVP
U1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvCiAgICAgCiAgICAgKmJpdHdpc2VfY2FzdDxzaXplX3QqPihzY3JhdGNoICsgMCkg
PSBmcmFtZVNpemU7CiAgICAgCi0gICAgdm9pZCogdGFyZ2V0UEMgPSBlbnRyeS0+bV9tYWNoaW5l
Q29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+
aml0Q29kZSgpLT5jb250YWlucyhlbnRyeS0+bV9tYWNoaW5lQ29kZS51bnRhZ2dlZEV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICB2b2lkKiB0YXJnZXRQQyA9IGVudHJ5LT5tX21hY2hpbmVDb2Rl
LnRhZ2dlZFB0cigpOworICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5j
b250YWlucyhlbnRyeS0+bV9tYWNoaW5lQ29kZS51bnRhZ2dlZFB0cigpKSk7CiAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIE9TUiB1c2luZyB0YXJnZXQgUEMgIiwg
UmF3UG9pbnRlcih0YXJnZXRQQykpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldFBDKTsKICAg
ICAqYml0d2lzZV9jYXN0PHZvaWQqKj4oc2NyYXRjaCArIDEpID0gdGFnQ29kZVB0cldpdGhTdGFj
a1BvaW50ZXJGb3JKSVRDYWxsKHVudGFnQ29kZVB0cjxPU1JFbnRyeVB0clRhZz4odGFyZ2V0UEMp
LCBjYWxsRnJhbWUpOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNv
CiAgICAgcmV0dXJuIHNjcmF0Y2g7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBDb2RlQmxvY2sqIG9wdGlt
aXplZENvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorQ29kZVB0cjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBDb2RlQmxvY2sqIG9w
dGltaXplZENvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIEFT
U0VSVChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQgfHwg
b3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKTsKICAgICBB
U1NFUlQob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxs
VmFsaWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKaW5kZXggYjli
ZTE5NzllNWMwLi5kNzg0NWUzMWNlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmgKQEAgLTc1LDcgKzc1LDcgQEAgaW5saW5lIEJ5dGVjb2RlSW5kZXggZ2V0T1NSRW50
cnlEYXRhQnl0ZWNvZGVJbmRleChPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YSkKIHN0cnVjdCBD
YXRjaEVudHJ5cG9pbnREYXRhIHsKICAgICAvLyBXZSB1c2UgdGhpcyB3aGVuIGRvaW5nIE9TUiBl
bnRyeSBhdCBjYXRjaC4gV2UgcHJvdmUgdGhlIGFyZ3VtZW50cwogICAgIC8vIGFyZSBvZiB0aGUg
ZXhwZWN0ZWQgdHlwZSBiZWZvcmUgZW50ZXJpbmcgYXQgYSBjYXRjaCBibG9jay4KLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGU7Cisg
ICAgQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtYWNoaW5lQ29kZTsKICAgICBGaXhl
ZFZlY3RvcjxGbHVzaEZvcm1hdD4gYXJndW1lbnRGb3JtYXRzOwogICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleDsKIH07CkBAIC04NSw5ICs4NSw5IEBAIHN0cnVjdCBDYXRjaEVudHJ5cG9p
bnREYXRhIHsKIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYsIENhbGxGcmFtZSosIENvZGVCbG9j
ayosIEJ5dGVjb2RlSW5kZXgpOwogCiAvLyBJZiBudWxsIGlzIHJldHVybmVkLCB3ZSBjYW4ndCBP
U1IgZW50ZXIuIElmIGl0J3Mgbm90IG51bGwsIGl0J3MgdGhlIFBDIHRvIGp1bXAgdG8uCi1NYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NS
RW50cnkoVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBDb2Rl
QmxvY2sqIG9wdGltaXplZENvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCk7CitDb2RlUHRyPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXgpOwogI2Vsc2UKLWlubGluZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZU9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwg
Q29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCkgeyByZXR1cm4gbnVsbHB0cjsgfQoraW5saW5lIENv
ZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZU9TUkVudHJ5KFZNJiwgQ2FsbEZy
YW1lKiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2Vu
ZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCmluZGV4IDdkNDQ4NDhhZDdkNC4uODEzMTdlNzIwMTZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTUsNyArMjE1LDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBpbGVPU1JFeGl0LCB2b2lkLCAo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHYKICAgICBpZiAoZXhpdC5jb2RlTG9jYXRpb25Gb3JSZXBh
dGNoKCkpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVMb2Nh
dGlvbkZvclJlcGF0Y2goKSwgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRXhpdFB0clRhZz4oZXhpdENv
ZGUuY29kZSgpKSk7CiAKLSAgICB2bS5vc3JFeGl0SnVtcERlc3RpbmF0aW9uID0gZXhpdENvZGUu
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm0ub3NyRXhpdEp1bXBEZXN0aW5hdGlv
biA9IGV4aXRDb2RlLmNvZGUoKS50YWdnZWRQdHIoKTsKIH0KIAogSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJmcmFtZS1hZGRyZXNzIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCA2ZDRmN2M3MWZiNWIuLjJjMzM1
ZWU3ZDQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzOSwxNCArMTM5LDE0IEBAIHZvaWQgaGFuZGxl
RXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYg
ZXhpdCkKICAgICBkb25lQWRqdXN0aW5nLmxpbmsoJmppdCk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRl
eCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZCwgYm9vbCYgY2FsbGVy
SXNMTEludCkKK3N0YXRpYyBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5
dGVjb2RlSW5kZXgsIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGJv
b2wmIGNhbGxlcklzTExJbnQpCiB7CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNl
T1NSRXhpdFRvTExJbnQoKSB8fCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7CiAKICAgICBpZiAoY2FsbEJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKQogICAgICAgICByZXR1cm4gTExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0
RnJvbUlubGluZWRDYWxsVHJhbXBvbGluZVRodW5rKCkuY29kZSgpOwogCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGp1bXBUYXJnZXQ7CisgICAgQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCiAgICAgY29uc3QgYXV0byYgY2FsbEluc3RydWN0aW9u
ID0gKmJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnMoKS5hdChjYWxsQnl0
ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKQEAgLTI3Niw3ICsy
NzYsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBhdXRvIGNhbGxCeXRlY29kZUluZGV4ID0g
dHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2lu
ZCwgY2FsbGVySXNMTEludCk7CisgICAgICAgICAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGp1
bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2Fs
bEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCk7CiAKICAg
ICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICAg
ICAgICAgIGppdC5hZGRQdHIoCkBAIC0yODgsMTEgKzI4OCwxMSBAQCB2b2lkIHJlaWZ5SW5saW5l
ZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQog
CiAjaWYgQ1BVKEFSTTY0RSkKICAgICAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9m
KHZvaWQqKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7Ci0g
ICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRh
cmdldC51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAg
ICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdl
dC51bnRhZ2dlZFB0cigpKSwgR1BSSW5mbzo6cmVnVDQpOwogICAgICAgICAgICAgaml0LnRhZ1B0
cihHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDQpOwogICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKEdQUkluZm86OnJlZ1Q0LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0
KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOwogI2Vsc2UKLSAgICAgICAgICAg
IGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldC51
bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JC
eXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOworICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0
LnVudGFnZ2VkUHRyKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlu
bGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOwogI2VuZGlmCiAgICAgICAgIH0KIApA
QCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIGlmIChleGl0VG9M
TEludCkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4KCk7CiAgICAgICAgIGNvbnN0IGF1dG8mIGN1cnJlbnRJbnN0cnVjdGlvbiA9
ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIo
KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0
aW9uOworICAgICAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uOwogICAgICAg
ICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCiAgICAgICAgICAgICBkZXN0aW5hdGlv
biA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKICAg
ICAgICAgZWxzZSAKQEAgLTM5OCwxMyArMzk4LDEzIEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFy
Z2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQog
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9y
RXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQ
Uik7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2tGb3JFeGl0LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpw
YkdQUik7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7Ci0gICAgICAgIGp1
bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CisgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxP
U1JFeGl0UHRyVGFnPigpLnRhZ2dlZFB0cigpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0
YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOwogICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVKSVREYXRhKCkp
LCBKSVQ6OnNfY29uc3RhbnRzR1BSKTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRl
eCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uOworICAgICAgICBDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uOwogICAgICAgICBpZiAoZXhpdEluZGV4LmNoZWNr
cG9pbnQoKSkKICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6OmNoZWNrcG9pbnRPU1JF
eGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOwogICAgICAgICBlbHNlIHsKQEAgLTQxNCw3ICs0
MTQsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKIAogICAgICAgICBBU1NFUlQoZGVzdGluYXRp
b24pOwogCi0gICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0
UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0
aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLnRhZ2dlZFB0cigpOwogICAgIH0KIAog
ICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCBmYTZhMDkxZWQ0YTIuLmM2NDEwMDdiNDUz
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0y
ODMxLDggKzI4MzEsOCBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRmluZFN3
aXRjaEltbVRhcmdldEZvckRvdWJsZSwgY2hhciosIChWTSogdm1QbwogICAgIGRvdWJsZSBhc0Rv
dWJsZSA9IHZhbHVlLmFzRG91YmxlKCk7CiAgICAgaW50MzJfdCBhc0ludDMyID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oYXNEb3VibGUpOwogICAgIGlmIChhc0RvdWJsZSA9PSBhc0ludDMyKQotICAg
ICAgICByZXR1cm4gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUobWluLCBhc0ludDMyKS5leGVjdXRh
YmxlQWRkcmVzczxjaGFyKj4oKTsKLSAgICByZXR1cm4gbGlua2VkVGFibGUubV9jdGlEZWZhdWx0
LmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICByZXR1cm4gbGlua2VkVGFibGUu
Y3RpRm9yVmFsdWUobWluLCBhc0ludDMyKS50YWdnZWRQdHI8Y2hhcio+KCk7CisgICAgcmV0dXJu
IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC50YWdnZWRQdHI8Y2hhcio+KCk7CiB9CiAKIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIGNoYXIqLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgc2l6ZV90IHRhYmxlSW5kZXgsIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlKiB1bmxpbmtlZFRhYmxlLCBKU1N0cmluZyogc3RyaW5nKSkKQEAgLTI4
NDcsNyArMjg0Nyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hT
dHJpbmcsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwotICAgIHJldHVybiBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJsZSwgc3Ry
SW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgcmV0dXJuIGxpbmtlZFRhYmxl
LmN0aUZvclZhbHVlKCp1bmxpbmtlZFRhYmxlLCBzdHJJbXBsKS50YWdnZWRQdHI8Y2hhcio+KCk7
CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21wYXJlU3RyaW5nSW1w
bExlc3MsIHVpbnRwdHJfdCwgKFN0cmluZ0ltcGwqIGEsIFN0cmluZ0ltcGwqIGIpKQpAQCAtMzcz
Nyw3ICszNzM3LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtEaXJl
Y3RDYWxsLCB2b2lkLCAoT3B0aW1pemluZ0NhbGxMaW5rSW5mbyoKIAogICAgIC8vIEZJWE1FOiBT
dXBwb3J0IHdhc20gSUMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMDMzOQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyOworICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CiAgICAgRGVmZXJUcmFwcyBkZWZlclRyYXBzKHZtKTsg
Ly8gV2UgY2FuJ3QgamV0dGlzb24gdGhpcyBjb2RlIGlmIHdlJ3JlIGFib3V0IHRvIGxpbmsgdG8g
aXQuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKaW5kZXggYTBkMThhM2UyNzQ5Li4zMjhmZWNjY2Y0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC01NTAyLDcgKzU1MDIsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUqIG5vZGUsIEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
ICAgICAgICAgYXV0byBzbG93UGF0aEVuZCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICBt
X2ppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc2xvd1BhdGhFbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0gc3RhdGljX2Nhc3Q8Y2hh
cio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihs
aW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLnRhZ2dlZFB0cigpKSAtIHN0YXRpY19j
YXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkudGFnZ2VkUHRy
KCkpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXpl
OwogICAgICAgICAgICAgfSk7CiAjZW5kaWYKQEAgLTU1MjUsNyArNTUyNSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSogbm9kZSwgSklUQmluYXJ5TWF0aElDPEdl
bmVyYXRvcj4qIG1hdGhJCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxp
bmVFbmQgPSBtX2ppdC5sYWJlbCgpOwogICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNo
YXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzcygp
KSAtIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0
PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS50YWdnZWRQdHIoKSkgLSBz
dGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0KS50YWdn
ZWRQdHIoKSk7CiAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwog
ICAgIH0pOwogI2VuZGlmCkBAIC02MTE1LDcgKzYxMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTWF0aElDKE5vZGUqIG5vZGUsIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQwogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgICAgICAgICAgYXV0byBzbG93UGF0
aEVuZCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICBtX2ppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9
IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRp
b25PZihzbG93UGF0aFN0YXJ0KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAg
ICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
c2xvd1BhdGhFbmQpLnRhZ2dlZFB0cigpKSAtIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkudGFnZ2VkUHRyKCkpOwogICAgICAgICAgICAgICAg
IG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgICAgICAgICAgfSk7CiAj
ZW5kaWYKQEAgLTYxMzAsNyArNjEzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVN
YXRoSUMoTm9kZSogbm9kZSwgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDCiAjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBtX2ppdC5sYWJlbCgp
OwogICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKSAtIHN0YXRpY19jYXN0PGNoYXIq
PihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoaW5saW5lRW5kKS50YWdnZWRQdHIoKSkgLSBzdGF0aWNfY2FzdDxjaGFyKj4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0KS50YWdnZWRQdHIoKSk7CiAgICAgICAgIG1h
dGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgIH0pOwogI2VuZGlmCkBAIC0x
MTAwMywxMyArMTEwMDMsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00o
Tm9kZSogbm9kZSkKICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCArIDE7CiAgICAgc3dpdGNoIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykgewogICAgIGNhc2UgMToKLSAgICAgICAgY2FsbE9wZXJhdGlvbihyZWludGVy
cHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dQPihmdW5jdGlvbi5nZXQoKSksIGV4dHJhY3RSZXN1
bHQocmVzdWx0UmVncyksIEpJVENvbXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1faml0LCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcmVnc1swXSk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HUD4o
ZnVuY3Rpb24udW50eXBlZEZ1bmMoKSksIGV4dHJhY3RSZXN1bHQocmVzdWx0UmVncyksIEpJVENv
bXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1faml0LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcmVnc1swXSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgMjoKLSAgICAgICAgY2FsbE9wZXJhdGlvbihyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dQUD4oZnVuY3Rpb24uZ2V0KCkpLCBleHRyYWN0UmVzdWx0KHJlc3VsdFJlZ3MpLCBKSVRD
b21waWxlcjo6TGlua2FibGVDb25zdGFudChtX2ppdCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJlZ3NbMF0sIHJlZ3NbMV0pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR1BQPihmdW5jdGlvbi51
bnR5cGVkRnVuYygpKSwgZXh0cmFjdFJlc3VsdChyZXN1bHRSZWdzKSwgSklUQ29tcGlsZXI6Okxp
bmthYmxlQ29uc3RhbnQobV9qaXQsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCByZWdzWzBdLCByZWdzWzFdKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSAzOgotICAgICAgICBjYWxsT3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRp
b25fR1BQUD4oZnVuY3Rpb24uZ2V0KCkpLCBleHRyYWN0UmVzdWx0KHJlc3VsdFJlZ3MpLCBKSVRD
b21waWxlcjo6TGlua2FibGVDb25zdGFudChtX2ppdCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJlZ3NbMF0sIHJlZ3NbMV0sIHJlZ3NbMl0pOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR1BQUD4o
ZnVuY3Rpb24udW50eXBlZEZ1bmMoKSksIGV4dHJhY3RSZXN1bHQocmVzdWx0UmVncyksIEpJVENv
bXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1faml0LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcmVnc1swXSwgcmVnc1sxXSwgcmVnc1syXSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0xMTAyNCw3ICsxMTAyNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDYWxsRE9NR2V0dGVyKE5vZGUqIG5vZGUpCiB7CiAgICAgRE9NSklUOjpDYWxsRE9NR2V0dGVy
U25pcHBldCogc25pcHBldCA9IG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPnNuaXBwZXQ7CiAg
ICAgaWYgKCFzbmlwcGV0KSB7Ci0gICAgICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRy
VGFnPiBnZXR0ZXIgPSBub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5jdXN0b21BY2Nlc3Nvckdl
dHRlcjsKKyAgICAgICAgQ29kZVB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gZ2V0dGVyID0gbm9k
ZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7CiAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBK
U1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKQEAgLTExMDMzLDcgKzExMDMzLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET01HZXR0ZXIoTm9kZSogbm9kZSkK
IAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklU
Q2FnZSgpKQotICAgICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8Sl9KSVRPcGVyYXRpb25f
R0pJUD4oSklUQ29tcGlsZXI6OkxpbmthYmxlQ29uc3RhbnQobV9qaXQsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1
ZShiYXNlR1BSKSwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0
ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXIpKSwgVHJ1c3RlZEltbVB0cihnZXR0ZXIuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8Sl9KSVRP
cGVyYXRpb25fR0pJUD4oSklUQ29tcGlsZXI6OkxpbmthYmxlQ29uc3RhbnQobV9qaXQsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6
OkNlbGxWYWx1ZShiYXNlR1BSKSwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUtPmNh
bGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXIpKSwgVHJ1c3RlZEltbVB0cihnZXR0
ZXIudGFnZ2VkUHRyKCkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHM8Sl9KSVRPcGVyYXRpb25fR0pJPihKSVRDb21waWxlcjo6TGlua2FibGVDb25zdGFu
dChtX2ppdCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZp
ZXJVSUQobm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+aWRlbnRpZmllck51bWJlcikpKTsKIApA
QCAtMTEwNDIsNyArMTEwNDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERP
TUdldHRlcihOb2RlKiBub2RlKQogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUQ2FnZSgpKQog
ICAgICAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbCh2bUVudHJ5Q3VzdG9tR2V0dGVyKTsKICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGJ5cGFz
c2VkRnVuY3Rpb24gPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPihXVEY6
OnRhZ05hdGl2ZUNvZGVQdHJJbXBsPE9wZXJhdGlvblB0clRhZz4oV1RGOjp1bnRhZ05hdGl2ZUNv
ZGVQdHJJbXBsPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihnZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpKS50b0Z1bmN0aW9uUHRyKCk7CisgICAgICAgICAgICBDb2RlUHRyPE9wZXJhdGlvblB0clRh
Zz4gYnlwYXNzZWRGdW5jdGlvbihXVEY6OnRhZ05hdGl2ZUNvZGVQdHJJbXBsPE9wZXJhdGlvblB0
clRhZz4oV1RGOjp1bnRhZ05hdGl2ZUNvZGVQdHJJbXBsPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihn
ZXR0ZXIudGFnZ2VkUHRyKCkpKSk7CiAgICAgICAgICAgICBtX2ppdC5hcHBlbmRPcGVyYXRpb25D
YWxsKGJ5cGFzc2VkRnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgICAgIG1faml0LnNldHVwUmVz
dWx0cyhyZXN1bHRSZWdzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAppbmRleCAxZDc1YjlkMjNiZjYuLmQ2Y2E0MjI3YjZkYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMTAwMCw3ICsxMDAw
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYWRkIGNhbGwgaW5z
dHJ1Y3Rpb25zLCBvcHRpb25hbGx5IHNldHRpbmcgcmVzdWx0cywgYW5kIG9wdGlvbmFsbHkgcm9s
bGluZyBiYWNrIHRoZSBjYWxsIGZyYW1lIG9uIGFuIGV4Y2VwdGlvbi4KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVu
Y3Rpb24pCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbChjb25zdCBDb2RlUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJu
YWxDYWxsKCk7CiAgICAgICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKQEAgLTEwMTQsMjEgKzEwMTQsMjEgQEAgcHVibGljOgogICAg
ICAgICBtX2ppdC5hcHBlbmRDYWxsKGFkZHJlc3MpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZE9wZXJhdGlvbkNhbGwoY29uc3QgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPiBmdW5jdGlvbikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRPcGVyYXRpb25DYWxs
KGNvbnN0IENvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAg
IHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKTsKICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9y
aWdpbihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICByZXR1cm4gbV9q
aXQuYXBwZW5kT3BlcmF0aW9uQ2FsbChmdW5jdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IENv
ZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2tXaXRoQ2FsbEZyYW1lUm9sbGJhY2soKTsKICAgICAgICAgcmV0dXJuIGNhbGw7
CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uU2V0UmVzdWx0KGNvbnN0IENv
ZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAg
ICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24oZnVuY3Rpb24pOwogICAgICAgICBpZiAoKHJlc3VsdCAhPSBJbnZh
bGlkR1BSUmVnKSAmJiAocmVzdWx0ICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKSkKQEAgLTEw
NTgsNyArMTA1OCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBl
bmRDYWxsU2V0UmVzdWx0KGNvbnN0IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwg
R1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVn
KQpAQCAtMTA2NiwxNCArMTA2NiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjYWxsOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdDEsIEdQ
UlJlZyByZXN1bHQyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQo
Y29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0MSwg
R1BSUmVnIHJlc3VsdDIpCiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIG1faml0LnNldHVwUmVzdWx0cyhyZXN1bHQx
LCByZXN1bHQyKTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKQogICAgIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgcmVzdWx0
UmVncy5ncHIoKSk7CkBAIC0xMDgyLDcgKzEwODIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9
CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBDb2RlUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIGlmIChyZXN1
bHQgIT0gSW52YWxpZEZQUlJlZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNw
cAppbmRleCBhMzQyMWM2N2Q1NjcuLjI5Yzg4YTMwN2JlNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYg
dm0pCiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpERkdUaHVuayk7CiAgICAgCi0gICAgcGF0Y2hCdWZmZXIubGlu
ayhmdW5jdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ29t
cGlsZU9TUkV4aXQpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oZnVu
Y3Rpb25DYWxsLCBvcGVyYXRpb25Db21waWxlT1NSRXhpdCk7CiAKICAgICByZXR1cm4gRklOQUxJ
WkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZHIE9TUiBleGl0IGdlbmVy
YXRpb24gdGh1bmsiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNh
c3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAKaW5kZXggNjJhMjBlMWY2YTRjLi5kYmMw
YjFhMTM5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIv
QVJNNjREaXNhc3NlbWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3Nl
bWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCkBAIC0zNCw5ICszNCw5IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIHZvaWQqIGNvZGVT
dGFydCwgdm9pZCogY29kZUVuZCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0
KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IENvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+
JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2RlRW5kLCBj
b25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7Ci0gICAgdWludDMyX3QqIGN1
cnJlbnRQQyA9IGNvZGVQdHIudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx1aW50MzJfdCo+KCk7
CisgICAgdWludDMyX3QqIGN1cnJlbnRQQyA9IGNvZGVQdHIudW50YWdnZWRQdHI8dWludDMyX3Qq
PigpOwogICAgIHNpemVfdCBieXRlQ291bnQgPSBzaXplOwogCiAgICAgdWludDMyX3QqIGFybUNv
ZGVTdGFydCA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdCo+KGNvZGVTdGFydCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0NhcHN0b25lRGlzYXNzZW1ibGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQ2Fwc3RvbmVEaXNhc3Nl
bWJsZXIuY3BwCmluZGV4IGY0OTBlNDYxYTc0OS4uMTZiZGZkMWU1YTQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0NhcHN0b25lRGlzYXNzZW1ibGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0NhcHN0b25lRGlzYXNz
ZW1ibGVyLmNwcApAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCB0
cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0
clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqIHBy
ZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBDb2Rl
UHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIHZvaWQqLCB2b2lk
KiwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIGNzaCBoYW5k
bGU7CiAgICAgY3NfaW5zbiogaW5zdHJ1Y3Rpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCmluZGV4IDFlZTZkMWVkZDU1NC4u
Y2VlNzFkNjQxMWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9EaXNhc3NlbWJsZXIuY3BwCkBAIC01NSwxMiArNTUsMTIgQEAgc3RhdGljIExhYmVsTWFw
JiBlbnN1cmVMYWJlbE1hcCgpIFdURl9SRVFVSVJFU19MT0NLKGxhYmVsTWFwTG9jaykKIAogfSAv
LyBuYW1lc3BhY2UgRGlzYXNzZW1ibGVyCiAKLXZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUs
IHZvaWQqIGNvZGVTdGFydCwgdm9pZCogY29kZUVuZCwgY29uc3QgY2hhciogcHJlZml4LCBQcmlu
dFN0cmVhbSYgb3V0KQordm9pZCBkaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERpc2Fzc2VtYmx5
UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIHZvaWQqIGNvZGVTdGFydCwgdm9pZCogY29k
ZUVuZCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIGlmICh0
cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIsIHNpemUsIGNvZGVTdGFydCwgY29kZUVuZCwgcHJlZml4
LCBvdXQpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgb3V0LnByaW50ZigiJXNkaXNhc3Nl
bWJseSBub3QgYXZhaWxhYmxlIGZvciByYW5nZSAlcC4uLiVwXG4iLCBwcmVmaXgsIGNvZGVQdHIu
dW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLCBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3M8Y2hhcio+KCkgKyBzaXplKTsKKyAgICBvdXQucHJpbnRmKCIlc2Rpc2Fzc2VtYmx5IG5v
dCBhdmFpbGFibGUgZm9yIHJhbmdlICVwLi4uJXBcbiIsIHByZWZpeCwgY29kZVB0ci51bnRhZ2dl
ZFB0cigpLCBjb2RlUHRyLnVudGFnZ2VkUHRyPGNoYXIqPigpICsgc2l6ZSk7CiB9CiAKIG5hbWVz
cGFjZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rp
c2Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3Nl
bWJsZXIuaAppbmRleCBjNDZmZWQ1ZGNlNjguLjYwZmI2MzZiZjQ5OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCkBAIC0yOCwzMSAr
MjgsMzEgQEAKICNpbmNsdWRlICJKU0NQdHJUYWcuaCIKICNpbmNsdWRlICJKU0V4cG9ydE1hY3Jv
cy5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0NvZGVQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCi10ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjsKIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OwogCiAjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCB2b2lk
KiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJl
YW0mKTsKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERpc2Fzc2VtYmx5UHRy
VGFnPiYsIHNpemVfdCwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2RlRW5kLCBjb25zdCBjaGFy
KiBwcmVmaXgsIFByaW50U3RyZWFtJik7CiAjZWxzZQotaW5saW5lIGJvb2wgdHJ5VG9EaXNhc3Nl
bWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6
ZV90LCB2b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqLCBQcmludFN0cmVhbSYpCitpbmxpbmUgYm9v
bCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IENvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6
ZV90LCB2b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqLCBQcmludFN0cmVhbSYpCiB7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogI2VuZGlmCiAKLWlubGluZSBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZSwgc2l6ZV90
IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK2lubGluZSBib29s
IHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGUs
IHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAg
ICAgcmV0dXJuIHRyeVRvRGlzYXNzZW1ibGUoY29kZSwgc2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciwg
cHJlZml4LCBvdXQpOwogfQogCiAvLyBQcmludHMgZWl0aGVyIHRoZSBkaXNhc3NlbWJseSwgb3Ig
YSBsaW5lIG9mIHRleHQgaW5kaWNhdGluZyB0aGF0IGRpc2Fzc2VtYmx5IGZhaWxlZCBhbmQKIC8v
IHRoZSByYW5nZSBvZiBtYWNoaW5lIGNvZGUgYWRkcmVzc2VzLgotdm9pZCBkaXNhc3NlbWJsZShj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+Jiwgc2l6ZV90LCB2
b2lkKiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRT
dHJlYW0mIG91dCk7Cit2b2lkIGRpc2Fzc2VtYmxlKGNvbnN0IENvZGVQdHI8RGlzYXNzZW1ibHlQ
dHJUYWc+Jiwgc2l6ZV90LCB2b2lkKiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNo
YXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCk7CiAKIC8vIEFzeW5jaHJvbm91cyBkaXNhc3Nl
bWJseS4gVGhpcyBoYXBwZW5zIG9uIGFub3RoZXIgdGhyZWFkLCBhbmQgY2FsbHMgdGhlIHByb3Zp
ZGVkCiAvLyBjYWxsYmFjayB3aGVuIHRoZSBkaXNhc3NlbWJseSBpcyBkb25lLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9SSVNDVjY0RGlzYXNzZW1ibGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvUklTQ1Y2NERpc2Fzc2Vt
Ymxlci5jcHAKaW5kZXggNzQxMDU3YjZjZTJlLi42YTdjNzc2ZTRkMDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvUklTQ1Y2NERpc2Fzc2VtYmxlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9SSVNDVjY0RGlzYXNzZW1i
bGVyLmNwcApAQCAtNjMzLDcgKzYzMyw3IEBAIENTdHJpbmcgZGlzYXNzZW1ibGVPcGNvZGUodWlu
dDMyX3QgKnBjKQogCiB9IC8vIG5hbWVzcGFjZSBSSVNDVjY0RGlzYXNzZW1ibGVyCiAKLWJvb2wg
dHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQ
dHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCosIHZvaWQqLCBjb25zdCBjaGFyKiBw
cmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCitib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgQ29k
ZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lkKiwgdm9p
ZCosIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICB1aW50MzJf
dCogY3VycmVudFBDID0gY29kZVB0ci51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPHVpbnQzMl90
Kj4oKTsKICAgICBzaXplX3QgYnl0ZUNvdW50ID0gc2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAppbmRleCAzNDlk
MzZkZTM4MzYuLmEwOWY0ZDU3OTdkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcApAQCAtMzMsNyArMzMsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2
b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK2Jvb2wg
dHJ5VG9EaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0
ciwgc2l6ZV90IHNpemUsIHZvaWQqLCB2b2lkKiwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0
cmVhbSYgb3V0KQogewogICAgIFp5ZGlzRGVjb2RlciBkZWNvZGVyOwogICAgIFp5ZGlzRGVjb2Rl
ckluaXQoJmRlY29kZXIsIFpZRElTX01BQ0hJTkVfTU9ERV9MT05HXzY0LCBaWURJU19BRERSRVNT
X1dJRFRIXzY0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kb21qaXQvRE9N
SklUU2lnbmF0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZG9taml0L0RPTUpJVFNpZ25h
dHVyZS5oCmluZGV4IGQzMWZiNGNiYjVhMS4uYjU3YmJhNDI1NWI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZG9taml0L0RPTUpJVFNpZ25hdHVyZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kb21qaXQvRE9NSklUU2lnbmF0dXJlLmgKQEAgLTI4LDcgKzI4LDcgQEAK
ICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJET01KSVRFZmZlY3QuaCIKICNpbmNs
dWRlICJTcGVjdWxhdGVkVHlwZS5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvblB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Db2RlUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRE9NSklU
IHsKIApAQCAtNDAsMTEgKzQwLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRE9NSklU
IHsKIAogY2xhc3MgU2lnbmF0dXJlIHsKIHB1YmxpYzoKLSAgICB1c2luZyBGdW5jdGlvblB0ciA9
IFdURjo6RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPjsKKyAgICB1c2luZyBDb2RlUHRyID0g
V1RGOjpDb2RlUHRyPENGdW5jdGlvblB0clRhZz47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+Ci0gICAgY29uc3RleHByIFNpZ25hdHVyZShGdW5jdGlvblB0ciBmdW5jdGlv
bldpdGhvdXRUeXBlQ2hlY2ssIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBFZmZlY3QgZWZm
ZWN0LCBTcGVjdWxhdGVkVHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAg
ICAgIDogZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrUHRyKGZ1bmN0aW9uV2l0aG91dFR5cGVDaGVj
ay5nZXQoKSkKKyAgICBjb25zdGV4cHIgU2lnbmF0dXJlKENvZGVQdHIgZnVuY3Rpb25XaXRob3V0
VHlwZUNoZWNrLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgRWZmZWN0IGVmZmVjdCwgU3Bl
Y3VsYXRlZFR5cGUgcmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IGZ1
bmN0aW9uV2l0aG91dFR5cGVDaGVja1B0cihmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2sudW50eXBl
ZEZ1bmMoKSkKICAgICAgICAgLCBjbGFzc0luZm8oY2xhc3NJbmZvKQogICAgICAgICAsIHJlc3Vs
dChyZXN1bHQpCiAgICAgICAgICwgYXJndW1lbnRzIHtzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlw
ZT4oYXJndW1lbnRzKS4uLn0KQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKLSAgICBGdW5jdGlvblB0ciBmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2soKSBjb25zdCB7IHJl
dHVybiBGdW5jdGlvblB0cihmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2tQdHIpOyB9CisgICAgQ29k
ZVB0ciBmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2soKSBjb25zdCB7IHJldHVybiBDb2RlUHRyKGZ1
bmN0aW9uV2l0aG91dFR5cGVDaGVja1B0cik7IH0KIAotICAgIGNvbnN0IFdURl9WVEJMX0ZVTkNQ
VFJfUFRSQVVUSChET01KSVRTaWduYXR1cmUpIEZ1bmN0aW9uUHRyOjpQdHIgZnVuY3Rpb25XaXRo
b3V0VHlwZUNoZWNrUHRyOworICAgIGNvbnN0IFdURl9WVEJMX0ZVTkNQVFJfUFRSQVVUSChET01K
SVRTaWduYXR1cmUpIENvZGVQdHI6OlVudHlwZWRGdW5jIGZ1bmN0aW9uV2l0aG91dFR5cGVDaGVj
a1B0cjsKICAgICBjb25zdCBDbGFzc0luZm8qIGNvbnN0IGNsYXNzSW5mbzsKICAgICBjb25zdCBT
cGVjdWxhdGVkVHlwZSByZXN1bHQ7CiAgICAgY29uc3QgU3BlY3VsYXRlZFR5cGUgYXJndW1lbnRz
W0pTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNdOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5jcHAKaW5kZXggN2FlMTEyOWEwY2ZjLi4yMjM3YTYzYTUwNmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc2LDcgKzc2LDcg
QEAgdm9pZCBKSVRDb2RlOjppbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiBlbnRyeXBvaW50KQogICAgIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQgPSBl
bnRyeXBvaW50OwogfQogCi1KSVRDb2RlOjpDb2RlUHRyPEpTRW50cnlQdHJUYWc+IEpJVENvZGU6
OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFyaXR5Q2hlY2spCitDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFyaXR5Q2hl
Y2spCiB7CiAgICAgc3dpdGNoIChhcml0eUNoZWNrKSB7CiAgICAgY2FzZSBBcml0eUNoZWNrTm90
UmVxdWlyZWQ6CkBAIC05MSw5ICs5MSw5IEBAIEpJVENvZGU6OkNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHlDaGVjCiB2b2lk
KiBKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAg
ICAgaWYgKCFvZmZzZXQpCi0gICAgICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CisgICAgICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsLnRhZ2dlZFB0cigp
OwogCi0gICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3MgPSBtX2FkZHJlc3NGb3JDYWxsLnVudGFn
Z2VkRXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgY2hhciogZXhlY3V0YWJsZUFkZHJl
c3MgPSBtX2FkZHJlc3NGb3JDYWxsLnVudGFnZ2VkUHRyPGNoYXIqPigpOwogICAgIHJldHVybiB0
YWdDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNzICsgb2Zmc2V0KTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhD
YWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aENhbGwuaApp
bmRleCA3NGZkNmVjN2I3MmYuLjE1MWEzMjA1ZWJlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBl
LCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogUmVmPExhenlTbG93UGF0aDo6R2VuZXJhdG9y
PiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICBWTSYgdm0sIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gZnVuY3Rpb24sIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGVzLi4u
IGFyZ3VtZW50cykKKyAgICBWTSYgdm0sIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlv
biwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQogewogICAg
IHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKICAgICAgICAgWz0sICZ2bV0g
KENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggZjdkM2E1M2U0OWJk
Li4xNTA4YWY5NmI1NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TGluay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcApAQCAt
MTAwLDkgKzEwMCw5IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAg
c3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVj
aywgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihjb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVj
aykpOworICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluazxPcGVyYXRpb25QdHJUYWc+KGNhbGxB
cml0eUNoZWNrLCBjb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVj
dEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjayk7CiAgICAgICAgICAgICBsaW5r
QnVmZmVyLT5saW5rKGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKHZt
LmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxp
bmsoY2FsbEFyaXR5Rml4dXAsIHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29k
ZSgpLnRvRnVuY3Rpb25QdHIoKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxB
cml0eUZpeHVwLCB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSk7CiAg
ICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcHMsIHN0YXRlLmdlbmVyYXRl
ZEZ1bmN0aW9uKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAKaW5kZXggNDdjYzNkMDhkMjgzLi40ZWY1YWJiZThlNmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTMyNSw4
ICszMjUsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KAogICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHRocm93Q2FsbCwg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dF
cnJvcikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhsb29r
dXBFeGNlcHRpb25IYW5kbGVyQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4odGhyb3dD
YWxsLCBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0
aW9uSGFuZGxlckNhbGwsIG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVy
RnJhbWUpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwpAQCAtMjQ1OSw3ICsyNDU5LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhFbmQg
PSBqaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkuZXhlY3V0
YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFy
dCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLnRhZ2dl
ZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS50YWdn
ZWRQdHI8Y2hhcio+KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dl
bmVyYXRlZENvZGVTaXplICs9IHNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICNl
bmRpZgpAQCAtMjQ3Myw3ICsyNDczLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICAgICAgICAgICAgICBhdXRvIGlubGluZUVuZCA9IGppdC5sYWJlbCgpOwogICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9j
YXRpb25PZihpbmxpbmVTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVu
ZCkudGFnZ2VkUHRyPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0
KS50YWdnZWRQdHI8Y2hhcio+KCk7CiAgICAgICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5l
cmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgICAgICAgICAgICAgIH0pOwogI2VuZGlmCkBAIC0y
NTcwLDcgKzI1NzAsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aEVuZCA9IGppdC5sYWJlbCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoRW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4o
KSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS5leGVjdXRhYmxlQWRkcmVz
czxjaGFyKj4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkudGFnZ2VkUHRyPGNoYXIqPigpIC0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLnRhZ2dlZFB0cjxjaGFyKj4oKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0g
c2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogI2VuZGlmCkBAIC0yNTg0LDcgKzI1
ODQsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgICAgICAgICAg
ICAgIGF1dG8gaW5saW5lRW5kID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAg
ICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVFbmQpLmV4ZWN1
dGFibGVBZGRyZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0
KS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS50YWdnZWRQdHI8Y2hhcio+
KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLnRhZ2dlZFB0cjxjaGFyKj4o
KTsKICAgICAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRlZENvZGVTaXplICs9IHNp
emU7CiAgICAgICAgICAgICAgICAgfSk7CiAjZW5kaWYKQEAgLTE1NzUwLDEzICsxNTc1MCwxMyBA
QCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIGF1dG8gZnVuY3Rpb24gPSBzaWdu
YXR1cmUtPmZ1bmN0aW9uV2l0aG91dFR5cGVDaGVjaygpOwogICAgICAgICBzd2l0Y2ggKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7CiAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJl
c3VsdCA9IHZtQ2FsbChJbnQ2NCwgcmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HUD4o
ZnVuY3Rpb24uZ2V0KCkpLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBvcGVyYW5kc1swXSk7
CisgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIHJlaW50ZXJwcmV0X2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR1A+KGZ1bmN0aW9uLnVudHlwZWRGdW5jKCkpLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLCBvcGVyYW5kc1swXSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSAyOgotICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCByZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0dQUD4oZnVuY3Rpb24uZ2V0KCkpLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0pOworICAgICAgICAgICAgcmVzdWx0ID0g
dm1DYWxsKEludDY0LCByZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dQUD4oZnVuY3Rp
b24udW50eXBlZEZ1bmMoKSksIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIG9wZXJhbmRzWzBd
LCBvcGVyYW5kc1sxXSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAzOgotICAg
ICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCByZWludGVycHJldF9jYXN0PEpfSklUT3Bl
cmF0aW9uX0dQUFA+KGZ1bmN0aW9uLmdldCgpKSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
b3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7CisgICAgICAgICAgICByZXN1
bHQgPSB2bUNhbGwoSW50NjQsIHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR1BQUD4o
ZnVuY3Rpb24udW50eXBlZEZ1bmMoKSksIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIG9wZXJh
bmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMTU3NzgsMTEgKzE1Nzc4LDExIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAg
ICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX291dC5hYnNvbHV0ZSgmdm0o
KS50b3BDYWxsRnJhbWUpKTsKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVRDYWdlKCkp
IHsKICAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICB2bUNh
bGwoSW50NjQsIHZtRW50cnlDdXN0b21HZXR0ZXIsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCks
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3JhcGguaWRl
bnRpZmllcnMoKVttX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXJd
KSwgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5jdXN0b21B
Y2Nlc3NvckdldHRlci5leGVjdXRhYmxlQWRkcmVzcygpKSkpOworICAgICAgICAgICAgICAgICAg
ICB2bUNhbGwoSW50NjQsIHZtRW50cnlDdXN0b21HZXR0ZXIsIHdlYWtQb2ludGVyKGdsb2JhbE9i
amVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVttX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJO
dW1iZXJdKSwgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5j
dXN0b21BY2Nlc3NvckdldHRlci50YWdnZWRQdHIoKSkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGdldHRl
ciA9IG1fbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXI7Ci0g
ICAgICAgICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBieXBhc3NlZEZ1bmN0
aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4oV1RGOjp0YWdOYXRp
dmVDb2RlUHRySW1wbDxPcGVyYXRpb25QdHJUYWc+KFdURjo6dW50YWdOYXRpdmVDb2RlUHRySW1w
bDxDdXN0b21BY2Nlc3NvclB0clRhZz4oZ2V0dGVyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSkudG9G
dW5jdGlvblB0cigpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBi
eXBhc3NlZEZ1bmN0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdEludFB0cihtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9u
b2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyXSkpKTsKKyAgICAgICAg
ICAgICAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBnZXR0ZXIgPSBtX25vZGUtPmNh
bGxET01HZXR0ZXJEYXRhKCktPmN1c3RvbUFjY2Vzc29yR2V0dGVyOworICAgICAgICAgICAgICAg
IENvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPiBieXBhc3NlZEZ1bmN0aW9uKFdURjo6dGFnTmF0aXZl
Q29kZVB0ckltcGw8T3BlcmF0aW9uUHRyVGFnPihXVEY6OnVudGFnTmF0aXZlQ29kZVB0ckltcGw8
Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KGdldHRlci50YWdnZWRQdHIoKSkpKTsKKyAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIGJ5cGFzc2VkRnVuY3Rpb24sIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50
UHRyKG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlk
ZW50aWZpZXJOdW1iZXJdKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC0yMDUyMiw3ICsyMDUyMiw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19F
TkQKICAgICBMVmFsdWUgdm1DYWxsKExUeXBlIHR5cGUsIE9wZXJhdGlvblR5cGUgZnVuY3Rpb24s
IEFyZ3MmJi4uLiBhcmdzKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19z
YW1lPE9wZXJhdGlvblR5cGUsIExWYWx1ZT46OnZhbHVlKTsKLSAgICAgICAgaWYgY29uc3RleHBy
ICghc3RkOjppc19zYW1lX3Y8RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiwgT3BlcmF0aW9u
VHlwZT4pCisgICAgICAgIGlmIGNvbnN0ZXhwciAoIXN0ZDo6aXNfc2FtZV92PENvZGVQdHI8T3Bl
cmF0aW9uUHRyVGFnPiwgT3BlcmF0aW9uVHlwZT4pCiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0
KEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpjQ2FsbEFyaXR5KCkgPT0gc2l6ZW9mLi4u
KEFyZ3MpLCAiU2FuaXR5IGNoZWNrIik7CiAgICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKICAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwodHlwZSwgbV9vdXQub3BlcmF0aW9uKGZ1bmN0
aW9uKSwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggYzUyMTA4MDg5YTJkLi5mMTgzNTgzMzc1ODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM0LDcgKzEz
NCw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAKICAgICBjYWxsRnJhbWUtPnNldENv
ZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0ID0gZW50cnlD
b2RlLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgdm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbChBcml0
eUNoZWNrTm90UmVxdWlyZWQpLnRhZ2dlZFB0cigpOwogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgIiAgICBFbnRyeSB3aWxsIHN1Y2NlZWQsIGdvaW5nIHRvIGFkZHJlc3Mg
IiwgUmF3UG9pbnRlcihyZXN1bHQpKTsKIAogICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ3JlIGNv
bW1pdHRlZCB0byB0cmlnZ2VyaW5nIGFuIE9TUiBlbnRyeSBpbW1lZGlhdGVseSBhZnRlciB3ZSBy
ZXR1cm4uIEhlbmNlLCBpdCBpcyBzYWZlIHRvIG1vZGlmeSBzdGFjayBoZXJlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDA4MjFk
NjhhYjllYi4uNjFkMjBlZTE5MmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgxLDcgKzY4MSw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Db21waWxlRlRMT1NSRXhpdCwgdm9pZCosIChDYWxsRnJh
bWUqIGNhbGxGcmFtCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAogICAgICAgICBl
eGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWw8
T1NSRXhpdFB0clRhZz4oZXhpdC5tX2NvZGUuY29kZSgpKSk7CiAgICAgCi0gICAgcmV0dXJuIGV4
aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHJldHVybiBleGl0Lm1f
Y29kZS5jb2RlKCkudGFnZ2VkUHRyKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCmluZGV4IDg2MGVj
YjczNWI0MS4uMTc4NTI5MzA2NGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3BlcmF0aW9ucy5jcHAKQEAgLTc0Nyw3ICs3NDcsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uQ29tcGlsZUZUTExhenlTbG93UGF0aCwgdm9pZCosIChDYWxsRnJhbWUqIGNh
bAogICAgIExhenlTbG93UGF0aCYgbGF6eVNsb3dQYXRoID0gKmppdENvZGUtPmxhenlTbG93UGF0
aHNbaW5kZXhdOwogICAgIGxhenlTbG93UGF0aC5nZW5lcmF0ZShjb2RlQmxvY2spOwogCi0gICAg
cmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cisg
ICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkuY29kZSgpLnRhZ2dlZFB0cigpOwogfQogCiBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT05fV0lUSF9BVFRSSUJVVEVTKG9wZXJhdGlvblJlcG9ydEJv
dW5kc0NoZWNrRWxpbWluYXRpb25FcnJvckFuZENyYXNoLCBOT19SRVRVUk5fRFVFX1RPX0NSQVNI
LCB2b2lkLCAoaW50cHRyX3QgY29kZUJsb2NrQXNJbnRQdHIsIGludDMyX3Qgbm9kZUluZGV4LCBp
bnQzMl90IGNoaWxkMUluZGV4LCBpbnQzMl90IGNoaWxkMkluZGV4LCBpbnQzMl90IGNoZWNrZWRJ
bmRleCwgaW50MzJfdCBib3VuZHMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgK
aW5kZXggZWQ4ZmY3M2UxYTNhLi41ZjQ1N2M0NjQyZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQwNSw3ICs0MDUsNyBAQCBwdWJsaWM6CiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDMyNAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0aW9uVHlwZT4KICAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBm
dW5jdGlvbikgeyByZXR1cm4gY29uc3RJbnRQdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqLCBPcGVy
YXRpb25QdHJUYWc+KGZ1bmN0aW9uKSk7IH0KLSAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pIHsgcmV0dXJuIGNvbnN0SW50UHRyKGZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOyB9CisgICAgTFZhbHVlIG9wZXJhdGlvbihDb2RlUHRy
PE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pIHsgcmV0dXJuIGNvbnN0SW50UHRyKGZ1bmN0aW9u
LnRhZ2dlZFB0cigpKTsgfQogCiAgICAgdm9pZCBqdW1wKExCYXNpY0Jsb2NrKTsKICAgICB2b2lk
IGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwgV2VpZ2h0IHRha2Vu
V2VpZ2h0LCBMQmFzaWNCbG9jayBub3RUYWtlbiwgV2VpZ2h0IG5vdFRha2VuV2VpZ2h0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAppbmRleCBlZGNl
ZjlmNmEzZGIuLjA3MTNjZjlhMzJlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsLmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIFNsb3dQYXRoQ2FsbENvbnRl
eHQ6On5TbG93UGF0aENhbGxDb250ZXh0KCkKICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiB9CiAKLVNsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250ZXh0
OjprZXlXaXRoVGFyZ2V0KEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdldCkg
Y29uc3QKK1Nsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0
KENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KSBjb25zdAogewogICAgIHVpbnQ4
X3QgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxl
ZCA9IDA7CiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmNsb2JiZXJBbGxSZWdzSW5GVExJQ1Ns
b3dQYXRoKCkpKQpAQCAtMTMwLDcgKzEzMCw3IEBAIFNsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENh
bGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KENDYWxsSGVscGVyczo6QWRkcmVzcyBhZGRyZXNzCiAg
ICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleShtX3RodW5rU2F2ZVNldCwgbnVsbHB0ciwgbnVtYmVy
T2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCwgbV9vZmZz
ZXQsIGFkZHJlc3Mub2Zmc2V0KTsKIH0KIAotU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRl
eHQ6Om1ha2VDYWxsKFZNJiB2bSwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFy
Z2V0KQorU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwg
Q29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQpCiB7CiAgICAgU2xvd1BhdGhDYWxs
S2V5IGtleSA9IGtleVdpdGhUYXJnZXQoY2FsbFRhcmdldCk7CiAgICAgU2xvd1BhdGhDYWxsIHJl
c3VsdCA9IFNsb3dQYXRoQ2FsbChtX2ppdC5jYWxsKEpJVFRodW5rUHRyVGFnKSwga2V5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCmluZGV4IGNmOTYxNmUz
YmJlNi4uYzQ3ZDlmYWRlNTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsLmgKQEAgLTU5LDExICs1OSwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBOT1RFOiBU
aGUgY2FsbCB0aGF0IHRoaXMgcmV0dXJucyBpcyBhbHJlYWR5IGdvaW5nIHRvIGJlIGxpbmtlZCBi
eSB0aGUgSklUIHVzaW5nIGFkZExpbmtUYXNrKCksCiAgICAgLy8gc28gdGhlcmUgaXMgbm8gbmVl
ZCBmb3IgeW91IHRvIGxpbmsgaXQgeW91cnNlbGYuCi0gICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxs
KFZNJiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KTsKKyAgICBTbG93
UGF0aENhbGwgbWFrZUNhbGwoVk0mLCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFRhcmdl
dCk7CiAgICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxsKFZNJiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KTsKIAogcHJpdmF0ZToKLSAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0aFRhcmdldChGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQpIGNvbnN0OworICAgIFNsb3dQYXRoQ2Fs
bEtleSBrZXlXaXRoVGFyZ2V0KENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KSBj
b25zdDsKICAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0aFRhcmdldChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MpIGNvbnN0OwogICAgIAogICAgIFJlZ2lzdGVyU2V0IG1fYXJndW1lbnRSZWdpc3RlcnM7
CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgVk0mIHZtLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENDYWxsSGVscGVy
czo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKLSAgICBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3Vt
ZW50cykKKyAgICBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1
bHRHUFIsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQogewogICAgIFNsb3dQYXRoQ2FsbCBj
YWxsOwogICAgIHsKQEAgLTk2LDcgKzk2LDcgQEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24o
CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxP
cGVyYXRpb24oCiAgICAgVk0mIHZtLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q0NhbGxIZWxwZXJzJiBqaXQsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwKLSAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRHUFIsCisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rp
b24sIEdQUlJlZyByZXN1bHRHUFIsCiAgICAgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7
CiAgICAgaWYgKGNhbGxTaXRlSW5kZXgpIHsKQEAgLTExMiw3ICsxMTIsNyBAQCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKFN0YXRlJiwgQ29kZU9yaWdpbik7CiB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRp
b24oCiAgICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q0NhbGxIZWxwZXJzJiBqaXQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKLSAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQor
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwgQ29kZVB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmd1bWVudFR5cGVzLi4uIGFy
Z3VtZW50cykKIHsKICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbigKICAgICAgICAgc3RhdGUudm0o
KSwgdXNlZFJlZ2lzdGVycywgaml0LCBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdpbihzdGF0ZSwg
Y29kZU9yaWdpbiksIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAKaW5kZXggMDgzYjM1MzZhNThl
Li5hMWIyYTRkNTFhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U2xvd1BhdGhDYWxsS2V5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNs
b3dQYXRoQ2FsbEtleS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAogdm9pZCBTbG93UGF0aENhbGxLZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoIjx1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVn
aXN0ZXJzLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCwgIiwgaW5kaXJlY3RPZmZzZXQgPSAiLCBt
X2luZGlyZWN0T2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0gIiwgUmF3UG9pbnRlcihtX2NhbGxUYXJn
ZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIG91dC5wcmludCgiPHVzZWRSZWdpc3RlcnMg
PSAiLCBtX3VzZWRSZWdpc3RlcnMsICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0LCAiLCBpbmRpcmVj
dE9mZnNldCA9ICIsIG1faW5kaXJlY3RPZmZzZXQsICIsIGNhbGxUYXJnZXQgPSAiLCBSYXdQb2lu
dGVyKG1fY2FsbFRhcmdldC50YWdnZWRQdHIoKSkpOwogICAgIGlmIChPcHRpb25zOjpjbG9iYmVy
QWxsUmVnc0luRlRMSUNTbG93UGF0aCgpKQogICAgICAgICBvdXQucHJpbnQoIiwgYXJndW1lbnRS
ZWdpc3RlcnMgPSAiLCBhcmd1bWVudFJlZ2lzdGVyc0lmQ2xvYmJlcmluZ0NoZWNrSXNFbmFibGVk
KCkpOwogICAgIG91dC5wcmludCgiPiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsS2V5LmgKaW5kZXggMDlhYjhhZDFjYmI5Li42OTgwZTVlZmE3YmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU2LDcgKzU2LDcgQEAgcHVibGljOgogCiAgICAgU2xvd1BhdGhDYWxsS2V5KCkgPSBkZWZhdWx0
OwogICAgIAotICAgIFNsb3dQYXRoQ2FsbEtleShjb25zdCBSZWdpc3RlclNldCYgc2V0LCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQsIHVpbnQ4X3QgbnVtYmVyT2ZVc2Vk
QXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCwgc2l6ZV90IG9mZnNl
dCwgaW50MzJfdCBpbmRpcmVjdE9mZnNldCkKKyAgICBTbG93UGF0aENhbGxLZXkoY29uc3QgUmVn
aXN0ZXJTZXQmIHNldCwgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQsIHVpbnQ4
X3QgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxl
ZCwgc2l6ZV90IG9mZnNldCwgaW50MzJfdCBpbmRpcmVjdE9mZnNldCkKICAgICAgICAgOiBtX251
bWJlck9mVXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZDbG9iYmVyaW5nQ2hlY2tJc0VuYWJsZWQobnVt
YmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCkKICAg
ICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgICAgICwgbV91c2VkUmVnaXN0ZXJzKHNldCkK
QEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQob2Zmc2V0ID09IG1fb2Zm
c2V0KTsKICAgICB9CiAgICAgCi0gICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjYWxs
VGFyZ2V0KCkgY29uc3QKKyAgICBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gY2FsbFRhcmdldCgp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAodHlwZSgpID09IFR5cGU6OkRpcmVjdCkKICAgICAg
ICAgICAgIHJldHVybiBtX2NhbGxUYXJnZXQ7CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIFNsb3dQYXRoQ2FsbEtleSB3aXRoQ2Fs
bFRhcmdldChGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQpCisgICAgU2xv
d1BhdGhDYWxsS2V5IHdpdGhDYWxsVGFyZ2V0KENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxs
VGFyZ2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0
ZXJzKCksIGNhbGxUYXJnZXQsIG51bWJlck9mVXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZDbG9iYmVy
aW5nQ2hlY2tJc0VuYWJsZWQoKSwgb2Zmc2V0KCksIGluZGlyZWN0T2Zmc2V0KCkpOwogICAgIH0K
QEAgLTEzNSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICAvLyBtX251bWJlck9m
VXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZDbG9iYmVyaW5nQ2hlY2tJc0VuYWJsZWQgaXMgaW50ZW50
aW9uYWxseSBub3QgaW5jbHVkZWQgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSAwCiAgICAgICAg
IC8vIHVubGVzcyBPcHRpb25zOjpjbG9iYmVyQWxsUmVnc0luRlRMSUNTbG93UGF0aCgpIGlzIHNl
dCwgYW5kIE9wdGlvbnM6OmNsb2JiZXJBbGxSZWdzSW5GVExJQ1Nsb3dQYXRoKCkgaXMgb25seSBz
ZXQgaW4gZGVidWdnaW5nIHVzZSBjYXNlcy4KLSAgICAgICAgcmV0dXJuIFB0ckhhc2g8dm9pZCo+
OjpoYXNoKGNhbGxUYXJnZXQoKS5leGVjdXRhYmxlQWRkcmVzcygpKSArIG1fb2Zmc2V0ICsgbV91
c2VkUmVnaXN0ZXJzLmhhc2goKSArIGluZGlyZWN0T2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4odHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKGNhbGxU
YXJnZXQoKS50YWdnZWRQdHIoKSkgKyBtX29mZnNldCArIG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkg
KyBpbmRpcmVjdE9mZnNldCgpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUoKSk7CiAgICAg
fQogCiBwcml2YXRlOgpAQCAtMTQ1LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQogCiAgICAgdW5p
b24gewotICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fY2FsbFRhcmdldCB7
IH07CisgICAgICAgIENvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPiBtX2NhbGxUYXJnZXQgeyB9Owog
ICAgICAgICBpbnQzMl90IG1faW5kaXJlY3RPZmZzZXQ7CiAgICAgfTsKICAgICBzaXplX3QgbV9u
dW1iZXJPZlVzZWRBcmd1bWVudFJlZ2lzdGVyc0lmQ2xvYmJlcmluZ0NoZWNrSXNFbmFibGVkIDog
OCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAppbmRleCAyMjE5
YzE0NjIzMjEuLjRkNTZhNGExOTUwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1
bmtzLmNwcApAQCAtNDYsNyArNDYsNyBAQCBlbnVtIGNsYXNzIEZyYW1lQW5kU3RhY2tBZGp1c3Rt
ZW50UmVxdWlyZW1lbnQgewogfTsKIAogc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKLSAgICBWTSYgdm0s
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZ2VuZXJhdGlvbkZ1bmN0aW9uLCBQdHJUYWcg
cmVzdWx0VGFnLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUs
IEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgZnJhbWVBbmRTdGFja0FkanVzdG1l
bnRSZXF1aXJlbWVudCkKKyAgICBWTSYgdm0sIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBnZW5l
cmF0aW9uRnVuY3Rpb24sIFB0clRhZyByZXN1bHRUYWcsIGNvbnN0IGNoYXIqIG5hbWUsIHVuc2ln
bmVkIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVu
dCBmcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50KQogewogICAgIEFzc2VtYmx5SGVs
cGVycyBqaXQobnVsbHB0cik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCmlu
ZGV4IGVmN2E0MTE4NzFjNC4uM2ZhOWU4NzNlZWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVGh1bmtzLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFy
Z3VtZW50Pgogc3RydWN0IFRodW5rTWFwIHsKICAgICB0eXBlZGVmIEtleVR5cGVBcmd1bWVudCBL
ZXlUeXBlOwogICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlUeXBlLCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+PiBUb1RodW5rTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+LCBLZXlUeXBlPiBGcm9tVGh1bmtNYXA7
CisgICAgdHlwZWRlZiBIYXNoTWFwPENvZGVQdHI8SklUVGh1bmtQdHJUYWc+LCBLZXlUeXBlPiBG
cm9tVGh1bmtNYXA7CiAgICAgCiAgICAgVG9UaHVua01hcCBtX3RvVGh1bms7CiAgICAgRnJvbVRo
dW5rTWFwIG1fZnJvbVRodW5rOwpAQCAtNjcsNyArNjcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlSWZOZWNlc3NhcnkoCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE1hcFR5cGU+Ci10eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRodW5rKE1h
cFR5cGUmIG1hcCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBwdHIpCit0
eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRodW5rKE1hcFR5cGUmIG1hcCwgQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gcHRyKQogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OkZyb21UaHVu
a01hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX2Zyb21UaHVuay5maW5kKHB0cik7CiAgICAgUkVM
RUFTRV9BU1NFUlQoaXRlciAhPSBtYXAubV9mcm9tVGh1bmsuZW5kKCkpOwpAQCAtODUsNyArODUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KHZtLCBtX3Ns
b3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcik7CiAgICAg
fQogCi0gICAgU2xvd1BhdGhDYWxsS2V5IGtleUZvclNsb3dQYXRoQ2FsbFRodW5rKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gcHRyKQorICAgIFNsb3dQYXRoQ2FsbEtleSBr
ZXlGb3JTbG93UGF0aENhbGxUaHVuayhDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBwdHIpCiAgICAg
ewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CiAgICAgICAgIHJldHVybiBrZXlG
b3JUaHVuayhtX3Nsb3dQYXRoQ2FsbFRodW5rcywgcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGExMTFlM2U4MzdiMS4u
OTFhMzk2MmViN2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKQEAgLTEwNjIsNyArMTA2Miw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09i
amVjdCoKICAgICAgICAgQVNTRVJUKGppdENvZGUgPT0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVj
dXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLnB0cigpKTsKICAgICAgICAgcmVzdWx0
ID0gaml0Q29kZS0+ZXhlY3V0ZSgmdm0sICZwcm90b0NhbGxGcmFtZSk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlUb05hdGl2ZShjYWxsRGF0
YS5uYXRpdmUuZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSwgJnZtLCAmcHJvdG9DYWxsRnJh
bWUpKTsKKyAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlUb05hdGl2ZShj
YWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24udGFnZ2VkUHRyKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1l
KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsK
ICAgICB9CiAKQEAgLTExNDEsNyArMTE0MSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPCiAg
ICAgICAgIEFTU0VSVChqaXRDb2RlID09IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRh
YmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkucHRyKCkpOwogICAgICAgICByZXN1
bHQgPSBqaXRDb2RlLT5leGVjdXRlKCZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvTmF0aXZlKGNvbnN0
cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksICZ2bSwgJnByb3Rv
Q2FsbEZyYW1lKSk7CisgICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9O
YXRpdmUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24udGFnZ2VkUHRyKCksICZ2bSwgJnBy
b3RvQ2FsbEZyYW1lKSk7CiAKICAgICAgICAgaWYgKExJS0VMWSghdGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNPYmplY3QoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCmluZGV4
IDc0MDc2MjZhNzJkNi4uZjhkMGNiNTkzZDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTA5LDcgKzEwOSw3IEBAIHVzaW5nIEpT
T3JXYXNtSW5zdHJ1Y3Rpb24gPSBzdGQ6OnZhcmlhbnQ8Y29uc3QgSlNJbnN0cnVjdGlvbiosIGNv
bnN0IFdhc21JbnN0cnVjCiAgICAgICAgIGJvb2wgbV92YWxpZCB7IGZhbHNlIH07CiAgICAgICAg
IEhhbmRsZXJUeXBlIG1fdHlwZTsKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbV9uYXRpdmVDb2RlOworICAgICAg
ICBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1fbmF0aXZlQ29kZTsKICNlbmRpZgog
CiAgICAgICAgIEpTT3JXYXNtSW5zdHJ1Y3Rpb24gbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKaW5kZXggNTNkOGQxZWE2
YWU3Li44MGIwMTg5ZGE1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q0NhbGxIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHQKICAgICBs
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2Nv
cGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpl
bWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdo
ZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNo
YXIqIGRlc2NyaXB0aW9uKQordm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihDb2Rl
UHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBl
cnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQogewogICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAgICAgZW1pdENvZGUoaml0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ND
YWxsSGVscGVycy5oCmluZGV4IGU4YWU5ZmMxODE0Mi4uODUxNjdhNjA1YmI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKQEAgLTkzOCw3ICs5MzgsNyBAQCBwdWJs
aWM6CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91
bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQ
UiwgR1BSUmVnIHNjcmF0Y2gyKTsKIAotICAgIHN0YXRpYyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFNjb3BlZExhbWJk
YTx2b2lkKENDYWxsSGVscGVycyYpPiwgY29uc3QgY2hhciopOworICAgIHN0YXRpYyB2b2lkIGVt
aXRKSVRDb2RlT3ZlcihDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1i
ZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4sIGNvbnN0IGNoYXIqKTsKIAogICAgIHZvaWQgZW1pdENU
SVRodW5rUHJvbG9ndWUoYm9vbCByZXR1cm5BZGRyZXNzQWxyZWFkeVRhZ2dlZCA9IGZhbHNlKTsK
ICAgICB2b2lkIGVtaXRDVElUaHVua0VwaWxvZ3VlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAppbmRleCA4N2M3OWU2ZDk5MjMuLmMx
MGViYzU3MzBhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuY3BwCkBAIC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJh
dG8KICAgICBsb2NhbDIubGluaygmaml0KTsKICAgICBqaXQucmV0KCk7CiAKLSAgICBhdXRvIHN0
dWJCYXNlQ29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPih0
YWdDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KHN0dWJCYXNlKSk7CisgICAgYXV0byBzdHViQmFz
ZUNvZGVQdHIgPSBDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KHRhZ0NvZGVQdHI8TGlua0J1ZmZl
clB0clRhZz4oc3R1YkJhc2UpKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBzdHVi
QmFzZUNvZGVQdHIsIHN0dWJTaXplLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAg
Ly8gV2UgZG9uJ3QgdXNlIEZJTkFMSVpFX0NPREUoKSBmb3IgdHdvIHJlYXNvbnMuCiAgICAgLy8g
VGhlIGZpcnN0IGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0aGUgd3JpdGVhYmxlIGFkZHJlc3MsIGFz
IGRpc2Fzc2VtYmxlZCBpbnN0cnVjdGlvbnMsCkBAIC0yODUsNyArMjg1LDcgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gQUxXQVlTX0lOTElORSBqaXRXcml0
ZVRodW5rR2VuZXJhdG8KICAgICBmdW5jdGlvbkFzSW50IC09IDE7CiAgICAgZnVuY3Rpb24gPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbkFzSW50KTsKICNlbmRpZgotICAgIGF1dG8g
Y29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4odGFnQ0Z1bmN0
aW9uUHRyPEpJVFRodW5rUHRyVGFnPihmdW5jdGlvbikpOworICAgIGF1dG8gY29kZVB0ciA9IENv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+KHRhZ0NGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4oZnVu
Y3Rpb24pKTsKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
Pjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGNvZGVQdHIpOwogfQogI2VuZGlmIC8vIFVTRShF
WEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQpAQCAtMzM2LDcgKzMzNiw3IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6ZVNlcGFyYXRlZFdYSGVhcHModm9pZCogc3R1
YkJhc2UsIHNpemVfdCBzdHViCiAgICAgbWVtc2V0X3MoJndyaXRhYmxlQWRkciwgc2l6ZW9mKHdy
aXRhYmxlQWRkciksIDAsIHNpemVvZih3cml0YWJsZUFkZHIpKTsKIAogI2lmIEVOQUJMRShTRVBB
UkFURURfV1hfSEVBUCkKLSAgICBnX2pzY0NvbmZpZy5qaXRXcml0ZVNlcGFyYXRlSGVhcHMgPSBy
ZWludGVycHJldF9jYXN0PEpJVFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uPih3cml0ZVRodW5r
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBnX2pzY0NvbmZpZy5qaXRXcml0ZVNl
cGFyYXRlSGVhcHMgPSByZWludGVycHJldF9jYXN0PEpJVFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0
aW9uPih3cml0ZVRodW5rLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApAQCAtNzU0
LDcgKzc1NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlciBq
aXQ7CiAgICAgICAgICAgICAgICAgYXV0byBuZWFyVGFpbENhbGwgPSBqaXQubmVhclRhaWxDYWxs
KCk7Ci0gICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPE5vUHRyVGFnPihjdXJyZW50SXNsYW5kKSwgaXNsYW5kU2l6ZUluQnl0ZXMs
IExpbmtCdWZmZXI6OlByb2ZpbGU6Okp1bXBJc2xhbmQsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBD
b2RlUHRyPE5vUHRyVGFnPihjdXJyZW50SXNsYW5kKSwgaXNsYW5kU2l6ZUluQnl0ZXMsIExpbmtC
dWZmZXI6OlByb2ZpbGU6Okp1bXBJc2xhbmQsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGZh
bHNlKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQo
KSk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgdGhpcyB0byBhcHBlYXNlIHRoZSBhc3Nl
cnRpb24gdGhhdCB3ZSdyZSBub3QgZmluYWxpemluZyBvbiBhIGNvbXBpbGVyIHRocmVhZC4gSW4g
dGhpcyBzaXR1YXRpb24sIGl0J3MKQEAgLTEyODMsNyArMTI4Myw3IEBAIFJlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlOjpjcmVhdGVJbXBsKHNpemVf
dCBzaXplSW5CCiAgICAgdm9pZCoga2V5ID0gaml0X2hlYXBfdHJ5X2FsbG9jYXRlKHNpemVJbkJ5
dGVzKTsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKE1lbW9yeVB0cjo6bWFrZUZyb21S
YXdQb2ludGVyKGtleSksIGppdF9oZWFwX2dldF9zaXplKGtleSkpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUoTWVtb3J5UHRyOjpmcm9tVW50YWdnZWRQ
dHIoa2V5KSwgaml0X2hlYXBfZ2V0X3NpemUoa2V5KSkpOwogfQogCiBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlOjp+RXhlY3V0YWJsZU1lbW9yeUhhbmRsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVNZW1vcnlIYW5kbGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCmluZGV4IDY4MGVkMGI1ZWYwYy4u
NjIyMDM3M2IxYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVNZW1vcnlIYW5kbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVNZW1vcnlIYW5kbGUuaApAQCAtMjYsNyArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNp
ZiBVU0UoTElCUEFTX0pJVF9IRUFQKSAmJiBFTkFCTEUoSklUKQotI2luY2x1ZGUgPHd0Zi9NZXRh
QWxsb2NhdG9yUHRyLmg+CisjaW5jbHVkZSA8d3RmL0NvZGVQdHIuaD4KICNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNlbHNlCiAjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0
b3JIYW5kbGUuaD4KQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgRXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxFeGVjdXRhYmxlTWVtb3J5SGFuZGwKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlKTsKIAogcHVibGljOgotICAgIHVzaW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxv
Y2F0b3JQdHI8V1RGOjpIYW5kbGVNZW1vcnlQdHJUYWc+OworICAgIHVzaW5nIE1lbW9yeVB0ciA9
IENvZGVQdHI8V1RGOjpIYW5kbGVNZW1vcnlQdHJUYWc+OwogCiAgICAgLy8gRG9uJ3QgY2FsbCB0
aGlzIGRpcmVjdGx5IC0gZm9yIHByb3BlciBhY2NvdW50aW5nIGl0J3MgbmVjZXNzYXJ5IHRvIGNh
bGwKICAgICAvLyBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZSgpLgpAQCAtNTQsNyArNTQs
NyBAQCBwdWJsaWM6CiAKICAgICBNZW1vcnlQdHIgZW5kKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBNZW1vcnlQdHI6Om1ha2VGcm9tUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZv
aWQqPihlbmRBc0ludGVnZXIoKSkpOworICAgICAgICByZXR1cm4gTWVtb3J5UHRyOjpmcm9tVW50
YWdnZWRQdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kQXNJbnRlZ2VyKCkpKTsKICAgICB9
CiAKICAgICB1aW50cHRyX3Qgc3RhcnRBc0ludGVnZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCmluZGV4IGJkYjdiN2I4ZGU3Zi4uY2E4Njg1OTRiMDI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCkBAIC02MSwxMCArNjEsMTAgQEAgU2Vjb25kcyB0b3RhbEZUTENvbXBp
bGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTERGR0NvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZU
TEIzQ29tcGlsZVRpbWU7CiAKLXZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBu
ZXdDYWxsZWVGdW5jdGlvbikKK3ZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0Nh
bGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgKLSAgICAg
ICAgQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLAorICAgICAgICBDb2Rl
TG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KENvZGVQdHI8UmV0dXJuQWRkcmVzc1B0
clRhZz46OmZyb21UYWdnZWRQdHIoY29uc3RfY2FzdDx2b2lkKj4ocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKSkpLAogICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJU
YWc+KCkpOwogfQogCkBAIC05OTUsNyArOTk1LDcgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAg
ICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKICAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2Rl
IGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOworICAgIENvZGVQdHI8SlNF
bnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50
cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7CiAgICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBC
YXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOwogCiAgICAgbV9qaXRDb2Rl
LT5tX3VubGlua2VkQ2FsbHMgPSBGaXhlZFZlY3RvcjxVbmxpbmtlZENhbGxMaW5rSW5mbz4obV91
bmxpbmtlZENhbGxzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCAxZDgxMDEy
MjE1YjEuLjg1ZjYyYTE4ZjFjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC03MiwxMyAr
NzIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KICAgICBz
dHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb207Ci0g
ICAgICAgIEZ1bmN0aW9uUHRyPHRhZz4gY2FsbGVlOworICAgICAgICBDb2RlUHRyPHRhZz4gY2Fs
bGVlOwogCiAgICAgICAgIENhbGxSZWNvcmQoKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb20sIEZ1bmN0aW9uUHRyPHRh
Zz4gY2FsbGVlKQorICAgICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb20s
IENvZGVQdHI8dGFnPiBjYWxsZWUpCiAgICAgICAgICAgICA6IGZyb20oZnJvbSkKICAgICAgICAg
ICAgICwgY2FsbGVlKGNhbGxlZSkKICAgICAgICAgewpAQCAtMTQ4LDcgKzE0OCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlu
a0luZm87CiAgICAgfTsKIAotICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJl
dHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVu
Y3Rpb24pOworICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJl
c3NQdHIsIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKICAg
ICBjbGFzcyBKSVQgZmluYWwgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmll
bmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwpAQCAtMTk4LDcgKzE5OCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sq
LCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJv
bSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCi0gICAgICAgIENhbGwgYXBw
ZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorICAg
ICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uKQogICAgICAgICB7CiAgICAgICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgIG1fZmFyQ2FsbHMuYXBwZW5kKEZhckNhbGxSZWNv
cmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsK
QEAgLTIxMSw3ICsyMTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAjaWYgT1Mo
V0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aFNsb3dQ
YXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQorICAgICAgICBDYWxsIGFwcGVuZENhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IENv
ZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewogICAgICAgICAgICAg
Q2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlwZShPcGVyYXRpb25Q
dHJUYWcpOwogICAgICAgICAgICAgbV9mYXJDYWxscy5hcHBlbmQoRmFyQ2FsbFJlY29yZChmdW5j
dGlvbkNhbGwsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpOwpAQCAtNjkz
LDEzICs2OTMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaGFzQW55
U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9
CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBDb2RlUHRy
PENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soQWRkcmVzcyk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBD
b2RlUHRyPENGdW5jdGlvblB0clRhZz4pOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBDb2RlUHRy
PENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lk
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgQ29kZVB0cjxD
RnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJl
c3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmluZGV4IDRlZDQ3NTFhNzE3Yy4uMWRmOWI1YTg2
YjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAg
LTc0Niw3ICs3NDYsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBKU0luc3RydWN0aW9uKgogI2lmIEVOQUJMRShNQVRI
X0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKICAgICBhZGRMaW5rVGFz
ayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4o
KSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8
Y2hhcio+KCk7CisgICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlu
bGluZUVuZCkudGFnZ2VkUHRyPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGlu
ZVN0YXJ0KS50YWdnZWRQdHI8Y2hhcio+KCk7CiAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRD
b2RlU2l6ZSArPSBzaXplOwogICAgIH0pOwogI2VuZGlmCkBAIC04MTMsNyArODEzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMs
IGNvbnN0IEpTSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRv
IGlubGluZUVuZCA9IGxhYmVsKCk7CiAgICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
KGlubGluZUVuZCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBz
aXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVFbmQpLnRhZ2dlZFB0cjxj
aGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVTdGFydCkudGFnZ2VkUHRyPGNo
YXIqPigpOwogICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKICAg
ICB9KTsKICNlbmRpZgpAQCAtODUxLDcgKzg1MSw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEpTSW5zdHJ1Y3Rpb24q
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVs
KCk7CiAgICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoRW5kKS5leGVj
dXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0
YXJ0KS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLnRhZ2dlZFB0cjxjaGFyKj4oKSAtIGxp
bmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS50YWdnZWRQdHI8Y2hhcio+KCk7CiAg
ICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgIH0pOwogI2Vu
ZGlmCkBAIC05MTIsNyArOTEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEpTSW5zdHJ1Y3Rpb24KICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKICAgICBh
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90
IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLmV4ZWN1dGFibGVBZGRy
ZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLmV4ZWN1
dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihzbG93UGF0aEVuZCkudGFnZ2VkUHRyPGNoYXIqPigpIC0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLnRhZ2dlZFB0cjxjaGFyKj4oKTsKICAgICAgICAgbWF0
aElDLT5tX2dlbmVyYXRlZENvZGVTaXplICs9IHNpemU7CiAgICAgfSk7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCmluZGV4IDY4MTU5YmRmNjljNi4uOTQ0MDE0NTBj
MzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjAsMTEgKzE2
MCwxMSBAQCBKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRDb2RlV2l0aENvZGVSZWYoKQogdm9pZCog
SklUQ29kZVdpdGhDb2RlUmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZz
ZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwotICAgIGFzc2VydElzVGFnZ2VkV2l0
aDxKU0VudHJ5UHRyVGFnPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
YXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KG1fcmVmLmNvZGUoKS50YWdnZWRQdHIo
KSk7CiAgICAgaWYgKCFvZmZzZXQpCi0gICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKS50YWdnZWRQdHIoKTsK
IAotICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDb2RlUHRyPGNoYXIqLCBKU0Vu
dHJ5UHRyVGFnPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgY2hhciog
ZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NvZGVQdHI8Y2hhciosIEpTRW50cnlQdHJUYWc+KG1f
cmVmLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAgICAgcmV0dXJuIHRhZ0NvZGVQdHI8SlNFbnRyeVB0
clRhZz4oZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQpOwogfQogCkBAIC0xNzgsNyArMTc4LDcg
QEAgdm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBv
ZmZzZXQpCiB1bnNpZ25lZCBKSVRDb2RlV2l0aENvZGVSZWY6Om9mZnNldE9mKHZvaWQqIHBvaW50
ZXJJbnRvQ29kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7Ci0gICAgaW50cHRyX3Qg
cmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlckludG9Db2RlKSAtIG1f
cmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzczxpbnRwdHJfdD4oKTsKKyAgICBpbnRwdHJfdCBy
ZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0gbV9y
ZWYuY29kZSgpLnRhZ2dlZFB0cjxpbnRwdHJfdD4oKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpKSA9PSByZXN1bHQpOwogICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KTsKIH0KQEAgLTIwMCw3ICsyMDAs
NyBAQCBEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVFR5cGUgaml0VHlwZSkKIHsKIH0K
IAotRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRDb2RlOjpDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVj
aywgSklUVHlwZSBqaXRUeXBlLCBKSVRDb2RlOjpTaGFyZUF0dHJpYnV0ZSBzaGFyZUF0dHJpYnV0
ZSkKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoSklUQ29kZTo6Q29kZVJlZjxKU0VudHJ5
UHRyVGFnPiByZWYsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2ssIEpJVFR5
cGUgaml0VHlwZSwgSklUQ29kZTo6U2hhcmVBdHRyaWJ1dGUgc2hhcmVBdHRyaWJ1dGUpCiAgICAg
OiBKSVRDb2RlV2l0aENvZGVSZWYocmVmLCBqaXRUeXBlLCBzaGFyZUF0dHJpYnV0ZSkKICAgICAs
IG1fd2l0aEFyaXR5Q2hlY2sod2l0aEFyaXR5Q2hlY2spCiB7CkBAIC0yMDgsNyArMjA4LDcgQEAg
RGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRDb2RlOjpDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IHJlZiwgSklUQ29kZTo6Q29kZVAKICAgICBBU1NFUlQobV93aXRoQXJpdHlDaGVjayk7CiB9
CiAKLURpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoSklUQ29kZTo6Q29kZVJlZjxKU0VudHJ5
UHRyVGFnPiByZWYsIEpJVENvZGU6OkNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2ssIEpJVFR5cGUgaml0VHlwZSwgSW50cmluc2ljIGludHJpbnNpYywgSklUQ29kZTo6U2hhcmVB
dHRyaWJ1dGUgc2hhcmVBdHRyaWJ1dGUpCitEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJ
VENvZGU6OkNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVmLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlIGppdFR5cGUsIEludHJpbnNpYyBpbnRyaW5zaWMsIEpJ
VENvZGU6OlNoYXJlQXR0cmlidXRlIHNoYXJlQXR0cmlidXRlKQogICAgIDogSklUQ29kZVdpdGhD
b2RlUmVmKHJlZiwgaml0VHlwZSwgc2hhcmVBdHRyaWJ1dGUpCiAgICAgLCBtX3dpdGhBcml0eUNo
ZWNrKHdpdGhBcml0eUNoZWNrKQogewpAQCAtMjIxLDcgKzIyMSw3IEBAIERpcmVjdEpJVENvZGU6
On5EaXJlY3RKSVRDb2RlKCkKIHsKIH0KIAotdm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXpl
Q29kZVJlZkZvckRGRyhKSVRDb2RlOjpDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlZiwgSklUQ29k
ZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKK3ZvaWQgRGlyZWN0SklU
Q29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkcoSklUQ29kZTo6Q29kZVJlZjxKU0VudHJ5UHRy
VGFnPiByZWYsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fcmVmKTsKICAgICBtX3JlZiA9IHJlZjsKQEAgLTIzMCw3ICsyMzAs
NyBAQCB2b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmRm9yREZHKEpJVENvZGU6
OkNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVmLAogICAgIEFTU0VSVChtX3dpdGhBcml0eUNoZWNr
KTsKIH0KIAotSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBEaXJlY3RKSVRDb2RlOjph
ZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkKK0NvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gRGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHkpCiB7
CiAgICAgc3dpdGNoIChhcml0eSkgewogICAgIGNhc2UgQXJpdHlDaGVja05vdFJlcXVpcmVkOgpA
QCAtMjU5LDcgKzI1OSw3IEBAIE5hdGl2ZUpJVENvZGU6On5OYXRpdmVKSVRDb2RlKCkKIHsKIH0K
IAotSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBOYXRpdmVKSVRDb2RlOjphZGRyZXNz
Rm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkKK0NvZGVQdHI8SlNFbnRyeVB0clRhZz4gTmF0
aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUgYXJpdHkpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHN3aXRjaCAoYXJpdHkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgKaW5kZXggYTllNmI4YWFlMTA5Li5lMzllZjRjNDc1MGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCkBAIC02Nyw3ICs2Nyw2IEBAIHN0YXRpY19hc3Nl
cnQoV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIoc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5
cGVfdDxKSVRUeXBlCiAKIGNsYXNzIEpJVENvZGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8SklUQ29kZT4gewogcHVibGljOgotICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IHVzaW5nIENv
ZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjsKICAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPiB1c2luZyBDb2RlUmVmID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz47CiAKICAgICBz
dGF0aWMgQVNDSUlMaXRlcmFsIHR5cGVOYW1lKEpJVFR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlSW5saW5lcy5oCmluZGV4IGJjZmJjZmY5NWFhYy4uNjY4ZTFkODgwZTlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGVJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlSW5saW5lcy5oCkBAIC0zOCw3
ICszOCw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVRDb2RlOjpleGVjdXRlKFZNKiB2bSwg
UHJvdG9DYWxsRnJhbWUqIHByb3RvQ2FsbEZyYW1lKQogICAgICAgICB2bS0+ZGlkRW50ZXJWTSA9
IHRydWU7CiAgICAgfSk7CiAgICAgdm9pZCogZW50cnlBZGRyZXNzOwotICAgIGVudHJ5QWRkcmVz
cyA9IGFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgIGVudHJ5QWRkcmVzcyA9IGFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS50YWdnZWRQ
dHIoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9KYXZh
U2NyaXB0KGVudHJ5QWRkcmVzcywgdm0sIHByb3RvQ2FsbEZyYW1lKSk7CiAgICAgcmV0dXJuIHNj
b3BlLmV4Y2VwdGlvbigpID8ganNOdWxsKCkgOiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvbXBpbGF0aW9uLmgKaW5kZXggYWQ4OWM2M2FmZmQzLi4wMDdlMTFjZTcy
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb24u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uLmgKQEAgLTQ4
LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKENv
bXBpbGF0aW9uJiYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVENvbXBpbGF0aW9uUHRyVGFnPiBjb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlUmVmLmNvZGUoKTsgfQorICAgIENvZGVQdHI8SklUQ29tcGlsYXRp
b25QdHJUYWc+IGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9CiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVENvbXBpbGF0aW9uUHRyVGFnPiBjb2RlUmVmKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlUmVmOyB9CiAgICAgCiAgICAgQ1N0cmluZyBkaXNhc3NlbWJseSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZVJlZi5kaXNhc3NlbWJseSgpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAKaW5kZXggYTE4ZmQ2M2YxMjc5Li44
MDIzZGM0ZDcyYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlz
YXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2Vt
Ymxlci5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgSklURGlzYXNzZW1ibGVyOjp+SklURGlzYXNzZW1i
bGVyKCkKIAogdm9pZCBKSVREaXNhc3NlbWJsZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikKIHsKLSAgICBtX2NvZGVTdGFydCA9IGxpbmtCdWZmZXIuZW50
cnlwb2ludDxEaXNhc3NlbWJseVB0clRhZz4oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgbV9jb2RlU3RhcnQgPSBsaW5rQnVmZmVyLmVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJU
YWc+KCkudW50YWdnZWRQdHIoKTsKICAgICBtX2NvZGVFbmQgPSBiaXR3aXNlX2Nhc3Q8dWludDhf
dCo+KG1fY29kZVN0YXJ0KSArIGxpbmtCdWZmZXIuc2l6ZSgpOwogCiAgICAgZHVtcEhlYWRlcihv
dXQsIGxpbmtCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5jcHAKaW5kZXggNzhhN2IwMDYxYjliLi5mNzUxZDlkY2MwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNjEsNyArNjEsNyBAQCB2b2lkIGdl
bmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoaGFuZGxl
ci5tX3ZhbGlkKSB7CiAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGhhbmRsZXIubV9j
YXRjaFBDRm9ySW50ZXJwcmV0ZXI7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgY2F0Y2hSb3V0
aW5lID0gaGFuZGxlci5tX25hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAg
Y2F0Y2hSb3V0aW5lID0gaGFuZGxlci5tX25hdGl2ZUNvZGUudGFnZ2VkUHRyKCk7CiAjZWxzZQog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICNlcnJvciBXQVNNIHJlcXVpcmVzIHRoZSBKSVQsIHNv
IHRoaXMgc2VjdGlvbiBhc3N1bWVzIHdlIGFyZSBpbiBKUwpAQCAtNzUsNyArNzUsNyBAQCB2b2lk
IGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgICAg
IGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRDb2RlUHRyKHBjLT5vcGNvZGVJRCgpKTsKICNlbmRp
ZgogICAgIH0gZWxzZQotICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTEludDo6aGFuZGxlVW5jYXVn
aHRFeGNlcHRpb24odm0pLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBjYXRj
aFJvdXRpbmUgPSBMTEludDo6aGFuZGxlVW5jYXVnaHRFeGNlcHRpb24odm0pLmNvZGUoKS50YWdn
ZWRQdHIoKTsKIAogICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsRnJhbWUp
IDwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odm0udG9wRW50cnlGcmFtZSkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IGY5NTUzOTFlYThjZi4uMWFkNzhmMmM5
NmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtOTEsNyArOTEs
NyBAQCBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZE5lYXJDYWxsKENvZGVQ
dHI8Tm9QdHJUYWc+IHRhcmdldCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8g
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KICAgICBDYWxsIG5ha2Vk
Q2FsbCA9IG5lYXJDYWxsKCk7Ci0gICAgbV9uZWFyQ2FsbHMuYXBwZW5kKE5lYXJDYWxsUmVjb3Jk
KG5ha2VkQ2FsbCwgdGFyZ2V0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCkudG9GdW5jdGlv
blB0cigpKSk7CisgICAgbV9uZWFyQ2FsbHMuYXBwZW5kKE5lYXJDYWxsUmVjb3JkKG5ha2VkQ2Fs
bCwgdGFyZ2V0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCkpKTsKICAgICByZXR1cm4gbmFr
ZWRDYWxsOwogfQogCkBAIC05OSw3ICs5OSw3IEBAIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJ
VDo6ZW1pdE5ha2VkTmVhclRhaWxDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IHRhcmdldCkKIHsKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJUYWlsQ2FsbCgpOwotICAg
IG1fbmVhckNhbGxzLmFwcGVuZChOZWFyQ2FsbFJlY29yZChuYWtlZENhbGwsIHRhcmdldC5yZXRh
Z2dlZDxKU0ludGVybmFsUHRyVGFnPigpLnRvRnVuY3Rpb25QdHIoKSkpOworICAgIG1fbmVhckNh
bGxzLmFwcGVuZChOZWFyQ2FsbFJlY29yZChuYWtlZENhbGwsIHRhcmdldC5yZXRhZ2dlZDxKU0lu
dGVybmFsUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKIH0KIApAQCAtMTE4LDcg
KzExOCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgpCiAg
ICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3Qg
Q29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogewogICAgIHVwZGF0ZVRvcENhbGxG
cmFtZSgpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0
aW9uKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MgZnVuY3Rpb24pCiAgICAgZXhjZXB0aW9uQ2hl
Y2soKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25z
dCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiB7CiAgICAgdXBkYXRlVG9wQ2Fs
bEZyYW1lKCk7IC8vIFRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdG9wQ2Fs
bEZyYW1lIHRvIHRoZWlyIGNhbGxlcgogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsKGZ1bmN0aW9uKTsKQEAgLTE0MSw3ICsxNDEsNyBAQCBBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBDb2RlUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVu
Y3Rpb24pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7
CkBAIC0xNTUsNyArMTU1LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoQWRkcmVzcyBmdW4KIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IENv
ZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVKU1IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRN
YXRoSUMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKaW5kZXggMmFi
Njg0Nzc1NDFmLi4yMWIwNDI0ZTQ5NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUTWF0aElDLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRo
SUMuaApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2FsbFJlcGxhY2VtZW50KQorICAgIHZvaWQg
Z2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVQdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBjYWxsUmVwbGFjZW1lbnQpCiAgICAgewogICAgICAgICBhdXRvIGxpbmtKdW1wVG9P
dXRPZkxpbmVTbmlwcGV0ID0gWyZdICgpIHsKICAgICAgICAgICAgIENDYWxsSGVscGVycyBqaXQo
Y29kZUJsb2NrKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faW5saW5l
U3RhcnQgPSBzdGFydDsKIAogICAgICAgICBtX2lubGluZUVuZCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihzdGF0ZS5mYXN0UGF0aEVuZCk7Ci0gICAgICAgIEFTU0VS
VChtX2lubGluZUVuZC51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkgPiBtX2lubGluZVN0YXJ0
LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFTU0VSVChtX2lubGluZUVu
ZC51bnRhZ2dlZFB0cigpID4gbV9pbmxpbmVTdGFydC51bnRhZ2dlZFB0cigpKTsKIAogICAgICAg
ICBtX3Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KHN0YXRlLnNsb3dQYXRoQ2FsbCk7CiAgICAgICAgIG1fc2xvd1BhdGhTdGFydExv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHN0YXRlLnNs
b3dQYXRoU3RhcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5k
ZXggYmM5MDczNThjYzU5Li43ODI5ZjI3ZWI3N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcApAQCAtNzI2LDcgKzcyNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkK
ICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CiAKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRy
YUNUSVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvdykpOworICAgIHBhdGNoQnVmZmVyLmxpbms8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb24sIG9wZXJhdGlvblRocm93KTsKICAgICByZXR1cm4g
RklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9w
X3Rocm93X2hhbmRsZXIiKTsKIH0KIApAQCAtMTMxMSwxMCArMTMxMSwxMCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRv
cihWTSYgdm0pCiAgICAgaml0LnJldCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJDYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKSk7Cisg
ICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldyaXRlQmFycmll
ckNhbGwsIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKTsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBpZiAoT3B0aW9uczo6dXNlREZHSklUKCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsob3BlcmF0aW9uT3B0aW1pemVDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbk9wdGltaXplKSk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25PcHRpbWl6ZUNhbGwsIG9wZXJhdGlvbk9wdGltaXplKTsKICNlbmRpZgog
ICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJC
YXNlbGluZTogb3BfZW50ZXJfaGFuZGxlciIpOwogfQpAQCAtMTU1OSw3ICsxNTU5LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hh
bmRsZXJHZW5lcmF0b3IoVk0mIHYKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAo
KTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
b3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhbmRsZVRy
YXBzKSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbiwg
b3BlcmF0aW9uSGFuZGxlVHJhcHMpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hl
Y2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9USFVO
SyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfY2hlY2tfdHJhcHNf
aGFuZGxlciIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggMDg3MTA3ZTE2NzY2Li4xNGY0ODcyMjhiNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMTgyLDcgKzE4Miw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NYXRlcmlhbGl6ZVJlbW90ZUZ1bmN0aW9uVGFyZ2V0
Q29kZSwgU2xvd1BhdGhSCiAgICAgICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVG
b3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgdGFyZ2V0RnVuY3Rpb24sIHNjb3Bl
LCBDb2RlRm9yQ2FsbCwgY29kZUJsb2NrU2xvdCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZVJlc3VsdChudWxscHRyLCBudWxscHRyKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChleGVjdXRhYmxlLT5lbnRyeXBvaW50
Rm9yKENvZGVGb3JDYWxsLCBNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgY29k
ZUJsb2NrU2xvdCk7CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50
cnlwb2ludEZvcihDb2RlRm9yQ2FsbCwgTXVzdENoZWNrQXJpdHkpLnRhZ2dlZFB0cigpLCBjb2Rl
QmxvY2tTbG90KTsKICAgICB9CiB9CiAKQEAgLTIwNDQsNyArMjA0NCw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWl6ZSwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoVk0q
IHZtUG9pbnRlciwKIAogICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwogICAgICAg
ICBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPnNldERpZE9wdGltaXplKFRyaVN0YXRl
OjpUcnVlKTsKLSAgICAgICAgdm9pZCogdGFyZ2V0UEMgPSB1bnRhZ0NvZGVQdHI8SklUVGh1bmtQ
dHJUYWc+KHZtLmdldENUSVN0dWIoREZHOjpvc3JFbnRyeVRodW5rR2VuZXJhdG9yKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHZvaWQqIHRhcmdldFBDID0gdW50YWdDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKERGRzo6b3NyRW50cnlUaHVua0dlbmVy
YXRvcikuY29kZSgpLnRhZ2dlZFB0cigpKTsKICAgICAgICAgdGFyZ2V0UEMgPSB0YWdDb2RlUHRy
V2l0aFN0YWNrUG9pbnRlckZvckpJVENhbGwodGFyZ2V0UEMsIGNhbGxGcmFtZSk7CiAgICAgICAg
IHJldHVybiBlbmNvZGVSZXN1bHQodGFyZ2V0UEMsIGRhdGFCdWZmZXIpOwogICAgIH0KQEAgLTIw
OTgsOCArMjA5OCw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcnlPU1JF
bnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsIFNsb3dQYXRoUmV0CiAgICAgc3dpdGNoIChvcHRp
bWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0gREZHOjpwcmVwYXJlQ2F0Y2hPU1JF
bnRyeSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIG9wdGltaXplZFJlcGxhY2VtZW50LCBieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChlbnRyeS5leGVjdXRhYmxl
QWRkcmVzczxjaGFyKj4oKSwgb3B0aW1pemVkUmVwbGFjZW1lbnQpOworICAgICAgICBDb2RlUHRy
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0gREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRy
eSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIG9wdGltaXplZFJlcGxhY2VtZW50LCBieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChlbnRyeS50YWdnZWRQdHI8Y2hh
cio+KCksIG9wdGltaXplZFJlcGxhY2VtZW50KTsKICAgICB9CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgYnJlYWs7CkBAIC0yNzY2LDE0ICsyNzY2LDE0IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKEpTR2xvYmFs
CiAKICAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5i
YXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2Nr
LT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwotICAg
IHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC50YWdnZWRQ
dHIoKTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBKU1N0cmluZyogc3Ry
aW5nID0gYXNTdHJpbmcoa2V5KTsKICAgICAgICAgaWYgKHN0cmluZy0+bGVuZ3RoKCkgPT0gMSkg
ewogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gc3RyaW5nLT52YWx1ZShnbG9iYWxPYmplY3Qp
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsK
LSAgICAgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKG1pbiwgdmFsdWVb
MF0pLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXN1bHQgPSBsaW5rZWRUYWJs
ZS5jdGlGb3JWYWx1ZShtaW4sIHZhbHVlWzBdKS50YWdnZWRQdHIoKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMjc5MywxMSArMjc5MywxMSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKFZNKiB2bVBvaQogICAg
IEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1f
bWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQot
ICAgICAgICByZXN1bHQgPSBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZShtaW4sIGtleS5hc0ludDMy
KCkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0
aUZvclZhbHVlKG1pbiwga2V5LmFzSW50MzIoKSkudGFnZ2VkUHRyKCk7CiAgICAgZWxzZSBpZiAo
a2V5LmlzRG91YmxlKCkgJiYga2V5LmFzRG91YmxlKCkgPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
a2V5LmFzRG91YmxlKCkpKQotICAgICAgICByZXN1bHQgPSBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1
ZShtaW4sIHN0YXRpY19jYXN0PGludDMyX3Q+KGtleS5hc0RvdWJsZSgpKSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKKyAgICAgICAgcmVzdWx0ID0gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUobWluLCBz
dGF0aWNfY2FzdDxpbnQzMl90PihrZXkuYXNEb3VibGUoKSkpLnRhZ2dlZFB0cigpOwogICAgIGVs
c2UKLSAgICAgICAgcmVzdWx0ID0gbGlua2VkVGFibGUubV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVB
ZGRyZXNzKCk7CisgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC50YWdn
ZWRQdHIoKTsKICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNTd2l0Y2hQdHJUYWc+KHJlc3VsdCk7
CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CkBAIC0yODIw
LDkgKzI4MjAsOSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3Ry
aW5nV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKEpTR2xvYgogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAgICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgcmVzdWx0ID0gbGlua2VkVGFi
bGUuY3RpRm9yVmFsdWUodW5saW5rZWRUYWJsZSwgdmFsdWUpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKHVubGlua2VkVGFibGUs
IHZhbHVlKS50YWdnZWRQdHIoKTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gbGlua2Vk
VGFibGUuY3RpRGVmYXVsdCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHJlc3VsdCA9
IGxpbmtlZFRhYmxlLmN0aURlZmF1bHQoKS50YWdnZWRQdHIoKTsKIAogICAgIGFzc2VydElzVGFn
Z2VkV2l0aDxKU1N3aXRjaFB0clRhZz4ocmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4ocmVzdWx0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggNWFlOGYyYzczMmY3Li5hZmI5YTE5ZjhmMWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0x
NjYwLDcgKzE2NjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bQogICAgIEp1bXAgZXhjZXB0
aW9uQ2hlY2sgPSBqaXQuanVtcCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lKSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbiwgb3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUp
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7CiB9CkBAIC0xODkw
LDcgKzE4OTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdgogICAgIEp1bXAganVtcFRvSGFu
ZGxlciA9IGppdC5qdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25HZXRGcm9tU2NvcGUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUpOwogICAgIGF1dG8gaGFuZGxl
ciA9IHZtLmdldENUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlv
bkdlbmVyYXRvcik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhqdW1wVG9IYW5kbGVyLCBDb2RlTG9j
YXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVy
biBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTog
c2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwpAQCAtMjA5MCw3ICsyMDkwLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3RvX3Njb3BlR2Vu
ZXJhdG9yKFZNJiB2bSkKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAoKTsKIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0
aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblB1dFRvU2NvcGUpKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uLCBvcGVyYXRp
b25QdXRUb1Njb3BlKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2Rl
TG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcHV0X3RvX3Njb3BlIik7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0
aWNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2l6ZVN0YXRpc3RpY3MuY3Bw
CmluZGV4IGE2YTMwNTBmYzgxNC4uZDJkMWMxZWJkYzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmNwcApAQCAtNDYsNyArNDYsNyBAQCB2b2lk
IEpJVFNpemVTdGF0aXN0aWNzOjptYXJrRW5kKE1hcmtlciBtYXJrZXIsIENDYWxsSGVscGVycyYg
aml0KQogewogICAgIENDYWxsSGVscGVyczo6TGFiZWwgZW5kID0gaml0LmxhYmVsSWdub3JpbmdX
YXRjaHBvaW50cygpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPSwgdGhpc10gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8Tm9QdHJUYWc+KGVuZCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxp
bmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obWFya2VyLnN0YXJ0KS51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxOb1B0clRhZz4oZW5kKS51bnRhZ2dlZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxOb1B0clRhZz4obWFya2VyLnN0YXJ0KS51bnRhZ2dlZFB0cjxjaGFyKj4o
KTsKICAgICAgICAgbGlua0J1ZmZlci5hZGRNYWluVGhyZWFkRmluYWxpemF0aW9uVGFzayhbPSwg
dGhpc10gewogICAgICAgICAgICAgYXV0byYgZW50cnkgPSBtX2RhdGEuYWRkKG1hcmtlci5pZGVu
dGlmaWVyLCBFbnRyeSB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICsrZW50cnku
Y291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0
aW5lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKaW5kZXgg
MzdhMDIyZGU1MjI3Li4yMDFiZGRjOTg5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJSb3V0aW5lLmgKQEAgLTYxLDggKzYxLDcgQEAgcHVibGljOgogICAgIAogICAgIC8v
IFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBDb2RlUHRyIHRvIHNvbWVvbmUgd2hvIGlu
c2lzdHMgb24gdGFraW5nCiAgICAgLy8gYSBSZWZQdHI8SklUU3R1YlJvdXRpbmU+LgotICAgIHN0
YXRpYyBSZWY8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZSgKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiByYXdDb2RlUG9p
bnRlcikKKyAgICBzdGF0aWMgUmVmPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVTZWxmTWFuYWdlZFJv
dXRpbmUoQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gcmF3Q29kZVBvaW50ZXIpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBKSVRTdHViUm91dGluZShNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYocmF3Q29kZVBvaW50ZXIpKSk7CiAgICAgfQpAQCAtNzUsOSArNzQsOSBAQCBwdWJsaWM6CiAg
ICAgLy8gdGhlIGNodXJuLgogICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4mIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KICAgICAKLSAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBhc0Nv
ZGVQdHIoUmVmPEpJVFN0dWJSb3V0aW5lPiYmIHN0dWJSb3V0aW5lKQorICAgIHN0YXRpYyBDb2Rl
UHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBhc0NvZGVQdHIoUmVmPEpJVFN0dWJSb3V0aW5lPiYm
IHN0dWJSb3V0aW5lKQogICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiByZXN1bHQgPSBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKTsKKyAg
ICAgICAgQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gcmVzdWx0ID0gc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCk7CiAgICAgICAgIEFTU0VSVCghIXJlc3VsdCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCmlu
ZGV4IDc5MTg1NDdkMzdjNy4uZWViYzUwZGZkYTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRUaHVua3MuY3BwCkBAIC05MywzNyArOTMsMzcgQEAgaW5saW5lIGJvb2wgSklUVGh1bmtz
OjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0
YWIKICAgICByZXR1cm4gYUV4ZWN1dGFibGUuZnVuY3Rpb24oKSA9PSBzdGQ6OmdldDwwPihiKSAm
JiBhRXhlY3V0YWJsZS5jb25zdHJ1Y3RvcigpID09IHN0ZDo6Z2V0PDE+KGIpICYmIGFFeGVjdXRh
YmxlLmltcGxlbWVudGF0aW9uVmlzaWJpbGl0eSgpID09IHN0ZDo6Z2V0PDI+KGIpICYmIGFFeGVj
dXRhYmxlLm5hbWUoKSA9PSBzdGQ6OmdldDwzPihiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGwoVk0mIHZtKQorQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNJiB2bSkKIHsK
ICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBu
YXRpdmVDYWxsR2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0mIHZtKQorQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0mIHZt
KQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIo
dm0sIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGwoVk0m
IHZtKQorQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2Fs
bChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICByZXR1cm4g
Y3RpU3R1Yih2bSwgbmF0aXZlVGFpbENhbGxHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxD
YWxsV2l0aG91dFNhdmVkVGFncyhWTSYgdm0pCitDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRU
aHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSYgdm0pCiB7CiAgICAg
QVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZl
VGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0
aW9uQ2FsbChWTSYgdm0pCitDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUlu
dGVybmFsRnVuY3Rpb25DYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklU
KCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRv
cikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJ
VFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChWTSYgdm0pCitDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0m
IHZtKQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0
dWIodm0sIGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCmluZGV4IDhlOTg4NzhmOWU4ZS4uM2ZiYzgyZjBm
Y2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKQEAgLTU2LDEyICs1Niwx
MiBAQCBwdWJsaWM6CiAgICAgSklUVGh1bmtzKCk7CiAgICAgfkpJVFRodW5rcygpIGZpbmFsOwog
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVDYWxs
KFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRp
dmVDb25zdHJ1Y3QoVk0mKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJU
YWc+IGN0aU5hdGl2ZVRhaWxDYWxsKFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiBjdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0mKTsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rp
b25DYWxsKFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBj
dGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJik7CisgICAgQ29kZVB0cjxKSVRUaHVua1B0
clRhZz4gY3RpTmF0aXZlQ2FsbChWTSYpOworICAgIENvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0
aU5hdGl2ZUNvbnN0cnVjdChWTSYpOworICAgIENvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5h
dGl2ZVRhaWxDYWxsKFZNJik7CisgICAgQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZl
VGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNJik7CisgICAgQ29kZVB0cjxKSVRUaHVua1B0clRh
Zz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0mKTsKKyAgICBDb2RlUHRyPEpJVFRodW5rUHRy
VGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJik7CiAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGN0aVN0dWIoVk0mLCBUaHVua0dlbmVyYXRvcik7
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjdGlTbG93UGF0aEZ1
bmN0aW9uU3R1YihWTSYsIFNsb3dQYXRoRnVuY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbG93UGF0aENhbGwuY3BwCmluZGV4IGIwNmUwYmZlNjhmMi4uYWI0ZTAyMjY5N2E0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCkBAIC05Miw3ICs5
Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUU2xvd1BhdGhD
YWxsOjpnZW5lcmF0ZVRodW5rKFZNJiB2bSwgU2xvCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGV4
Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmsp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihzbG93UGF0aEZ1bmN0aW9uKSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25QdHJU
YWc+KGNhbGwsIHNsb3dQYXRoRnVuY3Rpb24pOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0
aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTEla
RV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTbG93UGF0aENhbGwiKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKaW5k
ZXggNTk2YjBjMDUyMjE4Li5mOGJkYjkyZDU0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC0xNTMsNyArMTUzLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXQoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmaW5hbGl6ZShNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGZhbGxiYWNrLCBjb25zdCBjaGFyKiB0aHVu
a0tpbmQpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZmlu
YWxpemUoQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gZmFsbGJhY2ssIGNvbnN0IGNoYXIqIHRodW5r
S2luZCkKICAgICAgICAgewogICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhp
cywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpTcGVjaWFsaXplZFRodW5r
KTsKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9u
TGFiZWw8SklUVGh1bmtQdHJUYWc+KGZhbGxiYWNrKSk7CkBAIC0xNjQsMTIgKzE2NCwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIHRhcmdldCBmdW5j
dGlvbiB1c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBmaXJzdCBhcmd1bWVudAogICAgICAgICAvLyBh
bmQgcmV0dXJuIHZhbHVlLiBMaWtlIGFueSBzZW5zaWJsZSBhcmNoaXRlY3R1cmUgd291bGQuCi0g
ICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlKEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24pCisgICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlKENvZGVQdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewogICAgICAgICAgICAgbV9jYWxscy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBmdW5jdGlvbi5yZXRh
Z2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
dm9pZCBjYWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5nUmV0dXJuKEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlUHJl
c2VydmluZ1JldHVybihDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAg
IHsKICAgICAgICAgICAgIGlmICghaXNYODYoKSkKICAgICAgICAgICAgICAgICBwcmVzZXJ2ZVJl
dHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwpAQCAtMTk2LDcgKzE5Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgbV9mYWlsdXJlczsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+Pj4gbV9jYWxsczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFp
cjxDYWxsLCBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4+PiBtX2NhbGxzOwogICAgIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA3
NmFmYzJiNjQzMmYuLjgyMmNlZWE2MzY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtNTUsNyArNTUsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCiAg
ICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogCiAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFD
VElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOworICAgIHBh
dGNoQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb24sIG9wZXJhdGlvbkxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpOwogICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb24iKTsKIH0KIApAQCAtNzEsNyArNzEs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYQogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5k
bGVyKHZtKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVy
Lmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uLCBvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25I
YW5kbGVyRnJvbUNhbGxlckZyYW1lKTsKICAgICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrIik7CiB9CiAKQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxsTW9kZSBtbwog
ICAgIC8vIE51bGxTZXR0ZXJGdW5jdGlvblR5cGUgZG9lcyBub3QgZ2V0IHRoZSBmYXN0IHBhdGgg
c3VwcG9ydC4gQnV0IGl0IGlzIE9LIHNpbmNlIHVzaW5nIE51bGxTZXR0ZXJGdW5jdGlvblR5cGUg
aXMgZXh0cmVtZWx5IHJhcmUuCiAgICAgbm90SlNGdW5jdGlvbi5saW5rKCZqaXQpOwogICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUeXBlKEdQUkluZm86OnJlZ1QwLCBJbnRlcm5h
bEZ1bmN0aW9uVHlwZSkpOwotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdm0uZ2V0Q1RJ
SW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25U
cmFtcG9saW5lRm9yKGtpbmQpLnRhZ2dlZFB0cigpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlQWRkcmVzcyksIEdQUkluZm86OnJlZ1Q0KTsKIAog
ICAgIGlzTmF0aXZlLmxpbmsoJmppdCk7CkBAIC00MjUsNyArNDI1LDcgQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlRm9yR2VuZXJhdG9yKFZNJiB2
bSwgVGh1bmtGdW4KICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICAgICAgICAgIGF1dG8gb3BlcmF0aW9uQ2FsbCA9IGpp
dC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odm1FbnRyeUhv
c3RGdW5jdGlvbikpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbkNhbGwsIHZtRW50cnlIb3N0RnVuY3Rpb24pOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24p
LCBIb3N0RnVuY3Rpb25QdHJUYWcpOwpAQCAtNDM2LDcgKzQzNiw3IEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUZvckdlbmVyYXRvcihWTSYgdm0s
IFRodW5rRnVuCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1
bmN0aW9uRm9yKGtpbmQpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICAgICAgICAgIGF1
dG8gb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4odm1FbnRyeUhvc3RGdW5jdGlvbikpOworICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIHZtRW50cnlIb3N0RnVu
Y3Rpb24pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaml0
LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSW50ZXJu
YWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIEhvc3RGdW5jdGlv
blB0clRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4
IDY3MDc3NTdiYzVjNC4uMTc5ODg4OWZkM2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnREYXRhLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBpbml0aWFsaXplKCkKIAog
I2lmIEVOQUJMRShKSVRfQ0FHRSkKICAgICBpZiAoT3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAg
ICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRl
OjpqaXRDYWdlUHRyKV0gPSBqaXRDYWdlUHRyVGh1bmsoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oR2F0ZTo6aml0Q2FnZVB0cildID0gaml0Q2FnZVB0clRodW5rKCkuY29kZSgpLnRhZ2dl
ZFB0cigpOwogI2VuZGlmCiAKICNkZWZpbmUgSU5JVElBTElaRV9KU19HQVRFKG5hbWUsIHRhZykg
XApAQCAtMTExLDkgKzExMSw5IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICBjb2Rl
UmVmMTYuY29uc3RydWN0KExMSW50OjpnZXRXaWRlMTZDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0
clRhZz4oanNfdHJhbXBvbGluZV8jI25hbWUpKTsgXAogICAgICAgICAgICAgY29kZVJlZjMyLmNv
bnN0cnVjdChMTEludDo6Z2V0V2lkZTMyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KGpz
X3RyYW1wb2xpbmVfIyNuYW1lKSk7IFwKICAgICAgICAgfSBcCi0gICAgICAgIGdfanNjQ29uZmln
LmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUpXSA9IGNvZGVS
ZWY4LmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyBcCi0gICAgICAgIGdfanNjQ29u
ZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI193aWRl
MTYpXSA9IGNvZGVSZWYxNi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgXAotICAg
ICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRl
OjpuYW1lIyNfd2lkZTMyKV0gPSBjb2RlUmVmMzIuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oR2F0ZTo6bmFtZSldID0gY29kZVJlZjguZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigp
OyBcCisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNvZGVSZWYxNi5nZXQoKS5jb2RlKCkudGFnZ2Vk
UHRyKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oR2F0ZTo6bmFtZSMjX3dpZGUzMildID0gY29kZVJlZjMyLmdldCgpLmNvZGUoKS50
YWdnZWRQdHIoKTsgXAogICAgIH0gd2hpbGUgKDApOwogCiAgICAgSlNDX0pTX0dBVEVfT1BDT0RF
UyhJTklUSUFMSVpFX0pTX0dBVEUpCkBAIC0xMzQsOSArMTM0LDkgQEAgdm9pZCBpbml0aWFsaXpl
KCkKICAgICAgICAgICAgIGNvZGVSZWYxNi5jb25zdHJ1Y3QoTExJbnQ6OmdldFdpZGUxNkNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPih3YXNtX3RyYW1wb2xpbmVfIyNuYW1lKSk7IFwKICAg
ICAgICAgICAgIGNvZGVSZWYzMi5jb25zdHJ1Y3QoTExJbnQ6OmdldFdpZGUzMkNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPih3YXNtX3RyYW1wb2xpbmVfIyNuYW1lKSk7IFwKICAgICAgICAg
fSBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEdhdGU6Om5hbWUpXSA9IGNvZGVSZWY4LmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOyBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNvZGVSZWYxNi5nZXQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsgXAotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNfd2lkZTMyKV0gPSBjb2RlUmVmMzIuZ2V0
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxp
bnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bmFtZSldID0gY29kZVJlZjgu
Z2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOyBcCisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50Lmdh
dGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNvZGVS
ZWYxNi5nZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxp
bnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bmFtZSMjX3dpZGUzMildID0g
Y29kZVJlZjMyLmdldCgpLmNvZGUoKS50YWdnZWRQdHIoKTsgXAogICAgIH0gd2hpbGUgKDApOwog
CiAgICAgSlNDX1dBU01fR0FURV9PUENPREVTKElOSVRJQUxJWkVfV0FTTV9HQVRFKQpAQCAtMTQ4
LDU0ICsxNDgsNTQgQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZUpJVCgpKQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlSlNHYXRlVGh1bmso
cmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE9wZXJhdGlvblB0clRhZz4oJnZt
RW50cnlUb0phdmFTY3JpcHRHYXRlQWZ0ZXIpLCBKU0VudHJ5UHRyVGFnLCAidm1FbnRyeVRvSmF2
YVNjcmlwdCIpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3Qo
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFn
Pjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0
aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ2bUVudHJ5VG9KYXZhU2NyaXB0VHJh
bXBvbGluZSkpKSk7Ci0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEdhdGU6OnZtRW50cnlUb0phdmFTY3JpcHQpXSA9IGNvZGVSZWYuZ2V0KCku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVj
dChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2Vs
Zk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6ZnJvbVRhZ2dl
ZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnPigmdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmUpKSkpOworICAgICAgICBnX2pz
Y0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp2bUVudHJ5
VG9KYXZhU2NyaXB0KV0gPSBjb2RlUmVmLmdldCgpLmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9
CiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0
aW9uczo6dXNlSklUKCkpCiAgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWls
Q2FsbEdhdGUoSlNFbnRyeVB0clRhZywgdHJ1ZSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRl
UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdD
b2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRh
aWxDYWxsSlNFbnRyeVRyYW1wb2xpbmUpKSkpOwotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5n
YXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50cnlQdHJUYWcp
XT0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAg
IGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQ
dHJUYWc+Ojpmcm9tVGFnZ2VkUHRyKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFn
LCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKSkpKTsK
KyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
R2F0ZTo6dGFpbENhbGxKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dl
ZFB0cigpOwogICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAg
ICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAgIGNvZGVSZWYuY29uc3Ry
dWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFnLCB0cnVlKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxl
QWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRH
YXRlUHRyVGFnPigmdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lKSkpKTsKLSAgICAg
ICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6
dGFpbENhbGxKU0VudHJ5U2xvd1BhdGhQdHJUYWcpXSA9IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKENvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6ZnJvbVRhZ2dlZFB0cihyZXRh
Z0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigm
dGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19qc2NDb25m
aWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0Vu
dHJ5U2xvd1BhdGhQdHJUYWcpXSA9IGNvZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOwog
ICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAgICAgIGlm
IChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0
ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFnLCBmYWxzZSkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mo
cmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz4oJnRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUpKSkpOwotICAgICAgICBn
X2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWls
Q2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlQdHJUYWcpXT0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYoQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+Ojpmcm9tVGFnZ2VkUHRyKHJldGFn
Q29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0
YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19qc2ND
b25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxX
aXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0
cigpOwogICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0
KGV4Y2VwdGlvbkhhbmRsZXJHYXRlVGh1bmsoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0Nv
ZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmZXhj
ZXB0aW9uSGFuZGxlclRyYW1wb2xpbmUpKSkpOwotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5n
YXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpleGNlcHRpb25IYW5kbGVyKV0gPSBj
b2RlUmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgY29k
ZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihDb2RlUHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz46OmZyb21UYWdnZWRQdHIocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz4oJmV4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lKSkpKTsKKyAg
ICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0
ZTo6ZXhjZXB0aW9uSGFuZGxlcildID0gY29kZVJlZi5nZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7
CiAgICAgfQogICAgIHsKICAgICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QocmV0
dXJuRnJvbUxMSW50R2F0ZVRodW5rKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2Rl
UmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFn
Pjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVU
b0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRy
PHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnJldHVybkZy
b21MTEludFRyYW1wb2xpbmUpKSkpOwotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFw
W3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpyZXR1cm5Gcm9tTExJbnQpXSA9IGNvZGVSZWYu
Z2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBjb2RlUmVmLmNv
bnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6ZnJv
bVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9K
SVRHYXRlUHRyVGFnPigmcmV0dXJuRnJvbUxMSW50VHJhbXBvbGluZSkpKSk7CisgICAgICAgIGdf
anNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnJldHVy
bkZyb21MTEludCldID0gY29kZVJlZi5nZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7CiAgICAgfQog
CiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7Ci0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50
LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Omxvb3BPU1JFbnRyeSldID0gbG9v
cE9TUkVudHJ5R2F0ZVRodW5rKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAg
IGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OmVu
dHJ5T1NSRW50cnkpXSA9IGVudHJ5T1NSRW50cnlHYXRlVGh1bmsoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKLSAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oR2F0ZTo6d2FzbU9TUkVudHJ5KV0gPSB3YXNtT1NSRW50cnlHYXRlVGh1bmso
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQu
Z2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bG9vcE9TUkVudHJ5KV0gPSBsb29w
T1NSRW50cnlHYXRlVGh1bmsoKS5jb2RlKCkudGFnZ2VkUHRyKCk7CisgICAgICAgIGdfanNjQ29u
ZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OmVudHJ5T1NSRW50
cnkpXSA9IGVudHJ5T1NSRW50cnlHYXRlVGh1bmsoKS5jb2RlKCkudGFnZ2VkUHRyKCk7CisgICAg
ICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6
Ondhc21PU1JFbnRyeSldID0gd2FzbU9TUkVudHJ5R2F0ZVRodW5rKCkuY29kZSgpLnRhZ2dlZFB0
cigpOwogICAgIH0KIAogI2RlZmluZSBJTklUSUFMSVpFX1RBR19BTkRfVU5UQUdfVEhVTktTKG5h
bWUpIFwKQEAgLTIwOSw4ICsyMDksOCBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgICAgICAgICAg
dGFnQ29kZVJlZi5jb25zdHJ1Y3QoTExJbnQ6OmdldENvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPihqc190cmFtcG9saW5lXyMjbmFtZSMjX3RhZykpOyBcCiAgICAgICAgICAgICB1bnRhZ0Nv
ZGVSZWYuY29uc3RydWN0KExMSW50OjpnZXRDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4o
anNfdHJhbXBvbGluZV8jI25hbWUjI191bnRhZykpOyBcCiAgICAgICAgIH0gXAotICAgICAgICBn
X2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpuYW1l
IyNUYWcpXSA9IHRhZ0NvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IFwK
LSAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
R2F0ZTo6bmFtZSMjVW50YWcpXSA9IHVudGFnQ29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsgXAorICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNUYWcpXSA9IHRhZ0NvZGVSZWYuZ2V0KCkuY29kZSgp
LnRhZ2dlZFB0cigpOyBcCisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI1VudGFnKV0gPSB1bnRhZ0NvZGVSZWYuZ2V0KCku
Y29kZSgpLnRhZ2dlZFB0cigpOyBcCiAgICAgfSB3aGlsZSAoMCk7CiAKICAgICBJTklUSUFMSVpF
X1RBR19BTkRfVU5UQUdfVEhVTktTKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNr
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAppbmRleCAxNTExNWVlMDdk
MjQuLjhiZmVmMjU1Yzc4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
aApAQCAtNjYsOSArNjYsOSBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjb25zdCBPcGNvZGUqIGdl
dE9wY29kZUFkZHJlc3MoT3Bjb2RlSUQpOwogICAgIGZyaWVuZCBjb25zdCBPcGNvZGUqIGdldE9w
Y29kZVdpZGUxNkFkZHJlc3MoT3Bjb2RlSUQpOwogICAgIGZyaWVuZCBjb25zdCBPcGNvZGUqIGdl
dE9wY29kZVdpZGUzMkFkZHJlc3MoT3Bjb2RlSUQpOwotICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
IGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBnZXRDb2RlUHRyKE9wY29kZUlEKTsK
LSAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRh
Zz4gZ2V0V2lkZTE2Q29kZVB0cihPcGNvZGVJRCk7Ci0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4g
ZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIoT3Bjb2Rl
SUQpOworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IGZyaWVuZCBDb2RlUHRyPHRhZz4gZ2V0Q29k
ZVB0cihPcGNvZGVJRCk7CisgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gZnJpZW5kIENvZGVQdHI8
dGFnPiBnZXRXaWRlMTZDb2RlUHRyKE9wY29kZUlEKTsKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PiBmcmllbmQgQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIoT3Bjb2RlSUQpOwogICAgIHRl
bXBsYXRlPFB0clRhZyB0YWc+IGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBnZXRD
b2RlUmVmKE9wY29kZUlEKTsKIH07CiAKQEAgLTE0NywxMiArMTQ3LDEyIEBAIGlubGluZSBjb25z
dCBPcGNvZGUqIGdldE9wY29kZVdpZGUzMkFkZHJlc3MoT3Bjb2RlSUQgaWQpCiAjZW5kaWYKIAog
dGVtcGxhdGU8UHRyVGFnIHRhZz4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PHRhZz4gZ2V0Q29kZVB0ckltcGwoY29uc3QgT3Bjb2RlIG9wY29kZSwgY29uc3Qgdm9pZCogb3Bj
b2RlQWRkcmVzcykKK0FMV0FZU19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldENvZGVQdHJJbXBsKGNv
bnN0IE9wY29kZSBvcGNvZGUsIGNvbnN0IHZvaWQqIG9wY29kZUFkZHJlc3MpCiB7CiAgICAgdm9p
ZCogb3Bjb2RlVmFsdWUgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcGNvZGUpOwogICAgIHZv
aWQqIHVudGFnZ2VkT3Bjb2RlID0gdW50YWdBZGRyZXNzRGl2ZXJzaWZpZWRDb2RlUHRyPEJ5dGVj
b2RlUHRyVGFnPihvcGNvZGVWYWx1ZSwgb3Bjb2RlQWRkcmVzcyk7CiAgICAgdm9pZCogcmV0YWdn
ZWRPcGNvZGUgPSB0YWdDb2RlUHRyPHRhZz4odW50YWdnZWRPcGNvZGUpOwotICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dGFnZ2VkT3Bjb2RlKTsKKyAgICByZXR1cm4gQ29kZVB0cjx0YWc+Ojpmcm9tVGFnZ2VkUHRyKHJl
dGFnZ2VkT3Bjb2RlKTsKIH0KIAogI2lmIEVOQUJMRShBUk02NEUpICYmICFFTkFCTEUoQ09NUFVU
RURfR09UT19PUENPREVTKQpAQCAtMTYwLDcgKzE2MCw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0ckltcGwoY29uc3QgT3Bjb2RlIG9wY29kZSwg
Y29uCiAjZW5kaWYKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KLUFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKK0FMV0FZ
U19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldENvZGVQdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAj
aWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29k
ZSA9IGdldE9wY29kZUFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIEFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNvZGVJRCBv
cGNvZGVJRCkKIH0KIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KLUFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkK
K0FMV0FZU19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldFdpZGUxNkNvZGVQdHIoT3Bjb2RlSUQgb3Bj
b2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBP
cGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUxNkFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMTgy
LDcgKzE4Miw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0
V2lkZTE2Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKIH0KIAogdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTMyQ29k
ZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKK0FMV0FZU19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldFdp
ZGUzMkNvZGVQdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dP
VE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUzMkFk
ZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMjE1LDkgKzIxNSw5IEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+
CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRDb2RlRnVuY3Rpb25QdHIoT3Bjb2RlSUQgb3Bj
b2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxMTEludENvZGU+KGdldENvZGVQdHI8dGFnPihvcGNvZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRDb2RlUHRyPHRh
Zz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsKICNlbHNlCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8TExJbnRDb2RlPihnZXRDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4o
Z2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYK
IH0KIApAQCAtMjI1LDkgKzIyNSw5IEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5M
SU5FIExMSW50Q29kZSBnZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHIoT3Bjb2RlSUQgb3Bjb2RlSUQp
CiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTElu
dENvZGU+KGdldFdpZGUxNkNvZGVQdHI8dGFnPihvcGNvZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMTZDb2Rl
UHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsKICNlbHNlCi0gICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMTZDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRl
bXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PExMSW50Q29kZT4oZ2V0V2lkZTE2Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0ZSB0YWdn
ZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjM1LDkgKzIzNSw5IEBAIHRlbXBsYXRlPFB0clRh
ZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHIo
T3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUzMkNvZGVQdHI8dGFnPihvcGNvZGVJRCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRD
b2RlPihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsKICNlbHNl
Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMzJDb2RlUHRy
PHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0V2lkZTMyQ29kZVB0cjx0YWc+KG9wY29k
ZUlEKS50ZW1wbGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjkwLDcgKzI5MCw3
IEBAIGlubGluZSBjb25zdCBPcGNvZGUqIGdldE9wY29kZVdpZGUzMkFkZHJlc3MoV2FzbU9wY29k
ZUlEIGlkKQogI2VuZGlmCiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci1BTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldENvZGVQdHIoV2FzbU9wY29kZUlEIG9wY29kZUlE
KQorQUxXQVlTX0lOTElORSBDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bj
b2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBP
cGNvZGUqIG9wY29kZSA9IGdldE9wY29kZUFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMzAxLDcgKzMw
MSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0
cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB9CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci1BTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUxNkNvZGVQdHIoV2Fz
bU9wY29kZUlEIG9wY29kZUlEKQorQUxXQVlTX0lOTElORSBDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2
Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dP
VE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUxNkFk
ZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMzEyLDcgKzMxMiw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2Rl
SUQpCiB9CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIoV2FzbU9wY29kZUlEIG9wY29kZUlEKQor
QUxXQVlTX0lOTElORSBDb2RlUHRyPHRhZz4gZ2V0V2lkZTMyQ29kZVB0cihXYXNtT3Bjb2RlSUQg
b3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25z
dCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUzMkFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAt
MzQ0LDkgKzM0NCw5IEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50
Q29kZSBnZXRDb2RlRnVuY3Rpb25QdHIoV2FzbU9wY29kZUlEIG9wY29kZUlEKQogewogI2lmIENP
TVBJTEVSKE1TVkMpCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRD
b2RlUHRyPHRhZz4ob3Bjb2RlSUQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50YWdn
ZWRQdHIoKSk7CiAjZWxzZQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4o
Z2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0ZSBleGVjdXRhYmxlQWRkcmVzcygpKTsK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldENvZGVQdHI8dGFnPihv
cGNvZGVJRCkudGVtcGxhdGUgdGFnZ2VkUHRyKCkpOwogI2VuZGlmCiB9CiAKQEAgLTM1NCw5ICsz
NTQsOSBAQCB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogQUxXQVlTX0lOTElORSBMTEludENvZGUgZ2V0
V2lkZTE2Q29kZUZ1bmN0aW9uUHRyKFdhc21PcGNvZGVJRCBvcGNvZGVJRCkKIHsKICNpZiBDT01Q
SUxFUihNU1ZDKQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0V2lk
ZTE2Q29kZVB0cjx0YWc+KG9wY29kZUlEKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUxNkNvZGVQdHI8dGFnPihvcGNv
ZGVJRCkudGFnZ2VkUHRyKCkpOwogI2Vsc2UKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxM
TEludENvZGU+KGdldFdpZGUxNkNvZGVQdHI8dGFnPihvcGNvZGVJRCkudGVtcGxhdGUgZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihn
ZXRXaWRlMTZDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIHRhZ2dlZFB0cigpKTsKICNl
bmRpZgogfQogCkBAIC0zNjQsOSArMzY0LDkgQEAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KIEFMV0FZ
U19JTkxJTkUgTExJbnRDb2RlIGdldFdpZGUzMkNvZGVGdW5jdGlvblB0cihXYXNtT3Bjb2RlSUQg
b3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxMTEludENvZGU+KGdldFdpZGUzMkNvZGVQdHI8dGFnPihvcGNvZGVJRCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRX
aWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsKICNlbHNlCi0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bj
b2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PExMSW50Q29kZT4oZ2V0V2lkZTMyQ29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1w
bGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAppbmRleCBkZjY0NWQ4Yzc0YjYuLjRiMWI3ZDA0
MzBkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlw
b2ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2lu
dC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgZXh0ZXJuICJDIiB2b2lkIGpzVHJhbXBvbGluZUZ1bmN0
aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1Byb2xvZ3VlKHZvaWQpOwogdGVtcGxhdGU8dHlwZW5h
bWUgUHRyVHlwZT4KIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4g
ZW50cnlwb2ludFRyYW1wb2xpbmUoUHRyVHlwZSBhZGRyZXNzKQogewotICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
ZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRh
YmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgSlNFbnRyeVB0
clRhZz4oYWRkcmVzcykpKTsKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoQ29kZVB0cjxKU0VudHJ5UHRyVGFn
Pjo6ZnJvbVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgSlNF
bnRyeVB0clRhZz4oYWRkcmVzcykpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCBkMzFmOWNkZTVkZTIuLmI2YjA3
MDQ4NmJjOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCkBAIC0xNjYsMTQgKzE2NiwxNCBAQCBpbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cgogI2Rl
ZmluZSBMTElOVF9DQUxMX1RIUk9XKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uVG9UaHJvdykgZG8g
eyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBfX2N0X2dsb2Jh
bE9iamVjdCA9IChnbG9iYWxPYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIHRocm93RXhjZXB0aW9uKF9fY3RfZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBleGNlcHRpb25Ub1Rocm93KTsgICAgICAgIFwKLSAgICAgICAgTExJTlRfQ0FMTF9FTkRfSU1Q
TChudWxscHRyLCBjYWxsVG9UaHJvdyh2bSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICBMTElOVF9D
QUxMX0VORF9JTVBMKG51bGxwdHIsIGNhbGxUb1Rocm93KHZtKS5jb2RlKCkudGFnZ2VkUHRyKCks
IEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUg
KGZhbHNlKQogCiAjZGVmaW5lIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGdsb2JhbE9iamVj
dCkgZG8geyAgICAgICAgICAgICAgIFwKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIF9fY2NlX2ds
b2JhbE9iamVjdCA9IChnbG9iYWxPYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgZG9FeGNlcHRpb25GdXp6aW5nSWZFbmFibGVkKF9fY2NlX2dsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgIkxMSW50U2xvd1BhdGhzL2NhbGwiLCBudWxscHRyKTsgXAogICAg
ICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgTExJTlRfQ0FMTF9FTkRfSU1QTChudWxscHRyLCBj
YWxsVG9UaHJvdyh2bSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOyBcCisgICAgICAgICAgICBMTElOVF9DQUxMX0VORF9JTVBMKG51bGxwdHIsIGNh
bGxUb1Rocm93KHZtKS5jb2RlKCkudGFnZ2VkUHRyKCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
OyBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUgTExJTlRfQ0FMTF9SRVRVUk4oZ2xv
YmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbFRhcmdldCwgY2FsbFRhcmdldFRhZykgZG8geyBc
CkBAIC00MjUsNyArNDI1LDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnkKICAgICBpZiAoa2lu
ZCA9PSBQcm9sb2d1ZSkKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKGtpbmQgPT0g
QXJpdHlDaGVjayk7Ci0gICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+
YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxw
dHIpOworICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmFkZHJlc3NG
b3JDYWxsKE11c3RDaGVja0FyaXR5KS50YWdnZWRQdHIoKSwgbnVsbHB0cik7CiB9CiAjZWxzZSAv
LyBFTkFCTEUoSklUKQogc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKQEAgLTQ4MCw3ICs0ODAsNyBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICAgICAgdWludHB0cl90KiBwdHIg
PSB2bS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIocGMpOwogICAgICAgICAqcHRyICs9IGNv
ZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLm1fYWN0aXZlVGhyZXNob2xkOwogICAgICAg
ICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQo
KSkKLSAgICAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5
RnJvbUxvb3BIaW50RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxs
RnJhbWUtPnRvcE9mRnJhbWUoKSk7CisgICAgICAgICAgICBMTElOVF9SRVRVUk5fVFdPKExMSW50
OjpmdXp6ZXJSZXR1cm5FYXJseUZyb21Mb29wSGludEVudHJ5cG9pbnQoKS5jb2RlKCkudGFnZ2Vk
UHRyKCksIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsKICAgICB9CiAgICAgCiAgICAgCkBAIC01
MDIsNyArNTAyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCi0g
ICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24udGFnZ2VkUHRyKCk7CiAgICAgQVNT
RVJUKGp1bXBUYXJnZXQpOwogICAgIAogICAgIExMSU5UX1JFVFVSTl9UV08oanVtcFRhcmdldCwg
Y2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOwpAQCAtMTg1MCw3ICsxODUwLDcgQEAgc3RhdGljIFNs
b3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBK
U1ZhbHVlIGNhbGxlZSwKICAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVl
ID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVj
dCgpLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CiAg
ICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQ
Qzo6c2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFs
T2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICAg
ICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhv
c3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLnRhZ2dlZFB0cigpLCBKU0VudHJ5
UHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2xvd1BhdGhMb2coIkNhbGwg
Y2FsbGVlIGlzIG5vdCBhIGZ1bmN0aW9uOiAiLCBjYWxsZWUsICJcbiIpOwpAQCAtMTg3MCw3ICsx
ODcwLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJh
bWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgdm0uZW5jb2RlZEhvc3RD
YWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChj
YWxsZWUpLT5nbG9iYWxPYmplY3QoKSwgY2FsbGVlRnJhbWUpOwogICAgICAgICBEaXNhbGxvd0dD
IGRpc2FsbG93R0M7CiAgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxs
ZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIExMSU5UX0NBTExfUkVUVVJO
KGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50
cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAg
ICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6Omdl
dEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLnRhZ2dlZFB0cigpLCBKU0Vu
dHJ5UHRyVGFnKTsKICAgICB9CiAgICAgCiAgICAgc2xvd1BhdGhMb2coIkNvbnN0cnVjdG9yIGNh
bGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2FsbGVlLCAiXG4iKTsKQEAgLTE4OTIsMTEgKzE4
OTIsMTEgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBj
YWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKICAgICBpZiAoIWNhbGxl
ZUFzRnVuY3Rpb25DZWxsKSB7CiAgICAgICAgIGlmIChjYWxsZWVBc1ZhbHVlLmluaGVyaXRzPElu
dGVybmFsRnVuY3Rpb24+KCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xp
bmVGb3Ioa2luZCk7CisgICAgICAgICAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIg
PSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAg
ICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpT
RW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBh
c3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci50YWdnZWRQdHIoKSk7CiAg
ICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQ
Qzo6c2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFs
T2JqZWN0LCBjYWxsZXJTUCwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRy
VGFnKTsKKyAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVy
U1AsIGNvZGVQdHIudGFnZ2VkUHRyKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChjYWxsZWVG
cmFtZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOwogICAgIH0KQEAgLTE5MDYsNyArMTkwNiw3IEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJh
bWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAKICAgICBEZWZlclRyYXBzIGRlZmVyVHJhcHModm0p
OyAvLyBXZSBjYW4ndCBqZXR0aXNvbiB0aGlzIGNvZGUgaWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0
LgogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7Cisg
ICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIC8vIEZJWE1FOiBTdXBwb3J0
IHdhc20gSUMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMDMzOQogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQpAQCAtMTkzMiw5
ICsxOTMyLDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1l
KiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kKICAgICB9CiAKICAgICBBU1NFUlQo
ISFjb2RlUHRyKTsKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0
clRhZz4oY29kZVB0ci50YWdnZWRQdHIoKSk7CiAgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVG
cmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKLSAgICBMTElOVF9DQUxM
X1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCksIEpTRW50cnlQdHJUYWcpOworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwg
Y2FsbGVyU1AsIGNvZGVQdHIudGFnZ2VkUHRyKCksIEpTRW50cnlQdHJUYWcpOwogfQogCiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncykKQEAgLTIw
NjgsNyArMjA2OCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEpTSW5zdHJ1Y3RpCiAgICAgY2FsbGVlRnJhbWUt
PnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgY2Fs
bGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgY2FsbGVlRnJhbWUtPnVu
Y2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVl
QXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9pbnQuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIGNhbGxlZUZyYW1lLT5zZXRSZXR1cm5QQyhyZXR1
cm5Qb2ludC5jb2RlKCkudGFnZ2VkUHRyKCkpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxv
Y2sobnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKICAgICAKQEAg
LTIwNzgsNyArMjA3OCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2
YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEpTSW5zdHJ1Y3RpCiAgICAgdm0uZW5jb2Rl
ZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoZXZhbChnbG9iYWxPYmplY3Qs
IGNhbGxlZUZyYW1lLCBieXRlY29kZS5tX2VjbWFNb2RlKSk7CiAgICAgRGlzYWxsb3dHQyBkaXNh
bGxvd0dDOwogICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnM7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0
LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgIExMSU5UX0NBTExf
UkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZh
bHVlRW50cnlwb2ludCgpLmNvZGUoKS50YWdnZWRQdHIoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAg
ICAgCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQpAQCAtMjM4NSw5
ICsyMzg1LDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkaXNwYXRjaFRvTmV4dEluc3Ry
dWN0aW9uRHVyaW5nRXhpdChUaHJvd1Njb3BlJiBzY29wZSwKICAgICBpZiAoT3B0aW9uczo6Zm9y
Y2VPU1JFeGl0VG9MTEludCgpIHx8IGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bmspIHsKICAgICAgICAgY29uc3QgSlNJbnN0cnVjdGlvbiogbmV4dFBDID0g
cGMubmV4dCgpLnB0cigpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQobmV4dFBDLCBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChuZXh0
UEMsIExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpLnRhZ2dlZFB0
cigpKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBDLCBMTEludDo6
Z2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihub3JtYWxfb3NyX2V4aXRfdHJhbXBvbGluZSkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG5l
eHRQQywgTExJbnQ6OmdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4obm9ybWFsX29zcl9leGl0X3Ry
YW1wb2xpbmUpLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTIzOTUs
NyArMjM5NSw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZGlzcGF0Y2hUb05leHRJbnN0
cnVjdGlvbkR1cmluZ0V4aXQoVGhyb3dTY29wZSYgc2NvcGUsCiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKICAgICBCeXRlY29kZUluZGV4
IG5leHRCeXRlY29kZUluZGV4ID0gcGMubmV4dCgpLmluZGV4KCk7CiAgICAgYXV0byBuZXh0Qnl0
ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKG5leHRCeXRlY29kZUluZGV4KTsK
LSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8
dWludHB0cl90PigxKSksIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PigxKSksIG5leHRCeXRlY29kZS50YWdnZWRQdHIoKSk7CiAjZW5kaWYKICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCmluZGV4IGJkNGM0ZTRhNDc0OC4u
NzM1YzFkZTUyNmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJDb21waWxhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCkBAIC04Miw3ICs4Miw3IEBAIEV4ZWN1dGlvbkNv
dW50ZXIqIENvbXBpbGF0aW9uOjpleGVjdXRpb25Db3VudGVyRm9yKGNvbnN0IE9yaWdpblN0YWNr
JiBvcmlnaW4pCiAgICAgcmV0dXJuIGNvdW50ZXIuZ2V0KCk7CiB9CiAKLXZvaWQgQ29tcGlsYXRp
b246OmFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJ
bnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKQordm9pZCBDb21waWxhdGlvbjo6YWRkT1NS
RXhpdFNpdGUoY29uc3QgVmVjdG9yPENvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRk
cmVzc2VzKQogewogICAgIG1fb3NyRXhpdFNpdGVzLmFwcGVuZChPU1JFeGl0U2l0ZShjb2RlQWRk
cmVzc2VzKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJDb21waWxhdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQ29tcGlsYXRpb24uaAppbmRleCA0ZjM2ZjU2MDI0ZDkuLjI4MzQ3ODY2MDY3MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRp
b24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxh
dGlvbi5oCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZERlc2NyaXB0aW9u
KGNvbnN0IENvbXBpbGVkQnl0ZWNvZGUmKTsKICAgICB2b2lkIGFkZERlc2NyaXB0aW9uKGNvbnN0
IE9yaWdpblN0YWNrJiwgY29uc3QgQ1N0cmluZyYgZGVzY3JpcHRpb24pOwogICAgIEV4ZWN1dGlv
bkNvdW50ZXIqIGV4ZWN1dGlvbkNvdW50ZXJGb3IoY29uc3QgT3JpZ2luU3RhY2smKTsKLSAgICB2
b2lkIGFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJ
bnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKTsKKyAgICB2b2lkIGFkZE9TUkV4aXRTaXRl
KGNvbnN0IFZlY3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29kZUFkZHJlc3Nlcyk7
CiAgICAgT1NSRXhpdCogYWRkT1NSRXhpdCh1bnNpZ25lZCBpZCwgY29uc3QgT3JpZ2luU3RhY2sm
LCBFeGl0S2luZCwgYm9vbCBpc1dhdGNocG9pbnQpOwogICAgIAogICAgIHZvaWQgc2V0SmV0dGlz
b25SZWFzb24oSmV0dGlzb25SZWFzb24sIGNvbnN0IEZpcmVEZXRhaWwqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5oCmluZGV4
IGU4MTE4MThlZWExZC4uZWU4NDU3ZjE2NDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmgKQEAgLTMzLDE3ICszMywxNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFByb2ZpbGVyIHsKIAogY2xhc3MgT1NSRXhpdFNp
dGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKQorICAg
IGV4cGxpY2l0IE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQdHJU
YWc+PiYgY29kZUFkZHJlc3NlcykKICAgICAgICAgOiBtX2NvZGVBZGRyZXNzZXMoY29kZUFkZHJl
c3NlcykKICAgICB7CiAgICAgfQogICAgIAotICAgIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZUFkZHJlc3NlczsgfQorICAgIGNvbnN0IFZlY3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQ
dHJUYWc+PiYgY29kZUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGVBZGRyZXNzZXM7IH0K
ICAgICAKICAgICBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKIAogcHJpdmF0
ZToKLSAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBt
X2NvZGVBZGRyZXNzZXM7CisgICAgVmVjdG9yPENvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+IG1f
Y29kZUFkZHJlc3NlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpQcm9maWxlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwCmluZGV4
IDJkOTRlMTRmNmQ2Yy4uMTkwMzU1ZGM0MjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgRXhl
Y3V0YWJsZUJhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBzd2l0Y2ggKHR5
cGUoKSkgewogICAgIGNhc2UgTmF0aXZlRXhlY3V0YWJsZVR5cGU6IHsKICAgICAgICAgTmF0aXZl
RXhlY3V0YWJsZSogbmF0aXZlID0ganNDYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihyZWFsVGhpcyk7
Ci0gICAgICAgIG91dC5wcmludCgiTmF0aXZlRXhlY3V0YWJsZToiLCBSYXdQb2ludGVyKG5hdGl2
ZS0+ZnVuY3Rpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpKSwgIi8iLCBSYXdQb2ludGVyKG5hdGl2
ZS0+Y29uc3RydWN0b3IoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIG91dC5wcmlu
dCgiTmF0aXZlRXhlY3V0YWJsZToiLCBSYXdQb2ludGVyKG5hdGl2ZS0+ZnVuY3Rpb24oKS50YWdn
ZWRQdHIoKSksICIvIiwgUmF3UG9pbnRlcihuYXRpdmUtPmNvbnN0cnVjdG9yKCkudGFnZ2VkUHRy
KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlw
ZTogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZUJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgK
aW5kZXggZTgyOTdkNzNiZmI0Li5hNzc0ZThkMDBkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaApAQCAtMTMwLDcgKzEzMCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsKICAgICB9
CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludEZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQorICAg
IENvZGVQdHI8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludEZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQogICAgIHsKICAgICAgICAgLy8gQ2hlY2sg
aWYgd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQuIFdlIG9ubHkgaGF2ZSBpdCBmb3IgYXJpdHkgY2hl
Y2sgYmVjYXVzZSB3ZSB1c2UgdGhlCiAgICAgICAgIC8vIG5vLWFyaXR5IGVudHJ5cG9pbnQgaW4g
bm9uLXZpcnR1YWwgY2FsbHMsIHdoaWNoIHdpbGwgImNhY2hlIiB0aGlzIHZhbHVlIGRpcmVjdGx5
IGluCkBAIC0xMzgsMTYgKzEzOCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChhcml0eSA9PSBN
dXN0Q2hlY2tBcml0eSkgewogICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgICAg
ICBjYXNlIENvZGVGb3JDYWxsOgotICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNo
ZWNrKQorICAgICAgICAgICAgICAgIGlmIChDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9
IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaykKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ29k
ZUZvckNvbnN0cnVjdDoKLSAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrKQorICAgICAgICAgICAgICAgIGlmIChDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9
IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBy
ZXN1bHQgPSBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbChhcml0eSk7
CisgICAgICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gZ2VuZXJhdGVkSklUQ29k
ZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoYXJpdHkpOwogICAgICAgICBpZiAoYXJpdHkgPT0g
TXVzdENoZWNrQXJpdHkpIHsKICAgICAgICAgICAgIC8vIENhY2hlIHRoZSByZXN1bHQ7IHRoaXMg
aXMgbmVjZXNzYXJ5IGZvciB0aGUgSklUJ3MgdmlydHVhbCBjYWxsIG9wdGltaXphdGlvbnMuCiAg
ICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKQEAgLTIwMyw4ICsyMDMsOCBAQCBwdWJsaWM6CiBw
cm90ZWN0ZWQ6CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZUZvckNhbGw7CiAgICAgUmVm
UHRyPEpJVENvZGU+IG1faml0Q29kZUZvckNvbnN0cnVjdDsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOwotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX2ppdENvZGVGb3JDb25zdHJ1
Y3RXaXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1faml0Q29kZUZv
ckNhbGxXaXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYWNoaW5lQ29udGV4dC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFjaGluZUNvbnRleHQuaAppbmRleCBl
YWQ0YzNiNGEyN2IuLmI1NmU5MDVhMzA4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFjaGluZUNvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYWNoaW5lQ29udGV4dC5oCkBAIC00MSw5ICs0MSw5IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQgPSB2b2lkKj4gVCBzdGFja1BvaW50ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsK
IAogI2lmIE9TKFdJTkRPV1MpIHx8IEhBVkUoTUFDSElORV9DT05URVhUKQogdGVtcGxhdGU8dHlw
ZW5hbWUgVCA9IHZvaWQqPiBUIGZyYW1lUG9pbnRlcihjb25zdCBQbGF0Zm9ybVJlZ2lzdGVycyYp
OwotaW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFn
PiBsaW5rUmVnaXN0ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsKLWlubGluZSBzdGQ6Om9w
dGlvbmFsPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPj4g
aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnN0IFBsYXRmb3JtUmVnaXN0ZXJzJik7Ci1pbmxpbmUgdm9p
ZCBzZXRJbnN0cnVjdGlvblBvaW50ZXIoUGxhdGZvcm1SZWdpc3RlcnMmLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CitpbmxpbmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lz
dGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsKK2lu
bGluZSBzdGQ6Om9wdGlvbmFsPENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4+IGlu
c3RydWN0aW9uUG9pbnRlcihjb25zdCBQbGF0Zm9ybVJlZ2lzdGVycyYpOworaW5saW5lIHZvaWQg
c2V0SW5zdHJ1Y3Rpb25Qb2ludGVyKFBsYXRmb3JtUmVnaXN0ZXJzJiwgQ29kZVB0cjxDRnVuY3Rp
b25QdHJUYWc+KTsKIAogdGVtcGxhdGU8c2l6ZV90IE4+IHZvaWQqJiBhcmd1bWVudFBvaW50ZXIo
UGxhdGZvcm1SZWdpc3RlcnMmKTsKIHRlbXBsYXRlPHNpemVfdCBOPiB2b2lkKiBhcmd1bWVudFBv
aW50ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsKQEAgLTY2LDcgKzY2LDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkKiYgZnJhbWVQb2ludGVySW1wbChtY29udGV4dF90Jik7CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQgPSB2b2lkKj4gVCBzdGFja1BvaW50ZXIoY29uc3QgbWNvbnRleHRfdCYpOwog
dGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPiBUIGZyYW1lUG9pbnRlcihjb25zdCBtY29udGV4
dF90Jik7Ci1pbmxpbmUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQ
dHJUYWc+IGluc3RydWN0aW9uUG9pbnRlcihjb25zdCBtY29udGV4dF90Jik7CitpbmxpbmUgQ29k
ZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3Qg
bWNvbnRleHRfdCYpOwogCiB0ZW1wbGF0ZTxzaXplX3QgTj4gdm9pZComIGFyZ3VtZW50UG9pbnRl
cihtY29udGV4dF90Jik7CiB0ZW1wbGF0ZTxzaXplX3QgTj4gdm9pZCogYXJndW1lbnRQb2ludGVy
KGNvbnN0IG1jb250ZXh0X3QmKTsKQEAgLTQyNiw3ICs0MjYsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQqJiBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzKQogfQog
I2VuZGlmIC8vICFVU0UoUExBVEZPUk1fUkVHSVNURVJTX1dJVEhfUFJPRklMRSkKIAotaW5saW5l
IHN0ZDo6b3B0aW9uYWw8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQ
dHJUYWc+PiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3Mp
CitpbmxpbmUgc3RkOjpvcHRpb25hbDxDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+
PiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MpCiB7CiAj
aWYgVVNFKFBMQVRGT1JNX1JFR0lTVEVSU19XSVRIX1BST0ZJTEUpCiAgICAgdm9pZCogdmFsdWUg
PSBXVEZfUkVBRF9QTEFURk9STV9SRUdJU1RFUlNfUENfV0lUSF9QUk9GSUxFKHJlZ3MpOwpAQCAt
NDM2LDIyICs0MzYsMjIgQEAgaW5saW5lIHN0ZDo6b3B0aW9uYWw8TWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+PiBpbnN0cnVjdGkKICAgICB2b2lkKiB2YWx1
ZSA9IGluc3RydWN0aW9uUG9pbnRlckltcGwoY29uc3RfY2FzdDxQbGF0Zm9ybVJlZ2lzdGVycyY+
KHJlZ3MpKTsKICNlbmRpZgogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBzdGQ6Om1h
a2Vfb3B0aW9uYWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJU
YWc+KG51bGxwdHIpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbChDb2RlUHRy
PFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KG51bGxwdHIpKTsKICAgICBpZiAoIXVzZXNQb2lu
dGVyVGFnZ2luZygpKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPih2YWx1ZSkpOworICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsKENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0
clRhZz4odmFsdWUpKTsKICAgICBpZiAoaXNUYWdnZWRXaXRoPFBsYXRmb3JtUmVnaXN0ZXJzUENQ
dHJUYWc+KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbChNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4odmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbChDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQ
dHJUYWc+KHZhbHVlKSk7CiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotaW5saW5lIHZv
aWQgc2V0SW5zdHJ1Y3Rpb25Qb2ludGVyKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiB2YWx1ZSkKK2lubGluZSB2b2lkIHNldElu
c3RydWN0aW9uUG9pbnRlcihQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncywgQ29kZVB0cjxDRnVuY3Rp
b25QdHJUYWc+IHZhbHVlKQogewogI2lmIFVTRShQTEFURk9STV9SRUdJU1RFUlNfV0lUSF9QUk9G
SUxFKQotICAgIFdURl9XUklURV9QTEFURk9STV9SRUdJU1RFUlNfUENfV0lUSF9QUk9GSUxFKHJl
Z3MsIHZhbHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIFdURl9XUklURV9QTEFURk9STV9S
RUdJU1RFUlNfUENfV0lUSF9QUk9GSUxFKHJlZ3MsIHZhbHVlLnRhZ2dlZFB0cigpKTsKICNlbGlm
IFVTRShEQVJXSU5fUkVHSVNURVJfTUFDUk9TKQotICAgIF9fZGFyd2luX2FybV90aHJlYWRfc3Rh
dGU2NF9zZXRfcGNfZnB0cihyZWdzLCB2YWx1ZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBf
X2Rhcndpbl9hcm1fdGhyZWFkX3N0YXRlNjRfc2V0X3BjX2ZwdHIocmVncywgdmFsdWUudGFnZ2Vk
UHRyKCkpOwogI2Vsc2UKLSAgICBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKHJlZ3MpID0gdmFsdWUu
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKHJlZ3MpID0g
dmFsdWUudGFnZ2VkUHRyKCk7CiAjZW5kaWYKIH0KICNlbmRpZiAvLyBPUyhXSU5ET1dTKSB8fCBI
QVZFKE1BQ0hJTkVfQ09OVEVYVCkKQEAgLTUyMSw3ICs1MjEsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQqJiBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKG1jb250ZXh0X3QmIG1hY2hpbmVDb250ZXh0KQog
fQogI2VuZGlmIC8vICFVU0UoUExBVEZPUk1fUkVHSVNURVJTX1dJVEhfUFJPRklMRSkKIAotaW5s
aW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBpbnN0
cnVjdGlvblBvaW50ZXIoY29uc3QgbWNvbnRleHRfdCYgbWFjaGluZUNvbnRleHQpCitpbmxpbmUg
Q29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBpbnN0cnVjdGlvblBvaW50ZXIoY29u
c3QgbWNvbnRleHRfdCYgbWFjaGluZUNvbnRleHQpCiB7CiAjaWYgVVNFKERBUldJTl9SRUdJU1RF
Ul9NQUNST1MpCiAgICAgcmV0dXJuICppbnN0cnVjdGlvblBvaW50ZXIobWFjaGluZUNvbnRleHQt
Pl9fc3MpOwpAQCAtNTMzLDcgKzUzMyw3IEBAIGlubGluZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gaW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnN0CiAgICAg
dm9pZCogdmFsdWUgPSBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKGNvbnN0X2Nhc3Q8bWNvbnRleHRf
dCY+KG1hY2hpbmVDb250ZXh0KSk7CiAjZW5kaWYKIAotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4odmFsdWUpOworICAgIHJldHVybiBD
b2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KHZhbHVlKTsKICNlbmRpZgogfQogI2Vu
ZGlmIC8vIEhBVkUoTUFDSElORV9DT05URVhUKQpAQCAtNTQzLDE0ICs1NDMsMTQgQEAgaW5saW5l
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBpbnN0cnVj
dGlvblBvaW50ZXIoY29uc3QKIAogI2lmIE9TKERBUldJTikgJiYgX19EQVJXSU5fVU5JWDAzICYm
IENQVShBUk02NCkKIAotaW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lz
dGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3Mp
CitpbmxpbmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIo
Y29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MpCiB7CiAjaWYgVVNFKFBMQVRGT1JNX1JFR0lT
VEVSU19XSVRIX1BST0ZJTEUpCiAgICAgdm9pZCogdmFsdWUgPSBXVEZfUkVBRF9QTEFURk9STV9S
RUdJU1RFUlNfTFJfV0lUSF9QUk9GSUxFKHJlZ3MpOwogI2Vsc2UKICAgICB2b2lkKiB2YWx1ZSA9
IF9fZGFyd2luX2FybV90aHJlYWRfc3RhdGU2NF9nZXRfbHJfZnB0cihyZWdzKTsKICNlbmRpZgot
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNMUlB0clRh
Zz4odmFsdWUpOworICAgIHJldHVybiBDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzTFJQdHJUYWc+
KHZhbHVlKTsKIH0KICNlbmRpZiAvLyBPUyhEQVJXSU4pICYmIF9fREFSV0lOX1VOSVgwMyAmJiBD
UFUoQVJNNjQpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZl
RXhlY3V0YWJsZS5jcHAKaW5kZXggOTEwZGZjMjU5YjA1Li41M2ZjYzk5ZTU0YTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCkBA
IC02MCwxMCArNjAsMTAgQEAgdm9pZCBOYXRpdmVFeGVjdXRhYmxlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFJlZjxKSVRDb2RlPiYmIGNhbGxUaHVuaywgUmVmPEpJVEMKICAgICBtX2ppdENvZGVG
b3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1faml0Q29kZUZvckNvbnN0cnVjdC0+YWRkcmVz
c0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpOwogICAgIG1fbmFtZSA9IG5hbWU7CiAKLSAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0Zv
ckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBh
c3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2RlRm9yQ29uc3RydWN0LT5h
ZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwotICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFnPihtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2suZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRX
aXRoPEpTRW50cnlQdHJUYWc+KG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFn
PihtX2ppdENvZGVGb3JDYWxsLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQp
LnRhZ2dlZFB0cigpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9q
aXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQp
LnRhZ2dlZFB0cigpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLnRhZ2dlZFB0cigpKTsKKyAgICBhc3NlcnRJc1Rh
Z2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hl
Y2sudGFnZ2VkUHRyKCkpOwogfQogCiBOYXRpdmVFeGVjdXRhYmxlOjpOYXRpdmVFeGVjdXRhYmxl
KFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0
aW9uIGNvbnN0cnVjdG9yLCBJbXBsZW1lbnRhdGlvblZpc2liaWxpdHkgaW1wbGVtZW50YXRpb25W
aXNpYmlsaXR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0
aXZlRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0
aW9uLmgKaW5kZXggZDcyNTIzYzY2ZDk1Li41ZGY4MmE0ZGQ4NzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRnVuY3Rpb24uaApAQCAtMzQsNyArMzQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbEZyYW1lOwogCi11c2luZyBOYXRpdmVGdW5jdGlv
biA9IFR5cGVkRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpTQ0hvc3RDYWxs
PjsKK3VzaW5nIE5hdGl2ZUZ1bmN0aW9uID0gRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnLCBF
bmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopLCBGdW5jdGlvbkF0dHJp
YnV0ZXM6OkpTQ0hvc3RDYWxsPjsKIAogc3RydWN0IE5hdGl2ZUZ1bmN0aW9uSGFzaCB7CiAgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goTmF0aXZlRnVuY3Rpb24ga2V5KSB7IHJldHVybiBjb21wdXRl
SGFzaChrZXkpOyB9CkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBOYXRpdmVGdW5jdGlvbkhhc2gg
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7CiB9OwogCi11c2luZyBUYWdnZWROYXRpdmVGdW5jdGlvbiA9IFR5cGVkRnVuY3Rp
b25QdHI8SG9zdEZ1bmN0aW9uUHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpTQ0hvc3RDYWxsPjsKK3VzaW5nIFRh
Z2dlZE5hdGl2ZUZ1bmN0aW9uID0gRnVuY3Rpb25QdHI8SG9zdEZ1bmN0aW9uUHRyVGFnLCBFbmNv
ZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0
ZXM6OkpTQ0hvc3RDYWxsPjsKIAogc3RydWN0IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uSGFzaCB7CiAg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goVGFnZ2VkTmF0aXZlRnVuY3Rpb24ga2V5KSB7IHJldHVy
biBjb21wdXRlSGFzaChrZXkpOyB9CkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBXVEYgewog
CiBpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIEpTQzo6TmF0aXZlRnVuY3Rpb24ga2V5
KQogewotICAgIGFkZChoYXNoZXIsIGtleS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBhZGQo
aGFzaGVyLCBrZXkudGFnZ2VkUHRyKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IERlZmF1bHRIYXNoOwpAQCAtNzIsNyArNzIsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6Ok5hdGl2ZUZ1bmN0aW9uPiA6IEpTQzo6TmF0aXZlRnVuY3Rpb25IYXNoIHsgfQog
CiBpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIEpTQzo6VGFnZ2VkTmF0aXZlRnVuY3Rp
b24ga2V5KQogewotICAgIGFkZChoYXNoZXIsIGtleS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICBhZGQoaGFzaGVyLCBrZXkudGFnZ2VkUHRyKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IERlZmF1bHRIYXNoOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlTbG90LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVNsb3QuaAppbmRleCBhZDc4MDlkMzYyZjkuLmUwOTJlNmY1YzhjZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKQEAgLTg2LDExICs4NiwxMSBA
QCBpbmxpbmUgdW5zaWduZWQgYXR0cmlidXRlc0ZvclN0cnVjdHVyZSh1bnNpZ25lZCBhdHRyaWJ1
dGVzKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihhdHRyaWJ1dGVzKTsKIH0KIAot
dXNpbmcgR2V0VmFsdWVGdW5jID0gVHlwZWRGdW5jdGlvblB0cjxHZXRWYWx1ZUZ1bmNQdHJUYWcs
IEVuY29kZWRKU1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5
TmFtZSksIEZ1bmN0aW9uQXR0cmlidXRlczo6SklUT3BlcmF0aW9uPjsKLXVzaW5nIEdldFZhbHVl
RnVuY1dpdGhQdHIgPSBUeXBlZEZ1bmN0aW9uUHRyPEdldFZhbHVlRnVuY1dpdGhQdHJQdHJUYWcs
IEVuY29kZWRKU1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5
TmFtZSwgdm9pZCopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpJVE9wZXJhdGlvbj47Cit1c2luZyBH
ZXRWYWx1ZUZ1bmMgPSBGdW5jdGlvblB0cjxHZXRWYWx1ZUZ1bmNQdHJUYWcsIEVuY29kZWRKU1Zh
bHVlKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSksIEZ1bmN0
aW9uQXR0cmlidXRlczo6SklUT3BlcmF0aW9uPjsKK3VzaW5nIEdldFZhbHVlRnVuY1dpdGhQdHIg
PSBGdW5jdGlvblB0cjxHZXRWYWx1ZUZ1bmNXaXRoUHRyUHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIHZvaWQqKSwgRnVu
Y3Rpb25BdHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+OwogCi11c2luZyBQdXRWYWx1ZUZ1bmMgPSBU
eXBlZEZ1bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1B0clRhZywgYm9vbChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKSwgRnVuY3Rpb25B
dHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+OwotdXNpbmcgUHV0VmFsdWVGdW5jV2l0aFB0ciA9IFR5
cGVkRnVuY3Rpb25QdHI8UHV0VmFsdWVGdW5jV2l0aFB0clB0clRhZywgYm9vbChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lLCB2b2lk
KiksIEZ1bmN0aW9uQXR0cmlidXRlczo6SklUT3BlcmF0aW9uPjsKK3VzaW5nIFB1dFZhbHVlRnVu
YyA9IEZ1bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1B0clRhZywgYm9vbChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKSwgRnVuY3Rpb25B
dHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+OwordXNpbmcgUHV0VmFsdWVGdW5jV2l0aFB0ciA9IEZ1
bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1dpdGhQdHJQdHJUYWcsIGJvb2woSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSwgdm9pZCopLCBG
dW5jdGlvbkF0dHJpYnV0ZXM6OkpJVE9wZXJhdGlvbj47CiAKIGNsYXNzIFByb3BlcnR5U2xvdCB7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5
U2xvdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgK
aW5kZXggN2RiYmY1N2U3MDQ1Li5jYTZkMzc3NWY3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU0Z1bmN0aW9uOwogICAgIAotdXNp
bmcgQ3VzdG9tQWNjZXNzb3JWYWx1ZUZ1bmMgPSBUeXBlZEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vz
c29yUHRyVGFnLCBib29sKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBQcm9wZXJ0eU5hbWUpPjsKK3VzaW5nIEN1c3RvbUFjY2Vzc29yVmFsdWVGdW5jID0g
RnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWcsIGJvb2woSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk+OwogCiBjbGFzcyBQ
dXRQcm9wZXJ0eVNsb3QgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAppbmRleCBmYjBkZGRlNzlmNDUuLjJmYjRiZTU1
MTI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5jcHAKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRh
a2VTYW1wbGUoU2Vjb25kcyYgc3RhY2tUcmFjZVByb2Nlc3NpbmdUaW1lKQogICAgICAgICAgICAg
ICAgIGNhbGxGcmFtZSA9IHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KG1hY2hpbmVGcmFtZSk7CiAg
ICAgICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlvblBvaW50ZXIgPSBNYWNoaW5lQ29udGV4dDo6
aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAgICAgaWYgKGluc3Ry
dWN0aW9uUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgbWFjaGluZVBDID0gaW5zdHJ1Y3Rp
b25Qb2ludGVyLT51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAg
ICAgIG1hY2hpbmVQQyA9IGluc3RydWN0aW9uUG9pbnRlci0+dW50YWdnZWRQdHIoKTsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9IG51bGxwdHI7
CiAgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlbW92ZUNvZGVQdHJUYWcoTWFjaGluZUNvbnRl
eHQ6OmxsaW50SW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lzdGVycykpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAppbmRleCA5NmM5NTcz
ODk5MzguLjViOTI3ZWIxNDdiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKQEAgLTc1LDggKzc1LDggQEAgdm9pZCBTY3JpcHRF
eGVjdXRhYmxlOjpjbGVhckNvZGUoSXNvQ2VsbFNldCYgY2xlYXJhYmxlQ29kZVNldCkKIHsKICAg
ICBtX2ppdENvZGVGb3JDYWxsID0gbnVsbHB0cjsKICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3Qg
PSBudWxscHRyOwotICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwotICAgIG1faml0Q29kZUZvckNvbnN0cnVj
dFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7
CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPigpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPigpOwogCiAgICAgc3dpdGNoICh0eXBlKCkpIHsKICAgICBjYXNlIEZ1
bmN0aW9uRXhlY3V0YWJsZVR5cGU6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApp
bmRleCBlODAyYjM5MWExM2EuLmE3NWI0MjIxM2IzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcApAQCAtNzE3LDcgKzcxNyw3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRS
ZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbikKICAgICByZXR1cm4gZ2V0T3JDcmVhdGUo
bV9mYXN0UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFZN
OjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDhjMTFmNTM5NDQwYi4uYTg5ZjE2
Zjk2M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTU2NCw3ICs1NjQsNyBA
QCBwdWJsaWM6CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlz
SlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdl
dFJlbW90ZUZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uKTsKIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGdl
dENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElMaW5rQ2Fs
bCgpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElUaHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IGdldENUSVZpcnR1YWxDYWxsKENhbGxNb2RlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKaW5kZXggYjUxMDUyOTdiODQ0Li5j
NDZjMTg3Y2ZmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3Bw
CkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdHJ1Y3QgVk1UcmFwczo6U2ln
bmFsQ29udGV4dCB7CiBwcml2YXRlOgotICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycywgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQ
dHJUYWc+IHRyYXBQQykKKyAgICBTaWduYWxDb250ZXh0KFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnMsIENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gdHJhcFBDKQogICAgICAg
ICA6IHJlZ2lzdGVycyhyZWdpc3RlcnMpCiAgICAgICAgICwgdHJhcFBDKHRyYXBQQykKICAgICAg
ICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihyZWdpc3RlcnMp
KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVyczsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3Rl
cnNQQ1B0clRhZz4gdHJhcFBDOworICAgIENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRh
Zz4gdHJhcFBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lkKiBmcmFtZVBvaW50
ZXI7CiB9OwpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJl
YWtwb2ludHMoVk1UcmFwczo6U2lnbmFsQ29udGV4dCYgY29udGV4dCwgU3RhY2tCbwogICAgIC8v
IFRoaXMgbXVzdCBiZSB0aGUgaW5pdGlhbCBzaWduYWwgdG8gZ2V0IHRoZSBtdXRhdG9yIHRocmVh
ZCdzIGF0dGVudGlvbi4KICAgICAvLyBMZXQncyBnZXQgdGhlIHRocmVhZCB0byBicmVhayBhdCBp
bnZhbGlkYXRpb24gcG9pbnRzIGlmIG5lZWRlZC4KICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwot
ICAgIHZvaWQqIHRyYXBQQyA9IGNvbnRleHQudHJhcFBDLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICB2b2lkKiB0cmFwUEMgPSBjb250ZXh0LnRyYXBQQy51bnRhZ2dlZFB0cigpOwog
ICAgIC8vIFdlIG11c3QgZW5zdXJlIHdlJ3JlIGluIEpJVC9MTGludCBjb2RlLiBJZiB3ZSBhcmUs
IHdlIGtub3cgYSBmZXcgdGhpbmdzOgogICAgIC8vIC0gVGhlIEpTIHRocmVhZCBpc24ndCBob2xk
aW5nIHRoZSBtYWxsb2MgbG9jay4gVGhlcmVmb3JlLCBpdCdzIHNhZmUgdG8gbWFsbG9jIGJlbG93
LgogICAgIC8vIC0gVGhlIEpTIHRocmVhZCBpc24ndCBob2xkaW5nIHRoZSBDb2RlQmxvY2tTZXQg
bG9jay4KQEAgLTIxMyw3ICsyMTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFz
aWduYWxDb250ZXh0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpO
b3RIYW5kbGVkOwogCi0gICAgICAgICAgICAgICAgdm9pZCogdHJhcFBDID0gc2lnbmFsQ29udGV4
dC0+dHJhcFBDLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICB2
b2lkKiB0cmFwUEMgPSBzaWduYWxDb250ZXh0LT50cmFwUEMudW50YWdnZWRQdHIoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWlzSklUUEModHJhcFBDKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCmluZGV4IDZkNjlhNGRmMmUyMy4u
YjM2YjU1NzQ3ZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2ln
aWxsQ3Jhc2hBbmFseXplci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Np
Z2lsbENyYXNoQW5hbHl6ZXIuY3BwCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKIHByaXZhdGU6Ci0gICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJl
Z2lzdGVycyYgcmVnaXN0ZXJzLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3Rl
cnNQQ1B0clRhZz4gbWFjaGluZVBDKQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycywgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBtYWNoaW5l
UEMpCiAgICAgICAgIDogcmVnaXN0ZXJzKHJlZ2lzdGVycykKICAgICAgICAgLCBtYWNoaW5lUEMo
bWFjaGluZVBDKQogICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQ
b2ludGVyKHJlZ2lzdGVycykpCkBAIC0xNDAsMTYgKzE0MCwxNiBAQCBwdWJsaWM6CiAgICAgICAg
IGxvZygieCVkOiAlMDE2bGx4IGZwOiAlMDE2bGx4IGxyOiAlMDE2bGx4IiwKICAgICAgICAgICAg
IGksIHJlZ2lzdGVycy5fX3hbaV0sCiAgICAgICAgICAgICBNYWNoaW5lQ29udGV4dDo6ZnJhbWVQ
b2ludGVyPHVpbnQ2NF90PihyZWdpc3RlcnMpLAotICAgICAgICAgICAgTWFjaGluZUNvbnRleHQ6
OmxpbmtSZWdpc3RlcihyZWdpc3RlcnMpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dWludDY0
X3Q+KCkpOworICAgICAgICAgICAgTWFjaGluZUNvbnRleHQ6OmxpbmtSZWdpc3RlcihyZWdpc3Rl
cnMpLnVudGFnZ2VkUHRyPHVpbnQ2NF90PigpKTsKICAgICAgICAgbG9nKCJzcDogJTAxNmxseCBw
YzogJTAxNmxseCBjcHNyOiAlMDh4IiwKICAgICAgICAgICAgIE1hY2hpbmVDb250ZXh0OjpzdGFj
a1BvaW50ZXI8dWludDY0X3Q+KHJlZ2lzdGVycyksCi0gICAgICAgICAgICBtYWNoaW5lUEMudW50
YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx1aW50NjRfdD4oKSwKKyAgICAgICAgICAgIG1hY2hpbmVQ
Qy51bnRhZ2dlZFB0cjx1aW50NjRfdD4oKSwKICAgICAgICAgICAgIHJlZ2lzdGVycy5fX2Nwc3Ip
OwogI2VuZGlmCiAgICAgfQogCiAgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVyczsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gbWFjaGlu
ZVBDOworICAgIENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gbWFjaGluZVBDOwog
ICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lkKiBmcmFtZVBvaW50ZXI7CiB9OwpAQCAt
MTY0LDcgKzE2NCw3IEBAIHN0YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogICAgICAg
ICBpZiAoIXNpZ25hbENvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpO
b3RIYW5kbGVkOwogICAgICAgICAgICAgCi0gICAgICAgIHZvaWQqIG1hY2hpbmVQQyA9IHNpZ25h
bENvbnRleHQtPm1hY2hpbmVQQy51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
IHZvaWQqIG1hY2hpbmVQQyA9IHNpZ25hbENvbnRleHQtPm1hY2hpbmVQQy51bnRhZ2dlZFB0cigp
OwogICAgICAgICBpZiAoIWlzSklUUEMobWFjaGluZVBDKSkKICAgICAgICAgICAgIHJldHVybiBT
aWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CiAKQEAgLTE4NSw3ICsxODUsNyBAQCBzdHJ1Y3QgU2ln
bmFsQ29udGV4dCB7CiAKICAgICB2b2lkIGR1bXAoKSB7IH0KIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBtYWNoaW5lUEM7CisgICAgQ29kZVB0
cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBtYWNoaW5lUEM7CiAgICAgdm9pZCogc3RhY2tQ
b2ludGVyOwogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKIH07CkBAIC0yMzYsNyArMjM2LDcgQEAg
YXV0byBTaWdpbGxDcmFzaEFuYWx5emVyOjphbmFseXplKFNpZ25hbENvbnRleHQmIGNvbnRleHQp
IC0+IENyYXNoU291cmNlCiAgICAgICAgIH0KICAgICAgICAgTG9ja2VyIGxvY2tlciB7IEFkb3B0
TG9jaywgaW5zcGVjdG9yLmdldExvY2soKSB9OwogCi0gICAgICAgIHZvaWQqIHBjID0gY29udGV4
dC5tYWNoaW5lUEMudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICB2b2lkKiBw
YyA9IGNvbnRleHQubWFjaGluZVBDLnVudGFnZ2VkUHRyKCk7CiAgICAgICAgIGF1dG8gaXNJbkpJ
VE1lbW9yeSA9IGluc3BlY3Rvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShwYyk7CiAgICAgICAg
IGlmICghaXNJbkpJVE1lbW9yeSkgewogICAgICAgICAgICAgbG9nKCJFUlJPUjogVGltZWQgb3V0
OiBub3QgYWJsZSB0byBkZXRlcm1pbmUgaWYgcGMgJXAgaXMgaW4gdmFsaWQgSklUIGV4ZWN1dGFi
bGUgbWVtb3J5IiwgcGMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5jcHAKaW5kZXggMWNlY2ZkMmVhODVjLi40MWIwY2QzMGVhMWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApA
QCAtMzM4Niw3ICszMzg2LDcgQEAgVG1wIEFpcklSR2VuZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKENh
dGNoS2luZCBraW5kLCBDb250cm9sVHlwZSYgZGF0YSwgdW5zaWduZWQgZXgKICAgICAgICAgaml0
Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUpKTsK
KyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KGNhbGwsIG9wZXJh
dGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUpOwogICAgICAgICB9
KTsKICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCmluZGV4IDhkZTEwZmE3YzI5Ny4uM2YxMDRiNThmOGQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0yNzEx
LDcgKzI3MTEsNyBAQCBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbChDYXRjaEtp
bmQga2luZCwgQ29udHJvbFR5cGUmIGRhdGEsIHVuc2lnbmVkCiAgICAgICAgIGppdC5tb3ZlKHBh
cmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQu
YWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlKSk7CisgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihjYWxsLCBvcGVyYXRpb25XYXNt
UmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlKTsKICAgICAgICAgfSk7CiAgICAg
fSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBm
YmQ2ODI2ODEyOWYuLjc4NDRhMmQyYjE5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIEZJTkFMSVpFX1dBU01fQ09ERV9GT1Jf
TU9ERShDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0aW9u
UHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9mdW5j
dGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmlu
ZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAg
ICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKKyAgICBD
b2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICB7CiAgICAgICAgIFJlZjxC
QlFDYWxsZWU+IGNhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVu
dHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVT
ZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh0aWVyVXApLCBXVEZNb3Zl
KHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKSwgV1RGTW92ZShmdW5jdGlvbi0+c3RhY2ttYXBzKSwg
V1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnMpLCBXVEZNb3ZlKGxvb3BFbnRyeXBvaW50TG9jYXRpb25zKSwgZnVuY3Rp
b24tPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwogICAgICAgICBmb3IgKGF1dG8mIG1vdmVM
b2NhdGlvbiA6IGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb25zKQpAQCAtMTYxLDcgKzE2MSw3
IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAg
IG1fY2FsbGVlR3JvdXAtPnNldEJCUUNhbGxlZShsb2NrZXIsIG1fZnVuY3Rpb25JbmRleCwgY2Fs
bGVlLmNvcHlSZWYoKSk7CiAKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNt
VG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxX
YXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgICAgICAgICBDb2RlUHRyPFdhc21FbnRy
eVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhT
cGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKICAgICAg
ICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jYWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0
dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CiAgICAgICAgICAgICBlbHNlCkBA
IC0yOTAsNyArMjkwLDcgQEAgdm9pZCBCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkK
IAogICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7
CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKKyAg
ICAgICAgICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKICAg
ICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKSkgewogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5z
dGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25kaXRpb24gc2hvdWxkIGJl
IHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjY0NjIKICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9
IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuY29kZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAppbmRleCAzMjAyZjU0
ODBjYTQuLjczY2QzYmRlNTVhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxlZS5jcHAKQEAgLTExMCwxMiArMTEwLDEyIEBAIExMSW50Q2FsbGVlOjpMTEludENhbGxlZShG
dW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciYgZ2VuZXJhdG9yLCBzaXplX3QgaW5kZXgsIHN0CiAg
ICAgfQogfQogCi12b2lkIExMSW50Q2FsbGVlOjpzZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQpCit2b2lkIExMSW50Q2FsbGVlOjpz
ZXRFbnRyeXBvaW50KENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50KQogewogICAg
IG1fZW50cnlwb2ludCA9IGVudHJ5cG9pbnQ7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxX
YXNtRW50cnlQdHJUYWc+IExMSW50Q2FsbGVlOjplbnRyeXBvaW50KCkgY29uc3QKK0NvZGVQdHI8
V2FzbUVudHJ5UHRyVGFnPiBMTEludENhbGxlZTo6ZW50cnlwb2ludCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fZW50cnlwb2ludDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21DYWxsZWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
ZWUuaAppbmRleCBkOGFkZjRiMTMwZmEuLmY5YTdjNDllNzQzMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsZWUuaApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgSW5k
ZXhPck5hbWUgaW5kZXhPck5hbWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4T3JOYW1lOyB9CiAg
ICAgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29t
cGlsYXRpb25Nb2RlOyB9CiAKLSAgICB2aXJ0dWFsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2RlUHRy
PFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSAwOwogICAgIHZpcnR1
YWwgc3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+IHJhbmdlKCkgY29uc3QgPSAwOwogCkBAIC03OSw3
ICs3OSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSklUQ2FsbGVlIDogcHVibGljIENhbGxlZSB7
CiBwdWJsaWM6Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50
cnlwb2ludCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlv
bi0+Y29kZSgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsgfQorICAgIENvZGVQdHI8V2Fz
bUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9lbnRy
eXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOyB9
CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSBvdmVycmlk
ZSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KICAgICBGaXhl
ZFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgd2FzbVRvV2FzbUNhbGxzaXRlcygpIHsg
cmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQogCkBAIC0yMjUsOCArMjI1LDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBMTEludENhbGxlZShnZW5lcmF0b3Is
IGluZGV4LCBXVEZNb3ZlKG5hbWUpKSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBlbnRyeXBvaW50KCkgY29uc3QgZmluYWw7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzZXRFbnRyeXBvaW50KENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCBm
aW5hbDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVl
U2F2ZVJlZ2lzdGVycygpIGZpbmFsOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0ZDo6dHVwbGU8
dm9pZCosIHZvaWQqPiByYW5nZSgpIGNvbnN0IGZpbmFsOwogCkBAIC0zMTMsNyArMzEzLDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8T3B0aW1pemluZ0pJVENhbGxlZT4gbV9yZXBsYWNlbWVudHNb
V2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2Rlc107CiAgICAgUmVmUHRyPE9TUkVudHJ5Q2FsbGVlPiBt
X29zckVudHJ5Q2FsbGVlc1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsKICNlbmRpZgotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IG1fZW50cnlwb2ludDsKKyAg
ICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gbV9lbnRyeXBvaW50OwogfTsKIAogdXNpbmcgTExJ
bnRDYWxsZWVzID0gVGhyZWFkU2FmZVJlZkNvdW50ZWRGaXhlZFZlY3RvcjxSZWY8TExJbnRDYWxs
ZWU+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVH
cm91cC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAuY3Bw
CmluZGV4IDFiZWJjOWNiMWEyYi4uNWQ1ZjZiMDI2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgQ2FsbGVl
R3JvdXA6OkNhbGxlZUdyb3VwKFZNJiB2bSwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1h
dGlvbiYgbW9kdWxlSW5mb3IKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzID0gRml4ZWRWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+KG1fY2FsbGVlQ291bnQp
OworICAgICAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHMgPSBGaXhlZFZlY3Rv
cjxDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+KG1fY2FsbGVlQ291bnQpOwogCiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxsZWVDb3VudDsgKytpKQogICAgICAgICAg
ICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2ldID0gbV9sbGludENhbGxlZXMt
PmF0KGkpLT5lbnRyeXBvaW50KCk7CkBAIC05Niw3ICs5Niw3IEBAIENhbGxlZUdyb3VwOjpDYWxs
ZWVHcm91cChWTSYgdm0sIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVs
ZUluZm9yCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50cyA9IEZpeGVkVmVjdG9yPE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+PihtX2NhbGxlZUNvdW50KTsKKyAgICAgICAg
ICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzID0gRml4ZWRWZWN0b3I8Q29kZVB0cjxX
YXNtRW50cnlQdHJUYWc+PihtX2NhbGxlZUNvdW50KTsKIAogICAgICAgICAgICAgQkJRUGxhbiog
YmJxUGxhbiA9IHN0YXRpY19jYXN0PEJCUVBsYW4qPihtX3BsYW4uZ2V0KCkpOwogICAgICAgICAg
ICAgYmJxUGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwg
UmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4mJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUsIFJlZlB0cjxCQlFDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnQpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmgKaW5kZXggNmUyMThmYjg4YzZhLi43NTFh
ZmU2ZWIzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
ZWVHcm91cC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91
cC5oCkBAIC0xNDIsMTQgKzE0MiwxNCBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiogZW50cnlwb2ludExvYWRMb2Nh
dGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQor
ICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiogZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21G
dW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0
Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNw
YWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgICAgICByZXR1cm4gJm1fd2FzbUluZGly
ZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XTsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiB3YXNtVG9XYXNtRXhpdFN0dWIodW5zaWduZWQg
ZnVuY3Rpb25JbmRleCkKKyAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvV2FzbUV4
aXRTdHViKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICByZXR1cm4gbV93
YXNtVG9XYXNtRXhpdFN0dWJzW2Z1bmN0aW9uSW5kZXhdLmNvZGUoKTsKICAgICB9CkBAIC0xNzgs
NyArMTc4LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIFJlZlB0cjxMTEludENhbGxlZXM+IG1f
bGxpbnRDYWxsZWVzOwogICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxFbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWU+LCBEZWZhdWx0SGFzaDx1aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyQ2FsbGVlczsKLSAgICBGaXhlZFZl
Y3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtSW5kaXJl
Y3RDYWxsRW50cnlQb2ludHM7CisgICAgRml4ZWRWZWN0b3I8Q29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+PiBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50czsKICAgICBGaXhlZFZlY3RvcjxWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKICAgICBG
aXhlZFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNt
VG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxFbnRyeVBsYW4+IG1fcGxhbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAK
aW5kZXggMmRlOWYxNjZmYTdlLi4zNzE2NDRlMzEyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC01OSw3ICs1
OSw3IEBAIHN0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2ln
SW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlCiAgICAgYXV0byBpbnN0cnVjdGlvblBvaW50
ZXIgPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpOwogICAgIGlm
ICghaW5zdHJ1Y3Rpb25Qb2ludGVyKQogICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RI
YW5kbGVkOwotICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvblBvaW50
ZXItPnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lkKiBmYXVsdGluZ0luc3Ry
dWN0aW9uID0gaW5zdHJ1Y3Rpb25Qb2ludGVyLT51bnRhZ2dlZFB0cigpOwogICAgIGRhdGFMb2dM
bklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRlcm5hbDo6dmVyYm9zZSwgInN0YXJ0aW5nIGhh
bmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1Y3Rpb24pKTsK
IAogICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRlcm5hbDo6dmVyYm9z
ZSwgIkpJVCBtZW1vcnkgc3RhcnQ6ICIsIFJhd1BvaW50ZXIoc3RhcnRPZkZpeGVkRXhlY3V0YWJs
ZU1lbW9yeVBvb2woKSksICIgZW5kOiAiLCBSYXdQb2ludGVyKGVuZE9mRml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5k
ZXggMzY2ZDY1YjJlYjk1Li42YTBmMWQ2N2FiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmgKQEAgLTQ2MSw3ICs0NjEsNyBAQCBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlv
biB7CiAvLyBtZWFudCBhcyBmYXN0IGxvb2t1cCB0YWJsZXMgZm9yIHRoZXNlIG9wY29kZXMgYW5k
IGRvIG5vdCBvd24gY29kZS4KIHN0cnVjdCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsK
ICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7Ci0gICAgdXNpbmcgTG9hZExvY2F0
aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4qOworICAgIHVzaW5n
IExvYWRMb2NhdGlvbiA9IENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPio7CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIHR5cGVJbmRleCk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBlbnRyeXBvaW50TG9hZExv
Y2F0aW9uKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SGFuZGxlckluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJ
bmZvLmNwcAppbmRleCA0YjU4OWU1NWI3MDAuLjcyM2QyMmMxOGE3OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uY3BwCkBAIC0zNCw3ICszNCw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBXYXNtIHsKIAotdm9pZCBIYW5kbGVySW5mbzo6
aW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEluZm8sIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBsYWJlbCkKK3ZvaWQgSGFu
ZGxlckluZm86OmluaXRpYWxpemUoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRJ
bmZvLCBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGxhYmVsKQogewogICAgIG1fdHlw
ZSA9IHVubGlua2VkSW5mby5tX3R5cGU7CiAgICAgbV9zdGFydCA9IHVubGlua2VkSW5mby5tX3N0
YXJ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJ
bmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaAppbmRl
eCA4M2ZhMmYwMjM4YmQuLmNlYjg4YzcwOWRkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKQEAgLTg3LDcgKzg3LDcgQEAgc3RydWN0IFVubGlua2Vk
SGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKIHN0cnVjdCBIYW5kbGVySW5m
byA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgewogICAgIHN0YXRpYyBjb25zdCBIYW5kbGVySW5m
byogaGFuZGxlckZvckluZGV4KEluc3RhbmNlJiwgY29uc3QgRml4ZWRWZWN0b3I8SGFuZGxlcklu
Zm8+JiBleGVwdGlvbkhhbmRsZXJzLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgV2FzbTo6VGFnKiBl
eGNlcHRpb25UYWcpOwogCi0gICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxl
ckluZm8mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4pOwor
ICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiwgQ29kZVB0cjxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPik7CiAKICAgICB1bnNpZ25lZCB0YWcoKSBjb25zdAogICAg
IHsKQEAgLTEwMSw3ICsxMDEsNyBAQCBzdHJ1Y3QgSGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxl
ckluZm9CYXNlIHsKICAgICAgICAgcmV0dXJuIG1fZGVsZWdhdGVUYXJnZXQ7CiAgICAgfQogCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1fbmF0aXZl
Q29kZTsKKyAgICBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1fbmF0aXZlQ29kZTsK
IAogcHJpdmF0ZToKICAgICB1bmlvbiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgKaW5kZXggOTY4OTVmZTgwNjg0Li4wY2MzY2Q0
MmE0NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JUkdlbmVy
YXRvckhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVJHZW5l
cmF0b3JIZWxwZXJzLmgKQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW1p
dFJldGhyb3dJbXBsKENDYWxsSGVscGVycyYgaml0KQogICAgIENDYWxsSGVscGVyczo6Q2FsbCBj
YWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgaml0LmFkZExp
bmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNt
UmV0aHJvdykpOworICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihjYWxs
LCBvcGVyYXRpb25XYXNtUmV0aHJvdyk7CiAgICAgfSk7CiB9CiAKQEAgLTE1OSw3ICsxNTksNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZW1pdFRocm93SW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgdW5z
aWduZWQgZXhjZXB0aW9uSW5kZXgpCiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
Y2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBqaXQuYWRkTGlua1Rhc2soW2Nh
bGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhj
YWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UaHJvdykpOwor
ICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihjYWxsLCBvcGVyYXRpb25X
YXNtVGhyb3cpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21J
bnN0YW5jZS5oCmluZGV4IGM4NjFlOWJlNjNhYy4uNjM2NDhmM2NhZjk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApAQCAtMTk1LDcgKzE5NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgLy8gVGFyZ2V0IGluc3RhbmNlIGFuZCBlbnRyeXBvaW50IGFyZSBvbmx5IHNl
dCBmb3Igd2FzbS0+d2FzbSBjYWxscywgYW5kIGFyZSBvdGhlcndpc2UgbnVsbHB0ci4gVGhlIGVt
YmVkZGVyLXNwZWNpZmljIGxvZ2ljIG9jY3VycyB0aHJvdWdoIGltcG9ydCBmdW5jdGlvbi4KICAg
ICAgICAgSW5zdGFuY2UqIHRhcmdldEluc3RhbmNlIHsgbnVsbHB0ciB9OwogICAgICAgICBXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24geyBudWxscHRyIH07Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YjsKKyAgICAgICAgQ29kZVB0cjxXYXNtRW50
cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YjsKICAgICAgICAgdm9pZCogaW1wb3J0RnVuY3Rp
b24geyBudWxscHRyIH07IC8vIEluIGEgSlMgZW1iZWRkaW5nLCB0aGlzIGlzIGEgV3JpdGVCYXJy
aWVyPEpTT2JqZWN0Pi4KICAgICB9OwogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtSW1wb3J0RnVuY3Rpb25zOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCmluZGV4IDU4MTQyNjcxZThiZi4uNTJmYzNi
MmE0MTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQ
bGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNw
cApAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgTExJbnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0
aW9uKCkKIAogICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzKSB7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVz
czsKKyAgICAgICAgICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVz
czsKICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rp
b25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKSkgewogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4g
QjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNo
b3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULgogICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA4OTBkOGQyMDk3YWYuLjk1
ZmMxZDE5OTJjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9y
dCkKIAogICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50
ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgQ29k
ZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgewogICAgICAgICBBU1NFUlQo
bV9jYWxsZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+Y2FsbGVlR3JvdXBGb3IobW9kZSgpKSk7
CiAgICAgICAgIFJlZjxPTUdDYWxsZWU+IGNhbGxlZSA9IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1v
dmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHVubGlua2Vk
Q2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50
ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRs
ZXJMb2NhdGlvbnMpKTsKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29t
cGlsYXRpb25FZmZvcnQpCiAgICAgICAgIG1fY2FsbGVlR3JvdXAtPnNldE9NR0NhbGxlZShsb2Nr
ZXIsIG1fZnVuY3Rpb25JbmRleCwgY2FsbGVlLmNvcHlSZWYoKSk7CiAKICAgICAgICAgZm9yIChh
dXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAg
ICAgICAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAg
IGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlv
bigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKICAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0g
bV9jYWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNw
YWNlXS5jb2RlKCk7CiAgICAgICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCmluZGV4IDFjNWQyMWVhZDY4Ny4uY2E1ODBkY2Mw
N2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQ
bGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFu
LmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0
aW9uRWZmb3J0KQogCiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NhbGxlZUdyb3VwLT5tX2xv
Y2sgfTsKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNp
dGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+IGVudHJ5cG9pbnQ7CisgICAgICAgICAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50
cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9k
dWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKICAgICAgICAg
ICAgICAgICBlbnRyeXBvaW50ID0gbV9jYWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJz
W2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CiAgICAgICAgICAgICBlbHNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggOTA3YjRj
OTlkOWM4Li5jMTNmYmM3ODBjNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT3BlcmF0aW9ucy5jcHAKQEAgLTIxNiw3ICsyMTYsNyBAQCBzdGF0aWMgdm9pZCBkb09TUkVu
dHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxl
ZSYgYwogI2VuZGlmCiAgICAgLy8gNC4gQ29uZmlndXJlIGFyZ3VtZW50IHJlZ2lzdGVycyB0byBq
dW1wIHRvIE9TUiBlbnRyeSBmcm9tIHRoZSBjYWxsZXIgb2YgdGhpcyBydW50aW1lIGZ1bmN0aW9u
LgogICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPSBiaXR3aXNlX2Nhc3Q8
VUNQVVJlZ2lzdGVyPihidWZmZXIpOwotICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50
R1BSMSkgPSBiaXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVyPihvc3JFbnRyeUNhbGxlZS5lbnRyeXBv
aW50KCkuZXhlY3V0YWJsZUFkZHJlc3M8PigpKTsKKyAgICBjb250ZXh0LmdwcihHUFJJbmZvOjph
cmd1bWVudEdQUjEpID0gYml0d2lzZV9jYXN0PFVDUFVSZWdpc3Rlcj4ob3NyRW50cnlDYWxsZWUu
ZW50cnlwb2ludCgpLnRhZ2dlZFB0cjw+KCkpOwogfQogCiBpbmxpbmUgYm9vbCBzaG91bGRKSVQo
dW5zaWduZWQgZnVuY3Rpb25JbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmNwcAppbmRleCBmYTlhYTc3OGU2OGMuLjNhMzc1MzM1NjQ2MiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgUGxhbjo6dXBk
YXRlQ2FsbFNpdGVzVG9DYWxsVXMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNhbGxlZUdyb3VwTG9j
a2VyLCBDYWxsCiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykgewogICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYoV2FzbVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5n
IHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRh
TG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsK
ICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4
U3BhY2UpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtUGxhbkludGVybmFsOjp2
ZXJib3NlLCAiUmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0
aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0byAiLCBSYXdQb2ludGVyKGVudHJ5cG9pbnQuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21QbGFuSW50
ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5j
YWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIoZW50cnlwb2lu
dC50YWdnZWRQdHIoKSkpOwogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
TmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIHN0YWdlZENhbGxzLmdldChjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IGVkMjA3Yzk1MjM0
Yy4uMGRhODcwMDFlNDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xv
d1BhdGhzLmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wocHJvbG9n
dWVfb3NyKQogICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoY2FsbGVlLCBpbnN0
YW5jZSkpCiAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKIAotICAg
IFdBU01fUkVUVVJOX1RXTyhjYWxsZWUtPnJlcGxhY2VtZW50KGluc3RhbmNlLT5tZW1vcnkoKS0+
bW9kZSgpKS0+ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOworICAg
IFdBU01fUkVUVVJOX1RXTyhjYWxsZWUtPnJlcGxhY2VtZW50KGluc3RhbmNlLT5tZW1vcnkoKS0+
bW9kZSgpKS0+ZW50cnlwb2ludCgpLnRhZ2dlZFB0cigpLCBudWxscHRyKTsKIH0KIAogV0FTTV9T
TE9XX1BBVEhfREVDTChsb29wX29zcikKQEAgLTIxMCw3ICsyMTAsNyBAQCBXQVNNX1NMT1dfUEFU
SF9ERUNMKGxvb3Bfb3NyKQogICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgOiBvc3JF
bnRyeURhdGEudmFsdWVzKQogICAgICAgICAgICAgYnVmZmVyW2luZGV4KytdID0gUkVBRChyZWcp
LmVuY29kZWRKU1ZhbHVlKCk7CiAKLSAgICAgICAgV0FTTV9SRVRVUk5fVFdPKGJ1ZmZlciwgYmJx
Q2FsbGVlLT5sb29wRW50cnlwb2ludHMoKVtvc3JFbnRyeURhdGEubG9vcEluZGV4XS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICAgICAgV0FTTV9SRVRVUk5fVFdPKGJ1ZmZlciwgYmJxQ2FsbGVl
LT5sb29wRW50cnlwb2ludHMoKVtvc3JFbnRyeURhdGEubG9vcEluZGV4XS50YWdnZWRQdHIoKSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29uc3QgYXV0byBkb09TUkVudHJ5ID0gWyZdKFdhc206
Ok9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSkgewogICAgICAgICAgICAgaWYgKG9zckVu
dHJ5Q2FsbGVlLT5sb29wSW5kZXgoKSAhPSBvc3JFbnRyeURhdGEubG9vcEluZGV4KQpAQCAtMjI2
LDcgKzIyNiw3IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgICAgICAgICBm
b3IgKFZpcnR1YWxSZWdpc3RlciByZWcgOiBvc3JFbnRyeURhdGEudmFsdWVzKQogICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IFJFQUQocmVnKS5lbmNvZGVkSlNWYWx1ZSgpOwogCi0g
ICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08oYnVmZmVyLCBvc3JFbnRyeUNhbGxlZS0+ZW50cnlw
b2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgV0FTTV9SRVRVUk5fVFdP
KGJ1ZmZlciwgb3NyRW50cnlDYWxsZWUtPmVudHJ5cG9pbnQoKS50YWdnZWRQdHIoKSk7CiAgICAg
ICAgIH07CiAKICAgICAgICAgaWYgKGF1dG8qIG9zckVudHJ5Q2FsbGVlID0gY2FsbGVlLT5vc3JF
bnRyeUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpCkBAIC00NTEsNyArNDUxLDcg
QEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsKFdhc206Okluc3RhbmNlKiBp
bnN0YW5jZSwgdW5zaWduZWQgZnVuY3Rpb24KIHsKICAgICB1aW50MzJfdCBpbXBvcnRGdW5jdGlv
bkNvdW50ID0gaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVu
Y3Rpb25Db3VudCgpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRh
Zz4gY29kZVB0cjsKKyAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gY29kZVB0cjsKIAogICAg
IGlmIChmdW5jdGlvbkluZGV4IDwgaW1wb3J0RnVuY3Rpb25Db3VudCkgewogICAgICAgICBXYXNt
OjpJbnN0YW5jZTo6SW1wb3J0RnVuY3Rpb25JbmZvKiBmdW5jdGlvbkluZm8gPSBpbnN0YW5jZS0+
aW1wb3J0RnVuY3Rpb25JbmZvKGZ1bmN0aW9uSW5kZXgpOwpAQCAtNDY3LDcgKzQ2Nyw3IEBAIGlu
bGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2FsbChXYXNtOjpJbnN0YW5jZSogaW5zdGFu
Y2UsIHVuc2lnbmVkIGZ1bmN0aW9uCiAgICAgICAgIGNvZGVQdHIgPSAqaW5zdGFuY2UtPmNhbGxl
ZUdyb3VwKCktPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXgpOwogICAgIH0KIAotICAgIFdBU01fQ0FMTF9SRVRVUk4oaW5zdGFuY2UsIGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICBXQVNNX0NB
TExfUkVUVVJOKGluc3RhbmNlLCBjb2RlUHRyLnRhZ2dlZFB0cigpLCBXYXNtRW50cnlQdHJUYWcp
OwogfQogCiBXQVNNX1NMT1dfUEFUSF9ERUNMKGNhbGwpCkBAIC01MDYsNyArNTA2LDcgQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsSW5kaXJlY3QoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIFdhc206Okluc3RhbmMKICAgICBpZiAodGFyZ2V0SW5zdGFuY2UgIT0gaW5zdGFuY2Up
CiAgICAgICAgIHRhcmdldEluc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGluc3RhbmNlLT5j
YWNoZWRTdGFja0xpbWl0KCkpOwogCi0gICAgV0FTTV9DQUxMX1JFVFVSTih0YXJnZXRJbnN0YW5j
ZSwgZnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbi0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwg
V2FzbUVudHJ5UHRyVGFnKTsKKyAgICBXQVNNX0NBTExfUkVUVVJOKHRhcmdldEluc3RhbmNlLCBm
dW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0aW9uLT50YWdnZWRQdHIoKSwgV2FzbUVudHJ5UHRy
VGFnKTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChjYWxsX2luZGlyZWN0KQpAQCAtNTQzLDcg
KzU0Myw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2FsbFJlZihDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGNhCiAKICAgICBBU1NFUlQoV2FzbTo6VHlw
ZUluZm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZShmdW5jdGlvbi50eXBlSW5kZXgpID09
IENBTExFRSgpLT5zaWduYXR1cmUodHlwZUluZGV4KSk7CiAgICAgVU5VU0VEX1BBUkFNKHR5cGVJ
bmRleCk7Ci0gICAgV0FTTV9DQUxMX1JFVFVSTihjYWxsZWVJbnN0YW5jZSwgZnVuY3Rpb24uZW50
cnlwb2ludExvYWRMb2NhdGlvbi0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgV2FzbUVudHJ5UHRyVGFn
KTsKKyAgICBXQVNNX0NBTExfUkVUVVJOKGNhbGxlZUluc3RhbmNlLCBmdW5jdGlvbi5lbnRyeXBv
aW50TG9hZExvY2F0aW9uLT50YWdnZWRQdHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKIH0KIAogV0FT
TV9TTE9XX1BBVEhfREVDTChjYWxsX3JlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRodW5rcy5jcHAKaW5kZXggZmVjMmExMzc3OWJmLi41NDcyZjFhMDA4NzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRo
dW5rR2VuZXJhdG9yKGNvbnN0CiAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5v
dCByZWFjaCB0aGlzLgogCiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtVGh1bmspOwotICAgIGxpbmtCdWZmZXIu
bGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21Ub0pT
RXhjZXB0aW9uKSk7CisgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2FsbCwg
b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOwogICAgIHJldHVybiBGSU5BTElaRV9XQVNNX0NP
REUobGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJUaHJvdyBleGNlcHRpb24gZnJvbSBXYXNt
Iik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9X
YXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAppbmRl
eCA1MDU4MTEzMjM3NDguLjlhM2U3Mzc1MTA2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAtODcsNyArODcsNyBAQCB2b2lkIG1hcnNoYWxsSlNSZXN1
bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlv
biwgYwogICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZSh3YXNtQ29u
dGV4dEluc3RhbmNlR1BSKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpPih3YXNtQ29udGV4dElu
c3RhbmNlR1BSLCBpbnB1dEpTUik7Ci0gICAgICAgICAgICBqaXQuY2FsbE9wZXJhdGlvbihGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNvbnZlcnRUb0JpZ0ludCkpOworICAg
ICAgICAgICAgaml0LmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydFRvQmlnSW50KTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBib3hXYXNtUmVzdWx0KGppdCwgc2lnbmF0dXJlLnJl
dHVyblR5cGUoMCksIHdhc21GcmFtZUNvbnZlbnRpb24ucmVzdWx0c1swXSwgSlNSSW5mbzo6cmV0
dXJuVmFsdWVKU1IpOwogICAgIH0gZWxzZSB7CkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBtYXJz
aGFsbEpTUmVzdWx0KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgdHlw
ZURlZmluaXRpb24sIGMKIAogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoYWRkcmVzcywg
dmFsdWVKU1IpOwogICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpPih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCB2YWx1ZUpT
Uik7Ci0gICAgICAgICAgICAgICAgaml0LmNhbGxPcGVyYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpKTsKKyAgICAgICAgICAgICAgICBq
aXQuY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpOwogICAgICAgICAgICAg
ICAgIGppdC5zdG9yZVZhbHVlKEpTUkluZm86OnJldHVyblZhbHVlSlNSLCBhZGRyZXNzKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgbWFyc2hhbGxK
U1Jlc3VsdChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgVHlwZURlZmluaXRpb24mIHR5cGVEZWZp
bml0aW9uLCBjCiAgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIEFTU0VSVCh3YXNtQ29udGV4dEluc3RhbmNlR1BSICE9
IHNhdmVkUmVzdWx0c0dQUik7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25BbGxvY2F0ZVJlc3VsdHNBcnJheSk+KHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdHlwZURlZmluaXRpb24pLCBpbmRleGluZ1R5cGUs
IHNhdmVkUmVzdWx0c0dQUik7Ci0gICAgICAgIGppdC5jYWxsT3BlcmF0aW9uKEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXkpKTsKKyAgICAg
ICAgaml0LmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXkpOwogICAg
ICAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAg
ICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmgKaW5kZXggMTY4YmI5YzE4ZmI0Li5jNjUxNjNiODgzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTczLDcg
KzczLDcgQEAgcHVibGljOgogICAgIFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXhGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3Q7CiAKICAgICBF
eHBlY3RlZDx2b2lkLCBXYXNtOjpCaW5kaW5nRmFpbHVyZT4gZ2VuZXJhdGVXYXNtVG9KU1N0dWJz
KFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2FzbVRv
RW1iZWRkZXJTdHViKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gbV93YXNtVG9K
U0V4aXRTdHVic1tpbXBvcnRGdW5jdGlvbk51bV0uY29kZSgpOyB9CisgICAgQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0p
IHsgcmV0dXJuIG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0RnVuY3Rpb25OdW1dLmNvZGUoKTsg
fQogCiAgICAgdm9pZCBjbGVhckpTQ2FsbElDcyhWTSYpOwogICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dhc21Ub0pTLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcAppbmRleCAxNTNkYTNlNWZiNjMuLjU1Mzc4NDgzNGFlNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAtMjY4LDcgKzI2OCw3IEBAIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4g
d2FzbVRvSlMoVk0mIHZtCiAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChq
aXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOwogICAgICAgICAgICAgICAgIGppdC5zdG9yZVZh
bHVlKEpTUkluZm86OnJldHVyblZhbHVlSlNSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxl
ZUZyYW1lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Db252ZXJ0VG9C
aWdJbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0
clRhZz4oY2FsbCwgb3BlcmF0aW9uQ29udmVydFRvQmlnSW50KTsKICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVv
ZihSZWdpc3Rlcik7CkBAIC0zMjUsNyArMzI1LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0K
ICAgICAgICAgICAgIGppdC5tb3ZlVmFsdWVSZWdzKEpTUkluZm86OnJldHVyblZhbHVlSlNSLCBk
ZXN0KTsKIAogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNvbnZlcnRUb0k2NCkpOworICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KGNhbGwsIG9wZXJhdGlvbkNv
bnZlcnRUb0k2NCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0zNDksNyArMzQ5LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICNlbmRpZgog
CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ29udmVydFRvSTMyKSk7CisgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2FsbCwgb3BlcmF0aW9uQ29udmVydFRv
STMyKTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CkBA
IC0zODEsNyArMzgxLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgICAgIGpp
dC5tb3ZlKEZQUkluZm86OnJldHVyblZhbHVlRlBSICwgZGVzdCk7CiAKICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25Db252ZXJ0VG9GMzIpKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8
T3BlcmF0aW9uUHRyVGFnPihjYWxsLCBvcGVyYXRpb25Db252ZXJ0VG9GMzIpOwogICAgICAgICAg
ICAgfSk7CiAKICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKQEAgLTQxMiw3ICs0MTIsNyBA
QCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGlu
Z0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICAgICAgaml0Lm1vdmUoRlBSSW5mbzo6
cmV0dXJuVmFsdWVGUFIsIGRlc3QpOwogCiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ29udmVydFRv
RjY0KSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4o
Y2FsbCwgb3BlcmF0aW9uQ29udmVydFRvRjY0KTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAg
ICAgICBkb25lLmxpbmsoJmppdCk7CkBAIC00NDEsNyArNDQxLDcgQEAgRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9K
UyhWTSYgdm0KICAgICAgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAoc2F2ZWRSZXN1bHRzR1BS
LCBKU1JJbmZvOjpyZXR1cm5WYWx1ZUpTUikpOwogICAgICAgICBBU1NFUlQod2FzbUNvbnRleHRJ
bnN0YW5jZUdQUiAhPSBzYXZlZFJlc3VsdHNHUFIpOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVu
dHM8ZGVjbHR5cGUob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpPih3YXNtQ29udGV4dEluc3RhbmNl
R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnR5cGVEZWZpbml0aW9uKSwgSlNSSW5m
bzo6cmV0dXJuVmFsdWVKU1IsIHNhdmVkUmVzdWx0c0dQUiwgQ0NhbGxIZWxwZXJzOjpmcmFtZVBv
aW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5jYWxsT3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpKTsKKyAgICAgICAgaml0LmNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpOwogICAgICAgICBpZiBjb25zdGV4
cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCkBAIC00NzAsNyArNDcw
LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJp
bmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIodm0pOwogCiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21VbndpbmQpKTsKKyAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KGNhbGwsIG9wZXJhdGlvbldhc21Vbndp
bmQpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIGVtaXRU
aHJvd1dhc21Ub0pTRXhjZXB0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgd2FzbUluc3Rh
bmNlLCBXYXNtOjpFeAogICAgIGppdC5icmVha3BvaW50KCk7IC8vIFdlIHNob3VsZCBub3QgcmVh
Y2ggdGhpcy4KIAogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4oV2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pKTsKKyAgICAgICAgbGlu
a0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2FsbCwgV2FzbTo6b3BlcmF0aW9uV2FzbVRv
SlNFeGNlcHRpb24pOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDE0YWNjMjg4MWMwOC4u
ZDU4ZWViMzJiMzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsCiAgICAgdm0ud2FzbUNvbnRleHQuc3RvcmUod2FzbUluc3RhbmNlLCB2bS5z
b2Z0U3RhY2tMaW1pdCgpKTsKICAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsK
ICAgICBBU1NFUlQoJndhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKSA9PSB2bS53
YXNtQ29udGV4dC5sb2FkKCkpOwotICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50
cnlUb1dhc20od2FzbUZ1bmN0aW9uLT5qc0VudHJ5cG9pbnQoTXVzdENoZWNrQXJpdHkpLmV4ZWN1
dGFibGVBZGRyZXNzKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKKyAgICBFbmNvZGVkSlNWYWx1
ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9XYXNtKHdhc21GdW5jdGlvbi0+anNFbnRyeXBvaW50KE11
c3RDaGVja0FyaXR5KS50YWdnZWRQdHIoKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwogICAgIGlm
IChwcmV2V2FzbUluc3RhbmNlICE9IHdhc21JbnN0YW5jZSkgewogICAgICAgICAvLyBUaGlzIGlz
IGp1c3QgZm9yIHNvbWUgZXh0cmEgc2FmZXR5IGluc3RlYWQgb2YgbGVhdmluZyBhIGNhY2hlZAog
ICAgICAgICAvLyB2YWx1ZSBpbiB0aGVyZS4gSWYgd2UgZXZlciBmb3JnZXQgdG8gc2V0IHRoZSB2
YWx1ZSB0byBiZSBhIHJlYWwKQEAgLTE3OSw3ICsxNzksNyBAQCBXYXNtOjpJbnN0YW5jZSogV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6cHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQorQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xv
dygpCiB7CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBDQ2FsbEhlbHBlcnMgaml0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5oCmluZGV4IDY2OGYxNTJlMWIyMS4uNjU3ZDAwZWI4MzVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCkBAIC02MCw3ICs2
MCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlG
dW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25l
ZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBq
c0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiwg
V2FzbTo6VHlwZUluZGV4KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFdhc21FbnRyeVB0clRhZz4ganNFbnRyeXBvaW50KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQor
ICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBqc0VudHJ5cG9pbnQoQXJpdHlDaGVja01vZGUg
YXJpdHkpCiAgICAgewogICAgICAgICBpZiAoYXJpdHkgPT0gQXJpdHlDaGVja05vdFJlcXVpcmVk
KQogICAgICAgICAgICAgcmV0dXJuIG1fanNFbnRyeXBvaW50OwpAQCAtNjgsNyArNjgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2pzRW50cnlwb2ludDsKICAgICB9CiAKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludCgpCisgICAg
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50KCkKICAgICB7CiAgICAgICAg
IGlmIChtX2pzQ2FsbEVudHJ5cG9pbnQpCiAgICAgICAgICAgICByZXR1cm4gbV9qc0NhbGxFbnRy
eXBvaW50LmNvZGUoKTsKQEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRh
YmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlw
b2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9p
bnRMb2FkTG9jYXRpb24sIFdhc206OlR5cGVJbmRleCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKKyAgICBDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7CiAgICAgcHRyZGlmZl90IHBy
ZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSBjb25zdDsKICAgICBib29sIHVzZXNUYWdSZWdpc3RlcnMo
KSBjb25zdDsKIApAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIC8vIEl0J3Mgc2FmZSB0
byBqdXN0IGhvbGQgdGhlIHJhdyBqc0VudHJ5cG9pbnQgYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJl
bmNlCiAgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3aGljaCBwb2ludHMgdG8gdGhlIE1vZHVsZSB0
aGF0IGV4cG9ydGVkIHVzLCB3aGljaAogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNp
Z25hdHVyZS9jb2RlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IG1fanNFbnRyeXBvaW50OworICAgIENvZGVQdHI8V2Fz
bUVudHJ5UHRyVGFnPiBtX2pzRW50cnlwb2ludDsKICAgICBXcml0ZUJhcnJpZXI8SlNUb1dhc21J
Q0NhbGxlZT4gbV9qc1RvV2FzbUlDQ2FsbGVlOwogICAgIC8vIFVzZWQgZm9yIEpTIGNhbGxpbmcg
aW50byBXYXNtLgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBtX2pz
Q2FsbEVudHJ5cG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJyRGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJEaXNh
c3NlbWJsZXIuY3BwCmluZGV4IDY0ZGMwNjQ4OTUyNS4uYTVhNmY2YTMzNmE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyRGlzYXNzZW1ibGVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyRGlzYXNzZW1ibGVyLmNwcApAQCAtNTgsNyAr
NTgsNyBAQCBZYXJyRGlzYXNzZW1ibGVyOjp+WWFyckRpc2Fzc2VtYmxlcigpCiAKIHZvaWQgWWFy
ckRpc2Fzc2VtYmxlcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKQogewotICAgIG1fY29kZVN0YXJ0ID0gbGlua0J1ZmZlci5lbnRyeXBvaW50PERpc2Fzc2Vt
Ymx5UHRyVGFnPigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBtX2NvZGVTdGFy
dCA9IGxpbmtCdWZmZXIuZW50cnlwb2ludDxEaXNhc3NlbWJseVB0clRhZz4oKS51bnRhZ2dlZFB0
cigpOwogICAgIG1fY29kZUVuZCA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4obV9jb2RlU3RhcnQp
ICsgbGlua0J1ZmZlci5zaXplKCk7CiAKICAgICBkdW1wSGVhZGVyKG91dCwgbGlua0J1ZmZlcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKaW5kZXggMzFmNmJmZDRiMDM4Li42ODhk
M2UxYmJhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKQEAgLTMzMyw5ICsz
MzMsOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZSgpKTsKICNpZiBDUFUo
QVJNNjRFKQogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICAgICAg
cmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50cnlUb1lhcnJKSVQoaW5wdXQsIHN0YXJ0LCBsZW5ndGgs
IG91dHB1dCwgbWF0Y2hpbmdDb250ZXh0LCByZXRhZ0NvZGVQdHI8WWFycjhCaXRQdHJUYWcsIFlh
cnJFbnRyeVB0clRhZz4obV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSkpOworICAg
ICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50cnlUb1lhcnJKSVQoaW5wdXQsIHN0YXJ0
LCBsZW5ndGgsIG91dHB1dCwgbWF0Y2hpbmdDb250ZXh0LCByZXRhZ0NvZGVQdHI8WWFycjhCaXRQ
dHJUYWcsIFlhcnJFbnRyeVB0clRhZz4obV9yZWY4LmNvZGUoKS50YWdnZWRQdHIoKSkpKTsKICNl
bmRpZgotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJ
VENvZGU4LCBZYXJyOEJpdFB0clRhZz4obV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
KShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRjaGluZ0NvbnRleHQpKTsKKyAgICAg
ICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlOCwgWWFy
cjhCaXRQdHJUYWc+KG1fcmVmOC5jb2RlKCkudGFnZ2VkUHRyKCkpKGlucHV0LCBzdGFydCwgbGVu
Z3RoLCBvdXRwdXQsIG1hdGNoaW5nQ29udGV4dCkpOwogICAgIH0KIAogICAgIE1hdGNoUmVzdWx0
IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoLCBpbnQqIG91dHB1dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQp
CkBAIC0zNDMsOSArMzQzLDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaGFzMTZCaXRDb2Rl
KCkpOwogI2lmIENQVShBUk02NEUpCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVRDYWdlKCkp
Ci0gICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodm1FbnRyeVRvWWFyckpJVChpbnB1dCwg
c3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRjaGluZ0NvbnRleHQsIHJldGFnQ29kZVB0cjxZYXJy
MTZCaXRQdHJUYWcsIFlhcnJFbnRyeVB0clRhZz4obV9yZWYxNi5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpKTsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh2bUVudHJ5VG9ZYXJy
SklUKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIG1hdGNoaW5nQ29udGV4dCwgcmV0YWdD
b2RlUHRyPFlhcnIxNkJpdFB0clRhZywgWWFyckVudHJ5UHRyVGFnPihtX3JlZjE2LmNvZGUoKS50
YWdnZWRQdHIoKSkpKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdD
RnVuY3Rpb25QdHI8WWFyckpJVENvZGUxNiwgWWFycjE2Qml0UHRyVGFnPihtX3JlZjE2LmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRj
aGluZ0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9u
UHRyPFlhcnJKSVRDb2RlMTYsIFlhcnIxNkJpdFB0clRhZz4obV9yZWYxNi5jb2RlKCkudGFnZ2Vk
UHRyKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIG1hdGNoaW5nQ29udGV4dCkpOwog
ICAgIH0KIAogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0LCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBNYXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNo
aW5nQ29udGV4dCkKQEAgLTM1Myw5ICszNTMsOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCho
YXM4Qml0Q29kZU1hdGNoT25seSgpKTsKICNpZiBDUFUoQVJNNjRFKQogICAgICAgICBpZiAoT3B0
aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50
cnlUb1lhcnJKSVQoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG51bGxwdHIsIG1hdGNoaW5nQ29udGV4
dCwgcmV0YWdDb2RlUHRyPFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnLCBZYXJyRW50cnlQdHJUYWc+
KG1fbWF0Y2hPbmx5OC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdCh2bUVudHJ5VG9ZYXJySklUKGlucHV0LCBzdGFydCwgbGVuZ3Ro
LCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQsIHJldGFnQ29kZVB0cjxZYXJyTWF0Y2hPbmx5OEJp
dFB0clRhZywgWWFyckVudHJ5UHRyVGFnPihtX21hdGNoT25seTguY29kZSgpLnRhZ2dlZFB0cigp
KSkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0
cjxZYXJySklUQ29kZU1hdGNoT25seTgsIFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnPihtX21hdGNo
T25seTguY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBu
dWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVu
dGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5OCwgWWFyck1hdGNoT25seThCaXRQ
dHJUYWc+KG1fbWF0Y2hPbmx5OC5jb2RlKCkudGFnZ2VkUHRyKCkpKGlucHV0LCBzdGFydCwgbGVu
Z3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsKICAgICB9CiAKICAgICBNYXRjaFJlc3Vs
dCBleGVjdXRlKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxl
bmd0aCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQpCkBAIC0zNjMsOSAr
MzYzLDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaGFzMTZCaXRDb2RlTWF0Y2hPbmx5KCkp
OwogI2lmIENQVShBUk02NEUpCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodm1FbnRyeVRvWWFyckpJVChpbnB1dCwgc3Rh
cnQsIGxlbmd0aCwgbnVsbHB0ciwgbWF0Y2hpbmdDb250ZXh0LCByZXRhZ0NvZGVQdHI8WWFyck1h
dGNoT25seTE2Qml0UHRyVGFnLCBZYXJyRW50cnlQdHJUYWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKSk7CisgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQo
dm1FbnRyeVRvWWFyckpJVChpbnB1dCwgc3RhcnQsIGxlbmd0aCwgbnVsbHB0ciwgbWF0Y2hpbmdD
b250ZXh0LCByZXRhZ0NvZGVQdHI8WWFyck1hdGNoT25seTE2Qml0UHRyVGFnLCBZYXJyRW50cnlQ
dHJUYWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLnRhZ2dlZFB0cigpKSkpOwogI2VuZGlmCi0gICAg
ICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZU1hdGNo
T25seTE2LCBZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBudWxscHRyLCBtYXRjaGlu
Z0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRy
PFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTYsIFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4obV9tYXRj
aE9ubHkxNi5jb2RlKCkudGFnZ2VkUHRyKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBudWxscHRy
LCBtYXRjaGluZ0NvbnRleHQpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcp
CkBAIC0zNzQsNyArMzc0LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWhhczhCaXRDb2RlTWF0
Y2hPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICByZXR1cm4gbV9tYXRj
aE9ubHk4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXR1cm4gbV9tYXRj
aE9ubHk4LmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9CiAKICAgICB2b2lkICpnZXQxNkJpdE1h
dGNoT25seUFkZHIoKQpAQCAtMzgyLDcgKzM4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFo
YXMxNkJpdENvZGVNYXRjaE9ubHkoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAg
IHJldHVybiBtX21hdGNoT25seTE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAg
ICByZXR1cm4gbV9tYXRjaE9ubHkxNi5jb2RlKCkudGFnZ2VkUHRyKCk7CiAgICAgfQogCiAgICAg
dm9pZCAqZ2V0OEJpdE1hdGNoQWRkcigpCkBAIC0zOTAsNyArMzkwLDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIWhhczhCaXRDb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAg
ICByZXR1cm4gbV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXR1
cm4gbV9yZWY4LmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9CiAKICAgICB2b2lkICpnZXQxNkJp
dE1hdGNoQWRkcigpCkBAIC0zOTgsNyArMzk4LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWhh
czE2Qml0Q29kZSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgcmV0dXJuIG1f
cmVmMTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHJldHVybiBtX3JlZjE2
LmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGU5Yjk2YTM2YTk5Li4zMWM0YWM0MmY3ODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAzLDcgKzIwMyw2
IEBACiAJCUREM0RDODdEMjdBNEJGOEUwMDdFNUI2MSAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4
MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzREM4N0UyN0E0QkY4RTAwN0U1QjYxIC8q
IEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEE0NzI2NzE1MUE4MjVBMDA0MTIzRkYgLyogQnVtcFBvaW50ZXJBbGxv
Y2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlERDNEQzg3RjI3QTRCRjhFMDA3RTVCNjEgLyogTG9nZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzdDRDg2QTFGRDlDRkQyMDA4Mjg1ODcgLyog
TG9nZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJREQzREM4ODAyN0E0QkY4RTAwN0U1QjYxIC8qIE1ldGFBbGxvY2F0b3JQdHIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNzQ5N0VEMjA5MTYzMDYw
MDAzNTY1QiAvKiBNZXRhQWxsb2NhdG9yUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzREM4ODEyN0E0QkY4RTAwN0U1QjYxIC8qIE1ldGFB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MkNFMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzREM4ODIyN0E0QkY4RTAw
N0U1QjYxIC8qIENoZWNrZWRQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlCQjkxRjUxMjY0OEVBNEQwMEE1NjIxNyAvKiBDaGVja2VkUHRyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzREM4ODMy
N0E0QkY4RTAwN0U1QjYxIC8qIE9iamVjdElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzQThBQzNEMUZBQkJFOTQwMDIwNjRBQyAvKiBP
YmplY3RJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTgxNiw2ICs4MTUsOCBAQAogCQlGRTFFMkM0MjIyNDE4N0M2MDBGNkI3Mjkg
LyogUGxhdGZvcm1SZWdpc3RlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUxRTJDNDEyMjQxODdDNjAwRjZCNzI5IC8qIFBsYXRmb3JtUmVnaXN0
ZXJzLmNwcCAqLzsgfTsKIAkJRkUzNUQwOTIyN0RDNUVDQzAwOURGQTVCIC8qIFN0YWNrQ2hlY2su
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNUQw
OTEyN0RDNUVDQzAwOURGQTVCIC8qIFN0YWNrQ2hlY2suY3BwICovOyB9OwogCQlGRTdBQ0ZFRjI4
NURDMkY5MDA3RkM4RTkgLyogUmF3SGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTdBQ0ZFRTI4NURDMkY4MDA3RkM4RTkgLyogUmF3SGV4LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU5QjhCMUEy
OEIxNDUzRDAwODhDNkUxIC8qIENvZGVQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFOUI4QjE5MjhCMTQ1M0QwMDg4QzZFMSAvKiBDb2RlUHRyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU5QjhC
MUUyOEIxQjFDNzAwODhDNkUxIC8qIENvZGVQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5QjhCMUQyOEIxQjFDNjAwODhDNkUxIC8qIENvZGVQ
dHIuY3BwICovOyB9OwogCQlGRUMyNkJGMzI4OURCQkQzMDA2MzlBNTkgLyogRnVuY3Rpb25QdHIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQzI2QkYy
Mjg5REJCRDMwMDYzOUE1OSAvKiBGdW5jdGlvblB0ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBT
dGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLzsgfTsKIAkJ
RkVFQTRERjkyMTZEN0JFNDAwQUMwNjAyIC8qIFN0YWNrUG9pbnRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUVBNERGODIxNkQ3QkU0MDBBQzA2
MDIgLyogU3RhY2tQb2ludGVyLmNwcCAqLzsgfTsKQEAgLTE3MTcsMTMgKzE3MTgsMTQgQEAKIAkJ
RkUzNUQwOTEyN0RDNUVDQzAwOURGQTVCIC8qIFN0YWNrQ2hlY2suY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMzg0MjM0MjMyNUNDODAwMDlERDQ0NSAvKiBSZXNvdXJjZVVzYWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlVXNhZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU3NDk3RTQyMDhGRkNBQTAwMDM1NjVCIC8qIFB0clRh
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdHJUYWcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU3NDk3RUQyMDkxNjMwNjAwMDM1NjVCIC8qIE1ldGFBbGxv
Y2F0b3JQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0YUFsbG9jYXRv
clB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTdBQ0ZFRTI4NURDMkY4MDA3
RkM4RTkgLyogUmF3SGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhd0hl
eC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTgyMjUzMDFCMkExRTVCMDBCQTY4
RkQgLyogTmFrZWRQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRQ
dHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU4NkE4NzQxRTU5NDQwMjAwMTEx
QkJGIC8qIEZvcmJpZEhlYXBBbGxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvcmJpZEhlYXBBbGxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFODkyNUFGMUQwMERBRUMwMDQ2OTA3RSAvKiBJbmRlbnRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmRlbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTk3RjZBODI0NUNFNUREMDBDNjNGQzYgLyogU3RkSW50RXh0cmFzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZEludEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTk5NkI1MjI0QTg0NUFGMDAxRDJFNjMgLyogRmFpbHVyZUFjdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGYWlsdXJlQWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOUI4QjE5MjhCMTQ1M0QwMDg4QzZFMSAvKiBDb2Rl
UHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQdHIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5QjhCMUQyOEIxQjFDNjAwODhDNkUxIC8qIENvZGVQ
dHIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZVB0ci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFQjZCMDM1MjAxQkUwQjYwMEI5NThDMSAv
KiBQb2ludGVyUHJlcGFyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvaW50ZXJQcmVwYXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVD
MjZCRjIyODlEQkJEMzAwNjM5QTU5IC8qIEZ1bmN0aW9uUHRyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrU3RhdHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTk1MCw2ICsxOTUyLDggQEAKIAkJCQk5QkYwMDEzNDI2N0M0Q0NG
MDBEQ0ZCM0YgLyogQ2hlY2tlZFJlZi5oICovLAogCQkJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQz
RiAvKiBDbG9ja1R5cGUuY3BwICovLAogCQkJCTBGNjZCMjgxMURDOTdCQUIwMDRBMUQzRiAvKiBD
bG9ja1R5cGUuaCAqLywKKwkJCQlGRTlCOEIxRDI4QjFCMUM2MDA4OEM2RTEgLyogQ29kZVB0ci5j
cHAgKi8sCisJCQkJRkU5QjhCMTkyOEIxNDUzRDAwODhDNkUxIC8qIENvZGVQdHIuaCAqLywKIAkJ
CQkwRkM0RURFNTE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQcmludGVyLmggKi8sCiAJCQkJRTND
Rjc2OTAyMTE1RDZCQTAwOTFERTQ4IC8qIENvbXBhY3RQb2ludGVyVHVwbGUuaCAqLywKIAkJCQlG
RkVFNDZGMzI4MjVERjgwMDAzQkM5ODEgLyogQ29tcGFjdFB0ci5oICovLApAQCAtMjExNiw3ICsy
MTIwLDYgQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvci5j
cHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuaCAq
LywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
ICovLAotCQkJCUZFNzQ5N0VEMjA5MTYzMDYwMDAzNTY1QiAvKiBNZXRhQWxsb2NhdG9yUHRyLmgg
Ki8sCiAJCQkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuY3BwICov
LAogCQkJCTBGNjZCMjgzMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggKi8sCiAJ
CQkJRkU4MjI1MzAxQjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggKi8sCkBAIC0zMDQxLDcg
KzMwNDQsNiBAQAogCQkJCUREM0RDOTI0MjdBNEJGOEUwMDdFNUI2MSAvKiBNZXNzYWdlUXVldWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RDODgxMjdBNEJGOEUwMDdFNUI2MSAvKiBNZXRhQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlERDNEQzg3MDI3QTRCRjhFMDA3RTVCNjEgLyog
TWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJREQzREM4ODAyN0E0QkY4
RTAwN0U1QjYxIC8qIE1ldGFBbGxvY2F0b3JQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCURERjMw
NkRCMjdDMDg2NTQwMDZBNTI2RiAvKiBNZXRhZGF0YVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
REQzREM5NjgyN0E0QkY4RTAwN0U1QjYxIC8qIE1vbm90b25pY1RpbWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUREM0RDOTYyMjdBNEJGOEUwMDdFNUI2MSAvKiBOYWtlZFB0ci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMTcxLDYgKzMxNzMsNyBAQAogCQkJCUREM0RDOTk1MjdBNEJGOEUwMDdFNUI2MSAv
KiBTdGFja1BvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RDOEZFMjdBNEJGOEUwMDdF
NUI2MSAvKiBTdGFja1Nob3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RDOEExMjdBNEJGOEUw
MDdFNUI2MSAvKiBTdGFja1Nob3RQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU5QjhC
MUEyOEIxNDUzRDAwODhDNkUxIC8qIENvZGVQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RD
OTdBMjdBNEJGOEUwMDdFNUI2MSAvKiBTdGFja1N0YXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlE
RDNEQzk5QzI3QTRCRjhFMDA3RTVCNjEgLyogU3RhY2tUcmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJREQzREM5NDgyN0E0QkY4RTAwN0U1QjYxIC8qIFN0ZEZpbGVzeXN0ZW0uaCBpbiBIZWFkZXJz
ICovLApAQCAtMzYyMiw2ICszNjI1LDcgQEAKIAkJCQkwRjk1QjYzMzIwQ0I0Qjc3MDA0Nzk2MzUg
LyogRGVidWdIZWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0FFMTUxQTgyNUIwMDQx
MjNGRiAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNCMDE1MUE4MjVCMDA0
MTIzRkYgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAqLywKKwkJCQlGRTlCOEIx
RTI4QjFCMUM3MDA4OEM2RTEgLyogQ29kZVB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzNCQTE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDNE
REU5NjIwQzhCQzM3MDA3Rjc2RkEgLyogRW50aXRsZW1lbnRzLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTBERTM1RjUyMTVCQjAxNTAwQjk3OUM3IC8qIEV4dGVybmFsU3RyaW5nSW1wbC5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggNWZhNjQ0Yjg3MGU3Li43NWUzZGFh
MzhhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0zMyw2ICszMyw3IEBAIHNldChXVEZfUFVC
TElDX0hFQURFUlMKICAgICBDaGVja2VkUHRyLmgKICAgICBDaGVja2VkUmVmLmgKICAgICBDbG9j
a1R5cGUuaAorICAgIENvZGVQdHIuaAogICAgIENvbW1hUHJpbnRlci5oCiAgICAgQ29tcGFjdFBv
aW50ZXJUdXBsZS5oCiAgICAgQ29tcGFjdFB0ci5oCkBAIC0xNTgsNyArMTU5LDYgQEAgc2V0KFdU
Rl9QVUJMSUNfSEVBREVSUwogICAgIE1lc3NhZ2VRdWV1ZS5oCiAgICAgTWV0YUFsbG9jYXRvci5o
CiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZS5oCi0gICAgTWV0YUFsbG9jYXRvclB0ci5oCiAgICAg
TW9ub3RvbmljVGltZS5oCiAgICAgTmFrZWRQdHIuaAogICAgIE5ha2VkUmVmLmgKQEAgLTQxNyw2
ICs0MTcsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBCaXRWZWN0b3IuY3BwCiAgICAgQ1BVVGlt
ZS5jcHAKICAgICBDbG9ja1R5cGUuY3BwCisgICAgQ29kZVB0ci5jcHAKICAgICBDb21waWxhdGlv
blRocmVhZC5jcHAKICAgICBDb25jdXJyZW50QnVmZmVyLmNwcAogICAgIENvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ29kZVB0ci5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9Db2RlUHRyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLmMwNjYwMjVjYzA0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Nv
ZGVQdHIuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0NvZGVQ
dHIuaD4KKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsK
Kwordm9pZCBDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNz
LCB2b2lkKiBkYXRhTG9jYXRpb24sIGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQp
Cit7CisgICAgaWYgKCFleGVjdXRhYmxlQWRkcmVzcykgeworICAgICAgICBvdXQucHJpbnQobmFt
ZSwgIihudWxsKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChleGVjdXRhYmxl
QWRkcmVzcyA9PSBkYXRhTG9jYXRpb24pIHsKKyAgICAgICAgb3V0LnByaW50KG5hbWUsICIoIiwg
UmF3UG9pbnRlcihleGVjdXRhYmxlQWRkcmVzcyksICIpIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgb3V0LnByaW50KG5hbWUsICIoZXhlY3V0YWJsZSA9ICIsIFJhd1BvaW50ZXIoZXhl
Y3V0YWJsZUFkZHJlc3MpLCAiLCBkYXRhTG9jYXRpb24gPSAiLCBSYXdQb2ludGVyKGRhdGFMb2Nh
dGlvbiksICIpIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvQ29kZVB0ci5oIGIvU291cmNlL1dURi93dGYvQ29kZVB0ci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmIwZDJkOTJlYmEyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvQ29kZVB0ci5oCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvRnVuY3Rpb25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL1B0clRhZy5oPgor
CituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07Cit0ZW1wbGF0ZTxQdHJUYWcg
dGFnLCB0eXBlbmFtZSwgRnVuY3Rpb25BdHRyaWJ1dGVzPiBjbGFzcyBGdW5jdGlvblB0cjsKKwor
Ly8gQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUiBjaGVja3MgdGhhdCBwdHIgaXMgYSBub24tbnVs
bCBwb2ludGVyLCBhbmQgdGhhdCBpdCBpcyBhIHZhbGlkCisvLyBpbnN0cnVjdGlvbiBhZGRyZXNz
IG9uIHRoZSBwbGF0Zm9ybSAoZm9yIGV4YW1wbGUsIGNoZWNrIGFueSBhbGlnbm1lbnQgcmVxdWly
ZW1lbnRzKS4KKyNpZiBDUFUoQVJNX1RIVU1CMikgJiYgRU5BQkxFKEpJVCkKKy8vIEFSTSBpbnN0
cnVjdGlvbnMgbXVzdCBiZSAxNi1iaXQgYWxpZ25lZC4gVGh1bWIyIGNvZGUgcG9pbnRlcnMgdG8g
YmUgbG9hZGVkIGludG8KKy8vIGludG8gdGhlIHByb2Nlc3NvciBhcmUgZGVjb3JhdGVkIHdpdGgg
dGhlIGJvdHRvbSBiaXQgc2V0LCB3aGlsZSB0cmFkaXRpb25hbCBBUk0gaGFzCisvLyB0aGUgbG93
ZXIgYml0IGNsZWFyLiBTaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQga2luZCBvZiBwb2ludGVyLCB3
ZSBjaGVjayBmb3IgYm90aAorLy8gZGVjb3JhdGVkIGFuZCB1bmRlY29yYXRlZCBudWxsLgorI2Rl
ZmluZSBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgXAorICAgIEFTU0VSVChyZWludGVy
cHJldF9jYXN0PGludHB0cl90PihwdHIpICYgfjEpCisjZWxzZQorI2RlZmluZSBBU1NFUlRfVkFM
SURfQ09ERV9QT0lOVEVSKHB0cikgXAorICAgIEFTU0VSVChwdHIpCisjZW5kaWYKKworc3RydWN0
IENvZGVQdHJCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBXZSBuZWVkIHRvIGRlY2xhcmUgdGhpcyBp
biB0aGlzIG5vbi10ZW1wbGF0ZSBiYXNlLiBPdGhlcndpc2UsIGV2ZXJ5IHVzZSBvZgorICAgIC8v
IEFscmVhZHlUYWdnZWRWYWx1ZVRhZyB3aWxsIHJlcXVpcmUgYSBzcGVjaWFsaXplZCB0ZW1wbGF0
ZSBxdWFsaWZpY2F0aW9uLgorICAgIGVudW0gQWxyZWFkeVRhZ2dlZFZhbHVlVGFnIHsgQWxyZWFk
eVRhZ2dlZFZhbHVlIH07CisKKyAgICBzdGF0aWMgdm9pZCBkdW1wV2l0aE5hbWUodm9pZCogZXhl
Y3V0YWJsZUFkZHJlc3MsIHZvaWQqIGRhdGFMb2NhdGlvbiwgY29uc3QgY2hhciogbmFtZSwgUHJp
bnRTdHJlYW0mIG91dCk7Cit9OworCit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCBGdW5jdGlvbkF0dHJp
YnV0ZXMgYXR0ciA9IEZ1bmN0aW9uQXR0cmlidXRlczo6Tm9uZT4KK2NsYXNzIENvZGVQdHIgOiBw
dWJsaWMgQ29kZVB0ckJhc2UgeworICAgIHVzaW5nIEJhc2UgPSBDb2RlUHRyQmFzZTsKK3B1Ymxp
YzoKKyAgICB1c2luZyBVbnR5cGVkRnVuYyA9IHZvaWQoKikoKTsKKworICAgIENvZGVQdHIoKSA9
IGRlZmF1bHQ7CisgICAgQ29kZVB0cihzdGQ6Om51bGxwdHJfdCkgOiBtX3ZhbHVlKG51bGxwdHIp
IHsgfQorCisgICAgZXhwbGljaXQgQ29kZVB0cih2b2lkKiB2YWx1ZSkKKyNpZiBDUFUoQVJNX1RI
VU1CMikKKyAgICAgICAgLy8gRGVjb3JhdGUgdGhlIHBvaW50ZXIgYXMgYSB0aHVtYiBjb2RlIHBv
aW50ZXIuCisgICAgICAgIDogbV92YWx1ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2
YWx1ZSkgKyAxKQorI2Vsc2UKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorI2VuZGlmCisgICAg
eworICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8dGFnPih2YWx1ZSk7CisgICAgICAgIEFTU0VS
VCh2YWx1ZSk7CisjaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkgJiAxKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJU
X1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluPgorICAgIGNvbnN0ZXhwciBDb2RlUHRyKE91dCgqcHRy
KShJbi4uLikpCisgICAgICAgIDogbV92YWx1ZShlbmNvZGVGdW5jKHB0cikpCisgICAgeyB9CisK
Ky8vIE1TVkMgZG9lc24ndCBzZWVtIHRvIHRyZWF0IGZ1bmN0aW9ucyB3aXRoIGRpZmZlcmVudCBj
YWxsaW5nIGNvbnZlbnRpb25zIGFzCisvLyBkaWZmZXJlbnQgdHlwZXM7IHRoZXNlIG1ldGhvZHMg
YWxyZWFkeSBkZWZpbmVkIGZvciBmYXN0Y2FsbCwgYmVsb3cuCisjaWYgQ0FMTElOR19DT05WRU5U
SU9OX0lTX1NURENBTEwgJiYgIU9TKFdJTkRPV1MpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0
LCB0eXBlbmFtZS4uLiBJbj4KKyAgICBjb25zdGV4cHIgQ29kZVB0cihPdXQoQ0RFQ0wgKnB0ciko
SW4uLi4pKQorICAgICAgICA6IG1fdmFsdWUoZW5jb2RlRnVuYyhwdHIpKQorICAgIHsgfQorI2Vu
ZGlmCisKKyNpZiBDT01QSUxFUl9TVVBQT1JUUyhGQVNUQ0FMTF9DQUxMSU5HX0NPTlZFTlRJT04p
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbj4KKyAgICBjb25zdGV4
cHIgQ29kZVB0cihPdXQoRkFTVENBTEwgKnB0cikoSW4uLi4pKQorICAgICAgICA6IG1fdmFsdWUo
ZW5jb2RlRnVuYyhwdHIpKQorICAgIHsgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoSklUKQorICAg
IC8vIFRoZXNlIDIgY29uc3RydWN0b3JzIGlnbm9yZXMgdGhlIEZ1bmN0aW9uQXR0cmlidXRlcyBv
ZiB0aGUgRnVuY3Rpb25QdHIgcGFyYW1ldGVyIHdoZW4KKyAgICAvLyBjcmVhdGluZyB0aGUgRnVu
Y3Rpb25QdHIuIEluIGdlbmVyYWwsIHRoaXMgY2FuIGJlIGEgcHJvYmxlbSBvbiB4ODYgcG9ydHMg
KGVzcGVjaWFsbHkgZm9yCisgICAgLy8gV2luZG93cykuIEhvd2V2ZXIsIHRoZXNlIGNvbnN0cnVj
dG9ycyBhcmUgb25seSB1c2VkIGluIFJlcGF0Y2guY3BwIGZvciBFTkFCTEUoSklUKS4KKyAgICAv
LyBTaW5jZSB3ZSBubyBsb25nZXIgc3VwcG9ydCBFTkFCTEUoSklUKSBmb3IgeDg2LCB0aGlzIGlz
IG5vdCByZWFsbHkgYW4gaXNzdWUuCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXQsIHR5cGVu
YW1lLi4uIEluLCBGdW5jdGlvbkF0dHJpYnV0ZXMgb3RoZXJBdHRyPgorICAgIENvZGVQdHIoY29u
c3QgRnVuY3Rpb25QdHI8dGFnLCBPdXQoSW4uLi4pLCBvdGhlckF0dHI+JiBvdGhlcikKKyAgICAg
ICAgOiBDb2RlUHRyKEFscmVhZHlUYWdnZWRWYWx1ZSwgb3RoZXIudGFnZ2VkUHRyKCkpCisgICAg
eyB9CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJUYWcsIHR5cGVuYW1lIE91dCwgdHlwZW5h
bWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRlcyBvdGhlckF0dHI+CisgICAgQ29kZVB0cihjb25z
dCBGdW5jdGlvblB0cjxvdGhlclRhZywgT3V0KEluLi4uKSwgb3RoZXJBdHRyPiYgb3RoZXIpCisg
ICAgICAgIDogQ29kZVB0cihBbHJlYWR5VGFnZ2VkVmFsdWUsIG90aGVyLnRlbXBsYXRlIHJldGFn
Z2VkUHRyPHRhZz4oKSkKKyAgICB7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIENvZGVQdHIgZnJv
bVRhZ2dlZFB0cih2b2lkKiBwdHIpCisgICAgeworICAgICAgICBBU1NFUlQocHRyKTsKKyAgICAg
ICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihwdHIpOworICAgICAgICBhc3NlcnRJc1RhZ2dl
ZFdpdGg8dGFnPihwdHIpOworICAgICAgICByZXR1cm4gQ29kZVB0cihBbHJlYWR5VGFnZ2VkVmFs
dWUsIHB0cik7CisgICAgfQorCisgICAgc3RhdGljIENvZGVQdHIgZnJvbVVudGFnZ2VkUHRyKHZv
aWQqIHB0cikKKyAgICB7CisgICAgICAgIEFTU0VSVChwdHIpOworICAgICAgICBBU1NFUlRfVkFM
SURfQ09ERV9QT0lOVEVSKHB0cik7CisgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHB0cik7Cisg
ICAgICAgIHJldHVybiBDb2RlUHRyKEFscmVhZHlUYWdnZWRWYWx1ZSwgdGFnQ29kZVB0cjx0YWc+
KHB0cikpOworICAgIH0KKworICAgIHRlbXBsYXRlPFB0clRhZyBuZXdUYWc+CisgICAgQ29kZVB0
cjxuZXdUYWcsIGF0dHI+IHJldGFnZ2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV92
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBDb2RlUHRyPG5ld1RhZywgYXR0cj4oKTsKKyAgICAg
ICAgcmV0dXJuIENvZGVQdHI8bmV3VGFnLCBhdHRyPihBbHJlYWR5VGFnZ2VkVmFsdWUsIHJldGFn
Z2VkUHRyPG5ld1RhZz4oKSk7CisgICAgfQorCisgICAgY29uc3RleHByIFVudHlwZWRGdW5jIHVu
dHlwZWRGdW5jKCkgY29uc3QgeyByZXR1cm4gZGVjb2RlRnVuYyhtX3ZhbHVlKTsgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQgdGFnZ2VkUHRyKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4obV92YWx1ZSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQgdW50YWdnZWRQdHIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVudGFnQ29kZVB0cjxULCB0YWc+KG1fdmFsdWUpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPFB0clRhZyBuZXdUYWcsIHR5cGVuYW1lIFQgPSB2b2lkKj4K
KyAgICBUIHJldGFnZ2VkUHRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZXRhZ0Nv
ZGVQdHI8VCwgdGFnLCBuZXdUYWc+KG1fdmFsdWUpOworICAgIH0KKworI2lmIENQVShBUk1fVEhV
TUIyKQorICAgIC8vIFRvIHVzZSB0aGlzIHBvaW50ZXIgYXMgYSBkYXRhIGFkZHJlc3MgcmVtb3Zl
IHRoZSBkZWNvcmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KKyAgICBU
IGRhdGFMb2NhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9Q
T0lOVEVSKG1fdmFsdWUpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KG1fdmFsdWUg
PyBiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1fdmFsdWUpIC0gMSA6IG51bGxwdHIpOworICAgIH0KKyNl
bHNlCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQgZGF0YUxvY2F0aW9u
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1
ZSk7CisgICAgICAgIHJldHVybiB1bnRhZ0NvZGVQdHI8VCwgdGFnPihtX3ZhbHVlKTsKKyAgICB9
CisjZW5kaWYKKworICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhbV92YWx1ZTsKKyAgICB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICEoISp0aGlzKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
b2RlUHRyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90
aGVyLm1fdmFsdWU7CisgICAgfQorCisgICAgLy8gRGlzYWxsb3cgYW55IGNhc3Rpbmcgb3BlcmF0
aW9ucyAoZXhjZXB0IGZvciBib29sZWFucykuIEluc3RlYWQsIHRoZSBjbGllbnQKKyAgICAvLyBz
aG91bGQgYmUgYXNraW5nIHRhZ2dlZFB0cigpIGV4cGxpY2l0bHkuCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8VCwgYm9v
bD46OnZhbHVlPj4KKyAgICBvcGVyYXRvciBUKCkgPSBkZWxldGU7CisKKyAgICBDb2RlUHRyIG9w
ZXJhdG9yKyhzaXplX3Qgc2l6ZUluQnl0ZXMpIGNvbnN0IHsgcmV0dXJuIENvZGVQdHI6OmZyb21V
bnRhZ2dlZFB0cih1bnRhZ2dlZFB0cjx1aW50OF90Kj4oKSArIHNpemVJbkJ5dGVzKTsgfQorICAg
IENvZGVQdHIgb3BlcmF0b3ItKHNpemVfdCBzaXplSW5CeXRlcykgY29uc3QgeyByZXR1cm4gQ29k
ZVB0cjo6ZnJvbVVudGFnZ2VkUHRyKHVudGFnZ2VkUHRyPHVpbnQ4X3QqPigpIC0gc2l6ZUluQnl0
ZXMpOyB9CisKKyAgICBDb2RlUHRyJiBvcGVyYXRvcis9KHNpemVfdCBzaXplSW5CeXRlcykgeyBy
ZXR1cm4gKnRoaXMgPSAqdGhpcyArIHNpemVJbkJ5dGVzOyB9CisgICAgQ29kZVB0ciYgb3BlcmF0
b3ItPShzaXplX3Qgc2l6ZUluQnl0ZXMpIHsgcmV0dXJuICp0aGlzID0gKnRoaXMgLSBzaXplSW5C
eXRlczsgfQorCisgICAgdm9pZCBkdW1wV2l0aE5hbWUoY29uc3QgY2hhciogbmFtZSwgUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAg
ICAgQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZSh0YWdnZWRQdHIoKSwgZGF0YUxvY2F0aW9uKCks
IG5hbWUsIG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIENvZGVQdHJCYXNlOjpkdW1w
V2l0aE5hbWUobnVsbHB0ciwgbnVsbHB0ciwgbmFtZSwgb3V0KTsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QgeyBkdW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBv
dXQpOyB9CisKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51
bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICAKKyAgICBDb2RlUHRyKEVt
cHR5VmFsdWVUYWcpCisgICAgICAgIDogbV92YWx1ZShlbXB0eVZhbHVlKCkpCisgICAgeyB9Cisg
ICAgCisgICAgQ29kZVB0cihEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV92YWx1ZShkZWxl
dGVkVmFsdWUoKSkKKyAgICB7IH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWUgPT0gZW1wdHlWYWx1ZSgpOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gZGVsZXRlZFZhbHVlKCk7IH0KKworICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBQdHJIYXNoPHZvaWQqPjo6aGFzaChtX3Zh
bHVlKTsgfQorCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOworCitwcml2YXRlOgorICAg
IENvZGVQdHIoQWxyZWFkeVRhZ2dlZFZhbHVlVGFnLCB2b2lkKiBwdHIpCisgICAgICAgIDogbV92
YWx1ZShwdHIpCisgICAgeworICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8dGFnPihwdHIpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBlbXB0eVZhbHVlKCkgeyByZXR1cm4gYml0d2lzZV9j
YXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOyB9CisgICAgc3RhdGljIHZvaWQq
IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KDIpKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY1B0cj4KKyAgICBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdm9pZCogZW5jb2RlRnVuYyhGdW5jUHRyIHB0
cikKKyAgICB7CisgICAgICAgIC8vIE5vdGU6IHdlIGNhbm5vdCBkbyB0aGUgYXNzZXJ0IGJlZm9y
ZSB0aGlzIGNoZWNrIGJlY2F1c2UgaXQgd2lsbCBkaXNxdWFsaWZ5CisgICAgICAgIC8vIHRoaXMg
ZnVuY3Rpb24gZm9yIHVzZSBpbiBhbiBjb25zdGV4cHIgY29udGV4dCBmb3Igc29tZSB1c2UgY2Fz
ZXMuCisgICAgICAgIGlmIGNvbnN0ZXhwciAodGFnID09IENGdW5jdGlvblB0clRhZykKKyAgICAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihwdHIpOworICAgICAgICBhc3Nl
cnRJc051bGxPckNGdW5jdGlvblB0cihwdHIpOworICAgICAgICByZXR1cm4gcmV0YWdDb2RlUHRy
PHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIHRhZz4ocHRyKTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgVW50eXBlZEZ1bmMgZGVjb2RlRnVuYyh2b2lkKiBwdHIp
CisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKHRhZyA9PSBDRnVuY3Rpb25QdHJUYWcpCisg
ICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxVbnR5cGVkRnVuYz4ocHRyKTsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSByZXRhZ0NvZGVQdHI8VW50eXBlZEZ1bmMsIHRhZywgQ0Z1bmN0
aW9uUHRyVGFnPihwdHIpOworICAgICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0cihyZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQqIG1fdmFsdWUg
eyBudWxscHRyIH07CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcsIEZ1bmN0aW9uQXR0cmlidXRlcz4g
ZnJpZW5kIGNsYXNzIENvZGVQdHI7Cit9OworCit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCBGdW5jdGlv
bkF0dHJpYnV0ZXMgYXR0cj4KK3N0cnVjdCBDb2RlUHRySGFzaCB7CisgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgQ29kZVB0cjx0YWcsIGF0dHI+JiBwdHIpIHsgcmV0dXJuIHB0ci5oYXNo
KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb2RlUHRyPHRhZywgYXR0cj4mIGEs
IGNvbnN0IENvZGVQdHI8dGFnLCBhdHRyPiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09
IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCBGdW5jdGlvbkF0dHJpYnV0ZXMgYXR0cj4K
K3N0cnVjdCBEZWZhdWx0SGFzaDxDb2RlUHRyPHRhZywgYXR0cj4+IDogQ29kZVB0ckhhc2g8dGFn
LCBhdHRyPiB7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwor
dGVtcGxhdGU8UHRyVGFnIHRhZywgRnVuY3Rpb25BdHRyaWJ1dGVzIGF0dHI+CitzdHJ1Y3QgSGFz
aFRyYWl0czxDb2RlUHRyPHRhZywgYXR0cj4+IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8Q29k
ZVB0cjx0YWcsIGF0dHI+PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OkNvZGVQdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GdW5jdGlvblB0ci5oIGIvU291
cmNlL1dURi93dGYvRnVuY3Rpb25QdHIuaAppbmRleCAyNjYwMDgwMGFhMDUuLjU4NDE5OGEzZTJl
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRnVuY3Rpb25QdHIuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9GdW5jdGlvblB0ci5oCkBAIC00NSw3ICs0NSw3IEBAIGVudW0gY2xhc3MgRnVuY3Rp
b25BdHRyaWJ1dGVzIHsKICAgICBKU0NIb3N0Q2FsbCwgLy8gSlNDX0hPU1RfQ0FMTF9BVFRSSUJV
VEVTCiB9OwogCi10ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSwgRnVuY3Rpb25BdHRyaWJ1
dGVzID0gRnVuY3Rpb25BdHRyaWJ1dGVzOjpOb25lPiBjbGFzcyBUeXBlZEZ1bmN0aW9uUHRyOwor
dGVtcGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUsIEZ1bmN0aW9uQXR0cmlidXRlcyA9IEZ1bmN0
aW9uQXR0cmlidXRlczo6Tm9uZT4gY2xhc3MgRnVuY3Rpb25QdHI7CiAKIHRlbXBsYXRlPEZ1bmN0
aW9uQXR0cmlidXRlcywgdHlwZW5hbWU+IHN0cnVjdCBGdW5jdGlvbkNhbGxDb252ZW50aW9uOwog
CkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBGdW5jdGlvbkNhbGxDb252ZW50aW9uPEZ1bmN0aW9u
QXR0cmlidXRlczo6SlNDSG9zdENhbGwsIE91dChJbi4uLik+IHsKIH07CiAKIAotY2xhc3MgVHlw
ZWRGdW5jdGlvblB0ckJhc2UgeworY2xhc3MgRnVuY3Rpb25QdHJCYXNlIHsKIHB1YmxpYzoKICAg
ICAvLyBXZSBuZWVkIHRvIGRlY2xhcmUgdGhpcyBpbiB0aGlzIG5vbi10ZW1wbGF0ZSBiYXNlLiBP
dGhlcndpc2UsIGV2ZXJ5IHVzZSBvZgogICAgIC8vIEFscmVhZHlUYWdnZWRWYWx1ZVRhZyB3aWxs
IHJlcXVpcmUgYSBzcGVjaWFsaXplZCB0ZW1wbGF0ZSBxdWFsaWZpY2F0aW9uLgpAQCAtNzMsMjcg
KzczLDI3IEBAIHB1YmxpYzoKIH07CiAKIHRlbXBsYXRlPFB0clRhZyB0YWcsIHR5cGVuYW1lIE91
dCwgdHlwZW5hbWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRlcyBhdHRyPgotY2xhc3MgVHlwZWRG
dW5jdGlvblB0cjx0YWcsIE91dChJbi4uLiksIGF0dHI+IDogcHVibGljIFR5cGVkRnVuY3Rpb25Q
dHJCYXNlIHsKK2NsYXNzIEZ1bmN0aW9uUHRyPHRhZywgT3V0KEluLi4uKSwgYXR0cj4gOiBwdWJs
aWMgRnVuY3Rpb25QdHJCYXNlIHsKIHB1YmxpYzoKICAgICB1c2luZyBQdHIgPSB0eXBlbmFtZSBG
dW5jdGlvbkNhbGxDb252ZW50aW9uPGF0dHIsIE91dChJbi4uLik+OjpUeXBlOwogCi0gICAgY29u
c3RleHByIFR5cGVkRnVuY3Rpb25QdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQotICAgIGNvbnN0
ZXhwciBUeXBlZEZ1bmN0aW9uUHRyKHN0ZDo6bnVsbHB0cl90KSA6IG1fcHRyKG51bGxwdHIpIHsg
fQorICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cigpIDogbV9wdHIobnVsbHB0cikgeyB9CisgICAg
Y29uc3RleHByIEZ1bmN0aW9uUHRyKHN0ZDo6bnVsbHB0cl90KSA6IG1fcHRyKG51bGxwdHIpIHsg
fQogCi0gICAgY29uc3RleHByIFR5cGVkRnVuY3Rpb25QdHIoT3V0KCpwdHIpKEluLi4uKSkKKyAg
ICBjb25zdGV4cHIgRnVuY3Rpb25QdHIoT3V0KCpwdHIpKEluLi4uKSkKICAgICAgICAgOiBtX3B0
cihlbmNvZGUocHRyKSkKICAgICB7IH0KIAogLy8gTVNWQyBkb2Vzbid0IHNlZW0gdG8gdHJlYXQg
ZnVuY3Rpb25zIHdpdGggZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnMgYXMKIC8vIGRpZmZl
cmVudCB0eXBlczsgdGhlc2UgbWV0aG9kcyBhbHJlYWR5IGRlZmluZWQgZm9yIGZhc3RjYWxsLCBi
ZWxvdy4KICNpZiBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTCAmJiAhT1MoV0lORE9XUykK
LSAgICBjb25zdGV4cHIgVHlwZWRGdW5jdGlvblB0cihPdXQoQ0RFQ0wgKnB0cikoSW4uLi4pKQor
ICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cihPdXQoQ0RFQ0wgKnB0cikoSW4uLi4pKQogICAgICAg
ICA6IG1fcHRyKGVuY29kZShwdHIpKQogICAgIHsgfQogI2VuZGlmCiAKICNpZiBDT01QSUxFUl9T
VVBQT1JUUyhGQVNUQ0FMTF9DQUxMSU5HX0NPTlZFTlRJT04pCi0gICAgY29uc3RleHByIFR5cGVk
RnVuY3Rpb25QdHIoT3V0KEZBU1RDQUxMICpwdHIpKEluLi4uKSkKKyAgICBjb25zdGV4cHIgRnVu
Y3Rpb25QdHIoT3V0KEZBU1RDQUxMICpwdHIpKEluLi4uKSkKICAgICAgICAgOiBtX3B0cihlbmNv
ZGUocHRyKSkKICAgICB7IH0KICNlbmRpZgpAQCAtMTA3LDUwICsxMDcsNTAgQEAgcHVibGljOgog
ICAgIGNvbnN0ZXhwciBQdHIgZ2V0KCkgY29uc3QgeyByZXR1cm4gZGVjb2RlKG1fcHRyKTsgfQog
CiAgICAgdGVtcGxhdGU8UHRyVGFnIG90aGVyVGFnPgotICAgIFR5cGVkRnVuY3Rpb25QdHI8b3Ro
ZXJUYWcsIE91dChJbi4uLiksIGF0dHI+IHJldGFnZ2VkKCkgY29uc3QKKyAgICBGdW5jdGlvblB0
cjxvdGhlclRhZywgT3V0KEluLi4uKSwgYXR0cj4gcmV0YWdnZWQoKSBjb25zdAogICAgIHsKICAg
ICAgICAgc3RhdGljX2Fzc2VydCh0YWcgIT0gb3RoZXJUYWcpOwotICAgICAgICByZXR1cm4gVHlw
ZWRGdW5jdGlvblB0cjxvdGhlclRhZywgT3V0KEluLi4uKSwgYXR0cj4oQWxyZWFkeVRhZ2dlZFZh
bHVlLCByZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPG90aGVyVGFnPigpKTsKKyAgICAgICAgcmV0
dXJuIEZ1bmN0aW9uUHRyPG90aGVyVGFnLCBPdXQoSW4uLi4pLCBhdHRyPihBbHJlYWR5VGFnZ2Vk
VmFsdWUsIHJldGFnZ2VkUHRyPG90aGVyVGFnPigpKTsKICAgICB9CiAKLSAgICBjb25zdGV4cHIg
dm9pZCogZXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihtX3B0cik7IH0KKyAgICBjb25zdGV4cHIgdm9pZCogdGFnZ2VkUHRyKCkgY29uc3Qg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9wdHIpOyB9CiAKICAgICB0ZW1wbGF0
ZTxQdHJUYWcgbmV3VGFnPgotICAgIHZvaWQqIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSBj
b25zdAorICAgIHZvaWQqIHJldGFnZ2VkUHRyKCkgY29uc3QKICAgICB7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQodGFnICE9IG5ld1RhZyk7CiAgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8dm9p
ZCosIHRhZywgbmV3VGFnPihtX3B0cik7CiAgICAgfQogCi0gICAgdm9pZCogdW50YWdnZWRFeGVj
dXRhYmxlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIHVudGFnQ29kZVB0cjx2b2lkKiwgdGFnPiht
X3B0cik7IH0KKyAgICB2b2lkKiB1bnRhZ2dlZFB0cigpIGNvbnN0IHsgcmV0dXJuIHVudGFnQ29k
ZVB0cjx2b2lkKiwgdGFnPihtX3B0cik7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fcHRyOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhbV9wdHI7IH0KIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUeXBlZEZ1bmN0
aW9uUHRyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0gb3RoZXIubV9wdHI7IH0KLSAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgVHlwZWRGdW5jdGlvblB0ciYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIG1fcHRyICE9IG90aGVyLm1fcHRyOyB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZ1bmN0aW9uUHRyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0gb3RoZXIubV9wdHI7
IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX3B0ciAhPSBvdGhlci5tX3B0cjsgfQogCi0gICAgVHlwZWRGdW5jdGlvblB0ciYg
b3BlcmF0b3I9KFB0ciBwdHIpCisgICAgRnVuY3Rpb25QdHImIG9wZXJhdG9yPShQdHIgcHRyKQog
ICAgIHsKICAgICAgICAgbV9wdHIgPSBlbmNvZGUocHRyKTsKICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRhZz4KLSAgICBUeXBlZEZ1bmN0
aW9uUHRyJiBvcGVyYXRvcj0oY29uc3QgVHlwZWRGdW5jdGlvblB0cjxvdGhlclRhZywgT3V0KElu
Li4uKSwgYXR0cj4mIG90aGVyKQorICAgIEZ1bmN0aW9uUHRyJiBvcGVyYXRvcj0oY29uc3QgRnVu
Y3Rpb25QdHI8b3RoZXJUYWcsIE91dChJbi4uLiksIGF0dHI+JiBvdGhlcikKICAgICB7CiAgICAg
ICAgIG1fcHRyID0gZW5jb2RlKG90aGVyLmdldCgpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIH0KIAotICAgIFR5cGVkRnVuY3Rpb25QdHImIG9wZXJhdG9yPShzdGQ6Om51bGxwdHJfdCkK
KyAgICBGdW5jdGlvblB0ciYgb3BlcmF0b3I9KHN0ZDo6bnVsbHB0cl90KQogICAgIHsKICAgICAg
ICAgbV9wdHIgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiBwcm90
ZWN0ZWQ6Ci0gICAgVHlwZWRGdW5jdGlvblB0cihBbHJlYWR5VGFnZ2VkVmFsdWVUYWcsIHZvaWQq
IHB0cikKKyAgICBGdW5jdGlvblB0cihBbHJlYWR5VGFnZ2VkVmFsdWVUYWcsIHZvaWQqIHB0cikK
ICAgICAgICAgOiBtX3B0cihiaXR3aXNlX2Nhc3Q8UHRyPihwdHIpKQogICAgIHsKICAgICAgICAg
YXNzZXJ0SXNOdWxsT3JUYWdnZWRXaXRoPHRhZz4ocHRyKTsKQEAgLTE3NywxMDEgKzE3NywyNSBA
QCBwcm90ZWN0ZWQ6CiAKICAgICBQdHIgbV9wdHI7CiAKLSAgICB0ZW1wbGF0ZTxQdHJUYWcsIHR5
cGVuYW1lLCBGdW5jdGlvbkF0dHJpYnV0ZXM+IGZyaWVuZCBjbGFzcyBUeXBlZEZ1bmN0aW9uUHRy
OworICAgIHRlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUsIEZ1bmN0aW9uQXR0cmlidXRlcz4gZnJp
ZW5kIGNsYXNzIEZ1bmN0aW9uUHRyOwogfTsKIAotc3RhdGljX2Fzc2VydChzaXplb2YoVHlwZWRG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWcsIHZvaWQoKT4pID09IHNpemVvZih2b2lkKikpOwor
c3RhdGljX2Fzc2VydChzaXplb2YoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnLCB2b2lkKCk+
KSA9PSBzaXplb2Yodm9pZCopKTsKICNpZiBDT01QSUxFUl9TVVBQT1JUUyhCVUlMVElOX0lTX1RS
SVZJQUxMWV9DT1BZQUJMRSkKLXN0YXRpY19hc3NlcnQoX19pc190cml2aWFsbHlfY29weWFibGUo
VHlwZWRGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWcsIHZvaWQoKT4pKTsKK3N0YXRpY19hc3Nl
cnQoX19pc190cml2aWFsbHlfY29weWFibGUoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnLCB2
b2lkKCk+KSk7CiAjZW5kaWYKIAotCi10ZW1wbGF0ZTxQdHJUYWcgdGFnLCBGdW5jdGlvbkF0dHJp
YnV0ZXMgYXR0ciA9IEZ1bmN0aW9uQXR0cmlidXRlczo6Tm9uZT4KLWNsYXNzIEZ1bmN0aW9uUHRy
IDogcHVibGljIFR5cGVkRnVuY3Rpb25QdHI8dGFnLCB2b2lkKCksIGF0dHI+IHsKLSAgICB1c2lu
ZyBCYXNlID0gVHlwZWRGdW5jdGlvblB0cjx0YWcsIHZvaWQoKT47Ci0gICAgdXNpbmcgUHRyVHlw
ZSA9IHZvaWQoKikoKTsKLSAgICB1c2luZyBUeXBlZEZ1bmN0aW9uUHRyQmFzZTo6QWxyZWFkeVRh
Z2dlZFZhbHVlOwotcHVibGljOgotICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cigpID0gZGVmYXVs
dDsKLSAgICBjb25zdGV4cHIgRnVuY3Rpb25QdHIoc3RkOjpudWxscHRyX3QpIDogQmFzZShudWxs
cHRyKSB7IH0KLQotICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cih2b2lkKiBwdHIpCi0gICAgICAg
IDogQmFzZShyZWludGVycHJldF9jYXN0PFB0clR5cGU+KHB0cikpCi0gICAgeyB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluPgotICAgIGNvbnN0ZXhwciBGdW5j
dGlvblB0cihPdXQoKnB0cikoSW4uLi4pKQotICAgICAgICA6IEJhc2UocmVpbnRlcnByZXRfY2Fz
dDxQdHJUeXBlPihwdHIpKQotICAgIHsgfQotCi0vLyBNU1ZDIGRvZXNuJ3Qgc2VlbSB0byB0cmVh
dCBmdW5jdGlvbnMgd2l0aCBkaWZmZXJlbnQgY2FsbGluZyBjb252ZW50aW9ucyBhcwotLy8gZGlm
ZmVyZW50IHR5cGVzOyB0aGVzZSBtZXRob2RzIGFscmVhZHkgZGVmaW5lZCBmb3IgZmFzdGNhbGws
IGJlbG93LgotI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMICYmICFPUyhXSU5ET1dT
KQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE91dCwgdHlwZW5hbWUuLi4gSW4+Ci0gICAgY29uc3Rl
eHByIEZ1bmN0aW9uUHRyKE91dChDREVDTCAqcHRyKShJbi4uLikpCi0gICAgICAgIDogQmFzZShy
ZWludGVycHJldF9jYXN0PFB0clR5cGU+KHB0cikpCi0gICAgeyB9Ci0jZW5kaWYKLQotI2lmIENP
TVBJTEVSX1NVUFBPUlRTKEZBU1RDQUxMX0NBTExJTkdfQ09OVkVOVElPTikKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluPgotICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0
cihPdXQoRkFTVENBTEwgKnB0cikoSW4uLi4pKQotICAgICAgICA6IEJhc2UocmVpbnRlcnByZXRf
Y2FzdDxQdHJUeXBlPihwdHIpKQotICAgIHsgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoSklUKQot
ICAgIC8vIFRoZXNlIDIgY29uc3RydWN0b3JzIGlnbm9yZXMgdGhlIEZ1bmN0aW9uQXR0cmlidXRl
cyBvZiB0aGUgVHlwZWRGdW5jdGlvblB0ciBwYXJhbWV0ZXIgd2hlbgotICAgIC8vIGNyZWF0aW5n
IHRoZSBGdW5jdGlvblB0ci4gSW4gZ2VuZXJhbCwgdGhpcyBjYW4gYmUgYSBwcm9ibGVtIG9uIHg4
NiBwb3J0cyAoZXNwZWNpYWxseSBmb3IKLSAgICAvLyBXaW5kb3dzKS4gSG93ZXZlciwgdGhlc2Ug
Y29uc3RydWN0b3JzIGFyZSBvbmx5IHVzZWQgaW4gUmVwYXRjaC5jcHAgZm9yIEVOQUJMRShKSVQp
LgotICAgIC8vIFNpbmNlIHdlIG5vIGxvbmdlciBzdXBwb3J0IEVOQUJMRShKSVQpIGZvciB4ODYs
IHRoaXMgaXMgbm90IHJlYWxseSBhbiBpc3N1ZS4KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE91
dCwgdHlwZW5hbWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRlcyBvdGhlckF0dHI+Ci0gICAgRnVu
Y3Rpb25QdHIoY29uc3QgVHlwZWRGdW5jdGlvblB0cjx0YWcsIE91dChJbi4uLiksIG90aGVyQXR0
cj4mIG90aGVyKQotICAgICAgICA6IEJhc2UoQWxyZWFkeVRhZ2dlZFZhbHVlLCBvdGhlci5leGVj
dXRhYmxlQWRkcmVzcygpKQotICAgIHsgfQotCi0gICAgdGVtcGxhdGU8UHRyVGFnIG90aGVyVGFn
LCB0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluLCBGdW5jdGlvbkF0dHJpYnV0ZXMgb3RoZXJB
dHRyPgotICAgIEZ1bmN0aW9uUHRyKGNvbnN0IFR5cGVkRnVuY3Rpb25QdHI8b3RoZXJUYWcsIE91
dChJbi4uLiksIG90aGVyQXR0cj4mIG90aGVyKQotICAgICAgICA6IEJhc2UoQWxyZWFkeVRhZ2dl
ZFZhbHVlLCBvdGhlci50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPHRhZz4oKSkK
LSAgICB7IH0KLSNlbmRpZgotCi0gICAgc3RhdGljIEZ1bmN0aW9uUHRyIGZyb21BbHJlYWR5VGFn
Z2VkUG9pbnRlcih2b2lkKiBwdHIpCi0gICAgewotICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8
dGFnPihwdHIpOwotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIoQWxyZWFkeVRhZ2dlZFZhbHVl
LCBwdHIpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRhZz4KLSAgICBGdW5j
dGlvblB0cjxvdGhlclRhZz4gcmV0YWdnZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uUHRyPG90aGVyVGFnPihBbHJlYWR5VGFnZ2VkVmFsdWUsIEJhc2U6OnRlbXBsYXRl
IHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8b3RoZXJUYWc+KCkpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBGdW5jdGlvblB0cih0eXBlbmFtZSBCYXNlOjpBbHJlYWR5VGFnZ2VkVmFsdWVUYWcs
IHZvaWQqIHB0cikKLSAgICAgICAgOiBCYXNlKEFscmVhZHlUYWdnZWRWYWx1ZSwgcHRyKQotICAg
IHsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbj4KLSAgICBP
dXQgb3BlcmF0b3IoKShJbi4uLikgY29uc3QgPSBkZWxldGU7Ci0KLSAgICB0ZW1wbGF0ZTxQdHJU
YWcsIEZ1bmN0aW9uQXR0cmlidXRlcz4gZnJpZW5kIGNsYXNzIEZ1bmN0aW9uUHRyOwotfTsKLQog
dGVtcGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbiwgRnVuY3Rp
b25BdHRyaWJ1dGVzIGF0dHI+Ci1zdHJ1Y3QgRnVuY3Rpb25UcmFpdHM8VHlwZWRGdW5jdGlvblB0
cjx0YWcsIE91dChJbi4uLiksIGF0dHI+PiA6IHB1YmxpYyBGdW5jdGlvblRyYWl0czxPdXQoSW4u
Li4pPiB7CitzdHJ1Y3QgRnVuY3Rpb25UcmFpdHM8RnVuY3Rpb25QdHI8dGFnLCBPdXQoSW4uLi4p
LCBhdHRyPj4gOiBwdWJsaWMgRnVuY3Rpb25UcmFpdHM8T3V0KEluLi4uKT4gewogfTsKIAogdGVt
cGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbiwgRnVuY3Rpb25B
dHRyaWJ1dGVzIGF0dHI+Ci12b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgVHlwZWRGdW5j
dGlvblB0cjx0YWcsIE91dChJbi4uLiksIGF0dHI+JiBwdHIpCit2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgY29uc3QgRnVuY3Rpb25QdHI8dGFnLCBPdXQoSW4uLi4pLCBhdHRyPiYgcHRyKQogewot
ICAgIGFkZChoYXNoZXIsIHB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBhZGQoaGFzaGVy
LCBwdHIudGFnZ2VkUHRyKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RG
OjpGdW5jdGlvbkF0dHJpYnV0ZXM7CiB1c2luZyBXVEY6OkZ1bmN0aW9uUHRyOwotdXNpbmcgV1RG
OjpUeXBlZEZ1bmN0aW9uUHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAppbmRleCBlZWY4OWI3
N2U3YmQuLmVjOGMwMjZkZWYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKQEAgLTY4LDcg
KzY4LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IExvY2tIb2xkZXImLCBN
ZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiAgICAgICAgIE1lbW9yeVB0ciBzdGFydCA9IGhh
bmRsZS5zdGFydCgpOwogICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUuc2l6ZUlu
Qnl0ZXMoKTsKICAgICAgICAgZGVjcmVtZW50UGFnZU9jY3VwYW5jeShzdGFydC51bnRhZ2dlZFB0
cigpLCBzaXplSW5CeXRlcyk7Ci0gICAgICAgIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRs
ZShGcmVlU3BhY2VQdHIoc3RhcnQpLCBzaXplSW5CeXRlcyk7CisgICAgICAgIGFkZEZyZWVTcGFj
ZUZyb21SZWxlYXNlZEhhbmRsZShzdGFydC5yZXRhZ2dlZDxGcmVlU3BhY2VQdHJUYWc+KCksIHNp
emVJbkJ5dGVzKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoISFtX3RyYWNrZXIpKQpAQCAt
MTE0LDcgKzExNCw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCBu
ZXdTaXplSW5CeXRlcykKICAgICBpZiAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPCBmcmVlRW5k
KQogICAgICAgICBhbGxvY2F0b3IuZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJldF9j
YXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0VmFsdWUpKTsKIAotICAgIGFsbG9jYXRvci5hZGRG
cmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUoTWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlUHRyKGZy
ZWVTdGFydCksIGZyZWVTaXplKTsKKyAgICBhbGxvY2F0b3IuYWRkRnJlZVNwYWNlRnJvbVJlbGVh
c2VkSGFuZGxlKGZyZWVTdGFydC5yZXRhZ2dlZDxGcmVlU3BhY2VQdHJUYWc+KCksIGZyZWVTaXpl
KTsKIAogICAgIG1fZW5kID0gZnJlZVN0YXJ0OwogfQpAQCAtMTkwLDcgKzE5MCw3IEBAIFJlZlB0
cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBMb2Nr
SG9sZGVyJiwgc2l6ZV90IHNpCiAgICAgbV9udW1BbGxvY2F0aW9ucysrOwogI2VuZGlmCiAKLSAg
ICBhdXRvIGhhbmRsZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSgqdGhpcywg
TWVtb3J5UHRyKHN0YXJ0KSwgc2l6ZUluQnl0ZXMpKTsKKyAgICBhdXRvIGhhbmRsZSA9IGFkb3B0
UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSgqdGhpcywgc3RhcnQucmV0YWdnZWQ8SGFuZGxl
TWVtb3J5UHRyVGFnPigpLCBzaXplSW5CeXRlcykpOwogCiAgICAgaWYgKFVOTElLRUxZKCEhbV90
cmFja2VyKSkKICAgICAgICAgbV90cmFja2VyLT5ub3RpZnkoKmhhbmRsZS5wdHIoKSk7CkBAIC0y
ODksNyArMjg5LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSh2b2lk
KiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgIENvbmZpZzo6QXNzZXJ0Tm90RnJvemVu
U2NvcGUgYXNzZXJ0Tm90RnJvemVuU2NvcGU7CiAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9
OwogICAgIG1fYnl0ZXNSZXNlcnZlZCArPSBzaXplSW5CeXRlczsKLSAgICBhZGRGcmVlU3BhY2Uo
RnJlZVNwYWNlUHRyOjptYWtlRnJvbVJhd1BvaW50ZXIoc3RhcnQpLCBzaXplSW5CeXRlcyk7Cisg
ICAgYWRkRnJlZVNwYWNlKEZyZWVTcGFjZVB0cjo6ZnJvbVVudGFnZ2VkUHRyKHN0YXJ0KSwgc2l6
ZUluQnl0ZXMpOwogfQogCiBzaXplX3QgTWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXpl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaCBiL1NvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuaAppbmRleCA1ZmI3MmMyODBlZGMuLmY2ZmJlOTQ0NGRiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBNZXRhQWxsb2Nh
dG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZXRhQWxsb2NhdG9yKTsKIAogcHVibGlj
OgotICAgIHVzaW5nIEZyZWVTcGFjZVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8RnJlZVNwYWNlUHRy
VGFnPjsKKyAgICB1c2luZyBGcmVlU3BhY2VQdHIgPSBDb2RlUHRyPEZyZWVTcGFjZVB0clRhZz47
CiAgICAgdXNpbmcgTWVtb3J5UHRyID0gTWV0YUFsbG9jYXRvckhhbmRsZTo6TWVtb3J5UHRyOwog
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1ldGFBbGxvY2F0b3IoTG9jayYsIHNpemVfdCBhbGxv
Y2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaCBiL1NvdXJjZS9XVEYv
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAppbmRleCA5YjlmYjI4OTJkMDkuLjg5MDIwY2FjNjRi
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaApAQCAtMjksNyArMjksNyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9NZXRhQWxsb2NhdG9yUHRyLmg+CisjaW5jbHVkZSA8d3RmL0NvZGVQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVkQmxhY2tUcmVlLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CiAKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHUKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihNZXRhQWxsb2NhdG9ySGFu
ZGxlKTsKIAogcHVibGljOgotICAgIHVzaW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8
SGFuZGxlTWVtb3J5UHRyVGFnPjsKKyAgICB1c2luZyBNZW1vcnlQdHIgPSBDb2RlUHRyPEhhbmRs
ZU1lbW9yeVB0clRhZz47CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1ldGFBbGxvY2F0b3JI
YW5kbGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvclB0ci5o
IGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvclB0ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1NTBjMWIxZTBlODEuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9NZXRhQWxsb2NhdG9yUHRyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9QdHJUYWcu
aD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10
ZW1wbGF0ZTxQdHJUYWcgdGFnPgotY2xhc3MgTWV0YUFsbG9jYXRvclB0ciB7Ci1wdWJsaWM6Ci0g
ICAgTWV0YUFsbG9jYXRvclB0cigpID0gZGVmYXVsdDsKLSAgICBNZXRhQWxsb2NhdG9yUHRyKHN0
ZDo6bnVsbHB0cl90KSB7IH0KLQotICAgIHN0YXRpYyBNZXRhQWxsb2NhdG9yUHRyIG1ha2VGcm9t
UmF3UG9pbnRlcih2b2lkKiBwdHIpIHsgcmV0dXJuIE1ldGFBbGxvY2F0b3JQdHIocHRyKTsgfQot
Ci0gICAgdGVtcGxhdGU8UHRyVGFnIG90aGVyVGFnPgotICAgIGV4cGxpY2l0IE1ldGFBbGxvY2F0
b3JQdHIoTWV0YUFsbG9jYXRvclB0cjxvdGhlclRhZz4gb3RoZXIpCi0gICAgICAgIDogbV9wdHIo
b3RoZXIudGVtcGxhdGUgcmV0YWdnZWRQdHI8dGFnPigpKQotICAgIHsgfQotCi0gICAgZXhwbGlj
aXQgTWV0YUFsbG9jYXRvclB0cih1aW50cHRyX3QgcHRyQXNJbnQpCi0gICAgICAgIDogTWV0YUFs
bG9jYXRvclB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwdHJBc0ludCkpCi0gICAgeyB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+Ci0gICAgVCB1bnRhZ2dlZFB0cigpIGNv
bnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPih1bnRhZ0NvZGVQdHI8dGFnPihtX3B0cikpOyB9
Ci0KLSAgICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFnLCB0eXBlbmFtZSBUID0gdm9pZCo+Ci0gICAg
VCByZXRhZ2dlZFB0cigpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihyZXRhZ0NvZGVQ
dHI8dGFnLCBuZXdUYWc+KG1fcHRyKSk7IH0KLQotICAgIC8vIERpc2FsbG93IGFueSBjYXN0aW5n
IG9wZXJhdGlvbnMgKGV4Y2VwdCBmb3IgYm9vbGVhbnMpLgotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2
YWx1ZT4+Ci0gICAgb3BlcmF0b3IgVCgpID0gZGVsZXRlOwotCi0gICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9wdHI7IH0KLSAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFtX3B0cjsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KE1ldGFBbGxv
Y2F0b3JQdHIgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09IG90aGVyLm1fcHRyOyB9Ci0g
ICAgYm9vbCBvcGVyYXRvciE9KE1ldGFBbGxvY2F0b3JQdHIgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IG1fcHRyICE9IG90aGVyLm1fcHRyOyB9Ci0KLSAgICBNZXRhQWxsb2NhdG9yUHRyIG9wZXJhdG9y
KyhzaXplX3Qgc2l6ZUluQnl0ZXMpIGNvbnN0IHsgcmV0dXJuIE1ldGFBbGxvY2F0b3JQdHIodW50
YWdnZWRQdHI8dWludDhfdCo+KCkgKyBzaXplSW5CeXRlcyk7IH0KLSAgICBNZXRhQWxsb2NhdG9y
UHRyIG9wZXJhdG9yLShzaXplX3Qgc2l6ZUluQnl0ZXMpIGNvbnN0IHsgcmV0dXJuIE1ldGFBbGxv
Y2F0b3JQdHIodW50YWdnZWRQdHI8dWludDhfdCo+KCkgLSBzaXplSW5CeXRlcyk7IH0KLQotICAg
IE1ldGFBbGxvY2F0b3JQdHImIG9wZXJhdG9yKz0oc2l6ZV90IHNpemVJbkJ5dGVzKQotICAgIHsK
LSAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyBzaXplSW5CeXRlczsKLSAgICB9Ci0KLSAg
ICBNZXRhQWxsb2NhdG9yUHRyJiBvcGVyYXRvci09KHNpemVfdCBzaXplSW5CeXRlcykKLSAgICB7
Ci0gICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gc2l6ZUluQnl0ZXM7Ci0gICAgfQotCi0g
ICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OwotICAgIGVudW0gRGVsZXRlZFZh
bHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07Ci0KLSAgICBNZXRhQWxsb2NhdG9yUHRyKEVtcHR5VmFs
dWVUYWcpCi0gICAgICAgIDogbV9wdHIoZW1wdHlWYWx1ZSgpKQotICAgIHsgfQotCi0gICAgTWV0
YUFsbG9jYXRvclB0cihEZWxldGVkVmFsdWVUYWcpCi0gICAgICAgIDogbV9wdHIoZGVsZXRlZFZh
bHVlKCkpCi0gICAgeyB9Ci0KLSAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcHRyID09IGVtcHR5VmFsdWUoKTsgfQotICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3B0ciA9PSBkZWxldGVkVmFsdWUoKTsgfQotCi0gICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0IHsgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1fcHRyKTsgfQotCi1wcml2
YXRlOgotICAgIGV4cGxpY2l0IE1ldGFBbGxvY2F0b3JQdHIodm9pZCogcHRyKQotICAgICAgICA6
IG1fcHRyKHRhZ0NvZGVQdHI8dGFnPihwdHIpKQotICAgIHsKLSAgICAgICAgYXNzZXJ0SXNOb3RU
YWdnZWQocHRyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCogZW1wdHlWYWx1ZSgpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDEpOyB9Ci0gICAgc3RhdGljIHZvaWQqIGRlbGV0
ZWRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDIpOyB9Ci0KLSAgICB2
b2lkKiBtX3B0ciB7IG51bGxwdHIgfTsKLX07Ci0KLXRlbXBsYXRlPFB0clRhZyB0YWc+Ci1zdHJ1
Y3QgTWV0YUFsbG9jYXRvclB0ckhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IE1ldGFBbGxvY2F0b3JQdHI8dGFnPiYgcHRyKSB7IHJldHVybiBwdHIuaGFzaCgpOyB9Ci0gICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTWV0YUFsbG9jYXRvclB0cjx0YWc+JiBhLCBjb25zdCBN
ZXRhQWxsb2NhdG9yUHRyPHRhZz4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwot
ICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBEZWZhdWx0SGFz
aDsKLXRlbXBsYXRlPFB0clRhZyB0YWc+IHN0cnVjdCBEZWZhdWx0SGFzaDxNZXRhQWxsb2NhdG9y
UHRyPHRhZz4+IDogTWV0YUFsbG9jYXRvclB0ckhhc2g8dGFnPiB7IH07Ci0KLXRlbXBsYXRlPFB0
clRhZyB0YWc+IHN0cnVjdCBIYXNoVHJhaXRzPE1ldGFBbGxvY2F0b3JQdHI8dGFnPj4gOiBwdWJs
aWMgQ3VzdG9tSGFzaFRyYWl0czxNZXRhQWxsb2NhdG9yUHRyPHRhZz4+IHsgfTsKLQotfSAvLyBu
YW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6TWV0YUFsbG9jYXRvclB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyZDVjMmZi
ZjY2MTguLjhkZmI0NTkwYTU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgSlNET01HbG9i
YWxPYmplY3Q6OmNsZWFyRE9NR3VhcmRlZE9iamVjdHMoKSBjb25zdAogSlNGdW5jdGlvbiogSlNE
T01HbG9iYWxPYmplY3Q6OmNyZWF0ZUNyb3NzT3JpZ2luRnVuY3Rpb24oSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIE5hdGl2ZUZ1
bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgYXV0byYgdm0g
PSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIENyb3NzT3JpZ2luTWFwS2V5IGtleSA9
IHN0ZDo6bWFrZV9wYWlyKGxleGljYWxHbG9iYWxPYmplY3QsIG5hdGl2ZUZ1bmN0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIENyb3NzT3JpZ2luTWFwS2V5IGtleSA9IHN0ZDo6bWFrZV9w
YWlyKGxleGljYWxHbG9iYWxPYmplY3QsIG5hdGl2ZUZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKIAog
ICAgIC8vIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9yIG11c3Qgbm90IGludm9rZSBH
QyBzaW5jZSBHQyBjYW4gbW9kaWZ5IFdlYWtHQ01hcCBpbiB0aGUgbWlkZGxlIG9mIEhhc2hNYXA6
OmVuc3VyZS4KICAgICAvLyBXZSB1c2UgRGVmZXJHQyBoZXJlICgxKSBub3QgdG8gaW52b2tlIEdD
IHdoZW4gZXhlY3V0aW5nIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUgYW5kICgyKSB0byBhdm9pZCBs
b29raW5nIHVwIEhhc2hNYXAgdHdpY2UuCkBAIC0zNjcsNyArMzY3LDcgQEAgR2V0dGVyU2V0dGVy
KiBKU0RPTUdsb2JhbE9iamVjdDo6Y3JlYXRlQ3Jvc3NPcmlnaW5HZXR0ZXJTZXR0ZXIoSlNHbG9i
YWxPYmplY3QqIGwKIHsKICAgICBBU1NFUlQoZ2V0dGVyIHx8IHNldHRlcik7CiAgICAgYXV0byYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIENyb3NzT3JpZ2luTWFwS2V5IGtl
eSA9IHN0ZDo6bWFrZV9wYWlyKGxleGljYWxHbG9iYWxPYmplY3QsIGdldHRlciA/IGdldHRlci5l
eGVjdXRhYmxlQWRkcmVzcygpIDogc2V0dGVyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIENy
b3NzT3JpZ2luTWFwS2V5IGtleSA9IHN0ZDo6bWFrZV9wYWlyKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdldHRlciA/IGdldHRlci50YWdnZWRQdHIoKSA6IHNldHRlci50YWdnZWRQdHIoKSk7CiAKICAg
ICAvLyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5vdCBpbnZva2UgR0Mg
c2luY2UgR0MgY2FuIG1vZGlmeSBXZWFrR0NNYXAgaW4gdGhlIG1pZGRsZSBvZiBIYXNoTWFwOjpl
bnN1cmUuCiAgICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRvIGludm9rZSBHQyB3
aGVuIGV4ZWN1dGluZyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIGFuZCAoMikgdG8gYXZvaWQgbG9v
a2luZyB1cCBIYXNoTWFwIHR3aWNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0
L0NvbXBpbGVkU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9Db21waWxlZFNlbGVj
dG9yLmgKaW5kZXggNzZkYmNlYWQ0MTEyLi4yZmRlZGNjYmE1ODIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9Db21waWxlZFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3Nzaml0L0NvbXBpbGVkU2VsZWN0b3IuaApAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgQ29tcGls
ZWRTZWxlY3RvciB7CiAKICAgICB+Q29tcGlsZWRTZWxlY3RvcigpCiAgICAgewotICAgICAgICBp
ZiAoY29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkKKyAgICAgICAgaWYgKGNvZGVS
ZWYuY29kZSgpLnRhZ2dlZFB0cigpKQogICAgICAgICAgICAgZGF0YUxvZ0YoIkNvbXBpbGVkU2Vs
ZWN0b3IgJWQgXCIlc1wiXG4iLCB1c2VDb3VudCwgc2VsZWN0b3ItPnNlbGVjdG9yVGV4dCgpLnV0
ZjgoKS5kYXRhKCkpOwogICAgIH0KICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3NqaXQvRnVuY3Rpb25DYWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxs
LmgKaW5kZXggOTQ4YmIxNGZjM2YxLi45MDBkOWE3NzE0YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzc2ppdC9GdW5jdGlvbkNhbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQv
RnVuY3Rpb25DYWxsLmgKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBGdW5jdGlvbkNhbGwgewogcHVibGljOgotICAgIEZ1bmN0aW9uQ2FsbChKU0M6Ok1hY3Jv
QXNzZW1ibGVyJiBhc3NlbWJsZXIsIFJlZ2lzdGVyQWxsb2NhdG9yJiByZWdpc3RlckFsbG9jYXRv
ciwgU3RhY2tBbGxvY2F0b3ImIHN0YWNrQWxsb2NhdG9yLCBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6
TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPj4s
IDMyPiYgY2FsbFJlZ2lzdHJ5KQorICAgIEZ1bmN0aW9uQ2FsbChKU0M6Ok1hY3JvQXNzZW1ibGVy
JiBhc3NlbWJsZXIsIFJlZ2lzdGVyQWxsb2NhdG9yJiByZWdpc3RlckFsbG9jYXRvciwgU3RhY2tB
bGxvY2F0b3ImIHN0YWNrQWxsb2NhdG9yLCBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OkNhbGwsIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+PiwgMzI+JiBjYWxsUmVn
aXN0cnkpCiAgICAgICAgIDogbV9hc3NlbWJsZXIoYXNzZW1ibGVyKQogICAgICAgICAsIG1fcmVn
aXN0ZXJBbGxvY2F0b3IocmVnaXN0ZXJBbGxvY2F0b3IpCiAgICAgICAgICwgbV9zdGFja0FsbG9j
YXRvcihzdGFja0FsbG9jYXRvcikKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAKLSAgICB2b2lkIHNldEZ1bmN0aW9uQWRkcmVzcyhGdW5jdGlvblB0cjxKU0M6Ok9wZXJh
dGlvblB0clRhZz4gZnVuY3Rpb25BZGRyZXNzKQorICAgIHZvaWQgc2V0RnVuY3Rpb25BZGRyZXNz
KENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGZ1bmN0aW9uQWRkcmVzcykKICAgICB7CiAg
ICAgICAgIG1fZnVuY3Rpb25BZGRyZXNzID0gZnVuY3Rpb25BZGRyZXNzOwogICAgIH0KQEAgLTEx
MCw3ICsxMTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwcmVwYXJlQW5kQ2FsbCgpCiAgICAg
ewotICAgICAgICBBU1NFUlQobV9mdW5jdGlvbkFkZHJlc3MuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgIEFTU0VSVChtX2Z1bmN0aW9uQWRkcmVzcy50YWdnZWRQdHIoKSk7CiAgICAgICAg
IEFTU0VSVCghbV9maXJzdEFyZ3VtZW50IHx8IChtX2ZpcnN0QXJndW1lbnQgJiYgIW1fc2Vjb25k
QXJndW1lbnQpIHx8IChtX2ZpcnN0QXJndW1lbnQgJiYgbV9zZWNvbmRBcmd1bWVudCkpOwogCiAg
ICAgICAgIHNhdmVBbGxvY2F0ZWRDYWxsZXJTYXZlZFJlZ2lzdGVycygpOwpAQCAtMTc5LDEyICsx
NzksMTIgQEAgcHJpdmF0ZToKICAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyJiBtX2Fzc2VtYmxlcjsK
ICAgICBSZWdpc3RlckFsbG9jYXRvciYgbV9yZWdpc3RlckFsbG9jYXRvcjsKICAgICBTdGFja0Fs
bG9jYXRvciYgbV9zdGFja0FsbG9jYXRvcjsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6TWFj
cm9Bc3NlbWJsZXI6OkNhbGwsIEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPj4sIDMy
PiYgbV9jYWxsUmVnaXN0cnk7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1i
bGVyOjpDYWxsLCBDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPj4sIDMyPiYgbV9jYWxsUmVn
aXN0cnk7CiAKICAgICBSZWdpc3RlclZlY3RvciBtX3NhdmVkUmVnaXN0ZXJzOwogICAgIFN0YWNr
QWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZVZlY3RvciBtX3NhdmVkUmVnaXN0ZXJTdGFja1JlZmVy
ZW5jZXM7CiAgICAgCi0gICAgRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IG1fZnVu
Y3Rpb25BZGRyZXNzOworICAgIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IG1fZnVuY3Rp
b25BZGRyZXNzOwogICAgIHVuc2lnbmVkIG1fYXJndW1lbnRDb3VudDsKICAgICBKU0M6Ok1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIG1fZmlyc3RBcmd1bWVudDsKICAgICBKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIG1fc2Vjb25kQXJndW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Nq
aXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggOWEzYTZhYzk4MWY2Li40YzYyMjMxMDU5ZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKQEAgLTI3Niw3
ICsyNzYsNyBAQCBzdHJ1Y3QgU2VsZWN0b3JGcmFnbWVudCB7CiAgICAgVmVjdG9yPGNvbnN0IFZl
Y3RvcjxBdG9tU3RyaW5nPio+IGxhbmd1YWdlQXJndW1lbnRzTGlzdDsKICAgICBWZWN0b3I8Y29u
c3QgQXRvbVN0cmluZ0ltcGwqLCA4PiBjbGFzc05hbWVzOwogICAgIEhhc2hTZXQ8dW5zaWduZWQ+
IHBzZXVkb0NsYXNzZXM7Ci0gICAgVmVjdG9yPEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPiwgND4gdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzOworICAgIFZlY3RvcjxDb2RlUHRyPEpT
Qzo6T3BlcmF0aW9uUHRyVGFnPiwgND4gdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzOwogICAgIFZl
Y3RvcjxBdHRyaWJ1dGVNYXRjaGluZ0luZm8sIDQ+IGF0dHJpYnV0ZXM7CiAgICAgVmVjdG9yPHN0
ZDo6cGFpcjxpbnQsIGludD4sIDI+IG50aENoaWxkRmlsdGVyczsKICAgICBWZWN0b3I8TnRoQ2hp
bGRPZlNlbGVjdG9ySW5mbz4gbnRoQ2hpbGRPZkZpbHRlcnM7CkBAIC0zNjksNyArMzY5LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKEFzc2VtYmxlcjo6SnVt
cExpc3QmIG1hdGNoaW5nVGFnTmFtZUZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpKdW1wTGlzdCYg
bWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYp
OwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50RGF0YU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAgIHZvaWQgZ2Vu
ZXJhdGVFbGVtZW50TGlua01hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNl
cywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwotICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50RnVu
Y3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEZ1bmN0aW9u
UHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPik7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRGdW5j
dGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQ29kZVB0cjxK
U0M6Ok9wZXJhdGlvblB0clRhZz4pOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNBY3RpdmUo
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50
Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KEFzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcyk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0Q2hpbGQoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsKQEAgLTM4NSw3ICszODUsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlTWF0Y2hpbmcoQXNzZW1ibGVy
OjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0
dHJpYnV0ZUFkZHJlc3MsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBkZWNJbmRleFJlZ2lzdGVyLCBj
b25zdCBBdHRyaWJ1dGVNYXRjaGluZ0luZm8mIGF0dHJpYnV0ZUluZm8pOwogICAgIHZvaWQgZ2Vu
ZXJhdGVFbGVtZW50QXR0cmlidXRlVmFsdWVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVz
cywgY29uc3QgQXR0cmlidXRlTWF0Y2hpbmdJbmZvJiBhdHRyaWJ1dGVJbmZvKTsKICAgICB2b2lk
IGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZVZhbHVlRXhhY3RNYXRjaGluZyhBc3NlbWJsZXI6Okp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmli
dXRlQWRkcmVzcywgY29uc3QgQXRvbVN0cmluZyYgZXhwZWN0ZWRWYWx1ZSwgQXR0cmlidXRlQ2Fz
ZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNpdGl2aXR5KTsKLSAgICB2b2lkIGdlbmVyYXRlRWxl
bWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFk
ZHJlc3MsIGNvbnN0IEF0b21TdHJpbmcmIGV4cGVjdGVkVmFsdWUsIEF0dHJpYnV0ZUNhc2VTZW5z
aXRpdml0eSB2YWx1ZUNhc2VTZW5zaXRpdml0eSwgRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25Q
dHJUYWc+IGNhc2VTZW5zaXRpdmVUZXN0LCBGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRh
Zz4gY2FzZUluc2Vuc2l0aXZlVGVzdCk7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1
dGVGdW5jdGlvbkNhbGxWYWx1ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25z
dCBBdG9tU3RyaW5nJiBleHBlY3RlZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkgdmFs
dWVDYXNlU2Vuc2l0aXZpdHksIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGNhc2VTZW5z
aXRpdmVUZXN0LCBDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBjYXNlSW5zZW5zaXRpdmVU
ZXN0KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEhhc1RhZ05hbWUoQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBDU1NTZWxlY3RvciYgdGFnTWF0Y2hpbmdTZWxlY3Rv
cik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRIYXNJZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWlsdXJlQ2FzZXMsIGNvbnN0IExvY2FsUmVnaXN0ZXImIGVsZW1lbnREYXRhQWRkcmVzcywgY29u
c3QgQXRvbVN0cmluZyYgaWRUb01hdGNoKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEhhc0Ns
YXNzZXMoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBMb2NhbFJlZ2lz
dGVyJiBlbGVtZW50RGF0YUFkZHJlc3MsIGNvbnN0IFZlY3Rvcjxjb25zdCBBdG9tU3RyaW5nSW1w
bCosIDg+JiBjbGFzc05hbWVzKTsKQEAgLTQzMyw3ICs0MzMsNyBAQCBwcml2YXRlOgogICAgIEFz
c2VtYmxlciBtX2Fzc2VtYmxlcjsKICAgICBSZWdpc3RlckFsbG9jYXRvciBtX3JlZ2lzdGVyQWxs
b2NhdG9yOwogICAgIFN0YWNrQWxsb2NhdG9yIG1fc3RhY2tBbGxvY2F0b3I7Ci0gICAgVmVjdG9y
PHN0ZDo6cGFpcjxBc3NlbWJsZXI6OkNhbGwsIEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPj4sIDMyPiBtX2Z1bmN0aW9uQ2FsbHM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxBc3NlbWJs
ZXI6OkNhbGwsIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+PiwgMzI+IG1fZnVuY3Rpb25D
YWxsczsKIAogICAgIFNlbGVjdG9yQ29udGV4dCBtX3NlbGVjdG9yQ29udGV4dDsKICAgICBGdW5j
dGlvblR5cGUgbV9mdW5jdGlvblR5cGU7CkBAIC04MTYsMTM4ICs4MTYsMTM4IEBAIHN0YXRpYyBp
bmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYg
c2VsZWN0b3IsIFNlbGVjCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgLy8gVW5vcHRpbWl6ZWQg
cHNldWRvIHNlbGVjdG9yLiBUaGV5IGFyZSBqdXN0IGZ1bmN0aW9uIGNhbGwgdG8gYSBzaW1wbGUg
dGVzdGluZyBmdW5jdGlvbi4KICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0F1dG9m
aWxsOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1
bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0F1dG9maWxsZWQpKTsK
KyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRy
PEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0F1dG9maWxsZWQpKTsKICAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzQXV0b2ZpbGxBbmRPYnNjdXJlZDoKLSAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uSXNBdXRvZmlsbGVkQW5kT2JzY3VyZWQpKTsKKyAgICAgICAg
ZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0F1dG9maWxsZWRBbmRPYnNjdXJlZCkpOwogICAgICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBdXRvZmlsbFN0cm9uZ1Bhc3N3b3JkOgotICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0F1dG9maWxsZWRTdHJvbmdQYXNzd29yZCkpOwor
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8
SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzQXV0b2ZpbGxlZFN0cm9uZ1Bhc3N3b3Jk
KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0F1dG9maWxsU3Ryb25nUGFzc3dvcmRW
aWV3YWJsZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVu
ZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNBdXRvZmlsbGVk
U3Ryb25nUGFzc3dvcmRWaWV3YWJsZSkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBz
ZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bklzQXV0b2ZpbGxlZFN0cm9uZ1Bhc3N3b3JkVmlld2FibGUpKTsKICAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzQ2hlY2tlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9D
bGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
SXNDaGVja2VkKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5h
cHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNDaGVja2VkKSk7
CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RlZmF1bHQ6Ci0gICAgICAgIGZyYWdtZW50
LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3MpKTsKKyAgICAgICAg
ZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRGVmYXVsdFBzZXVkb0NsYXNzKSk7CiAgICAg
ICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Rpc2FibGVkOgotICAgICAgICBmcmFnbWVudC51bm9w
dGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25NYXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNEaXNhYmxlZFBzZXVkb0NsYXNzKSk7CiAgICAgICAg
IHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0VuYWJsZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbk1hdGNoZXNFbmFibGVkUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25NYXRjaGVzRW5hYmxlZFBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVy
biBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc0RlZmluZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbklzRGVmaW5lZEVsZW1lbnQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25J
c0RlZmluZWRFbGVtZW50KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNl
bGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZvY3VzOgot
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9u
UHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRm9jdXNQc2V1ZG9DbGFz
cykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENv
ZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGb2N1c1BzZXVkb0Ns
YXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZvY3VzVmlzaWJsZToKLSAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxK
U0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0ZvY3VzVmlzaWJsZVBzZXVkb0Ns
YXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
Q29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0ZvY3VzVmlzaWJs
ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZvY3VzV2l0aGlu
OgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0
aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRm9jdXNXaXRoaW5Q
c2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGb2N1
c1dpdGhpblBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1bGxQ
YWdlTWVkaWE6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBl
bmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzTWVkaWFEb2N1
bWVudCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzTWVkaWFEb2N1bWVudCkp
OwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NJblJhbmdlOgotICAgICAgICBmcmFnbWVu
dC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25Jc0luUmFuZ2UpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25Jc0luUmFuZ2UpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxl
U2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSW5kZXRl
cm1pbmF0ZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVu
ZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0luZGV0
ZXJtaW5hdGVQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1h
dGNoZXNJbmRldGVybWluYXRlUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9u
VHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzSW52YWxpZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNJbnZh
bGlkKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
Q29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNJbnZhbGlkKSk7CiAgICAg
ICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc09wdGlvbmFsOgotICAgICAgICBmcmFnbWVudC51bm9w
dGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25Jc09wdGlvbmFsRm9ybUNvbnRyb2wpKTsKKyAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25Jc09wdGlvbmFsRm9ybUNvbnRyb2wpKTsKICAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzT3V0T2ZSYW5nZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uSXNPdXRPZlJhbmdlKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xh
c3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNPdXRP
ZlJhbmdlKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1JlYWRPbmx5OgotICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpT
Qzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzUmVhZE9ubHlQc2V1ZG9DbGFzcykp
OworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQ
dHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNSZWFkT25seVBzZXVkb0Ns
YXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1JlYWRXcml0ZToKLSAgICAgICAg
ZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6
Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKSk7
CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0
cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0Ns
YXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1JlcXVpcmVkOgotICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc1JlcXVpcmVkRm9ybUNvbnRyb2wpKTsKKyAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc1JlcXVpcmVkRm9ybUNvbnRyb2wpKTsKICAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmFsaWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbklzVmFsaWQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9D
bGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc1Zh
bGlkKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1dpbmRvd0luYWN0aXZlOgotICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRy
PEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc1dpbmRvd0luYWN0aXZlKSk7CisgICAg
ICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6
Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNXaW5kb3dJbmFjdGl2ZSkpOwogICAgICAgICBy
ZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAKICNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGdWxsU2Ny
ZWVuOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1
bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnVsbFNjcmVl
blBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nl
cy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0Z1
bGxTY3JlZW5Qc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1w
bGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGdWxs
U2NyZWVuRG9jdW1lbnQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nl
cy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNo
ZXNGdWxsU2NyZWVuRG9jdW1lbnRQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9w
dGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbk1hdGNoZXNGdWxsU2NyZWVuRG9jdW1lbnRQc2V1ZG9DbGFzcykpOwogICAgICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGdWxsU2NyZWVuQW5jZXN0b3I6Ci0gICAgICAgIGZyYWdt
ZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGdWxsU2NyZWVuQW5jZXN0b3JQc2V1ZG9DbGFz
cykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENv
ZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGdWxsU2NyZWVuQW5j
ZXN0b3JQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVT
ZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbmltYXRp
bmdGdWxsU2NyZWVuVHJhbnNpdGlvbjoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uTWF0Y2hlc0Z1bGxTY3JlZW5BbmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlvblBzZXVkb0Ns
YXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
Q29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0Z1bGxTY3JlZW5B
bmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlvblBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVy
biBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKIAogICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFNjcmVlbkNvbnRyb2xzSGlkZGVuOgotICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnVsbFNjcmVlbkNvbnRyb2xzSGlkZGVuUHNl
dWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFw
cGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnVsbFNj
cmVlbkNvbnRyb2xzSGlkZGVuUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9u
VHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUElDVFVS
RV9JTl9QSUNUVVJFX0FQSSkKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1BpY3R1
cmVJblBpY3R1cmU6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5h
cHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNQ
aWN0dXJlSW5QaWN0dXJlUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25NYXRjaGVzUGljdHVyZUluUGljdHVyZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVy
biBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKFZJREVPKQogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnV0dXJlOgotICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRy
PEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xh
c3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChD
b2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnV0dXJlQ3VlUHNl
dWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JD
aGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUGFzdDoKLSAgICAgICAg
ZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6
Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1Bhc3RDdWVQc2V1ZG9DbGFzcykpOwor
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8
SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNQYXN0Q3VlUHNldWRvQ2xhc3Mp
KTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUGxheWluZzoKLSAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1BsYXlpbmdQc2V1ZG9DbGFzcykpOworICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNQbGF5aW5nUHNldWRvQ2xhc3MpKTsKICAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUGF1c2VkOgotICAgICAgICBmcmFnbWVudC51bm9w
dGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25NYXRjaGVzUGF1c2VkUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25NYXRjaGVzUGF1c2VkUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0
dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzU2Vla2luZzoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uTWF0Y2hlc1NlZWtpbmdQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9w
dGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbk1hdGNoZXNTZWVraW5nUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzQnVmZmVyaW5nOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25NYXRjaGVzQnVmZmVyaW5nUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25NYXRjaGVzQnVmZmVyaW5nUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzU3RhbGxlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9D
bGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
TWF0Y2hlc1N0YWxsZWRQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXpl
ZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbk1hdGNoZXNTdGFsbGVkUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9u
VHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzTXV0ZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5h
cHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNN
dXRlZFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xh
c3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hl
c011dGVkUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxl
U2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVm9sdW1l
TG9ja2VkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzVm9sdW1l
TG9ja2VkUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9D
bGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRj
aGVzVm9sdW1lTG9ja2VkUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlw
ZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVRUQUNITUVO
VF9FTEVNRU5UKQogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSGFzQXR0YWNobWVu
dDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5j
dGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSGFzQXR0YWNobWVudCkpOwor
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8
SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhc0F0dGFjaG1lbnQpKTsKICAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogI2VuZGlmCiAKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc01vZGFsOgotICAgICAgICBmcmFnbWVudC51
bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25NYXRjaGVzTW9kYWxQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNNb2RhbFBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJl
dHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKIAogICAgIC8vIFRoZXNl
IHBzZXVkby1jbGFzc2VzIG9ubHkgaGF2ZSBtZWFuaW5nIHdpdGggc2Nyb2xsYmFycy4KQEAgLTMz
NzgsNyArMzM3OCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1l
bnRBdHRyaWJ1dGVWYWx1ZUV4YWN0TWF0Y2hpbmcoQXNzZW1ibGVyCiAgICAgfQogfQogCi12b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rpb25D
YWxsVmFsdWVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXRvbVN0cmlu
ZyYgZXhwZWN0ZWRWYWx1ZSwgQXR0cmlidXRlQ2FzZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNp
dGl2aXR5LCBGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4gY2FzZVNlbnNpdGl2ZVRl
c3QsIEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBjYXNlSW5zZW5zaXRpdmVUZXN0
KQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1
bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2Vz
LCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0
b21TdHJpbmcmIGV4cGVjdGVkVmFsdWUsIEF0dHJpYnV0ZUNhc2VTZW5zaXRpdml0eSB2YWx1ZUNh
c2VTZW5zaXRpdml0eSwgQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4gY2FzZVNlbnNpdGl2
ZVRlc3QsIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGNhc2VJbnNlbnNpdGl2ZVRlc3Qp
CiB7CiAgICAgTG9jYWxSZWdpc3RlcldpdGhQcmVmZXJlbmNlIGV4cGVjdGVkVmFsdWVSZWdpc3Rl
cihtX3JlZ2lzdGVyQWxsb2NhdG9yLCBKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAg
bV9hc3NlbWJsZXIubW92ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZXhwZWN0ZWRWYWx1ZS5p
bXBsKCkpLCBleHBlY3RlZFZhbHVlUmVnaXN0ZXIpOwpAQCAtMzQzNCw3ICszNDM0LDcgQEAgdm9p
ZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9u
Q2FsbFZhbHVlTWF0Y2hpbmcoQXMKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcywgRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IHRlc3RGdW5j
dGlvbikKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRGdW5jdGlv
bkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQ29kZVB0cjxKU0M6
Ok9wZXJhdGlvblB0clRhZz4gdGVzdEZ1bmN0aW9uKQogewogICAgIEFzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBlbGVtZW50QWRkcmVzcyA9IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXI7CiAgICAgRnVuY3Rp
b25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9z
dGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2Vs
ZWN0b3JDb21waWxlci5oCmluZGV4IDFiM2Q3ZjE0MDM1MS4uN2I4MWU5YzZkYmVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmgKQEAgLTU4LDEwICs1OCwxMCBAQCBp
bmxpbmUgdW5zaWduZWQgcnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlcihDb21waWxl
ZFNlbGVjdG9yJiBjb21waWxlZFNlbAogICAgIEFTU0VSVChjb21waWxlZFNlbGVjdG9yLnN0YXR1
cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpOwog
I2lmIENQVShBUk02NEUpCiAgICAgaWYgKEpTQzo6T3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAg
ICAgICByZXR1cm4gdm1FbnRyeVRvQ1NTSklUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVsZW1l
bnQpLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSksIDAsIGNvbXBpbGVkU2VsZWN0b3Iu
Y29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHJldHVybiB2bUVu
dHJ5VG9DU1NKSVQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZWxlbWVudCksIGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHZhbHVlKSwgMCwgY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS50
YWdnZWRQdHIoKSk7CiAjZW5kaWYKICAgICB1c2luZyBSdWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0
b3JDaGVja2VyID0gdW5zaWduZWQoKikoY29uc3QgRWxlbWVudCosIHVuc2lnbmVkKik7Ci0gICAg
cmV0dXJuIHVudGFnQ0Z1bmN0aW9uUHRyPFJ1bGVDb2xsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNr
ZXIsIEpTQzo6Q1NTU2VsZWN0b3JQdHJUYWc+KGNvbXBpbGVkU2VsZWN0b3IuY29kZVJlZi5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoZWxlbWVudCwgdmFsdWUpOworICAgIHJldHVybiB1bnRh
Z0NGdW5jdGlvblB0cjxSdWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyLCBKU0M6OkNT
U1NlbGVjdG9yUHRyVGFnPihjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLnRhZ2dlZFB0
cigpKShlbGVtZW50LCB2YWx1ZSk7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBxdWVyeVNlbGVjdG9y
U2ltcGxlU2VsZWN0b3JDaGVja2VyKENvbXBpbGVkU2VsZWN0b3ImIGNvbXBpbGVkU2VsZWN0b3Is
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCkBAIC02OSwxMCArNjksMTAgQEAgaW5saW5lIHVuc2ln
bmVkIHF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIoQ29tcGlsZWRTZWxlY3RvciYg
Y29tcGlsZWRTZWwKICAgICBBU1NFUlQoY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMgPT0gU2VsZWN0
b3JDb21waWxhdGlvblN0YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2VyKTsKICNpZiBDUFUoQVJN
NjRFKQogICAgIGlmIChKU0M6Ok9wdGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgcmV0dXJu
IHZtRW50cnlUb0NTU0pJVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbGVtZW50KSwgMCwgMCwg
Y29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICAgICAgcmV0dXJuIHZtRW50cnlUb0NTU0pJVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbGVt
ZW50KSwgMCwgMCwgY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS50YWdnZWRQdHIoKSk7
CiAjZW5kaWYKICAgICB1c2luZyBRdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyID0g
dW5zaWduZWQoKikoY29uc3QgRWxlbWVudCopOwotICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0
cjxRdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyLCBKU0M6OkNTU1NlbGVjdG9yUHRy
VGFnPihjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KGVsZW1lbnQpOworICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0cjxRdWVyeVNlbGVjdG9yU2lt
cGxlU2VsZWN0b3JDaGVja2VyLCBKU0M6OkNTU1NlbGVjdG9yUHRyVGFnPihjb21waWxlZFNlbGVj
dG9yLmNvZGVSZWYuY29kZSgpLnRhZ2dlZFB0cigpKShlbGVtZW50KTsKIH0KIAogaW5saW5lIHVu
c2lnbmVkIHJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KENv
bXBpbGVkU2VsZWN0b3ImIGNvbXBpbGVkU2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQs
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCogdmFs
dWUpCkBAIC04MCwxMCArODAsMTAgQEAgaW5saW5lIHVuc2lnbmVkIHJ1bGVDb2xsZWN0b3JTZWxl
Y3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KENvbXBpbGVkU2VsZWN0b3IKICAgICBBU1NF
UlQoY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6
U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk7CiAjaWYgQ1BVKEFSTTY0RSkKICAg
ICBpZiAoSlNDOjpPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgIHJldHVybiB2bUVudHJ5
VG9DU1NKSVQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZWxlbWVudCksIGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGNvbnRleHQpLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSksIGNvbXBp
bGVkU2VsZWN0b3IuY29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAg
IHJldHVybiB2bUVudHJ5VG9DU1NKSVQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZWxlbWVudCks
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvbnRleHQpLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2YWx1ZSksIGNvbXBpbGVkU2VsZWN0b3IuY29kZVJlZi5jb2RlKCkudGFnZ2VkUHRyKCkpOwog
I2VuZGlmCiAgICAgdXNpbmcgUnVsZUNvbGxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2lu
Z0NvbnRleHQgPSB1bnNpZ25lZCgqKShjb25zdCBFbGVtZW50KiwgU2VsZWN0b3JDaGVja2VyOjpD
aGVja2luZ0NvbnRleHQqLCB1bnNpZ25lZCopOwotICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0
cjxSdWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCwgSlNDOjpD
U1NTZWxlY3RvclB0clRhZz4oY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKShlbGVtZW50LCBjb250ZXh0LCB2YWx1ZSk7CisgICAgcmV0dXJuIHVudGFn
Q0Z1bmN0aW9uUHRyPFJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250
ZXh0LCBKU0M6OkNTU1NlbGVjdG9yUHRyVGFnPihjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29k
ZSgpLnRhZ2dlZFB0cigpKShlbGVtZW50LCBjb250ZXh0LCB2YWx1ZSk7CiB9CiAKIGlubGluZSB1
bnNpZ25lZCBxdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dChD
b21waWxlZFNlbGVjdG9yJiBjb21waWxlZFNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY29udGV4dCkKQEAgLTkx
LDEwICs5MSwxMCBAQCBpbmxpbmUgdW5zaWduZWQgcXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tl
cldpdGhDaGVja2luZ0NvbnRleHQoQ29tcGlsZWRTZWxlY3RvcgogICAgIEFTU0VSVChjb21waWxl
ZFNlbGVjdG9yLnN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNo
ZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKICNpZiBDUFUoQVJNNjRFKQogICAgIGlmIChKU0M6
Ok9wdGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgcmV0dXJuIHZtRW50cnlUb0NTU0pJVChi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbGVtZW50KSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
Y29udGV4dCksIDAsIGNvbXBpbGVkU2VsZWN0b3IuY29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgICAgIHJldHVybiB2bUVudHJ5VG9DU1NKSVQoYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oZWxlbWVudCksIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvbnRleHQpLCAwLCBj
b21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLnRhZ2dlZFB0cigpKTsKICNlbmRpZgogICAg
IHVzaW5nIFF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0ID0g
dW5zaWduZWQoKikoY29uc3QgRWxlbWVudCosIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tp
bmdDb250ZXh0Kik7Ci0gICAgcmV0dXJuIHVudGFnQ0Z1bmN0aW9uUHRyPFF1ZXJ5U2VsZWN0b3JT
ZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0LCBKU0M6OkNTU1NlbGVjdG9yUHRyVGFn
Pihjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGVs
ZW1lbnQsIGNvbnRleHQpOworICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0cjxRdWVyeVNlbGVj
dG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCwgSlNDOjpDU1NTZWxlY3RvclB0
clRhZz4oY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS50YWdnZWRQdHIoKSkoZWxlbWVu
dCwgY29udGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFNlbGVjdG9yQ29tcGlsZXIKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAKaW5kZXggYjkx
ZjY4ZWMwY2MxLi4zZWJlYmE4OTQ1NGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX3BhcmVudC0+YWRkaXRpb25hbFBhZ2VzSW5I
ZWFwICs9IG51bVBhZ2VzOwogICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm4gRnJlZVNw
YWNlUHRyOjptYWtlRnJvbVJhd1BvaW50ZXIocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gRnJlZVNwYWNlUHRyOjpmcm9tVW50YWdnZWRQdHIocmVzdWx0KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Cg==
</data>
<flag name="commit-queue"
          id="490565"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>461789</attachid>
            <date>2022-08-21 22:46:40 -0700</date>
            <delta_ts>2022-08-21 23:56:47 -0700</delta_ts>
            <desc>EWS testing.</desc>
            <filename>wip-codeptr5.patch</filename>
            <type>text/plain</type>
            <size>366160</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgKaW5kZXggYjgwNTg4YmE3N2Q3Li5mNDUzOWYwOTQzYTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNiBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGU+IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBl
OwogICAgIHR5cGVkZWYgQXNzZW1ibGVyVHlwZSBBc3NlbWJsZXJUeXBlX1Q7CiAKLSAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRh
Zz47CiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVJlZiA9IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjx0YWc+OwogCiAgICAgZW51bSBjbGFzcyBDUFVJRENoZWNrU3RhdGUgewpAQCAt
ODY4LDcgKzg2Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgYVRh
ZywgUHRyVGFnIGJUYWc+Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPGFUYWc+JiBhLCBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8YlRhZz4mIGIpCisgICAgc3RhdGljIHB0cmRpZmZfdCBkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoY29uc3QgQ29kZVB0cjxhVGFnPiYgYSwgY29uc3QgQ29kZVB0cjxiVGFn
PiYgYikKICAgICB7CiAgICAgICAgIHJldHVybiBiLnRlbXBsYXRlIGRhdGFMb2NhdGlvbjxwdHJk
aWZmX3Q+KCkgLSBhLnRlbXBsYXRlIGRhdGFMb2NhdGlvbjxwdHJkaWZmX3Q+KCk7CiAgICAgfQpA
QCAtODkyLDkgKzg5MSw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgotICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxh
YmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiB2YWx1ZSkKKyAgICBzdGF0aWMg
dm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBsYWJlbCwgQ29kZVB0
cjx0YWc+IHZhbHVlKQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIo
Y29kZSwgbGFiZWwsIHZhbHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBBc3NlbWJs
ZXJUeXBlOjpsaW5rUG9pbnRlcihjb2RlLCBsYWJlbCwgdmFsdWUudGFnZ2VkUHRyKCkpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC05MjIsNyArOTIxLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rVGFpbENhbGwobmVhckNhbGwuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXI6Ci0gICAgICAgICAgICBB
c3NlbWJsZXJUeXBlOjpyZWxpbmtDYWxsKG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5h
dGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVy
VHlwZTo6cmVsaW5rQ2FsbChuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udW50
YWdnZWRQdHIoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkzNiw3ICs5MzUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgTmVhckNhbGxNb2RlOjpUYWlsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+KHRhZ0NvZGVQdHI8ZGVzdFRhZz4oQXNzZW1ibGVyVHlwZTo6
cHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXBDb25jdXJyZW50bHkobmVhckNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKSkpOwogICAgICAgICBjYXNlIE5lYXJD
YWxsTW9kZTo6UmVndWxhcjoKLSAgICAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDxk
ZXN0VGFnPih0YWdDb2RlUHRyPGRlc3RUYWc+KEFzc2VtYmxlclR5cGU6OnByZXBhcmVGb3JBdG9t
aWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5h
dGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpKSk7CisgICAgICAgICAgICByZXR1cm4g
Q29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihBc3NlbWJsZXJU
eXBlOjpwcmVwYXJlRm9yQXRvbWljUmVsaW5rQ2FsbENvbmN1cnJlbnRseShuZWFyQ2FsbC5kYXRh
TG9jYXRpb24oKSwgZGVzdGluYXRpb24udW50YWdnZWRQdHIoKSkpKTsKICAgICAgICAgfQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCmluZGV4IDA3NTA0YmEwNGU1OS4u
NzNlMjVmNDk5ZjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0NvZGVMb2NhdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29k
ZUxvY2F0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Miw4ICs0Miw4IEBAIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyOwogdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRp
b25Db252ZXJ0aWJsZUxvYWQ7CiAKIC8vIFRoZSBDb2RlTG9jYXRpb24qIHR5cGVzIGFyZSBhbGwg
cHJldHR5IG11Y2ggZG8tbm90aGluZyB3cmFwcGVycyBhcm91bmQKLS8vIENvZGVQdHIgKG9yIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciwgdG8gZ2l2ZSBpdCBpdHMgZnVsbCBuYW1lKS4gIFRoZXNlCi0v
LyBjbGFzc2VzIG9ubHkgZXhpc3QgdG8gcHJvdmlkZSB0eXBlLXNhZmV0eSB3aGVuIGxpbmtpbmcg
YW5kIHBhdGNoaW5nIGNvZGUuCisvLyBDb2RlUHRyLiBUaGVzZSBjbGFzc2VzIG9ubHkgZXhpc3Qg
dG8gcHJvdmlkZSB0eXBlLXNhZmV0eSB3aGVuIGxpbmtpbmcgYW5kCisvLyBwYXRjaGluZyBjb2Rl
LgogLy8KIC8vIFRoZSBvbmUgbmV3IHBpZWNlIG9mIGZ1bmN0aW9uYWxsaXR5IGludHJvZHVjZWQg
YnkgdGhlc2UgY2xhc3NlcyBpcyB0aGUKIC8vIGFiaWxpdHkgdG8gY3JlYXRlIChvciBwdXQgYW5v
dGhlciB3YXksIHRvIHJlLWRpc2NvdmVyKSBhbm90aGVyIENvZGVMb2NhdGlvbgpAQCAtNTMsOCAr
NTMsOCBAQCB0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9h
ZDsKIC8vIG9uZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgd2Ugd2lsbCB1c2UgdGhlICpBdE9m
ZnNldCBtZXRob2RzIHByb3ZpZGVkIGJ5CiAvLyBDb2RlTG9jYXRpb25Db21tb24gdG8gZmluZCB0
aGUgb3RoZXIgcG9pbnRzIGluIHRoZSBjb2RlIHRvIG1vZGlmeS4KIHRlbXBsYXRlPFB0clRhZyB0
YWc+Ci1jbGFzcyBDb2RlTG9jYXRpb25Db21tb24gOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPHRhZz4gewotICAgIHVzaW5nIEJhc2UgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjsK
K2NsYXNzIENvZGVMb2NhdGlvbkNvbW1vbiA6IHB1YmxpYyBDb2RlUHRyPHRhZz4geworICAgIHVz
aW5nIEJhc2UgPSBDb2RlUHRyPHRhZz47CiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8UHRyVGFnIHJl
c3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb248cmVzdWx0VGFnPiBpbnN0cnVj
dGlvbkF0T2Zmc2V0KGludCBvZmZzZXQpOwogICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcg
PSB0YWc+IENvZGVMb2NhdGlvbkxhYmVsPHJlc3VsdFRhZz4gbGFiZWxBdE9mZnNldChpbnQgb2Zm
c2V0KTsKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8Q29kZUxvY2F0aW9u
Q29tbW9uPHRhZz4sIFQ+Ojp2YWx1ZT4+CiAgICAgb3BlcmF0b3IgVCgpCiAgICAgewotICAgICAg
ICByZXR1cm4gVChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHRoaXMtPmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgcmV0dXJuIFQo
Q29kZVB0cjx0YWc+Ojpmcm9tVGFnZ2VkUHRyKHRoaXMtPnRhZ2dlZFB0cigpKSk7CiAgICAgfQog
CiBwcm90ZWN0ZWQ6CkBAIC04MCw4ICs4MCw4IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQog
Ci0gICAgQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0
aW9uKQotICAgICAgICA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKQorICAg
IENvZGVMb2NhdGlvbkNvbW1vbihDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAgIDogQ29k
ZVB0cjx0YWc+KGxvY2F0aW9uKQogICAgIHsKICAgICB9CiB9OwpAQCAtOTAsMjYgKzkwLDI2IEBA
IHRlbXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbiA6IHB1
YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9u
SW5zdHJ1Y3Rpb24oKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICBleHBsaWNpdCBDb2RlTG9j
YXRpb25JbnN0cnVjdGlvbihDb2RlUHRyPHRhZz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxv
Y2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkluc3RydWN0aW9uKHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CisgICAgICAg
IDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4oQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiB9
OwogCiB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogY2xhc3MgQ29kZUxvY2F0aW9uTGFiZWwgOiBwdWJs
aWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgogICAgIENvZGVMb2NhdGlvbkxh
YmVsKCkgeyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTGFiZWwoQ29k
ZVB0cjx0YWc+IGxvY2F0aW9uKQogICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KGxv
Y2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25MYWJlbCh2b2lkKiBsb2NhdGlv
bikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+
KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1Rh
Zz4KICAgICBDb2RlTG9jYXRpb25MYWJlbDxuZXdUYWc+IHJldGFnZ2VkKCkgeyByZXR1cm4gQ29k
ZUxvY2F0aW9uTGFiZWw8bmV3VGFnPihDb2RlTG9jYXRpb25Db21tb248dGFnPjo6dGVtcGxhdGUg
cmV0YWdnZWQ8bmV3VGFnPigpKTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQq
PgotICAgIFQgdW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIENvZGVM
b2NhdGlvbkNvbW1vbjx0YWc+Ojp0ZW1wbGF0ZSB1bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPFQ+
KCk7IH0KKyAgICBUIHVudGFnZ2VkUHRyKCkgY29uc3QgeyByZXR1cm4gQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz46OnRlbXBsYXRlIHVudGFnZ2VkUHRyPFQ+KCk7IH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQgPSB2b2lkKj4KICAgICBUIGRhdGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIENv
ZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojp0ZW1wbGF0ZSBkYXRhTG9jYXRpb248VD4oKTsgfQpAQCAt
MTE5LDIzICsxMTksMjMgQEAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KIGNsYXNzIENvZGVMb2NhdGlv
bkp1bXAgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgogICAgIENv
ZGVMb2NhdGlvbkp1bXAoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkp1bXAoQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQogICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKHZvaWQq
IGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz4oQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiAKICAgICB0ZW1wbGF0ZTxQdHJU
YWcgbmV3VGFnPgotICAgIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPiByZXRhZ2dlZCgpIHsgcmV0
dXJuIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6
dGVtcGxhdGUgcmV0YWdnZWQ8bmV3VGFnPigpKTsgfQorICAgIENvZGVMb2NhdGlvbkp1bXA8bmV3
VGFnPiByZXRhZ2dlZCgpIHsgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPihDb2RlUHRy
PHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0KIH07CiAKIHRlbXBsYXRlPFB0
clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25DYWxsIDogcHVibGljIENvZGVMb2NhdGlvbkNv
bW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25DYWxsKCkgeyB9Ci0gICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlv
bikKKyAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25DYWxsKENvZGVQdHI8dGFnPiBsb2NhdGlvbikK
ICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uQ2FsbCh2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9j
YXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsg
fQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8dGFnPihsb2NhdGlv
bikpIHsgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KICAgICBDb2RlTG9jYXRpb25D
YWxsPG5ld1RhZz4gcmV0YWdnZWQoKSB7IHJldHVybiBDb2RlTG9jYXRpb25DYWxsPG5ld1RhZz4o
Q29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0K
QEAgLTE0NSwxMCArMTQ1LDEwIEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9j
YXRpb25OZWFyQ2FsbCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6
CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRp
b25OZWFyQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbiwgTmVhckNhbGxN
b2RlIGNhbGxNb2RlKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbk5lYXJDYWxsKENvZGVQdHI8
dGFnPiBsb2NhdGlvbiwgTmVhckNhbGxNb2RlIGNhbGxNb2RlKQogICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSwgbV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CiAgICAg
ZXhwbGljaXQgQ29kZUxvY2F0aW9uTmVhckNhbGwodm9pZCogbG9jYXRpb24sIE5lYXJDYWxsTW9k
ZSBjYWxsTW9kZSkKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpLCBtX2NhbGxNb2RlKGNhbGxNb2RlKSB7IH0KKyAg
ICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihDb2RlUHRyPHRhZz4obG9jYXRpb24pKSwg
bV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CiAgICAgTmVhckNhbGxNb2RlIGNhbGxNb2RlKCkgeyBy
ZXR1cm4gbV9jYWxsTW9kZTsgfQogcHJpdmF0ZToKICAgICBOZWFyQ2FsbE1vZGUgbV9jYWxsTW9k
ZSB7IE5lYXJDYWxsTW9kZTo6UmVndWxhciB9OwpAQCAtMTU4LDQwICsxNTgsNDAgQEAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KIGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVibGljIENv
ZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWwzMigpIHsgfQotICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyKENvZGVQdHI8dGFnPiBsb2NhdGlvbikKICAgICAgICAgOiBDb2RlTG9jYXRpb25D
b21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsMzIodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KKyAgICAgICAgOiBDb2Rl
TG9jYXRpb25Db21tb248dGFnPihDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KIH07CiAKIHRl
bXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IDog
cHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxDb21wYWN0KCkgeyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsQ29tcGFjdChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICBleHBs
aWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0KENvZGVQdHI8dGFnPiBsb2NhdGlvbikK
ICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCh2b2lkKiBsb2NhdGlvbikKLSAgICAg
ICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihs
b2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8
dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KIGNsYXNzIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7
CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKCkgeyB9Ci0gICAgZXhwbGlj
aXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxv
Y2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cihDb2RlUHRyPHRh
Zz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24p
IHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cih2b2lkKiBsb2NhdGlv
bikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+
KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4K
IGNsYXNzIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCA6IHB1YmxpYyBDb2RlTG9jYXRpb25D
b21tb248dGFnPiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKCkg
eyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNvbnZl
cnRpYmxlTG9hZChDb2RlUHRyPHRhZz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxvY2F0aW9u
Q29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNvbnZl
cnRpYmxlTG9hZCh2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248
dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6
IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsK
IAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuY3BwCmluZGV4IDI3NmVlNmMwOTQzOS4uNDIwN2NlMDllNzQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKQEAgLTY1
LDcgKzY1LDcgQEAgTGlua0J1ZmZlcjo6Q29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBMaW5rQnVm
ZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXAKICAgICAgICAgdmFfc3RhcnQoYXJn
TGlzdCwgZm9ybWF0KTsKICAgICAgICAgb3V0LnZwcmludGYoZm9ybWF0LCBhcmdMaXN0KTsKICAg
ICAgICAgdmFfZW5kKGFyZ0xpc3QpOwotICAgICAgICBQZXJmTG9nOjpsb2cob3V0LnRvQ1N0cmlu
ZygpLCByZXN1bHQuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Y29uc3QgdWludDhf
dCo+KCksIHJlc3VsdC5zaXplKCkpOworICAgICAgICBQZXJmTG9nOjpsb2cob3V0LnRvQ1N0cmlu
ZygpLCByZXN1bHQuY29kZSgpLnVudGFnZ2VkUHRyPGNvbnN0IHVpbnQ4X3QqPigpLCByZXN1bHQu
c2l6ZSgpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtOTAsMTQgKzkwLDE0IEBAIExpbmtCdWZmZXI6
OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERp
c2Fzc2VtYmx5SW1wCiAgICAgICAgIHZzbnByaW50ZihidWZmZXIgKyBzaXplb2YocHJlZml4KSAt
IDEsIHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7CiAgICAgICAgIG91dC5wcmlu
dGYoIiVzIiwgYnVmZmVyKTsKIAotICAgICAgICByZWdpc3RlckxhYmVsKHJlc3VsdC5jb2RlKCku
dW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLCBXVEZNb3ZlKGxhYmVsKSk7CisgICAgICAgIHJl
Z2lzdGVyTGFiZWwocmVzdWx0LmNvZGUoKS51bnRhZ2dlZFB0cigpLCBXVEZNb3ZlKGxhYmVsKSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIG91dC52cHJpbnRmKGZvcm1hdCwgYXJnTGlzdCk7CiAKICAg
ICB2YV9lbmQoYXJnTGlzdCk7CiAgICAgb3V0LnByaW50ZigiOlxuIik7CiAKLSAgICB1aW50OF90
KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRk
cmVzczx1aW50OF90Kj4oKTsKKyAgICB1aW50OF90KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlc3Vs
dC5jb2RlKCkudW50YWdnZWRQdHI8dWludDhfdCo+KCk7CiAgICAgb3V0LnByaW50ZigiICAgIENv
ZGUgYXQgWyVwLCAlcCklc1xuIiwgZXhlY3V0YWJsZUFkZHJlc3MsIGV4ZWN1dGFibGVBZGRyZXNz
ICsgcmVzdWx0LnNpemUoKSwganVzdER1bXBpbmdIZWFkZXIgPyAiLiIgOiAiOiIpOwogICAgIAog
ICAgIENTdHJpbmcgaGVhZGVyID0gb3V0LnRvQ1N0cmluZygpOwpAQCAtMTA4LDcgKzEwOCw3IEBA
IExpbmtCdWZmZXI6OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxp
emVDb2RlV2l0aERpc2Fzc2VtYmx5SW1wCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIAotICAgIHZvaWQqIGNvZGVTdGFydCA9IGVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+
KCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGNvZGVTdGFydCA9IGVu
dHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50YWdnZWRQdHIoKTsKICAgICB2b2lkKiBj
b2RlRW5kID0gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb2RlU3RhcnQpICsgc2l6ZSgpOwogCiAg
ICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSkgewpAQCAtNDY3LDcgKzQ2Nyw3IEBA
IHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVy
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlCiAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIGVmZm9ydCk7
CiAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Nv
ZGUgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9leGVjdXRhYmxl
TWVtb3J5LT5zdGFydCgpLnJldGFnZ2VkUHRyPExpbmtCdWZmZXJQdHJUYWc+KCkpOworICAgIG1f
Y29kZSA9IENvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9leGVjdXRhYmxlTWVtb3J5LT5zdGFy
dCgpLnJldGFnZ2VkUHRyPExpbmtCdWZmZXJQdHJUYWc+KCkpOwogICAgIG1fc2l6ZSA9IGluaXRp
YWxTaXplOwogICAgIG1fZGlkQWxsb2NhdGUgPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCBmOWNmM2ZmZmQwOTguLmMzY2VkNTVj
N2U3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgK
QEAgLTYwLDcgKzYwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBMaW5rQnVmZmVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShMaW5rQnVmZmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVB0ciA9IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+OwogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IHVzaW5nIENv
ZGVSZWYgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPjsKICAgICB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBMYWJlbDsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpKdW1wIEp1
bXA7CkBAIC0xMjcsNyArMTI2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0
clRhZyB0YWc+Ci0gICAgTGlua0J1ZmZlcihNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNvZGUsIHNpemVfdCBzaXplLCBQcm9maWxlIHBy
b2ZpbGUgPSBQcm9maWxlOjpVbmNhdGVnb3JpemVkLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQgPSBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZvcm1CcmFuY2hD
b21wYWN0aW9uID0gdHJ1ZSkKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fz
c2VtYmxlciwgQ29kZVB0cjx0YWc+IGNvZGUsIHNpemVfdCBzaXplLCBQcm9maWxlIHByb2ZpbGUg
PSBQcm9maWxlOjpVbmNhdGVnb3JpemVkLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0
aW9uID0gdHJ1ZSkKICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAgICAgLCBtX2RpZEFsbG9j
YXRlKGZhbHNlKQogI2lmbmRlZiBOREVCVUcKQEAgLTE3MiwxMiArMTcxLDEyIEBAIHB1YmxpYzoK
ICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19mdW5jdGlvbjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVy
PEZ1bmM+Ojp0eXBlPjo6dmFsdWU+PgogICAgIHZvaWQgbGluayhDYWxsIGNhbGwsIEZ1bmMgZnVu
Y05hbWUpCiAgICAgewotICAgICAgICBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKGZ1bmNOYW1l
KTsKKyAgICAgICAgQ29kZVB0cjx0YWc+IGZ1bmN0aW9uKGZ1bmNOYW1lKTsKICAgICAgICAgbGlu
ayhjYWxsLCBmdW5jdGlvbik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAg
ICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQorICAgIHZv
aWQgbGluayhDYWxsIGNhbGwsIENvZGVQdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAg
IEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOwogICAgICAgICBjYWxsLm1f
bGFiZWwgPSBhcHBseU9mZnNldChjYWxsLm1fbGFiZWwpOwpAQCAtMTg3LDcgKzE4Niw3IEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogICAgIHZvaWQgbGluayhDYWxsIGNhbGws
IENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbGFiZWwpCiAgICAgewotICAgICAgICBsaW5rKGNhbGws
IGxhYmVsLnRvRnVuY3Rpb25QdHIoKSk7CisgICAgICAgIGxpbmsoY2FsbCwgQ29kZVB0cjx0YWc+
KGxhYmVsKSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC00MjMs
NyArNDIyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYWxyZWFkeURpc2Fzc2VtYmxlZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX2lzVGh1bmsgeyBmYWxzZSB9OwogICAgIFByb2ZpbGUgbV9wcm9m
aWxlIHsgUHJvZmlsZTo6VW5jYXRlZ29yaXplZCB9OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CisgICAgQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFn
PiBtX2NvZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYp
Pj4+IG1fbGlua1Rhc2tzOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtC
dWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoKT4+PiBtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXgg
NGM0YTA1YWE0N2JmLi5lYTY3NjU3NjkwYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0zOTUwLDEwICszOTUw
LDEwIEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIENhbGwgY2FsbChSZWdpc3RlcklEIHRh
cmdldCwgUmVnaXN0ZXJJRCBjYWxsVGFnKSB7IHJldHVybiBVTlVTRURfUEFSQU0oY2FsbFRhZyks
IGNhbGwodGFyZ2V0LCBOb1B0clRhZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIENhbGwgY2FsbChB
ZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgY2FsbFRhZykgeyByZXR1cm4gVU5VU0VEX1BBUkFN
KGNhbGxUYWcpLCBjYWxsKGFkZHJlc3MsIE5vUHRyVGFnKTsgfQogCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3QgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBv
cGVyYXRpb24pCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3QgQ29k
ZVB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKICAgICB7CiAgICAgICAgIGF1dG8gdG1w
ID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIob3BlcmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCB0bXApOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIob3BlcmF0aW9uLnRhZ2dlZFB0cigpKSwgdG1wKTsK
ICAgICAgICAgY2FsbCh0bXAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgfQogCkBAIC00NjQxLDkg
KzQ2NDEsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRh
ZywgUHRyVGFnIGxvY2F0aW9uVGFnPgotICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+
IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCisgICAg
c3RhdGljIENvZGVQdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxs
PGxvY2F0aW9uVGFnPiBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxyZXN1bHRUYWc+KEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9j
YXRpb24oKSkpLnRvRnVuY3Rpb25QdHIoKTsKKyAgICAgICAgcmV0dXJuIENvZGVQdHI8cmVzdWx0
VGFnPihBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKTsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgpAQCAtNDcxOSwxMyArNDcxOSwxMyBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgogICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwg
Q29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBB
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQQVRD
SF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2Fs
bC5kYXRhTGFiZWxQdHJBdE9mZnNldChSRVBBVENIX09GRlNFVF9DQUxMX1RPX1BPSU5URVIpLmRh
dGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgotICAgIHN0YXRpYyB2b2lkIHJl
cGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVz
dFRhZz4gZGVzdGluYXRpb24pCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAg
IHsKLSAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0YUxvY2F0aW9uKCksIGRl
c3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBBc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9U
T19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udGFnZ2VkUHRyKCkpOwogICAg
IH0KIAogICAgIEpTQ19PUEVSQVRJT05fVkFMSURBVElPTl9NQUNST0FTU0VNQkxFUl9BUk02NF9T
VVBQT1JUKCk7CkBAIC01Mzc4LDE0ICs1Mzc4LDE0IEBAIHByb3RlY3RlZDoKICAgICBmcmllbmQg
Y2xhc3MgTGlua0J1ZmZlcjsKIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgc3RhdGlj
IHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1
bmN0aW9uKQorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwg
Q29kZVB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYgKCFjYWxsLmlzRmxhZ1Nl
dChDYWxsOjpOZWFyKSkKLSAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwg
Y2FsbC5tX2xhYmVsLmxhYmVsQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVS
KSwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtQb2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KFJFUEFUQ0hfT0ZG
U0VUX0NBTExfVE9fUE9JTlRFUiksIGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxz
ZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udW50YWdnZWRFeGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5t
X2xhYmVsLCBmdW5jdGlvbi51bnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnVudGFn
Z2VkRXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtDYWxs
KGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udW50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29sbGVjdENQVUZlYXR1cmVzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmgKaW5kZXggMmY0NTYwZDViNzdhLi43NGRjYTA4MzU1YWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yMzksMTAgKzIzOSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGwoZGF0YVRlbXBSZWdp
c3RlciwgdGFnKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlv
bihjb25zdCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlvbihjb25zdCBDb2RlUHRyPE9wZXJhdGlvblB0clRh
Zz4gb3BlcmF0aW9uKQogICAgIHsKICAgICAgICAgYXV0byB0bXAgPSBnZXRDYWNoZWREYXRhVGVt
cFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihv
cGVyYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIHRtcCk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihvcGVyYXRpb24udGFnZ2VkUHRyKCkpLCB0bXApOwogICAgICAgICBjYWxsKHRtcCwg
T3BlcmF0aW9uUHRyVGFnKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKaW5kZXggMDBiOGVkNjg5MWU0Li5m
YzdjOTIyZjk3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjMzNiw5ICsyMzM2LDkgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgQ2FsbCBjYWxs
KFJlZ2lzdGVySUQgdGFyZ2V0LCBSZWdpc3RlcklEIGNhbGxUYWcpIHsgcmV0dXJuIFVOVVNFRF9Q
QVJBTShjYWxsVGFnKSwgY2FsbCh0YXJnZXQsIE5vUHRyVGFnKTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBjYWxsVGFnKSB7IHJldHVy
biBVTlVTRURfUEFSQU0oY2FsbFRhZyksIGNhbGwoYWRkcmVzcywgTm9QdHJUYWcpOyB9CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlvbihjb25zdCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJh
dGlvbihjb25zdCBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gb3BlcmF0aW9uKQogICAgIHsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwg
YWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihvcGVyYXRp
b24udGFnZ2VkUHRyKCkpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKICAgICAgICAgY2FsbChhZGRy
ZXNzVGVtcFJlZ2lzdGVyLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIH0KIApAQCAtMjUwOSw5ICsy
NTA5LDkgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgRGF0YUxhYmVsUHRyIHN0b3JlUHRy
V2l0aFBhdGNoKEFkZHJlc3MgYWRkcmVzcykgeyByZXR1cm4gc3RvcmVQdHJXaXRoUGF0Y2goVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgYWRkcmVzcyk7IH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyBy
ZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4KLSAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVz
dWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxs
KQorICAgIHN0YXRpYyBDb2RlUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0
aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlv
blB0cjxyZXN1bHRUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihBUk12N0Fzc2VtYmxl
cjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgcmV0dXJu
IENvZGVQdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3Nl
bWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CiAgICAgfQogICAg
IAogICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI1NjQsMTMgKzI1NjQsMTMgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KICAgICBzdGF0aWMg
dm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2Nh
dGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgQVJNdjdBc3Nl
bWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFSTXY3QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwu
ZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLnRhZ2dlZFB0cigpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+Ci0gICAgc3RhdGljIHZvaWQg
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxk
ZXN0VGFnPiBkZXN0aW5hdGlvbikKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVQdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAg
ICAgewotICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlv
bigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgQVJNdjdBc3Nl
bWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udGFnZ2Vk
UHRyKCkpOwogICAgIH0KIAogcHJvdGVjdGVkOgpAQCAtMjcyMSwxNCArMjcyMSwxNCBAQCBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogCiAgICAgdGVtcGxhdGU8UHRyVGFn
IHRhZz4KLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1
bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCog
Y29kZSwgQ2FsbCBjYWxsLCBDb2RlUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBp
ZiAoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKQotICAgICAgICAgICAgQXNzZW1ibGVyOjps
aW5rUG9pbnRlcihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldCgtMiksIGZ1bmN0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rUG9pbnRl
cihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldCgtMiksIGZ1bmN0aW9uLnRhZ2dlZFB0
cigpKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAg
ICAgICAgICBBc3NlbWJsZXI6OmxpbmtUYWlsQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rVGFp
bENhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVs
LCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6
bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAgICAg
fQogCiAgICAgYm9vbCBtX21ha2VKdW1wUGF0Y2hhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCmluZGV4
IGYzNWM1NTkwODNmMC4uNjQyNWRhMGVjY2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUs
MzAgKzM1LDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ckJhc2U6OmR1bXBXaXRoTmFtZSh2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgdm9pZCogZGF0
YUxvY2F0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KQotewotICAgIGlm
ICghZXhlY3V0YWJsZUFkZHJlc3MpIHsKLSAgICAgICAgb3V0LnByaW50KG5hbWUsICIobnVsbCki
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZXhlY3V0YWJsZUFkZHJlc3MgPT0g
ZGF0YUxvY2F0aW9uKSB7Ci0gICAgICAgIG91dC5wcmludChuYW1lLCAiKCIsIFJhd1BvaW50ZXIo
ZXhlY3V0YWJsZUFkZHJlc3MpLCAiKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG91
dC5wcmludChuYW1lLCAiKGV4ZWN1dGFibGUgPSAiLCBSYXdQb2ludGVyKGV4ZWN1dGFibGVBZGRy
ZXNzKSwgIiwgZGF0YUxvY2F0aW9uID0gIiwgUmF3UG9pbnRlcihkYXRhTG9jYXRpb24pLCAiKSIp
OwotfQotCi1ib29sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6OnRyeVRvRGlzYXNzZW1ibGUo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUHRyLCBzaXplX3Qg
c2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQorYm9vbCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWZCYXNlOjp0cnlUb0Rpc2Fzc2VtYmxlKENvZGVQdHI8RGlzYXNzZW1ibHlQ
dHJUYWc+IGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3Ry
ZWFtJiBvdXQpCiB7CiAgICAgcmV0dXJuIEpTQzo6dHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBz
aXplLCBwcmVmaXgsIG91dCk7CiB9CiAKLWJvb2wgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6
dHJ5VG9EaXNhc3NlbWJsZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+
IGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgpCitib29sIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZkJhc2U6OnRyeVRvRGlzYXNzZW1ibGUoQ29kZVB0cjxEaXNhc3NlbWJseVB0
clRhZz4gY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCkKIHsKICAgICBy
ZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCBwcmVmaXgsIFdURjo6ZGF0YUZp
bGUoKSk7CiB9CiAKLUNTdHJpbmcgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNzZW1i
bHkoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUHRyLCBzaXpl
X3Qgc2l6ZSkKK0NTdHJpbmcgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNzZW1ibHko
Q29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4gY29kZVB0ciwgc2l6ZV90IHNpemUpCiB7CiAgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OwogICAgIGlmICghdHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRy
LCBzaXplLCAiIiwgb3V0KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCmluZGV4IGZjMjhmNmE3NGVmZC4uYTQ5NTI0
MmRlMDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTI3LDI2ICsyNywyMCBAQAogCiAjaW5jbHVkZSAi
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oIgogI2luY2x1ZGUgIkpTQ1B0clRhZy5oIgorI2luY2x1
ZGUgPHd0Zi9Db2RlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KLSNpbmNsdWRlIDx3
dGYvRnVuY3Rpb25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0vLyBBU1NF
UlRfVkFMSURfQ09ERV9QT0lOVEVSIGNoZWNrcyB0aGF0IHB0ciBpcyBhIG5vbi1udWxsIHBvaW50
ZXIsIGFuZCB0aGF0IGl0IGlzIGEgdmFsaWQKLS8vIGluc3RydWN0aW9uIGFkZHJlc3Mgb24gdGhl
IHBsYXRmb3JtIChmb3IgZXhhbXBsZSwgY2hlY2sgYW55IGFsaWdubWVudCByZXF1aXJlbWVudHMp
LgogI2lmIENQVShBUk1fVEhVTUIyKSAmJiBFTkFCTEUoSklUKQogLy8gQVJNIGluc3RydWN0aW9u
cyBtdXN0IGJlIDE2LWJpdCBhbGlnbmVkLiBUaHVtYjIgY29kZSBwb2ludGVycyB0byBiZSBsb2Fk
ZWQgaW50bwogLy8gaW50byB0aGUgcHJvY2Vzc29yIGFyZSBkZWNvcmF0ZWQgd2l0aCB0aGUgYm90
dG9tIGJpdCBzZXQsIHdoaWxlIHRyYWRpdGlvbmFsIEFSTSBoYXMKIC8vIHRoZSBsb3dlciBiaXQg
Y2xlYXIuIFNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCBraW5kIG9mIHBvaW50ZXIsIHdlIGNoZWNr
IGZvciBib3RoCiAvLyBkZWNvcmF0ZWQgYW5kIHVuZGVjb3JhdGVkIG51bGwuCi0jZGVmaW5lIEFT
U0VSVF9WQUxJRF9DT0RFX1BPSU5URVIocHRyKSBcCi0gICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHB0cikgJiB+MSkKICNkZWZpbmUgQVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VU
KG9mZnNldCkgXAogICAgIEFTU0VSVCghKG9mZnNldCAmIDEpKSAvLyBNdXN0IGJlIG11bHRpcGxl
IG9mIDIuCiAjZWxzZQotI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgXAot
ICAgIEFTU0VSVChwdHIpCiAjZGVmaW5lIEFTU0VSVF9WQUxJRF9DT0RFX09GRlNFVChvZmZzZXQp
IC8vIEFueXRoaW5nIGdvZXMhCiAjZW5kaWYKIApAQCAtNTcsNyArNTEsNiBAQCBlbnVtIGNsYXNz
IENvbXBpbGF0aW9uTW9kZSA6IHVpbnQ4X3Q7CiB9IC8vIG5hbWVzcGFjZSBXYXNtCiAKIGNsYXNz
IENvZGVCbG9jazsKLXRlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OwogCiBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKQEAgLTEwNSwxNjYgKzk4LDYgQEAgcHJp
dmF0ZToKICAgICBjb25zdCB2b2lkKiBtX3ZhbHVlIHsgbnVsbHB0ciB9OwogfTsKIAotLy8gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOgotLy8KLS8vIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzaG91bGQg
YmUgdXNlZCB0byB3cmFwIHBvaW50ZXJzIHRvIEpJVCBnZW5lcmF0ZWQgY29kZS4KLWNsYXNzIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgewotcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIGR1
bXBXaXRoTmFtZSh2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgdm9pZCogZGF0YUxvY2F0aW9uLCBj
b25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KTsKLX07Ci0KLS8vIEZJWE1FOiBNYWtl
IEpTQyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5qZXJpdCBmcm9tIE1ldGFBbGxvY2F0b3JQdHIu
Ci0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MTQ1Ci10ZW1w
bGF0ZTxQdHJUYWcgdGFnPgotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIDogcHJpdmF0ZSBN
YWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlIHsKLXB1YmxpYzoKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIoKSA9IGRlZmF1bHQ7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHN0ZDo6bnVsbHB0
cl90KSA6IG1fdmFsdWUobnVsbHB0cikgeyB9Ci0KLSAgICBleHBsaWNpdCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoY29uc3Qgdm9pZCogdmFsdWUpCi0jaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgICAg
IC8vIERlY29yYXRlIHRoZSBwb2ludGVyIGFzIGEgdGh1bWIgY29kZSBwb2ludGVyLgotICAgICAg
ICA6IG1fdmFsdWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpICsgMSkKLSNl
bHNlCi0gICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKLSNlbmRpZgotICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNUYWdnZWRXaXRoPHRhZz4odmFsdWUpOwotICAgICAgICBBU1NFUlQodmFsdWUpOwotI2lm
IENQVShBUk1fVEhVTUIyKQotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4odmFsdWUpICYgMSkpOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BP
SU5URVIobV92YWx1ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoY29uc3Qgdm9pZCogdmFsdWUpCi0gICAgewot
ICAgICAgICBBU1NFUlQodmFsdWUpOwotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVS
KHZhbHVlKTsKLSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPHRhZz4odmFsdWUpOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0OwotICAgICAgICByZXN1bHQubV92YWx1ZSA9
IHZhbHVlOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGV4cGxpY2l0IE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cihSZXR1cm5BZGRyZXNzUHRyIHJhKQotICAgICAgICA6IG1fdmFs
dWUocmV0YWdDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWcsIHRhZz4ocmEudmFsdWUoKSkpCi0g
ICAgewotICAgICAgICBBU1NFUlQocmEudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAgICAgQVNTRVJU
X1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxQdHJU
YWcgbmV3VGFnPgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+IHJldGFnZ2VkKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV92YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8bmV3VGFnPigpOwotICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPG5ld1RhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ2dl
ZEV4ZWN1dGFibGVBZGRyZXNzPG5ld1RhZz4oKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCA9IHZvaWQqPgotICAgIFQgZXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihtX3ZhbHVlKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+Ci0gICAgVCB1bnRhZ2dlZEV4ZWN1dGFibGVBZGRy
ZXNzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bnRhZ0NvZGVQdHI8VCwgdGFnPiht
X3ZhbHVlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFnLCB0eXBlbmFtZSBU
ID0gdm9pZCo+Ci0gICAgVCByZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8VCwgdGFnLCBuZXdUYWc+KG1fdmFsdWUpOwot
ICAgIH0KLQotI2lmIENQVShBUk1fVEhVTUIyKQotICAgIC8vIFRvIHVzZSB0aGlzIHBvaW50ZXIg
YXMgYSBkYXRhIGFkZHJlc3MgcmVtb3ZlIHRoZSBkZWNvcmF0aW9uLgotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQgPSB2b2lkKj4KLSAgICBUIGRhdGFMb2NhdGlvbigpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PFQ+KG1fdmFsdWUgPyBiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1fdmFsdWUpIC0g
MSA6IG51bGxwdHIpOwotICAgIH0KLSNlbHNlCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZv
aWQqPgotICAgIFQgZGF0YUxvY2F0aW9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9W
QUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7Ci0gICAgICAgIHJldHVybiB1bnRhZ0NvZGVQdHI8
VCwgdGFnPihtX3ZhbHVlKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhbV92YWx1ZTsKLSAgICB9Ci0gICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEoISp0aGlzKTsgfQotICAgIAotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKLSAgICB9
Ci0KLSAgICAvLyBEaXNhbGxvdyBhbnkgY2FzdGluZyBvcGVyYXRpb25zIChleGNlcHQgZm9yIGJv
b2xlYW5zKS4gSW5zdGVhZCwgdGhlIGNsaWVudAotICAgIC8vIHNob3VsZCBiZSBhc2tpbmcgZXhl
Y3V0YWJsZUFkZHJlc3MoKSBleHBsaWNpdGx5LgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2YWx1ZSAm
JiAhc3RkOjppc19zYW1lPFQsIEZ1bmN0aW9uUHRyPHRhZz4+Ojp2YWx1ZT4+Ci0gICAgb3BlcmF0
b3IgVCgpID0gZGVsZXRlOwotCi0gICAgRnVuY3Rpb25QdHI8dGFnPiB0b0Z1bmN0aW9uUHRyKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cjx0YWc+Ojpmcm9tQWxyZWFk
eVRhZ2dlZFBvaW50ZXIoZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgfQotCi0gICAgb3BlcmF0
b3IgRnVuY3Rpb25QdHI8dGFnPigpIGNvbnN0IHsgcmV0dXJuIHRvRnVuY3Rpb25QdHIoKTsgfQot
Ci0gICAgdm9pZCBkdW1wV2l0aE5hbWUoY29uc3QgY2hhciogbmFtZSwgUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX3ZhbHVlKQotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRh
dGFMb2NhdGlvbigpLCBuYW1lLCBvdXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUobnVsbHB0ciwgbnVsbHB0ciwgbmFt
ZSwgb3V0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Qg
eyBkdW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBvdXQpOyB9Ci0KLSAgICBlbnVtIEVtcHR5VmFsdWVU
YWcgeyBFbXB0eVZhbHVlIH07Ci0gICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFs
dWUgfTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoRW1wdHlWYWx1ZVRhZykKLSAg
ICAgICAgOiBtX3ZhbHVlKGVtcHR5VmFsdWUoKSkKLSAgICB7IH0KLSAgICAKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoRGVsZXRlZFZhbHVlVGFnKQotICAgICAgICA6IG1fdmFsdWUoZGVsZXRl
ZFZhbHVlKCkpCi0gICAgeyB9Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlID09IGVtcHR5VmFsdWUoKTsgfQotICAgIGJvb2wgaXNEZWxldGVkVmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID09IGRlbGV0ZWRWYWx1ZSgpOyB9Ci0KLSAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gUHRySGFzaDxjb25zdCB2b2lkKj46Omhhc2go
bV92YWx1ZSk7IH0KLQotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKLQotcHJpdmF0ZToK
LSAgICBzdGF0aWMgY29uc3Qgdm9pZCogZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIGJpdHdpc2VfY2Fz
dDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsgfQotICAgIHN0YXRpYyBjb25zdCB2
b2lkKiBkZWxldGVkVmFsdWUoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19j
YXN0PGludHB0cl90PigyKSk7IH0KLQotICAgIGNvbnN0IHZvaWQqIG1fdmFsdWUgeyBudWxscHRy
IH07Ci19OwotCi10ZW1wbGF0ZTxQdHJUYWcgdGFnPgotc3RydWN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ckhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjx0YWc+JiBwdHIpIHsgcmV0dXJuIHB0ci5oYXNoKCk7IH0KLSAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiYgYSwgY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwot
ICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwotfTsKLQogLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOgogLy8KIC8vIEEg
cmVmZXJlbmNlIHRvIGEgc2VjdGlvbiBvZiBKSVQgZ2VuZXJhdGVkIGNvZGUuICBBIENvZGVSZWYg
Y29uc2lzdHMgb2YgYQpAQCAtMjcyLDkgKzEwNSw5IEBAIHN0cnVjdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHJIYXNoIHsKIC8vIHdhcyBhbGxvY2F0ZWQuCiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWZCYXNlIHsKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4sIHNpemVfdCwgY29uc3QgY2hh
ciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsKLSAgICBzdGF0aWMgYm9vbCB0cnlUb0Rpc2Fz
c2VtYmxlKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4sIHNpemVfdCwg
Y29uc3QgY2hhciogcHJlZml4KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgQ1N0cmlu
ZyBkaXNhc3NlbWJseShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+LCBz
aXplX3QpOworICAgIHN0YXRpYyBib29sIHRyeVRvRGlzYXNzZW1ibGUoQ29kZVB0cjxEaXNhc3Nl
bWJseVB0clRhZz4sIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0
KTsKKyAgICBzdGF0aWMgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKENvZGVQdHI8RGlzYXNzZW1ibHlQ
dHJUYWc+LCBzaXplX3QsIGNvbnN0IGNoYXIqIHByZWZpeCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIENTdHJpbmcgZGlzYXNzZW1ibHkoQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4s
IHNpemVfdCk7CiB9OwogCiB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgpAQCAtMjgyLDcgKzExNSw3IEBA
IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmQmFzZSB7CiBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgcHJpdmF0ZSBiZWNhdXNlIGl0J3Mg
ZGFuZ2Vyb3VzIGVub3VnaCB0aGF0IHdlIHdhbnQgdXNlcyBvZiBpdAogICAgIC8vIHRvIGJlIGVh
c3kgdG8gZmluZCAtIGhlbmNlIHRoZSBzdGF0aWMgY3JlYXRlIG1ldGhvZCBiZWxvdy4KLSAgICBl
eHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4g
Y29kZVB0cikKKyAgICBleHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoQ29kZVB0cjx0YWc+
IGNvZGVQdHIpCiAgICAgICAgIDogbV9jb2RlUHRyKGNvZGVQdHIpCiAgICAgewogICAgICAgICBB
U1NFUlQobV9jb2RlUHRyKTsKQEAgLTMwMiw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8UHRyVGFnIG90aGVyVGFnPgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgb3BlcmF0b3I9
KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKICAg
ICB7Ci0gICAgICAgIG1fY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OjpjcmVh
dGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mob3RoZXJDb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRh
Z2dlZEV4ZWN1dGFibGVBZGRyZXNzPHRhZz4oKSk7CisgICAgICAgIG1fY29kZVB0ciA9IENvZGVQ
dHI8dGFnPjo6ZnJvbVRhZ2dlZFB0cihvdGhlckNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFn
Z2VkUHRyPHRhZz4oKSk7CiAgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG90aGVyQ29kZVJl
Zi5tX2V4ZWN1dGFibGVNZW1vcnk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0z
MTAsNyArMTQzLDcgQEAgcHVibGljOgogICAgIC8vIFVzZSB0aGlzIG9ubHkgd2hlbiB5b3Uga25v
dyB0aGF0IHRoZSBjb2RlUHRyIHJlZmVycyB0byBjb2RlIHRoYXQgaXMKICAgICAvLyBhbHJlYWR5
IGJlaW5nIGtlcHQgYWxpdmUgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLiBUeXBpY2FsbHkgdGhp
cyBtZWFucwogICAgIC8vIHRoYXQgY29kZVB0ciBpcyBpbW1vcnRhbC4KLSAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8dGFnPiBjb2RlUHRyKQorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8dGFnPiBjb2RlUHRyKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihjb2RlUHRyKTsKICAgICB9CkBAIC0z
MjAsMTMgKzE1MywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2V4ZWN1dGFibGVNZW1v
cnkuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNv
ZGUoKSBjb25zdAorICAgIENvZGVQdHI8dGFnPiBjb2RlKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2NvZGVQdHI7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4K
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8bmV3VGFnPiByZXRhZ2dlZENvZGUoKSBjb25zdAor
ICAgIENvZGVQdHI8bmV3VGFnPiByZXRhZ2dlZENvZGUoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fY29kZVB0ci50ZW1wbGF0ZSByZXRhZ2dlZDxuZXdUYWc+KCk7CiAgICAgfQpAQCAt
Mzc1LDcgKzIwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICp0aGlzID0gb3RoZXJDb2RlUmVmOwog
ICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IG1fY29kZVB0cjsKKyAgICBD
b2RlUHRyPHRhZz4gbV9jb2RlUHRyOwogICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBtX2V4ZWN1dGFibGVNZW1vcnk7CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWc+IGZyaWVuZCBjbGFz
cyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CkBAIC0zODUsMTMgKzIxOCwzIEBAIGJvb2wgc2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwogYm9vbCBzaG91bGREdW1wRGlzYXNzZW1i
bHlGb3IoV2FzbTo6Q29tcGlsYXRpb25Nb2RlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KLW5h
bWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7
Ci10ZW1wbGF0ZTxKU0M6OlB0clRhZyB0YWc+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+PiA6IEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRySGFzaDx0
YWc+IHsgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Ci10ZW1w
bGF0ZTxKU0M6OlB0clRhZyB0YWc+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPHRhZz4+IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8SlNDOjpNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8dGFnPj4geyB9OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCmluZGV4
IDQ4ODg1ODQ2MGI3NS4uZjI5NWViYTMzYThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNzAxLDkgKzM3MDEsOSBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZywgUHRyVGFn
IGxvY2F0aW9uVGFnPgotICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+IHJlYWRDYWxs
VGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCisgICAgc3RhdGljIENv
ZGVQdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPGxvY2F0aW9u
VGFnPiBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4o
cmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKCk+KE1JUFNBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0
KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CisgICAgICAgIHJldHVybiBDb2RlUHRyPHJlc3VsdFRh
Zz4ocmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKCk+KE1JUFNBc3NlbWJsZXI6OnJlYWRDYWxsVGFy
Z2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFn
IHN0YXJ0VGFnLCBQdHJUYWcgZGVzdFRhZz4KQEAgLTM3NjcsMTMgKzM3NjcsMTMgQEAgcHVibGlj
OgogICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KICAgICBzdGF0
aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgTUlQU0Fz
c2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxs
LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgotICAgIHN0YXRpYyB2b2lk
IHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8
ZGVzdFRhZz4gZGVzdGluYXRpb24pCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxv
Y2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQog
ICAgIHsKLSAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlv
bigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgTUlQU0Fzc2Vt
Ymxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdnZWRQ
dHIoKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzc4NCwxMiArMzc4NCwxMiBAQCBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0
aW9uUHRyPHRhZz4gZnVuY3Rpb24pCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29k
ZSwgQ2FsbCBjYWxsLCBDb2RlUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBpZiAo
Y2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAgICBNSVBTQXNzZW1ibGVyOjps
aW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgICAgICAgICAgTUlQU0Fzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVs
LCBmdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIE1JUFNB
c3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBj
YWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKICAgICB9CiAKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUklTQ1Y2
NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclJJU0NW
NjQuaAppbmRleCBmYzk4ZjliNTIyMTQuLjMwOTE0ZTAzNmJiNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclJJU0NWNjQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUklTQ1Y2NC5oCkBA
IC0xNzI1LDkgKzE3MjUsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFn
IHJlc3VsdFRhZywgUHRyVGFnIGxvY2F0aW9uVGFnPgotICAgIHN0YXRpYyBGdW5jdGlvblB0cjxy
ZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNh
bGwpCisgICAgc3RhdGljIENvZGVQdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9j
YXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0
aW9uUHRyPHJlc3VsdFRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHJlc3VsdFRhZz4oQXNzZW1i
bGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSkpOworICAgICAgICByZXR1
cm4gQ29kZVB0cjxyZXN1bHRUYWc+KEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRh
TG9jYXRpb24oKSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC0xNzY1
LDI0ICsxNzY1LDI0IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgotICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rp
b25QdHI8dGFnPiBmdW5jdGlvbikKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2Rl
LCBDYWxsIGNhbGwsIENvZGVQdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmICgh
Y2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpCi0gICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtQ
b2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbCwg
ZnVuY3Rpb24udGFnZ2VkUHRyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBBc3NlbWJs
ZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udGVtcGxhdGUgcmV0YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzczxOb1B0clRhZz4oKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udGVtcGxhdGUgcmV0YWdnZWRQ
dHI8Tm9QdHJUYWc+KCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQ
dHJUYWcgZGVzdFRhZz4KICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25D
YWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9u
KQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMb2Nh
dGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgQXNzZW1i
bGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdn
ZWRQdHIoKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBk
ZXN0VGFnPgotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2Fs
bFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCisgICAgc3RhdGlj
IHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlUHRy
PGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMb2NhdGlv
bigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAgICAgSnVtcCBqdW1wKCkK
QEAgLTI4MzUsMTAgKzI4MzUsMTAgQEAgcHVibGljOgogICAgIENhbGwgY2FsbChSZWdpc3RlcklE
IHRhcmdldCwgUmVnaXN0ZXJJRCBjYWxsVGFnKSB7IFVOVVNFRF9QQVJBTShjYWxsVGFnKTsgcmV0
dXJuIGNhbGwodGFyZ2V0LCBOb1B0clRhZyk7IH0KICAgICBDYWxsIGNhbGwoQWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGNhbGxUYWcpIHsgVU5VU0VEX1BBUkFNKGNhbGxUYWcpOyByZXR1cm4g
Y2FsbChhZGRyZXNzLCBOb1B0clRhZyk7IH0KIAotICAgIHZvaWQgY2FsbE9wZXJhdGlvbihjb25z
dCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICB2b2lkIGNhbGxP
cGVyYXRpb24oY29uc3QgQ29kZVB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKICAgICB7
CiAgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGE+KCk7Ci0gICAgICAgIGxvYWRJbW1lZGlh
dGUoVHJ1c3RlZEltbVB0cihvcGVyYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIHRlbXAuZGF0
YSgpKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbi50YWdn
ZWRQdHIoKSksIHRlbXAuZGF0YSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuamFsckluc24oUklT
Q1Y2NFJlZ2lzdGVyczo6eDEsIHRlbXAuZGF0YSgpLCBJbW06Okk8MD4oKSk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmgKaW5kZXggYjQwMWUzYmZhNDgxLi4xOGZhZjIyYTNjOWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOTMxLDEzICszOTMxLDEzIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0
ZTxQdHJUYWcgdGFnPgogICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoVk1IYWx0KENvZGVMb2Nh
dGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCkKICAgICB7Ci0gICAgICAgIFg4NkFzc2Vt
Ymxlcjo6cmVwbGFjZVdpdGhIbHQoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygp
KTsKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNlV2l0aEhsdChpbnN0cnVjdGlvblN0YXJ0
LnRhZ2dlZFB0cigpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgc3RhcnRUYWcsIFB0
clRhZyBkZXN0VGFnPgogICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRp
b25MYWJlbDxzdGFydFRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVz
dFRhZz4gZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VX
aXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRo
SnVtcChpbnN0cnVjdGlvblN0YXJ0LnRhZ2dlZFB0cigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIo
KSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4SnVtcFJlcGxhY2VtZW50
U2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgKaW5kZXggMTNlYTU4NWI3NWM1Li4xZGE4MjVhYjNhMTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2XzY0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNDksOSArMjQ5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAotICAgIHZvaWQgY2FsbE9wZXJhdGlvbihjb25zdCBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3Qg
Q29kZVB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKICAgICB7Ci0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihvcGVyYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIHNjcmF0Y2hSZWdp
c3RlcigpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbi50YWdnZWRQdHIo
KSksIHNjcmF0Y2hSZWdpc3RlcigpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuY2FsbChzY3JhdGNo
UmVnaXN0ZXIoKSk7CiAgICAgfQogCkBAIC0yMDE4LDkgKzIwMTgsOSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIAogICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4K
LSAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9j
YXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxsKQorICAgIHN0YXRpYyBDb2RlUHRyPHJlc3VsdFRh
Zz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cjxyZXN1bHRUYWc+KFg4NkFzc2VtYmxlcjo6
cmVhZFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FM
TF9SMTEpLmRhdGFMb2NhdGlvbigpKSk7CisgICAgICAgIHJldHVybiBDb2RlUHRyPHJlc3VsdFRh
Zz4oWDg2QXNzZW1ibGVyOjpyZWFkUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC1S
RVBBVENIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCkpKTsKICAgICB9CiAKICAgICBi
b29sIGhhdmVTY3JhdGNoUmVnaXN0ZXJGb3JCbGluZGluZygpIHsgcmV0dXJuIG1fYWxsb3dTY3Jh
dGNoUmVnaXN0ZXI7IH0KQEAgLTIwNjYsMzEgKzIwNjYsMzEgQEAgcHVibGljOgogICAgIHRlbXBs
YXRlPFB0clRhZyB0YWc+CiAgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9Q
YXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBpbnN0cnVj
dGlvblN0YXJ0LCBBZGRyZXNzLCB2b2lkKiBpbml0aWFsVmFsdWUpCiAgICAgewotICAgICAgICBY
ODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZxX2k2NHIoaW5zdHJ1Y3Rpb25TdGFydC5leGVj
dXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PGludHB0cl90Pihpbml0aWFsVmFsdWUp
LCBzX3NjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRv
X21vdnFfaTY0cihpbnN0cnVjdGlvblN0YXJ0LnRhZ2dlZFB0cigpLCByZWludGVycHJldF9jYXN0
PGludHB0cl90Pihpbml0aWFsVmFsdWUpLCBzX3NjcmF0Y2hSZWdpc3Rlcik7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KICAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4g
aW5zdHJ1Y3Rpb25TdGFydCwgQWRkcmVzcywgaW50MzJfdCBpbml0aWFsVmFsdWUpCiAgICAgewot
ICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZsX2kzMnIoaW5zdHJ1Y3Rpb25T
dGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCBpbml0aWFsVmFsdWUsIHNfc2NyYXRjaFJlZ2lzdGVy
KTsKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92bF9pMzJyKGluc3RydWN0
aW9uU3RhcnQudGFnZ2VkUHRyKCksIGluaXRpYWxWYWx1ZSwgc19zY3JhdGNoUmVnaXN0ZXIpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CiAgICAgc3RhdGljIHZvaWQgcmV2ZXJ0
SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFn
PiBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklELCB2b2lkKiBpbml0aWFsVmFsdWUpCiAgICAg
ewotICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZxX2k2NHIoaW5zdHJ1Y3Rp
b25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PGludHB0cl90Pihp
bml0aWFsVmFsdWUpLCBzX3NjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6
cmV2ZXJ0SnVtcFRvX21vdnFfaTY0cihpbnN0cnVjdGlvblN0YXJ0LnRhZ2dlZFB0cigpLCByZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihpbml0aWFsVmFsdWUpLCBzX3NjcmF0Y2hSZWdpc3Rlcik7
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgog
ICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2Fs
bCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewotICAgICAg
ICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQo
LVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
Y2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLmRhdGFM
b2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgotICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRh
Zz4gZGVzdGluYXRpb24pCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsK
LSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjEx
KS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udGFnZ2VkUHRyKCkpOwogICAgIH0KIAogcHJp
dmF0ZToKQEAgLTIxMTAsMTQgKzIxMTAsMTQgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
TGlua0J1ZmZlcjsKIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgc3RhdGljIHZvaWQg
bGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9u
KQorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgQ29kZVB0
cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYgKCFjYWxsLmlzRmxhZ1NldChDYWxs
OjpOZWFyKSkKLSAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwgY2Fs
bC5tX2xhYmVsLmxhYmVsQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKSwgZnVuY3Rp
b24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtQ
b2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9D
QUxMX1IxMSksIGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbC5p
c0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtKdW1w
KGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rp
b24udGFnZ2VkUHRyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBYODZBc3NlbWJsZXI6
OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJl
bCwgZnVuY3Rpb24udGFnZ2VkUHRyKCkpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggYTIzM2E5MmUzOGQyLi5hZDI3NmRl
OTg1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1h
c20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjM4LDcgKzIzOCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFn
PiBjb21waWxlKEdlbmVyYXRvciYmIGdlbmVyYXRlKQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgogVCBpbnZva2UoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpTRW50cnlQdHJUYWc+JiBjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewotICAgIHZv
aWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4o
Y29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFk
ZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjb2RlLmNvZGUoKS50YWdn
ZWRQdHIoKSk7CiAgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0
PFQoKikoQXJndW1lbnRzLi4uKT4oZXhlY3V0YWJsZUFkZHJlc3MpOwogCiAjaWYgQ1BVKFJJU0NW
NjQpCkBAIC00OTIwLDcgKzQ5MjAsNyBAQCB2b2lkIHRlc3RQcm9iZU1vZGlmaWVzUHJvZ3JhbUNv
dW50ZXIoKQogICAgICAgICAvLyBXcml0ZSBleHBlY3RlZCB2YWx1ZXMgaW50byB0aGUgcmVnaXN0
ZXJzLgogICAgICAgICBqaXQucHJvYmVEZWJ1ZyhbJl0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0
KSB7CiAgICAgICAgICAgICBwcm9iZUNhbGxDb3VudCsrOwotICAgICAgICAgICAgY29udGV4dC5j
cHUucGMoKSA9IHJldGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnLCBKSVRQcm9iZVBDUHRyVGFnPihj
b250aW51YXRpb24uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgY29u
dGV4dC5jcHUucGMoKSA9IHJldGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnLCBKSVRQcm9iZVBDUHRy
VGFnPihjb250aW51YXRpb24uY29kZSgpLnRhZ2dlZFB0cigpKTsKICAgICAgICAgfSk7CiAKICAg
ICAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCmluZGV4IDgzYTgwZjc2ZGEx
Zi4uZmRkMDg3MWFkOWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlck1hY3Jvcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNy
b3MuY3BwCkBAIC02MDIsNyArNjAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdXNp
bmcgSnVtcFRhYmxlQ29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU1N3aXRjaFB0clRh
Zz47CisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBKdW1wVGFibGVDb2RlUHRyID0gQ29k
ZVB0cjxKU1N3aXRjaFB0clRhZz47CiAgICAgICAgICAgICAgICAgICAgICAgICBKdW1wVGFibGVD
b2RlUHRyKiBqdW1wVGFibGUgPSBzdGF0aWNfY2FzdDxKdW1wVGFibGVDb2RlUHRyKj4oCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnByb2MoKS5hZGREYXRhU2VjdGlvbihzaXpl
b2YoSnVtcFRhYmxlQ29kZVB0cikgKiB0YWJsZVNpemUpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJEaXNhc3NlbWJsZXIuY3BwCmluZGV4IDFhNTY0ZDc1YzAxNi4u
YzRhMWQ5Y2VmN2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckRpc2Fzc2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJE
aXNhc3NlbWJsZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgRGlzYXNzZW1ibGVyOjphZGRJ
bnN0KEluc3QqIGluc3QsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzdGFydCwgTWFjcm9Bc3NlbWJs
CiAKIHZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wKENvZGUmIGNvZGUsIFByaW50U3RyZWFtJiBvdXQs
IExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIGNvbnN0IGNoYXIqIGFpclByZWZpeCwgY29uc3QgY2hh
ciogYXNtUHJlZml4LCBjb25zdCBTY29wZWRMYW1iZGE8dm9pZChJbnN0Jik+JiBkb1RvRWFjaElu
c3QpCiB7Ci0gICAgdm9pZCogY29kZVN0YXJ0ID0gbGlua0J1ZmZlci5lbnRyeXBvaW50PERpc2Fz
c2VtYmx5UHRyVGFnPigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lkKiBj
b2RlU3RhcnQgPSBsaW5rQnVmZmVyLmVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50
YWdnZWRQdHIoKTsKICAgICB2b2lkKiBjb2RlRW5kID0gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihj
b2RlU3RhcnQpICsgIGxpbmtCdWZmZXIuc2l6ZSgpOwogCiAgICAgYXV0byBkdW1wQXNtUmFuZ2Ug
PSBbJl0gKENDYWxsSGVscGVyczo6TGFiZWwgc3RhcnRMYWJlbCwgQ0NhbGxIZWxwZXJzOjpMYWJl
bCBlbmRMYWJlbCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90
ZXN0YWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKaW5k
ZXggYjYzOGJlY2QzMzM5Li4wYjMxMjMyYzRmOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci90ZXN0YWlyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDcgKzk5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKEIzOjpQcm9jZWR1cmUmIHByb2MpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiBUIGludm9rZShjb25zdCBDb21waWxhdGlvbiYgY29k
ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVz
cyA9IHVudGFnQ0Z1bmN0aW9uUHRyPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjb2RlLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFn
Q0Z1bmN0aW9uUHRyPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjb2RlLmNvZGUoKS50YWdnZWRQdHIo
KSk7CiAgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKiko
QXJndW1lbnRzLi4uKT4oZXhlY3V0YWJsZUFkZHJlc3MpOwogICAgIHJldHVybiBmdW5jdGlvbihh
cmd1bWVudHMuLi4pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IDhmZWE4ZGZk
NThhYi4uM2ViNjRkYzc1NWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk3
LDkgKzE5Nyw5IEBAIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGVQ
cm9jKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLVQgaW52b2tlKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRDb21waWxhdGlvblB0clRhZz4gcHRyLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQor
VCBpbnZva2UoQ29kZVB0cjxKSVRDb21waWxhdGlvblB0clRhZz4gcHRyLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQogewotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVuY3Rp
b25QdHI8SklUQ29tcGlsYXRpb25QdHJUYWc+KHB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ0Z1bmN0aW9uUHRyPEpJVENvbXBpbGF0
aW9uUHRyVGFnPihwdHIudGFnZ2VkUHRyKCkpOwogICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRz
Li4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGV4ZWN1dGFibGVBZGRyZXNz
KTsKICAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfNi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzXzYuY3BwCmluZGV4IGExYzk3YTM2YjdlMC4uOTIwMzE5MTE0NzYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzYuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfNi5jcHAKQEAgLTE2NzcsOCArMTY3Nyw4IEBAIHZv
aWQgdGVzdEludGVycHJldGVyKCkKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgIFZlY3RvcjxCb3g8Q0NhbGxI
ZWxwZXJzOjpMYWJlbD4+IGxhYmVscyA9IHBhcmFtcy5zdWNjZXNzb3JMYWJlbHMoKTsKIAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTU3dpdGNoUHRyVGFnPioganVtcFRhYmxl
ID0gYml0d2lzZV9jYXN0PE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU1N3aXRjaFB0clRhZz4qPigK
LSAgICAgICAgICAgICAgICBwYXJhbXMucHJvYygpLmFkZERhdGFTZWN0aW9uKHNpemVvZihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNTd2l0Y2hQdHJUYWc+KSAqIGxhYmVscy5zaXplKCkpKTsKKyAg
ICAgICAgICAgIENvZGVQdHI8SlNTd2l0Y2hQdHJUYWc+KiBqdW1wVGFibGUgPSBiaXR3aXNlX2Nh
c3Q8Q29kZVB0cjxKU1N3aXRjaFB0clRhZz4qPigKKyAgICAgICAgICAgICAgICBwYXJhbXMucHJv
YygpLmFkZERhdGFTZWN0aW9uKHNpemVvZihDb2RlUHRyPEpTU3dpdGNoUHRyVGFnPikgKiBsYWJl
bHMuc2l6ZSgpKSk7CiAKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2Ny
YXRjaCgwKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2Uu
Y3BwCmluZGV4IGI4NjZmOTczMGIwMi4uYjE0MWVjNzJjZjQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjE1OCw3ICsyMTU4LDcgQEAg
dm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihn
bG9iYWxPYmplY3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDZWxs
VmFsdWUoYmFzZUZvckN1c3RvbSksCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodWlkKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCku
bV9jdXN0b21BY2Nlc3Nvci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcy0+YXM8R2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZT4oKS5tX2N1c3RvbUFjY2Vzc29yLnRhZ2dlZFB0cigpKSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPEdl
dFZhbHVlRnVuYz4oCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwKQEAgLTIxNzIsNyArMjE3Miw3IEBAIHZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlRm9yQ3VzdG9tKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywKICAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQoKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcy0+YXM8R2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZT4oKS5tX2N1c3RvbUFjY2Vzc29yLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzLT5h
czxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLm1fY3VzdG9tQWNjZXNzb3IudGFnZ2VkUHRyKCkp
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBqaXQuc2V0
dXBBcmd1bWVudHM8UHV0VmFsdWVGdW5jPigKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLApAQCAtMjE5MCw5ICsyMTkwLDkg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBz
dGF0ZSkKICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPSwgdGhpc10gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUQ2FnZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIg
fHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4odm1FbnRyeUN1c3RvbUdldHRlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ2FsbCwgdm1FbnRyeUN1c3Rv
bUdldHRlcik7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KHZtRW50cnlDdXN0b21TZXR0ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIHZtRW50cnlDdXN0
b21TZXR0ZXIpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZT4oKS5tX2N1c3RvbUFjY2Vzc29yKTsKICAgICAgICAgICAgIH0pOwpAQCAtMjI1Miw3ICsy
MjUyLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAg
ICAgICAgICAgICBhdXRvIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcp
OwogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKSk7
CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uQ2FsbCwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
c3BpbGxTdGF0ZSk7CiAKQEAgLTIzNDcsOSArMjM0Nyw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2Fs
bCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVy
dHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRo
SW5pdGlhbENhcGFjaXR5KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJl
IHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CkBA
IC0yMzU5LDkgKzIzNTksOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVy
YXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0
aW9uUHRyVGFnPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dy
b3dQcm9wZXJ0eVN0b3JhZ2UpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAppbmRleCA4ZmI5MTgz
YWQxZjIuLjU2NGI3YjYzMDgyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwCkBAIC02NSw3ICs2NSw3
IEBAIHB1YmxpYzoKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBq
aXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBhdXRvIGZ1bmN0aW9uID0gbV9mdW5j
dGlvbjsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4oZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIGZ1bmN0aW9uKTsKICAgICAgICAg
fSk7CiAKICAgICAgICAgaml0LnNldHVwUmVzdWx0cyhtX3Jlc3VsdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCmluZGV4IDUwNDljNjMyMDc2
OC4uZTAyZjNiNDU5MTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKICAgICByZXR1cm4g
bV9kb25lTG9jYXRpb247CiB9CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0Nh
bGxlZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikK
K3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZShWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkp
OwogICAgIFJFTEVBU0VfQVNTRVJUKCEoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVlKSAm
IHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgIH0KIH0KIAotdm9pZCBDYWxsTGlua0luZm86
OnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBjb2RlUHRyKQordm9pZCBDYWxsTGlua0luZm86OnNldFNsb3dQYXRoQ2FsbERlc3Rp
bmF0aW9uKENvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKICAgICBtX3Nsb3dQYXRo
Q2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaAppbmRleCAzZjJiMTMyZjBlM2IuLjE4NmQzMzU2NDczNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaApAQCAt
MTk5LDggKzE5OSw4IEBAIHB1YmxpYzoKIAogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCi0gICAgdm9pZCBzZXRNb25vbW9ycGhpY0NhbGxl
ZShWTSYsIEpTQ2VsbCosIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVCbG9jayosIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Ci0gICAgdm9pZCBzZXRTbG93UGF0aENhbGxEZXN0
aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOworICAgIHZvaWQg
c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mLCBKU0NlbGwqLCBKU09iamVjdCogY2FsbGVlLCBDb2Rl
QmxvY2sqLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKKyAgICB2b2lkIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKENvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwogICAgIHZvaWQgY2xlYXJDYWxs
ZWUoKTsKICAgICBKU09iamVjdCogY2FsbGVlKCk7CiAKQEAgLTM4Myw3ICszODMsNyBAQCBwcm90
ZWN0ZWQ6CiAKICAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsg
MCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9mIGFyZ3Vt
ZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9y
IGFyZ3VtZW50cy4KICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Rv
bmVMb2NhdGlvbjsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9z
bG93UGF0aENhbGxEZXN0aW5hdGlvbjsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xv
d1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKICAgICAgICAgVW5p
b25UeXBlKCkKICAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0ciwgbnVsbHB0ciB9CkBAIC0z
OTEsNyArMzkxLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIHN0cnVjdCBEYXRhSUMgewogICAg
ICAgICAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsgLy8gVGhpcyBpcyB3ZWVrbHkgaGVsZC4g
QW5kIGNsZWFyZWQgd2hlbmV2ZXIgbV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiBpcyBjaGFu
Z2VkLgotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1f
bW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb247CisgICAgICAgICAgICBDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IG1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb247CiAgICAgICAgIH0gZGF0YUlDOwog
CiAgICAgICAgIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmNwcAppbmRleCAyNjliOThhMGRhYTQuLjFkMjk1MGRjYjI1ZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCkBAIC0yODYsNyAr
Mjg2LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhv
dXRFeGl0U2l0ZUZlZWRiYWNrKAogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJ
bmxpbmVhYmxlOiB7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3Rh
dHVzPiBjYWxsTGlua1N0YXR1czsKICAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBpbnRyaW5z
aWNGdW5jdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25QdHI8Q3VzdG9t
QWNjZXNzb3JQdHJUYWc+IGN1c3RvbUFjY2Vzc29yR2V0dGVyOworICAgICAgICAgICAgICAgIENv
ZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGN1c3RvbUFjY2Vzc29yR2V0dGVyOwogICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRy
aWJ1dGU7CiAgICAgICAgICAgICAgICAgYm9vbCBoYXZlRE9NQXR0cmlidXRlID0gZmFsc2U7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVZhcmlhbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5VmFyaWFudC5jcHAKaW5k
ZXggNTQ5NDhkYjVkMjdmLi4wOTY2ZDAxYzg4OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVZhcmlhbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeVZhcmlhbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotR2V0QnlWYXJpYW50OjpHZXRCeVZhcmlhbnQoQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzLCBK
U0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQ
dHJUYWc+IGN1c3RvbUFjY2Vzc29yR2V0dGVyLCBzdGQ6OnVuaXF1ZV9wdHI8RE9NQXR0cmlidXRl
QW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlKQorR2V0QnlWYXJpYW50OjpHZXRCeVZhcmlhbnQoQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxM
aW5rU3RhdHVzLCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwgQ29kZVB0cjxDdXN0b21B
Y2Nlc3NvclB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxET01B
dHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCiAgICAgOiBtX3N0cnVjdHVyZVNldChz
dHJ1Y3R1cmVTZXQpCiAgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBt
X29mZnNldChvZmZzZXQpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBHZXRCeVZhcmlhbnQ6OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
CiAgICAgaWYgKG1faW50cmluc2ljRnVuY3Rpb24pCiAgICAgICAgIG91dC5wcmludCgiLCBpbnRy
aW5zaWMgPSAiLCAqbV9pbnRyaW5zaWNGdW5jdGlvbik7CiAgICAgaWYgKG1fY3VzdG9tQWNjZXNz
b3JHZXR0ZXIpCi0gICAgICAgIG91dC5wcmludCgiLCBjdXN0b21hY2Nlc3NvcmdldHRlciA9ICIs
IFJhd1BvaW50ZXIobV9jdXN0b21BY2Nlc3NvckdldHRlci5leGVjdXRhYmxlQWRkcmVzcygpKSk7
CisgICAgICAgIG91dC5wcmludCgiLCBjdXN0b21hY2Nlc3NvcmdldHRlciA9ICIsIFJhd1BvaW50
ZXIobV9jdXN0b21BY2Nlc3NvckdldHRlci50YWdnZWRQdHIoKSkpOwogICAgIGlmIChtX2RvbUF0
dHJpYnV0ZSkgewogICAgICAgICBvdXQucHJpbnQoIiwgZG9tY2xhc3MgPSAiLCBSYXdQb2ludGVy
KG1fZG9tQXR0cmlidXRlLT5jbGFzc0luZm8pKTsKICAgICAgICAgaWYgKG1fZG9tQXR0cmlidXRl
LT5kb21KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlWYXJpYW50
LmgKaW5kZXggMDk5YWVkNzczNjM4Li4zZWQwN2Y2MDk5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVZhcmlhbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlWYXJpYW50LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGlj
OgogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0
dXM+ID0gbnVsbHB0ciwKICAgICAgICAgSlNGdW5jdGlvbiogPSBudWxscHRyLAotICAgICAgICBG
dW5jdGlvblB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIgPSBu
dWxscHRyLAorICAgICAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nl
c3NvckdldHRlciA9IG51bGxwdHIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxET01BdHRyaWJ1
dGVBbm5vdGF0aW9uPiA9IG51bGxwdHIpOwogCiAgICAgfkdldEJ5VmFyaWFudCgpOwpAQCAtNzAs
NyArNzAsNyBAQCBwdWJsaWM6CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIEpTRnVuY3Rpb24q
IGludHJpbnNpY0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbnRyaW5zaWNGdW5jdGlvbjsg
fQogICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY0Z1
bmN0aW9uID8gbV9pbnRyaW5zaWNGdW5jdGlvbi0+aW50cmluc2ljKCkgOiBOb0ludHJpbnNpYzsg
fQotICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nlc3Nvckdl
dHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3JHZXR0ZXI7IH0KKyAgICBDb2Rl
UHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nlc3NvckdldHRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fY3VzdG9tQWNjZXNzb3JHZXR0ZXI7IH0KICAgICBET01BdHRyaWJ1dGVBbm5vdGF0
aW9uKiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX2RvbUF0dHJpYnV0ZS5nZXQoKTsg
fQogCiAgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBvZmZzZXQoKSA9
PSBpbnZhbGlkT2Zmc2V0OyB9CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICBQcm9w
ZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
IG1fY2FsbExpbmtTdGF0dXM7CiAgICAgSlNGdW5jdGlvbiogbV9pbnRyaW5zaWNGdW5jdGlvbjsK
LSAgICBGdW5jdGlvblB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gbV9jdXN0b21BY2Nlc3Nvckdl
dHRlcjsKKyAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBtX2N1c3RvbUFjY2Vzc29y
R2V0dGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBtX2Rv
bUF0dHJpYnV0ZTsKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZS5jcHAKaW5kZXggMDE5NTkzNmE3YTA2Li4xNjlkMWIyMWU0MzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OSw3ICs0OSw3IEBAIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6Okdl
dHRlclNldHRlckFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlCiAK
IFJlZjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCiAgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBib29s
IHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBGdW5jdGlvblB0cjxDdXN0
b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tR2V0dGVyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2Us
CisgICAgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgQ29kZVB0
cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tR2V0dGVyLCBKU09iamVjdCogY3VzdG9tU2xv
dEJhc2UsCiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRy
aWJ1dGUsIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4mJiBwcm90b3R5cGVBY2Nlc3NDaGFp
bikKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTYzLDE3ICs2MywxOSBAQCBSZWY8QWNjZXNz
Q2FzZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAogCiAgICAgYXV0byByZXN1bHQg
PSBhZG9wdFJlZigqbmV3IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBp
ZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCB2aWFQcm94eSwgYWRk
aXRpb25hbFNldCwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4p
KSk7CiAgICAgcmVzdWx0LT5tX2RvbUF0dHJpYnV0ZSA9IGRvbUF0dHJpYnV0ZTsKLSAgICByZXN1
bHQtPm1fY3VzdG9tQWNjZXNzb3IgPSBjdXN0b21HZXR0ZXIgPyBGdW5jdGlvblB0cjxDdXN0b21B
Y2Nlc3NvclB0clRhZz4oY3VzdG9tR2V0dGVyKSA6IG51bGxwdHI7CisgICAgaWYgKGN1c3RvbUdl
dHRlcikKKyAgICAgICAgcmVzdWx0LT5tX2N1c3RvbUFjY2Vzc29yID0gY3VzdG9tR2V0dGVyOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFJlZjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LCBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+JiYgcHJvdG90eXBlQWNj
ZXNzQ2hhaW4sIGJvb2wgdmlhUHJveHksIAotICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29y
UHRyVGFnPiBjdXN0b21TZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSkKKyAgICBDb2Rl
UHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21TZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21T
bG90QmFzZSkKIHsKICAgICBBU1NFUlQodHlwZSA9PSBTZXR0ZXIgfHwgdHlwZSA9PSBDdXN0b21W
YWx1ZVNldHRlciB8fCB0eXBlID09IEN1c3RvbUFjY2Vzc29yU2V0dGVyKTsKICAgICBhdXRvIHJl
c3VsdCA9IGFkb3B0UmVmKCpuZXcgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5
cGUsIGlkZW50aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5
LCBudWxscHRyLCBjdXN0b21TbG90QmFzZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikp
KTsKLSAgICByZXN1bHQtPm1fY3VzdG9tQWNjZXNzb3IgPSBjdXN0b21TZXR0ZXIgPyBGdW5jdGlv
blB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4oY3VzdG9tU2V0dGVyKSA6IG51bGxwdHI7CisgICAg
aWYgKGN1c3RvbVNldHRlcikKKyAgICAgICAgcmVzdWx0LT5tX2N1c3RvbUFjY2Vzc29yID0gY3Vz
dG9tU2V0dGVyOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExOCw3ICsxMjAsNyBAQCB2
b2lkIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQsIENv
bW1hUHJpbnRlciYgY29tbWEsIEluZAogICAgIG91dC5wcmludChjb21tYSwgImN1c3RvbVNsb3RC
YXNlID0gIiwgUmF3UG9pbnRlcihjdXN0b21TbG90QmFzZSgpKSk7CiAgICAgaWYgKGNhbGxMaW5r
SW5mbygpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsTGlua0luZm8gPSAiLCBSYXdQ
b2ludGVyKGNhbGxMaW5rSW5mbygpKSk7Ci0gICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9tQWNj
ZXNzb3IgPSAiLCBSYXdQb2ludGVyKG1fY3VzdG9tQWNjZXNzb3IuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOworICAgIG91dC5wcmludChjb21tYSwgImN1c3RvbUFjY2Vzc29yID0gIiwgUmF3UG9pbnRl
cihtX2N1c3RvbUFjY2Vzc29yLnRhZ2dlZFB0cigpKSk7CiB9CiAKIHZvaWQgR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRl
LCBjb25zdCBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklULCBHUFJSZWcgYmFzZUZvckdldEdQ
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZS5oCmluZGV4IDk2NTdiZjI2MDQzZC4uZDc2ZmM4ODk0MTQ0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmgKQEAgLTU1LDE5ICs1NSwxOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVmPEFj
Y2Vzc0Nhc2U+IGNyZWF0ZSgKICAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
LCBDYWNoZWFibGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKLSAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRj
aHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBGdW5jdGlvblB0cjxDdXN0b21BY2Nlc3NvclB0clRh
Zz4gY3VzdG9tR2V0dGVyLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIENvZGVQdHI8
Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGN1c3RvbUdldHRlciwKICAgICAgICAgSlNPYmplY3QqIGN1
c3RvbVNsb3RCYXNlLCBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBSZWZQ
dHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+JiYpOwogCiAgICAgc3RhdGljIFJlZjxBY2Nlc3NDYXNl
PiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwKICAgICAgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmLCBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+JiYsIGJvb2wg
dmlhUHJveHkgPSBmYWxzZSwKLSAgICAgICAgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJU
YWc+IGN1c3RvbVNldHRlciA9IG51bGxwdHIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51
bGxwdHIpOworICAgICAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21TZXR0
ZXIgPSBudWxscHRyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKIAogICAg
IHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mLCBDb21tYVByaW50ZXImLCBJbmRlbnRlciYpIGNv
bnN0IGZpbmFsOwogICAgIFJlZjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0IGZpbmFsOwogCiAg
ICAgfkdldHRlclNldHRlckFjY2Vzc0Nhc2UoKSBmaW5hbDsKIAotICAgIEZ1bmN0aW9uUHRyPEN1
c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3Vz
dG9tQWNjZXNzb3I7IH0KKyAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21B
Y2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3I7IH0KIAogcHJpdmF0ZToK
ICAgICBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRk
aXRpb25hbFNldCwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBSZWZQdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+JiYpOwpAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJy
aWVyPEpTT2JqZWN0PiBtX2N1c3RvbVNsb3RCYXNlOwogICAgIE9wdGltaXppbmdDYWxsTGlua0lu
Zm8qIG1fY2FsbExpbmtJbmZvIHsgbnVsbHB0ciB9OwotICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFj
Y2Vzc29yUHRyVGFnPiBtX2N1c3RvbUFjY2Vzc29yOworICAgIENvZGVQdHI8Q3VzdG9tQWNjZXNz
b3JQdHJUYWc+IG1fY3VzdG9tQWNjZXNzb3I7CiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1
dGVBbm5vdGF0aW9uPiBtX2RvbUF0dHJpYnV0ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKaW5kZXggOTZlNzMxYWVmOWY4
Li43NzkzMzk0OWI5ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoa2luZCAhPSBHZW5lcmF0ZWRGaW5hbENvZGUpOwogICAgIH0KICAgICAK
LSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KEtpbmQga2luZCwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlKQorICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1
bHQoS2luZCBraW5kLCBDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlKQogICAgICAg
ICA6IG1fa2luZChraW5kKQogICAgICAgICAsIG1fY29kZShjb2RlKQogICAgIHsKQEAgLTk2LDcg
Kzk2LDcgQEAgcHVibGljOgogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZDsgfQogICAgIAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91
dGluZVB0clRhZz4mIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICBjb25zdCBD
b2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZTsgfQogICAgIAogICAgIGJvb2wgbWFkZU5vQ2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZCA9PSBNYWRlTm9DaGFuZ2VzOyB9CiAgICAgYm9vbCBnYXZlVXAoKSBjb25zdCB7IHJldHVybiBt
X2tpbmQgPT0gR2F2ZVVwOyB9CkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgIAogcHJp
dmF0ZToKICAgICBLaW5kIG1fa2luZDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IG1fY29kZTsKKyAgICBDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiBtX2NvZGU7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJbmxpbmVXYXRjaHBvaW50U2V0JiwgU3Ry
aW5nRmlyZURldGFpbD4+IG1fd2F0Y2hwb2ludHNUb0ZpcmU7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAKaW5kZXggYjliMTJiYTRhYTg3Li4yOGEzODdm
NDA4YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNo
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAKQEAg
LTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCog
Y2FsbGVlKQogCiB2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCiAgICAgVk0mIHZtLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2Fs
bGVlQ29kZUJsb2NrLAotICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQorICAgIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHVi
KCkpOwogCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8pCiAgICAgICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5m
bywgdm0uZ2V0Q1RJTGlua0NhbGwoKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29k
ZVB0cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTT2JqZWN0KiBjYWxsZWUpCitDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCwgSlNPYmplY3QqIGNhbGxlZSkKIHsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgaWYgKCFjYWxsZWUpCkBAIC0xODQsMjYgKzE4NCwyNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4ganNUb1dhc21JQ0NvZGVQdHIoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraQogCiAjaWYgRU5BQkxFKEpJVCkKIAotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+IG9wZXJhdGlvbikKK3N0YXRpYyBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdP
cGVyYXRpb25XaXRoVmFsaWRhdGlvbihDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gb3BlcmF0aW9u
KQogewogICAgIEpTQ19SRVRVUk5fUkVUQUdHRURfT1BFUkFUSU9OX1dJVEhfVkFMSURBVElPTihv
cGVyYXRpb24pOwogfQogCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZXRh
Z0NhbGxUYXJnZXRXaXRoVmFsaWRhdGlvbihDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJU
YWc+IGNhbGwpCitzdGF0aWMgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnQ2FsbFRhcmdl
dFdpdGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCkK
IHsKICAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFSR0VUX1dJVEhfVkFMSURBVElPTihj
YWxsKTsKIH0KIAotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElD
Q2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQorc3RhdGljIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZWFkUHV0SUNDYWxsVGFyZ2V0
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCiAgICAgICAgIHJldHVybiByZXRhZ09wZXJh
dGlvbldpdGhWYWxpZGF0aW9uKHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbik7CiAgICAgQ29kZUxv
Y2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsID0gc3R1YkluZm8ubV9zbG93UGF0aENh
bGxMb2NhdGlvbjsKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKSB7Ci0gICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5r
UHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQ
dHJUYWc+KGNhbGwpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJU
YWc+IHRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRl
RnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAg
ICAgcmV0dXJuIHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oY29kZUJsb2NrLT52bSgpLmZ0
bFRodW5rcy0+a2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKSk7Cisg
ICAgICAgIENvZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpy
ZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7CisgICAgICAgIHJldHVybiByZXRh
Z09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKGNvZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZv
clNsb3dQYXRoQ2FsbFRodW5rKHRhcmdldCkuY2FsbFRhcmdldCgpKTsKICAgICB9CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwpAQCAtMjExLDE3ICsyMTAsMTYgQEAgc3RhdGlj
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3QKICAgICByZXR1cm4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRp
b24oY2FsbCk7CiB9CiAKLXZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCit2b2lkIGZ0bFRodW5r
QXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxK
U0ludGVybmFsUHRyVGFnPiBjYWxsLCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVl
RnVuY3Rpb24pCiB7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgaWYgKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgewogICAgICAgICBWTSYgdm0gPSBjb2RlQmxvY2st
PnZtKCk7CiAgICAgICAgIEZUTDo6VGh1bmtzJiB0aHVua3MgPSAqdm0uZnRsVGh1bmtzOwotICAg
ICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6
OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKLSAgICAgICAgYXV0byBzbG93
UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRl
RnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAg
ICAgQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVy
OjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7CiAgICAgICAgIEZUTDo6U2xv
d1BhdGhDYWxsS2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0
aFRodW5rKTsKICAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0
aW9uKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIHRodW5rcy5n
ZXRTbG93UGF0aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkudG9GdW5jdGlvblB0cigpKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIHRodW5rcy5nZXRTbG93UGF0
aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vs
c2UgLy8gRU5BQkxFKEZUTF9KSVQpCkBAIC0yMzAsNyArMjI4LDcgQEAgdm9pZCBmdGxUaHVua0F3
YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVMb2NhdGlvbkNhbGw8SlNJ
bnRlcm5hbFAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVl
RnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQg
cmVwYXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0
aW9uKQorc3RhdGljIHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4g
bmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsK
ICAgICAgICAgc3R1YkluZm8ubV9zbG93T3BlcmF0aW9uID0gbmV3Q2FsbGVlRnVuY3Rpb24ucmV0
YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpOwpAQCAtMjg0LDcgKzI4Miw3IEBAIEFMV0FZU19JTkxJ
TkUgc3RhdGljIHZvaWQgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQoVk0mIHZt
LCBTdHJ1Y3R1cmVTCiAgICAgfQogfQogCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQor
aW5saW5lIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQogewogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNh
c2UgR2V0QnlLaW5kOjpCeUlkOgpAQCAtMzA1LDcgKzMwMyw3IEBAIGlubGluZSBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oR2V0
QnlLaW5kCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotaW5saW5lIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKEdldEJ5
S2luZCBraW5kKQoraW5saW5lIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdl
dEJ5RnVuY3Rpb24oR2V0QnlLaW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAg
Y2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6CkBAIC01NDIsOSArNTQwLDEyIEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayoKICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlk
V2l0aFRoaXMgJiYgdHlwZSA9PSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBk
b21BdHRyaWJ1dGUpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKIAorICAgICAgICAgICAgICAgICAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBj
dXN0b21BY2Nlc3NvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yID0gc2xvdC5j
dXN0b21HZXR0ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIHR5cGUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwg
bG9hZFRhcmdldEZyb21Qcm94eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Qud2F0Y2hw
b2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBGdW5jdGlvblB0cjxDdXN0b21B
Y2Nlc3NvclB0clRhZz4oc2xvdC5jdXN0b21HZXR0ZXIoKSkgOiBudWxscHRyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIGN1c3RvbUFjY2Vzc29yLAogICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmIHNsb3Quc2xv
dEJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LnNsb3RCYXNlKCkgOiBudWxscHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgZG9tQXR0cmlidXRlLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0No
YWluKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzE3LDcgKzcxOCw3IEBAIHZvaWQgcmVwYXRj
aEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTCiAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mbywgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKIH0KIAotc3RhdGljIEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2lu
ZCkKK3N0YXRpYyBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtp
bmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgewogICAgIGNh
c2UgUHV0QnlLaW5kOjpCeUlkOiB7CkBAIC03NjQsNyArNzY1LDcgQEAgc3RhdGljIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihjb25z
dCBQdXRQcm8KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2lu
ZCkKK3N0YXRpYyBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5n
UHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRC
eUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgewogICAg
IGNhc2UgUHV0QnlLaW5kOjpCeUlkOgpAQCAtMTIwOSw3ICsxMjEwLDcgQEAgdm9pZCByZXBhdGNo
RGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIERlbGV0ZVAKICAgICB9CiB9CiAKLWlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQoraW5s
aW5lIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVu
Y3Rpb24oSW5CeUtpbmQga2luZCkKIHsKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIElu
QnlLaW5kOjpCeUlkOgpAQCAtMTIyMiw3ICsxMjIzLDcgQEAgaW5saW5lIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nSW5CeUZ1bmN0aW9uKEluQnlLaW5k
IGsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1pbmxpbmUgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5C
eUtpbmQga2luZCkKK2lubGluZSBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVH
ZW5lcmljSW5CeUZ1bmN0aW9uKEluQnlLaW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7
CiAgICAgY2FzZSBJbkJ5S2luZDo6QnlJZDoKQEAgLTE1NzUsNyArMTU3Niw3IEBAIHZvaWQgcmVw
YXRjaEluc3RhbmNlT2YoCiAKIHZvaWQgbGlua0RpcmVjdENhbGwoCiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIE9wdGltaXppbmdDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2Nr
KiBjYWxsZWVDb2RlQmxvY2ssCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHIpCisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewogICAg
IEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAgICAgCkBAIC0xNjE4LDcgKzE2MTksNyBA
QCBzdGF0aWMgdm9pZCBsaW5rVmlydHVhbEZvcihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSQogbmFtZXNwYWNlIHsKIHN0cnVjdCBDYWxsVG9Db2Rl
UHRyIHsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNvZGVQdHI7CiB9OwogfSAvLyBhbm5vbnltb3VzIG5hbWVzcGFjZQogCkBAIC0xODMyLDcgKzE4
MzMsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbAogICAgICAgICBQb2x5bW9ycGhpY0NhbGxD
YXNlJiBjYWxsQ2FzZSA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdOwogICAgICAgICBDYWxsVmFyaWFu
dCB2YXJpYW50ID0gY2FsbENhc2UudmFyaWFudCgpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CisgICAgICAgIENvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgp
KSB7CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVG
b3JDYWxsKCkpOwogICAgICAgICAgICAgCkBAIC0xOTE2LDcgKzE5MTcsNyBAQCB2b2lkIGxpbmtQ
b2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENhbAogICAgIC8vIDMuIElmIHdlJ3JlIGEgZGF0YSBJQywgdGhlbiB0aGUgcmV0
dXJuIGFkZHJlc3MgaXMgYWxyZWFkeSBjb3JyZWN0CiAgICAgLy8gVGh1cyB3ZSBuZWVkIHRvIHB1
dCBpdCBmb3IgdGhlIHNsb3ctcGF0aCBjYWxsLgogICAgIGlmICghaXNEYXRhSUMpIHsKLSAgICAg
ICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8u
ZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVn
VDQpOworICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZFB0cigpKSwgR1BSSW5mbzo6cmVnVDQp
OwogICAgICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUklu
Zm86OnJlZ1Q0KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBGSVhNRTogV2UgYXJlIG5vdCBk
b2luZyBhIHJlYWwgdGFpbC1jYWxsIGluIHRoaXMgY2FzZS4gV2UgbGVhdmUgc3RhY2sgZW50cmll
cyBpbiB0aGUgY2FsbGVyLCBhbmQgd2UgYXJlIG5vdCBydW5uaW5nIHByZXBhcmVGb3JUYWlsQ2Fs
bCwgdGh1cywKQEAgLTE5MjksNyArMTkzMCw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKICNlbmRpZgogICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5m
by5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHZtLmdldENUSVN0dWIoSklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVH
ZW5lcmF0b3IpLmNvZGUoKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpy
ZWdUNCk7CisgICAgICAgICAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cih2bS5nZXRDVElTdHViKEpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKS5j
b2RlKCkudW50YWdnZWRQdHIoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAgICAgICAgICAgICBz
dHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTkzOCw3ICsxOTM5LDcgQEAg
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICAgICAgICAgIC8vIFdoaWxlIEJhc2VsaW5lIC8g
TExJbnQgc2hhcmVzIEJhc2VsaW5lQ2FsbExpbmtJbmZvLCBPcHRpbWl6aW5nQ2FsbExpbmtJbmZv
IGlzIGV4Y2x1c2l2ZWx5IHVzZWQgZm9yIG9uZSBKSVQgY29kZS4KICAgICAgICAgICAgIC8vIFRo
dXMsIHdlIGNhbiBzYWZlbHkgdXNlIGRvbmVMb2NhdGlvbi4KICAgICAgICAgICAgIGlmIChjYWxs
TGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50
YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICAgICAg
ICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZv
LmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkUHRyKCkpLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgICAg
ICAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZv
OjpyZWdUNCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTYsNyAr
MTk1Nyw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAgICAgCiAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbENhc2VzLnNpemUoKSA9PSBjYWxscy5zaXplKCkpOwogICAgIGZvciAoQ2FsbFRvQ29k
ZVB0ciBjYWxsVG9Db2RlUHRyIDogY2FsbHMpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFRvQ29kZVB0ci5jYWxsLCBjYWxsVG9Db2RlUHRyLmNvZGVQdHIudG9GdW5jdGlvblB0cigpKTsK
KyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIGNhbGxUb0NvZGVQ
dHIuY29kZVB0cik7CiAKICAgICBpZiAoIWRvbmUuZW1wdHkoKSkgewogICAgICAgICBBU1NFUlQo
IWlzRGF0YUlDKTsKQEAgLTE5NjgsNyArMTk2OSw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2Fs
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2Fs
CiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAogICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2Nr
LCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICAgICAiUG9seW1v
cnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKLSAg
ICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygq
Y2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS5leGVj
dXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNz
ZW1ibHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZv
LmRvbmVMb2NhdGlvbigpLnRhZ2dlZFB0cigpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhs
aXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLAogICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCiAgICAgICAgIFdURk1v
dmUoZmFzdENvdW50cykpKTsKQEAgLTIwMDgsMTEgKzIwMDksMTEgQEAgdm9pZCByZXNldEdldEJ5
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5
S2luZCBraW4KIAogdm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQogewotICAgIEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgQ29kZVB0cjxDRnVuY3Rp
b25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOwogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNh
c2UgUHV0QnlLaW5kOjpCeUlkOiB7CiAgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0
eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwotICAgICAgICBGdW5j
dGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25U
eXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9j
aywgc3R1YkluZm8pLnRhZ2dlZFB0cigpKTsKICAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwogICAgICAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCkBAIC0y
MDMxLDcgKzIwMzIsNyBAQCB2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbgogICAgIH0KICAgICBjYXNl
IFB1dEJ5S2luZDo6QnlWYWw6IHsKICAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5
cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOwotICAgICAgICBGdW5jdGlvblR5
cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihy
ZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1
YkluZm8pLnRhZ2dlZFB0cigpKTsKICAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKICAgICAgICAgZWxzZSBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVy
aWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0
Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmgKaW5kZXggYmFh
NzRkOTY2ZWZlLi44ZTI0MWVlMzBhNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZXBhdGNoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1JlcGF0Y2guaApAQCAtNzEsOCArNzEsOCBAQCB2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQo
SlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZQogdm9p
ZCByZXBhdGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBK
U09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lk
IHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09i
amVjdCosIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CiB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3YXNG
b3VuZCk7Ci12b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlu
a0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4pOwotdm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBPcHRp
bWl6aW5nQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+KTsKK3ZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSos
IENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVQdHI8SlNF
bnRyeVB0clRhZz4pOwordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBPcHRpbWl6aW5n
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7CiB2b2lk
IGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1bmxpbmtDYWxs
KFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7CkBAIC04NCw4
ICs4NCw3IEBAIHZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKIHZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJik7CiB2b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9j
ayosIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4sIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpT
T2JqZWN0KiBjYWxsZWUpOwotCit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxv
Y2sqLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+LCBDb2RlUHRyPENGdW5jdGlv
blB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOworQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1Rv
V2FzbUlDQ29kZVB0cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdCogY2FsbGVlKTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVwYXRjaElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZXBhdGNoSW5saW5lcy5oCmluZGV4IDFjYzdmZjQzYWU5Ni4uNjEwMDk5NDEwNGM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSwx
OSArNDksMTkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUKICAgICAgICAgICAgIERpc2FsbG93
R0MgZGlzYWxsb3dHQzsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAg
ICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLnRhZ2dlZFB0cigpLAogICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAg
ICAgICBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICBMTEludDo6Z2V0SG9zdENhbGxSZXR1
cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkudGFnZ2VkUHRyKCksCiAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxN
b2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAK
ICAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwog
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVu
Y3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOwogICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KAotICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICB2bS5nZXRDVElU
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkudGFnZ2VkUHRyKCksCiAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICB9CiAK
QEAgLTc3LDE3ICs3NywxNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RD
YWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZQogICAgICAgICBEaXNh
bGxvd0dDIGRpc2FsbG93R0M7CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAg
dm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoKCkuY29kZSgpLnRhZ2dlZFB0cigpLAogICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAKLSAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9p
bnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
S2VlcFRoZUZyYW1lKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoTExJbnQ6OmdldEhv
c3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLnRhZ2dlZFB0cigpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICB9CiAKICAgICBBU1NFUlQoY29u
c3RydWN0RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKICAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9i
YWxPYmplY3QsIGNhbGxlZSkpOwogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgIHZt
LmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGgoKS5jb2RlKCkudGFnZ2VkUHRyKCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEtlZXBUaGVGcmFtZSkpOwogfQogCkBAIC0xMDYsNyArMTA2LDcgQEAgQUxXQVlTX0lOTElORSBT
bG93UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2Jh
bE9iamVjdCoKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlv
bihjYWxsZWVBc1ZhbHVlKTsKICAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1
bmN0aW9uKj4oY2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRy
YW1wb2xpbmVGb3Ioa2luZCk7CisgICAgICAgICAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNv
ZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhY29kZVB0cik7CiAKICAgICAgICAgICAgIGlmICgh
Y2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQpAQCAtMTE0LDcgKzExNCw3IEBAIEFMV0FZU19JTkxJ
TkUgU2xvd1BhdGhSZXR1cm5UeXBlIGxpbmtGb3IoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNH
bG9iYWxPYmplY3QqCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbGlua01vbm9t
b3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVy
bmFsRnVuY3Rpb24sIGNvZGVQdHIpOwogCi0gICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQg
PSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICB2b2lkKiBsaW5rZWRU
YXJnZXQgPSBjb2RlUHRyLnRhZ2dlZFB0cigpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+
Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJh
bWUpKTsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
aGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwg
Y2FsbExpbmtJbmZvKSk7CkBAIC0xMjQsNyArMTI0LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0
aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVj
dCoKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKICAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwogCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CisgICAgQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVs
bHB0cjsKIAogICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRp
c29uIGFueSBjb2RlIHVudGlsIGFmdGVyIHdlIGxpbmsgdGhlIGNhbGwuCkBAIC0xMzcsNyArMTM3
LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUq
IGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCoKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihl
eGVjdXRhYmxlKTsKIAogICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgp
IHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
ICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aCgpLmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkp
OwogICAgICAgICB9OwogCkBAIC0xNjYsNyArMTY2LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0
aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVj
dCoKICAgICBlbHNlCiAgICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1l
LCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CiAKLSAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8g
UmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
Y29kZVB0ci50YWdnZWRQdHIoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZv
LT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVG
cmFtZSkpOwogfQogCiBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9y
V2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCkKQEAgLTE4Miw5ICsxODIsOSBAQCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0
dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgog
ICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgewogICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0u
Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CisgICAgICAgICAgICBD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9u
VHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxs
TW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgICAg
IHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci50YWdnZWRQdHIoKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1
c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxl
ZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKICAgICB9CkBAIC0xOTksNyAr
MTk5LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhG
dW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSk7CiAKICAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7
Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAg
ICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGgoKS5jb2RlKCkudGFnZ2VkUHRyKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsK
ICAgICAgICAgfTsKIApAQCAtMjE2LDcgKzIxNiw3IEBAIEFMV0FZU19JTkxJTkUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgd2FzbSBJQy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzM5CiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChl
eGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLnRhZ2dl
ZFB0cigpLAogICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNh
bGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1l
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCmluZGV4IGQyOTI0MTI2NWE4Zi4uYTE1ZDM5ZjY1NTBmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKQEAgLTQxMSw3ICs0MTEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnNldENhY2hlVHlwZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJgogICAgIG1fY2Fj
aGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCi1zdGF0aWMgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPiBzbG93T3BlcmF0aW9uRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oY29uc3Qg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3N0YXRpYyBDb2Rl
UHRyPE9wZXJhdGlvblB0clRhZz4gc2xvd09wZXJhdGlvbkZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKGNvbnN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8p
CiB7CiAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKICAgICBjYXNl
IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAppbmRleCBkMjQwZmEyNWRlODguLmRkNGU2Yzg4
MjZhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKQEAgLTM5MiwxMCArMzkyLDEwIEBAIHB1YmxpYzoKIAogICAgIHVuaW9uIHsK
ICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoQ2Fs
bExvY2F0aW9uOwotICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fc2xvd09w
ZXJhdGlvbjsKKyAgICAgICAgQ29kZVB0cjxPcGVyYXRpb25QdHJUYWc+IG1fc2xvd09wZXJhdGlv
bjsKICAgICB9OwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBtX2NvZGVQdHI7CisgICAgQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2Rl
UHRyOwogCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCmluZGV4IDRkZDIwNDU5NzkzOS4uYTky
NTYzN2I1MmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fz
c2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJs
ZXIuY3BwCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3Nl
bWJseShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIExpbmtCdWYKICAgICAg
ICAgcHJlZml4QnVmZmVyW2kgKyBwcmVmaXhMZW5ndGhdID0gJyAnOwogICAgIHByZWZpeEJ1ZmZl
cltwcmVmaXhMZW5ndGggKyBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlXSA9IDA7CiAgICAgCi0gICAg
dm9pZCogY29kZVN0YXJ0ID0gbGlua0J1ZmZlci5lbnRyeXBvaW50PERpc2Fzc2VtYmx5UHRyVGFn
PigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lkKiBjb2RlU3RhcnQgPSBs
aW5rQnVmZmVyLmVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50YWdnZWRQdHIoKTsK
ICAgICB2b2lkKiBjb2RlRW5kID0gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb2RlU3RhcnQpICsg
IGxpbmtCdWZmZXIuc2l6ZSgpOwogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RGlzYXNzZW1ibHlQ
dHJUYWc+IHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPERpc2Fzc2VtYmx5UHRyVGFnPihw
cmV2aW91c0xhYmVsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCBjYTU2
NmQzYTQ4NGUuLjVjZjliMDA4YjdjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aApAQCAtMTA3OCw3ICsxMDc4LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gKm1fdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2luZGV4XTsg
fQogICAgIFN0cmluZ0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKHVuc2lnbmVkIGlu
ZGV4KSB7IHJldHVybiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaW5kZXhdOyB9CiAKLSAgICB2
b2lkIGFwcGVuZENhdGNoRW50cnlwb2ludChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtYWNoaW5lQ29kZSwg
VmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0cykKKyAgICB2b2lkIGFwcGVuZENh
dGNoRW50cnlwb2ludChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIENvZGVQdHI8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGUsIFZlY3RvcjxGbHVzaEZvcm1hdD4mJiBhcmd1
bWVudEZvcm1hdHMpCiAgICAgewogICAgICAgICBtX2NhdGNoRW50cnlwb2ludHMuYXBwZW5kKENh
dGNoRW50cnlwb2ludERhdGEgeyBtYWNoaW5lQ29kZSwgRml4ZWRWZWN0b3I8Rmx1c2hGb3JtYXQ+
KFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSksIGJ5dGVjb2RlSW5kZXggfSk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCBjYmQ2MjIx
MTBkMzQuLjVhOWI4YWI0ODEwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5r
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgICAgIEFTU0VSVChtX2V4aXRTaXRlTGFiZWxz
LnNpemUoKSA9PSBtX29zckV4aXQuc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZXhpdFNpdGVMYWJlbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZlY3Rv
cjxMYWJlbD4mIGxhYmVscyA9IG1fZXhpdFNpdGVMYWJlbHNbaV07Ci0gICAgICAgICAgICBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBhZGRyZXNzZXM7Cisg
ICAgICAgICAgICBWZWN0b3I8Q29kZVB0cjxKU0ludGVybmFsUHRyVGFnPj4gYWRkcmVzc2VzOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGxhYmVscy5zaXplKCk7ICsraikK
ICAgICAgICAgICAgICAgICBhZGRyZXNzZXMuYXBwZW5kKGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihsYWJlbHNbal0pKTsKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGls
YXRpb24oKS0+YWRkT1NSRXhpdFNpdGUoYWRkcmVzc2VzKTsKQEAgLTUzNSwxMSArNTM1LDExIEBA
IHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgbV9zcGVjdWxhdGl2ZS0+
bGlua09TUkVudHJpZXMoKmxpbmtCdWZmZXIpOwogICAgIAogICAgIGlmIChyZXF1aXJlc0FyaXR5
Rml4dXApCi0gICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIHZtKCkuZ2V0
Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5jb2RlKCkudG9GdW5jdGlvblB0cigpKTsKKyAg
ICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgdm0oKS5nZXRDVElTdHViKGFy
aXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZl
cik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2sgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KGFyaXR5Q2hlY2sp
OworICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVy
LT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KGFyaXR5Q2hlY2spOwogCiAgICAgbV9qaXRDb2Rl
LT5pbml0aWFsaXplQ29kZVJlZkZvckRGRygKICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKmxp
bmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5n
KENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpERkdKSVQpKS5kYXRh
KCkpLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCmluZGV4IDIw
MzhjYzNiYTk1Yy4uNDQxNDlhOTMzOGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCkBAIC02NiwxNCArNjYsMTQgQEAgc3RydWN0IE9TUkV4aXQ7CiAvLyBF
dmVyeSBDYWxsTGlua1JlY29yZCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY2FsbCBpbnN0
cnVjdGlvbiAmIHRoZSBmdW5jdGlvbgogLy8gdGhhdCBpdCBuZWVkcyB0byBiZSBsaW5rZWQgdG8u
CiBzdHJ1Y3QgQ2FsbExpbmtSZWNvcmQgewotICAgIENhbGxMaW5rUmVjb3JkKE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pCisg
ICAgQ2FsbExpbmtSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgQ29kZVB0cjxPcGVy
YXRpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAgICAgICAs
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgewogICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIG1fY2FsbDsKLSAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fZnVuY3Rp
b247CisgICAgQ29kZVB0cjxPcGVyYXRpb25QdHJUYWc+IG1fZnVuY3Rpb247CiB9OwogCiAvLyA9
PT0gSklUQ29tcGlsZXIgPT09CkBAIC0xNDEsMTQgKzE0MSwxNCBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRp
b24gY2hlY2suCi0gICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24pCisgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IENvZGVQdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxs
ID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlu
a1JlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4o
KSkpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KIAotICAgIENhbGwgYXBw
ZW5kT3BlcmF0aW9uQ2FsbChjb25zdCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGZ1bmN0
aW9uKQorICAgIENhbGwgYXBwZW5kT3BlcmF0aW9uQ2FsbChjb25zdCBDb2RlUHRyPE9wZXJhdGlv
blB0clRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNh
bGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNv
cmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRGaW5hbGl6ZXIuY3BwCmluZGV4IGNjZDc1Y2ZmMWI4Ni4uZWE1ZWM5OTk0NjNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCkBAIC0z
Niw3ICszNiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotSklURmlu
YWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxhbiYgcGxhbiwgUmVmPEpJVENvZGU+JiYgaml0Q29kZSwg
c3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKK0pJVEZpbmFsaXplcjo6SklURmlu
YWxpemVyKFBsYW4mIHBsYW4sIFJlZjxKSVRDb2RlPiYmIGppdENvZGUsIHN0ZDo6dW5pcXVlX3B0
cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrKQogICAgIDogRmluYWxpemVyKHBsYW4pCiAgICAgLCBtX2ppdENvZGUoV1RGTW92ZShq
aXRDb2RlKSkKICAgICAsIG1fbGlua0J1ZmZlcihXVEZNb3ZlKGxpbmtCdWZmZXIpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmgKaW5kZXggZGI0ZTJiMTUzYzlm
Li44ZjljODNjMWNlMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklURmluYWxpemVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5h
bGl6ZXIuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKIGNsYXNzIEpJVEZpbmFsaXplciBmaW5hbCA6IHB1YmxpYyBGaW5hbGl6ZXIgewogcHVibGlj
OgotICAgIEpJVEZpbmFsaXplcihQbGFuJiwgUmVmPEpJVENvZGU+JiYsIHN0ZDo6dW5pcXVlX3B0
cjxMaW5rQnVmZmVyPiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhB
cml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPjo6RW1wdHlWYWx1ZSkpOworICAgIEpJVEZpbmFs
aXplcihQbGFuJiwgUmVmPEpJVENvZGU+JiYsIHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPiwg
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IENvZGVQdHI8SlNFbnRyeVB0
clRhZz4oQ29kZVB0cjxKU0VudHJ5UHRyVGFnPjo6RW1wdHlWYWx1ZSkpOwogICAgIH5KSVRGaW5h
bGl6ZXIoKSBmaW5hbDsKICAgICAKICAgICBzaXplX3QgY29kZVNpemUoKSBmaW5hbDsKQEAgLTQ1
LDcgKzQ1LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBSZWY8SklUQ29kZT4gbV9qaXRDb2RlOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPiBtX2xpbmtCdWZmZXI7Ci0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fd2l0aEFyaXR5Q2hlY2s7CisgICAgQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNrOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCBmOWZmNTA2
NThlOTMuLjQ2MTQ0N2IxNjJlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAg
LTI3OSw3ICsyNzksNyBAQCBzdHJ1Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKIH07CiAKIHN0cnVjdCBD
YWxsRE9NR2V0dGVyRGF0YSB7Ci0gICAgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+
IGN1c3RvbUFjY2Vzc29yR2V0dGVyOworICAgIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+
IGN1c3RvbUFjY2Vzc29yR2V0dGVyOwogICAgIGNvbnN0IERPTUpJVDo6R2V0dGVyU2V0dGVyKiBk
b21KSVQgeyBudWxscHRyIH07CiAgICAgRE9NSklUOjpDYWxsRE9NR2V0dGVyU25pcHBldCogc25p
cHBldCB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyIHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCA4MDJiOTIzOWFl
NWEuLmM3MGY2Y2IyZTIzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAogdm9pZCBPU1JFbnRyeURhdGE6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KG1fYnl0ZWNvZGVJbmRl
eCwgIiwgbWFjaGluZSBjb2RlID0gIiwgUmF3UG9pbnRlcihtX21hY2hpbmVDb2RlLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICBvdXQucHJpbnQobV9ieXRlY29kZUluZGV4LCAiLCBtYWNoaW5l
IGNvZGUgPSAiLCBSYXdQb2ludGVyKG1fbWFjaGluZUNvZGUudGFnZ2VkUHRyKCkpKTsKICAgICBv
dXQucHJpbnQoIiwgc3RhY2sgcnVsZXMgPSBbIik7CiAgICAgCiAgICAgYXV0byBwcmludE9wZXJh
bmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKQEAgLTI1Miw4ICsyNTIsOCBAQCB2b2lk
KiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjbwogICAgIAogICAgICpiaXR3aXNlX2Nhc3Q8c2l6ZV90Kj4oc2Ny
YXRjaCArIDApID0gZnJhbWVTaXplOwogICAgIAotICAgIHZvaWQqIHRhcmdldFBDID0gZW50cnkt
Pm1fbWFjaGluZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChj
b2RlQmxvY2stPmppdENvZGUoKS0+Y29udGFpbnMoZW50cnktPm1fbWFjaGluZUNvZGUudW50YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgdm9pZCogdGFyZ2V0UEMgPSBlbnRyeS0+bV9t
YWNoaW5lQ29kZS50YWdnZWRQdHIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2stPmpp
dENvZGUoKS0+Y29udGFpbnMoZW50cnktPm1fbWFjaGluZUNvZGUudW50YWdnZWRQdHIoKSkpOwog
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBPU1IgdXNpbmcgdGFy
Z2V0IFBDICIsIFJhd1BvaW50ZXIodGFyZ2V0UEMpKTsKICAgICBSRUxFQVNFX0FTU0VSVCh0YXJn
ZXRQQyk7CiAgICAgKmJpdHdpc2VfY2FzdDx2b2lkKio+KHNjcmF0Y2ggKyAxKSA9IHRhZ0NvZGVQ
dHJXaXRoU3RhY2tQb2ludGVyRm9ySklUQ2FsbCh1bnRhZ0NvZGVQdHI8T1NSRW50cnlQdHJUYWc+
KHRhcmdldFBDKSwgY2FsbEZyYW1lKTsKQEAgLTM0NCw3ICszNDQsNyBAQCB2b2lkKiBwcmVwYXJl
T1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjbwogICAgIHJldHVybiBzY3JhdGNoOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgQ29kZUJs
b2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK0Nv
ZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgQ29k
ZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
IHsKICAgICBBU1NFUlQob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
REZHSklUIHx8IG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJ
VCk7CiAgICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+aXNTdGlsbFZhbGlkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5o
CmluZGV4IGI5YmUxOTc5ZTVjMC4uZDc4NDVlMzFjZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5oCkBAIC03NSw3ICs3NSw3IEBAIGlubGluZSBCeXRlY29kZUluZGV4
IGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEp
CiBzdHJ1Y3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSB7CiAgICAgLy8gV2UgdXNlIHRoaXMgd2hlbiBk
b2luZyBPU1IgZW50cnkgYXQgY2F0Y2guIFdlIHByb3ZlIHRoZSBhcmd1bWVudHMKICAgICAvLyBh
cmUgb2YgdGhlIGV4cGVjdGVkIHR5cGUgYmVmb3JlIGVudGVyaW5nIGF0IGEgY2F0Y2ggYmxvY2su
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1hY2hp
bmVDb2RlOworICAgIENvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGU7
CiAgICAgRml4ZWRWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0czsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiB9OwpAQCAtODUsOSArODUsOSBAQCBzdHJ1Y3QgQ2F0
Y2hFbnRyeXBvaW50RGF0YSB7CiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mLCBDYWxsRnJhbWUq
LCBDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKIAogLy8gSWYgbnVsbCBpcyByZXR1cm5lZCwg
d2UgY2FuJ3QgT1NSIGVudGVyLiBJZiBpdCdzIG5vdCBudWxsLCBpdCdzIHRoZSBQQyB0byBqdW1w
IHRvLgotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBh
cmVDYXRjaE9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jaywgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgpOworQ29k
ZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYsIENh
bGxGcmFtZSosIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIENvZGVCbG9jayogb3B0aW1p
emVkQ29kZUJsb2NrLCBCeXRlY29kZUluZGV4KTsKICNlbHNlCi1pbmxpbmUgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVPU1JFbnRyeShWTSYsIENh
bGxGcmFtZSosIENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpIHsgcmV0dXJuIG51bGxwdHI7IH0K
K2lubGluZSBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVPU1JFbnRyeShW
TSYsIENhbGxGcmFtZSosIENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpIHsgcmV0dXJuIG51bGxw
dHI7IH0KICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCA3ZDQ0ODQ4YWQ3ZDQuLjgxMzE3ZTcyMDE2
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjE1LDcg
KzIxNSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21waWxlT1NSRXhp
dCwgdm9pZCwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCB2CiAgICAgaWYgKGV4aXQuY29kZUxvY2F0
aW9uRm9yUmVwYXRjaCgpKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoZXhp
dC5jb2RlTG9jYXRpb25Gb3JSZXBhdGNoKCksIENvZGVMb2NhdGlvbkxhYmVsPE9TUkV4aXRQdHJU
YWc+KGV4aXRDb2RlLmNvZGUoKSkpOwogCi0gICAgdm0ub3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9
IGV4aXRDb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZtLm9zckV4aXRKdW1w
RGVzdGluYXRpb24gPSBleGl0Q29kZS5jb2RlKCkudGFnZ2VkUHRyKCk7CiB9CiAKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigiZnJhbWUtYWRkcmVzcyIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggNmQ0ZjdjNzFm
YjViLi4yYzMzNWVlN2Q0OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzksMTQgKzEzOSwxNCBAQCB2
b2lkIGhhbmRsZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NS
RXhpdEJhc2UmIGV4aXQpCiAgICAgZG9uZUFkanVzdGluZy5saW5rKCZqaXQpOwogfQogCi1zdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5
dGVjb2RlSW5kZXgsIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGJv
b2wmIGNhbGxlcklzTExJbnQpCitzdGF0aWMgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJS
ZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRlY29kZUlu
ZGV4IGNhbGxCeXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxlckNh
bGxLaW5kLCBib29sJiBjYWxsZXJJc0xMSW50KQogewogICAgIGNhbGxlcklzTExJbnQgPSBPcHRp
b25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCiAgICAgaWYgKGNhbGxC
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKICAgICAgICAgcmV0dXJuIExMSW50OjpjaGVja3Bv
aW50T1NSRXhpdEZyb21JbmxpbmVkQ2FsbFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OworICAgIENv
ZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldDsKIAogICAgIGNvbnN0IGF1dG8mIGNhbGxJ
bnN0cnVjdGlvbiA9ICpiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zKCku
YXQoY2FsbEJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CkBA
IC0yNzYsNyArMjc2LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxp
bmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgYXV0byBjYWxsQnl0ZWNv
ZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0dXJu
UEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVlQ2Fs
bGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJbnQpOworICAgICAgICAgICAgQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJ
bnQpOwogCiAgICAgICAgICAgICBpZiAodHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCkpIHsK
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKApAQCAtMjg4LDExICsyODgsMTEgQEAgdm9pZCBy
ZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFz
ZSYgZXhpdCkKIAogI2lmIENQVShBUk02NEUpCiAgICAgICAgICAgICBqaXQuYWRkUHRyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQo
KSArIHNpemVvZih2b2lkKikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
cmVnVDIpOwotICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGp1bXBUYXJnZXQudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVn
VDQpOworICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGp1bXBUYXJnZXQudW50YWdnZWRQdHIoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAgICAgICAg
IGppdC50YWdQdHIoR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1Q0KTsKICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUNCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
Qnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkpKTsKICNlbHNlCi0g
ICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1
bXBUYXJnZXQudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
anVtcFRhcmdldC51bnRhZ2dlZFB0cigpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0
ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkpKTsKICNlbmRpZgogICAg
ICAgICB9CiAKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChW
TSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICBp
ZiAoZXhpdFRvTExJbnQpIHsKICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5tX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICBjb25zdCBhdXRvJiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJ
bmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBkZXN0aW5hdGlvbjsKKyAgICAgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlv
bjsKICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQogICAgICAgICAgICAg
ZGVzdGluYXRpb24gPSBMTEludDo6Y2hlY2twb2ludE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5j
b2RlKCk7CiAgICAgICAgIGVsc2UgCkBAIC0zOTgsMTMgKzM5OCwxMyBAQCB2b2lkIGFkanVzdEFu
ZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFz
ZSYgZXhpdCkKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNv
ZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFk
YXRhVGFibGVHUFIpOwogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJl
Z2lzdGVyczo6cGJHUFIpOwogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwot
ICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4o
KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24u
cmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS50YWdnZWRQdHIoKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhp
dC0+bWV0YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRhR1BSKTsKICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5l
SklURGF0YSgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRl
eCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKKyAgICAg
ICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKICAgICAgICAgaWYgKGV4aXRJ
bmRleC5jaGVja3BvaW50KCkpCiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVj
a3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKICAgICAgICAgZWxzZSB7CkBA
IC00MTQsNyArNDE0LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAKICAgICAgICAgQVNTRVJU
KGRlc3RpbmF0aW9uKTsKIAotICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdn
ZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBqdW1wVGFy
Z2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS50YWdnZWRQdHIoKTsK
ICAgICB9CiAKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggZmE2YTA5MWVkNGEyLi5j
NjQxMDA3YjQ1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcApAQCAtMjgzMSw4ICsyODMxLDggQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUsIGNoYXIqLCAoVk0qIHZtUG8KICAgICBk
b3VibGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwogICAgIGludDMyX3QgYXNJbnQzMiA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KGFzRG91YmxlKTsKICAgICBpZiAoYXNEb3VibGUgPT0gYXNJ
bnQzMikKLSAgICAgICAgcmV0dXJuIGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKG1pbiwgYXNJbnQz
MikuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7Ci0gICAgcmV0dXJuIGxpbmtlZFRhYmxlLm1f
Y3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKKyAgICAgICAgcmV0dXJuIGxp
bmtlZFRhYmxlLmN0aUZvclZhbHVlKG1pbiwgYXNJbnQzMikudGFnZ2VkUHRyPGNoYXIqPigpOwor
ICAgIHJldHVybiBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQudGFnZ2VkUHRyPGNoYXIqPigpOwog
fQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nLCBjaGFy
KiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHNpemVfdCB0YWJsZUluZGV4LCBjb25z
dCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSogdW5saW5rZWRUYWJsZSwgSlNTdHJpbmcqIHN0cmlu
ZykpCkBAIC0yODQ3LDcgKzI4NDcsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIGNvbnN0IFN0cmluZ0p1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKLSAgICByZXR1cm4gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUoKnVubGlua2Vk
VGFibGUsIHN0ckltcGwpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgIHJldHVybiBs
aW5rZWRUYWJsZS5jdGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJsZSwgc3RySW1wbCkudGFnZ2VkUHRy
PGNoYXIqPigpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGFy
ZVN0cmluZ0ltcGxMZXNzLCB1aW50cHRyX3QsIChTdHJpbmdJbXBsKiBhLCBTdHJpbmdJbXBsKiBi
KSkKQEAgLTM3MzcsNyArMzczNyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25MaW5rRGlyZWN0Q2FsbCwgdm9pZCwgKE9wdGltaXppbmdDYWxsTGlua0luZm8qCiAKICAgICAv
LyBGSVhNRTogU3VwcG9ydCB3YXNtIElDLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gY29kZVB0cjsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgIERlZmVyVHJhcHMgZGVmZXJU
cmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0
byBsaW5rIHRvIGl0LgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCmluZGV4IGEwZDE4YTNlMjc0OS4uMzI4ZmVjY2NmNDFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtNTUwMiw3
ICs1NTAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKiBub2Rl
LCBKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aEkKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBtX2ppdC5sYWJlbCgpOwogICAg
ICAgICAgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1
ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoRW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKSAtIHN0YXRp
Y19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoRW5kKS50YWdnZWRQdHIoKSkg
LSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQp
LnRhZ2dlZFB0cigpKTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNp
emUgKz0gc2l6ZTsKICAgICAgICAgICAgIH0pOwogI2VuZGlmCkBAIC01NTI1LDcgKzU1MjUsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUqIG5vZGUsIEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
IGF1dG8gaW5saW5lRW5kID0gbV9qaXQubGFiZWwoKTsKICAgICBtX2ppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0
aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkgLSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlu
bGluZVN0YXJ0KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBz
dGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkudGFnZ2Vk
UHRyKCkpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVT
dGFydCkudGFnZ2VkUHRyKCkpOwogICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUg
Kz0gc2l6ZTsKICAgICB9KTsKICNlbmRpZgpAQCAtNjExNSw3ICs2MTE1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKiBub2RlLCBKSVRVbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiBtYXRoSUMKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICAgICAgICAgIGF1
dG8gc2xvd1BhdGhFbmQgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgbV9qaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgc2l6
ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQ
YXRoRW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKSAtIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5s
b2NhdGlvbk9mKHNsb3dQYXRoRW5kKS50YWdnZWRQdHIoKSkgLSBzdGF0aWNfY2FzdDxjaGFyKj4o
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLnRhZ2dlZFB0cigpKTsKICAgICAg
ICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKICAgICAgICAg
ICAgIH0pOwogI2VuZGlmCkBAIC02MTMwLDcgKzYxMzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTWF0aElDKE5vZGUqIG5vZGUsIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQwogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbV9q
aXQubGFiZWwoKTsKICAgICBtX2ppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1
ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkgLSBzdGF0aWNf
Y2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0KS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkudGFnZ2VkUHRyKCkpIC0gc3RhdGljX2Nhc3Q8
Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVTdGFydCkudGFnZ2VkUHRyKCkpOwog
ICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKICAgICB9KTsKICNl
bmRpZgpAQCAtMTEwMDMsMTMgKzExMDAzLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDYWxsRE9NKE5vZGUqIG5vZGUpCiAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQgKyAxOwogICAgIHN3aXRjaCAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HUD4oZnVuY3Rpb24uZ2V0KCkpLCBl
eHRyYWN0UmVzdWx0KHJlc3VsdFJlZ3MpLCBKSVRDb21waWxlcjo6TGlua2FibGVDb25zdGFudCht
X2ppdCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJl
Z3NbMF0pOworICAgICAgICBjYWxsT3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR1A+KGZ1bmN0aW9uLnVudHlwZWRGdW5jKCkpLCBleHRyYWN0UmVzdWx0KHJlc3VsdFJl
Z3MpLCBKSVRDb21waWxlcjo6TGlua2FibGVDb25zdGFudChtX2ppdCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJlZ3NbMF0pOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIDI6Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ocmVpbnRlcnByZXRfY2FzdDxK
X0pJVE9wZXJhdGlvbl9HUFA+KGZ1bmN0aW9uLmdldCgpKSwgZXh0cmFjdFJlc3VsdChyZXN1bHRS
ZWdzKSwgSklUQ29tcGlsZXI6OkxpbmthYmxlQ29uc3RhbnQobV9qaXQsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCByZWdzWzBdLCByZWdzWzFdKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dQUD4o
ZnVuY3Rpb24udW50eXBlZEZ1bmMoKSksIGV4dHJhY3RSZXN1bHQocmVzdWx0UmVncyksIEpJVENv
bXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1faml0LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcmVnc1swXSwgcmVnc1sxXSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgMzoKLSAgICAgICAgY2FsbE9wZXJhdGlvbihyZWludGVycHJldF9jYXN0PEpf
SklUT3BlcmF0aW9uX0dQUFA+KGZ1bmN0aW9uLmdldCgpKSwgZXh0cmFjdFJlc3VsdChyZXN1bHRS
ZWdzKSwgSklUQ29tcGlsZXI6OkxpbmthYmxlQ29uc3RhbnQobV9qaXQsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCByZWdzWzBdLCByZWdzWzFdLCByZWdz
WzJdKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dQUFA+KGZ1bmN0aW9uLnVudHlwZWRGdW5jKCkpLCBleHRyYWN0UmVzdWx0KHJlc3VsdFJl
Z3MpLCBKSVRDb21waWxlcjo6TGlua2FibGVDb25zdGFudChtX2ppdCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJlZ3NbMF0sIHJlZ3NbMV0sIHJlZ3Nb
Ml0pOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTEwMjQsNyArMTEwMjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ2FsbERPTUdldHRlcihOb2RlKiBub2RlKQogewogICAgIERPTUpJVDo6Q2Fs
bERPTUdldHRlclNuaXBwZXQqIHNuaXBwZXQgPSBub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5z
bmlwcGV0OwogICAgIGlmICghc25pcHBldCkgewotICAgICAgICBGdW5jdGlvblB0cjxDdXN0b21B
Y2Nlc3NvclB0clRhZz4gZ2V0dGVyID0gbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3VzdG9t
QWNjZXNzb3JHZXR0ZXI7CisgICAgICAgIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGdl
dHRlciA9IG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmN1c3RvbUFjY2Vzc29yR2V0dGVyOwog
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCkBAIC0xMTAzMyw3
ICsxMTAzMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NR2V0dGVyKE5v
ZGUqIG5vZGUpCiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgaWYgKE9wdGlv
bnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzPEpfSklU
T3BlcmF0aW9uX0dKSVA+KEpJVENvbXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1faml0LCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgQ0NhbGxIZWxwZXJz
OjpDZWxsVmFsdWUoYmFzZUdQUiksIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5j
YWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyKSksIFRydXN0ZWRJbW1QdHIoZ2V0
dGVyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzPEpfSklUT3BlcmF0aW9uX0dKSVA+KEpJVENvbXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1f
aml0LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgQ0Nh
bGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJ
RChub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyKSksIFRydXN0ZWRJ
bW1QdHIoZ2V0dGVyLnRhZ2dlZFB0cigpKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzPEpfSklUT3BlcmF0aW9uX0dKST4oSklUQ29tcGlsZXI6Okxpbmth
YmxlQ29uc3RhbnQobV9qaXQsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgVHJ1c3RlZEltbVB0
cihpZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1i
ZXIpKSk7CiAKQEAgLTExMDQyLDcgKzExMDQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNhbGxET01HZXR0ZXIoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJ
VENhZ2UoKSkKICAgICAgICAgICAgIG1faml0LmFwcGVuZENhbGwodm1FbnRyeUN1c3RvbUdldHRl
cik7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPiBieXBhc3NlZEZ1bmN0aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9wZXJhdGlvblB0
clRhZz4oV1RGOjp0YWdOYXRpdmVDb2RlUHRySW1wbDxPcGVyYXRpb25QdHJUYWc+KFdURjo6dW50
YWdOYXRpdmVDb2RlUHRySW1wbDxDdXN0b21BY2Nlc3NvclB0clRhZz4oZ2V0dGVyLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKSkudG9GdW5jdGlvblB0cigpOworICAgICAgICAgICAgQ29kZVB0cjxPcGVy
YXRpb25QdHJUYWc+IGJ5cGFzc2VkRnVuY3Rpb24oV1RGOjp0YWdOYXRpdmVDb2RlUHRySW1wbDxP
cGVyYXRpb25QdHJUYWc+KFdURjo6dW50YWdOYXRpdmVDb2RlUHRySW1wbDxDdXN0b21BY2Nlc3Nv
clB0clRhZz4oZ2V0dGVyLnRhZ2dlZFB0cigpKSkpOwogICAgICAgICAgICAgbV9qaXQuYXBwZW5k
T3BlcmF0aW9uQ2FsbChieXBhc3NlZEZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgICAgICBtX2pp
dC5zZXR1cFJlc3VsdHMocmVzdWx0UmVncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggMWQ3NWI5ZDIzYmY2Li5kNmNhNDIyN2I2ZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTEw
MDAsNyArMTAwMCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFk
ZCBjYWxsIGluc3RydWN0aW9ucywgb3B0aW9uYWxseSBzZXR0aW5nIHJlc3VsdHMsIGFuZCBvcHRp
b25hbGx5IHJvbGxpbmcgYmFjayB0aGUgY2FsbCBmcmFtZSBvbiBhbiBleGNlcHRpb24uCi0gICAg
SklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGwoY29uc3Qg
Q29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgcHJlcGFy
ZUZvckV4dGVybmFsQ2FsbCgpOwogICAgICAgICBtX2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2luKG1f
Y3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0xMDE0LDIxICsxMDE0LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChhZGRyZXNzKTsKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBhcHBlbmRPcGVyYXRpb25DYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kT3Bl
cmF0aW9uQ2FsbChjb25zdCBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAg
ewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7CiAgICAgICAgIG1faml0LmVtaXRT
dG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAg
cmV0dXJuIG1faml0LmFwcGVuZE9wZXJhdGlvbkNhbGwoZnVuY3Rpb24pOwogICAgIH0KIAotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlv
bihjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKCk7CiAgICAgICAgIHJl
dHVybiBjYWxsOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvblNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0KQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvblNldFJlc3Vs
dChjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQp
CiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKChyZXN1
bHQgIT0gSW52YWxpZEdQUlJlZykgJiYgKHJlc3VsdCAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpCkBAIC0xMDU4LDcgKzEwNTgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gSW52
YWxpZEdQUlJlZykKQEAgLTEwNjYsMTQgKzEwNjYsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gY2FsbDsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVz
dWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyBy
ZXN1bHQxLCBHUFJSZWcgcmVzdWx0MikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
U2V0UmVzdWx0KGNvbnN0IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgR1BSUmVn
IHJlc3VsdDEsIEdQUlJlZyByZXN1bHQyKQogICAgIHsKICAgICAgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24pOwogICAgICAgICBtX2ppdC5zZXR1cFJlc3Vs
dHMocmVzdWx0MSwgcmVzdWx0Mik7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KIAotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncykKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IENvZGVQdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncykKICAgICB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rp
b24sIHJlc3VsdFJlZ3MuZ3ByKCkpOwpAQCAtMTA4Miw3ICsxMDgyLDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgQ29kZVB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24pOwogICAgICAg
ICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RodW5rcy5jcHAKaW5kZXggYTM0MjFjNjdkNTY3Li4yOWM4OGEzMDdiZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTEyNSw3ICsxMjUsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5l
cmF0b3IoVk0mIHZtKQogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6REZHVGh1bmspOwogICAgIAotICAgIHBhdGNo
QnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbkNvbXBpbGVPU1JFeGl0KSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25Q
dHJUYWc+KGZ1bmN0aW9uQ2FsbCwgb3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQpOwogCiAgICAgcmV0
dXJuIEZJTkFMSVpFX1RIVU5LKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1Ig
ZXhpdCBnZW5lcmF0aW9uIHRodW5rIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCmluZGV4IDYyYTIwZTFm
NmE0Yy4uZGJjMGIxYTEzOWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGlzYXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcApAQCAtMzQsOSArMzQsOSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2
b2lkKiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRT
dHJlYW0mIG91dCkKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERpc2Fzc2Vt
Ymx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIHZvaWQqIGNvZGVTdGFydCwgdm9pZCog
Y29kZUVuZCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewotICAgIHVp
bnQzMl90KiBjdXJyZW50UEMgPSBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dWlu
dDMyX3QqPigpOworICAgIHVpbnQzMl90KiBjdXJyZW50UEMgPSBjb2RlUHRyLnVudGFnZ2VkUHRy
PHVpbnQzMl90Kj4oKTsKICAgICBzaXplX3QgYnl0ZUNvdW50ID0gc2l6ZTsKIAogICAgIHVpbnQz
Ml90KiBhcm1Db2RlU3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3QqPihjb2RlU3RhcnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9DYXBzdG9uZURp
c2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0NhcHN0
b25lRGlzYXNzZW1ibGVyLmNwcAppbmRleCBmNDkwZTQ2MWE3NDkuLjE2YmRmZDFlNWE0MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9DYXBzdG9uZURpc2Fz
c2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9DYXBz
dG9uZURpc2Fzc2VtYmxlci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlz
YXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCosIHZvaWQqLCBjb25z
dCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCitib29sIHRyeVRvRGlzYXNzZW1ibGUo
Y29uc3QgQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2
b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKICAg
ICBjc2ggaGFuZGxlOwogICAgIGNzX2luc24qIGluc3RydWN0aW9uczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAppbmRleCAxZWU2
ZDFlZGQ1NTQuLmNlZTcxZDY0MTFmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcApAQCAtNTUsMTIgKzU1LDEyIEBAIHN0YXRp
YyBMYWJlbE1hcCYgZW5zdXJlTGFiZWxNYXAoKSBXVEZfUkVRVUlSRVNfTE9DSyhsYWJlbE1hcExv
Y2spCiAKIH0gLy8gbmFtZXNwYWNlIERpc2Fzc2VtYmxlcgogCi12b2lkIGRpc2Fzc2VtYmxlKGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNp
emVfdCBzaXplLCB2b2lkKiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHBy
ZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK3ZvaWQgZGlzYXNzZW1ibGUoY29uc3QgQ29kZVB0cjxE
aXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lkKiBjb2RlU3RhcnQs
IHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsK
ICAgICBpZiAodHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCBjb2RlU3RhcnQsIGNvZGVF
bmQsIHByZWZpeCwgb3V0KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG91dC5wcmludGYo
IiVzZGlzYXNzZW1ibHkgbm90IGF2YWlsYWJsZSBmb3IgcmFuZ2UgJXAuLi4lcFxuIiwgcHJlZml4
LCBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSwgY29kZVB0ci51bnRhZ2dlZEV4
ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpICsgc2l6ZSk7CisgICAgb3V0LnByaW50ZigiJXNkaXNh
c3NlbWJseSBub3QgYXZhaWxhYmxlIGZvciByYW5nZSAlcC4uLiVwXG4iLCBwcmVmaXgsIGNvZGVQ
dHIudW50YWdnZWRQdHIoKSwgY29kZVB0ci51bnRhZ2dlZFB0cjxjaGFyKj4oKSArIHNpemUpOwog
fQogCiBuYW1lc3BhY2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fz
c2VtYmxlci9EaXNhc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvRGlzYXNzZW1ibGVyLmgKaW5kZXggYzQ2ZmVkNWRjZTY4Li42MGZiNjM2YmY0OTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaApA
QCAtMjgsMzEgKzI4LDMxIEBACiAjaW5jbHVkZSAiSlNDUHRyVGFnLmgiCiAjaW5jbHVkZSAiSlNF
eHBvcnRNYWNyb3MuaCIKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9Db2Rl
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI7CiB0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjsKIAogI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCi1ib29sIHRyeVRvRGlzYXNz
ZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNp
emVfdCwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2RlRW5kLCBjb25zdCBjaGFyKiBwcmVmaXgs
IFByaW50U3RyZWFtJik7Citib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgQ29kZVB0cjxEaXNh
c3NlbWJseVB0clRhZz4mLCBzaXplX3QsIHZvaWQqIGNvZGVTdGFydCwgdm9pZCogY29kZUVuZCwg
Y29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYpOwogI2Vsc2UKLWlubGluZSBib29sIHRy
eVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRy
VGFnPiYsIHNpemVfdCwgdm9pZCosIHZvaWQqLCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKQor
aW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERpc2Fzc2VtYmx5UHRy
VGFnPiYsIHNpemVfdCwgdm9pZCosIHZvaWQqLCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KICNlbmRpZgogCi1pbmxpbmUgYm9vbCB0cnlUb0Rpc2Fz
c2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNv
ZGUsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCitp
bmxpbmUgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IENvZGVQdHI8RGlzYXNzZW1ibHlQdHJU
YWc+JiBjb2RlLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYg
b3V0KQogewogICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlKGNvZGUsIHNpemUsIG51bGxwdHIs
IG51bGxwdHIsIHByZWZpeCwgb3V0KTsKIH0KIAogLy8gUHJpbnRzIGVpdGhlciB0aGUgZGlzYXNz
ZW1ibHksIG9yIGEgbGluZSBvZiB0ZXh0IGluZGljYXRpbmcgdGhhdCBkaXNhc3NlbWJseSBmYWls
ZWQgYW5kCiAvLyB0aGUgcmFuZ2Ugb2YgbWFjaGluZSBjb2RlIGFkZHJlc3Nlcy4KLXZvaWQgZGlz
YXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYs
IHNpemVfdCwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2RlRW5kLCBjb25zdCBjaGFyKiBwcmVm
aXgsIFByaW50U3RyZWFtJiBvdXQpOwordm9pZCBkaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERp
c2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVfdCwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2RlRW5k
LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpOwogCiAvLyBBc3luY2hyb25v
dXMgZGlzYXNzZW1ibHkuIFRoaXMgaGFwcGVucyBvbiBhbm90aGVyIHRocmVhZCwgYW5kIGNhbGxz
IHRoZSBwcm92aWRlZAogLy8gY2FsbGJhY2sgd2hlbiB0aGUgZGlzYXNzZW1ibHkgaXMgZG9uZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvUklTQ1Y2NERp
c2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1JJU0NW
NjREaXNhc3NlbWJsZXIuY3BwCmluZGV4IDc0MTA1N2I2Y2UyZS4uNmE3Yzc3NmU0ZDAzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1JJU0NWNjREaXNhc3Nl
bWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvUklTQ1Y2
NERpc2Fzc2VtYmxlci5jcHAKQEAgLTYzMyw3ICs2MzMsNyBAQCBDU3RyaW5nIGRpc2Fzc2VtYmxl
T3Bjb2RlKHVpbnQzMl90ICpwYykKIAogfSAvLyBuYW1lc3BhY2UgUklTQ1Y2NERpc2Fzc2VtYmxl
cgogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERp
c2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIHZvaWQqLCB2b2lkKiwgY29u
c3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxl
KGNvbnN0IENvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwg
dm9pZCosIHZvaWQqLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAg
ICAgdWludDMyX3QqIGN1cnJlbnRQQyA9IGNvZGVQdHIudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVz
czx1aW50MzJfdCo+KCk7CiAgICAgc2l6ZV90IGJ5dGVDb3VudCA9IHNpemU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHAK
aW5kZXggMzQ5ZDM2ZGUzODM2Li5hMDlmNGQ1Nzk3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHAKQEAgLTMzLDcg
KzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXpl
X3Qgc2l6ZSwgdm9pZCosIHZvaWQqLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBv
dXQpCitib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgQ29kZVB0cjxEaXNhc3NlbWJseVB0clRh
Zz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqIHByZWZp
eCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICBaeWRpc0RlY29kZXIgZGVjb2RlcjsKICAgICBa
eWRpc0RlY29kZXJJbml0KCZkZWNvZGVyLCBaWURJU19NQUNISU5FX01PREVfTE9OR182NCwgWllE
SVNfQUREUkVTU19XSURUSF82NCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZG9taml0L0RPTUpJVFNpZ25hdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RvbWppdC9E
T01KSVRTaWduYXR1cmUuaAppbmRleCBkMzFmYjRjYmI1YTEuLmI1N2JiYTQyNTViNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RvbWppdC9ET01KSVRTaWduYXR1cmUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZG9taml0L0RPTUpJVFNpZ25hdHVyZS5oCkBAIC0yOCw3
ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiRE9NSklURWZmZWN0
LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvQ29kZVB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERPTUpJVCB7CiAKQEAgLTQwLDExICs0MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERPTUpJVCB7CiAKIGNsYXNzIFNpZ25hdHVyZSB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgRnVu
Y3Rpb25QdHIgPSBXVEY6OkZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz47CisgICAgdXNpbmcg
Q29kZVB0ciA9IFdURjo6Q29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+OwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIGNvbnN0ZXhwciBTaWduYXR1cmUoRnVuY3Rpb25Q
dHIgZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywg
RWZmZWN0IGVmZmVjdCwgU3BlY3VsYXRlZFR5cGUgcmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQotICAgICAgICA6IGZ1bmN0aW9uV2l0aG91dFR5cGVDaGVja1B0cihmdW5jdGlvbldpdGhv
dXRUeXBlQ2hlY2suZ2V0KCkpCisgICAgY29uc3RleHByIFNpZ25hdHVyZShDb2RlUHRyIGZ1bmN0
aW9uV2l0aG91dFR5cGVDaGVjaywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEVmZmVjdCBl
ZmZlY3QsIFNwZWN1bGF0ZWRUeXBlIHJlc3VsdCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAg
ICAgICAgOiBmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2tQdHIoZnVuY3Rpb25XaXRob3V0VHlwZUNo
ZWNrLnVudHlwZWRGdW5jKCkpCiAgICAgICAgICwgY2xhc3NJbmZvKGNsYXNzSW5mbykKICAgICAg
ICAgLCByZXN1bHQocmVzdWx0KQogICAgICAgICAsIGFyZ3VtZW50cyB7c3RhdGljX2Nhc3Q8U3Bl
Y3VsYXRlZFR5cGU+KGFyZ3VtZW50cykuLi59CkBAIC01Myw5ICs1Myw5IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogCi0gICAgRnVuY3Rpb25QdHIgZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrKCkg
Y29uc3QgeyByZXR1cm4gRnVuY3Rpb25QdHIoZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrUHRyKTsg
fQorICAgIENvZGVQdHIgZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrKCkgY29uc3QgeyByZXR1cm4g
Q29kZVB0cihmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2tQdHIpOyB9CiAKLSAgICBjb25zdCBXVEZf
VlRCTF9GVU5DUFRSX1BUUkFVVEgoRE9NSklUU2lnbmF0dXJlKSBGdW5jdGlvblB0cjo6UHRyIGZ1
bmN0aW9uV2l0aG91dFR5cGVDaGVja1B0cjsKKyAgICBjb25zdCBXVEZfVlRCTF9GVU5DUFRSX1BU
UkFVVEgoRE9NSklUU2lnbmF0dXJlKSBDb2RlUHRyOjpVbnR5cGVkRnVuYyBmdW5jdGlvbldpdGhv
dXRUeXBlQ2hlY2tQdHI7CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjb25zdCBjbGFzc0luZm87CiAg
ICAgY29uc3QgU3BlY3VsYXRlZFR5cGUgcmVzdWx0OwogICAgIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IGFyZ3VtZW50c1tKU0NfRE9NSklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCmluZGV4IDdhZTExMjlhMGNmYy4uMjIzN2E2
M2E1MDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
Niw3ICs3Niw3IEBAIHZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50
KENvZGVSZWY8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludCkKICAgICBtX2FyaXR5Q2hlY2tFbnRy
eXBvaW50ID0gZW50cnlwb2ludDsKIH0KIAotSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eUNoZWNrKQorQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9k
ZSBhcml0eUNoZWNrKQogewogICAgIHN3aXRjaCAoYXJpdHlDaGVjaykgewogICAgIGNhc2UgQXJp
dHlDaGVja05vdFJlcXVpcmVkOgpAQCAtOTEsOSArOTEsOSBAQCBKSVRDb2RlOjpDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFyaXR5
Q2hlYwogdm9pZCogSklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zm
c2V0KQogewogICAgIGlmICghb2Zmc2V0KQotICAgICAgICByZXR1cm4gbV9hZGRyZXNzRm9yQ2Fs
bC5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXR1cm4gbV9hZGRyZXNzRm9yQ2FsbC50
YWdnZWRQdHIoKTsKIAotICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0gbV9hZGRyZXNzRm9y
Q2FsbC51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgIGNoYXIqIGV4ZWN1
dGFibGVBZGRyZXNzID0gbV9hZGRyZXNzRm9yQ2FsbC51bnRhZ2dlZFB0cjxjaGFyKj4oKTsKICAg
ICByZXR1cm4gdGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihleGVjdXRhYmxlQWRkcmVzcyArIG9m
ZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6
eVNsb3dQYXRoQ2FsbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1Bh
dGhDYWxsLmgKaW5kZXggNzRmZDZlYzdiNzJmLi4xNTFhMzIwNWViZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCkBAIC0zOCw3ICszOCw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
UmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KIFJlZjxMYXp5U2xvd1BhdGg6
OkdlbmVyYXRvcj4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgVk0mIHZtLCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1l
bnRUeXBlcy4uLiBhcmd1bWVudHMpCisgICAgVk0mIHZtLCBDb2RlUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50
cykKIHsKICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVHZW5lcmF0b3IoCiAgICAgICAg
IFs9LCAmdm1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TGluay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCmluZGV4IGY3
ZDNhNTNlNDliZC4uMTUwOGFmOTZiNTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGlu
ay5jcHAKQEAgLTEwMCw5ICsxMDAsOSBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAg
ICAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2Fs
bEFyaXR5Q2hlY2ssIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY29kZUJsb2NrLT5pc0Nv
bnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2Fs
bEFyaXR5Q2hlY2spKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbms8T3BlcmF0aW9uUHRy
VGFnPihjYWxsQXJpdHlDaGVjaywgY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRp
b25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2spOwogICAgICAg
ICAgICAgbGlua0J1ZmZlci0+bGluayhqdW1wVG9FeGNlcHRpb25IYW5kbGVyLCBDb2RlTG9jYXRp
b25MYWJlbCh2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Ci0gICAgICAgICAgICBsaW5r
QnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5l
cmF0b3IpLmNvZGUoKS50b0Z1bmN0aW9uUHRyKCkpOworICAgICAgICAgICAgbGlua0J1ZmZlci0+
bGluayhjYWxsQXJpdHlGaXh1cCwgdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5j
b2RlKCkpOwogICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhtYWluUGF0aEp1bXBzLCBzdGF0
ZS5nZW5lcmF0ZWRGdW5jdGlvbik7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDQ3Y2MzZDA4ZDI4My4uYTcwYWU0NmM2
ZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CkBAIC0zMjUsOCArMzI1LDggQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayh0
aHJvd0NhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVGhyb3dTdGFj
a092ZXJmbG93RXJyb3IpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJU
YWc+KHRocm93Q2FsbCwgb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsLCBvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVy
RnJvbUNhbGxlckZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICB9KTsKQEAgLTI0NTksNyArMjQ1OSw3IEBAIHByaXZhdGU6CiAj
aWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNs
b3dQYXRoRW5kID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhF
bmQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNs
b3dQYXRoU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRo
RW5kKS50YWdnZWRQdHI8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhT
dGFydCkudGFnZ2VkUHRyPGNoYXIqPigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAjZW5kaWYKQEAgLTI0NzMsNyArMjQ3Myw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVFbmQgPSBqaXQubGFi
ZWwoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGlubGluZUVuZCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigp
OworICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihpbmxpbmVFbmQpLnRhZ2dlZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihp
bmxpbmVTdGFydCkudGFnZ2VkUHRyPGNoYXIqPigpOwogICAgICAgICAgICAgICAgICAgICBtYXRo
SUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKICAgICAgICAgICAgICAgICB9KTsKICNl
bmRpZgpAQCAtMjU3MCw3ICsyNTcwLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBqaXQubGFi
ZWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
c2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkuZXhlY3V0YWJsZUFkZHJl
c3M8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkuZXhlY3V0
YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLnRhZ2dlZFB0cjxjaGFy
Kj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS50YWdnZWRQdHI8Y2hh
cio+KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRlZENv
ZGVTaXplICs9IHNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICNlbmRpZgpAQCAt
MjU4NCw3ICsyNTg0LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAg
ICAgICAgICAgICAgICBhdXRvIGlubGluZUVuZCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5l
RW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihp
bmxpbmVTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkudGFnZ2Vk
UHRyPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0KS50YWdnZWRQ
dHI8Y2hhcio+KCk7CiAgICAgICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2Rl
U2l6ZSArPSBzaXplOwogICAgICAgICAgICAgICAgIH0pOwogI2VuZGlmCkBAIC0xNTc1MCwxMyAr
MTU3NTAsMTMgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBhdXRvIGZ1bmN0
aW9uID0gc2lnbmF0dXJlLT5mdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2soKTsKICAgICAgICAgc3dp
dGNoIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgewogICAgICAgICBjYXNlIDE6Ci0gICAg
ICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR1A+KGZ1bmN0aW9uLmdldCgpKSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgb3Bl
cmFuZHNbMF0pOworICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCByZWludGVycHJl
dF9jYXN0PEpfSklUT3BlcmF0aW9uX0dQPihmdW5jdGlvbi51bnR5cGVkRnVuYygpKSwgd2Vha1Bv
aW50ZXIoZ2xvYmFsT2JqZWN0KSwgb3BlcmFuZHNbMF0pOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgcmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HUFA+KGZ1bmN0aW9uLmdldCgpKSwgd2Vha1BvaW50
ZXIoZ2xvYmFsT2JqZWN0KSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgcmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9H
UFA+KGZ1bmN0aW9uLnVudHlwZWRGdW5jKCkpLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBv
cGVyYW5kc1swXSwgb3BlcmFuZHNbMV0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgMzoKLSAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgcmVpbnRlcnByZXRfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HUFBQPihmdW5jdGlvbi5nZXQoKSksIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pOworICAgICAg
ICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCByZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dQUFA+KGZ1bmN0aW9uLnVudHlwZWRGdW5jKCkpLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QpLCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTE1Nzc4LDEwICsxNTc3OCwxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklO
R1NfRU5ECiAgICAgICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgbV9vdXQuYWJz
b2x1dGUoJnZtKCkudG9wQ2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNl
SklUQ2FnZSgpKSB7CiAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSgKLSAgICAgICAgICAgICAg
ICAgICAgdm1DYWxsKEludDY0LCB2bUVudHJ5Q3VzdG9tR2V0dGVyLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdEludFB0ciht
X2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlm
aWVyTnVtYmVyXSksIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+Y2FsbERPTUdldHRlckRhdGEo
KS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgdm1DYWxsKEludDY0LCB2bUVudHJ5Q3VzdG9tR2V0dGVyLCB3ZWFrUG9pbnRl
cihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdElu
dFB0cihtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5p
ZGVudGlmaWVyTnVtYmVyXSksIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+Y2FsbERPTUdldHRl
ckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXIudGFnZ2VkUHRyKCkpKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRy
VGFnPiBnZXR0ZXIgPSBtX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmN1c3RvbUFjY2Vzc29y
R2V0dGVyOwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gYnlw
YXNzZWRGdW5jdGlvbiA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxPcGVyYXRpb25QdHJUYWc+KFdU
Rjo6dGFnTmF0aXZlQ29kZVB0ckltcGw8T3BlcmF0aW9uUHRyVGFnPihXVEY6OnVudGFnTmF0aXZl
Q29kZVB0ckltcGw8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KGdldHRlci5leGVjdXRhYmxlQWRkcmVz
cygpKSkpLnRvRnVuY3Rpb25QdHIoKTsKKyAgICAgICAgICAgICAgICBDb2RlUHRyPEN1c3RvbUFj
Y2Vzc29yUHRyVGFnPiBnZXR0ZXIgPSBtX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmN1c3Rv
bUFjY2Vzc29yR2V0dGVyOworICAgICAgICAgICAgICAgIENvZGVQdHI8T3BlcmF0aW9uUHRyVGFn
PiBieXBhc3NlZEZ1bmN0aW9uKFdURjo6dGFnTmF0aXZlQ29kZVB0ckltcGw8T3BlcmF0aW9uUHRy
VGFnPihXVEY6OnVudGFnTmF0aXZlQ29kZVB0ckltcGw8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KGdl
dHRlci50YWdnZWRQdHIoKSkpKTsKICAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJ
bnQ2NCwgYnlwYXNzZWRGdW5jdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5pZGVudGlmaWVy
cygpW21fbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+aWRlbnRpZmllck51bWJlcl0pKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMDUyMiw3ICsyMDUyMiw3IEBA
IElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICBMVmFsdWUgdm1DYWxsKExUeXBlIHR5cGUs
IE9wZXJhdGlvblR5cGUgZnVuY3Rpb24sIEFyZ3MmJi4uLiBhcmdzKQogICAgIHsKICAgICAgICAg
c3RhdGljX2Fzc2VydCghc3RkOjppc19zYW1lPE9wZXJhdGlvblR5cGUsIExWYWx1ZT46OnZhbHVl
KTsKLSAgICAgICAgaWYgY29uc3RleHByICghc3RkOjppc19zYW1lX3Y8RnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPiwgT3BlcmF0aW9uVHlwZT4pCisgICAgICAgIGlmIGNvbnN0ZXhwciAoIXN0
ZDo6aXNfc2FtZV92PENvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPiwgT3BlcmF0aW9uVHlwZT4pCiAg
ICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+Ojpj
Q2FsbEFyaXR5KCkgPT0gc2l6ZW9mLi4uKEFyZ3MpLCAiU2FuaXR5IGNoZWNrIik7CiAgICAgICAg
IGNhbGxQcmVmbGlnaHQoKTsKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwodHlw
ZSwgbV9vdXQub3BlcmF0aW9uKGZ1bmN0aW9uKSwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggYzUyMTA4
MDg5YTJkLi5mMTgzNTgzMzc1ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RW50cnkuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAg
ICAKICAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7CiAgICAgCi0g
ICAgdm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90
UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCogcmVzdWx0ID0gZW50cnlD
b2RlLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpLnRhZ2dlZFB0cigpOwog
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBFbnRyeSB3aWxsIHN1
Y2NlZWQsIGdvaW5nIHRvIGFkZHJlc3MgIiwgUmF3UG9pbnRlcihyZXN1bHQpKTsKIAogICAgIC8v
IEF0IHRoaXMgcG9pbnQsIHdlJ3JlIGNvbW1pdHRlZCB0byB0cmlnZ2VyaW5nIGFuIE9TUiBlbnRy
eSBpbW1lZGlhdGVseSBhZnRlciB3ZSByZXR1cm4uIEhlbmNlLCBpdCBpcyBzYWZlIHRvIG1vZGlm
eSBzdGFjayBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwCmluZGV4IDA4MjFkNjhhYjllYi4uNjFkMjBlZTE5MmE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgx
LDcgKzY4MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21waWxlRlRM
T1NSRXhpdCwgdm9pZCosIChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wKAogICAgICAgICBleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJs
b2NrKSwgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRXhpdFB0clRhZz4oZXhpdC5tX2NvZGUuY29kZSgp
KSk7CiAgICAgCi0gICAgcmV0dXJuIGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgIHJldHVybiBleGl0Lm1fY29kZS5jb2RlKCkudGFnZ2VkUHRyKCk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCmluZGV4IDg2MGVjYjczNWI0MS4uMTc4NTI5MzA2NGYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKQEAgLTc0Nyw3ICs3NDcsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGlsZUZUTExhenlTbG93UGF0
aCwgdm9pZCosIChDYWxsRnJhbWUqIGNhbAogICAgIExhenlTbG93UGF0aCYgbGF6eVNsb3dQYXRo
ID0gKmppdENvZGUtPmxhenlTbG93UGF0aHNbaW5kZXhdOwogICAgIGxhenlTbG93UGF0aC5nZW5l
cmF0ZShjb2RlQmxvY2spOwogCi0gICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkuY29k
ZSgpLnRhZ2dlZFB0cigpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT05fV0lUSF9BVFRS
SUJVVEVTKG9wZXJhdGlvblJlcG9ydEJvdW5kc0NoZWNrRWxpbWluYXRpb25FcnJvckFuZENyYXNo
LCBOT19SRVRVUk5fRFVFX1RPX0NSQVNILCB2b2lkLCAoaW50cHRyX3QgY29kZUJsb2NrQXNJbnRQ
dHIsIGludDMyX3Qgbm9kZUluZGV4LCBpbnQzMl90IGNoaWxkMUluZGV4LCBpbnQzMl90IGNoaWxk
MkluZGV4LCBpbnQzMl90IGNoZWNrZWRJbmRleCwgaW50MzJfdCBib3VuZHMpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggZWQ4ZmY3M2UxYTNhLi41ZjQ1N2M0NjQyZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwNSw3ICs0MDUsNyBA
QCBwdWJsaWM6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4NDMyNAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KICAgICBMVmFsdWUg
b3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBmdW5jdGlvbikgeyByZXR1cm4gY29uc3RJbnRQdHIodGFn
Q0Z1bmN0aW9uUHRyPHZvaWQqLCBPcGVyYXRpb25QdHJUYWc+KGZ1bmN0aW9uKSk7IH0KLSAgICBM
VmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pIHsg
cmV0dXJuIGNvbnN0SW50UHRyKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOyB9CisgICAg
TFZhbHVlIG9wZXJhdGlvbihDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pIHsgcmV0
dXJuIGNvbnN0SW50UHRyKGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsgfQogCiAgICAgdm9pZCBqdW1w
KExCYXNpY0Jsb2NrKTsKICAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNC
bG9jayB0YWtlbiwgV2VpZ2h0IHRha2VuV2VpZ2h0LCBMQmFzaWNCbG9jayBub3RUYWtlbiwgV2Vp
Z2h0IG5vdFRha2VuV2VpZ2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsLmNwcAppbmRleCBlZGNlZjlmNmEzZGIuLjA3MTNjZjlhMzJlOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcApAQCAtMTE0LDcgKzEx
NCw3IEBAIFNsb3dQYXRoQ2FsbENvbnRleHQ6On5TbG93UGF0aENhbGxDb250ZXh0KCkKICAgICBt
X2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVk
KSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKLVNsb3dQYXRoQ2Fs
bEtleSBTbG93UGF0aENhbGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gY2FsbFRhcmdldCkgY29uc3QKK1Nsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENh
bGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFy
Z2V0KSBjb25zdAogewogICAgIHVpbnQ4X3QgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJ
ZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCA9IDA7CiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OmNsb2JiZXJBbGxSZWdzSW5GVExJQ1Nsb3dQYXRoKCkpKQpAQCAtMTMwLDcgKzEzMCw3IEBAIFNs
b3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KENDYWxsSGVs
cGVyczo6QWRkcmVzcyBhZGRyZXNzCiAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleShtX3RodW5r
U2F2ZVNldCwgbnVsbHB0ciwgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJp
bmdDaGVja0lzRW5hYmxlZCwgbV9vZmZzZXQsIGFkZHJlc3Mub2Zmc2V0KTsKIH0KIAotU2xvd1Bh
dGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KQorU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENv
bnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJn
ZXQpCiB7CiAgICAgU2xvd1BhdGhDYWxsS2V5IGtleSA9IGtleVdpdGhUYXJnZXQoY2FsbFRhcmdl
dCk7CiAgICAgU2xvd1BhdGhDYWxsIHJlc3VsdCA9IFNsb3dQYXRoQ2FsbChtX2ppdC5jYWxsKEpJ
VFRodW5rUHRyVGFnKSwga2V5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQ
YXRoQ2FsbC5oCmluZGV4IGNmOTYxNmUzYmJlNi4uYzQ3ZDlmYWRlNTA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKQEAgLTU5LDExICs1OSwxMSBAQCBw
dWJsaWM6CiAKICAgICAvLyBOT1RFOiBUaGUgY2FsbCB0aGF0IHRoaXMgcmV0dXJucyBpcyBhbHJl
YWR5IGdvaW5nIHRvIGJlIGxpbmtlZCBieSB0aGUgSklUIHVzaW5nIGFkZExpbmtUYXNrKCksCiAg
ICAgLy8gc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgeW91IHRvIGxpbmsgaXQgeW91cnNlbGYuCi0g
ICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxsKFZNJiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBjYWxsVGFyZ2V0KTsKKyAgICBTbG93UGF0aENhbGwgbWFrZUNhbGwoVk0mLCBDb2RlUHRyPENG
dW5jdGlvblB0clRhZz4gY2FsbFRhcmdldCk7CiAgICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxsKFZN
JiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKTsKIAogcHJpdmF0ZToKLSAgICBTbG93UGF0aENhbGxL
ZXkga2V5V2l0aFRhcmdldChGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQp
IGNvbnN0OworICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlXaXRoVGFyZ2V0KENvZGVQdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KSBjb25zdDsKICAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0
aFRhcmdldChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MpIGNvbnN0OwogICAgIAogICAgIFJlZ2lzdGVy
U2V0IG1fYXJndW1lbnRSZWdpc3RlcnM7CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRp
b24oCiAgICAgVk0mIHZtLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxI
ZWxwZXJzJiBqaXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKLSAg
ICBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BS
LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICBDb2RlUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRHUFIsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRz
KQogewogICAgIFNsb3dQYXRoQ2FsbCBjYWxsOwogICAgIHsKQEAgLTk2LDcgKzk2LDcgQEAgU2xv
d1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5
cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgVk0mIHZtLCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCwKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJn
ZXQsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRH
UFIsCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBDb2RlUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRHUFIsCiAgICAgQXJndW1l
bnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKGNhbGxTaXRlSW5kZXgpIHsKQEAgLTEx
Miw3ICsxMTIsNyBAQCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKFN0
YXRlJiwgQ29kZU9yaWdpbik7CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgog
U2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3Vt
ZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2Vw
dGlvblRhcmdldCwgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVz
dWx0LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKIHsKICAgICByZXR1cm4gY2FsbE9wZXJh
dGlvbigKICAgICAgICAgc3RhdGUudm0oKSwgdXNlZFJlZ2lzdGVycywgaml0LCBjYWxsU2l0ZUlu
ZGV4Rm9yQ29kZU9yaWdpbihzdGF0ZSwgY29kZU9yaWdpbiksIGV4Y2VwdGlvblRhcmdldCwgZnVu
Y3Rpb24sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRo
Q2FsbEtleS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtl
eS5jcHAKaW5kZXggMDgzYjM1MzZhNThlLi5hMWIyYTRkNTFhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdm9pZCBTbG93UGF0aENhbGxL
ZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoIjx1c2Vk
UmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCwg
IiwgaW5kaXJlY3RPZmZzZXQgPSAiLCBtX2luZGlyZWN0T2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0g
IiwgUmF3UG9pbnRlcihtX2NhbGxUYXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIG91
dC5wcmludCgiPHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICIsIG9mZnNldCA9
ICIsIG1fb2Zmc2V0LCAiLCBpbmRpcmVjdE9mZnNldCA9ICIsIG1faW5kaXJlY3RPZmZzZXQsICIs
IGNhbGxUYXJnZXQgPSAiLCBSYXdQb2ludGVyKG1fY2FsbFRhcmdldC50YWdnZWRQdHIoKSkpOwog
ICAgIGlmIChPcHRpb25zOjpjbG9iYmVyQWxsUmVnc0luRlRMSUNTbG93UGF0aCgpKQogICAgICAg
ICBvdXQucHJpbnQoIiwgYXJndW1lbnRSZWdpc3RlcnMgPSAiLCBhcmd1bWVudFJlZ2lzdGVyc0lm
Q2xvYmJlcmluZ0NoZWNrSXNFbmFibGVkKCkpOwogICAgIG91dC5wcmludCgiPiIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgKaW5kZXggMDlhYjhh
ZDFjYmI5Li42OTgwZTVlZmE3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGxLZXkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogCiAgICAgU2xv
d1BhdGhDYWxsS2V5KCkgPSBkZWZhdWx0OwogICAgIAotICAgIFNsb3dQYXRoQ2FsbEtleShjb25z
dCBSZWdpc3RlclNldCYgc2V0LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJn
ZXQsIHVpbnQ4X3QgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVj
a0lzRW5hYmxlZCwgc2l6ZV90IG9mZnNldCwgaW50MzJfdCBpbmRpcmVjdE9mZnNldCkKKyAgICBT
bG93UGF0aENhbGxLZXkoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCwgQ29kZVB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGNhbGxUYXJnZXQsIHVpbnQ4X3QgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJ
ZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCwgc2l6ZV90IG9mZnNldCwgaW50MzJfdCBpbmRpcmVj
dE9mZnNldCkKICAgICAgICAgOiBtX251bWJlck9mVXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZDbG9i
YmVyaW5nQ2hlY2tJc0VuYWJsZWQobnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2Ji
ZXJpbmdDaGVja0lzRW5hYmxlZCkKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgICAg
ICwgbV91c2VkUmVnaXN0ZXJzKHNldCkKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQob2Zmc2V0ID09IG1fb2Zmc2V0KTsKICAgICB9CiAgICAgCi0gICAgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KCkgY29uc3QKKyAgICBDb2RlUHRyPE9wZXJh
dGlvblB0clRhZz4gY2FsbFRhcmdldCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAodHlwZSgp
ID09IFR5cGU6OkRpcmVjdCkKICAgICAgICAgICAgIHJldHVybiBtX2NhbGxUYXJnZXQ7CkBAIC05
Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAg
IFNsb3dQYXRoQ2FsbEtleSB3aXRoQ2FsbFRhcmdldChGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGNhbGxUYXJnZXQpCisgICAgU2xvd1BhdGhDYWxsS2V5IHdpdGhDYWxsVGFyZ2V0KENvZGVQ
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIFNs
b3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0ZXJzKCksIGNhbGxUYXJnZXQsIG51bWJlck9mVXNlZEFy
Z3VtZW50UmVnaXN0ZXJzSWZDbG9iYmVyaW5nQ2hlY2tJc0VuYWJsZWQoKSwgb2Zmc2V0KCksIGlu
ZGlyZWN0T2Zmc2V0KCkpOwogICAgIH0KQEAgLTEzNSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICAvLyBtX251bWJlck9mVXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZDbG9iYmVyaW5n
Q2hlY2tJc0VuYWJsZWQgaXMgaW50ZW50aW9uYWxseSBub3QgaW5jbHVkZWQgYmVjYXVzZSBpdCB3
aWxsIGFsd2F5cyBiZSAwCiAgICAgICAgIC8vIHVubGVzcyBPcHRpb25zOjpjbG9iYmVyQWxsUmVn
c0luRlRMSUNTbG93UGF0aCgpIGlzIHNldCwgYW5kIE9wdGlvbnM6OmNsb2JiZXJBbGxSZWdzSW5G
VExJQ1Nsb3dQYXRoKCkgaXMgb25seSBzZXQgaW4gZGVidWdnaW5nIHVzZSBjYXNlcy4KLSAgICAg
ICAgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKGNhbGxUYXJnZXQoKS5leGVjdXRhYmxlQWRk
cmVzcygpKSArIG1fb2Zmc2V0ICsgbV91c2VkUmVnaXN0ZXJzLmhhc2goKSArIGluZGlyZWN0T2Zm
c2V0KCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIFB0
ckhhc2g8dm9pZCo+OjpoYXNoKGNhbGxUYXJnZXQoKS50YWdnZWRQdHIoKSkgKyBtX29mZnNldCAr
IG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkgKyBpbmRpcmVjdE9mZnNldCgpICsgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHR5cGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTQ1LDcgKzE0NSw3IEBA
IHByaXZhdGU6CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlw
ZT4obV90eXBlKTsgfQogCiAgICAgdW5pb24gewotICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+IG1fY2FsbFRhcmdldCB7IH07CisgICAgICAgIENvZGVQdHI8T3BlcmF0aW9uUHRy
VGFnPiBtX2NhbGxUYXJnZXQgeyB9OwogICAgICAgICBpbnQzMl90IG1faW5kaXJlY3RPZmZzZXQ7
CiAgICAgfTsKICAgICBzaXplX3QgbV9udW1iZXJPZlVzZWRBcmd1bWVudFJlZ2lzdGVyc0lmQ2xv
YmJlcmluZ0NoZWNrSXNFbmFibGVkIDogOCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVGh1bmtzLmNwcAppbmRleCAyMjE5YzE0NjIzMjEuLjRkNTZhNGExOTUwNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcApAQCAtNDYsNyArNDYsNyBAQCBlbnVtIGNs
YXNzIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgewogfTsKIAogc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJpY0dlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcigKLSAgICBWTSYgdm0sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZ2Vu
ZXJhdGlvbkZ1bmN0aW9uLCBQdHJUYWcgcmVzdWx0VGFnLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNp
Z25lZCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1l
bnQgZnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCkKKyAgICBWTSYgdm0sIENvZGVQ
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBnZW5lcmF0aW9uRnVuY3Rpb24sIFB0clRhZyByZXN1bHRUYWcs
IGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRT
dGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCBmcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVt
ZW50KQogewogICAgIEFzc2VtYmx5SGVscGVycyBqaXQobnVsbHB0cik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFRodW5rcy5oCmluZGV4IGVmN2E0MTE4NzFjNC4uM2ZhOWU4NzNlZWQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZ3VtZW50Pgogc3RydWN0IFRodW5rTWFwIHsKICAgICB0
eXBlZGVmIEtleVR5cGVBcmd1bWVudCBLZXlUeXBlOwogICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlU
eXBlLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBUb1RodW5rTWFwOwot
ICAgIHR5cGVkZWYgSGFzaE1hcDxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+
LCBLZXlUeXBlPiBGcm9tVGh1bmtNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPENvZGVQdHI8SklU
VGh1bmtQdHJUYWc+LCBLZXlUeXBlPiBGcm9tVGh1bmtNYXA7CiAgICAgCiAgICAgVG9UaHVua01h
cCBtX3RvVGh1bms7CiAgICAgRnJvbVRodW5rTWFwIG1fZnJvbVRodW5rOwpAQCAtNjcsNyArNjcs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlSWZOZWNl
c3NhcnkoCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci10eXBlbmFtZSBNYXBUeXBl
OjpLZXlUeXBlIGtleUZvclRodW5rKE1hcFR5cGUmIG1hcCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBwdHIpCit0eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRo
dW5rKE1hcFR5cGUmIG1hcCwgQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gcHRyKQogewogICAgIHR5
cGVuYW1lIE1hcFR5cGU6OkZyb21UaHVua01hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX2Zyb21U
aHVuay5maW5kKHB0cik7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtYXAubV9mcm9tVGh1
bmsuZW5kKCkpOwpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBnZW5l
cmF0ZUlmTmVjZXNzYXJ5KHZtLCBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENh
bGxUaHVua0dlbmVyYXRvcik7CiAgICAgfQogCi0gICAgU2xvd1BhdGhDYWxsS2V5IGtleUZvclNs
b3dQYXRoQ2FsbFRodW5rKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gcHRy
KQorICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlGb3JTbG93UGF0aENhbGxUaHVuayhDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiBwdHIpCiAgICAgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2Nr
IH07CiAgICAgICAgIHJldHVybiBrZXlGb3JUaHVuayhtX3Nsb3dQYXRoQ2FsbFRodW5rcywgcHRy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCmluZGV4IGExMTFlM2U4MzdiMS4uOTFhMzk2MmViN2VjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTEwNjIsNyArMTA2
Miw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09iamVjdCoKICAgICAgICAgQVNTRVJUKGppdENvZGUgPT0g
Y2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgp
LnB0cigpKTsKICAgICAgICAgcmVzdWx0ID0gaml0Q29kZS0+ZXhlY3V0ZSgmdm0sICZwcm90b0Nh
bGxGcmFtZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2Rl
KHZtRW50cnlUb05hdGl2ZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpKTsKKyAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6
ZGVjb2RlKHZtRW50cnlUb05hdGl2ZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24udGFnZ2VkUHRy
KCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CiAKQEAgLTExNDEsNyArMTE0MSw3IEBAIEpT
T2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNPCiAgICAgICAgIEFTU0VSVChqaXRDb2RlID09IGNvbnN0cnVj
dERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0
KCkucHRyKCkpOwogICAgICAgICByZXN1bHQgPSBqaXRDb2RlLT5leGVjdXRlKCZ2bSwgJnByb3Rv
Q2FsbEZyYW1lKTsKICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNv
ZGUodm1FbnRyeVRvTmF0aXZlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uLmV4ZWN1dGFi
bGVBZGRyZXNzKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CisgICAgICAgIHJlc3VsdCA9IEpT
VmFsdWU6OmRlY29kZSh2bUVudHJ5VG9OYXRpdmUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rp
b24udGFnZ2VkUHRyKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CiAKICAgICAgICAgaWYgKExJ
S0VMWSghdGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQuaXNPYmplY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5oCmluZGV4IDc0MDc2MjZhNzJkNi4uZjhkMGNiNTkzZDlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAt
MTA5LDcgKzEwOSw3IEBAIHVzaW5nIEpTT3JXYXNtSW5zdHJ1Y3Rpb24gPSBzdGQ6OnZhcmlhbnQ8
Y29uc3QgSlNJbnN0cnVjdGlvbiosIGNvbnN0IFdhc21JbnN0cnVjCiAgICAgICAgIGJvb2wgbV92
YWxpZCB7IGZhbHNlIH07CiAgICAgICAgIEhhbmRsZXJUeXBlIG1fdHlwZTsKICNpZiBFTkFCTEUo
SklUKQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4gbV9uYXRpdmVDb2RlOworICAgICAgICBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
IG1fbmF0aXZlQ29kZTsKICNlbmRpZgogCiAgICAgICAgIEpTT3JXYXNtSW5zdHJ1Y3Rpb24gbV9j
YXRjaFBDRm9ySW50ZXJwcmV0ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5jcHAKaW5kZXggNTNkOGQxZWE2YWU3Li44MGIwMTg5ZGE1OWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHQKICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hh
ZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7CiB9
CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBl
cnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQordm9pZCBDQ2FsbEhlbHBl
cnM6OmVtaXRKSVRDb2RlT3ZlcihDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29w
ZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2Ny
aXB0aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZW1pdENvZGUoaml0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCmluZGV4IGU4YWU5ZmMxODE0Mi4u
ODUxNjdhNjA1YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgK
QEAgLTkzOCw3ICs5MzgsNyBAQCBwdWJsaWM6CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50
ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAg
IHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIAotICAgIHN0YXRp
YyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0
clRhZz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiwgY29uc3QgY2hh
ciopOworICAgIHN0YXRpYyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihDb2RlUHRyPEpTSW50ZXJuYWxQ
dHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4sIGNvbnN0IGNo
YXIqKTsKIAogICAgIHZvaWQgZW1pdENUSVRodW5rUHJvbG9ndWUoYm9vbCByZXR1cm5BZGRyZXNz
QWxyZWFkeVRhZ2dlZCA9IGZhbHNlKTsKICAgICB2b2lkIGVtaXRDVElUaHVua0VwaWxvZ3VlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cAppbmRleCA4N2M3OWU2ZDk5MjMuLmMxMGViYzU3MzBhZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCkBAIC0yNjAsNyArMjYwLDcg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG8KICAgICBsb2NhbDIubGluaygmaml0KTsKICAgICBq
aXQucmV0KCk7CiAKLSAgICBhdXRvIHN0dWJCYXNlQ29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxMaW5rQnVmZmVyUHRyVGFnPih0YWdDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KHN0dWJC
YXNlKSk7CisgICAgYXV0byBzdHViQmFzZUNvZGVQdHIgPSBDb2RlUHRyPExpbmtCdWZmZXJQdHJU
YWc+KHRhZ0NvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4oc3R1YkJhc2UpKTsKICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoaml0LCBzdHViQmFzZUNvZGVQdHIsIHN0dWJTaXplLCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CiAgICAgLy8gV2UgZG9uJ3QgdXNlIEZJTkFMSVpFX0NPREUoKSBm
b3IgdHdvIHJlYXNvbnMuCiAgICAgLy8gVGhlIGZpcnN0IGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0
aGUgd3JpdGVhYmxlIGFkZHJlc3MsIGFzIGRpc2Fzc2VtYmxlZCBpbnN0cnVjdGlvbnMsCkBAIC0y
ODUsNyArMjg1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gQUxXQVlTX0lOTElORSBqaXRXcml0ZVRodW5rR2VuZXJhdG8KICAgICBmdW5jdGlvbkFzSW50
IC09IDE7CiAgICAgZnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbkFz
SW50KTsKICNlbmRpZgotICAgIGF1dG8gY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4odGFnQ0Z1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihmdW5jdGlvbikp
OworICAgIGF1dG8gY29kZVB0ciA9IENvZGVQdHI8SklUVGh1bmtQdHJUYWc+KHRhZ0NGdW5jdGlv
blB0cjxKSVRUaHVua1B0clRhZz4oZnVuY3Rpb24pKTsKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGNvZGVQ
dHIpOwogfQogI2VuZGlmIC8vIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQpA
QCAtMzM2LDcgKzMzNiw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6ZVNl
cGFyYXRlZFdYSGVhcHModm9pZCogc3R1YkJhc2UsIHNpemVfdCBzdHViCiAgICAgbWVtc2V0X3Mo
JndyaXRhYmxlQWRkciwgc2l6ZW9mKHdyaXRhYmxlQWRkciksIDAsIHNpemVvZih3cml0YWJsZUFk
ZHIpKTsKIAogI2lmIEVOQUJMRShTRVBBUkFURURfV1hfSEVBUCkKLSAgICBnX2pzY0NvbmZpZy5q
aXRXcml0ZVNlcGFyYXRlSGVhcHMgPSByZWludGVycHJldF9jYXN0PEpJVFdyaXRlU2VwYXJhdGVI
ZWFwc0Z1bmN0aW9uPih3cml0ZVRodW5rLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICBnX2pzY0NvbmZpZy5qaXRXcml0ZVNlcGFyYXRlSGVhcHMgPSByZWludGVycHJldF9jYXN0PEpJ
VFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uPih3cml0ZVRodW5rLmNvZGUoKS50YWdnZWRQdHIo
KSk7CiAjZW5kaWYKIH0KIApAQCAtNzU0LDcgKzc1NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CiAgICAgICAgICAgICAgICAgYXV0byBuZWFyVGFp
bENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKGppdCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihjdXJyZW50SXNs
YW5kKSwgaXNsYW5kU2l6ZUluQnl0ZXMsIExpbmtCdWZmZXI6OlByb2ZpbGU6Okp1bXBJc2xhbmQs
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBDb2RlUHRyPE5vUHRyVGFnPihjdXJyZW50SXNsYW5kKSwg
aXNsYW5kU2l6ZUluQnl0ZXMsIExpbmtCdWZmZXI6OlByb2ZpbGU6Okp1bXBJc2xhbmQsIEpJVENv
bXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSB1c2Ug
dGhpcyB0byBhcHBlYXNlIHRoZSBhc3NlcnRpb24gdGhhdCB3ZSdyZSBub3QgZmluYWxpemluZyBv
biBhIGNvbXBpbGVyIHRocmVhZC4gSW4gdGhpcyBzaXR1YXRpb24sIGl0J3MKQEAgLTEyODMsNyAr
MTI4Myw3IEBAIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlOjpjcmVhdGVJbXBsKHNpemVfdCBzaXplSW5CCiAgICAgdm9pZCoga2V5ID0gaml0X2hl
YXBfdHJ5X2FsbG9jYXRlKHNpemVJbkJ5dGVzKTsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlKE1lbW9yeVB0cjo6bWFrZUZyb21SYXdQb2ludGVyKGtleSksIGppdF9oZWFwX2dldF9zaXpl
KGtleSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUo
TWVtb3J5UHRyOjpmcm9tVW50YWdnZWRQdHIoa2V5KSwgaml0X2hlYXBfZ2V0X3NpemUoa2V5KSkp
OwogfQogCiBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlOjp+RXhlY3V0YWJsZU1lbW9yeUhhbmRsZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVNZW1vcnlI
YW5kbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZS5oCmluZGV4IDY4MGVkMGI1ZWYwYy4uNjIyMDM3M2IxYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVNZW1vcnlIYW5kbGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVNZW1vcnlIYW5kbGUuaApAQCAtMjYsNyArMjYs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBVU0UoTElCUEFTX0pJVF9IRUFQKSAmJiBFTkFCTEUo
SklUKQotI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yUHRyLmg+CisjaW5jbHVkZSA8d3RmL0Nv
ZGVQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNlbHNlCiAj
aW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaD4KQEAgLTM5LDcgKzM5LDcgQEAgY2xh
c3MgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxF
eGVjdXRhYmxlTWVtb3J5SGFuZGwKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hF
QVBfSURFTlRJRklFUihFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKTsKIAogcHVibGljOgotICAgIHVz
aW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8V1RGOjpIYW5kbGVNZW1vcnlQdHJUYWc+
OworICAgIHVzaW5nIE1lbW9yeVB0ciA9IENvZGVQdHI8V1RGOjpIYW5kbGVNZW1vcnlQdHJUYWc+
OwogCiAgICAgLy8gRG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5IC0gZm9yIHByb3BlciBhY2NvdW50
aW5nIGl0J3MgbmVjZXNzYXJ5IHRvIGNhbGwKICAgICAvLyBFeGVjdXRhYmxlQWxsb2NhdG9yOjph
bGxvY2F0ZSgpLgpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAKICAgICBNZW1vcnlQdHIgZW5k
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBNZW1vcnlQdHI6Om1ha2VGcm9tUmF3UG9p
bnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihlbmRBc0ludGVnZXIoKSkpOworICAgICAgICBy
ZXR1cm4gTWVtb3J5UHRyOjpmcm9tVW50YWdnZWRQdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZW5kQXNJbnRlZ2VyKCkpKTsKICAgICB9CiAKICAgICB1aW50cHRyX3Qgc3RhcnRBc0ludGVnZXIo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGJkYjdiN2I4ZGU3Zi4uY2E4
Njg1OTRiMDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC02MSwxMCArNjEsMTAg
QEAgU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTERGR0NvbXBp
bGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTEIzQ29tcGlsZVRpbWU7CiAKLXZvaWQgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKK3ZvaWQgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29kZVB0
cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoQ2FsbCgKLSAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNz
UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJu
QWRkcmVzcykpLAorICAgICAgICBDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+
KENvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz46OmZyb21UYWdnZWRQdHIoY29uc3RfY2FzdDx2
b2lkKj4ocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkpLAogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCkBAIC05OTUsNyArOTk1LDcgQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKICAg
ICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEo
KSk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhB
cml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5
Q2hlY2spOworICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7CiAgICAgbV9q
aXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlD
aGVjaykpOwogCiAgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBGaXhlZFZlY3RvcjxV
bmxpbmtlZENhbGxMaW5rSW5mbz4obV91bmxpbmtlZENhbGxzLnNpemUoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAppbmRleCAxZDgxMDEyMjE1YjEuLjg1ZjYyYTE4ZjFjMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCkBAIC03MiwxMyArNzIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdGVt
cGxhdGU8UHRyVGFnIHRhZz4KICAgICBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGZyb207Ci0gICAgICAgIEZ1bmN0aW9uUHRyPHRhZz4gY2FsbGVlOwor
ICAgICAgICBDb2RlUHRyPHRhZz4gY2FsbGVlOwogCiAgICAgICAgIENhbGxSZWNvcmQoKQogICAg
ICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGZyb20sIEZ1bmN0aW9uUHRyPHRhZz4gY2FsbGVlKQorICAgICAgICBDYWxsUmVjb3JkKE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGZyb20sIENvZGVQdHI8dGFnPiBjYWxsZWUpCiAgICAgICAgICAg
ICA6IGZyb20oZnJvbSkKICAgICAgICAgICAgICwgY2FsbGVlKGNhbGxlZSkKICAgICAgICAgewpA
QCAtMTQ4LDcgKzE0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87CiAgICAgfTsKIAotICAgIHZvaWQgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOworICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBu
ZXdDYWxsZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVQgZmluYWwgOiBwdWJsaWMgSlNJbnRl
cmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwpAQCAtMTk4
LDcgKzE5OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBw
cml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCi0gICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uKQorICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgQ29kZVB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CiAgICAgICAgICAgICBDYWxs
IGZ1bmN0aW9uQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgIG1fZmFy
Q2FsbHMuYXBwZW5kKEZhckNhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbi5yZXRhZ2dl
ZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsKQEAgLTIxMSw3ICsyMTEsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogCiAjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAg
Q2FsbCBhcHBlbmRDYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorICAgICAgICBDYWxsIGFwcGVuZENhbGxXaXRoU2xv
d1BhdGhSZXR1cm5UeXBlKGNvbnN0IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikK
ICAgICAgICAgewogICAgICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsV2l0aFNsb3dQ
YXRoUmV0dXJuVHlwZShPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICAgICAgbV9mYXJDYWxscy5h
cHBlbmQoRmFyQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJh
dGlvblB0clRhZz4oKSkpOwpAQCAtNjkzLDEzICs2OTMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5
dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICB2b2lk
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyk7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9s
bGJhY2tPbkV4Y2VwdGlvbihjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4pOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdChjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShj
b25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiwgY29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgICAgIHZv
aWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAg
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmluZGV4
IDRlZDQ3NTFhNzE3Yy4uMWRmOWI1YTg2YjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTc0Niw3ICs3NDYsNyBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBKU0luc3Ry
dWN0aW9uKgogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0g
bGFiZWwoKTsKICAgICBhZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS5l
eGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVT
dGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgIHNpemVfdCBzaXplID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkudGFnZ2VkUHRyPGNoYXIqPigpIC0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0KS50YWdnZWRQdHI8Y2hhcio+KCk7CiAgICAg
ICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgIH0pOwogI2VuZGlm
CkBAIC04MTMsNyArODEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEpTSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CiAgICAgYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBzaXpl
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hh
cio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRy
ZXNzPGNoYXIqPigpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihpbmxpbmVFbmQpLnRhZ2dlZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihp
bmxpbmVTdGFydCkudGFnZ2VkUHRyPGNoYXIqPigpOwogICAgICAgICBtYXRoSUMtPm1fZ2VuZXJh
dGVkQ29kZVNpemUgKz0gc2l6ZTsKICAgICB9KTsKICNlbmRpZgpAQCAtODUxLDcgKzg1MSw3IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRo
SUMsIGNvbnN0IEpTSW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAg
YXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CiAgICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHNsb3dQYXRoRW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsK
KyAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQp
LnRhZ2dlZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0
KS50YWdnZWRQdHI8Y2hhcio+KCk7CiAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6
ZSArPSBzaXplOwogICAgIH0pOwogI2VuZGlmCkBAIC05MTIsNyArOTEyLDcgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEpTSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQ
YXRoRW5kID0gbGFiZWwoKTsKICAgICBhZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xv
d1BhdGhFbmQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKHNsb3dQYXRoU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBz
aXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkudGFnZ2VkUHRy
PGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLnRhZ2dlZFB0
cjxjaGFyKj4oKTsKICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRlZENvZGVTaXplICs9IHNpemU7
CiAgICAgfSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCmluZGV4
IDY4MTU5YmRmNjljNi4uOTQ0MDE0NTBjMzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNjAsMTEgKzE2MCwxMSBAQCBKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRD
b2RlV2l0aENvZGVSZWYoKQogdm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpleGVjdXRhYmxlQWRk
cmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYp
OwotICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFnPihtX3JlZi5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+
KG1fcmVmLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAgICAgaWYgKCFvZmZzZXQpCi0gICAgICAgIHJl
dHVybiBtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgcmV0dXJuIG1f
cmVmLmNvZGUoKS50YWdnZWRQdHIoKTsKIAotICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0g
dW50YWdDb2RlUHRyPGNoYXIqLCBKU0VudHJ5UHRyVGFnPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NvZGVQdHI8
Y2hhciosIEpTRW50cnlQdHJUYWc+KG1fcmVmLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAgICAgcmV0
dXJuIHRhZ0NvZGVQdHI8SlNFbnRyeVB0clRhZz4oZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQp
OwogfQogCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpkYXRh
QWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB1bnNpZ25lZCBKSVRDb2RlV2l0aENvZGVS
ZWY6Om9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChtX3JlZik7Ci0gICAgaW50cHRyX3QgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4ocG9pbnRlckludG9Db2RlKSAtIG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzczxpbnRw
dHJfdD4oKTsKKyAgICBpbnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90
Pihwb2ludGVySW50b0NvZGUpIC0gbV9yZWYuY29kZSgpLnRhZ2dlZFB0cjxpbnRwdHJfdD4oKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
ZXN1bHQpKSA9PSByZXN1bHQpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVz
dWx0KTsKIH0KQEAgLTIwMCw3ICsyMDAsNyBAQCBEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2Rl
KEpJVFR5cGUgaml0VHlwZSkKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShK
SVRDb2RlOjpDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSBqaXRUeXBlLCBKSVRDb2RlOjpTaGFy
ZUF0dHJpYnV0ZSBzaGFyZUF0dHJpYnV0ZSkKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUo
SklUQ29kZTo6Q29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZWYsIENvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUgaml0VHlwZSwgSklUQ29kZTo6U2hhcmVBdHRyaWJ1
dGUgc2hhcmVBdHRyaWJ1dGUpCiAgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYocmVmLCBqaXRUeXBl
LCBzaGFyZUF0dHJpYnV0ZSkKICAgICAsIG1fd2l0aEFyaXR5Q2hlY2sod2l0aEFyaXR5Q2hlY2sp
CiB7CkBAIC0yMDgsNyArMjA4LDcgQEAgRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRD
b2RlOjpDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVAKICAgICBBU1NF
UlQobV93aXRoQXJpdHlDaGVjayk7CiB9CiAKLURpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUo
SklUQ29kZTo6Q29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZWYsIEpJVENvZGU6OkNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUgaml0VHlwZSwgSW50cmluc2ljIGlu
dHJpbnNpYywgSklUQ29kZTo6U2hhcmVBdHRyaWJ1dGUgc2hhcmVBdHRyaWJ1dGUpCitEaXJlY3RK
SVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVENvZGU6OkNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVm
LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlIGppdFR5cGUs
IEludHJpbnNpYyBpbnRyaW5zaWMsIEpJVENvZGU6OlNoYXJlQXR0cmlidXRlIHNoYXJlQXR0cmli
dXRlKQogICAgIDogSklUQ29kZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlwZSwgc2hhcmVBdHRyaWJ1
dGUpCiAgICAgLCBtX3dpdGhBcml0eUNoZWNrKHdpdGhBcml0eUNoZWNrKQogewpAQCAtMjIxLDcg
KzIyMSw3IEBAIERpcmVjdEpJVENvZGU6On5EaXJlY3RKSVRDb2RlKCkKIHsKIH0KIAotdm9pZCBE
aXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZkZvckRGRyhKSVRDb2RlOjpDb2RlUmVmPEpT
RW50cnlQdHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJp
dHlDaGVjaykKK3ZvaWQgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkcoSklU
Q29kZTo6Q29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZWYsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4g
d2l0aEFyaXR5Q2hlY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVmKTsKICAgICBtX3Jl
ZiA9IHJlZjsKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxp
emVDb2RlUmVmRm9yREZHKEpJVENvZGU6OkNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVmLAogICAg
IEFTU0VSVChtX3dpdGhBcml0eUNoZWNrKTsKIH0KIAotSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBEaXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0
eSkKK0NvZGVQdHI8SlNFbnRyeVB0clRhZz4gRGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwo
QXJpdHlDaGVja01vZGUgYXJpdHkpCiB7CiAgICAgc3dpdGNoIChhcml0eSkgewogICAgIGNhc2Ug
QXJpdHlDaGVja05vdFJlcXVpcmVkOgpAQCAtMjU5LDcgKzI1OSw3IEBAIE5hdGl2ZUpJVENvZGU6
On5OYXRpdmVKSVRDb2RlKCkKIHsKIH0KIAotSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBOYXRpdmVKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkKK0Nv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gTmF0aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlD
aGVja01vZGUgYXJpdHkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHN3aXRj
aCAoYXJpdHkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKaW5kZXggYTllNmI4YWFl
MTA5Li5lMzllZjRjNDc1MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCkBAIC02
Nyw3ICs2Nyw2IEBAIHN0YXRpY19hc3NlcnQoV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIoc3RhdGlj
X2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxKSVRUeXBlCiAKIGNsYXNzIEpJVENvZGUgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUQ29kZT4gewogcHVibGljOgotICAgIHRlbXBs
YXRlPFB0clRhZyB0YWc+IHVzaW5nIENvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
PjsKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUmVmID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPHRhZz47CiAKICAgICBzdGF0aWMgQVNDSUlMaXRlcmFsIHR5cGVOYW1lKEpJVFR5
cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlSW5saW5l
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlSW5saW5lcy5oCmluZGV4IGJj
ZmJjZmY5NWFhYy4uNjY4ZTFkODgwZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlSW5saW5lcy5oCkBAIC0zOCw3ICszOCw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBK
SVRDb2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIHByb3RvQ2FsbEZyYW1lKQog
ICAgICAgICB2bS0+ZGlkRW50ZXJWTSA9IHRydWU7CiAgICAgfSk7CiAgICAgdm9pZCogZW50cnlB
ZGRyZXNzOwotICAgIGVudHJ5QWRkcmVzcyA9IGFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5
KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIGVudHJ5QWRkcmVzcyA9IGFkZHJlc3NGb3JDYWxs
KE11c3RDaGVja0FyaXR5KS50YWdnZWRQdHIoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFs
dWU6OmRlY29kZSh2bUVudHJ5VG9KYXZhU2NyaXB0KGVudHJ5QWRkcmVzcywgdm0sIHByb3RvQ2Fs
bEZyYW1lKSk7CiAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpID8ganNOdWxsKCkgOiByZXN1
bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0
aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uLmgKaW5kZXgg
YWQ4OWM2M2FmZmQzLi4wMDdlMTFjZTcyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29tcGlsYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvbXBpbGF0aW9uLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIENvbXBpbGF0aW9uKENvbXBpbGF0aW9uJiYpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIH5Db21waWxhdGlvbigpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVENvbXBp
bGF0aW9uUHRyVGFnPiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmLmNvZGUoKTsgfQor
ICAgIENvZGVQdHI8SklUQ29tcGlsYXRpb25QdHJUYWc+IGNvZGUoKSBjb25zdCB7IHJldHVybiBt
X2NvZGVSZWYuY29kZSgpOyB9CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVENvbXBpbGF0
aW9uUHRyVGFnPiBjb2RlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmOyB9CiAgICAgCiAg
ICAgQ1N0cmluZyBkaXNhc3NlbWJseSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJlZi5kaXNhc3Nl
bWJseSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fz
c2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5j
cHAKaW5kZXggYTE4ZmQ2M2YxMjc5Li44MDIzZGM0ZDcyYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgSklURGlz
YXNzZW1ibGVyOjp+SklURGlzYXNzZW1ibGVyKCkKIAogdm9pZCBKSVREaXNhc3NlbWJsZXI6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKIHsKLSAgICBtX2Nv
ZGVTdGFydCA9IGxpbmtCdWZmZXIuZW50cnlwb2ludDxEaXNhc3NlbWJseVB0clRhZz4oKS51bnRh
Z2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgbV9jb2RlU3RhcnQgPSBsaW5rQnVmZmVyLmVu
dHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50YWdnZWRQdHIoKTsKICAgICBtX2NvZGVF
bmQgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KG1fY29kZVN0YXJ0KSArIGxpbmtCdWZmZXIuc2l6
ZSgpOwogCiAgICAgZHVtcEhlYWRlcihvdXQsIGxpbmtCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggNzhhN2IwMDYxYjliLi5mNzUxZDlk
Y2MwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApA
QCAtNjEsNyArNjEsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKICAgICBpZiAoaGFuZGxlci5tX3ZhbGlkKSB7CiAgICAgICAgIGNhdGNoUENGb3JJ
bnRlcnByZXRlciA9IGhhbmRsZXIubV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXI7CiAjaWYgRU5BQkxF
KEpJVCkKLSAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci5tX25hdGl2ZUNvZGUuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci5tX25hdGl2ZUNv
ZGUudGFnZ2VkUHRyKCk7CiAjZWxzZQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICNlcnJvciBX
QVNNIHJlcXVpcmVzIHRoZSBKSVQsIHNvIHRoaXMgc2VjdGlvbiBhc3N1bWVzIHdlIGFyZSBpbiBK
UwpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKICAgICAgICAgICAgIGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRDb2RlUHRy
KHBjLT5vcGNvZGVJRCgpKTsKICNlbmRpZgogICAgIH0gZWxzZQotICAgICAgICBjYXRjaFJvdXRp
bmUgPSBMTEludDo6aGFuZGxlVW5jYXVnaHRFeGNlcHRpb24odm0pLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOworICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTEludDo6aGFuZGxlVW5jYXVnaHRF
eGNlcHRpb24odm0pLmNvZGUoKS50YWdnZWRQdHIoKTsKIAogICAgIEFTU0VSVChiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihjYWxsRnJhbWUpIDwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odm0udG9w
RW50cnlGcmFtZSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4
IGY5NTUzOTFlYThjZi4uMWFkNzhmMmM5NmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaApAQCAtOTEsNyArOTEsNyBAQCBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6
OmVtaXROYWtlZE5lYXJDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IHRhcmdldCkKIHsKICAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7Ci0gICAgbV9uZWFyQ2Fs
bHMuYXBwZW5kKE5lYXJDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgdGFyZ2V0LnJldGFnZ2VkPEpTSW50
ZXJuYWxQdHJUYWc+KCkudG9GdW5jdGlvblB0cigpKSk7CisgICAgbV9uZWFyQ2FsbHMuYXBwZW5k
KE5lYXJDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgdGFyZ2V0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJU
YWc+KCkpKTsKICAgICByZXR1cm4gbmFrZWRDYWxsOwogfQogCkBAIC05OSw3ICs5OSw3IEBAIEFM
V0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkTmVhclRhaWxDYWxsKENvZGVQdHI8
Tm9QdHJUYWc+IHRhcmdldCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2Fs
bCA9IG5lYXJUYWlsQ2FsbCgpOwotICAgIG1fbmVhckNhbGxzLmFwcGVuZChOZWFyQ2FsbFJlY29y
ZChuYWtlZENhbGwsIHRhcmdldC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLnRvRnVuY3Rp
b25QdHIoKSkpOworICAgIG1fbmVhckNhbGxzLmFwcGVuZChOZWFyQ2FsbFJlY29yZChuYWtlZENh
bGwsIHRhcmdldC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIG5h
a2VkQ2FsbDsKIH0KIApAQCAtMTE4LDcgKzExOCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OnVwZGF0ZVRvcENhbGxGcmFtZSgpCiAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOwog
fQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQogewogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MgZnVu
Y3Rpb24pCiAgICAgZXhjZXB0aW9uQ2hlY2soKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1l
Um9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rp
b24pCiB7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7IC8vIFRoZSBjYWxsZWUgaXMgcmVzcG9u
c2libGUgZm9yIHNldHRpbmcgdG9wQ2FsbEZyYW1lIHRvIHRoZWlyIGNhbGxlcgogICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKQEAgLTE0MSw3ICsx
NDEsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQogCi1B
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CkBAIC0xNTUsNyArMTU1LDcgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQo
QWRkcmVzcyBmdW4KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1BTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIGNvbnN0IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUTWF0aElDLmgKaW5kZXggMmFiNjg0Nzc1NDFmLi4yMWIwNDI0ZTQ5NmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxp
bmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2Fs
bFJlcGxhY2VtZW50KQorICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsUmVwbGFjZW1lbnQpCiAgICAgewog
ICAgICAgICBhdXRvIGxpbmtKdW1wVG9PdXRPZkxpbmVTbmlwcGV0ID0gWyZdICgpIHsKICAgICAg
ICAgICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1faW5saW5lU3RhcnQgPSBzdGFydDsKIAogICAgICAgICBtX2lubGlu
ZUVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzdGF0ZS5mYXN0
UGF0aEVuZCk7Ci0gICAgICAgIEFTU0VSVChtX2lubGluZUVuZC51bnRhZ2dlZEV4ZWN1dGFibGVB
ZGRyZXNzKCkgPiBtX2lubGluZVN0YXJ0LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgICAgIEFTU0VSVChtX2lubGluZUVuZC51bnRhZ2dlZFB0cigpID4gbV9pbmxpbmVTdGFydC51
bnRhZ2dlZFB0cigpKTsKIAogICAgICAgICBtX3Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHN0YXRlLnNsb3dQYXRoQ2FsbCk7CiAg
ICAgICAgIG1fc2xvd1BhdGhTdGFydExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KHN0YXRlLnNsb3dQYXRoU3RhcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggYmM5MDczNThjYzU5Li43ODI5ZjI3ZWI3N2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNzI2LDcgKzcyNiw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19o
YW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2
bSk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvdykp
OworICAgIHBhdGNoQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb24sIG9wZXJh
dGlvblRocm93KTsKICAgICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRo
dW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9wX3Rocm93X2hhbmRsZXIiKTsKIH0KIApAQCAtMTMxMSwx
MCArMTMxMSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiAgICAgaml0LnJldCgpOwogCiAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25X
cml0ZUJhcnJpZXJDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldy
aXRlQmFycmllclNsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbldyaXRlQmFycmllckNhbGwsIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoT3B0aW9uczo6dXNlREZHSklUKCkp
Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uT3B0aW1pemVDYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk9wdGltaXplKSk7CisgICAgICAgIHBhdGNo
QnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PcHRpbWl6ZUNhbGwsIG9wZXJh
dGlvbk9wdGltaXplKTsKICNlbmRpZgogICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfZW50ZXJfaGFuZGxlciIpOwogfQpA
QCAtMTU1OSw3ICsxNTU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHYKICAgICBKdW1wIGV4
Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmsp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbkhhbmRsZVRyYXBzKSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbiwgb3BlcmF0aW9uSGFuZGxlVHJhcHMpOwogICAgIHBhdGNo
QnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwog
ICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJC
YXNlbGluZTogb3BfY2hlY2tfdHJhcHNfaGFuZGxlciIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMDg3MTA3ZTE2NzY2Li4xNGY0ODcyMjhi
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAt
MTgyLDcgKzE4Miw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NYXRlcmlh
bGl6ZVJlbW90ZUZ1bmN0aW9uVGFyZ2V0Q29kZSwgU2xvd1BhdGhSCiAgICAgICAgICAgICBmdW5j
dGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2
bSwgdGFyZ2V0RnVuY3Rpb24sIHNjb3BlLCBDb2RlRm9yQ2FsbCwgY29kZUJsb2NrU2xvdCk7CiAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZVJlc3VsdChu
dWxscHRyLCBudWxscHRyKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dChleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKENvZGVGb3JDYWxsLCBNdXN0Q2hlY2tBcml0eSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgY29kZUJsb2NrU2xvdCk7CisgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihDb2RlRm9yQ2FsbCwgTXVzdENoZWNr
QXJpdHkpLnRhZ2dlZFB0cigpLCBjb2RlQmxvY2tTbG90KTsKICAgICB9CiB9CiAKQEAgLTIwNDQs
NyArMjA0NCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWl6ZSwg
U2xvd1BhdGhSZXR1cm5UeXBlLCAoVk0qIHZtUG9pbnRlciwKIAogICAgICAgICBjb2RlQmxvY2st
Pm9wdGltaXplU29vbigpOwogICAgICAgICBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkt
PnNldERpZE9wdGltaXplKFRyaVN0YXRlOjpUcnVlKTsKLSAgICAgICAgdm9pZCogdGFyZ2V0UEMg
PSB1bnRhZ0NvZGVQdHI8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIoREZHOjpvc3JFbnRy
eVRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHZv
aWQqIHRhcmdldFBDID0gdW50YWdDb2RlUHRyPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHVi
KERGRzo6b3NyRW50cnlUaHVua0dlbmVyYXRvcikuY29kZSgpLnRhZ2dlZFB0cigpKTsKICAgICAg
ICAgdGFyZ2V0UEMgPSB0YWdDb2RlUHRyV2l0aFN0YWNrUG9pbnRlckZvckpJVENhbGwodGFyZ2V0
UEMsIGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGFyZ2V0UEMsIGRh
dGFCdWZmZXIpOwogICAgIH0KQEAgLTIwOTgsOCArMjA5OCw4IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsIFNsb3dQ
YXRoUmV0CiAgICAgc3dpdGNoIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CiAg
ICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6IHsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5
ID0gREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIG9w
dGltaXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChlbnRyeS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSwgb3B0aW1pemVkUmVwbGFj
ZW1lbnQpOworICAgICAgICBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0g
REZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIG9wdGlt
aXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChlbnRyeS50YWdnZWRQdHI8Y2hhcio+KCksIG9wdGltaXplZFJlcGxhY2VtZW50KTsKICAg
ICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC0yNzY2LDE0ICsyNzY2LDE0IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBjaGFyKiwgKEpTR2xvYmFsCiAKICAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KS5tX21pbiA9PSBtaW4pOwotICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3Rp
RGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRh
YmxlLm1fY3RpRGVmYXVsdC50YWdnZWRQdHIoKTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkg
ewogICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcoa2V5KTsKICAgICAgICAgaWYg
KHN0cmluZy0+bGVuZ3RoKCkgPT0gMSkgewogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gc3Ry
aW5nLT52YWx1ZShnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxl
LmN0aUZvclZhbHVlKG1pbiwgdmFsdWVbMF0pLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
ICAgICByZXN1bHQgPSBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZShtaW4sIHZhbHVlWzBdKS50YWdn
ZWRQdHIoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjc5MywxMSArMjc5MywxMSBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBl
LCBjaGFyKiwgKFZNKiB2bVBvaQogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0Owog
ICAgIGlmIChrZXkuaXNJbnQzMigpKQotICAgICAgICByZXN1bHQgPSBsaW5rZWRUYWJsZS5jdGlG
b3JWYWx1ZShtaW4sIGtleS5hc0ludDMyKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
IHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKG1pbiwga2V5LmFzSW50MzIoKSkudGFn
Z2VkUHRyKCk7CiAgICAgZWxzZSBpZiAoa2V5LmlzRG91YmxlKCkgJiYga2V5LmFzRG91YmxlKCkg
PT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oa2V5LmFzRG91YmxlKCkpKQotICAgICAgICByZXN1bHQg
PSBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZShtaW4sIHN0YXRpY19jYXN0PGludDMyX3Q+KGtleS5h
c0RvdWJsZSgpKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgcmVzdWx0ID0gbGlua2Vk
VGFibGUuY3RpRm9yVmFsdWUobWluLCBzdGF0aWNfY2FzdDxpbnQzMl90PihrZXkuYXNEb3VibGUo
KSkpLnRhZ2dlZFB0cigpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gbGlua2VkVGFibGUu
bV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHJlc3VsdCA9IGxpbmtl
ZFRhYmxlLm1fY3RpRGVmYXVsdC50YWdnZWRQdHIoKTsKICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8
SlNTd2l0Y2hQdHJUYWc+KHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHJlc3VsdCk7CiB9CkBAIC0yODIwLDkgKzI4MjAsOSBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKEpT
R2xvYgogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwog
CiAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
Y29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICAgICAgcmVzdWx0ID0gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUodW5saW5rZWRUYWJsZSwgdmFs
dWUpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0
aUZvclZhbHVlKHVubGlua2VkVGFibGUsIHZhbHVlKS50YWdnZWRQdHIoKTsKICAgICB9IGVsc2UK
LSAgICAgICAgcmVzdWx0ID0gbGlua2VkVGFibGUuY3RpRGVmYXVsdCgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0aURlZmF1bHQoKS50YWdnZWRQ
dHIoKTsKIAogICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU1N3aXRjaFB0clRhZz4ocmVzdWx0KTsK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggNWFlOGYyYzcz
MmY3Li5hZmI5YTE5ZjhmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0xNjYwLDcgKzE2NjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KFZNJiB2bQogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQuanVtcCgpOwogCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lKSk7Cisg
ICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbiwgb3BlcmF0aW9u
UmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9u
Q2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9U
SFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNv
bHZlX3Njb3BlIik7CiB9CkBAIC0xODkwLDcgKzE4OTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihW
TSYgdgogICAgIEp1bXAganVtcFRvSGFuZGxlciA9IGppdC5qdW1wKCk7CiAKICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRGcm9tU2NvcGUpKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uLCBvcGVyYXRpb25HZXRGcm9t
U2NvcGUpOwogICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIocG9wVGh1bmtTdGFja1By
ZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhqdW1wVG9IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwpAQCAtMjA5
MCw3ICsyMDkwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKICAgICBKdW1wIGV4Y2VwdGlv
bkNoZWNrID0gaml0Lmp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvblB1dFRvU2NvcGUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uLCBvcGVyYXRpb25QdXRUb1Njb3BlKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1
cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6
IHNsb3dfb3BfcHV0X3RvX3Njb3BlIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU2l6ZVN0YXRpc3RpY3MuY3BwCmluZGV4IGE2YTMwNTBmYzgxNC4uZDJkMWMxZWJkYzk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmNw
cApAQCAtNDYsNyArNDYsNyBAQCB2b2lkIEpJVFNpemVTdGF0aXN0aWNzOjptYXJrRW5kKE1hcmtl
ciBtYXJrZXIsIENDYWxsSGVscGVycyYgaml0KQogewogICAgIENDYWxsSGVscGVyczo6TGFiZWwg
ZW5kID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOwogICAgIGppdC5hZGRMaW5rVGFz
ayhbPSwgdGhpc10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNp
emUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KGVuZCkudW50YWdnZWRFeGVjdXRh
YmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obWFy
a2VyLnN0YXJ0KS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBz
aXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oZW5kKS51bnRhZ2dl
ZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obWFya2VyLnN0
YXJ0KS51bnRhZ2dlZFB0cjxjaGFyKj4oKTsKICAgICAgICAgbGlua0J1ZmZlci5hZGRNYWluVGhy
ZWFkRmluYWxpemF0aW9uVGFzayhbPSwgdGhpc10gewogICAgICAgICAgICAgYXV0byYgZW50cnkg
PSBtX2RhdGEuYWRkKG1hcmtlci5pZGVudGlmaWVyLCBFbnRyeSB7IH0pLml0ZXJhdG9yLT52YWx1
ZTsKICAgICAgICAgICAgICsrZW50cnkuY291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJSb3V0aW5lLmgKaW5kZXggMzdhMDIyZGU1MjI3Li4yMDFiZGRjOTg5MjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKQEAgLTYxLDggKzYxLDcg
QEAgcHVibGljOgogICAgIAogICAgIC8vIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBD
b2RlUHRyIHRvIHNvbWVvbmUgd2hvIGluc2lzdHMgb24gdGFraW5nCiAgICAgLy8gYSBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+LgotICAgIHN0YXRpYyBSZWY8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZVNl
bGZNYW5hZ2VkUm91dGluZSgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPiByYXdDb2RlUG9pbnRlcikKKyAgICBzdGF0aWMgUmVmPEpJVFN0dWJSb3V0
aW5lPiBjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRh
Zz4gcmF3Q29kZVBvaW50ZXIpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBK
SVRTdHViUm91dGluZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYocmF3Q29kZVBvaW50ZXIpKSk7CiAgICAgfQpAQCAt
NzUsOSArNzQsOSBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGNodXJuLgogICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGU7IH0KICAgICAKLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiBhc0NvZGVQdHIoUmVmPEpJVFN0dWJSb3V0aW5lPiYmIHN0dWJS
b3V0aW5lKQorICAgIHN0YXRpYyBDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBhc0NvZGVQ
dHIoUmVmPEpJVFN0dWJSb3V0aW5lPiYmIHN0dWJSb3V0aW5lKQogICAgIHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiByZXN1bHQgPSBzdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKTsKKyAgICAgICAgQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRh
Zz4gcmVzdWx0ID0gc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCk7CiAgICAgICAgIEFTU0VSVCgh
IXJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRUaHVua3MuY3BwCmluZGV4IDc5MTg1NDdkMzdjNy4uZWViYzUwZGZkYTIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCkBAIC05MywzNyArOTMsMzcg
QEAgaW5saW5lIGJvb2wgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFs
KGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWIKICAgICByZXR1cm4gYUV4ZWN1dGFibGUuZnVuY3Rp
b24oKSA9PSBzdGQ6OmdldDwwPihiKSAmJiBhRXhlY3V0YWJsZS5jb25zdHJ1Y3RvcigpID09IHN0
ZDo6Z2V0PDE+KGIpICYmIGFFeGVjdXRhYmxlLmltcGxlbWVudGF0aW9uVmlzaWJpbGl0eSgpID09
IHN0ZDo6Z2V0PDI+KGIpICYmIGFFeGVjdXRhYmxlLm5hbWUoKSA9PSBzdGQ6OmdldDwzPihiKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0
aU5hdGl2ZUNhbGwoVk0mIHZtKQorQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpj
dGlOYXRpdmVDYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwog
ICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVDYWxsR2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRp
dmVDb25zdHJ1Y3QoVk0mIHZtKQorQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpj
dGlOYXRpdmVDb25zdHJ1Y3QoVk0mIHZtKQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQo
KSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcikuY29k
ZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5r
czo6Y3RpTmF0aXZlVGFpbENhbGwoVk0mIHZtKQorQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklU
VGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6
OnVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlVGFpbENhbGxHZW5lcmF0
b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBK
SVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSYgdm0pCitDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNh
dmVkVGFncyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICBy
ZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9y
KS5jb2RlKCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklU
VGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChWTSYgdm0pCitDb2RlUHRyPEpJVFRodW5r
UHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNJiB2bSkKIHsKICAg
ICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBpbnRl
cm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0
cnVjdChWTSYgdm0pCitDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVy
bmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mIHZtKQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VK
SVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RH
ZW5lcmF0b3IpLmNvZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCmluZGV4
IDhlOTg4NzhmOWU4ZS4uM2ZiYzgyZjBmY2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VGh1bmtzLmgKQEAgLTU2LDEyICs1NiwxMiBAQCBwdWJsaWM6CiAgICAgSklUVGh1bmtzKCk7CiAg
ICAgfkpJVFRodW5rcygpIGZpbmFsOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPiBjdGlOYXRpdmVDYWxsKFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVDb25zdHJ1Y3QoVk0mKTsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsKFZNJik7Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVUYWlsQ2FsbFdp
dGhvdXRTYXZlZFRhZ3MoVk0mKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQ
dHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJik7
CisgICAgQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlQ2FsbChWTSYpOworICAgIENv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNvbnN0cnVjdChWTSYpOworICAgIENvZGVQ
dHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsKFZNJik7CisgICAgQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNJik7Cisg
ICAgQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0mKTsK
KyAgICBDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0
KFZNJik7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGN0aVN0
dWIoVk0mLCBUaHVua0dlbmVyYXRvcik7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBjdGlTbG93UGF0aEZ1bmN0aW9uU3R1YihWTSYsIFNsb3dQYXRoRnVuY3Rpb24p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCmluZGV4IGIwNmUw
YmZlNjhmMi4uYWI0ZTAyMjY5N2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1Nsb3dQYXRoQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93
UGF0aENhbGwuY3BwCkBAIC05Miw3ICs5Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUU2xvd1BhdGhDYWxsOjpnZW5lcmF0ZVRodW5rKFZNJiB2bSwgU2xvCiAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAoKTsKIAogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihzbG93UGF0aEZ1bmN0aW9uKSk7CisgICAgcGF0Y2hC
dWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KGNhbGwsIHNsb3dQYXRoRnVuY3Rpb24pOwogICAg
IHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOwogICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJTbG93UGF0aENhbGwiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
cGVjaWFsaXplZFRodW5rSklULmgKaW5kZXggNTk2YjBjMDUyMjE4Li5mOGJkYjkyZDU0OTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBA
IC0xNTMsNyArMTUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXQoKTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBmaW5hbGl6ZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGZh
bGxiYWNrLCBjb25zdCBjaGFyKiB0aHVua0tpbmQpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gZmluYWxpemUoQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gZmFs
bGJhY2ssIGNvbnN0IGNoYXIqIHRodW5rS2luZCkKICAgICAgICAgewogICAgICAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpTcGVjaWFsaXplZFRodW5rKTsKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
bV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KGZhbGxiYWNrKSk7
CkBAIC0xNjQsMTIgKzE2NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBBc3N1
bWVzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiB1c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBmaXJz
dCBhcmd1bWVudAogICAgICAgICAvLyBhbmQgcmV0dXJuIHZhbHVlLiBMaWtlIGFueSBzZW5zaWJs
ZSBhcmNoaXRlY3R1cmUgd291bGQuCi0gICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlKEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAgICAgIHZvaWQgY2FsbERv
dWJsZVRvRG91YmxlKENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAg
ewogICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY2FsbChPcGVyYXRp
b25QdHJUYWcpLCBmdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBjYWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5n
UmV0dXJuKEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAgICAgIHZv
aWQgY2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybihDb2RlUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghaXNYODYoKSkKICAg
ICAgICAgICAgICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwpAQCAt
MTk2LDcgKzE5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9mYWlsdXJlczsKLSAgICAgICAgVmVjdG9y
PHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+Pj4gbV9jYWxsczsK
KyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4+
PiBtX2NhbGxzOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAppbmRleCA3NmFmYzJiNjQzMmYuLjgyMmNlZWE2MzY2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtNTUsNyAr
NTUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2Vw
dGlvbkdlbmVyYXRvcihWTSYgdm0pCiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0p
OwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlu
a0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhv
cGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhj
ZXB0aW9uSGFuZGxlcikpOworICAgIHBhdGNoQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb24sIG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwogICAgIHJldHVybiBG
SU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRp
b24iKTsKIH0KIApAQCAtNzEsNyArNzEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYQogICAg
IGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJ
VGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJh
bWUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uLCBv
cGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKTsKICAgICByZXR1
cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhj
ZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrIik7CiB9CiAKQEAgLTMxNyw3ICszMTcsNyBAQCBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtG
b3IoVk0mIHZtLCBDYWxsTW9kZSBtbwogICAgIC8vIE51bGxTZXR0ZXJGdW5jdGlvblR5cGUgZG9l
cyBub3QgZ2V0IHRoZSBmYXN0IHBhdGggc3VwcG9ydC4gQnV0IGl0IGlzIE9LIHNpbmNlIHVzaW5n
IE51bGxTZXR0ZXJGdW5jdGlvblR5cGUgaXMgZXh0cmVtZWx5IHJhcmUuCiAgICAgbm90SlNGdW5j
dGlvbi5saW5rKCZqaXQpOwogICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUeXBl
KEdQUkluZm86OnJlZ1QwLCBJbnRlcm5hbEZ1bmN0aW9uVHlwZSkpOwotICAgIHZvaWQqIGV4ZWN1
dGFibGVBZGRyZXNzID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2lu
ZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHZt
LmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpLnRhZ2dlZFB0cigpOwog
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlQWRkcmVz
cyksIEdQUkluZm86OnJlZ1Q0KTsKIAogICAgIGlzTmF0aXZlLmxpbmsoJmppdCk7CkBAIC00MjUs
NyArNDI1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bmF0aXZlRm9yR2VuZXJhdG9yKFZNJiB2bSwgVGh1bmtGdW4KICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjIsIGV4ZWN1dGFi
bGVPZmZzZXRUb0Z1bmN0aW9uKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICAgICAgICAg
IGF1dG8gb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4odm1FbnRyeUhvc3RGdW5jdGlvbikpOworICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIHZtRW50cnlIb3N0
RnVuY3Rpb24pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgZXhl
Y3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBIb3N0RnVuY3Rpb25QdHJUYWcpOwpAQCAtNDM2LDcg
KzQzNiw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5h
dGl2ZUZvckdlbmVyYXRvcihWTSYgdm0sIFRodW5rRnVuCiAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBJbnRlcm5hbEZ1
bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyKTsKICAgICAgICAgICAgIGF1dG8gb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJh
dGlvblB0clRhZyk7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlv
bkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odm1FbnRyeUhvc3RGdW5jdGlvbikp
OworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbkNhbGwsIHZtRW50cnlIb3N0RnVuY3Rpb24pOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmFyZ3VtZW50R1BSMiwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlv
bkZvcihraW5kKSksIEhvc3RGdW5jdGlvblB0clRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludERhdGEuY3BwCmluZGV4IDY3MDc3NTdiYzVjNC4uMTc5ODg4OWZkM2FkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDcgKzk0LDcg
QEAgdm9pZCBpbml0aWFsaXplKCkKIAogI2lmIEVOQUJMRShKSVRfQ0FHRSkKICAgICBpZiAoT3B0
aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpqaXRDYWdlUHRyKV0gPSBqaXRDYWdlUHRyVGh1bmso
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQu
Z2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6aml0Q2FnZVB0cildID0gaml0Q2Fn
ZVB0clRodW5rKCkuY29kZSgpLnRhZ2dlZFB0cigpOwogI2VuZGlmCiAKICNkZWZpbmUgSU5JVElB
TElaRV9KU19HQVRFKG5hbWUsIHRhZykgXApAQCAtMTExLDkgKzExMSw5IEBAIHZvaWQgaW5pdGlh
bGl6ZSgpCiAgICAgICAgICAgICBjb2RlUmVmMTYuY29uc3RydWN0KExMSW50OjpnZXRXaWRlMTZD
b2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oanNfdHJhbXBvbGluZV8jI25hbWUpKTsgXAog
ICAgICAgICAgICAgY29kZVJlZjMyLmNvbnN0cnVjdChMTEludDo6Z2V0V2lkZTMyQ29kZVJlZjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+KGpzX3RyYW1wb2xpbmVfIyNuYW1lKSk7IFwKICAgICAgICAg
fSBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEdhdGU6Om5hbWUpXSA9IGNvZGVSZWY4LmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOyBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNvZGVSZWYxNi5nZXQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsgXAotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNfd2lkZTMyKV0gPSBjb2RlUmVmMzIuZ2V0
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxp
bnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bmFtZSldID0gY29kZVJlZjgu
Z2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOyBcCisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50Lmdh
dGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNvZGVS
ZWYxNi5nZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxp
bnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bmFtZSMjX3dpZGUzMildID0g
Y29kZVJlZjMyLmdldCgpLmNvZGUoKS50YWdnZWRQdHIoKTsgXAogICAgIH0gd2hpbGUgKDApOwog
CiAgICAgSlNDX0pTX0dBVEVfT1BDT0RFUyhJTklUSUFMSVpFX0pTX0dBVEUpCkBAIC0xMzQsOSAr
MTM0LDkgQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICAgICAgICAgIGNvZGVSZWYxNi5jb25zdHJ1
Y3QoTExJbnQ6OmdldFdpZGUxNkNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPih3YXNtX3Ry
YW1wb2xpbmVfIyNuYW1lKSk7IFwKICAgICAgICAgICAgIGNvZGVSZWYzMi5jb25zdHJ1Y3QoTExJ
bnQ6OmdldFdpZGUzMkNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPih3YXNtX3RyYW1wb2xp
bmVfIyNuYW1lKSk7IFwKICAgICAgICAgfSBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50Lmdh
dGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUpXSA9IGNvZGVSZWY4LmdldCgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50
LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNv
ZGVSZWYxNi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgXAotICAgICAgICBnX2pz
Y0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNf
d2lkZTMyKV0gPSBjb2RlUmVmMzIuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IFwK
KyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
R2F0ZTo6bmFtZSldID0gY29kZVJlZjguZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOyBcCisgICAg
ICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6
Om5hbWUjI193aWRlMTYpXSA9IGNvZGVSZWYxNi5nZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7IFwK
KyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
R2F0ZTo6bmFtZSMjX3dpZGUzMildID0gY29kZVJlZjMyLmdldCgpLmNvZGUoKS50YWdnZWRQdHIo
KTsgXAogICAgIH0gd2hpbGUgKDApOwogCiAgICAgSlNDX1dBU01fR0FURV9PUENPREVTKElOSVRJ
QUxJWkVfV0FTTV9HQVRFKQpAQCAtMTQ4LDU0ICsxNDgsNTQgQEAgdm9pZCBpbml0aWFsaXplKCkK
ICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICAgICAgY29kZVJlZi5jb25z
dHJ1Y3QoY3JlYXRlSlNHYXRlVGh1bmsocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJU
YWcsIE9wZXJhdGlvblB0clRhZz4oJnZtRW50cnlUb0phdmFTY3JpcHRHYXRlQWZ0ZXIpLCBKU0Vu
dHJ5UHRyVGFnLCAidm1FbnRyeVRvSmF2YVNjcmlwdCIpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
KCZ2bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGluZSkpKSk7Ci0gICAgICAgIGdfanNjQ29uZmln
LmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnZtRW50cnlUb0phdmFT
Y3JpcHQpXSA9IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
ICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPjo6ZnJvbVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlv
blB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1w
b2xpbmUpKSkpOworICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0
PHVuc2lnbmVkPihHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0KV0gPSBjb2RlUmVmLmdldCgpLmNv
ZGUoKS50YWdnZWRQdHIoKTsKICAgICB9CiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVy
RGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBj
b2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgICAgICBjb2Rl
UmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgdHJ1ZSkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9t
RXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRhaWxDYWxsSlNFbnRyeVRyYW1wb2xpbmUpKSkpOwotICAg
ICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRl
Ojp0YWlsQ2FsbEpTRW50cnlQdHJUYWcpXT0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
Q29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+Ojpmcm9tVGFnZ2VkUHRyKHJldGFnQ29kZVB0
cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2Fs
bEpTRW50cnlUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1h
cFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5UHRyVGFnKV09IGNv
ZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOwogICAgIH0KICAgICB7CiAgICAgICAgIHN0
YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAg
ICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRy
VGFnLCB0cnVlKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0
KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5j
dGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxKU0VudHJ5U2xvd1Bh
dGhUcmFtcG9saW5lKSkpKTsKLSAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5U2xvd1BhdGhQdHJUYWcpXSA9
IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBj
b2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPjo6ZnJvbVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywg
TmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5l
KSkpKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5U2xvd1BhdGhQdHJUYWcpXSA9IGNvZGVSZWYuZ2V0
KCkuY29kZSgpLnRhZ2dlZFB0cigpOwogICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5
TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz4+IGNvZGVSZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAg
IGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFnLCBmYWxz
ZSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVh
dGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJU
YWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRy
YW1wb2xpbmUpKSkpOwotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlQdHJUYWcpXT0g
Y29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIGNv
ZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJU
YWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJU
YWc+Ojpmcm9tVGFnZ2VkUHRyKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9s
aW5lKSkpKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVS
ZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOwogICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAg
ICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGV4Y2VwdGlvbkhhbmRsZXJHYXRlVGh1bmsoKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21F
eGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0
aXZlVG9KSVRHYXRlUHRyVGFnPigmZXhjZXB0aW9uSGFuZGxlclRyYW1wb2xpbmUpKSkpOwotICAg
ICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRl
OjpleGNlcHRpb25IYW5kbGVyKV0gPSBjb2RlUmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihDb2Rl
UHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmZyb21UYWdnZWRQdHIocmV0YWdDb2RlUHRyPHZv
aWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJmV4Y2VwdGlvbkhh
bmRsZXJUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6ZXhjZXB0aW9uSGFuZGxlcildID0gY29kZVJlZi5n
ZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7CiAgICAgfQogICAgIHsKICAgICAgICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICAg
ICAgY29kZVJlZi5jb25zdHJ1Y3QocmV0dXJuRnJvbUxMSW50R2F0ZVRodW5rKCkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz4oJnJldHVybkZyb21MTEludFRyYW1wb2xpbmUpKSkpOwotICAgICAgICBn
X2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpyZXR1
cm5Gcm9tTExJbnQpXSA9IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPjo6ZnJvbVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENG
dW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmcmV0dXJuRnJvbUxMSW50VHJh
bXBvbGluZSkpKSk7CisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEdhdGU6OnJldHVybkZyb21MTEludCldID0gY29kZVJlZi5nZXQoKS5jb2Rl
KCkudGFnZ2VkUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7Ci0g
ICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdh
dGU6Omxvb3BPU1JFbnRyeSldID0gbG9vcE9TUkVudHJ5R2F0ZVRodW5rKCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OmVudHJ5T1NSRW50cnkpXSA9IGVudHJ5T1NSRW50cnlHYXRl
VGh1bmsoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgZ19qc2NDb25maWcu
bGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6d2FzbU9TUkVudHJ5KV0g
PSB3YXNtT1NSRW50cnlHYXRlVGh1bmsoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAg
ICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0
ZTo6bG9vcE9TUkVudHJ5KV0gPSBsb29wT1NSRW50cnlHYXRlVGh1bmsoKS5jb2RlKCkudGFnZ2Vk
UHRyKCk7CisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEdhdGU6OmVudHJ5T1NSRW50cnkpXSA9IGVudHJ5T1NSRW50cnlHYXRlVGh1bmsoKS5j
b2RlKCkudGFnZ2VkUHRyKCk7CisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Ondhc21PU1JFbnRyeSldID0gd2FzbU9TUkVudHJ5R2F0
ZVRodW5rKCkuY29kZSgpLnRhZ2dlZFB0cigpOwogICAgIH0KIAogI2RlZmluZSBJTklUSUFMSVpF
X1RBR19BTkRfVU5UQUdfVEhVTktTKG5hbWUpIFwKQEAgLTIwOSw4ICsyMDksOCBAQCB2b2lkIGlu
aXRpYWxpemUoKQogICAgICAgICAgICAgdGFnQ29kZVJlZi5jb25zdHJ1Y3QoTExJbnQ6OmdldENv
ZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPihqc190cmFtcG9saW5lXyMjbmFtZSMjX3RhZykp
OyBcCiAgICAgICAgICAgICB1bnRhZ0NvZGVSZWYuY29uc3RydWN0KExMSW50OjpnZXRDb2RlUmVm
PE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oanNfdHJhbXBvbGluZV8jI25hbWUjI191bnRhZykpOyBc
CiAgICAgICAgIH0gXAotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNUYWcpXSA9IHRhZ0NvZGVSZWYuZ2V0KCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7IFwKLSAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1h
cFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bmFtZSMjVW50YWcpXSA9IHVudGFnQ29kZVJl
Zi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgXAorICAgICAgICBnX2pzY0NvbmZp
Zy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNUYWcpXSA9
IHRhZ0NvZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOyBcCisgICAgICAgIGdfanNjQ29u
ZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI1VudGFn
KV0gPSB1bnRhZ0NvZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOyBcCiAgICAgfSB3aGls
ZSAoMCk7CiAKICAgICBJTklUSUFMSVpFX1RBR19BTkRfVU5UQUdfVEhVTktTKGxsaW50X2Z1bmN0
aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dERhdGEuaAppbmRleCAxNTExNWVlMDdkMjQuLjhiZmVmMjU1Yzc4MiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludERhdGEuaApAQCAtNjYsOSArNjYsOSBAQCBwcml2YXRlOgogICAg
IGZyaWVuZCBjb25zdCBPcGNvZGUqIGdldE9wY29kZUFkZHJlc3MoT3Bjb2RlSUQpOwogICAgIGZy
aWVuZCBjb25zdCBPcGNvZGUqIGdldE9wY29kZVdpZGUxNkFkZHJlc3MoT3Bjb2RlSUQpOwogICAg
IGZyaWVuZCBjb25zdCBPcGNvZGUqIGdldE9wY29kZVdpZGUzMkFkZHJlc3MoT3Bjb2RlSUQpOwot
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
PiBnZXRDb2RlUHRyKE9wY29kZUlEKTsKLSAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiBmcmllbmQg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29kZVB0cihPcGNvZGVJRCk7Ci0g
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+
IGdldFdpZGUzMkNvZGVQdHIoT3Bjb2RlSUQpOworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IGZy
aWVuZCBDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNvZGVJRCk7CisgICAgdGVtcGxhdGU8UHRy
VGFnIHRhZz4gZnJpZW5kIENvZGVQdHI8dGFnPiBnZXRXaWRlMTZDb2RlUHRyKE9wY29kZUlEKTsK
KyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiBmcmllbmQgQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNv
ZGVQdHIoT3Bjb2RlSUQpOwogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IGZyaWVuZCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8dGFnPiBnZXRDb2RlUmVmKE9wY29kZUlEKTsKIH07CiAKQEAgLTE0Nywx
MiArMTQ3LDEyIEBAIGlubGluZSBjb25zdCBPcGNvZGUqIGdldE9wY29kZVdpZGUzMkFkZHJlc3Mo
T3Bjb2RlSUQgaWQpCiAjZW5kaWYKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KLUFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0ckltcGwoY29uc3QgT3Bjb2Rl
IG9wY29kZSwgY29uc3Qgdm9pZCogb3Bjb2RlQWRkcmVzcykKK0FMV0FZU19JTkxJTkUgQ29kZVB0
cjx0YWc+IGdldENvZGVQdHJJbXBsKGNvbnN0IE9wY29kZSBvcGNvZGUsIGNvbnN0IHZvaWQqIG9w
Y29kZUFkZHJlc3MpCiB7CiAgICAgdm9pZCogb3Bjb2RlVmFsdWUgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihvcGNvZGUpOwogICAgIHZvaWQqIHVudGFnZ2VkT3Bjb2RlID0gdW50YWdBZGRyZXNz
RGl2ZXJzaWZpZWRDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihvcGNvZGVWYWx1ZSwgb3Bjb2RlQWRk
cmVzcyk7CiAgICAgdm9pZCogcmV0YWdnZWRPcGNvZGUgPSB0YWdDb2RlUHRyPHRhZz4odW50YWdn
ZWRPcGNvZGUpOwotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6Y3JlYXRl
RnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnZ2VkT3Bjb2RlKTsKKyAgICByZXR1cm4gQ29kZVB0
cjx0YWc+Ojpmcm9tVGFnZ2VkUHRyKHJldGFnZ2VkT3Bjb2RlKTsKIH0KIAogI2lmIEVOQUJMRShB
Uk02NEUpICYmICFFTkFCTEUoQ09NUFVURURfR09UT19PUENPREVTKQpAQCAtMTYwLDcgKzE2MCw3
IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cklt
cGwoY29uc3QgT3Bjb2RlIG9wY29kZSwgY29uCiAjZW5kaWYKIAogdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihP
cGNvZGVJRCBvcGNvZGVJRCkKK0FMV0FZU19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldENvZGVQdHIo
T3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykK
ICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZUFkZHJlc3Mob3Bjb2RlSUQpOwpA
QCAtMTcxLDcgKzE3MSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRh
Zz4gZ2V0Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKIH0KIAogdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29k
ZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKK0FMV0FZU19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldFdp
ZGUxNkNvZGVQdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dP
VE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUxNkFk
ZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMTgyLDcgKzE4Miw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkK
IH0KIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPHRhZz4gZ2V0V2lkZTMyQ29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKK0FMV0FZU19J
TkxJTkUgQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7
CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9w
Y29kZSA9IGdldE9wY29kZVdpZGUzMkFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMjE1LDkgKzIxNSw5
IEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRDb2Rl
RnVuY3Rpb25QdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldENvZGVQdHI8dGFnPihvcGNv
ZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
TExJbnRDb2RlPihnZXRDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsKICNlbHNl
Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRDb2RlUHRyPHRhZz4o
b3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0
ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjI1LDkgKzIyNSw5IEBAIHRlbXBsYXRl
PFB0clRhZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRXaWRlMTZDb2RlRnVuY3Rp
b25QdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUxNkNvZGVQdHI8dGFnPihvcGNv
ZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
TExJbnRDb2RlPihnZXRXaWRlMTZDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsK
ICNlbHNlCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMTZD
b2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0V2lkZTE2Q29kZVB0cjx0YWc+
KG9wY29kZUlEKS50ZW1wbGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjM1LDkg
KzIzNSw5IEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBn
ZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElM
RVIoTVNWQykKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUz
MkNvZGVQdHI8dGFnPihvcGNvZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2Rl
SUQpLnRhZ2dlZFB0cigpKTsKICNlbHNlCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJ
bnRDb2RlPihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0
V2lkZTMyQ29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5k
aWYKIH0KIApAQCAtMjkwLDcgKzI5MCw3IEBAIGlubGluZSBjb25zdCBPcGNvZGUqIGdldE9wY29k
ZVdpZGUzMkFkZHJlc3MoV2FzbU9wY29kZUlEIGlkKQogI2VuZGlmCiAKIHRlbXBsYXRlPFB0clRh
ZyB0YWc+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldENvZGVQ
dHIoV2FzbU9wY29kZUlEIG9wY29kZUlEKQorQUxXQVlTX0lOTElORSBDb2RlUHRyPHRhZz4gZ2V0
Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dP
VE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZUFkZHJlc3Mo
b3Bjb2RlSUQpOwpAQCAtMzAxLDcgKzMwMSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB9CiAKIHRl
bXBsYXRlPFB0clRhZyB0YWc+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0
YWc+IGdldFdpZGUxNkNvZGVQdHIoV2FzbU9wY29kZUlEIG9wY29kZUlEKQorQUxXQVlTX0lOTElO
RSBDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7
CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9w
Y29kZSA9IGdldE9wY29kZVdpZGUxNkFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMzEyLDcgKzMxMiw3
IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29k
ZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB9CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci1B
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIo
V2FzbU9wY29kZUlEIG9wY29kZUlEKQorQUxXQVlTX0lOTElORSBDb2RlUHRyPHRhZz4gZ2V0V2lk
ZTMyQ29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVE
X0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUz
MkFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMzQ0LDkgKzM0NCw5IEBAIHRlbXBsYXRlPFB0clRhZyB0
YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRDb2RlRnVuY3Rpb25QdHIoV2FzbU9wY29k
ZUlEIG9wY29kZUlEKQogewogI2lmIENPTVBJTEVSKE1TVkMpCi0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0Q29k
ZVB0cjx0YWc+KG9wY29kZUlEKS50YWdnZWRQdHIoKSk7CiAjZWxzZQotICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0
ZSBleGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTElu
dENvZGU+KGdldENvZGVQdHI8dGFnPihvcGNvZGVJRCkudGVtcGxhdGUgdGFnZ2VkUHRyKCkpOwog
I2VuZGlmCiB9CiAKQEAgLTM1NCw5ICszNTQsOSBAQCB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogQUxX
QVlTX0lOTElORSBMTEludENvZGUgZ2V0V2lkZTE2Q29kZUZ1bmN0aW9uUHRyKFdhc21PcGNvZGVJ
RCBvcGNvZGVJRCkKIHsKICNpZiBDT01QSUxFUihNU1ZDKQotICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PExMSW50Q29kZT4oZ2V0V2lkZTE2Q29kZVB0cjx0YWc+KG9wY29kZUlEKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdl
dFdpZGUxNkNvZGVQdHI8dGFnPihvcGNvZGVJRCkudGFnZ2VkUHRyKCkpOwogI2Vsc2UKLSAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUxNkNvZGVQdHI8dGFnPihv
cGNvZGVJRCkudGVtcGxhdGUgZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMTZDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRl
bXBsYXRlIHRhZ2dlZFB0cigpKTsKICNlbmRpZgogfQogCkBAIC0zNjQsOSArMzY0LDkgQEAgdGVt
cGxhdGU8UHRyVGFnIHRhZz4KIEFMV0FZU19JTkxJTkUgTExJbnRDb2RlIGdldFdpZGUzMkNvZGVG
dW5jdGlvblB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykK
LSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUzMkNvZGVQdHI8
dGFnPihvcGNvZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dl
ZFB0cigpKTsKICNlbHNlCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihn
ZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNz
KCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0V2lkZTMyQ29k
ZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAppbmRl
eCBkZjY0NWQ4Yzc0YjYuLjRiMWI3ZDA0MzBkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgZXh0ZXJuICJD
IiB2b2lkIGpzVHJhbXBvbGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1Byb2xvZ3Vl
KHZvaWQpOwogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4KIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludFRyYW1wb2xpbmUoUHRyVHlwZSBhZGRy
ZXNzKQogewotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENG
dW5jdGlvblB0clRhZywgSlNFbnRyeVB0clRhZz4oYWRkcmVzcykpKTsKKyAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYoQ29kZVB0cjxKU0VudHJ5UHRyVGFnPjo6ZnJvbVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9p
ZCosIENGdW5jdGlvblB0clRhZywgSlNFbnRyeVB0clRhZz4oYWRkcmVzcykpKTsKIH0KICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApp
bmRleCBkMzFmOWNkZTVkZTIuLmI2YjA3MDQ4NmJjOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0xNjYsMTQgKzE2NiwxNCBAQCBpbmxp
bmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkgeyByZXR1cgogI2RlZmluZSBMTElOVF9DQUxMX1RIUk9XKGdsb2JhbE9iamVj
dCwgZXhjZXB0aW9uVG9UaHJvdykgZG8geyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBfX2N0X2dsb2JhbE9iamVjdCA9IChnbG9iYWxPYmplY3QpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHRocm93RXhjZXB0aW9uKF9fY3Rf
Z2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRpb25Ub1Rocm93KTsgICAgICAgIFwKLSAg
ICAgICAgTExJTlRfQ0FMTF9FTkRfSU1QTChudWxscHRyLCBjYWxsVG9UaHJvdyh2bSkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBMTElOVF9DQUxMX0VORF9JTVBMKG51bGxwdHIsIGNhbGxUb1Rocm93
KHZtKS5jb2RlKCkudGFnZ2VkUHRyKCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyAgICAgICAg
ICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIExMSU5UX0NBTExfQ0hF
Q0tfRVhDRVBUSU9OKGdsb2JhbE9iamVjdCkgZG8geyAgICAgICAgICAgICAgIFwKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIF9fY2NlX2dsb2JhbE9iamVjdCA9IChnbG9iYWxPYmplY3QpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZG9FeGNlcHRpb25GdXp6aW5n
SWZFbmFibGVkKF9fY2NlX2dsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgIkxMSW50U2xvd1BhdGhz
L2NhbGwiLCBudWxscHRyKTsgXAogICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTExJTlRf
Q0FMTF9FTkRfSU1QTChudWxscHRyLCBjYWxsVG9UaHJvdyh2bSkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyBcCisgICAgICAgICAgICBMTElOVF9D
QUxMX0VORF9JTVBMKG51bGxwdHIsIGNhbGxUb1Rocm93KHZtKS5jb2RlKCkudGFnZ2VkUHRyKCks
IEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZp
bmUgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbFRhcmdl
dCwgY2FsbFRhcmdldFRhZykgZG8geyBcCkBAIC00MjUsNyArNDI1LDcgQEAgc3RhdGljIFNsb3dQ
YXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAq
bmFtZSwgRW50cnkKICAgICBpZiAoa2luZCA9PSBQcm9sb2d1ZSkKICAgICAgICAgTExJTlRfUkVU
VVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0
cik7CiAgICAgQVNTRVJUKGtpbmQgPT0gQXJpdHlDaGVjayk7Ci0gICAgTExJTlRfUkVUVVJOX1RX
Tyhjb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOworICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJs
b2NrLT5qaXRDb2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS50YWdnZWRQdHIo
KSwgbnVsbHB0cik7CiB9CiAjZWxzZSAvLyBFTkFCTEUoSklUKQogc3RhdGljIFNsb3dQYXRoUmV0
dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5
S2luZCkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikK
ICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIo
cGMpOwogICAgICAgICAqcHRyICs9IGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLm1f
YWN0aXZlVGhyZXNob2xkOwogICAgICAgICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVy
bkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkKLSAgICAgICAgICAgIExMSU5UX1JFVFVSTl9UV08o
TExJbnQ6OmZ1enplclJldHVybkVhcmx5RnJvbUxvb3BIaW50RW50cnlwb2ludCgpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CisgICAgICAgICAg
ICBMTElOVF9SRVRVUk5fVFdPKExMSW50OjpmdXp6ZXJSZXR1cm5FYXJseUZyb21Mb29wSGludEVu
dHJ5cG9pbnQoKS5jb2RlKCkudGFnZ2VkUHRyKCksIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsK
ICAgICB9CiAgICAgCiAgICAgCkBAIC01MDIsNyArNTAyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0wobG9vcF9vc3IpCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxv
Y2F0aW9uID0gY29kZU1hcC5maW5kKGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgIEFT
U0VSVChjb2RlTG9jYXRpb24pOwogCi0gICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRp
b24udGFnZ2VkUHRyKCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOwogICAgIAogICAgIExMSU5U
X1JFVFVSTl9UV08oanVtcFRhcmdldCwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOwpAQCAtMTg1
MCw3ICsxODUwLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgICAgIHZtLmVu
Y29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2Jq
ZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCgpLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgICAgICBE
aXNhbGxvd0dDIGRpc2FsbG93R0M7CiAgICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxl
ZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICAgICAg
TExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RD
YWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpT
RW50cnlQdHJUYWcpOworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0
LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29k
ZSgpLnRhZ2dlZFB0cigpLCBKU0VudHJ5UHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgc2xvd1BhdGhMb2coIkNhbGwgY2FsbGVlIGlzIG5vdCBhIGZ1bmN0aW9uOiAiLCBjYWxs
ZWUsICJcbiIpOwpAQCAtMTg3MCw3ICsxODcwLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlw
ZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwK
ICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5h
dGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3QoKSwgY2FsbGVlRnJh
bWUpOwogICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CiAgICAgICAgIGF1dG8qIGNhbGxl
clNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7Ci0g
ICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50Ojpn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2Jq
ZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCku
Y29kZSgpLnRhZ2dlZFB0cigpLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9CiAgICAgCiAgICAgc2xv
d1BhdGhMb2coIkNvbnN0cnVjdG9yIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2FsbGVl
LCAiXG4iKTsKQEAgLTE4OTIsMTEgKzE4OTIsMTEgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlw
ZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kK
ICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVB
c1ZhbHVlKTsKICAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CiAgICAgICAgIGlmIChj
YWxsZWVBc1ZhbHVlLmluaGVyaXRzPEludGVybmFsRnVuY3Rpb24+KCkpIHsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJ
SW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CisgICAgICAgICAgICBDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBv
bGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAg
ICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4o
Y29kZVB0ci50YWdnZWRQdHIoKSk7CiAgICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxl
ZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICAgICAg
TExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgICAgIExMSU5UX0NBTExfUkVU
VVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIudGFnZ2VkUHRyKCksIEpTRW50cnlQ
dHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCBoYW5kbGVIb3N0Q2FsbChjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOwogICAg
IH0KQEAgLTE5MDYsNyArMTkwNiw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBD
YWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAKICAgICBE
ZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0aXNvbiB0aGlzIGNvZGUg
aWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0LgogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHI7CisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRy
OwogICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMzOQogICAgIGlmIChleGVjdXRhYmxlLT5pc0hv
c3RGdW5jdGlvbigpKQpAQCAtMTkzMiw5ICsxOTMyLDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9u
S2kKICAgICB9CiAKICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICBhc3NlcnRJc1RhZ2dlZFdp
dGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci50YWdnZWRQdHIoKSk7CiAgICAg
YXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJl
Z2lzdGVyczsKLSAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBj
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgIExMSU5UX0NB
TExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIudGFnZ2VkUHRyKCksIEpT
RW50cnlQdHJUYWcpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc2l6ZV9m
cmFtZV9mb3JfdmFyYXJncykKQEAgLTIwNjgsNyArMjA2OCw3IEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEpTSW5z
dHJ1Y3RpCiAgICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5
dGVjb2RlLm1fYXJnYyk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFt
ZSk7CiAgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFtZS0+c2V0UmV0
dXJuUEMocmV0dXJuUG9pbnQuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIGNhbGxl
ZUZyYW1lLT5zZXRSZXR1cm5QQyhyZXR1cm5Qb2ludC5jb2RlKCkudGFnZ2VkUHRyKCkpOwogICAg
IGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5zZXRD
dXJyZW50VlBDKHBjKTsKICAgICAKQEAgLTIwNzgsNyArMjA3OCw3IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEpT
SW5zdHJ1Y3RpCiAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpl
bmNvZGUoZXZhbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBieXRlY29kZS5tX2VjbWFNb2Rl
KSk7CiAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwogICAgIGF1dG8qIGNhbGxlclNQID0gY2Fs
bGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7Ci0gICAgTExJTlRf
Q0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0
dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQ
dHJUYWcpOworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExM
SW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS50YWdnZWRQdHIo
KSwgSlNFbnRyeVB0clRhZyk7CiB9CiAgICAgCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfY2FsbF9ldmFsKQpAQCAtMjM4NSw5ICsyMzg1LDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBkaXNwYXRjaFRvTmV4dEluc3RydWN0aW9uRHVyaW5nRXhpdChUaHJvd1Njb3BlJiBzY29w
ZSwKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspIHsKICAgICAgICAgY29uc3Qg
SlNJbnN0cnVjdGlvbiogbmV4dFBDID0gcGMubmV4dCgpLnB0cigpOwogI2lmIEVOQUJMRShKSVQp
Ci0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBDLCBMTEludDo6bm9ybWFsT1NSRXhp
dFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChuZXh0UEMsIExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGlu
ZVRodW5rKCkuY29kZSgpLnRhZ2dlZFB0cigpKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQobmV4dFBDLCBMTEludDo6Z2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihub3JtYWxf
b3NyX2V4aXRfdHJhbXBvbGluZSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KG5leHRQQywgTExJbnQ6OmdldENvZGVSZWY8SlNFbnRyeVB0
clRhZz4obm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmUpLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAj
ZW5kaWYKICAgICB9CiAKQEAgLTIzOTUsNyArMjM5NSw3IEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgZGlzcGF0Y2hUb05leHRJbnN0cnVjdGlvbkR1cmluZ0V4aXQoVGhyb3dTY29wZSYgc2Nv
cGUsCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKICAgICBCeXRlY29kZUluZGV4IG5leHRCeXRlY29kZUluZGV4ID0gcGMubmV4dCgpLmlu
ZGV4KCk7CiAgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKS5m
aW5kKG5leHRCeXRlY29kZUluZGV4KTsKLSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSksIG5leHRCeXRlY29kZS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSksIG5leHRCeXRlY29kZS50YWdnZWRQdHIo
KSk7CiAjZW5kaWYKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24u
Y3BwCmluZGV4IGJkNGM0ZTRhNDc0OC4uNzM1YzFkZTUyNmY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCkBAIC04
Miw3ICs4Miw3IEBAIEV4ZWN1dGlvbkNvdW50ZXIqIENvbXBpbGF0aW9uOjpleGVjdXRpb25Db3Vu
dGVyRm9yKGNvbnN0IE9yaWdpblN0YWNrJiBvcmlnaW4pCiAgICAgcmV0dXJuIGNvdW50ZXIuZ2V0
KCk7CiB9CiAKLXZvaWQgQ29tcGlsYXRpb246OmFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKQor
dm9pZCBDb21waWxhdGlvbjo6YWRkT1NSRXhpdFNpdGUoY29uc3QgVmVjdG9yPENvZGVQdHI8SlNJ
bnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKQogewogICAgIG1fb3NyRXhpdFNpdGVzLmFw
cGVuZChPU1JFeGl0U2l0ZShjb2RlQWRkcmVzc2VzKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uaAppbmRleCA0ZjM2ZjU2
MDI0ZDkuLjI4MzQ3ODY2MDY3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5oCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFkZERlc2NyaXB0aW9uKGNvbnN0IENvbXBpbGVkQnl0ZWNvZGUmKTsKICAgICB2
b2lkIGFkZERlc2NyaXB0aW9uKGNvbnN0IE9yaWdpblN0YWNrJiwgY29uc3QgQ1N0cmluZyYgZGVz
Y3JpcHRpb24pOwogICAgIEV4ZWN1dGlvbkNvdW50ZXIqIGV4ZWN1dGlvbkNvdW50ZXJGb3IoY29u
c3QgT3JpZ2luU3RhY2smKTsKLSAgICB2b2lkIGFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKTsK
KyAgICB2b2lkIGFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQ
dHJUYWc+PiYgY29kZUFkZHJlc3Nlcyk7CiAgICAgT1NSRXhpdCogYWRkT1NSRXhpdCh1bnNpZ25l
ZCBpZCwgY29uc3QgT3JpZ2luU3RhY2smLCBFeGl0S2luZCwgYm9vbCBpc1dhdGNocG9pbnQpOwog
ICAgIAogICAgIHZvaWQgc2V0SmV0dGlzb25SZWFzb24oSmV0dGlzb25SZWFzb24sIGNvbnN0IEZp
cmVEZXRhaWwqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlck9TUkV4aXRTaXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPU1JFeGl0U2l0ZS5oCmluZGV4IGU4MTE4MThlZWExZC4uZWU4NDU3ZjE2NDMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRT
aXRlLmgKQEAgLTMzLDE3ICszMywxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFByb2Zp
bGVyIHsKIAogY2xhc3MgT1NSRXhpdFNpdGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IE9TUkV4
aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRh
Zz4+JiBjb2RlQWRkcmVzc2VzKQorICAgIGV4cGxpY2l0IE9TUkV4aXRTaXRlKGNvbnN0IFZlY3Rv
cjxDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29kZUFkZHJlc3NlcykKICAgICAgICAgOiBt
X2NvZGVBZGRyZXNzZXMoY29kZUFkZHJlc3NlcykKICAgICB7CiAgICAgfQogICAgIAotICAgIGNv
bnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2Rl
QWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUFkZHJlc3NlczsgfQorICAgIGNvbnN0IFZl
Y3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29kZUFkZHJlc3MoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVBZGRyZXNzZXM7IH0KICAgICAKICAgICBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxP
YmplY3QqKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBtX2NvZGVBZGRyZXNzZXM7CisgICAgVmVjdG9yPENvZGVQ
dHI8SlNJbnRlcm5hbFB0clRhZz4+IG1fY29kZUFkZHJlc3NlczsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpQcm9maWxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZUJhc2UuY3BwCmluZGV4IDJkOTRlMTRmNmQ2Yy4uMTkwMzU1ZGM0MjA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwCkBA
IC00OSw3ICs0OSw3IEBAIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICBzd2l0Y2ggKHR5cGUoKSkgewogICAgIGNhc2UgTmF0aXZlRXhlY3V0YWJs
ZVR5cGU6IHsKICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlID0ganNDYXN0PE5hdGl2
ZUV4ZWN1dGFibGUqPihyZWFsVGhpcyk7Ci0gICAgICAgIG91dC5wcmludCgiTmF0aXZlRXhlY3V0
YWJsZToiLCBSYXdQb2ludGVyKG5hdGl2ZS0+ZnVuY3Rpb24oKS5leGVjdXRhYmxlQWRkcmVzcygp
KSwgIi8iLCBSYXdQb2ludGVyKG5hdGl2ZS0+Y29uc3RydWN0b3IoKS5leGVjdXRhYmxlQWRkcmVz
cygpKSk7CisgICAgICAgIG91dC5wcmludCgiTmF0aXZlRXhlY3V0YWJsZToiLCBSYXdQb2ludGVy
KG5hdGl2ZS0+ZnVuY3Rpb24oKS50YWdnZWRQdHIoKSksICIvIiwgUmF3UG9pbnRlcihuYXRpdmUt
PmNvbnN0cnVjdG9yKCkudGFnZ2VkUHRyKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZTogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKaW5kZXggZTgyOTdkNzNiZmI0Li5hNzc0ZThkMDBkZDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaApA
QCAtMTMwLDcgKzEzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENv
ZGVGb3JDb25zdHJ1Y3QoKTsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gZW50cnlwb2ludEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEFy
aXR5Q2hlY2tNb2RlIGFyaXR5KQorICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gZW50cnlwb2lu
dEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQog
ICAgIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQuIFdlIG9u
bHkgaGF2ZSBpdCBmb3IgYXJpdHkgY2hlY2sgYmVjYXVzZSB3ZSB1c2UgdGhlCiAgICAgICAgIC8v
IG5vLWFyaXR5IGVudHJ5cG9pbnQgaW4gbm9uLXZpcnR1YWwgY2FsbHMsIHdoaWNoIHdpbGwgImNh
Y2hlIiB0aGlzIHZhbHVlIGRpcmVjdGx5IGluCkBAIC0xMzgsMTYgKzEzOCwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIGlmIChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgewogICAgICAgICAgICAgc3dp
dGNoIChraW5kKSB7CiAgICAgICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgotICAgICAgICAgICAg
ICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgIGlmIChDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaykK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKLSAgICAgICAgICAgICAgICBp
ZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgIGlmIChDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQp
LT5hZGRyZXNzRm9yQ2FsbChhcml0eSk7CisgICAgICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4g
cmVzdWx0ID0gZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoYXJpdHkp
OwogICAgICAgICBpZiAoYXJpdHkgPT0gTXVzdENoZWNrQXJpdHkpIHsKICAgICAgICAgICAgIC8v
IENhY2hlIHRoZSByZXN1bHQ7IHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgSklUJ3MgdmlydHVh
bCBjYWxsIG9wdGltaXphdGlvbnMuCiAgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKQEAgLTIw
Myw4ICsyMDMsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPEpJVENvZGU+IG1f
aml0Q29kZUZvckNhbGw7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZUZvckNvbnN0cnVj
dDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9qaXRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYWNoaW5lQ29udGV4dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFjaGluZUNvbnRleHQuaAppbmRleCBlYWQ0YzNiNGEyN2IuLmI1NmU5MDVhMzA4MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFjaGluZUNvbnRleHQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYWNoaW5lQ29udGV4dC5oCkBAIC00MSw5
ICs0MSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4gVCBzdGFja1BvaW50ZXIoY29u
c3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsKIAogI2lmIE9TKFdJTkRPV1MpIHx8IEhBVkUoTUFDSElO
RV9DT05URVhUKQogdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPiBUIGZyYW1lUG9pbnRlcihj
b25zdCBQbGF0Zm9ybVJlZ2lzdGVycyYpOwotaW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQ
bGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3QgUGxhdGZvcm1SZWdp
c3RlcnMmKTsKLWlubGluZSBzdGQ6Om9wdGlvbmFsPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0
Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPj4gaW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnN0IFBsYXRmb3Jt
UmVnaXN0ZXJzJik7Ci1pbmxpbmUgdm9pZCBzZXRJbnN0cnVjdGlvblBvaW50ZXIoUGxhdGZvcm1S
ZWdpc3RlcnMmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPik7Citpbmxp
bmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3Qg
UGxhdGZvcm1SZWdpc3RlcnMmKTsKK2lubGluZSBzdGQ6Om9wdGlvbmFsPENvZGVQdHI8UGxhdGZv
cm1SZWdpc3RlcnNQQ1B0clRhZz4+IGluc3RydWN0aW9uUG9pbnRlcihjb25zdCBQbGF0Zm9ybVJl
Z2lzdGVycyYpOworaW5saW5lIHZvaWQgc2V0SW5zdHJ1Y3Rpb25Qb2ludGVyKFBsYXRmb3JtUmVn
aXN0ZXJzJiwgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKIAogdGVtcGxhdGU8c2l6ZV90IE4+
IHZvaWQqJiBhcmd1bWVudFBvaW50ZXIoUGxhdGZvcm1SZWdpc3RlcnMmKTsKIHRlbXBsYXRlPHNp
emVfdCBOPiB2b2lkKiBhcmd1bWVudFBvaW50ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsK
QEAgLTY2LDcgKzY2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkKiYgZnJhbWVQb2ludGVySW1wbCht
Y29udGV4dF90Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4gVCBzdGFja1BvaW50
ZXIoY29uc3QgbWNvbnRleHRfdCYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPiBUIGZy
YW1lUG9pbnRlcihjb25zdCBtY29udGV4dF90Jik7Ci1pbmxpbmUgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+IGluc3RydWN0aW9uUG9pbnRlcihjb25zdCBt
Y29udGV4dF90Jik7CitpbmxpbmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBp
bnN0cnVjdGlvblBvaW50ZXIoY29uc3QgbWNvbnRleHRfdCYpOwogCiB0ZW1wbGF0ZTxzaXplX3Qg
Tj4gdm9pZComIGFyZ3VtZW50UG9pbnRlcihtY29udGV4dF90Jik7CiB0ZW1wbGF0ZTxzaXplX3Qg
Tj4gdm9pZCogYXJndW1lbnRQb2ludGVyKGNvbnN0IG1jb250ZXh0X3QmKTsKQEAgLTQyNiw3ICs0
MjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQqJiBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdzKQogfQogI2VuZGlmIC8vICFVU0UoUExBVEZPUk1fUkVHSVNURVJT
X1dJVEhfUFJPRklMRSkKIAotaW5saW5lIHN0ZDo6b3B0aW9uYWw8TWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+PiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3Qg
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxDb2RlUHRyPFBs
YXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+PiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QgUGxhdGZv
cm1SZWdpc3RlcnMmIHJlZ3MpCiB7CiAjaWYgVVNFKFBMQVRGT1JNX1JFR0lTVEVSU19XSVRIX1BS
T0ZJTEUpCiAgICAgdm9pZCogdmFsdWUgPSBXVEZfUkVBRF9QTEFURk9STV9SRUdJU1RFUlNfUENf
V0lUSF9QUk9GSUxFKHJlZ3MpOwpAQCAtNDM2LDIyICs0MzYsMjIgQEAgaW5saW5lIHN0ZDo6b3B0
aW9uYWw8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+PiBp
bnN0cnVjdGkKICAgICB2b2lkKiB2YWx1ZSA9IGluc3RydWN0aW9uUG9pbnRlckltcGwoY29uc3Rf
Y2FzdDxQbGF0Zm9ybVJlZ2lzdGVycyY+KHJlZ3MpKTsKICNlbmRpZgogICAgIGlmICghdmFsdWUp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2Vfb3B0aW9uYWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KG51bGxwdHIpKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9vcHRpb25hbChDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KG51bGxw
dHIpKTsKICAgICBpZiAoIXVzZXNQb2ludGVyVGFnZ2luZygpKQotICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX29wdGlvbmFsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BD
UHRyVGFnPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsKENvZGVQ
dHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4odmFsdWUpKTsKICAgICBpZiAoaXNUYWdnZWRX
aXRoPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9vcHRpb25hbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQ
Q1B0clRhZz4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbChDb2Rl
UHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KHZhbHVlKSk7CiAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIH0KIAotaW5saW5lIHZvaWQgc2V0SW5zdHJ1Y3Rpb25Qb2ludGVyKFBsYXRmb3Jt
UmVnaXN0ZXJzJiByZWdzLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiB2
YWx1ZSkKK2lubGluZSB2b2lkIHNldEluc3RydWN0aW9uUG9pbnRlcihQbGF0Zm9ybVJlZ2lzdGVy
cyYgcmVncywgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IHZhbHVlKQogewogI2lmIFVTRShQTEFU
Rk9STV9SRUdJU1RFUlNfV0lUSF9QUk9GSUxFKQotICAgIFdURl9XUklURV9QTEFURk9STV9SRUdJ
U1RFUlNfUENfV0lUSF9QUk9GSUxFKHJlZ3MsIHZhbHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
ICAgIFdURl9XUklURV9QTEFURk9STV9SRUdJU1RFUlNfUENfV0lUSF9QUk9GSUxFKHJlZ3MsIHZh
bHVlLnRhZ2dlZFB0cigpKTsKICNlbGlmIFVTRShEQVJXSU5fUkVHSVNURVJfTUFDUk9TKQotICAg
IF9fZGFyd2luX2FybV90aHJlYWRfc3RhdGU2NF9zZXRfcGNfZnB0cihyZWdzLCB2YWx1ZS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKKyAgICBfX2Rhcndpbl9hcm1fdGhyZWFkX3N0YXRlNjRfc2V0X3Bj
X2ZwdHIocmVncywgdmFsdWUudGFnZ2VkUHRyKCkpOwogI2Vsc2UKLSAgICBpbnN0cnVjdGlvblBv
aW50ZXJJbXBsKHJlZ3MpID0gdmFsdWUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBpbnN0cnVj
dGlvblBvaW50ZXJJbXBsKHJlZ3MpID0gdmFsdWUudGFnZ2VkUHRyKCk7CiAjZW5kaWYKIH0KICNl
bmRpZiAvLyBPUyhXSU5ET1dTKSB8fCBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKQEAgLTUyMSw3ICs1
MjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQqJiBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKG1jb250
ZXh0X3QmIG1hY2hpbmVDb250ZXh0KQogfQogI2VuZGlmIC8vICFVU0UoUExBVEZPUk1fUkVHSVNU
RVJTX1dJVEhfUFJPRklMRSkKIAotaW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9y
bVJlZ2lzdGVyc1BDUHRyVGFnPiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QgbWNvbnRleHRfdCYg
bWFjaGluZUNvbnRleHQpCitpbmxpbmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFn
PiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QgbWNvbnRleHRfdCYgbWFjaGluZUNvbnRleHQpCiB7
CiAjaWYgVVNFKERBUldJTl9SRUdJU1RFUl9NQUNST1MpCiAgICAgcmV0dXJuICppbnN0cnVjdGlv
blBvaW50ZXIobWFjaGluZUNvbnRleHQtPl9fc3MpOwpAQCAtNTMzLDcgKzUzMyw3IEBAIGlubGlu
ZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gaW5zdHJ1
Y3Rpb25Qb2ludGVyKGNvbnN0CiAgICAgdm9pZCogdmFsdWUgPSBpbnN0cnVjdGlvblBvaW50ZXJJ
bXBsKGNvbnN0X2Nhc3Q8bWNvbnRleHRfdCY+KG1hY2hpbmVDb250ZXh0KSk7CiAjZW5kaWYKIAot
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRh
Zz4odmFsdWUpOworICAgIHJldHVybiBDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+
KHZhbHVlKTsKICNlbmRpZgogfQogI2VuZGlmIC8vIEhBVkUoTUFDSElORV9DT05URVhUKQpAQCAt
NTQzLDE0ICs1NDMsMTQgQEAgaW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJl
Z2lzdGVyc1BDUHRyVGFnPiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QKIAogI2lmIE9TKERBUldJ
TikgJiYgX19EQVJXSU5fVU5JWDAzICYmIENQVShBUk02NCkKIAotaW5saW5lIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3Qg
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MpCitpbmxpbmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVy
c0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MpCiB7
CiAjaWYgVVNFKFBMQVRGT1JNX1JFR0lTVEVSU19XSVRIX1BST0ZJTEUpCiAgICAgdm9pZCogdmFs
dWUgPSBXVEZfUkVBRF9QTEFURk9STV9SRUdJU1RFUlNfTFJfV0lUSF9QUk9GSUxFKHJlZ3MpOwog
I2Vsc2UKICAgICB2b2lkKiB2YWx1ZSA9IF9fZGFyd2luX2FybV90aHJlYWRfc3RhdGU2NF9nZXRf
bHJfZnB0cihyZWdzKTsKICNlbmRpZgotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
UGxhdGZvcm1SZWdpc3RlcnNMUlB0clRhZz4odmFsdWUpOworICAgIHJldHVybiBDb2RlUHRyPFBs
YXRmb3JtUmVnaXN0ZXJzTFJQdHJUYWc+KHZhbHVlKTsKIH0KICNlbmRpZiAvLyBPUyhEQVJXSU4p
ICYmIF9fREFSV0lOX1VOSVgwMyAmJiBDUFUoQVJNNjQpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAKaW5kZXggOTEwZGZjMjU5YjA1
Li41M2ZjYzk5ZTU0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L05hdGl2ZUV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L05hdGl2ZUV4ZWN1dGFibGUuY3BwCkBAIC02MCwxMCArNjAsMTAgQEAgdm9pZCBOYXRpdmVFeGVj
dXRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJlZjxKSVRDb2RlPiYmIGNhbGxUaHVuaywg
UmVmPEpJVEMKICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1faml0
Q29kZUZvckNvbnN0cnVjdC0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpOwogICAgIG1f
bmFtZSA9IG5hbWU7CiAKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9q
aXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4o
bV9qaXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWly
ZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5
UHRyVGFnPihtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2suZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KG1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIGFzc2VydElz
VGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFnPihtX2ppdENvZGVGb3JDYWxsLT5hZGRyZXNzRm9yQ2Fs
bChBcml0eUNoZWNrTm90UmVxdWlyZWQpLnRhZ2dlZFB0cigpKTsKKyAgICBhc3NlcnRJc1RhZ2dl
ZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2Fs
bChBcml0eUNoZWNrTm90UmVxdWlyZWQpLnRhZ2dlZFB0cigpKTsKKyAgICBhc3NlcnRJc1RhZ2dl
ZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLnRhZ2dl
ZFB0cigpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2Rl
Rm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sudGFnZ2VkUHRyKCkpOwogfQogCiBOYXRpdmVFeGVj
dXRhYmxlOjpOYXRpdmVFeGVjdXRhYmxlKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBJbXBsZW1lbnRhdGlvblZp
c2liaWxpdHkgaW1wbGVtZW50YXRpb25WaXNpYmlsaXR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmgKaW5kZXggZDcyNTIzYzY2ZDk1Li41ZGY4MmE0
ZGQ4NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1
bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRnVuY3Rp
b24uaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbEZyYW1l
OwogCi11c2luZyBOYXRpdmVGdW5jdGlvbiA9IFR5cGVkRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnLCBFbmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopLCBGdW5jdGlv
bkF0dHJpYnV0ZXM6OkpTQ0hvc3RDYWxsPjsKK3VzaW5nIE5hdGl2ZUZ1bmN0aW9uID0gRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpTQ0hvc3RDYWxsPjsKIAogc3RydWN0IE5h
dGl2ZUZ1bmN0aW9uSGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goTmF0aXZlRnVuY3Rp
b24ga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CkBAIC00Miw3ICs0Miw3IEBAIHN0
cnVjdCBOYXRpdmVGdW5jdGlvbkhhc2ggewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZl
VG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCi11c2luZyBUYWdnZWROYXRp
dmVGdW5jdGlvbiA9IFR5cGVkRnVuY3Rpb25QdHI8SG9zdEZ1bmN0aW9uUHRyVGFnLCBFbmNvZGVk
SlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6
OkpTQ0hvc3RDYWxsPjsKK3VzaW5nIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uID0gRnVuY3Rpb25QdHI8
SG9zdEZ1bmN0aW9uUHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpTQ0hvc3RDYWxsPjsKIAogc3RydWN0IFRhZ2dl
ZE5hdGl2ZUZ1bmN0aW9uSGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goVGFnZ2VkTmF0
aXZlRnVuY3Rpb24ga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CkBAIC02NCw3ICs2
NCw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IEpTQzo6TmF0aXZlRnVuY3Rpb24ga2V5KQogewotICAgIGFkZChoYXNoZXIsIGtleS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICBhZGQoaGFzaGVyLCBrZXkudGFnZ2VkUHRyKCkpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERlZmF1bHRIYXNoOwpAQCAtNzIsNyArNzIsNyBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok5hdGl2ZUZ1bmN0aW9uPiA6IEpTQzo6
TmF0aXZlRnVuY3Rpb25IYXNoIHsgfQogCiBpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IEpTQzo6VGFnZ2VkTmF0aXZlRnVuY3Rpb24ga2V5KQogewotICAgIGFkZChoYXNoZXIsIGtleS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBhZGQoaGFzaGVyLCBrZXkudGFnZ2VkUHRyKCkpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERlZmF1bHRIYXNoOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAppbmRleCBhZDc4MDlkMzYyZjkuLmUw
OTJlNmY1YzhjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlTbG90LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlT
bG90LmgKQEAgLTg2LDExICs4NiwxMSBAQCBpbmxpbmUgdW5zaWduZWQgYXR0cmlidXRlc0ZvclN0
cnVjdHVyZSh1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
OF90PihhdHRyaWJ1dGVzKTsKIH0KIAotdXNpbmcgR2V0VmFsdWVGdW5jID0gVHlwZWRGdW5jdGlv
blB0cjxHZXRWYWx1ZUZ1bmNQdHJUYWcsIEVuY29kZWRKU1ZhbHVlKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSksIEZ1bmN0aW9uQXR0cmlidXRlczo6SklUT3Bl
cmF0aW9uPjsKLXVzaW5nIEdldFZhbHVlRnVuY1dpdGhQdHIgPSBUeXBlZEZ1bmN0aW9uUHRyPEdl
dFZhbHVlRnVuY1dpdGhQdHJQdHJUYWcsIEVuY29kZWRKU1ZhbHVlKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSwgdm9pZCopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6
OkpJVE9wZXJhdGlvbj47Cit1c2luZyBHZXRWYWx1ZUZ1bmMgPSBGdW5jdGlvblB0cjxHZXRWYWx1
ZUZ1bmNQdHJUYWcsIEVuY29kZWRKU1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIFByb3BlcnR5TmFtZSksIEZ1bmN0aW9uQXR0cmlidXRlczo6SklUT3BlcmF0aW9uPjsKK3Vz
aW5nIEdldFZhbHVlRnVuY1dpdGhQdHIgPSBGdW5jdGlvblB0cjxHZXRWYWx1ZUZ1bmNXaXRoUHRy
UHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUsIHZvaWQqKSwgRnVuY3Rpb25BdHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+Owog
Ci11c2luZyBQdXRWYWx1ZUZ1bmMgPSBUeXBlZEZ1bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1B0clRh
ZywgYm9vbChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
UHJvcGVydHlOYW1lKSwgRnVuY3Rpb25BdHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+OwotdXNpbmcg
UHV0VmFsdWVGdW5jV2l0aFB0ciA9IFR5cGVkRnVuY3Rpb25QdHI8UHV0VmFsdWVGdW5jV2l0aFB0
clB0clRhZywgYm9vbChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgUHJvcGVydHlOYW1lLCB2b2lkKiksIEZ1bmN0aW9uQXR0cmlidXRlczo6SklUT3BlcmF0
aW9uPjsKK3VzaW5nIFB1dFZhbHVlRnVuYyA9IEZ1bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1B0clRh
ZywgYm9vbChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
UHJvcGVydHlOYW1lKSwgRnVuY3Rpb25BdHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+OwordXNpbmcg
UHV0VmFsdWVGdW5jV2l0aFB0ciA9IEZ1bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1dpdGhQdHJQdHJU
YWcsIGJvb2woSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IFByb3BlcnR5TmFtZSwgdm9pZCopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpJVE9wZXJhdGlvbj47
CiAKIGNsYXNzIFByb3BlcnR5U2xvdCB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHV0UHJvcGVydHlTbG90LmgKaW5kZXggN2RiYmY1N2U3MDQ1Li5jYTZkMzc3NWY3ODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xv
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5o
CkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNPYmplY3Q7CiBjbGFz
cyBKU0Z1bmN0aW9uOwogICAgIAotdXNpbmcgQ3VzdG9tQWNjZXNzb3JWYWx1ZUZ1bmMgPSBUeXBl
ZEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnLCBib29sKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpPjsKK3VzaW5nIEN1
c3RvbUFjY2Vzc29yVmFsdWVGdW5jID0gRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWcs
IGJvb2woSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFBy
b3BlcnR5TmFtZSk+OwogCiBjbGFzcyBQdXRQcm9wZXJ0eVNsb3QgewogcHVibGljOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAppbmRl
eCBmYjBkZGRlNzlmNDUuLjJmYjRiZTU1MTI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKQEAgLTM3OSw3ICszNzksNyBAQCB2
b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoU2Vjb25kcyYgc3RhY2tUcmFjZVByb2Nl
c3NpbmdUaW1lKQogICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IHN0YXRpY19jYXN0PENhbGxG
cmFtZSo+KG1hY2hpbmVGcmFtZSk7CiAgICAgICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlvblBv
aW50ZXIgPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lzdGVycyk7CiAg
ICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uUG9pbnRlcikKLSAgICAgICAgICAgICAgICAg
ICAgbWFjaGluZVBDID0gaW5zdHJ1Y3Rpb25Qb2ludGVyLT51bnRhZ2dlZEV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9IGluc3RydWN0aW9uUG9pbnRl
ci0+dW50YWdnZWRQdHIoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIG1hY2hpbmVQQyA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlbW92
ZUNvZGVQdHJUYWcoTWFjaGluZUNvbnRleHQ6OmxsaW50SW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lz
dGVycykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVj
dXRhYmxlLmNwcAppbmRleCA5NmM5NTczODk5MzguLjViOTI3ZWIxNDdiYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKQEAgLTc1
LDggKzc1LDggQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpjbGVhckNvZGUoSXNvQ2VsbFNldCYg
Y2xlYXJhYmxlQ29kZVNldCkKIHsKICAgICBtX2ppdENvZGVGb3JDYWxsID0gbnVsbHB0cjsKICAg
ICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBudWxscHRyOwotICAgIG1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwot
ICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNo
ZWNrID0gQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVj
dFdpdGhBcml0eUNoZWNrID0gQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwogCiAgICAgc3dpdGNo
ICh0eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBlODAyYjM5MWExM2EuLmE3NWI0MjIxM2IzZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtNzE3LDcgKzcxNyw3IEBAIE5h
dGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRSZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbikK
ICAgICByZXR1cm4gZ2V0T3JDcmVhdGUobV9mYXN0UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRl
cm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGlu
ZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmlu
ZGV4IDhjMTFmNTM5NDQwYi4uYTg5ZjE2Zjk2M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKQEAgLTU2NCw3ICs1NjQsNyBAQCBwdWJsaWM6CiAgICAgTmF0aXZlRXhlY3V0YWJsZSog
Z2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOwog
ICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldFJlbW90ZUZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9u
KTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRl
cm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9y
KENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBnZXRDVElMaW5rQ2FsbCgpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiBnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKTsKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGdldENUSVZpcnR1
YWxDYWxsKENhbGxNb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNVHJhcHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5j
cHAKaW5kZXggYjUxMDUyOTdiODQ0Li5jNDZjMTg3Y2ZmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBzdHJ1Y3QgVk1UcmFwczo6U2lnbmFsQ29udGV4dCB7CiBwcml2YXRlOgotICAgIFNpZ25h
bENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycywgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+IHRyYXBQQykKKyAgICBTaWduYWxDb250ZXh0
KFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMsIENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQ
Q1B0clRhZz4gdHJhcFBDKQogICAgICAgICA6IHJlZ2lzdGVycyhyZWdpc3RlcnMpCiAgICAgICAg
ICwgdHJhcFBDKHRyYXBQQykKICAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6
OnN0YWNrUG9pbnRlcihyZWdpc3RlcnMpKQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVyczsKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gdHJhcFBDOworICAgIENvZGVQdHI8
UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gdHJhcFBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRl
cjsKICAgICB2b2lkKiBmcmFtZVBvaW50ZXI7CiB9OwpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFZN
VHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoVk1UcmFwczo6U2lnbmFsQ29udGV4dCYg
Y29udGV4dCwgU3RhY2tCbwogICAgIC8vIFRoaXMgbXVzdCBiZSB0aGUgaW5pdGlhbCBzaWduYWwg
dG8gZ2V0IHRoZSBtdXRhdG9yIHRocmVhZCdzIGF0dGVudGlvbi4KICAgICAvLyBMZXQncyBnZXQg
dGhlIHRocmVhZCB0byBicmVhayBhdCBpbnZhbGlkYXRpb24gcG9pbnRzIGlmIG5lZWRlZC4KICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgIHZvaWQqIHRyYXBQQyA9IGNvbnRleHQudHJhcFBD
LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lkKiB0cmFwUEMgPSBjb250ZXh0
LnRyYXBQQy51bnRhZ2dlZFB0cigpOwogICAgIC8vIFdlIG11c3QgZW5zdXJlIHdlJ3JlIGluIEpJ
VC9MTGludCBjb2RlLiBJZiB3ZSBhcmUsIHdlIGtub3cgYSBmZXcgdGhpbmdzOgogICAgIC8vIC0g
VGhlIEpTIHRocmVhZCBpc24ndCBob2xkaW5nIHRoZSBtYWxsb2MgbG9jay4gVGhlcmVmb3JlLCBp
dCdzIHNhZmUgdG8gbWFsbG9jIGJlbG93LgogICAgIC8vIC0gVGhlIEpTIHRocmVhZCBpc24ndCBo
b2xkaW5nIHRoZSBDb2RlQmxvY2tTZXQgbG9jay4KQEAgLTIxMyw3ICsyMTMsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgaWYgKCFzaWduYWxDb250ZXh0KQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOwogCi0gICAgICAgICAgICAgICAgdm9p
ZCogdHJhcFBDID0gc2lnbmFsQ29udGV4dC0+dHJhcFBDLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICAgICAgICAgICAgICB2b2lkKiB0cmFwUEMgPSBzaWduYWxDb250ZXh0LT50cmFw
UEMudW50YWdnZWRQdHIoKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzSklUUEModHJhcFBDKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIu
Y3BwCmluZGV4IDZkNjlhNGRmMmUyMy4uYjM2YjU1NzQ3ZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCkBAIC04MCw3ICs4
MCw3IEBAIHByaXZhdGU6CiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKIHByaXZhdGU6Ci0gICAg
U2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gbWFjaGluZVBDKQorICAgIFNpZ25h
bENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycywgQ29kZVB0cjxQbGF0Zm9ybVJl
Z2lzdGVyc1BDUHRyVGFnPiBtYWNoaW5lUEMpCiAgICAgICAgIDogcmVnaXN0ZXJzKHJlZ2lzdGVy
cykKICAgICAgICAgLCBtYWNoaW5lUEMobWFjaGluZVBDKQogICAgICAgICAsIHN0YWNrUG9pbnRl
cihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKHJlZ2lzdGVycykpCkBAIC0xNDAsMTYgKzE0
MCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IGZwOiAlMDE2bGx4IGxy
OiAlMDE2bGx4IiwKICAgICAgICAgICAgIGksIHJlZ2lzdGVycy5fX3hbaV0sCiAgICAgICAgICAg
ICBNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyPHVpbnQ2NF90PihyZWdpc3RlcnMpLAotICAg
ICAgICAgICAgTWFjaGluZUNvbnRleHQ6OmxpbmtSZWdpc3RlcihyZWdpc3RlcnMpLnVudGFnZ2Vk
RXhlY3V0YWJsZUFkZHJlc3M8dWludDY0X3Q+KCkpOworICAgICAgICAgICAgTWFjaGluZUNvbnRl
eHQ6OmxpbmtSZWdpc3RlcihyZWdpc3RlcnMpLnVudGFnZ2VkUHRyPHVpbnQ2NF90PigpKTsKICAg
ICAgICAgbG9nKCJzcDogJTAxNmxseCBwYzogJTAxNmxseCBjcHNyOiAlMDh4IiwKICAgICAgICAg
ICAgIE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXI8dWludDY0X3Q+KHJlZ2lzdGVycyksCi0g
ICAgICAgICAgICBtYWNoaW5lUEMudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx1aW50NjRfdD4o
KSwKKyAgICAgICAgICAgIG1hY2hpbmVQQy51bnRhZ2dlZFB0cjx1aW50NjRfdD4oKSwKICAgICAg
ICAgICAgIHJlZ2lzdGVycy5fX2Nwc3IpOwogI2VuZGlmCiAgICAgfQogCiAgICAgUGxhdGZvcm1S
ZWdpc3RlcnMmIHJlZ2lzdGVyczsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1S
ZWdpc3RlcnNQQ1B0clRhZz4gbWFjaGluZVBDOworICAgIENvZGVQdHI8UGxhdGZvcm1SZWdpc3Rl
cnNQQ1B0clRhZz4gbWFjaGluZVBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lk
KiBmcmFtZVBvaW50ZXI7CiB9OwpAQCAtMTY0LDcgKzE2NCw3IEBAIHN0YXRpYyB2b2lkIGluc3Rh
bGxDcmFzaEhhbmRsZXIoKQogICAgICAgICBpZiAoIXNpZ25hbENvbnRleHQpCiAgICAgICAgICAg
ICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOwogICAgICAgICAgICAgCi0gICAgICAg
IHZvaWQqIG1hY2hpbmVQQyA9IHNpZ25hbENvbnRleHQtPm1hY2hpbmVQQy51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHZvaWQqIG1hY2hpbmVQQyA9IHNpZ25hbENvbnRleHQt
Pm1hY2hpbmVQQy51bnRhZ2dlZFB0cigpOwogICAgICAgICBpZiAoIWlzSklUUEMobWFjaGluZVBD
KSkKICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CiAKQEAgLTE4
NSw3ICsxODUsNyBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAKICAgICB2b2lkIGR1bXAoKSB7
IH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFn
PiBtYWNoaW5lUEM7CisgICAgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBtYWNo
aW5lUEM7CiAgICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsK
IH07CkBAIC0yMzYsNyArMjM2LDcgQEAgYXV0byBTaWdpbGxDcmFzaEFuYWx5emVyOjphbmFseXpl
KFNpZ25hbENvbnRleHQmIGNvbnRleHQpIC0+IENyYXNoU291cmNlCiAgICAgICAgIH0KICAgICAg
ICAgTG9ja2VyIGxvY2tlciB7IEFkb3B0TG9jaywgaW5zcGVjdG9yLmdldExvY2soKSB9OwogCi0g
ICAgICAgIHZvaWQqIHBjID0gY29udGV4dC5tYWNoaW5lUEMudW50YWdnZWRFeGVjdXRhYmxlQWRk
cmVzcygpOworICAgICAgICB2b2lkKiBwYyA9IGNvbnRleHQubWFjaGluZVBDLnVudGFnZ2VkUHRy
KCk7CiAgICAgICAgIGF1dG8gaXNJbkpJVE1lbW9yeSA9IGluc3BlY3Rvci5pc1ZhbGlkRXhlY3V0
YWJsZU1lbW9yeShwYyk7CiAgICAgICAgIGlmICghaXNJbkpJVE1lbW9yeSkgewogICAgICAgICAg
ICAgbG9nKCJFUlJPUjogVGltZWQgb3V0OiBub3QgYWJsZSB0byBkZXRlcm1pbmUgaWYgcGMgJXAg
aXMgaW4gdmFsaWQgSklUIGV4ZWN1dGFibGUgbWVtb3J5IiwgcGMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKaW5kZXggMWNlY2ZkMmVh
ODVjLi40MWIwY2QzMGVhMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21BaXJJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcApAQCAtMzM4Niw3ICszMzg2LDcgQEAgVG1wIEFpcklSR2Vu
ZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKENhdGNoS2luZCBraW5kLCBDb250cm9sVHlwZSYgZGF0YSwg
dW5zaWduZWQgZXgKICAgICAgICAgaml0Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxs
KE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENsZWFy
RXhjZXB0aW9uSWZDYXRjaGFibGUpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVy
YXRpb25QdHJUYWc+KGNhbGwsIG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9u
SWZDYXRjaGFibGUpOwogICAgICAgICB9KTsKICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDhkZTEwZmE3YzI5Ny4u
M2YxMDRiNThmOGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCkBAIC0yNzExLDcgKzI3MTEsNyBAQCBWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6ZW1pdENhdGNoSW1wbChDYXRjaEtpbmQga2luZCwgQ29udHJvbFR5cGUmIGRhdGEsIHVuc2ln
bmVkCiAgICAgICAgIGppdC5tb3ZlKHBhcmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRp
b25QdHJUYWcpOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlv
bklmQ2F0Y2hhYmxlKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRy
VGFnPihjYWxsLCBvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hh
YmxlKTsKICAgICAgICAgfSk7CiAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmNwcAppbmRleCBmYmQ2ODI2ODEyOWYuLjc4NDRhMmQyYjE5MCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtMTQyLDcgKzE0Miw3
IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAg
IEZJTkFMSVpFX1dBU01fQ09ERV9GT1JfTU9ERShDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGxp
bmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1bmN0aW9u
WyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNl
KSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBv
aW50Qnlwcm9kdWN0cykpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0
clRhZz4gZW50cnlwb2ludDsKKyAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2lu
dDsKICAgICB7CiAgICAgICAgIFJlZjxCQlFDYWxsZWU+IGNhbGxlZSA9IEJCUUNhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwg
V1RGTW92ZSh0aWVyVXApLCBXVEZNb3ZlKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKSwgV1RGTW92
ZShmdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxl
cnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpLCBXVEZNb3ZlKGxvb3BFbnRy
eXBvaW50TG9jYXRpb25zKSwgZnVuY3Rpb24tPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwog
ICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9j
YXRpb25zKQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIG1fY2FsbGVlR3JvdXAtPnNldEJCUUNhbGxlZShsb2Nr
ZXIsIG1fZnVuY3Rpb25JbmRleCwgY2FsbGVlLmNvcHlSZWYoKSk7CiAKICAgICAgICAgZm9yIChh
dXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAg
ICAgICAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAg
IGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9y
dEZ1bmN0aW9uQ291bnQoKSkKICAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jYWxsZWVH
cm91cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2Rl
KCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBCQlFQbGFuOjpk
aWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkKIAogICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlu
a2VkKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
PiBleGVjdXRhYmxlQWRkcmVzczsKKyAgICAgICAgICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
PiBleGVjdXRhYmxlQWRkcmVzczsKICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9u
LT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25J
bmRleFNwYWNlKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2
ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4g
VGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKICAgICAgICAgICAg
ICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5hdChjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSkuY29kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxlZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q2FsbGVlLmNwcAppbmRleCAzMjAyZjU0ODBjYTQuLjczY2QzYmRlNTVhMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKQEAgLTExMCwxMiArMTEwLDEyIEBAIExM
SW50Q2FsbGVlOjpMTEludENhbGxlZShGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciYgZ2VuZXJh
dG9yLCBzaXplX3QgaW5kZXgsIHN0CiAgICAgfQogfQogCi12b2lkIExMSW50Q2FsbGVlOjpzZXRF
bnRyeXBvaW50KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9p
bnQpCit2b2lkIExMSW50Q2FsbGVlOjpzZXRFbnRyeXBvaW50KENvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPiBlbnRyeXBvaW50KQogewogICAgIG1fZW50cnlwb2ludCA9IGVudHJ5cG9pbnQ7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IExMSW50Q2FsbGVlOjplbnRy
eXBvaW50KCkgY29uc3QKK0NvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBMTEludENhbGxlZTo6ZW50
cnlwb2ludCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZW50cnlwb2ludDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAppbmRleCBkOGFkZjRiMTMwZmEuLmY5YTdjNDll
NzQzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaApAQCAtNTUsNyAr
NTUsNyBAQCBwdWJsaWM6CiAgICAgSW5kZXhPck5hbWUgaW5kZXhPck5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4T3JOYW1lOyB9CiAgICAgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsYXRpb25Nb2RlOyB9CiAKLSAgICB2aXJ0dWFsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkgPSAwOwogICAgIHZpcnR1YWwgc3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+IHJhbmdl
KCkgY29uc3QgPSAwOwogCkBAIC03OSw3ICs3OSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSklU
Q2FsbGVlIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRh
Zz4oKTsgfQorICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdn
ZWQ8V2FzbUVudHJ5UHRyVGFnPigpOyB9CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSBvdmVycmlkZSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNh
dmVSZWdpc3RlcnM7IH0KICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
d2FzbVRvV2FzbUNhbGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQog
CkBAIC0yMjUsOCArMjI1LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBMTEludENhbGxlZShnZW5lcmF0b3IsIGluZGV4LCBXVEZNb3ZlKG5hbWUpKSk7CiAgICAgfQog
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50KCkgY29uc3QgZmluYWw7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRFbnRyeXBvaW50KENvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+IGVudHJ5cG9pbnQoKSBjb25zdCBmaW5hbDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdp
c3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGZpbmFsOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPiByYW5nZSgpIGNvbnN0IGZpbmFs
OwogCkBAIC0zMTMsNyArMzEzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8T3B0aW1pemluZ0pJ
VENhbGxlZT4gbV9yZXBsYWNlbWVudHNbV2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2Rlc107CiAgICAg
UmVmUHRyPE9TUkVudHJ5Q2FsbGVlPiBtX29zckVudHJ5Q2FsbGVlc1tXYXNtOjpOdW1iZXJPZk1l
bW9yeU1vZGVzXTsKICNlbmRpZgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQ
dHJUYWc+IG1fZW50cnlwb2ludDsKKyAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gbV9lbnRy
eXBvaW50OwogfTsKIAogdXNpbmcgTExJbnRDYWxsZWVzID0gVGhyZWFkU2FmZVJlZkNvdW50ZWRG
aXhlZFZlY3RvcjxSZWY8TExJbnRDYWxsZWU+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGVlR3JvdXAuY3BwCmluZGV4IDFiZWJjOWNiMWEyYi4uNWQ1ZjZiMDI2OTE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5jcHAK
QEAgLTc0LDcgKzc0LDcgQEAgQ2FsbGVlR3JvdXA6OkNhbGxlZUdyb3VwKFZNJiB2bSwgTWVtb3J5
TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3IKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2Fs
bEVudHJ5UG9pbnRzID0gRml4ZWRWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRy
eVB0clRhZz4+KG1fY2FsbGVlQ291bnQpOworICAgICAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxs
RW50cnlQb2ludHMgPSBGaXhlZFZlY3RvcjxDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+KG1fY2Fs
bGVlQ291bnQpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxs
ZWVDb3VudDsgKytpKQogICAgICAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzW2ldID0gbV9sbGludENhbGxlZXMtPmF0KGkpLT5lbnRyeXBvaW50KCk7CkBAIC05Niw3ICs5
Niw3IEBAIENhbGxlZUdyb3VwOjpDYWxsZWVHcm91cChWTSYgdm0sIE1lbW9yeU1vZGUgbW9kZSwg
TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9yCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50
cyA9IEZpeGVkVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+Piht
X2NhbGxlZUNvdW50KTsKKyAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRz
ID0gRml4ZWRWZWN0b3I8Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+PihtX2NhbGxlZUNvdW50KTsK
IAogICAgICAgICAgICAgQkJRUGxhbiogYmJxUGxhbiA9IHN0YXRpY19jYXN0PEJCUVBsYW4qPiht
X3BsYW4uZ2V0KCkpOwogICAgICAgICAgICAgYmJxUGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZd
ICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4m
JiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIFJlZlB0cjxCQlFDYWxsZWU+JiYgd2FzbUVudHJ5
cG9pbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
ZWVHcm91cC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmgK
aW5kZXggNmUyMThmYjg4YzZhLi43NTFhZmU2ZWIzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oCkBAIC0xNDIsMTQgKzE0MiwxNCBAQCBwdWJsaWM6
CiAgICAgfQogI2VuZGlmCiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPiogZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiogZW50
cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRl
eFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxl
ZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAg
ICAgICByZXR1cm4gJm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XTsK
ICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiB3YXNt
VG9XYXNtRXhpdFN0dWIodW5zaWduZWQgZnVuY3Rpb25JbmRleCkKKyAgICBDb2RlUHRyPFdhc21F
bnRyeVB0clRhZz4gd2FzbVRvV2FzbUV4aXRTdHViKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV93YXNtVG9XYXNtRXhpdFN0dWJzW2Z1bmN0aW9uSW5kZXhd
LmNvZGUoKTsKICAgICB9CkBAIC0xNzgsNyArMTc4LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAg
IFJlZlB0cjxMTEludENhbGxlZXM+IG1fbGxpbnRDYWxsZWVzOwogICAgIEhhc2hNYXA8dWludDMy
X3QsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+LCBEZWZhdWx0SGFzaDx1aW50MzJf
dD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVk
ZGVyQ2FsbGVlczsKLSAgICBGaXhlZFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7CisgICAgRml4ZWRWZWN0
b3I8Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50
czsKICAgICBGaXhlZFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fd2Fz
bVRvV2FzbUNhbGxzaXRlczsKICAgICBGaXhlZFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxFbnRy
eVBsYW4+IG1fcGxhbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmRlOWYxNjZmYTdlLi4zNzE2NDRlMzEyODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuY3BwCkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhh
bmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlCiAg
ICAgYXV0byBpbnN0cnVjdGlvblBvaW50ZXIgPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Q
b2ludGVyKGNvbnRleHQpOwogICAgIGlmICghaW5zdHJ1Y3Rpb25Qb2ludGVyKQogICAgICAgICBy
ZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOwotICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1
Y3Rpb24gPSBpbnN0cnVjdGlvblBvaW50ZXItPnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICB2b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25Qb2ludGVyLT51bnRh
Z2dlZFB0cigpOwogICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRlcm5h
bDo6dmVyYm9zZSwgInN0YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVy
KGZhdWx0aW5nSW5zdHJ1Y3Rpb24pKTsKIAogICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25h
bEhhbmRsZXJJbnRlcm5hbDo6dmVyYm9zZSwgIkpJVCBtZW1vcnkgc3RhcnQ6ICIsIFJhd1BvaW50
ZXIoc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2woKSksICIgZW5kOiAiLCBSYXdQb2lu
dGVyKGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMzY2ZDY1YjJlYjk1Li42YTBmMWQ2N2FiODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTQ2MSw3ICs0NjEsNyBA
QCBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbiB7CiAvLyBtZWFudCBhcyBmYXN0IGxvb2t1cCB0YWJs
ZXMgZm9yIHRoZXNlIG9wY29kZXMgYW5kIGRvIG5vdCBvd24gY29kZS4KIHN0cnVjdCBXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RUQ7Ci0gICAgdXNpbmcgTG9hZExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21F
bnRyeVB0clRhZz4qOworICAgIHVzaW5nIExvYWRMb2NhdGlvbiA9IENvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPio7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIHR5
cGVJbmRleCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2ludExvYWRM
b2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcAppbmRleCA0YjU4OWU1NWI3MDAuLjcyM2Qy
MmMxOGE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRs
ZXJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlcklu
Zm8uY3BwCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBXYXNt
IHsKIAotdm9pZCBIYW5kbGVySW5mbzo6aW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJ
bmZvJiB1bmxpbmtlZEluZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPiBsYWJlbCkKK3ZvaWQgSGFuZGxlckluZm86OmluaXRpYWxpemUoY29uc3QgVW5saW5r
ZWRIYW5kbGVySW5mbyYgdW5saW5rZWRJbmZvLCBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IGxhYmVsKQogewogICAgIG1fdHlwZSA9IHVubGlua2VkSW5mby5tX3R5cGU7CiAgICAgbV9z
dGFydCA9IHVubGlua2VkSW5mby5tX3N0YXJ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtSGFuZGxlckluZm8uaAppbmRleCA4M2ZhMmYwMjM4YmQuLmNlYjg4YzcwOWRkNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKQEAgLTg3LDcg
Kzg3LDcgQEAgc3RydWN0IFVubGlua2VkSGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9C
YXNlIHsKIHN0cnVjdCBIYW5kbGVySW5mbyA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgewogICAg
IHN0YXRpYyBjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4KEluc3RhbmNlJiwgY29u
c3QgRml4ZWRWZWN0b3I8SGFuZGxlckluZm8+JiBleGVwdGlvbkhhbmRsZXJzLCB1bnNpZ25lZCBp
bmRleCwgY29uc3QgV2FzbTo6VGFnKiBleGNlcHRpb25UYWcpOwogCi0gICAgdm9pZCBpbml0aWFs
aXplKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4pOworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVbmxpbmtl
ZEhhbmRsZXJJbmZvJiwgQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPik7CiAKICAgICB1
bnNpZ25lZCB0YWcoKSBjb25zdAogICAgIHsKQEAgLTEwMSw3ICsxMDEsNyBAQCBzdHJ1Y3QgSGFu
ZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKICAgICAgICAgcmV0dXJuIG1fZGVs
ZWdhdGVUYXJnZXQ7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IG1fbmF0aXZlQ29kZTsKKyAgICBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IG1fbmF0aXZlQ29kZTsKIAogcHJpdmF0ZToKICAgICB1bmlvbiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgKaW5k
ZXggOTY4OTVmZTgwNjg0Li4wY2MzY2Q0MmE0NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21JUkdlbmVyYXRvckhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgKQEAgLTEyOSw3ICsxMjksNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZW1pdFJldGhyb3dJbXBsKENDYWxsSGVscGVycyYgaml0KQog
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsK
ICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7CiAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0aHJvdykpOworICAgICAgICBsaW5rQnVmZmVyLmxp
bms8T3BlcmF0aW9uUHRyVGFnPihjYWxsLCBvcGVyYXRpb25XYXNtUmV0aHJvdyk7CiAgICAgfSk7
CiB9CiAKQEAgLTE1OSw3ICsxNTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW1pdFRocm93SW1w
bChDQ2FsbEhlbHBlcnMmIGppdCwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXgpCiAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5m
YXJKdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsK
ICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbldhc21UaHJvdykpOworICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9u
UHRyVGFnPihjYWxsLCBvcGVyYXRpb25XYXNtVGhyb3cpOwogICAgIH0pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCmluZGV4IGM4NjFlOWJlNjNhYy4uNjM2
NDhmM2NhZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5z
dGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApA
QCAtMTk1LDcgKzE5NSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGFyZ2V0IGluc3RhbmNlIGFu
ZCBlbnRyeXBvaW50IGFyZSBvbmx5IHNldCBmb3Igd2FzbS0+d2FzbSBjYWxscywgYW5kIGFyZSBv
dGhlcndpc2UgbnVsbHB0ci4gVGhlIGVtYmVkZGVyLXNwZWNpZmljIGxvZ2ljIG9jY3VycyB0aHJv
dWdoIGltcG9ydCBmdW5jdGlvbi4KICAgICAgICAgSW5zdGFuY2UqIHRhcmdldEluc3RhbmNlIHsg
bnVsbHB0ciB9OwogICAgICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9j
YXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24geyBudWxscHRyIH07Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YjsK
KyAgICAgICAgQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YjsKICAg
ICAgICAgdm9pZCogaW1wb3J0RnVuY3Rpb24geyBudWxscHRyIH07IC8vIEluIGEgSlMgZW1iZWRk
aW5nLCB0aGlzIGlzIGEgV3JpdGVCYXJyaWVyPEpTT2JqZWN0Pi4KICAgICB9OwogICAgIHVuc2ln
bmVkIG51bUltcG9ydEZ1bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtSW1wb3J0RnVuY3Rp
b25zOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQ
bGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCmlu
ZGV4IDU4MTQyNjcxZThiZi4uNTJmYzNiMmE0MTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcApAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgTExJbnRQ
bGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkKIAogICAgIGZvciAoYXV0byYgdW5saW5rZWQg
OiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6
IHVubGlua2VkKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKKyAgICAgICAgICAgIENvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9y
bWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBvcnRzIGNv
dWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNo
cG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNT
RVJULgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjY0NjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAppbmRleCA4OTBkOGQyMDk3YWYuLjk1ZmMxZDE5OTJjNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgT01HUGxh
bjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKIAogICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jYWxsZWVT
YXZlUmVnaXN0ZXJzKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+IGVudHJ5cG9pbnQ7CisgICAgQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7
CiAgICAgewogICAgICAgICBBU1NFUlQobV9jYWxsZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+
Y2FsbGVlR3JvdXBGb3IobW9kZSgpKSk7CiAgICAgICAgIFJlZjxPTUdDYWxsZWU+IGNhbGxlZSA9
IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4
U3BhY2UpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24t
PnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMp
LCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKQEAgLTEyMiw3ICsxMjIsNyBA
QCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIG1fY2FsbGVl
R3JvdXAtPnNldE9NR0NhbGxlZShsb2NrZXIsIG1fZnVuY3Rpb25JbmRleCwgY2FsbGVlLmNvcHlS
ZWYoKSk7CiAKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2Fs
bHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQ
dHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgICAgICAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4g
ZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1f
bW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKICAgICAg
ICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jYWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0
dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CiAgICAgICAgICAgICBlbHNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCmluZGV4
IDFjNWQyMWVhZDY4Ny4uY2E1ODBkY2MwN2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgT1NS
RW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogCiAgICAgICAgIExvY2tlciBsb2Nr
ZXIgeyBtX2NhbGxlZUdyb3VwLT5tX2xvY2sgfTsKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDog
Y2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgICAgICAgICBDb2Rl
UHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1
bmN0aW9uQ291bnQoKSkKICAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jYWxsZWVHcm91
cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7
CiAgICAgICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bl
cmF0aW9ucy5jcHAKaW5kZXggOTA3YjRjOTlkOWM4Li5jMTNmYmM3ODBjNWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKQEAgLTIxNiw3ICsyMTYs
NyBAQCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNv
bnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgYwogI2VuZGlmCiAgICAgLy8gNC4gQ29uZmlndXJl
IGFyZ3VtZW50IHJlZ2lzdGVycyB0byBqdW1wIHRvIE9TUiBlbnRyeSBmcm9tIHRoZSBjYWxsZXIg
b2YgdGhpcyBydW50aW1lIGZ1bmN0aW9uLgogICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkgPSBiaXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVyPihidWZmZXIpOwotICAgIGNvbnRl
eHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMSkgPSBiaXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVy
Pihvc3JFbnRyeUNhbGxlZS5lbnRyeXBvaW50KCkuZXhlY3V0YWJsZUFkZHJlc3M8PigpKTsKKyAg
ICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjEpID0gYml0d2lzZV9jYXN0PFVDUFVS
ZWdpc3Rlcj4ob3NyRW50cnlDYWxsZWUuZW50cnlwb2ludCgpLnRhZ2dlZFB0cjw+KCkpOwogfQog
CiBpbmxpbmUgYm9vbCBzaG91bGRKSVQodW5zaWduZWQgZnVuY3Rpb25JbmRleCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBmYTlhYTc3OGU2OGMuLjNhMzc1MzM1
NjQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtMTY0LDcg
KzE2NCw3IEBAIHZvaWQgUGxhbjo6dXBkYXRlQ2FsbFNpdGVzVG9DYWxsVXMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGNhbGxlZUdyb3VwTG9ja2VyLCBDYWxsCiAgICAgICAgIGZvciAoYXV0byYgY2Fs
bCA6IGNhbGxzaXRlcykgewogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbVBsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRl
cihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNh
bGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5k
ZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZihXYXNtUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUmVwYXRjaGluZyBjYWxsIGF0OiAiLCBS
YXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0byAiLCBSYXdQ
b2ludGVyKGVudHJ5cG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAg
IGRhdGFMb2dMbklmKFdhc21QbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwg
YXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRv
ICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC50YWdnZWRQdHIoKSkpOwogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIHN0YWdl
ZENhbGxzLmdldChjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0
aHMuY3BwCmluZGV4IGVkMjA3Yzk1MjM0Yy4uMGRhODcwMDFlNDNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIFdB
U01fU0xPV19QQVRIX0RFQ0wocHJvbG9ndWVfb3NyKQogICAgIGlmICghaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3MoY2FsbGVlLCBpbnN0YW5jZSkpCiAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhu
dWxscHRyLCBudWxscHRyKTsKIAotICAgIFdBU01fUkVUVVJOX1RXTyhjYWxsZWUtPnJlcGxhY2Vt
ZW50KGluc3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpKS0+ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIG51bGxwdHIpOworICAgIFdBU01fUkVUVVJOX1RXTyhjYWxsZWUtPnJlcGxhY2Vt
ZW50KGluc3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpKS0+ZW50cnlwb2ludCgpLnRhZ2dlZFB0cigp
LCBudWxscHRyKTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChsb29wX29zcikKQEAgLTIxMCw3
ICsyMTAsNyBAQCBXQVNNX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgICAgICBmb3IgKFZp
cnR1YWxSZWdpc3RlciByZWcgOiBvc3JFbnRyeURhdGEudmFsdWVzKQogICAgICAgICAgICAgYnVm
ZmVyW2luZGV4KytdID0gUkVBRChyZWcpLmVuY29kZWRKU1ZhbHVlKCk7CiAKLSAgICAgICAgV0FT
TV9SRVRVUk5fVFdPKGJ1ZmZlciwgYmJxQ2FsbGVlLT5sb29wRW50cnlwb2ludHMoKVtvc3JFbnRy
eURhdGEubG9vcEluZGV4XS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgV0FTTV9SRVRV
Uk5fVFdPKGJ1ZmZlciwgYmJxQ2FsbGVlLT5sb29wRW50cnlwb2ludHMoKVtvc3JFbnRyeURhdGEu
bG9vcEluZGV4XS50YWdnZWRQdHIoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29uc3QgYXV0
byBkb09TUkVudHJ5ID0gWyZdKFdhc206Ok9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSkg
ewogICAgICAgICAgICAgaWYgKG9zckVudHJ5Q2FsbGVlLT5sb29wSW5kZXgoKSAhPSBvc3JFbnRy
eURhdGEubG9vcEluZGV4KQpAQCAtMjI2LDcgKzIyNiw3IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wo
bG9vcF9vc3IpCiAgICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgOiBvc3JFbnRy
eURhdGEudmFsdWVzKQogICAgICAgICAgICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IFJFQUQocmVn
KS5lbmNvZGVkSlNWYWx1ZSgpOwogCi0gICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08oYnVmZmVy
LCBvc3JFbnRyeUNhbGxlZS0+ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
ICAgICAgICAgV0FTTV9SRVRVUk5fVFdPKGJ1ZmZlciwgb3NyRW50cnlDYWxsZWUtPmVudHJ5cG9p
bnQoKS50YWdnZWRQdHIoKSk7CiAgICAgICAgIH07CiAKICAgICAgICAgaWYgKGF1dG8qIG9zckVu
dHJ5Q2FsbGVlID0gY2FsbGVlLT5vc3JFbnRyeUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1v
ZGUoKSkpCkBAIC00NTEsNyArNDUxLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dh
c21DYWxsKFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZnVuY3Rpb24KIHsKICAg
ICB1aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50ID0gaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVs
ZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICBDb2RlUHRyPFdhc21FbnRy
eVB0clRhZz4gY29kZVB0cjsKIAogICAgIGlmIChmdW5jdGlvbkluZGV4IDwgaW1wb3J0RnVuY3Rp
b25Db3VudCkgewogICAgICAgICBXYXNtOjpJbnN0YW5jZTo6SW1wb3J0RnVuY3Rpb25JbmZvKiBm
dW5jdGlvbkluZm8gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb25JbmZvKGZ1bmN0aW9uSW5kZXgp
OwpAQCAtNDY3LDcgKzQ2Nyw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2Fs
bChXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGZ1bmN0aW9uCiAgICAgICAgIGNv
ZGVQdHIgPSAqaW5zdGFuY2UtPmNhbGxlZUdyb3VwKCktPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25G
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgIH0KIAotICAgIFdBU01f
Q0FMTF9SRVRVUk4oaW5zdGFuY2UsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgV2FzbUVu
dHJ5UHRyVGFnKTsKKyAgICBXQVNNX0NBTExfUkVUVVJOKGluc3RhbmNlLCBjb2RlUHRyLnRhZ2dl
ZFB0cigpLCBXYXNtRW50cnlQdHJUYWcpOwogfQogCiBXQVNNX1NMT1dfUEFUSF9ERUNMKGNhbGwp
CkBAIC01MDYsNyArNTA2LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxs
SW5kaXJlY3QoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206Okluc3RhbmMKICAgICBpZiAodGFy
Z2V0SW5zdGFuY2UgIT0gaW5zdGFuY2UpCiAgICAgICAgIHRhcmdldEluc3RhbmNlLT5zZXRDYWNo
ZWRTdGFja0xpbWl0KGluc3RhbmNlLT5jYWNoZWRTdGFja0xpbWl0KCkpOwogCi0gICAgV0FTTV9D
QUxMX1JFVFVSTih0YXJnZXRJbnN0YW5jZSwgZnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlv
bi0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICBXQVNNX0NBTExf
UkVUVVJOKHRhcmdldEluc3RhbmNlLCBmdW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0aW9uLT50
YWdnZWRQdHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChj
YWxsX2luZGlyZWN0KQpAQCAtNTQzLDcgKzU0Myw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgZG9XYXNtQ2FsbFJlZihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGNh
CiAKICAgICBBU1NFUlQoV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVy
ZShmdW5jdGlvbi50eXBlSW5kZXgpID09IENBTExFRSgpLT5zaWduYXR1cmUodHlwZUluZGV4KSk7
CiAgICAgVU5VU0VEX1BBUkFNKHR5cGVJbmRleCk7Ci0gICAgV0FTTV9DQUxMX1JFVFVSTihjYWxs
ZWVJbnN0YW5jZSwgZnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbi0+ZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICBXQVNNX0NBTExfUkVUVVJOKGNhbGxlZUlu
c3RhbmNlLCBmdW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0aW9uLT50YWdnZWRQdHIoKSwgV2Fz
bUVudHJ5UHRyVGFnKTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChjYWxsX3JlZikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKaW5kZXggZmVjMmExMzc3OWJmLi41
NDcyZjFhMDA4NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
aHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3Bw
CkBAIC01Nyw3ICs1Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0CiAgICAgaml0LmJyZWFr
cG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5vdCByZWFjaCB0aGlzLgogCiAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNt
VGh1bmspOwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKSk7CisgICAgbGlua0J1ZmZlci5saW5r
PE9wZXJhdGlvblB0clRhZz4oY2FsbCwgb3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOwogICAg
IHJldHVybiBGSU5BTElaRV9XQVNNX0NPREUobGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJU
aHJvdyBleGNlcHRpb24gZnJvbSBXYXNtIik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtLmNwcAppbmRleCA1MDU4MTEzMjM3NDguLjlhM2U3Mzc1MTA2NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAtODcsNyArODcs
NyBAQCB2b2lkIG1hcnNoYWxsSlNSZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFR5cGVE
ZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbiwgYwogICAgICAgICAgICAgICAgIGppdC5sb2FkV2Fz
bUNvbnRleHRJbnN0YW5jZSh3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Db252ZXJ0
VG9CaWdJbnQpPih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCBpbnB1dEpTUik7Ci0gICAgICAgICAg
ICBqaXQuY2FsbE9wZXJhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bkNvbnZlcnRUb0JpZ0ludCkpOworICAgICAgICAgICAgaml0LmNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29udmVydFRvQmlnSW50KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBib3hXYXNt
UmVzdWx0KGppdCwgc2lnbmF0dXJlLnJldHVyblR5cGUoMCksIHdhc21GcmFtZUNvbnZlbnRpb24u
cmVzdWx0c1swXSwgSlNSSW5mbzo6cmV0dXJuVmFsdWVKU1IpOwogICAgIH0gZWxzZSB7CkBAIC0y
MDIsNyArMjAyLDcgQEAgdm9pZCBtYXJzaGFsbEpTUmVzdWx0KENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24sIGMKIAogICAgICAgICAgICAgICAg
IGppdC5sb2FkVmFsdWUoYWRkcmVzcywgdmFsdWVKU1IpOwogICAgICAgICAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpPih3YXNtQ29u
dGV4dEluc3RhbmNlR1BSLCB2YWx1ZUpTUik7Ci0gICAgICAgICAgICAgICAgaml0LmNhbGxPcGVy
YXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Db252ZXJ0VG9CaWdJ
bnQpKTsKKyAgICAgICAgICAgICAgICBqaXQuY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0
VG9CaWdJbnQpOwogICAgICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKEpTUkluZm86OnJldHVy
blZhbHVlSlNSLCBhZGRyZXNzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIwLDcg
KzIyMCw3IEBAIHZvaWQgbWFyc2hhbGxKU1Jlc3VsdChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uLCBjCiAgICAgICAgICAgICBqaXQuc3ViUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIEFTU0VSVCh3
YXNtQ29udGV4dEluc3RhbmNlR1BSICE9IHNhdmVkUmVzdWx0c0dQUik7CiAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25BbGxvY2F0ZVJlc3VsdHNBcnJheSk+KHdh
c21Db250ZXh0SW5zdGFuY2VHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdHlwZURl
ZmluaXRpb24pLCBpbmRleGluZ1R5cGUsIHNhdmVkUmVzdWx0c0dQUik7Ci0gICAgICAgIGppdC5j
YWxsT3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQWxsb2Nh
dGVSZXN1bHRzQXJyYXkpKTsKKyAgICAgICAgaml0LmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWxs
b2NhdGVSZXN1bHRzQXJyYXkpOwogICAgICAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggMTY4YmI5YzE4ZmI0Li5jNjUxNjNi
ODgzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmgKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIFdhc206OlR5cGVJ
bmRleCB0eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgY29uc3Q7CiAKICAgICBFeHBlY3RlZDx2b2lkLCBXYXNtOjpCaW5kaW5nRmFpbHVy
ZT4gZ2VuZXJhdGVXYXNtVG9KU1N0dWJzKFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PFdhc21FbnRyeVB0clRhZz4gd2FzbVRvRW1iZWRkZXJTdHViKHNpemVfdCBpbXBvcnRGdW5jdGlv
bk51bSkgeyByZXR1cm4gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRGdW5jdGlvbk51bV0uY29k
ZSgpOyB9CisgICAgQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1Yihz
aXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1w
b3J0RnVuY3Rpb25OdW1dLmNvZGUoKTsgfQogCiAgICAgdm9pZCBjbGVhckpTQ2FsbElDcyhWTSYp
OwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAppbmRleCAxNTNkYTNlNWZiNjMuLjU1Mzc4NDgz
NGFlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAt
MjY4LDcgKzI2OCw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQ
dHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZtCiAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOwogICAg
ICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKEpTUkluZm86OnJldHVyblZhbHVlSlNSLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2FsbCwgb3BlcmF0aW9uQ29udmVydFRvQmln
SW50KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
bGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CkBAIC0zMjUsNyArMzI1LDcgQEAg
RXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdG
YWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgICAgIGppdC5tb3ZlVmFsdWVSZWdzKEpT
UkluZm86OnJldHVyblZhbHVlSlNSLCBkZXN0KTsKIAogICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNv
bnZlcnRUb0k2NCkpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25Q
dHJUYWc+KGNhbGwsIG9wZXJhdGlvbkNvbnZlcnRUb0k2NCk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNDksNyArMzQ5LDcgQEAgRXhwZWN0ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3
YXNtVG9KUyhWTSYgdm0KICNlbmRpZgogCiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ29udmVydFRv
STMyKSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4o
Y2FsbCwgb3BlcmF0aW9uQ29udmVydFRvSTMyKTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAg
ICAgICBkb25lLmxpbmsoJmppdCk7CkBAIC0zODEsNyArMzgxLDcgQEAgRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9K
UyhWTSYgdm0KICAgICAgICAgICAgIGppdC5tb3ZlKEZQUkluZm86OnJldHVyblZhbHVlRlBSICwg
ZGVzdCk7CiAKICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Db252ZXJ0VG9GMzIpKTsKKyAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihjYWxsLCBvcGVyYXRpb25D
b252ZXJ0VG9GMzIpOwogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGRvbmUubGluaygm
aml0KTsKQEAgLTQxMiw3ICs0MTIsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAg
ICAgICAgaml0Lm1vdmUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIGRlc3QpOwogCiAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uQ29udmVydFRvRjY0KSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2FsbCwgb3BlcmF0aW9uQ29udmVydFRvRjY0KTsKICAg
ICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CkBAIC00NDEsNyAr
NDQxLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4s
IEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgc3RhdGljX2Fzc2VydChu
b092ZXJsYXAoc2F2ZWRSZXN1bHRzR1BSLCBKU1JJbmZvOjpyZXR1cm5WYWx1ZUpTUikpOwogICAg
ICAgICBBU1NFUlQod2FzbUNvbnRleHRJbnN0YW5jZUdQUiAhPSBzYXZlZFJlc3VsdHNHUFIpOwog
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uSXRlcmF0ZVJlc3Vs
dHMpPih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
JnR5cGVEZWZpbml0aW9uKSwgSlNSSW5mbzo6cmV0dXJuVmFsdWVKU1IsIHNhdmVkUmVzdWx0c0dQ
UiwgQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5jYWxs
T3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXRlcmF0ZVJl
c3VsdHMpKTsKKyAgICAgICAgaml0LmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSXRlcmF0ZVJlc3Vs
dHMpOwogICAgICAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KQogICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogCkBAIC00NzAsNyArNDcwLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAg
ICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogCiAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldh
c21VbndpbmQpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+
KGNhbGwsIG9wZXJhdGlvbldhc21VbndpbmQpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTUw
MCw3ICs1MDAsNyBAQCB2b2lkIGVtaXRUaHJvd1dhc21Ub0pTRXhjZXB0aW9uKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgd2FzbUluc3RhbmNlLCBXYXNtOjpFeAogICAgIGppdC5icmVha3BvaW50
KCk7IC8vIFdlIHNob3VsZCBub3QgcmVhY2ggdGhpcy4KIAogICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oV2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNF
eGNlcHRpb24pKTsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2Fs
bCwgV2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOwogICAgIH0pOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCmluZGV4IDE0YWNjMjg4MWMwOC4uZDU4ZWViMzJiMzJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtMTA5
LDcgKzEwOSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgdm0ud2FzbUNvbnRleHQu
c3RvcmUod2FzbUluc3RhbmNlLCB2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKICAgICBBU1NFUlQod2Fz
bUZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKICAgICBBU1NFUlQoJndhc21GdW5jdGlvbi0+aW5zdGFu
Y2UoKS0+aW5zdGFuY2UoKSA9PSB2bS53YXNtQ29udGV4dC5sb2FkKCkpOwotICAgIEVuY29kZWRK
U1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20od2FzbUZ1bmN0aW9uLT5qc0VudHJ5cG9p
bnQoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksICZ2bSwgJnByb3RvQ2FsbEZy
YW1lKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9XYXNtKHdhc21G
dW5jdGlvbi0+anNFbnRyeXBvaW50KE11c3RDaGVja0FyaXR5KS50YWdnZWRQdHIoKSwgJnZtLCAm
cHJvdG9DYWxsRnJhbWUpOwogICAgIGlmIChwcmV2V2FzbUluc3RhbmNlICE9IHdhc21JbnN0YW5j
ZSkgewogICAgICAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIHNvbWUgZXh0cmEgc2FmZXR5IGluc3Rl
YWQgb2YgbGVhdmluZyBhIGNhY2hlZAogICAgICAgICAvLyB2YWx1ZSBpbiB0aGVyZS4gSWYgd2Ug
ZXZlciBmb3JnZXQgdG8gc2V0IHRoZSB2YWx1ZSB0byBiZSBhIHJlYWwKQEAgLTE3OSw3ICsxNzks
NyBAQCBXYXNtOjpJbnN0YW5jZSogV2ViQXNzZW1ibHlGdW5jdGlvbjo6cHJldmlvdXNJbnN0YW5j
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxs
RW50cnlwb2ludFNsb3coKQorQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiB7CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCmluZGV4IDY2OGYxNTJlMWIyMS4uNjU3ZDAwZWI4
MzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246OkxvYWRMb2NhdGlvbiwgV2FzbTo6VHlwZUluZGV4KTsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwog
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4ganNFbnRyeXBvaW50
KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQorICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBqc0Vu
dHJ5cG9pbnQoQXJpdHlDaGVja01vZGUgYXJpdHkpCiAgICAgewogICAgICAgICBpZiAoYXJpdHkg
PT0gQXJpdHlDaGVja05vdFJlcXVpcmVkKQogICAgICAgICAgICAgcmV0dXJuIG1fanNFbnRyeXBv
aW50OwpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2pzRW50cnlw
b2ludDsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
anNDYWxsRW50cnlwb2ludCgpCisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRy
eXBvaW50KCkKICAgICB7CiAgICAgICAgIGlmIChtX2pzQ2FsbEVudHJ5cG9pbnQpCiAgICAgICAg
ICAgICByZXR1cm4gbV9qc0NhbGxFbnRyeXBvaW50LmNvZGUoKTsKQEAgLTgyLDcgKzgyLDcgQEAg
cHJpdmF0ZToKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlR5cGVJbmRleCk7
CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlw
b2ludFNsb3coKTsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRT
bG93KCk7CiAgICAgcHRyZGlmZl90IHByZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSBjb25zdDsKICAg
ICBib29sIHVzZXNUYWdSZWdpc3RlcnMoKSBjb25zdDsKIApAQCAtOTEsNyArOTEsNyBAQCBwcml2
YXRlOgogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBqc0VudHJ5cG9pbnQg
YmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCiAgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3aGlj
aCBwb2ludHMgdG8gdGhlIE1vZHVsZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGljaAogICAgIC8vIGVu
c3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNpZ25hdHVyZS9jb2RlIGRvZXNuJ3QgZ2V0IGRlYWxsb2Nh
dGVkLgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IG1fanNFbnRy
eXBvaW50OworICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBtX2pzRW50cnlwb2ludDsKICAg
ICBXcml0ZUJhcnJpZXI8SlNUb1dhc21JQ0NhbGxlZT4gbV9qc1RvV2FzbUlDQ2FsbGVlOwogICAg
IC8vIFVzZWQgZm9yIEpTIGNhbGxpbmcgaW50byBXYXNtLgogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiBtX2pzQ2FsbEVudHJ5cG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyRGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJEaXNhc3NlbWJsZXIuY3BwCmluZGV4IDY0ZGMwNjQ4OTUyNS4u
YTVhNmY2YTMzNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
RGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyRGlz
YXNzZW1ibGVyLmNwcApAQCAtNTgsNyArNTgsNyBAQCBZYXJyRGlzYXNzZW1ibGVyOjp+WWFyckRp
c2Fzc2VtYmxlcigpCiAKIHZvaWQgWWFyckRpc2Fzc2VtYmxlcjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogewotICAgIG1fY29kZVN0YXJ0ID0gbGlua0J1
ZmZlci5lbnRyeXBvaW50PERpc2Fzc2VtYmx5UHRyVGFnPigpLnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKTsKKyAgICBtX2NvZGVTdGFydCA9IGxpbmtCdWZmZXIuZW50cnlwb2ludDxEaXNhc3Nl
bWJseVB0clRhZz4oKS51bnRhZ2dlZFB0cigpOwogICAgIG1fY29kZUVuZCA9IGJpdHdpc2VfY2Fz
dDx1aW50OF90Kj4obV9jb2RlU3RhcnQpICsgbGlua0J1ZmZlci5zaXplKCk7CiAKICAgICBkdW1w
SGVhZGVyKG91dCwgbGlua0J1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgK
aW5kZXggMzFmNmJmZDRiMDM4Li42ODhkM2UxYmJhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySklULmgKQEAgLTMzMyw5ICszMzMsOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCho
YXM4Qml0Q29kZSgpKTsKICNpZiBDUFUoQVJNNjRFKQogICAgICAgICBpZiAoT3B0aW9uczo6dXNl
SklUQ2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50cnlUb1lhcnJK
SVQoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwgbWF0Y2hpbmdDb250ZXh0LCByZXRhZ0Nv
ZGVQdHI8WWFycjhCaXRQdHJUYWcsIFlhcnJFbnRyeVB0clRhZz4obV9yZWY4LmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKSkpOworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50
cnlUb1lhcnJKSVQoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwgbWF0Y2hpbmdDb250ZXh0
LCByZXRhZ0NvZGVQdHI8WWFycjhCaXRQdHJUYWcsIFlhcnJFbnRyeVB0clRhZz4obV9yZWY4LmNv
ZGUoKS50YWdnZWRQdHIoKSkpKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQo
dW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGU4LCBZYXJyOEJpdFB0clRhZz4obV9yZWY4LmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBt
YXRjaGluZ0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0
aW9uUHRyPFlhcnJKSVRDb2RlOCwgWWFycjhCaXRQdHJUYWc+KG1fcmVmOC5jb2RlKCkudGFnZ2Vk
UHRyKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIG1hdGNoaW5nQ29udGV4dCkpOwog
ICAgIH0KIAogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgTWF0Y2hpbmdDb250ZXh0
SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQpCkBAIC0zNDMsOSArMzQzLDkgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQoaGFzMTZCaXRDb2RlKCkpOwogI2lmIENQVShBUk02NEUpCiAgICAgICAgIGlm
IChPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQo
dm1FbnRyeVRvWWFyckpJVChpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRjaGluZ0Nv
bnRleHQsIHJldGFnQ29kZVB0cjxZYXJyMTZCaXRQdHJUYWcsIFlhcnJFbnRyeVB0clRhZz4obV9y
ZWYxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdCh2bUVudHJ5VG9ZYXJySklUKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQs
IG1hdGNoaW5nQ29udGV4dCwgcmV0YWdDb2RlUHRyPFlhcnIxNkJpdFB0clRhZywgWWFyckVudHJ5
UHRyVGFnPihtX3JlZjE2LmNvZGUoKS50YWdnZWRQdHIoKSkpKTsKICNlbmRpZgotICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGUxNiwgWWFycjE2
Qml0UHRyVGFnPihtX3JlZjE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3Rh
cnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRjaGluZ0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1h
dGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlMTYsIFlhcnIxNkJpdFB0clRh
Zz4obV9yZWYxNi5jb2RlKCkudGFnZ2VkUHRyKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRw
dXQsIG1hdGNoaW5nQ29udGV4dCkpOwogICAgIH0KIAogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUo
Y29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBNYXRj
aGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkKQEAgLTM1Myw5ICszNTMsOSBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZU1hdGNoT25seSgpKTsKICNpZiBDUFUo
QVJNNjRFKQogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICAgICAg
cmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50cnlUb1lhcnJKSVQoaW5wdXQsIHN0YXJ0LCBsZW5ndGgs
IG51bGxwdHIsIG1hdGNoaW5nQ29udGV4dCwgcmV0YWdDb2RlUHRyPFlhcnJNYXRjaE9ubHk4Qml0
UHRyVGFnLCBZYXJyRW50cnlQdHJUYWc+KG1fbWF0Y2hPbmx5OC5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpKTsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh2bUVudHJ5VG9ZYXJy
SklUKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQsIHJldGFn
Q29kZVB0cjxZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZywgWWFyckVudHJ5UHRyVGFnPihtX21hdGNo
T25seTguY29kZSgpLnRhZ2dlZFB0cigpKSkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBNYXRj
aFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTgsIFlhcnJNYXRj
aE9ubHk4Qml0UHRyVGFnPihtX21hdGNoT25seTguY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KGlucHV0LCBzdGFydCwgbGVuZ3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsKKyAgICAg
ICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hP
bmx5OCwgWWFyck1hdGNoT25seThCaXRQdHJUYWc+KG1fbWF0Y2hPbmx5OC5jb2RlKCkudGFnZ2Vk
UHRyKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsK
ICAgICB9CiAKICAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyKiBtYXRj
aGluZ0NvbnRleHQpCkBAIC0zNjMsOSArMzYzLDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
aGFzMTZCaXRDb2RlTWF0Y2hPbmx5KCkpOwogI2lmIENQVShBUk02NEUpCiAgICAgICAgIGlmIChP
cHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodm1F
bnRyeVRvWWFyckpJVChpbnB1dCwgc3RhcnQsIGxlbmd0aCwgbnVsbHB0ciwgbWF0Y2hpbmdDb250
ZXh0LCByZXRhZ0NvZGVQdHI8WWFyck1hdGNoT25seTE2Qml0UHRyVGFnLCBZYXJyRW50cnlQdHJU
YWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSk7CisgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodm1FbnRyeVRvWWFyckpJVChpbnB1dCwgc3RhcnQsIGxl
bmd0aCwgbnVsbHB0ciwgbWF0Y2hpbmdDb250ZXh0LCByZXRhZ0NvZGVQdHI8WWFyck1hdGNoT25s
eTE2Qml0UHRyVGFnLCBZYXJyRW50cnlQdHJUYWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLnRhZ2dl
ZFB0cigpKSkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5j
dGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTE2LCBZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+
KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwg
bGVuZ3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNo
UmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTYsIFlhcnJNYXRj
aE9ubHkxNkJpdFB0clRhZz4obV9tYXRjaE9ubHkxNi5jb2RlKCkudGFnZ2VkUHRyKCkpKGlucHV0
LCBzdGFydCwgbGVuZ3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsKICAgICB9CiAKICNp
ZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0zNzQsNyArMzc0LDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIWhhczhCaXRDb2RlTWF0Y2hPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsK
IAotICAgICAgICByZXR1cm4gbV9tYXRjaE9ubHk4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgICAgICByZXR1cm4gbV9tYXRjaE9ubHk4LmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9
CiAKICAgICB2b2lkICpnZXQxNkJpdE1hdGNoT25seUFkZHIoKQpAQCAtMzgyLDcgKzM4Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKCFoYXMxNkJpdENvZGVNYXRjaE9ubHkoKSkKICAgICAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgICAgIHJldHVybiBtX21hdGNoT25seTE2LmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXR1cm4gbV9tYXRjaE9ubHkxNi5jb2RlKCkudGFn
Z2VkUHRyKCk7CiAgICAgfQogCiAgICAgdm9pZCAqZ2V0OEJpdE1hdGNoQWRkcigpCkBAIC0zOTAs
NyArMzkwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWhhczhCaXRDb2RlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKIAotICAgICAgICByZXR1cm4gbV9yZWY4LmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOworICAgICAgICByZXR1cm4gbV9yZWY4LmNvZGUoKS50YWdnZWRQdHIoKTsKICAg
ICB9CiAKICAgICB2b2lkICpnZXQxNkJpdE1hdGNoQWRkcigpCkBAIC0zOTgsNyArMzk4LDcgQEAg
cHVibGljOgogICAgICAgICBpZiAoIWhhczE2Qml0Q29kZSgpKQogICAgICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICAgICAgcmV0dXJuIG1fcmVmMTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgIHJldHVybiBtX3JlZjE2LmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGU5Yjk2
YTM2YTk5Li4zMWM0YWM0MmY3ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMjAzLDcgKzIwMyw2IEBACiAJCUREM0RDODdEMjdBNEJGOEUwMDdFNUI2MSAv
KiBHcmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQz
REM4N0UyN0E0QkY4RTAwN0U1QjYxIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzI2NzE1MUE4MjVBMDA0
MTIzRkYgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlERDNEQzg3RjI3QTRCRjhFMDA3RTVCNjEgLyogTG9n
Z2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzdD
RDg2QTFGRDlDRkQyMDA4Mjg1ODcgLyogTG9nZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJREQzREM4ODAyN0E0QkY4RTAwN0U1QjYxIC8qIE1l
dGFBbGxvY2F0b3JQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFNzQ5N0VEMjA5MTYzMDYwMDAzNTY1QiAvKiBNZXRhQWxsb2NhdG9yUHRyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzREM4ODEy
N0E0QkY4RTAwN0U1QjYxIC8qIE1ldGFBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MkNFMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRh
QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJREQzREM4ODIyN0E0QkY4RTAwN0U1QjYxIC8qIENoZWNrZWRQdHIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQjkxRjUxMjY0OEVBNEQwMEE1
NjIxNyAvKiBDaGVja2VkUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJREQzREM4ODMyN0E0QkY4RTAwN0U1QjYxIC8qIE9iamVjdElkZW50aWZp
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzQThB
QzNEMUZBQkJFOTQwMDIwNjRBQyAvKiBPYmplY3RJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgxNiw2ICs4MTUsOCBAQAogCQlG
RTFFMkM0MjIyNDE4N0M2MDBGNkI3MjkgLyogUGxhdGZvcm1SZWdpc3RlcnMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDNDEyMjQxODdDNjAw
RjZCNzI5IC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmNwcCAqLzsgfTsKIAkJRkUzNUQwOTIyN0RDNUVD
QzAwOURGQTVCIC8qIFN0YWNrQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUzNUQwOTEyN0RDNUVDQzAwOURGQTVCIC8qIFN0YWNrQ2hlY2su
Y3BwICovOyB9OwogCQlGRTdBQ0ZFRjI4NURDMkY5MDA3RkM4RTkgLyogUmF3SGV4LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTdBQ0ZFRTI4NURDMkY4
MDA3RkM4RTkgLyogUmF3SGV4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJRkU5QjhCMUEyOEIxNDUzRDAwODhDNkUxIC8qIENvZGVQdHIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOUI4QjE5MjhCMTQ1
M0QwMDg4QzZFMSAvKiBDb2RlUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJRkU5QjhCMUUyOEIxQjFDNzAwODhDNkUxIC8qIENvZGVQdHIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5QjhCMUQy
OEIxQjFDNjAwODhDNkUxIC8qIENvZGVQdHIuY3BwICovOyB9OwogCQlGRUMyNkJGMzI4OURCQkQz
MDA2MzlBNTkgLyogRnVuY3Rpb25QdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFQzI2QkYyMjg5REJCRDMwMDYzOUE1OSAvKiBGdW5jdGlvblB0ci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFREFD
RDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBT
dGFja1N0YXRzLmNwcCAqLzsgfTsKIAkJRkVFQTRERjkyMTZEN0JFNDAwQUMwNjAyIC8qIFN0YWNr
UG9pbnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRUVBNERGODIxNkQ3QkU0MDBBQzA2MDIgLyogU3RhY2tQb2ludGVyLmNwcCAqLzsgfTsKQEAg
LTE3MTcsMTMgKzE3MTgsMTQgQEAKIAkJRkUzNUQwOTEyN0RDNUVDQzAwOURGQTVCIC8qIFN0YWNr
Q2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tDaGVj
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzg0MjM0MjMyNUNDODAwMDlE
RDQ0NSAvKiBSZXNvdXJjZVVzYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlc291cmNlVXNhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU3NDk3RTQy
MDhGRkNBQTAwMDM1NjVCIC8qIFB0clRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQdHJUYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU3NDk3RUQyMDkx
NjMwNjAwMDM1NjVCIC8qIE1ldGFBbGxvY2F0b3JQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWV0YUFsbG9jYXRvclB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTdBQ0ZFRTI4NURDMkY4MDA3RkM4RTkgLyogUmF3SGV4LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJhd0hleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTgyMjUzMDFCMkExRTVCMDBCQTY4RkQgLyogTmFrZWRQdHIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkU4NkE4NzQxRTU5NDQwMjAwMTExQkJGIC8qIEZvcmJpZEhlYXBBbGxvY2F0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcmJpZEhlYXBBbGxvY2F0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFODkyNUFGMUQwMERBRUMwMDQ2OTA3RSAvKiBJ
bmRlbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRlbnRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk3RjZBODI0NUNFNUREMDBDNjNGQzYgLyog
U3RkSW50RXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZEludEV4
dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5NkI1MjI0QTg0NUFGMDAx
RDJFNjMgLyogRmFpbHVyZUFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGYWlsdXJlQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOUI4QjE5
MjhCMTQ1M0QwMDg4QzZFMSAvKiBDb2RlUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvZGVQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5QjhCMUQy
OEIxQjFDNjAwODhDNkUxIC8qIENvZGVQdHIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZVB0ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
QjZCMDM1MjAxQkUwQjYwMEI5NThDMSAvKiBQb2ludGVyUHJlcGFyYXRpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJQcmVwYXJhdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVDMjZCRjIyODlEQkJEMzAwNjM5QTU5IC8qIEZ1bmN0aW9u
UHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uUHRyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBT
dGFja1N0YXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNr
U3RhdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1MCw2ICsxOTUyLDgg
QEAKIAkJCQk5QkYwMDEzNDI2N0M0Q0NGMDBEQ0ZCM0YgLyogQ2hlY2tlZFJlZi5oICovLAogCQkJ
CTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovLAogCQkJCTBGNjZC
MjgxMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCAqLywKKwkJCQlGRTlCOEIxRDI4QjFC
MUM2MDA4OEM2RTEgLyogQ29kZVB0ci5jcHAgKi8sCisJCQkJRkU5QjhCMTkyOEIxNDUzRDAwODhD
NkUxIC8qIENvZGVQdHIuaCAqLywKIAkJCQkwRkM0RURFNTE2OTYxNDk2MDBGNjUwNDEgLyogQ29t
bWFQcmludGVyLmggKi8sCiAJCQkJRTNDRjc2OTAyMTE1RDZCQTAwOTFERTQ4IC8qIENvbXBhY3RQ
b2ludGVyVHVwbGUuaCAqLywKIAkJCQlGRkVFNDZGMzI4MjVERjgwMDAzQkM5ODEgLyogQ29tcGFj
dFB0ci5oICovLApAQCAtMjExNiw3ICsyMTIwLDYgQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0
MTIzRkYgLyogTWV0YUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEy
M0ZGIC8qIE1ldGFBbGxvY2F0b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYg
LyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovLAotCQkJCUZFNzQ5N0VEMjA5MTYzMDYwMDAzNTY1
QiAvKiBNZXRhQWxsb2NhdG9yUHRyLmggKi8sCiAJCQkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNG
IC8qIE1vbm90b25pY1RpbWUuY3BwICovLAogCQkJCTBGNjZCMjgzMURDOTdCQUIwMDRBMUQzRiAv
KiBNb25vdG9uaWNUaW1lLmggKi8sCiAJCQkJRkU4MjI1MzAxQjJBMUU1QjAwQkE2OEZEIC8qIE5h
a2VkUHRyLmggKi8sCkBAIC0zMDQxLDcgKzMwNDQsNiBAQAogCQkJCUREM0RDOTI0MjdBNEJGOEUw
MDdFNUI2MSAvKiBNZXNzYWdlUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RDODgxMjdB
NEJGOEUwMDdFNUI2MSAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlERDNE
Qzg3MDI3QTRCRjhFMDA3RTVCNjEgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJREQzREM4ODAyN0E0QkY4RTAwN0U1QjYxIC8qIE1ldGFBbGxvY2F0b3JQdHIuaCBp
biBIZWFkZXJzICovLAogCQkJCURERjMwNkRCMjdDMDg2NTQwMDZBNTI2RiAvKiBNZXRhZGF0YVNQ
SS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREQzREM5NjgyN0E0QkY4RTAwN0U1QjYxIC8qIE1vbm90
b25pY1RpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RDOTYyMjdBNEJGOEUwMDdFNUI2MSAv
KiBOYWtlZFB0ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTcxLDYgKzMxNzMsNyBAQAogCQkJCURE
M0RDOTk1MjdBNEJGOEUwMDdFNUI2MSAvKiBTdGFja1BvaW50ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUREM0RDOEZFMjdBNEJGOEUwMDdFNUI2MSAvKiBTdGFja1Nob3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUREM0RDOEExMjdBNEJGOEUwMDdFNUI2MSAvKiBTdGFja1Nob3RQcm9maWxlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkU5QjhCMUEyOEIxNDUzRDAwODhDNkUxIC8qIENvZGVQdHIuaCBp
biBIZWFkZXJzICovLAogCQkJCUREM0RDOTdBMjdBNEJGOEUwMDdFNUI2MSAvKiBTdGFja1N0YXRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlERDNEQzk5QzI3QTRCRjhFMDA3RTVCNjEgLyogU3RhY2tU
cmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREQzREM5NDgyN0E0QkY4RTAwN0U1QjYxIC8qIFN0
ZEZpbGVzeXN0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtMzYyMiw2ICszNjI1LDcgQEAKIAkJCQkw
Rjk1QjYzMzIwQ0I0Qjc3MDA0Nzk2MzUgLyogRGVidWdIZWFwLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4QTQ3M0FFMTUxQTgyNUIwMDQxMjNGRiAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAqLywK
IAkJCQlBOEE0NzNCMDE1MUE4MjVCMDA0MTIzRkYgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4g
U291cmNlcyAqLywKKwkJCQlGRTlCOEIxRTI4QjFCMUM3MDA4OEM2RTEgLyogQ29kZVB0ci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNCQTE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDNEREU5NjIwQzhCQzM3MDA3Rjc2RkEgLyogRW50aXRsZW1l
bnRzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTBERTM1RjUyMTVCQjAxNTAwQjk3OUM3IC8qIEV4
dGVybmFsU3RyaW5nSW1wbC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5k
ZXggNWZhNjQ0Yjg3MGU3Li43NWUzZGFhMzhhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0z
Myw2ICszMyw3IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBDaGVja2VkUHRyLmgKICAg
ICBDaGVja2VkUmVmLmgKICAgICBDbG9ja1R5cGUuaAorICAgIENvZGVQdHIuaAogICAgIENvbW1h
UHJpbnRlci5oCiAgICAgQ29tcGFjdFBvaW50ZXJUdXBsZS5oCiAgICAgQ29tcGFjdFB0ci5oCkBA
IC0xNTgsNyArMTU5LDYgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIE1lc3NhZ2VRdWV1
ZS5oCiAgICAgTWV0YUFsbG9jYXRvci5oCiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZS5oCi0gICAg
TWV0YUFsbG9jYXRvclB0ci5oCiAgICAgTW9ub3RvbmljVGltZS5oCiAgICAgTmFrZWRQdHIuaAog
ICAgIE5ha2VkUmVmLmgKQEAgLTQxNyw2ICs0MTcsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBC
aXRWZWN0b3IuY3BwCiAgICAgQ1BVVGltZS5jcHAKICAgICBDbG9ja1R5cGUuY3BwCisgICAgQ29k
ZVB0ci5jcHAKICAgICBDb21waWxhdGlvblRocmVhZC5jcHAKICAgICBDb25jdXJyZW50QnVmZmVy
LmNwcAogICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvQ29kZVB0ci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Db2RlUHRyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMwNjYwMjVjYzA0MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NvZGVQdHIuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSA8d3RmL0NvZGVQdHIuaD4KKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1l
KHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCB2b2lkKiBkYXRhTG9jYXRpb24sIGNvbnN0IGNoYXIq
IG5hbWUsIFByaW50U3RyZWFtJiBvdXQpCit7CisgICAgaWYgKCFleGVjdXRhYmxlQWRkcmVzcykg
eworICAgICAgICBvdXQucHJpbnQobmFtZSwgIihudWxsKSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcyA9PSBkYXRhTG9jYXRpb24pIHsKKyAgICAg
ICAgb3V0LnByaW50KG5hbWUsICIoIiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRkcmVzcyksICIp
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb3V0LnByaW50KG5hbWUsICIoZXhlY3V0
YWJsZSA9ICIsIFJhd1BvaW50ZXIoZXhlY3V0YWJsZUFkZHJlc3MpLCAiLCBkYXRhTG9jYXRpb24g
PSAiLCBSYXdQb2ludGVyKGRhdGFMb2NhdGlvbiksICIpIik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ29kZVB0ci5oIGIvU291cmNlL1dURi93
dGYvQ29kZVB0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjk0
ODg0OWM4NWY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvQ29kZVB0ci5oCkBA
IC0wLDAgKzEsMjg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Cisj
aW5jbHVkZSA8d3RmL1B0clRhZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRT
dHJlYW07Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSwgRnVuY3Rpb25BdHRyaWJ1dGVz
PiBjbGFzcyBGdW5jdGlvblB0cjsKKworLy8gQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUiBjaGVj
a3MgdGhhdCBwdHIgaXMgYSBub24tbnVsbCBwb2ludGVyLCBhbmQgdGhhdCBpdCBpcyBhIHZhbGlk
CisvLyBpbnN0cnVjdGlvbiBhZGRyZXNzIG9uIHRoZSBwbGF0Zm9ybSAoZm9yIGV4YW1wbGUsIGNo
ZWNrIGFueSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzKS4KKyNpZiBDUFUoQVJNX1RIVU1CMikgJiYg
RU5BQkxFKEpJVCkKKy8vIEFSTSBpbnN0cnVjdGlvbnMgbXVzdCBiZSAxNi1iaXQgYWxpZ25lZC4g
VGh1bWIyIGNvZGUgcG9pbnRlcnMgdG8gYmUgbG9hZGVkIGludG8KKy8vIGludG8gdGhlIHByb2Nl
c3NvciBhcmUgZGVjb3JhdGVkIHdpdGggdGhlIGJvdHRvbSBiaXQgc2V0LCB3aGlsZSB0cmFkaXRp
b25hbCBBUk0gaGFzCisvLyB0aGUgbG93ZXIgYml0IGNsZWFyLiBTaW5jZSB3ZSBkb24ndCBrbm93
IHdoYXQga2luZCBvZiBwb2ludGVyLCB3ZSBjaGVjayBmb3IgYm90aAorLy8gZGVjb3JhdGVkIGFu
ZCB1bmRlY29yYXRlZCBudWxsLgorI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0
cikgXAorICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PGludHB0cl90PihwdHIpICYgfjEpCisj
ZWxzZQorI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgXAorICAgIEFTU0VS
VChwdHIpCisjZW5kaWYKKworc3RydWN0IENvZGVQdHJCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBX
ZSBuZWVkIHRvIGRlY2xhcmUgdGhpcyBpbiB0aGlzIG5vbi10ZW1wbGF0ZSBiYXNlLiBPdGhlcndp
c2UsIGV2ZXJ5IHVzZSBvZgorICAgIC8vIEFscmVhZHlUYWdnZWRWYWx1ZVRhZyB3aWxsIHJlcXVp
cmUgYSBzcGVjaWFsaXplZCB0ZW1wbGF0ZSBxdWFsaWZpY2F0aW9uLgorICAgIGVudW0gQWxyZWFk
eVRhZ2dlZFZhbHVlVGFnIHsgQWxyZWFkeVRhZ2dlZFZhbHVlIH07CisKKyAgICBzdGF0aWMgdm9p
ZCBkdW1wV2l0aE5hbWUodm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIHZvaWQqIGRhdGFMb2NhdGlv
biwgY29uc3QgY2hhciogbmFtZSwgUHJpbnRTdHJlYW0mIG91dCk7Cit9OworCit0ZW1wbGF0ZTxQ
dHJUYWcgdGFnLCBGdW5jdGlvbkF0dHJpYnV0ZXMgYXR0ciA9IEZ1bmN0aW9uQXR0cmlidXRlczo6
Tm9uZT4KK2NsYXNzIENvZGVQdHIgOiBwdWJsaWMgQ29kZVB0ckJhc2UgeworICAgIHVzaW5nIEJh
c2UgPSBDb2RlUHRyQmFzZTsKK3B1YmxpYzoKKyAgICB1c2luZyBVbnR5cGVkRnVuYyA9IHZvaWQo
KikoKTsKKworICAgIENvZGVQdHIoKSA9IGRlZmF1bHQ7CisgICAgQ29kZVB0cihzdGQ6Om51bGxw
dHJfdCkgeyB9CisKKyAgICBleHBsaWNpdCBDb2RlUHRyKHZvaWQqIHZhbHVlKQorI2lmIENQVShB
Uk1fVEhVTUIyKQorICAgICAgICAvLyBEZWNvcmF0ZSB0aGUgcG9pbnRlciBhcyBhIHRodW1iIGNv
ZGUgcG9pbnRlci4KKyAgICAgICAgOiBtX3ZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZh
bHVlKSArIDEpCisjZWxzZQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisjZW5kaWYKKyAgICB7
CisgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aDx0YWc+KHZhbHVlKTsKKyAgICAgICAgQVNTRVJU
KHZhbHVlKTsKKyNpZiBDUFUoQVJNX1RIVU1CMikKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSAmIDEpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRf
VkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE91dCwgdHlwZW5hbWUuLi4gSW4+CisgICAgY29uc3RleHByIENvZGVQdHIoT3V0KCpwdHIp
KEluLi4uKSkKKyAgICAgICAgOiBtX3ZhbHVlKGVuY29kZUZ1bmMocHRyKSkKKyAgICB7IH0KKwor
Ly8gTVNWQyBkb2Vzbid0IHNlZW0gdG8gdHJlYXQgZnVuY3Rpb25zIHdpdGggZGlmZmVyZW50IGNh
bGxpbmcgY29udmVudGlvbnMgYXMKKy8vIGRpZmZlcmVudCB0eXBlczsgdGhlc2UgbWV0aG9kcyBh
bHJlYWR5IGRlZmluZWQgZm9yIGZhc3RjYWxsLCBiZWxvdy4KKyNpZiBDQUxMSU5HX0NPTlZFTlRJ
T05fSVNfU1REQ0FMTCAmJiAhT1MoV0lORE9XUykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXQs
IHR5cGVuYW1lLi4uIEluPgorICAgIGNvbnN0ZXhwciBDb2RlUHRyKE91dChDREVDTCAqcHRyKShJ
bi4uLikpCisgICAgICAgIDogbV92YWx1ZShlbmNvZGVGdW5jKHB0cikpCisgICAgeyB9CisjZW5k
aWYKKworI2lmIENPTVBJTEVSX1NVUFBPUlRTKEZBU1RDQUxMX0NBTExJTkdfQ09OVkVOVElPTikK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluPgorICAgIGNvbnN0ZXhw
ciBDb2RlUHRyKE91dChGQVNUQ0FMTCAqcHRyKShJbi4uLikpCisgICAgICAgIDogbV92YWx1ZShl
bmNvZGVGdW5jKHB0cikpCisgICAgeyB9CisjZW5kaWYKKworI2lmIEVOQUJMRShKSVQpCisgICAg
Ly8gVGhlc2UgMiBjb25zdHJ1Y3RvcnMgaWdub3JlcyB0aGUgRnVuY3Rpb25BdHRyaWJ1dGVzIG9m
IHRoZSBGdW5jdGlvblB0ciBwYXJhbWV0ZXIgd2hlbgorICAgIC8vIGNyZWF0aW5nIHRoZSBGdW5j
dGlvblB0ci4gSW4gZ2VuZXJhbCwgdGhpcyBjYW4gYmUgYSBwcm9ibGVtIG9uIHg4NiBwb3J0cyAo
ZXNwZWNpYWxseSBmb3IKKyAgICAvLyBXaW5kb3dzKS4gSG93ZXZlciwgdGhlc2UgY29uc3RydWN0
b3JzIGFyZSBvbmx5IHVzZWQgaW4gUmVwYXRjaC5jcHAgZm9yIEVOQUJMRShKSVQpLgorICAgIC8v
IFNpbmNlIHdlIG5vIGxvbmdlciBzdXBwb3J0IEVOQUJMRShKSVQpIGZvciB4ODYsIHRoaXMgaXMg
bm90IHJlYWxseSBhbiBpc3N1ZS4KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE91dCwgdHlwZW5h
bWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRlcyBvdGhlckF0dHI+CisgICAgQ29kZVB0cihjb25z
dCBGdW5jdGlvblB0cjx0YWcsIE91dChJbi4uLiksIG90aGVyQXR0cj4mIG90aGVyKQorICAgICAg
ICA6IENvZGVQdHIoQWxyZWFkeVRhZ2dlZFZhbHVlLCBvdGhlci50YWdnZWRQdHIoKSkKKyAgICB7
IH0KKworICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRhZywgdHlwZW5hbWUgT3V0LCB0eXBlbmFt
ZS4uLiBJbiwgRnVuY3Rpb25BdHRyaWJ1dGVzIG90aGVyQXR0cj4KKyAgICBDb2RlUHRyKGNvbnN0
IEZ1bmN0aW9uUHRyPG90aGVyVGFnLCBPdXQoSW4uLi4pLCBvdGhlckF0dHI+JiBvdGhlcikKKyAg
ICAgICAgOiBDb2RlUHRyKEFscmVhZHlUYWdnZWRWYWx1ZSwgb3RoZXIudGVtcGxhdGUgcmV0YWdn
ZWRQdHI8dGFnPigpKQorICAgIHsgfQorI2VuZGlmCisKKyAgICBzdGF0aWMgQ29kZVB0ciBmcm9t
VGFnZ2VkUHRyKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIEFTU0VSVChwdHIpOworICAgICAg
ICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0cik7CisgICAgICAgIGFzc2VydElzVGFnZ2Vk
V2l0aDx0YWc+KHB0cik7CisgICAgICAgIHJldHVybiBDb2RlUHRyKEFscmVhZHlUYWdnZWRWYWx1
ZSwgcHRyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ29kZVB0ciBmcm9tVW50YWdnZWRQdHIodm9p
ZCogcHRyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHB0cik7CisgICAgICAgIEFTU0VSVF9WQUxJ
RF9DT0RFX1BPSU5URVIocHRyKTsKKyAgICAgICAgYXNzZXJ0SXNOb3RUYWdnZWQocHRyKTsKKyAg
ICAgICAgcmV0dXJuIENvZGVQdHIoQWxyZWFkeVRhZ2dlZFZhbHVlLCB0YWdDb2RlUHRyPHRhZz4o
cHRyKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KKyAgICBDb2RlUHRy
PG5ld1RhZywgYXR0cj4gcmV0YWdnZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX3Zh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIENvZGVQdHI8bmV3VGFnLCBhdHRyPigpOworICAgICAg
ICByZXR1cm4gQ29kZVB0cjxuZXdUYWcsIGF0dHI+KEFscmVhZHlUYWdnZWRWYWx1ZSwgcmV0YWdn
ZWRQdHI8bmV3VGFnPigpKTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgVW50eXBlZEZ1bmMgdW50
eXBlZEZ1bmMoKSBjb25zdCB7IHJldHVybiBkZWNvZGVGdW5jKG1fdmFsdWUpOyB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CisgICAgVCB0YWdnZWRQdHIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CisgICAgVCB1bnRhZ2dlZFB0cigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gdW50YWdDb2RlUHRyPFQsIHRhZz4obV92YWx1ZSk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZywgdHlwZW5hbWUgVCA9IHZvaWQqPgor
ICAgIFQgcmV0YWdnZWRQdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldGFnQ29k
ZVB0cjxULCB0YWcsIG5ld1RhZz4obV92YWx1ZSk7CisgICAgfQorCisjaWYgQ1BVKEFSTV9USFVN
QjIpCisgICAgLy8gVG8gdXNlIHRoaXMgcG9pbnRlciBhcyBhIGRhdGEgYWRkcmVzcyByZW1vdmUg
dGhlIGRlY29yYXRpb24uCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgorICAgIFQg
ZGF0YUxvY2F0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BP
SU5URVIobV92YWx1ZSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4obV92YWx1ZSA/
IGJpdHdpc2VfY2FzdDxjaGFyKj4obV92YWx1ZSkgLSAxIDogbnVsbHB0cik7CisgICAgfQorI2Vs
c2UKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+CisgICAgVCBkYXRhTG9jYXRpb24o
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIHVudGFnQ29kZVB0cjxULCB0YWc+KG1fdmFsdWUpOworICAgIH0K
KyNlbmRpZgorCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICFtX3ZhbHVlOworICAgIH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISghKnRoaXMpOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENv
ZGVQdHImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0K
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29kZVB0ciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZTsgfQorCisgICAgLy8gRGlzYWxsb3cgYW55IGNhc3Rp
bmcgb3BlcmF0aW9ucyAoZXhjZXB0IGZvciBib29sZWFucykuIEluc3RlYWQsIHRoZSBjbGllbnQK
KyAgICAvLyBzaG91bGQgYmUgYXNraW5nIHRhZ2dlZFB0cigpIGV4cGxpY2l0bHkuCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3Nh
bWU8VCwgYm9vbD46OnZhbHVlPj4KKyAgICBvcGVyYXRvciBUKCkgPSBkZWxldGU7CisKKyAgICBD
b2RlUHRyIG9wZXJhdG9yKyhzaXplX3Qgc2l6ZUluQnl0ZXMpIGNvbnN0IHsgcmV0dXJuIENvZGVQ
dHI6OmZyb21VbnRhZ2dlZFB0cih1bnRhZ2dlZFB0cjx1aW50OF90Kj4oKSArIHNpemVJbkJ5dGVz
KTsgfQorICAgIENvZGVQdHIgb3BlcmF0b3ItKHNpemVfdCBzaXplSW5CeXRlcykgY29uc3QgeyBy
ZXR1cm4gQ29kZVB0cjo6ZnJvbVVudGFnZ2VkUHRyKHVudGFnZ2VkUHRyPHVpbnQ4X3QqPigpIC0g
c2l6ZUluQnl0ZXMpOyB9CisKKyAgICBDb2RlUHRyJiBvcGVyYXRvcis9KHNpemVfdCBzaXplSW5C
eXRlcykgeyByZXR1cm4gKnRoaXMgPSAqdGhpcyArIHNpemVJbkJ5dGVzOyB9CisgICAgQ29kZVB0
ciYgb3BlcmF0b3ItPShzaXplX3Qgc2l6ZUluQnl0ZXMpIHsgcmV0dXJuICp0aGlzID0gKnRoaXMg
LSBzaXplSW5CeXRlczsgfQorCisgICAgdm9pZCBkdW1wV2l0aE5hbWUoY29uc3QgY2hhciogbmFt
ZSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQor
ICAgICAgICAgICAgQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZSh0YWdnZWRQdHIoKSwgZGF0YUxv
Y2F0aW9uKCksIG5hbWUsIG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIENvZGVQdHJC
YXNlOjpkdW1wV2l0aE5hbWUobnVsbHB0ciwgbnVsbHB0ciwgbmFtZSwgb3V0KTsKKyAgICB9CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QgeyBkdW1wV2l0aE5hbWUoIkNv
ZGVQdHIiLCBvdXQpOyB9CisKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07
CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICAKKyAgICBD
b2RlUHRyKEVtcHR5VmFsdWVUYWcpCisgICAgICAgIDogbV92YWx1ZShlbXB0eVZhbHVlKCkpCisg
ICAgeyB9CisgICAgCisgICAgQ29kZVB0cihEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV92
YWx1ZShkZWxldGVkVmFsdWUoKSkKKyAgICB7IH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gZW1wdHlWYWx1ZSgpOyB9CisgICAgYm9vbCBp
c0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gZGVsZXRlZFZhbHVlKCk7
IH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBQdHJIYXNoPHZvaWQqPjo6
aGFzaChtX3ZhbHVlKTsgfQorCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOworCitwcml2
YXRlOgorICAgIENvZGVQdHIoQWxyZWFkeVRhZ2dlZFZhbHVlVGFnLCB2b2lkKiBwdHIpCisgICAg
ICAgIDogbV92YWx1ZShwdHIpCisgICAgeworICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8dGFn
PihwdHIpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBlbXB0eVZhbHVlKCkgeyByZXR1cm4g
Yml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOyB9CisgICAgc3Rh
dGljIHZvaWQqIGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KDIpKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY1B0
cj4KKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdm9pZCogZW5jb2RlRnVuYyhG
dW5jUHRyIHB0cikKKyAgICB7CisgICAgICAgIC8vIE5vdGU6IHdlIGNhbm5vdCBkbyB0aGUgYXNz
ZXJ0IGJlZm9yZSB0aGlzIGNoZWNrIGJlY2F1c2UgaXQgd2lsbCBkaXNxdWFsaWZ5CisgICAgICAg
IC8vIHRoaXMgZnVuY3Rpb24gZm9yIHVzZSBpbiBhbiBjb25zdGV4cHIgY29udGV4dCBmb3Igc29t
ZSB1c2UgY2FzZXMuCisgICAgICAgIGlmIGNvbnN0ZXhwciAodGFnID09IENGdW5jdGlvblB0clRh
ZykKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihwdHIpOworICAg
ICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0cihwdHIpOworICAgICAgICByZXR1cm4gcmV0
YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIHRhZz4ocHRyKTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgVW50eXBlZEZ1bmMgZGVjb2RlRnVuYyh2
b2lkKiBwdHIpCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKHRhZyA9PSBDRnVuY3Rpb25Q
dHJUYWcpCisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxVbnR5cGVkRnVuYz4o
cHRyKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSByZXRhZ0NvZGVQdHI8VW50eXBlZEZ1bmMsIHRh
ZywgQ0Z1bmN0aW9uUHRyVGFnPihwdHIpOworICAgICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlv
blB0cihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQq
IG1fdmFsdWUgeyBudWxscHRyIH07CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcsIEZ1bmN0aW9uQXR0
cmlidXRlcz4gZnJpZW5kIGNsYXNzIENvZGVQdHI7Cit9OworCit0ZW1wbGF0ZTxQdHJUYWcgdGFn
LCBGdW5jdGlvbkF0dHJpYnV0ZXMgYXR0cj4KK3N0cnVjdCBDb2RlUHRySGFzaCB7CisgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ29kZVB0cjx0YWcsIGF0dHI+JiBwdHIpIHsgcmV0dXJu
IHB0ci5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb2RlUHRyPHRhZywg
YXR0cj4mIGEsIGNvbnN0IENvZGVQdHI8dGFnLCBhdHRyPiYgYikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCBGdW5jdGlvbkF0dHJpYnV0
ZXMgYXR0cj4KK3N0cnVjdCBEZWZhdWx0SGFzaDxDb2RlUHRyPHRhZywgYXR0cj4+IDogQ29kZVB0
ckhhc2g8dGFnLCBhdHRyPiB7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNo
VHJhaXRzOwordGVtcGxhdGU8UHRyVGFnIHRhZywgRnVuY3Rpb25BdHRyaWJ1dGVzIGF0dHI+Citz
dHJ1Y3QgSGFzaFRyYWl0czxDb2RlUHRyPHRhZywgYXR0cj4+IDogcHVibGljIEN1c3RvbUhhc2hU
cmFpdHM8Q29kZVB0cjx0YWcsIGF0dHI+PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OkNvZGVQdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GdW5jdGlvblB0
ci5oIGIvU291cmNlL1dURi93dGYvRnVuY3Rpb25QdHIuaAppbmRleCAyNjYwMDgwMGFhMDUuLjU4
NDE5OGEzZTJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRnVuY3Rpb25QdHIuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9GdW5jdGlvblB0ci5oCkBAIC00NSw3ICs0NSw3IEBAIGVudW0gY2xh
c3MgRnVuY3Rpb25BdHRyaWJ1dGVzIHsKICAgICBKU0NIb3N0Q2FsbCwgLy8gSlNDX0hPU1RfQ0FM
TF9BVFRSSUJVVEVTCiB9OwogCi10ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSwgRnVuY3Rp
b25BdHRyaWJ1dGVzID0gRnVuY3Rpb25BdHRyaWJ1dGVzOjpOb25lPiBjbGFzcyBUeXBlZEZ1bmN0
aW9uUHRyOwordGVtcGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUsIEZ1bmN0aW9uQXR0cmlidXRl
cyA9IEZ1bmN0aW9uQXR0cmlidXRlczo6Tm9uZT4gY2xhc3MgRnVuY3Rpb25QdHI7CiAKIHRlbXBs
YXRlPEZ1bmN0aW9uQXR0cmlidXRlcywgdHlwZW5hbWU+IHN0cnVjdCBGdW5jdGlvbkNhbGxDb252
ZW50aW9uOwogCkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBGdW5jdGlvbkNhbGxDb252ZW50aW9u
PEZ1bmN0aW9uQXR0cmlidXRlczo6SlNDSG9zdENhbGwsIE91dChJbi4uLik+IHsKIH07CiAKIAot
Y2xhc3MgVHlwZWRGdW5jdGlvblB0ckJhc2UgeworY2xhc3MgRnVuY3Rpb25QdHJCYXNlIHsKIHB1
YmxpYzoKICAgICAvLyBXZSBuZWVkIHRvIGRlY2xhcmUgdGhpcyBpbiB0aGlzIG5vbi10ZW1wbGF0
ZSBiYXNlLiBPdGhlcndpc2UsIGV2ZXJ5IHVzZSBvZgogICAgIC8vIEFscmVhZHlUYWdnZWRWYWx1
ZVRhZyB3aWxsIHJlcXVpcmUgYSBzcGVjaWFsaXplZCB0ZW1wbGF0ZSBxdWFsaWZpY2F0aW9uLgpA
QCAtNzMsMjcgKzczLDI3IEBAIHB1YmxpYzoKIH07CiAKIHRlbXBsYXRlPFB0clRhZyB0YWcsIHR5
cGVuYW1lIE91dCwgdHlwZW5hbWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRlcyBhdHRyPgotY2xh
c3MgVHlwZWRGdW5jdGlvblB0cjx0YWcsIE91dChJbi4uLiksIGF0dHI+IDogcHVibGljIFR5cGVk
RnVuY3Rpb25QdHJCYXNlIHsKK2NsYXNzIEZ1bmN0aW9uUHRyPHRhZywgT3V0KEluLi4uKSwgYXR0
cj4gOiBwdWJsaWMgRnVuY3Rpb25QdHJCYXNlIHsKIHB1YmxpYzoKICAgICB1c2luZyBQdHIgPSB0
eXBlbmFtZSBGdW5jdGlvbkNhbGxDb252ZW50aW9uPGF0dHIsIE91dChJbi4uLik+OjpUeXBlOwog
Ci0gICAgY29uc3RleHByIFR5cGVkRnVuY3Rpb25QdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQot
ICAgIGNvbnN0ZXhwciBUeXBlZEZ1bmN0aW9uUHRyKHN0ZDo6bnVsbHB0cl90KSA6IG1fcHRyKG51
bGxwdHIpIHsgfQorICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cigpIDogbV9wdHIobnVsbHB0cikg
eyB9CisgICAgY29uc3RleHByIEZ1bmN0aW9uUHRyKHN0ZDo6bnVsbHB0cl90KSA6IG1fcHRyKG51
bGxwdHIpIHsgfQogCi0gICAgY29uc3RleHByIFR5cGVkRnVuY3Rpb25QdHIoT3V0KCpwdHIpKElu
Li4uKSkKKyAgICBjb25zdGV4cHIgRnVuY3Rpb25QdHIoT3V0KCpwdHIpKEluLi4uKSkKICAgICAg
ICAgOiBtX3B0cihlbmNvZGUocHRyKSkKICAgICB7IH0KIAogLy8gTVNWQyBkb2Vzbid0IHNlZW0g
dG8gdHJlYXQgZnVuY3Rpb25zIHdpdGggZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnMgYXMK
IC8vIGRpZmZlcmVudCB0eXBlczsgdGhlc2UgbWV0aG9kcyBhbHJlYWR5IGRlZmluZWQgZm9yIGZh
c3RjYWxsLCBiZWxvdy4KICNpZiBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTCAmJiAhT1Mo
V0lORE9XUykKLSAgICBjb25zdGV4cHIgVHlwZWRGdW5jdGlvblB0cihPdXQoQ0RFQ0wgKnB0ciko
SW4uLi4pKQorICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cihPdXQoQ0RFQ0wgKnB0cikoSW4uLi4p
KQogICAgICAgICA6IG1fcHRyKGVuY29kZShwdHIpKQogICAgIHsgfQogI2VuZGlmCiAKICNpZiBD
T01QSUxFUl9TVVBQT1JUUyhGQVNUQ0FMTF9DQUxMSU5HX0NPTlZFTlRJT04pCi0gICAgY29uc3Rl
eHByIFR5cGVkRnVuY3Rpb25QdHIoT3V0KEZBU1RDQUxMICpwdHIpKEluLi4uKSkKKyAgICBjb25z
dGV4cHIgRnVuY3Rpb25QdHIoT3V0KEZBU1RDQUxMICpwdHIpKEluLi4uKSkKICAgICAgICAgOiBt
X3B0cihlbmNvZGUocHRyKSkKICAgICB7IH0KICNlbmRpZgpAQCAtMTA3LDUwICsxMDcsNTAgQEAg
cHVibGljOgogICAgIGNvbnN0ZXhwciBQdHIgZ2V0KCkgY29uc3QgeyByZXR1cm4gZGVjb2RlKG1f
cHRyKTsgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG90aGVyVGFnPgotICAgIFR5cGVkRnVuY3Rp
b25QdHI8b3RoZXJUYWcsIE91dChJbi4uLiksIGF0dHI+IHJldGFnZ2VkKCkgY29uc3QKKyAgICBG
dW5jdGlvblB0cjxvdGhlclRhZywgT3V0KEluLi4uKSwgYXR0cj4gcmV0YWdnZWQoKSBjb25zdAog
ICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCh0YWcgIT0gb3RoZXJUYWcpOwotICAgICAgICBy
ZXR1cm4gVHlwZWRGdW5jdGlvblB0cjxvdGhlclRhZywgT3V0KEluLi4uKSwgYXR0cj4oQWxyZWFk
eVRhZ2dlZFZhbHVlLCByZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPG90aGVyVGFnPigpKTsKKyAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPG90aGVyVGFnLCBPdXQoSW4uLi4pLCBhdHRyPihBbHJl
YWR5VGFnZ2VkVmFsdWUsIHJldGFnZ2VkUHRyPG90aGVyVGFnPigpKTsKICAgICB9CiAKLSAgICBj
b25zdGV4cHIgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdCB7IHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihtX3B0cik7IH0KKyAgICBjb25zdGV4cHIgdm9pZCogdGFnZ2VkUHRy
KCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9wdHIpOyB9CiAKICAg
ICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFnPgotICAgIHZvaWQqIHJldGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKSBjb25zdAorICAgIHZvaWQqIHJldGFnZ2VkUHRyKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQodGFnICE9IG5ld1RhZyk7CiAgICAgICAgIHJldHVybiByZXRhZ0Nv
ZGVQdHI8dm9pZCosIHRhZywgbmV3VGFnPihtX3B0cik7CiAgICAgfQogCi0gICAgdm9pZCogdW50
YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIHVudGFnQ29kZVB0cjx2b2lk
KiwgdGFnPihtX3B0cik7IH0KKyAgICB2b2lkKiB1bnRhZ2dlZFB0cigpIGNvbnN0IHsgcmV0dXJu
IHVudGFnQ29kZVB0cjx2b2lkKiwgdGFnPihtX3B0cik7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fcHRyOyB9CiAgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhbV9wdHI7IH0KIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
eXBlZEZ1bmN0aW9uUHRyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0gb3RoZXIubV9w
dHI7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVHlwZWRGdW5jdGlvblB0ciYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fcHRyICE9IG90aGVyLm1fcHRyOyB9CisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEZ1bmN0aW9uUHRyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0gb3Ro
ZXIubV9wdHI7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnVuY3Rpb25QdHImIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX3B0ciAhPSBvdGhlci5tX3B0cjsgfQogCi0gICAgVHlwZWRGdW5j
dGlvblB0ciYgb3BlcmF0b3I9KFB0ciBwdHIpCisgICAgRnVuY3Rpb25QdHImIG9wZXJhdG9yPShQ
dHIgcHRyKQogICAgIHsKICAgICAgICAgbV9wdHIgPSBlbmNvZGUocHRyKTsKICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRhZz4KLSAgICBU
eXBlZEZ1bmN0aW9uUHRyJiBvcGVyYXRvcj0oY29uc3QgVHlwZWRGdW5jdGlvblB0cjxvdGhlclRh
ZywgT3V0KEluLi4uKSwgYXR0cj4mIG90aGVyKQorICAgIEZ1bmN0aW9uUHRyJiBvcGVyYXRvcj0o
Y29uc3QgRnVuY3Rpb25QdHI8b3RoZXJUYWcsIE91dChJbi4uLiksIGF0dHI+JiBvdGhlcikKICAg
ICB7CiAgICAgICAgIG1fcHRyID0gZW5jb2RlKG90aGVyLmdldCgpKTsKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgIH0KIAotICAgIFR5cGVkRnVuY3Rpb25QdHImIG9wZXJhdG9yPShzdGQ6Om51
bGxwdHJfdCkKKyAgICBGdW5jdGlvblB0ciYgb3BlcmF0b3I9KHN0ZDo6bnVsbHB0cl90KQogICAg
IHsKICAgICAgICAgbV9wdHIgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgVHlwZWRGdW5jdGlvblB0cihBbHJlYWR5VGFnZ2VkVmFsdWVU
YWcsIHZvaWQqIHB0cikKKyAgICBGdW5jdGlvblB0cihBbHJlYWR5VGFnZ2VkVmFsdWVUYWcsIHZv
aWQqIHB0cikKICAgICAgICAgOiBtX3B0cihiaXR3aXNlX2Nhc3Q8UHRyPihwdHIpKQogICAgIHsK
ICAgICAgICAgYXNzZXJ0SXNOdWxsT3JUYWdnZWRXaXRoPHRhZz4ocHRyKTsKQEAgLTE3NywxMDEg
KzE3NywyNSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBQdHIgbV9wdHI7CiAKLSAgICB0ZW1wbGF0ZTxQ
dHJUYWcsIHR5cGVuYW1lLCBGdW5jdGlvbkF0dHJpYnV0ZXM+IGZyaWVuZCBjbGFzcyBUeXBlZEZ1
bmN0aW9uUHRyOworICAgIHRlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUsIEZ1bmN0aW9uQXR0cmli
dXRlcz4gZnJpZW5kIGNsYXNzIEZ1bmN0aW9uUHRyOwogfTsKIAotc3RhdGljX2Fzc2VydChzaXpl
b2YoVHlwZWRGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWcsIHZvaWQoKT4pID09IHNpemVvZih2
b2lkKikpOworc3RhdGljX2Fzc2VydChzaXplb2YoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
LCB2b2lkKCk+KSA9PSBzaXplb2Yodm9pZCopKTsKICNpZiBDT01QSUxFUl9TVVBQT1JUUyhCVUlM
VElOX0lTX1RSSVZJQUxMWV9DT1BZQUJMRSkKLXN0YXRpY19hc3NlcnQoX19pc190cml2aWFsbHlf
Y29weWFibGUoVHlwZWRGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWcsIHZvaWQoKT4pKTsKK3N0
YXRpY19hc3NlcnQoX19pc190cml2aWFsbHlfY29weWFibGUoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnLCB2b2lkKCk+KSk7CiAjZW5kaWYKIAotCi10ZW1wbGF0ZTxQdHJUYWcgdGFnLCBGdW5j
dGlvbkF0dHJpYnV0ZXMgYXR0ciA9IEZ1bmN0aW9uQXR0cmlidXRlczo6Tm9uZT4KLWNsYXNzIEZ1
bmN0aW9uUHRyIDogcHVibGljIFR5cGVkRnVuY3Rpb25QdHI8dGFnLCB2b2lkKCksIGF0dHI+IHsK
LSAgICB1c2luZyBCYXNlID0gVHlwZWRGdW5jdGlvblB0cjx0YWcsIHZvaWQoKT47Ci0gICAgdXNp
bmcgUHRyVHlwZSA9IHZvaWQoKikoKTsKLSAgICB1c2luZyBUeXBlZEZ1bmN0aW9uUHRyQmFzZTo6
QWxyZWFkeVRhZ2dlZFZhbHVlOwotcHVibGljOgotICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cigp
ID0gZGVmYXVsdDsKLSAgICBjb25zdGV4cHIgRnVuY3Rpb25QdHIoc3RkOjpudWxscHRyX3QpIDog
QmFzZShudWxscHRyKSB7IH0KLQotICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cih2b2lkKiBwdHIp
Ci0gICAgICAgIDogQmFzZShyZWludGVycHJldF9jYXN0PFB0clR5cGU+KHB0cikpCi0gICAgeyB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluPgotICAgIGNvbnN0
ZXhwciBGdW5jdGlvblB0cihPdXQoKnB0cikoSW4uLi4pKQotICAgICAgICA6IEJhc2UocmVpbnRl
cnByZXRfY2FzdDxQdHJUeXBlPihwdHIpKQotICAgIHsgfQotCi0vLyBNU1ZDIGRvZXNuJ3Qgc2Vl
bSB0byB0cmVhdCBmdW5jdGlvbnMgd2l0aCBkaWZmZXJlbnQgY2FsbGluZyBjb252ZW50aW9ucyBh
cwotLy8gZGlmZmVyZW50IHR5cGVzOyB0aGVzZSBtZXRob2RzIGFscmVhZHkgZGVmaW5lZCBmb3Ig
ZmFzdGNhbGwsIGJlbG93LgotI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMICYmICFP
UyhXSU5ET1dTKQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE91dCwgdHlwZW5hbWUuLi4gSW4+Ci0g
ICAgY29uc3RleHByIEZ1bmN0aW9uUHRyKE91dChDREVDTCAqcHRyKShJbi4uLikpCi0gICAgICAg
IDogQmFzZShyZWludGVycHJldF9jYXN0PFB0clR5cGU+KHB0cikpCi0gICAgeyB9Ci0jZW5kaWYK
LQotI2lmIENPTVBJTEVSX1NVUFBPUlRTKEZBU1RDQUxMX0NBTExJTkdfQ09OVkVOVElPTikKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluPgotICAgIGNvbnN0ZXhwciBG
dW5jdGlvblB0cihPdXQoRkFTVENBTEwgKnB0cikoSW4uLi4pKQotICAgICAgICA6IEJhc2UocmVp
bnRlcnByZXRfY2FzdDxQdHJUeXBlPihwdHIpKQotICAgIHsgfQotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoSklUKQotICAgIC8vIFRoZXNlIDIgY29uc3RydWN0b3JzIGlnbm9yZXMgdGhlIEZ1bmN0aW9u
QXR0cmlidXRlcyBvZiB0aGUgVHlwZWRGdW5jdGlvblB0ciBwYXJhbWV0ZXIgd2hlbgotICAgIC8v
IGNyZWF0aW5nIHRoZSBGdW5jdGlvblB0ci4gSW4gZ2VuZXJhbCwgdGhpcyBjYW4gYmUgYSBwcm9i
bGVtIG9uIHg4NiBwb3J0cyAoZXNwZWNpYWxseSBmb3IKLSAgICAvLyBXaW5kb3dzKS4gSG93ZXZl
ciwgdGhlc2UgY29uc3RydWN0b3JzIGFyZSBvbmx5IHVzZWQgaW4gUmVwYXRjaC5jcHAgZm9yIEVO
QUJMRShKSVQpLgotICAgIC8vIFNpbmNlIHdlIG5vIGxvbmdlciBzdXBwb3J0IEVOQUJMRShKSVQp
IGZvciB4ODYsIHRoaXMgaXMgbm90IHJlYWxseSBhbiBpc3N1ZS4KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE91dCwgdHlwZW5hbWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRlcyBvdGhlckF0dHI+
Ci0gICAgRnVuY3Rpb25QdHIoY29uc3QgVHlwZWRGdW5jdGlvblB0cjx0YWcsIE91dChJbi4uLiks
IG90aGVyQXR0cj4mIG90aGVyKQotICAgICAgICA6IEJhc2UoQWxyZWFkeVRhZ2dlZFZhbHVlLCBv
dGhlci5leGVjdXRhYmxlQWRkcmVzcygpKQotICAgIHsgfQotCi0gICAgdGVtcGxhdGU8UHRyVGFn
IG90aGVyVGFnLCB0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluLCBGdW5jdGlvbkF0dHJpYnV0
ZXMgb3RoZXJBdHRyPgotICAgIEZ1bmN0aW9uUHRyKGNvbnN0IFR5cGVkRnVuY3Rpb25QdHI8b3Ro
ZXJUYWcsIE91dChJbi4uLiksIG90aGVyQXR0cj4mIG90aGVyKQotICAgICAgICA6IEJhc2UoQWxy
ZWFkeVRhZ2dlZFZhbHVlLCBvdGhlci50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNz
PHRhZz4oKSkKLSAgICB7IH0KLSNlbmRpZgotCi0gICAgc3RhdGljIEZ1bmN0aW9uUHRyIGZyb21B
bHJlYWR5VGFnZ2VkUG9pbnRlcih2b2lkKiBwdHIpCi0gICAgewotICAgICAgICBhc3NlcnRJc1Rh
Z2dlZFdpdGg8dGFnPihwdHIpOwotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIoQWxyZWFkeVRh
Z2dlZFZhbHVlLCBwdHIpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRhZz4K
LSAgICBGdW5jdGlvblB0cjxvdGhlclRhZz4gcmV0YWdnZWQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uUHRyPG90aGVyVGFnPihBbHJlYWR5VGFnZ2VkVmFsdWUsIEJhc2U6
OnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8b3RoZXJUYWc+KCkpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBGdW5jdGlvblB0cih0eXBlbmFtZSBCYXNlOjpBbHJlYWR5VGFnZ2Vk
VmFsdWVUYWcsIHZvaWQqIHB0cikKLSAgICAgICAgOiBCYXNlKEFscmVhZHlUYWdnZWRWYWx1ZSwg
cHRyKQotICAgIHsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJ
bj4KLSAgICBPdXQgb3BlcmF0b3IoKShJbi4uLikgY29uc3QgPSBkZWxldGU7Ci0KLSAgICB0ZW1w
bGF0ZTxQdHJUYWcsIEZ1bmN0aW9uQXR0cmlidXRlcz4gZnJpZW5kIGNsYXNzIEZ1bmN0aW9uUHRy
OwotfTsKLQogdGVtcGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJ
biwgRnVuY3Rpb25BdHRyaWJ1dGVzIGF0dHI+Ci1zdHJ1Y3QgRnVuY3Rpb25UcmFpdHM8VHlwZWRG
dW5jdGlvblB0cjx0YWcsIE91dChJbi4uLiksIGF0dHI+PiA6IHB1YmxpYyBGdW5jdGlvblRyYWl0
czxPdXQoSW4uLi4pPiB7CitzdHJ1Y3QgRnVuY3Rpb25UcmFpdHM8RnVuY3Rpb25QdHI8dGFnLCBP
dXQoSW4uLi4pLCBhdHRyPj4gOiBwdWJsaWMgRnVuY3Rpb25UcmFpdHM8T3V0KEluLi4uKT4gewog
fTsKIAogdGVtcGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbiwg
RnVuY3Rpb25BdHRyaWJ1dGVzIGF0dHI+Ci12b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qg
VHlwZWRGdW5jdGlvblB0cjx0YWcsIE91dChJbi4uLiksIGF0dHI+JiBwdHIpCit2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgRnVuY3Rpb25QdHI8dGFnLCBPdXQoSW4uLi4pLCBhdHRyPiYg
cHRyKQogewotICAgIGFkZChoYXNoZXIsIHB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBh
ZGQoaGFzaGVyLCBwdHIudGFnZ2VkUHRyKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
dXNpbmcgV1RGOjpGdW5jdGlvbkF0dHJpYnV0ZXM7CiB1c2luZyBXVEY6OkZ1bmN0aW9uUHRyOwot
dXNpbmcgV1RGOjpUeXBlZEZ1bmN0aW9uUHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAppbmRl
eCBlZWY4OWI3N2U3YmQuLmVjOGMwMjZkZWYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAK
QEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IExvY2tI
b2xkZXImLCBNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiAgICAgICAgIE1lbW9yeVB0ciBz
dGFydCA9IGhhbmRsZS5zdGFydCgpOwogICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBoYW5k
bGUuc2l6ZUluQnl0ZXMoKTsKICAgICAgICAgZGVjcmVtZW50UGFnZU9jY3VwYW5jeShzdGFydC51
bnRhZ2dlZFB0cigpLCBzaXplSW5CeXRlcyk7Ci0gICAgICAgIGFkZEZyZWVTcGFjZUZyb21SZWxl
YXNlZEhhbmRsZShGcmVlU3BhY2VQdHIoc3RhcnQpLCBzaXplSW5CeXRlcyk7CisgICAgICAgIGFk
ZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShzdGFydC5yZXRhZ2dlZDxGcmVlU3BhY2VQdHJU
YWc+KCksIHNpemVJbkJ5dGVzKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoISFtX3RyYWNr
ZXIpKQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5r
KHNpemVfdCBuZXdTaXplSW5CeXRlcykKICAgICBpZiAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2Ug
PCBmcmVlRW5kKQogICAgICAgICBhbGxvY2F0b3IuZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0g
KGZpcnN0Q29tcGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0VmFsdWUpKTsKIAotICAgIGFsbG9j
YXRvci5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUoTWV0YUFsbG9jYXRvcjo6RnJlZVNw
YWNlUHRyKGZyZWVTdGFydCksIGZyZWVTaXplKTsKKyAgICBhbGxvY2F0b3IuYWRkRnJlZVNwYWNl
RnJvbVJlbGVhc2VkSGFuZGxlKGZyZWVTdGFydC5yZXRhZ2dlZDxGcmVlU3BhY2VQdHJUYWc+KCks
IGZyZWVTaXplKTsKIAogICAgIG1fZW5kID0gZnJlZVN0YXJ0OwogfQpAQCAtMTkwLDcgKzE5MCw3
IEBAIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShj
b25zdCBMb2NrSG9sZGVyJiwgc2l6ZV90IHNpCiAgICAgbV9udW1BbGxvY2F0aW9ucysrOwogI2Vu
ZGlmCiAKLSAgICBhdXRvIGhhbmRsZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRs
ZSgqdGhpcywgTWVtb3J5UHRyKHN0YXJ0KSwgc2l6ZUluQnl0ZXMpKTsKKyAgICBhdXRvIGhhbmRs
ZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSgqdGhpcywgc3RhcnQucmV0YWdn
ZWQ8SGFuZGxlTWVtb3J5UHRyVGFnPigpLCBzaXplSW5CeXRlcykpOwogCiAgICAgaWYgKFVOTElL
RUxZKCEhbV90cmFja2VyKSkKICAgICAgICAgbV90cmFja2VyLT5ub3RpZnkoKmhhbmRsZS5wdHIo
KSk7CkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVT
cGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgIENvbmZpZzo6QXNzZXJ0
Tm90RnJvemVuU2NvcGUgYXNzZXJ0Tm90RnJvemVuU2NvcGU7CiAgICAgTG9ja2VyIGxvY2tlciB7
IG1fbG9jayB9OwogICAgIG1fYnl0ZXNSZXNlcnZlZCArPSBzaXplSW5CeXRlczsKLSAgICBhZGRG
cmVlU3BhY2UoRnJlZVNwYWNlUHRyOjptYWtlRnJvbVJhd1BvaW50ZXIoc3RhcnQpLCBzaXplSW5C
eXRlcyk7CisgICAgYWRkRnJlZVNwYWNlKEZyZWVTcGFjZVB0cjo6ZnJvbVVudGFnZ2VkUHRyKHN0
YXJ0KSwgc2l6ZUluQnl0ZXMpOwogfQogCiBzaXplX3QgTWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVl
U3BhY2VTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaCBi
L1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAppbmRleCA1ZmI3MmMyODBlZGMuLmY2ZmJl
OTQ0NGRiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBN
ZXRhQWxsb2NhdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZXRhQWxsb2NhdG9yKTsK
IAogcHVibGljOgotICAgIHVzaW5nIEZyZWVTcGFjZVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8RnJl
ZVNwYWNlUHRyVGFnPjsKKyAgICB1c2luZyBGcmVlU3BhY2VQdHIgPSBDb2RlUHRyPEZyZWVTcGFj
ZVB0clRhZz47CiAgICAgdXNpbmcgTWVtb3J5UHRyID0gTWV0YUFsbG9jYXRvckhhbmRsZTo6TWVt
b3J5UHRyOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1ldGFBbGxvY2F0b3IoTG9jayYsIHNp
emVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaCBiL1Nv
dXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAppbmRleCA5YjlmYjI4OTJkMDkuLjg5
MDIwY2FjNjRiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRs
ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaApAQCAtMjksNyAr
MjksNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2lu
Y2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yUHRyLmg+CisjaW5jbHVkZSA8d3RmL0NvZGVQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVkQmxhY2tUcmVlLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CiAKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRs
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHUK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihNZXRhQWxs
b2NhdG9ySGFuZGxlKTsKIAogcHVibGljOgotICAgIHVzaW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxv
Y2F0b3JQdHI8SGFuZGxlTWVtb3J5UHRyVGFnPjsKKyAgICB1c2luZyBNZW1vcnlQdHIgPSBDb2Rl
UHRyPEhhbmRsZU1lbW9yeVB0clRhZz47CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1ldGFB
bGxvY2F0b3JIYW5kbGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvclB0ci5oIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvclB0ci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1NTBjMWIxZTBlODEuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yUHRyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgotI2luY2x1ZGUgPHd0
Zi9QdHJUYWcuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBX
VEYgewotCi10ZW1wbGF0ZTxQdHJUYWcgdGFnPgotY2xhc3MgTWV0YUFsbG9jYXRvclB0ciB7Ci1w
dWJsaWM6Ci0gICAgTWV0YUFsbG9jYXRvclB0cigpID0gZGVmYXVsdDsKLSAgICBNZXRhQWxsb2Nh
dG9yUHRyKHN0ZDo6bnVsbHB0cl90KSB7IH0KLQotICAgIHN0YXRpYyBNZXRhQWxsb2NhdG9yUHRy
IG1ha2VGcm9tUmF3UG9pbnRlcih2b2lkKiBwdHIpIHsgcmV0dXJuIE1ldGFBbGxvY2F0b3JQdHIo
cHRyKTsgfQotCi0gICAgdGVtcGxhdGU8UHRyVGFnIG90aGVyVGFnPgotICAgIGV4cGxpY2l0IE1l
dGFBbGxvY2F0b3JQdHIoTWV0YUFsbG9jYXRvclB0cjxvdGhlclRhZz4gb3RoZXIpCi0gICAgICAg
IDogbV9wdHIob3RoZXIudGVtcGxhdGUgcmV0YWdnZWRQdHI8dGFnPigpKQotICAgIHsgfQotCi0g
ICAgZXhwbGljaXQgTWV0YUFsbG9jYXRvclB0cih1aW50cHRyX3QgcHRyQXNJbnQpCi0gICAgICAg
IDogTWV0YUFsbG9jYXRvclB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwdHJBc0ludCkpCi0g
ICAgeyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+Ci0gICAgVCB1bnRhZ2dl
ZFB0cigpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPih1bnRhZ0NvZGVQdHI8dGFnPiht
X3B0cikpOyB9Ci0KLSAgICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFnLCB0eXBlbmFtZSBUID0gdm9p
ZCo+Ci0gICAgVCByZXRhZ2dlZFB0cigpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihy
ZXRhZ0NvZGVQdHI8dGFnLCBuZXdUYWc+KG1fcHRyKSk7IH0KLQotICAgIC8vIERpc2FsbG93IGFu
eSBjYXN0aW5nIG9wZXJhdGlvbnMgKGV4Y2VwdCBmb3IgYm9vbGVhbnMpLgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQs
IGJvb2w+Ojp2YWx1ZT4+Ci0gICAgb3BlcmF0b3IgVCgpID0gZGVsZXRlOwotCi0gICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9wdHI7IH0KLSAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3B0cjsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09
KE1ldGFBbGxvY2F0b3JQdHIgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09IG90aGVyLm1f
cHRyOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KE1ldGFBbGxvY2F0b3JQdHIgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1fcHRyICE9IG90aGVyLm1fcHRyOyB9Ci0KLSAgICBNZXRhQWxsb2NhdG9yUHRy
IG9wZXJhdG9yKyhzaXplX3Qgc2l6ZUluQnl0ZXMpIGNvbnN0IHsgcmV0dXJuIE1ldGFBbGxvY2F0
b3JQdHIodW50YWdnZWRQdHI8dWludDhfdCo+KCkgKyBzaXplSW5CeXRlcyk7IH0KLSAgICBNZXRh
QWxsb2NhdG9yUHRyIG9wZXJhdG9yLShzaXplX3Qgc2l6ZUluQnl0ZXMpIGNvbnN0IHsgcmV0dXJu
IE1ldGFBbGxvY2F0b3JQdHIodW50YWdnZWRQdHI8dWludDhfdCo+KCkgLSBzaXplSW5CeXRlcyk7
IH0KLQotICAgIE1ldGFBbGxvY2F0b3JQdHImIG9wZXJhdG9yKz0oc2l6ZV90IHNpemVJbkJ5dGVz
KQotICAgIHsKLSAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyBzaXplSW5CeXRlczsKLSAg
ICB9Ci0KLSAgICBNZXRhQWxsb2NhdG9yUHRyJiBvcGVyYXRvci09KHNpemVfdCBzaXplSW5CeXRl
cykKLSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gc2l6ZUluQnl0ZXM7Ci0g
ICAgfQotCi0gICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OwotICAgIGVudW0g
RGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07Ci0KLSAgICBNZXRhQWxsb2NhdG9yUHRy
KEVtcHR5VmFsdWVUYWcpCi0gICAgICAgIDogbV9wdHIoZW1wdHlWYWx1ZSgpKQotICAgIHsgfQot
Ci0gICAgTWV0YUFsbG9jYXRvclB0cihEZWxldGVkVmFsdWVUYWcpCi0gICAgICAgIDogbV9wdHIo
ZGVsZXRlZFZhbHVlKCkpCi0gICAgeyB9Ci0KLSAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHRyID09IGVtcHR5VmFsdWUoKTsgfQotICAgIGJvb2wgaXNEZWxldGVkVmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBkZWxldGVkVmFsdWUoKTsgfQotCi0gICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1fcHRyKTsg
fQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE1ldGFBbGxvY2F0b3JQdHIodm9pZCogcHRyKQot
ICAgICAgICA6IG1fcHRyKHRhZ0NvZGVQdHI8dGFnPihwdHIpKQotICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNOb3RUYWdnZWQocHRyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCogZW1wdHlWYWx1
ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDEpOyB9Ci0gICAgc3RhdGljIHZv
aWQqIGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDIpOyB9
Ci0KLSAgICB2b2lkKiBtX3B0ciB7IG51bGxwdHIgfTsKLX07Ci0KLXRlbXBsYXRlPFB0clRhZyB0
YWc+Ci1zdHJ1Y3QgTWV0YUFsbG9jYXRvclB0ckhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IE1ldGFBbGxvY2F0b3JQdHI8dGFnPiYgcHRyKSB7IHJldHVybiBwdHIuaGFzaCgp
OyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTWV0YUFsbG9jYXRvclB0cjx0YWc+JiBh
LCBjb25zdCBNZXRhQWxsb2NhdG9yUHRyPHRhZz4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4g
YSA9PSBiOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBE
ZWZhdWx0SGFzaDsKLXRlbXBsYXRlPFB0clRhZyB0YWc+IHN0cnVjdCBEZWZhdWx0SGFzaDxNZXRh
QWxsb2NhdG9yUHRyPHRhZz4+IDogTWV0YUFsbG9jYXRvclB0ckhhc2g8dGFnPiB7IH07Ci0KLXRl
bXBsYXRlPFB0clRhZyB0YWc+IHN0cnVjdCBIYXNoVHJhaXRzPE1ldGFBbGxvY2F0b3JQdHI8dGFn
Pj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxNZXRhQWxsb2NhdG9yUHRyPHRhZz4+IHsgfTsK
LQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6TWV0YUFsbG9jYXRvclB0cjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAppbmRl
eCAyZDVjMmZiZjY2MTguLjhkZmI0NTkwYTU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQg
SlNET01HbG9iYWxPYmplY3Q6OmNsZWFyRE9NR3VhcmRlZE9iamVjdHMoKSBjb25zdAogSlNGdW5j
dGlvbiogSlNET01HbG9iYWxPYmplY3Q6OmNyZWF0ZUNyb3NzT3JpZ2luRnVuY3Rpb24oSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
YXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIENyb3NzT3JpZ2luTWFw
S2V5IGtleSA9IHN0ZDo6bWFrZV9wYWlyKGxleGljYWxHbG9iYWxPYmplY3QsIG5hdGl2ZUZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIENyb3NzT3JpZ2luTWFwS2V5IGtleSA9IHN0
ZDo6bWFrZV9wYWlyKGxleGljYWxHbG9iYWxPYmplY3QsIG5hdGl2ZUZ1bmN0aW9uLnRhZ2dlZFB0
cigpKTsKIAogICAgIC8vIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9yIG11c3Qgbm90
IGludm9rZSBHQyBzaW5jZSBHQyBjYW4gbW9kaWZ5IFdlYWtHQ01hcCBpbiB0aGUgbWlkZGxlIG9m
IEhhc2hNYXA6OmVuc3VyZS4KICAgICAvLyBXZSB1c2UgRGVmZXJHQyBoZXJlICgxKSBub3QgdG8g
aW52b2tlIEdDIHdoZW4gZXhlY3V0aW5nIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUgYW5kICgyKSB0
byBhdm9pZCBsb29raW5nIHVwIEhhc2hNYXAgdHdpY2UuCkBAIC0zNjcsNyArMzY3LDcgQEAgR2V0
dGVyU2V0dGVyKiBKU0RPTUdsb2JhbE9iamVjdDo6Y3JlYXRlQ3Jvc3NPcmlnaW5HZXR0ZXJTZXR0
ZXIoSlNHbG9iYWxPYmplY3QqIGwKIHsKICAgICBBU1NFUlQoZ2V0dGVyIHx8IHNldHRlcik7CiAg
ICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIENyb3NzT3JpZ2lu
TWFwS2V5IGtleSA9IHN0ZDo6bWFrZV9wYWlyKGxleGljYWxHbG9iYWxPYmplY3QsIGdldHRlciA/
IGdldHRlci5leGVjdXRhYmxlQWRkcmVzcygpIDogc2V0dGVyLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgIENyb3NzT3JpZ2luTWFwS2V5IGtleSA9IHN0ZDo6bWFrZV9wYWlyKGxleGljYWxHbG9i
YWxPYmplY3QsIGdldHRlciA/IGdldHRlci50YWdnZWRQdHIoKSA6IHNldHRlci50YWdnZWRQdHIo
KSk7CiAKICAgICAvLyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5vdCBp
bnZva2UgR0Mgc2luY2UgR0MgY2FuIG1vZGlmeSBXZWFrR0NNYXAgaW4gdGhlIG1pZGRsZSBvZiBI
YXNoTWFwOjplbnN1cmUuCiAgICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRvIGlu
dm9rZSBHQyB3aGVuIGV4ZWN1dGluZyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIGFuZCAoMikgdG8g
YXZvaWQgbG9va2luZyB1cCBIYXNoTWFwIHR3aWNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3Nzaml0L0NvbXBpbGVkU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9Db21w
aWxlZFNlbGVjdG9yLmgKaW5kZXggNzZkYmNlYWQ0MTEyLi4yZmRlZGNjYmE1ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9Db21waWxlZFNlbGVjdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3Nzaml0L0NvbXBpbGVkU2VsZWN0b3IuaApAQCAtNTQsNyArNTQsNyBAQCBzdHJ1
Y3QgQ29tcGlsZWRTZWxlY3RvciB7CiAKICAgICB+Q29tcGlsZWRTZWxlY3RvcigpCiAgICAgewot
ICAgICAgICBpZiAoY29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkKKyAgICAgICAg
aWYgKGNvZGVSZWYuY29kZSgpLnRhZ2dlZFB0cigpKQogICAgICAgICAgICAgZGF0YUxvZ0YoIkNv
bXBpbGVkU2VsZWN0b3IgJWQgXCIlc1wiXG4iLCB1c2VDb3VudCwgc2VsZWN0b3ItPnNlbGVjdG9y
VGV4dCgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVu
Y3Rpb25DYWxsLmgKaW5kZXggOTQ4YmIxNGZjM2YxLi45MDBkOWE3NzE0YTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9GdW5jdGlvbkNhbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGdW5jdGlvbkNhbGwgewogcHVibGljOgotICAgIEZ1bmN0aW9uQ2FsbChK
U0M6Ok1hY3JvQXNzZW1ibGVyJiBhc3NlbWJsZXIsIFJlZ2lzdGVyQWxsb2NhdG9yJiByZWdpc3Rl
ckFsbG9jYXRvciwgU3RhY2tBbGxvY2F0b3ImIHN0YWNrQWxsb2NhdG9yLCBWZWN0b3I8c3RkOjpw
YWlyPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9u
UHRyVGFnPj4sIDMyPiYgY2FsbFJlZ2lzdHJ5KQorICAgIEZ1bmN0aW9uQ2FsbChKU0M6Ok1hY3Jv
QXNzZW1ibGVyJiBhc3NlbWJsZXIsIFJlZ2lzdGVyQWxsb2NhdG9yJiByZWdpc3RlckFsbG9jYXRv
ciwgU3RhY2tBbGxvY2F0b3ImIHN0YWNrQWxsb2NhdG9yLCBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6
TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+PiwgMzI+
JiBjYWxsUmVnaXN0cnkpCiAgICAgICAgIDogbV9hc3NlbWJsZXIoYXNzZW1ibGVyKQogICAgICAg
ICAsIG1fcmVnaXN0ZXJBbGxvY2F0b3IocmVnaXN0ZXJBbGxvY2F0b3IpCiAgICAgICAgICwgbV9z
dGFja0FsbG9jYXRvcihzdGFja0FsbG9jYXRvcikKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIHsKICAgICB9CiAKLSAgICB2b2lkIHNldEZ1bmN0aW9uQWRkcmVzcyhGdW5jdGlvblB0cjxK
U0M6Ok9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb25BZGRyZXNzKQorICAgIHZvaWQgc2V0RnVuY3Rp
b25BZGRyZXNzKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGZ1bmN0aW9uQWRkcmVzcykK
ICAgICB7CiAgICAgICAgIG1fZnVuY3Rpb25BZGRyZXNzID0gZnVuY3Rpb25BZGRyZXNzOwogICAg
IH0KQEAgLTExMCw3ICsxMTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwcmVwYXJlQW5kQ2Fs
bCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9mdW5jdGlvbkFkZHJlc3MuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgICAgIEFTU0VSVChtX2Z1bmN0aW9uQWRkcmVzcy50YWdnZWRQdHIoKSk7
CiAgICAgICAgIEFTU0VSVCghbV9maXJzdEFyZ3VtZW50IHx8IChtX2ZpcnN0QXJndW1lbnQgJiYg
IW1fc2Vjb25kQXJndW1lbnQpIHx8IChtX2ZpcnN0QXJndW1lbnQgJiYgbV9zZWNvbmRBcmd1bWVu
dCkpOwogCiAgICAgICAgIHNhdmVBbGxvY2F0ZWRDYWxsZXJTYXZlZFJlZ2lzdGVycygpOwpAQCAt
MTc5LDEyICsxNzksMTIgQEAgcHJpdmF0ZToKICAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyJiBtX2Fz
c2VtYmxlcjsKICAgICBSZWdpc3RlckFsbG9jYXRvciYgbV9yZWdpc3RlckFsbG9jYXRvcjsKICAg
ICBTdGFja0FsbG9jYXRvciYgbV9zdGFja0FsbG9jYXRvcjsKLSAgICBWZWN0b3I8c3RkOjpwYWly
PEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPj4sIDMyPiYgbV9jYWxsUmVnaXN0cnk7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjpDYWxsLCBDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPj4sIDMyPiYg
bV9jYWxsUmVnaXN0cnk7CiAKICAgICBSZWdpc3RlclZlY3RvciBtX3NhdmVkUmVnaXN0ZXJzOwog
ICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZVZlY3RvciBtX3NhdmVkUmVnaXN0ZXJT
dGFja1JlZmVyZW5jZXM7CiAgICAgCi0gICAgRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJU
YWc+IG1fZnVuY3Rpb25BZGRyZXNzOworICAgIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
IG1fZnVuY3Rpb25BZGRyZXNzOwogICAgIHVuc2lnbmVkIG1fYXJndW1lbnRDb3VudDsKICAgICBK
U0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1fZmlyc3RBcmd1bWVudDsKICAgICBKU0M6
Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1fc2Vjb25kQXJndW1lbnQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggOWEzYTZhYzk4MWY2Li40YzYy
MjMxMDU5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBp
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAK
QEAgLTI3Niw3ICsyNzYsNyBAQCBzdHJ1Y3QgU2VsZWN0b3JGcmFnbWVudCB7CiAgICAgVmVjdG9y
PGNvbnN0IFZlY3RvcjxBdG9tU3RyaW5nPio+IGxhbmd1YWdlQXJndW1lbnRzTGlzdDsKICAgICBW
ZWN0b3I8Y29uc3QgQXRvbVN0cmluZ0ltcGwqLCA4PiBjbGFzc05hbWVzOwogICAgIEhhc2hTZXQ8
dW5zaWduZWQ+IHBzZXVkb0NsYXNzZXM7Ci0gICAgVmVjdG9yPEZ1bmN0aW9uUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPiwgND4gdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzOworICAgIFZlY3RvcjxD
b2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiwgND4gdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
OwogICAgIFZlY3RvcjxBdHRyaWJ1dGVNYXRjaGluZ0luZm8sIDQ+IGF0dHJpYnV0ZXM7CiAgICAg
VmVjdG9yPHN0ZDo6cGFpcjxpbnQsIGludD4sIDI+IG50aENoaWxkRmlsdGVyczsKICAgICBWZWN0
b3I8TnRoQ2hpbGRPZlNlbGVjdG9ySW5mbz4gbnRoQ2hpbGRPZkZpbHRlcnM7CkBAIC0zNjksNyAr
MzY5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIG1hdGNoaW5nVGFnTmFtZUZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpK
dW1wTGlzdCYgbWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JG
cmFnbWVudCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50RGF0YU1hdGNoaW5nKEFzc2VtYmxl
cjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAg
IHZvaWQgZ2VuZXJhdGVFbGVtZW50TGlua01hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZh
aWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwotICAgIHZvaWQgZ2VuZXJhdGVF
bGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMs
IEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPik7CisgICAgdm9pZCBnZW5lcmF0ZUVs
ZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
Q29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4pOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50
SXNBY3RpdmUoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3Rv
ckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcyk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0
Q2hpbGQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsKQEAgLTM4NSw3ICszODUs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlTWF0Y2hpbmco
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQg
Y3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBkZWNJbmRleFJl
Z2lzdGVyLCBjb25zdCBBdHRyaWJ1dGVNYXRjaGluZ0luZm8mIGF0dHJpYnV0ZUluZm8pOwogICAg
IHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlVmFsdWVNYXRjaGluZyhBc3NlbWJsZXI6Okp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmli
dXRlQWRkcmVzcywgY29uc3QgQXR0cmlidXRlTWF0Y2hpbmdJbmZvJiBhdHRyaWJ1dGVJbmZvKTsK
ICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZVZhbHVlRXhhY3RNYXRjaGluZyhBc3Nl
bWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJy
ZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXRvbVN0cmluZyYgZXhwZWN0ZWRWYWx1ZSwgQXR0
cmlidXRlQ2FzZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNpdGl2aXR5KTsKLSAgICB2b2lkIGdl
bmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVy
OjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0
dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0b21TdHJpbmcmIGV4cGVjdGVkVmFsdWUsIEF0dHJpYnV0
ZUNhc2VTZW5zaXRpdml0eSB2YWx1ZUNhc2VTZW5zaXRpdml0eSwgRnVuY3Rpb25QdHI8SlNDOjpP
cGVyYXRpb25QdHJUYWc+IGNhc2VTZW5zaXRpdmVUZXN0LCBGdW5jdGlvblB0cjxKU0M6Ok9wZXJh
dGlvblB0clRhZz4gY2FzZUluc2Vuc2l0aXZlVGVzdCk7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1l
bnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxWYWx1ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRy
ZXNzLCBjb25zdCBBdG9tU3RyaW5nJiBleHBlY3RlZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0
aXZpdHkgdmFsdWVDYXNlU2Vuc2l0aXZpdHksIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
IGNhc2VTZW5zaXRpdmVUZXN0LCBDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBjYXNlSW5z
ZW5zaXRpdmVUZXN0KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEhhc1RhZ05hbWUoQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBDU1NTZWxlY3RvciYgdGFnTWF0Y2hp
bmdTZWxlY3Rvcik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRIYXNJZChBc3NlbWJsZXI6Okp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IExvY2FsUmVnaXN0ZXImIGVsZW1lbnREYXRhQWRk
cmVzcywgY29uc3QgQXRvbVN0cmluZyYgaWRUb01hdGNoKTsKICAgICB2b2lkIGdlbmVyYXRlRWxl
bWVudEhhc0NsYXNzZXMoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBM
b2NhbFJlZ2lzdGVyJiBlbGVtZW50RGF0YUFkZHJlc3MsIGNvbnN0IFZlY3Rvcjxjb25zdCBBdG9t
U3RyaW5nSW1wbCosIDg+JiBjbGFzc05hbWVzKTsKQEAgLTQzMyw3ICs0MzMsNyBAQCBwcml2YXRl
OgogICAgIEFzc2VtYmxlciBtX2Fzc2VtYmxlcjsKICAgICBSZWdpc3RlckFsbG9jYXRvciBtX3Jl
Z2lzdGVyQWxsb2NhdG9yOwogICAgIFN0YWNrQWxsb2NhdG9yIG1fc3RhY2tBbGxvY2F0b3I7Ci0g
ICAgVmVjdG9yPHN0ZDo6cGFpcjxBc3NlbWJsZXI6OkNhbGwsIEZ1bmN0aW9uUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPj4sIDMyPiBtX2Z1bmN0aW9uQ2FsbHM7CisgICAgVmVjdG9yPHN0ZDo6cGFp
cjxBc3NlbWJsZXI6OkNhbGwsIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+PiwgMzI+IG1f
ZnVuY3Rpb25DYWxsczsKIAogICAgIFNlbGVjdG9yQ29udGV4dCBtX3NlbGVjdG9yQ29udGV4dDsK
ICAgICBGdW5jdGlvblR5cGUgbV9mdW5jdGlvblR5cGU7CkBAIC04MTYsMTM4ICs4MTYsMTM4IEBA
IHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NT
ZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgLy8gVW5v
cHRpbWl6ZWQgcHNldWRvIHNlbGVjdG9yLiBUaGV5IGFyZSBqdXN0IGZ1bmN0aW9uIGNhbGwgdG8g
YSBzaW1wbGUgdGVzdGluZyBmdW5jdGlvbi4KICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc0F1dG9maWxsOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0F1dG9m
aWxsZWQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVu
ZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0F1dG9maWxsZWQpKTsK
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQXV0b2ZpbGxBbmRPYnNjdXJlZDoKLSAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxK
U0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNBdXRvZmlsbGVkQW5kT2JzY3VyZWQpKTsK
KyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRy
PEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0F1dG9maWxsZWRBbmRPYnNjdXJlZCkp
OwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBdXRvZmlsbFN0cm9uZ1Bhc3N3b3JkOgot
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9u
UHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0F1dG9maWxsZWRTdHJvbmdQYXNz
d29yZCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzQXV0b2ZpbGxlZFN0cm9u
Z1Bhc3N3b3JkKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9y
Q2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0F1dG9maWxsU3Ryb25n
UGFzc3dvcmRWaWV3YWJsZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNB
dXRvZmlsbGVkU3Ryb25nUGFzc3dvcmRWaWV3YWJsZSkpOworICAgICAgICBmcmFnbWVudC51bm9w
dGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbklzQXV0b2ZpbGxlZFN0cm9uZ1Bhc3N3b3JkVmlld2FibGUpKTsKICAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzQ2hlY2tlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uSXNDaGVja2VkKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXND
aGVja2VkKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RlZmF1bHQ6Ci0gICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlND
OjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNEZWZhdWx0UHNldWRvQ2xhc3MpKTsK
KyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRy
PEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRGVmYXVsdFBzZXVkb0NsYXNz
KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Rpc2FibGVkOgotICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFzcykpOworICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlND
OjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNEaXNhYmxlZFBzZXVkb0NsYXNzKSk7
CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0VuYWJsZWQ6Ci0gICAgICAgIGZyYWdtZW50
LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNFbmFibGVkUHNldWRvQ2xhc3MpKTsKKyAgICAgICAg
ZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRW5hYmxlZFBzZXVkb0NsYXNzKSk7CiAgICAg
ICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RlZmluZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0
aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbklzRGVmaW5lZEVsZW1lbnQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25Jc0RlZmluZWRFbGVtZW50KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0ZvY3VzOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRm9jdXNQ
c2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGb2N1
c1BzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZvY3VzVmlzaWJs
ZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5j
dGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0ZvY3VzVmlzaWJs
ZVBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nl
cy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0Zv
Y3VzVmlzaWJsZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNp
bXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Zv
Y3VzV2l0aGluOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBw
ZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRm9j
dXNXaXRoaW5Qc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1h
dGNoZXNGb2N1c1dpdGhpblBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5
cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc0Z1bGxQYWdlTWVkaWE6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xh
c3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklz
TWVkaWFEb2N1bWVudCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNz
ZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzTWVkaWFE
b2N1bWVudCkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NJblJhbmdlOgotICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpT
Qzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0luUmFuZ2UpKTsKKyAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25Jc0luUmFuZ2UpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlw
ZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzSW5kZXRlcm1pbmF0ZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0
Y2hlc0luZGV0ZXJtaW5hdGVQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGlt
aXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbk1hdGNoZXNJbmRldGVybWluYXRlUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzSW52YWxpZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uSXNJbnZhbGlkKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nl
cy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNJbnZhbGlk
KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc09wdGlvbmFsOgotICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc09wdGlvbmFsRm9ybUNvbnRyb2wpKTsKKyAgICAgICAg
ZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc09wdGlvbmFsRm9ybUNvbnRyb2wpKTsKICAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzT3V0T2ZSYW5nZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uSXNPdXRPZlJhbmdlKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVk
UHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uSXNPdXRPZlJhbmdlKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNl
bGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1JlYWRPbmx5
OgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0
aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzUmVhZE9ubHlQc2V1
ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBw
ZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNSZWFkT25s
eVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1JlYWRXcml0ZToK
LSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlv
blB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1JlYWRXcml0ZVBzZXVk
b0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBl
bmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1JlYWRXcml0
ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1JlcXVpcmVkOgot
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9u
UHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc1JlcXVpcmVkRm9ybUNvbnRyb2wp
KTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2Rl
UHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc1JlcXVpcmVkRm9ybUNvbnRyb2wp
KTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmFsaWQ6Ci0gICAgICAgIGZyYWdtZW50
LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbklzVmFsaWQpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25Jc1ZhbGlkKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1dpbmRvd0luYWN0
aXZlOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1
bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc1dpbmRvd0luYWN0aXZl
KSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29k
ZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNXaW5kb3dJbmFjdGl2ZSkpOwog
ICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAKICNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NGdWxsU2NyZWVuOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVz
RnVsbFNjcmVlblBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
TWF0Y2hlc0Z1bGxTY3JlZW5Qc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NGdWxsU2NyZWVuRG9jdW1lbnQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbk1hdGNoZXNGdWxsU2NyZWVuRG9jdW1lbnRQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGdWxsU2NyZWVuRG9jdW1lbnRQc2V1ZG9DbGFzcykp
OwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGdWxsU2NyZWVuQW5jZXN0b3I6Ci0gICAg
ICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8
SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGdWxsU2NyZWVuQW5jZXN0b3JQ
c2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGdWxs
U2NyZWVuQW5jZXN0b3JQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBl
OjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NBbmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlvbjoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uTWF0Y2hlc0Z1bGxTY3JlZW5BbmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlv
blBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nl
cy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0Z1
bGxTY3JlZW5BbmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlvblBzZXVkb0NsYXNzKSk7CiAgICAg
ICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKIAogICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFNjcmVlbkNvbnRyb2xzSGlkZGVuOgotICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRy
PEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnVsbFNjcmVlbkNvbnRyb2xz
SGlkZGVuUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9D
bGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRj
aGVzRnVsbFNjcmVlbkNvbnRyb2xzSGlkZGVuUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoUElDVFVSRV9JTl9QSUNUVVJFX0FQSSkKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc1BpY3R1cmVJblBpY3R1cmU6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bk1hdGNoZXNQaWN0dXJlSW5QaWN0dXJlUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25NYXRjaGVzUGljdHVyZUluUGljdHVyZVBzZXVkb0NsYXNzKSk7CiAgICAg
ICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnV0
dXJlOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1
bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnV0dXJlQ3Vl
UHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
LmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnV0
dXJlQ3VlUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxl
U2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUGFzdDoK
LSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlv
blB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1Bhc3RDdWVQc2V1ZG9D
bGFzcykpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNQYXN0Q3VlUHNl
dWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JD
aGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUGxheWluZzoKLSAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxK
U0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1BsYXlpbmdQc2V1ZG9DbGFzcykp
OworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQ
dHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNQbGF5aW5nUHNldWRvQ2xh
c3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2Vy
OwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUGF1c2VkOgotICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzUGF1c2VkUHNldWRvQ2xhc3MpKTsKKyAgICAg
ICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzUGF1c2VkUHNldWRvQ2xhc3MpKTsKICAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzU2Vla2luZzoKLSAgICAgICAgZnJhZ21lbnQudW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1NlZWtpbmdQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFn
bWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNTZWVraW5nUHNldWRvQ2xhc3MpKTsKICAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzQnVmZmVyaW5nOgotICAgICAgICBmcmFnbWVudC51bm9wdGlt
aXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25NYXRjaGVzQnVmZmVyaW5nUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25NYXRjaGVzQnVmZmVyaW5nUHNldWRvQ2xhc3MpKTsKICAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzU3RhbGxlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uTWF0Y2hlc1N0YWxsZWRQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVudC51
bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbk1hdGNoZXNTdGFsbGVkUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzTXV0ZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bk1hdGNoZXNNdXRlZFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVk
UHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uTWF0Y2hlc011dGVkUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlw
ZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzVm9sdW1lTG9ja2VkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNz
ZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRj
aGVzVm9sdW1lTG9ja2VkUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25NYXRjaGVzVm9sdW1lTG9ja2VkUHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogI2VuZGlmCiAKICNpZiBFTkFCTEUo
QVRUQUNITUVOVF9FTEVNRU5UKQogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSGFz
QXR0YWNobWVudDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFw
cGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSGFzQXR0YWNo
bWVudCkpOworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhc0F0dGFjaG1lbnQpKTsK
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogI2Vu
ZGlmCiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc01vZGFsOgotICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzTW9kYWxQc2V1ZG9DbGFzcykpOworICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlND
OjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNNb2RhbFBzZXVkb0NsYXNzKSk7CiAg
ICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKIAogICAg
IC8vIFRoZXNlIHBzZXVkby1jbGFzc2VzIG9ubHkgaGF2ZSBtZWFuaW5nIHdpdGggc2Nyb2xsYmFy
cy4KQEAgLTMzNzgsNyArMzM3OCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZUV4YWN0TWF0Y2hpbmcoQXNzZW1ibGVyCiAgICAgfQog
fQogCi12b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRl
RnVuY3Rpb25DYWxsVmFsdWVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3Qg
QXRvbVN0cmluZyYgZXhwZWN0ZWRWYWx1ZSwgQXR0cmlidXRlQ2FzZVNlbnNpdGl2aXR5IHZhbHVl
Q2FzZVNlbnNpdGl2aXR5LCBGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4gY2FzZVNl
bnNpdGl2ZVRlc3QsIEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBjYXNlSW5zZW5z
aXRpdmVUZXN0KQordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEF0
dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFp
bHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3Ms
IGNvbnN0IEF0b21TdHJpbmcmIGV4cGVjdGVkVmFsdWUsIEF0dHJpYnV0ZUNhc2VTZW5zaXRpdml0
eSB2YWx1ZUNhc2VTZW5zaXRpdml0eSwgQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4gY2Fz
ZVNlbnNpdGl2ZVRlc3QsIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGNhc2VJbnNlbnNp
dGl2ZVRlc3QpCiB7CiAgICAgTG9jYWxSZWdpc3RlcldpdGhQcmVmZXJlbmNlIGV4cGVjdGVkVmFs
dWVSZWdpc3RlcihtX3JlZ2lzdGVyQWxsb2NhdG9yLCBKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CiAgICAgbV9hc3NlbWJsZXIubW92ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZXhwZWN0
ZWRWYWx1ZS5pbXBsKCkpLCBleHBlY3RlZFZhbHVlUmVnaXN0ZXIpOwpAQCAtMzQzNCw3ICszNDM0
LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEF0dHJpYnV0
ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXMKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
IHRlc3RGdW5jdGlvbikKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1l
bnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQ29k
ZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4gdGVzdEZ1bmN0aW9uKQogewogICAgIEFzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBlbGVtZW50QWRkcmVzcyA9IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXI7CiAg
ICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9j
YXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3NqaXQvU2VsZWN0b3JDb21waWxlci5oCmluZGV4IDFiM2Q3ZjE0MDM1MS4uN2I4MWU5YzZkYmVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmgKQEAgLTU4LDEwICs1
OCwxMCBAQCBpbmxpbmUgdW5zaWduZWQgcnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tl
cihDb21waWxlZFNlbGVjdG9yJiBjb21waWxlZFNlbAogICAgIEFTU0VSVChjb21waWxlZFNlbGVj
dG9yLnN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXIpOwogI2lmIENQVShBUk02NEUpCiAgICAgaWYgKEpTQzo6T3B0aW9uczo6dXNlSklUQ2Fn
ZSgpKQotICAgICAgICByZXR1cm4gdm1FbnRyeVRvQ1NTSklUKGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGVsZW1lbnQpLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSksIDAsIGNvbXBpbGVk
U2VsZWN0b3IuY29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHJl
dHVybiB2bUVudHJ5VG9DU1NKSVQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZWxlbWVudCksIGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSwgMCwgY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVm
LmNvZGUoKS50YWdnZWRQdHIoKSk7CiAjZW5kaWYKICAgICB1c2luZyBSdWxlQ29sbGVjdG9yU2lt
cGxlU2VsZWN0b3JDaGVja2VyID0gdW5zaWduZWQoKikoY29uc3QgRWxlbWVudCosIHVuc2lnbmVk
Kik7Ci0gICAgcmV0dXJuIHVudGFnQ0Z1bmN0aW9uUHRyPFJ1bGVDb2xsZWN0b3JTaW1wbGVTZWxl
Y3RvckNoZWNrZXIsIEpTQzo6Q1NTU2VsZWN0b3JQdHJUYWc+KGNvbXBpbGVkU2VsZWN0b3IuY29k
ZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoZWxlbWVudCwgdmFsdWUpOworICAgIHJl
dHVybiB1bnRhZ0NGdW5jdGlvblB0cjxSdWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2Vy
LCBKU0M6OkNTU1NlbGVjdG9yUHRyVGFnPihjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgp
LnRhZ2dlZFB0cigpKShlbGVtZW50LCB2YWx1ZSk7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBxdWVy
eVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyKENvbXBpbGVkU2VsZWN0b3ImIGNvbXBpbGVk
U2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCkBAIC02OSwxMCArNjksMTAgQEAgaW5s
aW5lIHVuc2lnbmVkIHF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIoQ29tcGlsZWRT
ZWxlY3RvciYgY29tcGlsZWRTZWwKICAgICBBU1NFUlQoY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMg
PT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2VyKTsKICNp
ZiBDUFUoQVJNNjRFKQogICAgIGlmIChKU0M6Ok9wdGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAgICAg
ICAgcmV0dXJuIHZtRW50cnlUb0NTU0pJVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbGVtZW50
KSwgMCwgMCwgY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICAgICAgcmV0dXJuIHZtRW50cnlUb0NTU0pJVChiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihlbGVtZW50KSwgMCwgMCwgY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS50YWdn
ZWRQdHIoKSk7CiAjZW5kaWYKICAgICB1c2luZyBRdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JD
aGVja2VyID0gdW5zaWduZWQoKikoY29uc3QgRWxlbWVudCopOwotICAgIHJldHVybiB1bnRhZ0NG
dW5jdGlvblB0cjxRdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyLCBKU0M6OkNTU1Nl
bGVjdG9yUHRyVGFnPihjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKGVsZW1lbnQpOworICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0cjxRdWVyeVNl
bGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyLCBKU0M6OkNTU1NlbGVjdG9yUHRyVGFnPihjb21w
aWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLnRhZ2dlZFB0cigpKShlbGVtZW50KTsKIH0KIAog
aW5saW5lIHVuc2lnbmVkIHJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdD
b250ZXh0KENvbXBpbGVkU2VsZWN0b3ImIGNvbXBpbGVkU2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNp
Z25lZCogdmFsdWUpCkBAIC04MCwxMCArODAsMTAgQEAgaW5saW5lIHVuc2lnbmVkIHJ1bGVDb2xs
ZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KENvbXBpbGVkU2VsZWN0b3IK
ICAgICBBU1NFUlQoY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk7CiAjaWYgQ1BVKEFS
TTY0RSkKICAgICBpZiAoSlNDOjpPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgIHJldHVy
biB2bUVudHJ5VG9DU1NKSVQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZWxlbWVudCksIGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGNvbnRleHQpLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1
ZSksIGNvbXBpbGVkU2VsZWN0b3IuY29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgIHJldHVybiB2bUVudHJ5VG9DU1NKSVQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
ZWxlbWVudCksIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvbnRleHQpLCBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90Pih2YWx1ZSksIGNvbXBpbGVkU2VsZWN0b3IuY29kZVJlZi5jb2RlKCkudGFnZ2Vk
UHRyKCkpOwogI2VuZGlmCiAgICAgdXNpbmcgUnVsZUNvbGxlY3RvclNlbGVjdG9yQ2hlY2tlcldp
dGhDaGVja2luZ0NvbnRleHQgPSB1bnNpZ25lZCgqKShjb25zdCBFbGVtZW50KiwgU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHQqLCB1bnNpZ25lZCopOwotICAgIHJldHVybiB1bnRhZ0NG
dW5jdGlvblB0cjxSdWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4
dCwgSlNDOjpDU1NTZWxlY3RvclB0clRhZz4oY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKShlbGVtZW50LCBjb250ZXh0LCB2YWx1ZSk7CisgICAgcmV0
dXJuIHVudGFnQ0Z1bmN0aW9uUHRyPFJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hl
Y2tpbmdDb250ZXh0LCBKU0M6OkNTU1NlbGVjdG9yUHRyVGFnPihjb21waWxlZFNlbGVjdG9yLmNv
ZGVSZWYuY29kZSgpLnRhZ2dlZFB0cigpKShlbGVtZW50LCBjb250ZXh0LCB2YWx1ZSk7CiB9CiAK
IGlubGluZSB1bnNpZ25lZCBxdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5n
Q29udGV4dChDb21waWxlZFNlbGVjdG9yJiBjb21waWxlZFNlbGVjdG9yLCBjb25zdCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY29udGV4
dCkKQEAgLTkxLDEwICs5MSwxMCBAQCBpbmxpbmUgdW5zaWduZWQgcXVlcnlTZWxlY3RvclNlbGVj
dG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQoQ29tcGlsZWRTZWxlY3RvcgogICAgIEFTU0VS
VChjb21waWxlZFNlbGVjdG9yLnN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpT
ZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKICNpZiBDUFUoQVJNNjRFKQogICAg
IGlmIChKU0M6Ok9wdGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgcmV0dXJuIHZtRW50cnlU
b0NTU0pJVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbGVtZW50KSwgYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oY29udGV4dCksIDAsIGNvbXBpbGVkU2VsZWN0b3IuY29kZVJlZi5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHJldHVybiB2bUVudHJ5VG9DU1NKSVQoYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oZWxlbWVudCksIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvbnRl
eHQpLCAwLCBjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLnRhZ2dlZFB0cigpKTsKICNl
bmRpZgogICAgIHVzaW5nIFF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdD
b250ZXh0ID0gdW5zaWduZWQoKikoY29uc3QgRWxlbWVudCosIGNvbnN0IFNlbGVjdG9yQ2hlY2tl
cjo6Q2hlY2tpbmdDb250ZXh0Kik7Ci0gICAgcmV0dXJuIHVudGFnQ0Z1bmN0aW9uUHRyPFF1ZXJ5
U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0LCBKU0M6OkNTU1NlbGVj
dG9yUHRyVGFnPihjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKGVsZW1lbnQsIGNvbnRleHQpOworICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0cjxR
dWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCwgSlNDOjpDU1NT
ZWxlY3RvclB0clRhZz4oY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS50YWdnZWRQdHIo
KSkoZWxlbWVudCwgY29udGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFNlbGVjdG9yQ29tcGls
ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0
b3IuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAK
aW5kZXggYjkxZjY4ZWMwY2MxLi4zZWJlYmE4OTQ1NGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCkBAIC05Niw3ICs5Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX3BhcmVudC0+YWRkaXRpb25h
bFBhZ2VzSW5IZWFwICs9IG51bVBhZ2VzOwogICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1
cm4gRnJlZVNwYWNlUHRyOjptYWtlRnJvbVJhd1BvaW50ZXIocmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRnJlZVNwYWNlUHRyOjpmcm9tVW50YWdnZWRQdHIocmVzdWx0KTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Cg==
</data>
<flag name="commit-queue"
          id="490568"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>461790</attachid>
            <date>2022-08-21 23:25:46 -0700</date>
            <delta_ts>2022-08-21 23:25:46 -0700</delta_ts>
            <desc>EWS testing.</desc>
            <filename>wip-codeptr6.patch</filename>
            <type>text/plain</type>
            <size>366191</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgKaW5kZXggYjgwNTg4YmE3N2Q3Li5mNDUzOWYwOTQzYTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNiBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGU+IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBl
OwogICAgIHR5cGVkZWYgQXNzZW1ibGVyVHlwZSBBc3NlbWJsZXJUeXBlX1Q7CiAKLSAgICB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRh
Zz47CiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVJlZiA9IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjx0YWc+OwogCiAgICAgZW51bSBjbGFzcyBDUFVJRENoZWNrU3RhdGUgewpAQCAt
ODY4LDcgKzg2Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgYVRh
ZywgUHRyVGFnIGJUYWc+Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPGFUYWc+JiBhLCBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8YlRhZz4mIGIpCisgICAgc3RhdGljIHB0cmRpZmZfdCBkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoY29uc3QgQ29kZVB0cjxhVGFnPiYgYSwgY29uc3QgQ29kZVB0cjxiVGFn
PiYgYikKICAgICB7CiAgICAgICAgIHJldHVybiBiLnRlbXBsYXRlIGRhdGFMb2NhdGlvbjxwdHJk
aWZmX3Q+KCkgLSBhLnRlbXBsYXRlIGRhdGFMb2NhdGlvbjxwdHJkaWZmX3Q+KCk7CiAgICAgfQpA
QCAtODkyLDkgKzg5MSw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcg
dGFnPgotICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxh
YmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiB2YWx1ZSkKKyAgICBzdGF0aWMg
dm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBsYWJlbCwgQ29kZVB0
cjx0YWc+IHZhbHVlKQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIo
Y29kZSwgbGFiZWwsIHZhbHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBBc3NlbWJs
ZXJUeXBlOjpsaW5rUG9pbnRlcihjb2RlLCBsYWJlbCwgdmFsdWUudGFnZ2VkUHRyKCkpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC05MjIsNyArOTIxLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rVGFpbENhbGwobmVhckNhbGwuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXI6Ci0gICAgICAgICAgICBB
c3NlbWJsZXJUeXBlOjpyZWxpbmtDYWxsKG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5h
dGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVy
VHlwZTo6cmVsaW5rQ2FsbChuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udW50
YWdnZWRQdHIoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkzNiw3ICs5MzUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgTmVhckNhbGxNb2RlOjpUYWlsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+KHRhZ0NvZGVQdHI8ZGVzdFRhZz4oQXNzZW1ibGVyVHlwZTo6
cHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXBDb25jdXJyZW50bHkobmVhckNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKSkpOwogICAgICAgICBjYXNlIE5lYXJD
YWxsTW9kZTo6UmVndWxhcjoKLSAgICAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbDxk
ZXN0VGFnPih0YWdDb2RlUHRyPGRlc3RUYWc+KEFzc2VtYmxlclR5cGU6OnByZXBhcmVGb3JBdG9t
aWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5h
dGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpKSk7CisgICAgICAgICAgICByZXR1cm4g
Q29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihBc3NlbWJsZXJU
eXBlOjpwcmVwYXJlRm9yQXRvbWljUmVsaW5rQ2FsbENvbmN1cnJlbnRseShuZWFyQ2FsbC5kYXRh
TG9jYXRpb24oKSwgZGVzdGluYXRpb24udW50YWdnZWRQdHIoKSkpKTsKICAgICAgICAgfQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCmluZGV4IDA3NTA0YmEwNGU1OS4u
NzNlMjVmNDk5ZjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0NvZGVMb2NhdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29k
ZUxvY2F0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Miw4ICs0Miw4IEBAIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyOwogdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBDb2RlTG9jYXRp
b25Db252ZXJ0aWJsZUxvYWQ7CiAKIC8vIFRoZSBDb2RlTG9jYXRpb24qIHR5cGVzIGFyZSBhbGwg
cHJldHR5IG11Y2ggZG8tbm90aGluZyB3cmFwcGVycyBhcm91bmQKLS8vIENvZGVQdHIgKG9yIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciwgdG8gZ2l2ZSBpdCBpdHMgZnVsbCBuYW1lKS4gIFRoZXNlCi0v
LyBjbGFzc2VzIG9ubHkgZXhpc3QgdG8gcHJvdmlkZSB0eXBlLXNhZmV0eSB3aGVuIGxpbmtpbmcg
YW5kIHBhdGNoaW5nIGNvZGUuCisvLyBDb2RlUHRyLiBUaGVzZSBjbGFzc2VzIG9ubHkgZXhpc3Qg
dG8gcHJvdmlkZSB0eXBlLXNhZmV0eSB3aGVuIGxpbmtpbmcgYW5kCisvLyBwYXRjaGluZyBjb2Rl
LgogLy8KIC8vIFRoZSBvbmUgbmV3IHBpZWNlIG9mIGZ1bmN0aW9uYWxsaXR5IGludHJvZHVjZWQg
YnkgdGhlc2UgY2xhc3NlcyBpcyB0aGUKIC8vIGFiaWxpdHkgdG8gY3JlYXRlIChvciBwdXQgYW5v
dGhlciB3YXksIHRvIHJlLWRpc2NvdmVyKSBhbm90aGVyIENvZGVMb2NhdGlvbgpAQCAtNTMsOCAr
NTMsOCBAQCB0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9h
ZDsKIC8vIG9uZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgd2Ugd2lsbCB1c2UgdGhlICpBdE9m
ZnNldCBtZXRob2RzIHByb3ZpZGVkIGJ5CiAvLyBDb2RlTG9jYXRpb25Db21tb24gdG8gZmluZCB0
aGUgb3RoZXIgcG9pbnRzIGluIHRoZSBjb2RlIHRvIG1vZGlmeS4KIHRlbXBsYXRlPFB0clRhZyB0
YWc+Ci1jbGFzcyBDb2RlTG9jYXRpb25Db21tb24gOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPHRhZz4gewotICAgIHVzaW5nIEJhc2UgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjsK
K2NsYXNzIENvZGVMb2NhdGlvbkNvbW1vbiA6IHB1YmxpYyBDb2RlUHRyPHRhZz4geworICAgIHVz
aW5nIEJhc2UgPSBDb2RlUHRyPHRhZz47CiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8UHRyVGFnIHJl
c3VsdFRhZyA9IHRhZz4gQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb248cmVzdWx0VGFnPiBpbnN0cnVj
dGlvbkF0T2Zmc2V0KGludCBvZmZzZXQpOwogICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcg
PSB0YWc+IENvZGVMb2NhdGlvbkxhYmVsPHJlc3VsdFRhZz4gbGFiZWxBdE9mZnNldChpbnQgb2Zm
c2V0KTsKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8Q29kZUxvY2F0aW9u
Q29tbW9uPHRhZz4sIFQ+Ojp2YWx1ZT4+CiAgICAgb3BlcmF0b3IgVCgpCiAgICAgewotICAgICAg
ICByZXR1cm4gVChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHRoaXMtPmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgcmV0dXJuIFQo
Q29kZVB0cjx0YWc+Ojpmcm9tVGFnZ2VkUHRyKHRoaXMtPnRhZ2dlZFB0cigpKSk7CiAgICAgfQog
CiBwcm90ZWN0ZWQ6CkBAIC04MCw4ICs4MCw4IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQog
Ci0gICAgQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0
aW9uKQotICAgICAgICA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKQorICAg
IENvZGVMb2NhdGlvbkNvbW1vbihDb2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgICAgIDogQ29k
ZVB0cjx0YWc+KGxvY2F0aW9uKQogICAgIHsKICAgICB9CiB9OwpAQCAtOTAsMjYgKzkwLDI2IEBA
IHRlbXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbiA6IHB1
YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9u
SW5zdHJ1Y3Rpb24oKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25JbnN0cnVjdGlvbihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICBleHBsaWNpdCBDb2RlTG9j
YXRpb25JbnN0cnVjdGlvbihDb2RlUHRyPHRhZz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxv
Y2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkluc3RydWN0aW9uKHZvaWQqIGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bjx0YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CisgICAgICAg
IDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4oQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiB9
OwogCiB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogY2xhc3MgQ29kZUxvY2F0aW9uTGFiZWwgOiBwdWJs
aWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgogICAgIENvZGVMb2NhdGlvbkxh
YmVsKCkgeyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPHRhZz4gbG9jYXRpb24pCisgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTGFiZWwoQ29k
ZVB0cjx0YWc+IGxvY2F0aW9uKQogICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KGxv
Y2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25MYWJlbCh2b2lkKiBsb2NhdGlv
bikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+
KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1Rh
Zz4KICAgICBDb2RlTG9jYXRpb25MYWJlbDxuZXdUYWc+IHJldGFnZ2VkKCkgeyByZXR1cm4gQ29k
ZUxvY2F0aW9uTGFiZWw8bmV3VGFnPihDb2RlTG9jYXRpb25Db21tb248dGFnPjo6dGVtcGxhdGUg
cmV0YWdnZWQ8bmV3VGFnPigpKTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQq
PgotICAgIFQgdW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIENvZGVM
b2NhdGlvbkNvbW1vbjx0YWc+Ojp0ZW1wbGF0ZSB1bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPFQ+
KCk7IH0KKyAgICBUIHVudGFnZ2VkUHRyKCkgY29uc3QgeyByZXR1cm4gQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz46OnRlbXBsYXRlIHVudGFnZ2VkUHRyPFQ+KCk7IH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQgPSB2b2lkKj4KICAgICBUIGRhdGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIENv
ZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojp0ZW1wbGF0ZSBkYXRhTG9jYXRpb248VD4oKTsgfQpAQCAt
MTE5LDIzICsxMTksMjMgQEAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KIGNsYXNzIENvZGVMb2NhdGlv
bkp1bXAgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4gewogcHVibGljOgogICAgIENv
ZGVMb2NhdGlvbkp1bXAoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlv
bkp1bXAoQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQogICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1v
bjx0YWc+KGxvY2F0aW9uKSB7IH0KICAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25KdW1wKHZvaWQq
IGxvY2F0aW9uKQotICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29t
bW9uPHRhZz4oQ29kZVB0cjx0YWc+KGxvY2F0aW9uKSkgeyB9CiAKICAgICB0ZW1wbGF0ZTxQdHJU
YWcgbmV3VGFnPgotICAgIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPiByZXRhZ2dlZCgpIHsgcmV0
dXJuIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6
dGVtcGxhdGUgcmV0YWdnZWQ8bmV3VGFnPigpKTsgfQorICAgIENvZGVMb2NhdGlvbkp1bXA8bmV3
VGFnPiByZXRhZ2dlZCgpIHsgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXA8bmV3VGFnPihDb2RlUHRy
PHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0KIH07CiAKIHRlbXBsYXRlPFB0
clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25DYWxsIDogcHVibGljIENvZGVMb2NhdGlvbkNv
bW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25DYWxsKCkgeyB9Ci0gICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlv
bikKKyAgICBleHBsaWNpdCBDb2RlTG9jYXRpb25DYWxsKENvZGVQdHI8dGFnPiBsb2NhdGlvbikK
ICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uQ2FsbCh2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9j
YXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsg
fQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8dGFnPihsb2NhdGlv
bikpIHsgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4KICAgICBDb2RlTG9jYXRpb25D
YWxsPG5ld1RhZz4gcmV0YWdnZWQoKSB7IHJldHVybiBDb2RlTG9jYXRpb25DYWxsPG5ld1RhZz4o
Q29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OnRlbXBsYXRlIHJldGFnZ2VkPG5ld1RhZz4oKSk7IH0K
QEAgLTE0NSwxMCArMTQ1LDEwIEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9j
YXRpb25OZWFyQ2FsbCA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7CiBwdWJsaWM6
CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwoKSB7IH0KLSAgICBleHBsaWNpdCBDb2RlTG9jYXRp
b25OZWFyQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbiwgTmVhckNhbGxN
b2RlIGNhbGxNb2RlKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbk5lYXJDYWxsKENvZGVQdHI8
dGFnPiBsb2NhdGlvbiwgTmVhckNhbGxNb2RlIGNhbGxNb2RlKQogICAgICAgICA6IENvZGVMb2Nh
dGlvbkNvbW1vbjx0YWc+KGxvY2F0aW9uKSwgbV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CiAgICAg
ZXhwbGljaXQgQ29kZUxvY2F0aW9uTmVhckNhbGwodm9pZCogbG9jYXRpb24sIE5lYXJDYWxsTW9k
ZSBjYWxsTW9kZSkKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpLCBtX2NhbGxNb2RlKGNhbGxNb2RlKSB7IH0KKyAg
ICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihDb2RlUHRyPHRhZz4obG9jYXRpb24pKSwg
bV9jYWxsTW9kZShjYWxsTW9kZSkgeyB9CiAgICAgTmVhckNhbGxNb2RlIGNhbGxNb2RlKCkgeyBy
ZXR1cm4gbV9jYWxsTW9kZTsgfQogcHJpdmF0ZToKICAgICBOZWFyQ2FsbE1vZGUgbV9jYWxsTW9k
ZSB7IE5lYXJDYWxsTW9kZTo6UmVndWxhciB9OwpAQCAtMTU4LDQwICsxNTgsNDAgQEAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KIGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVibGljIENv
ZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWwzMigpIHsgfQotICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyKENvZGVQdHI8dGFnPiBsb2NhdGlvbikKICAgICAgICAgOiBDb2RlTG9jYXRpb25D
b21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsMzIodm9pZCogbG9jYXRpb24pCi0gICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KKyAgICAgICAgOiBDb2Rl
TG9jYXRpb25Db21tb248dGFnPihDb2RlUHRyPHRhZz4obG9jYXRpb24pKSB7IH0KIH07CiAKIHRl
bXBsYXRlPFB0clRhZyB0YWc+CiBjbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IDog
cHVibGljIENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+IHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxDb21wYWN0KCkgeyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsQ29tcGFjdChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBsb2NhdGlvbikKKyAgICBleHBs
aWNpdCBDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0KENvZGVQdHI8dGFnPiBsb2NhdGlvbikK
ICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihsb2NhdGlvbikgeyB9CiAgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsQ29tcGFjdCh2b2lkKiBsb2NhdGlvbikKLSAgICAg
ICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihs
b2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8
dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KIGNsYXNzIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb248dGFnPiB7
CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKCkgeyB9Ci0gICAgZXhwbGlj
aXQgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGxv
Y2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cihDb2RlUHRyPHRh
Zz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz4obG9jYXRpb24p
IHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cih2b2lkKiBsb2NhdGlv
bikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+
KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4K
IGNsYXNzIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZCA6IHB1YmxpYyBDb2RlTG9jYXRpb25D
b21tb248dGFnPiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKCkg
eyB9Ci0gICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uQ29udmVydGlibGVMb2FkKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjx0YWc+IGxvY2F0aW9uKQorICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNvbnZl
cnRpYmxlTG9hZChDb2RlUHRyPHRhZz4gbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxvY2F0aW9u
Q29tbW9uPHRhZz4obG9jYXRpb24pIHsgfQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkNvbnZl
cnRpYmxlTG9hZCh2b2lkKiBsb2NhdGlvbikKLSAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb248
dGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQorICAgICAgICA6
IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+KENvZGVQdHI8dGFnPihsb2NhdGlvbikpIHsgfQogfTsK
IAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuY3BwCmluZGV4IDI3NmVlNmMwOTQzOS4uNDIwN2NlMDllNzQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKQEAgLTY1
LDcgKzY1LDcgQEAgTGlua0J1ZmZlcjo6Q29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBMaW5rQnVm
ZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXAKICAgICAgICAgdmFfc3RhcnQoYXJn
TGlzdCwgZm9ybWF0KTsKICAgICAgICAgb3V0LnZwcmludGYoZm9ybWF0LCBhcmdMaXN0KTsKICAg
ICAgICAgdmFfZW5kKGFyZ0xpc3QpOwotICAgICAgICBQZXJmTG9nOjpsb2cob3V0LnRvQ1N0cmlu
ZygpLCByZXN1bHQuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Y29uc3QgdWludDhf
dCo+KCksIHJlc3VsdC5zaXplKCkpOworICAgICAgICBQZXJmTG9nOjpsb2cob3V0LnRvQ1N0cmlu
ZygpLCByZXN1bHQuY29kZSgpLnVudGFnZ2VkUHRyPGNvbnN0IHVpbnQ4X3QqPigpLCByZXN1bHQu
c2l6ZSgpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtOTAsMTQgKzkwLDE0IEBAIExpbmtCdWZmZXI6
OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERp
c2Fzc2VtYmx5SW1wCiAgICAgICAgIHZzbnByaW50ZihidWZmZXIgKyBzaXplb2YocHJlZml4KSAt
IDEsIHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7CiAgICAgICAgIG91dC5wcmlu
dGYoIiVzIiwgYnVmZmVyKTsKIAotICAgICAgICByZWdpc3RlckxhYmVsKHJlc3VsdC5jb2RlKCku
dW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLCBXVEZNb3ZlKGxhYmVsKSk7CisgICAgICAgIHJl
Z2lzdGVyTGFiZWwocmVzdWx0LmNvZGUoKS51bnRhZ2dlZFB0cigpLCBXVEZNb3ZlKGxhYmVsKSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIG91dC52cHJpbnRmKGZvcm1hdCwgYXJnTGlzdCk7CiAKICAg
ICB2YV9lbmQoYXJnTGlzdCk7CiAgICAgb3V0LnByaW50ZigiOlxuIik7CiAKLSAgICB1aW50OF90
KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRk
cmVzczx1aW50OF90Kj4oKTsKKyAgICB1aW50OF90KiBleGVjdXRhYmxlQWRkcmVzcyA9IHJlc3Vs
dC5jb2RlKCkudW50YWdnZWRQdHI8dWludDhfdCo+KCk7CiAgICAgb3V0LnByaW50ZigiICAgIENv
ZGUgYXQgWyVwLCAlcCklc1xuIiwgZXhlY3V0YWJsZUFkZHJlc3MsIGV4ZWN1dGFibGVBZGRyZXNz
ICsgcmVzdWx0LnNpemUoKSwganVzdER1bXBpbmdIZWFkZXIgPyAiLiIgOiAiOiIpOwogICAgIAog
ICAgIENTdHJpbmcgaGVhZGVyID0gb3V0LnRvQ1N0cmluZygpOwpAQCAtMTA4LDcgKzEwOCw3IEBA
IExpbmtCdWZmZXI6OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxp
emVDb2RlV2l0aERpc2Fzc2VtYmx5SW1wCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIAotICAgIHZvaWQqIGNvZGVTdGFydCA9IGVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+
KCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGNvZGVTdGFydCA9IGVu
dHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50YWdnZWRQdHIoKTsKICAgICB2b2lkKiBj
b2RlRW5kID0gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb2RlU3RhcnQpICsgc2l6ZSgpOwogCiAg
ICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSkgewpAQCAtNDY3LDcgKzQ2Nyw3IEBA
IHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVy
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlCiAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIGVmZm9ydCk7
CiAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Nv
ZGUgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9leGVjdXRhYmxl
TWVtb3J5LT5zdGFydCgpLnJldGFnZ2VkUHRyPExpbmtCdWZmZXJQdHJUYWc+KCkpOworICAgIG1f
Y29kZSA9IENvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9leGVjdXRhYmxlTWVtb3J5LT5zdGFy
dCgpLnJldGFnZ2VkUHRyPExpbmtCdWZmZXJQdHJUYWc+KCkpOwogICAgIG1fc2l6ZSA9IGluaXRp
YWxTaXplOwogICAgIG1fZGlkQWxsb2NhdGUgPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCBmOWNmM2ZmZmQwOTguLmMzY2VkNTVj
N2U3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgK
QEAgLTYwLDcgKzYwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBMaW5rQnVmZmVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShMaW5rQnVmZmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gdXNpbmcgQ29kZVB0ciA9IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+OwogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IHVzaW5nIENv
ZGVSZWYgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPjsKICAgICB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBMYWJlbDsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpKdW1wIEp1
bXA7CkBAIC0xMjcsNyArMTI2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0
clRhZyB0YWc+Ci0gICAgTGlua0J1ZmZlcihNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNvZGUsIHNpemVfdCBzaXplLCBQcm9maWxlIHBy
b2ZpbGUgPSBQcm9maWxlOjpVbmNhdGVnb3JpemVkLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQgPSBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZvcm1CcmFuY2hD
b21wYWN0aW9uID0gdHJ1ZSkKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fz
c2VtYmxlciwgQ29kZVB0cjx0YWc+IGNvZGUsIHNpemVfdCBzaXplLCBQcm9maWxlIHByb2ZpbGUg
PSBQcm9maWxlOjpVbmNhdGVnb3JpemVkLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0
aW9uID0gdHJ1ZSkKICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAgICAgLCBtX2RpZEFsbG9j
YXRlKGZhbHNlKQogI2lmbmRlZiBOREVCVUcKQEAgLTE3MiwxMiArMTcxLDEyIEBAIHB1YmxpYzoK
ICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19mdW5jdGlvbjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVy
PEZ1bmM+Ojp0eXBlPjo6dmFsdWU+PgogICAgIHZvaWQgbGluayhDYWxsIGNhbGwsIEZ1bmMgZnVu
Y05hbWUpCiAgICAgewotICAgICAgICBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKGZ1bmNOYW1l
KTsKKyAgICAgICAgQ29kZVB0cjx0YWc+IGZ1bmN0aW9uKGZ1bmNOYW1lKTsKICAgICAgICAgbGlu
ayhjYWxsLCBmdW5jdGlvbik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAg
ICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQorICAgIHZv
aWQgbGluayhDYWxsIGNhbGwsIENvZGVQdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAg
IEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOwogICAgICAgICBjYWxsLm1f
bGFiZWwgPSBhcHBseU9mZnNldChjYWxsLm1fbGFiZWwpOwpAQCAtMTg3LDcgKzE4Niw3IEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogICAgIHZvaWQgbGluayhDYWxsIGNhbGws
IENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gbGFiZWwpCiAgICAgewotICAgICAgICBsaW5rKGNhbGws
IGxhYmVsLnRvRnVuY3Rpb25QdHIoKSk7CisgICAgICAgIGxpbmsoY2FsbCwgQ29kZVB0cjx0YWc+
KGxhYmVsKSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC00MjMs
NyArNDIyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYWxyZWFkeURpc2Fzc2VtYmxlZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX2lzVGh1bmsgeyBmYWxzZSB9OwogICAgIFByb2ZpbGUgbV9wcm9m
aWxlIHsgUHJvZmlsZTo6VW5jYXRlZ29yaXplZCB9OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CisgICAgQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFn
PiBtX2NvZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYp
Pj4+IG1fbGlua1Rhc2tzOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtC
dWZmZXImKT4+PiBtX2xhdGVMaW5rVGFza3M7CiAgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoKT4+PiBtX21haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXgg
NGM0YTA1YWE0N2JmLi5lYTY3NjU3NjkwYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0zOTUwLDEwICszOTUw
LDEwIEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIENhbGwgY2FsbChSZWdpc3RlcklEIHRh
cmdldCwgUmVnaXN0ZXJJRCBjYWxsVGFnKSB7IHJldHVybiBVTlVTRURfUEFSQU0oY2FsbFRhZyks
IGNhbGwodGFyZ2V0LCBOb1B0clRhZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIENhbGwgY2FsbChB
ZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgY2FsbFRhZykgeyByZXR1cm4gVU5VU0VEX1BBUkFN
KGNhbGxUYWcpLCBjYWxsKGFkZHJlc3MsIE5vUHRyVGFnKTsgfQogCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3QgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBv
cGVyYXRpb24pCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3QgQ29k
ZVB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKICAgICB7CiAgICAgICAgIGF1dG8gdG1w
ID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIob3BlcmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCB0bXApOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIob3BlcmF0aW9uLnRhZ2dlZFB0cigpKSwgdG1wKTsK
ICAgICAgICAgY2FsbCh0bXAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgfQogCkBAIC00NjQxLDkg
KzQ2NDEsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRh
ZywgUHRyVGFnIGxvY2F0aW9uVGFnPgotICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+
IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCisgICAg
c3RhdGljIENvZGVQdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxs
PGxvY2F0aW9uVGFnPiBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxyZXN1bHRUYWc+KEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9j
YXRpb24oKSkpLnRvRnVuY3Rpb25QdHIoKTsKKyAgICAgICAgcmV0dXJuIENvZGVQdHI8cmVzdWx0
VGFnPihBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKTsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgpAQCAtNDcxOSwxMyArNDcxOSwxMyBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgogICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwg
Q29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBB
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQQVRD
SF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2Fs
bC5kYXRhTGFiZWxQdHJBdE9mZnNldChSRVBBVENIX09GRlNFVF9DQUxMX1RPX1BPSU5URVIpLmRh
dGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgotICAgIHN0YXRpYyB2b2lkIHJl
cGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVz
dFRhZz4gZGVzdGluYXRpb24pCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAg
IHsKLSAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRFUikuZGF0YUxvY2F0aW9uKCksIGRl
c3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBBc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9U
T19QT0lOVEVSKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udGFnZ2VkUHRyKCkpOwogICAg
IH0KIAogICAgIEpTQ19PUEVSQVRJT05fVkFMSURBVElPTl9NQUNST0FTU0VNQkxFUl9BUk02NF9T
VVBQT1JUKCk7CkBAIC01Mzc4LDE0ICs1Mzc4LDE0IEBAIHByb3RlY3RlZDoKICAgICBmcmllbmQg
Y2xhc3MgTGlua0J1ZmZlcjsKIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgc3RhdGlj
IHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1
bmN0aW9uKQorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwg
Q29kZVB0cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYgKCFjYWxsLmlzRmxhZ1Nl
dChDYWxsOjpOZWFyKSkKLSAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwg
Y2FsbC5tX2xhYmVsLmxhYmVsQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVS
KSwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtQb2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KFJFUEFUQ0hfT0ZG
U0VUX0NBTExfVE9fUE9JTlRFUiksIGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxz
ZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udW50YWdnZWRFeGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5t
X2xhYmVsLCBmdW5jdGlvbi51bnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnVudGFn
Z2VkRXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtDYWxs
KGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udW50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29sbGVjdENQVUZlYXR1cmVzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmgKaW5kZXggMmY0NTYwZDViNzdhLi43NGRjYTA4MzU1YWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yMzksMTAgKzIzOSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGwoZGF0YVRlbXBSZWdp
c3RlciwgdGFnKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlv
bihjb25zdCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlvbihjb25zdCBDb2RlUHRyPE9wZXJhdGlvblB0clRh
Zz4gb3BlcmF0aW9uKQogICAgIHsKICAgICAgICAgYXV0byB0bXAgPSBnZXRDYWNoZWREYXRhVGVt
cFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihv
cGVyYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIHRtcCk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihvcGVyYXRpb24udGFnZ2VkUHRyKCkpLCB0bXApOwogICAgICAgICBjYWxsKHRtcCwg
T3BlcmF0aW9uUHRyVGFnKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKaW5kZXggMDBiOGVkNjg5MWU0Li5m
YzdjOTIyZjk3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjMzNiw5ICsyMzM2LDkgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgQ2FsbCBjYWxs
KFJlZ2lzdGVySUQgdGFyZ2V0LCBSZWdpc3RlcklEIGNhbGxUYWcpIHsgcmV0dXJuIFVOVVNFRF9Q
QVJBTShjYWxsVGFnKSwgY2FsbCh0YXJnZXQsIE5vUHRyVGFnKTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBjYWxsVGFnKSB7IHJldHVy
biBVTlVTRURfUEFSQU0oY2FsbFRhZyksIGNhbGwoYWRkcmVzcywgTm9QdHJUYWcpOyB9CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJhdGlvbihjb25zdCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2FsbE9wZXJh
dGlvbihjb25zdCBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gb3BlcmF0aW9uKQogICAgIHsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwg
YWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihvcGVyYXRp
b24udGFnZ2VkUHRyKCkpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKICAgICAgICAgY2FsbChhZGRy
ZXNzVGVtcFJlZ2lzdGVyLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIH0KIApAQCAtMjUwOSw5ICsy
NTA5LDkgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgRGF0YUxhYmVsUHRyIHN0b3JlUHRy
V2l0aFBhdGNoKEFkZHJlc3MgYWRkcmVzcykgeyByZXR1cm4gc3RvcmVQdHJXaXRoUGF0Y2goVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgYWRkcmVzcyk7IH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyBy
ZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4KLSAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVz
dWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxs
KQorICAgIHN0YXRpYyBDb2RlUHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0
aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlv
blB0cjxyZXN1bHRUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihBUk12N0Fzc2VtYmxl
cjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgcmV0dXJu
IENvZGVQdHI8cmVzdWx0VGFnPihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3Nl
bWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CiAgICAgfQogICAg
IAogICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI1NjQsMTMgKzI1NjQsMTMgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KICAgICBzdGF0aWMg
dm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2Nh
dGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgQVJNdjdBc3Nl
bWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEFSTXY3QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwu
ZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLnRhZ2dlZFB0cigpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+Ci0gICAgc3RhdGljIHZvaWQg
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxk
ZXN0VGFnPiBkZXN0aW5hdGlvbikKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVQdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAg
ICAgewotICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlv
bigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgQVJNdjdBc3Nl
bWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udGFnZ2Vk
UHRyKCkpOwogICAgIH0KIAogcHJvdGVjdGVkOgpAQCAtMjcyMSwxNCArMjcyMSwxNCBAQCBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogCiAgICAgdGVtcGxhdGU8UHRyVGFn
IHRhZz4KLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1
bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCog
Y29kZSwgQ2FsbCBjYWxsLCBDb2RlUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBp
ZiAoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKQotICAgICAgICAgICAgQXNzZW1ibGVyOjps
aW5rUG9pbnRlcihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldCgtMiksIGZ1bmN0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rUG9pbnRl
cihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldCgtMiksIGZ1bmN0aW9uLnRhZ2dlZFB0
cigpKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAg
ICAgICAgICBBc3NlbWJsZXI6OmxpbmtUYWlsQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rVGFp
bENhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVs
LCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6
bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAgICAg
fQogCiAgICAgYm9vbCBtX21ha2VKdW1wUGF0Y2hhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCmluZGV4
IGYzNWM1NTkwODNmMC4uNjQyNWRhMGVjY2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUs
MzAgKzM1LDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ckJhc2U6OmR1bXBXaXRoTmFtZSh2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgdm9pZCogZGF0
YUxvY2F0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KQotewotICAgIGlm
ICghZXhlY3V0YWJsZUFkZHJlc3MpIHsKLSAgICAgICAgb3V0LnByaW50KG5hbWUsICIobnVsbCki
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZXhlY3V0YWJsZUFkZHJlc3MgPT0g
ZGF0YUxvY2F0aW9uKSB7Ci0gICAgICAgIG91dC5wcmludChuYW1lLCAiKCIsIFJhd1BvaW50ZXIo
ZXhlY3V0YWJsZUFkZHJlc3MpLCAiKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG91
dC5wcmludChuYW1lLCAiKGV4ZWN1dGFibGUgPSAiLCBSYXdQb2ludGVyKGV4ZWN1dGFibGVBZGRy
ZXNzKSwgIiwgZGF0YUxvY2F0aW9uID0gIiwgUmF3UG9pbnRlcihkYXRhTG9jYXRpb24pLCAiKSIp
OwotfQotCi1ib29sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6OnRyeVRvRGlzYXNzZW1ibGUo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUHRyLCBzaXplX3Qg
c2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQorYm9vbCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWZCYXNlOjp0cnlUb0Rpc2Fzc2VtYmxlKENvZGVQdHI8RGlzYXNzZW1ibHlQ
dHJUYWc+IGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3Ry
ZWFtJiBvdXQpCiB7CiAgICAgcmV0dXJuIEpTQzo6dHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBz
aXplLCBwcmVmaXgsIG91dCk7CiB9CiAKLWJvb2wgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6
dHJ5VG9EaXNhc3NlbWJsZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+
IGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgpCitib29sIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZkJhc2U6OnRyeVRvRGlzYXNzZW1ibGUoQ29kZVB0cjxEaXNhc3NlbWJseVB0
clRhZz4gY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCkKIHsKICAgICBy
ZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCBwcmVmaXgsIFdURjo6ZGF0YUZp
bGUoKSk7CiB9CiAKLUNTdHJpbmcgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNzZW1i
bHkoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiBjb2RlUHRyLCBzaXpl
X3Qgc2l6ZSkKK0NTdHJpbmcgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNzZW1ibHko
Q29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4gY29kZVB0ciwgc2l6ZV90IHNpemUpCiB7CiAgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OwogICAgIGlmICghdHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRy
LCBzaXplLCAiIiwgb3V0KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCmluZGV4IGZjMjhmNmE3NGVmZC4uYTQ5NTI0
MmRlMDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTI3LDI2ICsyNywyMCBAQAogCiAjaW5jbHVkZSAi
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oIgogI2luY2x1ZGUgIkpTQ1B0clRhZy5oIgorI2luY2x1
ZGUgPHd0Zi9Db2RlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KLSNpbmNsdWRlIDx3
dGYvRnVuY3Rpb25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0vLyBBU1NF
UlRfVkFMSURfQ09ERV9QT0lOVEVSIGNoZWNrcyB0aGF0IHB0ciBpcyBhIG5vbi1udWxsIHBvaW50
ZXIsIGFuZCB0aGF0IGl0IGlzIGEgdmFsaWQKLS8vIGluc3RydWN0aW9uIGFkZHJlc3Mgb24gdGhl
IHBsYXRmb3JtIChmb3IgZXhhbXBsZSwgY2hlY2sgYW55IGFsaWdubWVudCByZXF1aXJlbWVudHMp
LgogI2lmIENQVShBUk1fVEhVTUIyKSAmJiBFTkFCTEUoSklUKQogLy8gQVJNIGluc3RydWN0aW9u
cyBtdXN0IGJlIDE2LWJpdCBhbGlnbmVkLiBUaHVtYjIgY29kZSBwb2ludGVycyB0byBiZSBsb2Fk
ZWQgaW50bwogLy8gaW50byB0aGUgcHJvY2Vzc29yIGFyZSBkZWNvcmF0ZWQgd2l0aCB0aGUgYm90
dG9tIGJpdCBzZXQsIHdoaWxlIHRyYWRpdGlvbmFsIEFSTSBoYXMKIC8vIHRoZSBsb3dlciBiaXQg
Y2xlYXIuIFNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCBraW5kIG9mIHBvaW50ZXIsIHdlIGNoZWNr
IGZvciBib3RoCiAvLyBkZWNvcmF0ZWQgYW5kIHVuZGVjb3JhdGVkIG51bGwuCi0jZGVmaW5lIEFT
U0VSVF9WQUxJRF9DT0RFX1BPSU5URVIocHRyKSBcCi0gICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHB0cikgJiB+MSkKICNkZWZpbmUgQVNTRVJUX1ZBTElEX0NPREVfT0ZGU0VU
KG9mZnNldCkgXAogICAgIEFTU0VSVCghKG9mZnNldCAmIDEpKSAvLyBNdXN0IGJlIG11bHRpcGxl
IG9mIDIuCiAjZWxzZQotI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgXAot
ICAgIEFTU0VSVChwdHIpCiAjZGVmaW5lIEFTU0VSVF9WQUxJRF9DT0RFX09GRlNFVChvZmZzZXQp
IC8vIEFueXRoaW5nIGdvZXMhCiAjZW5kaWYKIApAQCAtNTcsNyArNTEsNiBAQCBlbnVtIGNsYXNz
IENvbXBpbGF0aW9uTW9kZSA6IHVpbnQ4X3Q7CiB9IC8vIG5hbWVzcGFjZSBXYXNtCiAKIGNsYXNz
IENvZGVCbG9jazsKLXRlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OwogCiBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKQEAgLTEwNSwxNjYgKzk4LDYgQEAgcHJp
dmF0ZToKICAgICBjb25zdCB2b2lkKiBtX3ZhbHVlIHsgbnVsbHB0ciB9OwogfTsKIAotLy8gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOgotLy8KLS8vIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzaG91bGQg
YmUgdXNlZCB0byB3cmFwIHBvaW50ZXJzIHRvIEpJVCBnZW5lcmF0ZWQgY29kZS4KLWNsYXNzIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgewotcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIGR1
bXBXaXRoTmFtZSh2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgdm9pZCogZGF0YUxvY2F0aW9uLCBj
b25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KTsKLX07Ci0KLS8vIEZJWE1FOiBNYWtl
IEpTQyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5qZXJpdCBmcm9tIE1ldGFBbGxvY2F0b3JQdHIu
Ci0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MTQ1Ci10ZW1w
bGF0ZTxQdHJUYWcgdGFnPgotY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIDogcHJpdmF0ZSBN
YWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlIHsKLXB1YmxpYzoKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIoKSA9IGRlZmF1bHQ7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHN0ZDo6bnVsbHB0
cl90KSA6IG1fdmFsdWUobnVsbHB0cikgeyB9Ci0KLSAgICBleHBsaWNpdCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoY29uc3Qgdm9pZCogdmFsdWUpCi0jaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgICAg
IC8vIERlY29yYXRlIHRoZSBwb2ludGVyIGFzIGEgdGh1bWIgY29kZSBwb2ludGVyLgotICAgICAg
ICA6IG1fdmFsdWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpICsgMSkKLSNl
bHNlCi0gICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKLSNlbmRpZgotICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNUYWdnZWRXaXRoPHRhZz4odmFsdWUpOwotICAgICAgICBBU1NFUlQodmFsdWUpOwotI2lm
IENQVShBUk1fVEhVTUIyKQotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4odmFsdWUpICYgMSkpOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BP
SU5URVIobV92YWx1ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoY29uc3Qgdm9pZCogdmFsdWUpCi0gICAgewot
ICAgICAgICBBU1NFUlQodmFsdWUpOwotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVS
KHZhbHVlKTsKLSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPHRhZz4odmFsdWUpOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0OwotICAgICAgICByZXN1bHQubV92YWx1ZSA9
IHZhbHVlOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGV4cGxpY2l0IE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cihSZXR1cm5BZGRyZXNzUHRyIHJhKQotICAgICAgICA6IG1fdmFs
dWUocmV0YWdDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWcsIHRhZz4ocmEudmFsdWUoKSkpCi0g
ICAgewotICAgICAgICBBU1NFUlQocmEudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAgICAgQVNTRVJU
X1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxQdHJU
YWcgbmV3VGFnPgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxuZXdUYWc+IHJldGFnZ2VkKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV92YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8bmV3VGFnPigpOwotICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPG5ld1RhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ2dl
ZEV4ZWN1dGFibGVBZGRyZXNzPG5ld1RhZz4oKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCA9IHZvaWQqPgotICAgIFQgZXhlY3V0YWJsZUFkZHJlc3MoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihtX3ZhbHVlKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+Ci0gICAgVCB1bnRhZ2dlZEV4ZWN1dGFibGVBZGRy
ZXNzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bnRhZ0NvZGVQdHI8VCwgdGFnPiht
X3ZhbHVlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxQdHJUYWcgbmV3VGFnLCB0eXBlbmFtZSBU
ID0gdm9pZCo+Ci0gICAgVCByZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8VCwgdGFnLCBuZXdUYWc+KG1fdmFsdWUpOwot
ICAgIH0KLQotI2lmIENQVShBUk1fVEhVTUIyKQotICAgIC8vIFRvIHVzZSB0aGlzIHBvaW50ZXIg
YXMgYSBkYXRhIGFkZHJlc3MgcmVtb3ZlIHRoZSBkZWNvcmF0aW9uLgotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQgPSB2b2lkKj4KLSAgICBUIGRhdGFMb2NhdGlvbigpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwotICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PFQ+KG1fdmFsdWUgPyBiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1fdmFsdWUpIC0g
MSA6IG51bGxwdHIpOwotICAgIH0KLSNlbHNlCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZv
aWQqPgotICAgIFQgZGF0YUxvY2F0aW9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9W
QUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7Ci0gICAgICAgIHJldHVybiB1bnRhZ0NvZGVQdHI8
VCwgdGFnPihtX3ZhbHVlKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhbV92YWx1ZTsKLSAgICB9Ci0gICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEoISp0aGlzKTsgfQotICAgIAotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKLSAgICB9
Ci0KLSAgICAvLyBEaXNhbGxvdyBhbnkgY2FzdGluZyBvcGVyYXRpb25zIChleGNlcHQgZm9yIGJv
b2xlYW5zKS4gSW5zdGVhZCwgdGhlIGNsaWVudAotICAgIC8vIHNob3VsZCBiZSBhc2tpbmcgZXhl
Y3V0YWJsZUFkZHJlc3MoKSBleHBsaWNpdGx5LgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2YWx1ZSAm
JiAhc3RkOjppc19zYW1lPFQsIEZ1bmN0aW9uUHRyPHRhZz4+Ojp2YWx1ZT4+Ci0gICAgb3BlcmF0
b3IgVCgpID0gZGVsZXRlOwotCi0gICAgRnVuY3Rpb25QdHI8dGFnPiB0b0Z1bmN0aW9uUHRyKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cjx0YWc+Ojpmcm9tQWxyZWFk
eVRhZ2dlZFBvaW50ZXIoZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgfQotCi0gICAgb3BlcmF0
b3IgRnVuY3Rpb25QdHI8dGFnPigpIGNvbnN0IHsgcmV0dXJuIHRvRnVuY3Rpb25QdHIoKTsgfQot
Ci0gICAgdm9pZCBkdW1wV2l0aE5hbWUoY29uc3QgY2hhciogbmFtZSwgUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX3ZhbHVlKQotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRh
dGFMb2NhdGlvbigpLCBuYW1lLCBvdXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUobnVsbHB0ciwgbnVsbHB0ciwgbmFt
ZSwgb3V0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Qg
eyBkdW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBvdXQpOyB9Ci0KLSAgICBlbnVtIEVtcHR5VmFsdWVU
YWcgeyBFbXB0eVZhbHVlIH07Ci0gICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFs
dWUgfTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoRW1wdHlWYWx1ZVRhZykKLSAg
ICAgICAgOiBtX3ZhbHVlKGVtcHR5VmFsdWUoKSkKLSAgICB7IH0KLSAgICAKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoRGVsZXRlZFZhbHVlVGFnKQotICAgICAgICA6IG1fdmFsdWUoZGVsZXRl
ZFZhbHVlKCkpCi0gICAgeyB9Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlID09IGVtcHR5VmFsdWUoKTsgfQotICAgIGJvb2wgaXNEZWxldGVkVmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID09IGRlbGV0ZWRWYWx1ZSgpOyB9Ci0KLSAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gUHRySGFzaDxjb25zdCB2b2lkKj46Omhhc2go
bV92YWx1ZSk7IH0KLQotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKLQotcHJpdmF0ZToK
LSAgICBzdGF0aWMgY29uc3Qgdm9pZCogZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIGJpdHdpc2VfY2Fz
dDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsgfQotICAgIHN0YXRpYyBjb25zdCB2
b2lkKiBkZWxldGVkVmFsdWUoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19j
YXN0PGludHB0cl90PigyKSk7IH0KLQotICAgIGNvbnN0IHZvaWQqIG1fdmFsdWUgeyBudWxscHRy
IH07Ci19OwotCi10ZW1wbGF0ZTxQdHJUYWcgdGFnPgotc3RydWN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ckhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjx0YWc+JiBwdHIpIHsgcmV0dXJuIHB0ci5oYXNoKCk7IH0KLSAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiYgYSwgY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwot
ICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwotfTsKLQogLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOgogLy8KIC8vIEEg
cmVmZXJlbmNlIHRvIGEgc2VjdGlvbiBvZiBKSVQgZ2VuZXJhdGVkIGNvZGUuICBBIENvZGVSZWYg
Y29uc2lzdHMgb2YgYQpAQCAtMjcyLDkgKzEwNSw5IEBAIHN0cnVjdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHJIYXNoIHsKIC8vIHdhcyBhbGxvY2F0ZWQuCiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWZCYXNlIHsKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4sIHNpemVfdCwgY29uc3QgY2hh
ciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KTsKLSAgICBzdGF0aWMgYm9vbCB0cnlUb0Rpc2Fz
c2VtYmxlKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4sIHNpemVfdCwg
Y29uc3QgY2hhciogcHJlZml4KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgQ1N0cmlu
ZyBkaXNhc3NlbWJseShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+LCBz
aXplX3QpOworICAgIHN0YXRpYyBib29sIHRyeVRvRGlzYXNzZW1ibGUoQ29kZVB0cjxEaXNhc3Nl
bWJseVB0clRhZz4sIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0
KTsKKyAgICBzdGF0aWMgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKENvZGVQdHI8RGlzYXNzZW1ibHlQ
dHJUYWc+LCBzaXplX3QsIGNvbnN0IGNoYXIqIHByZWZpeCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIENTdHJpbmcgZGlzYXNzZW1ibHkoQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4s
IHNpemVfdCk7CiB9OwogCiB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgpAQCAtMjgyLDcgKzExNSw3IEBA
IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmQmFzZSB7CiBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgcHJpdmF0ZSBiZWNhdXNlIGl0J3Mg
ZGFuZ2Vyb3VzIGVub3VnaCB0aGF0IHdlIHdhbnQgdXNlcyBvZiBpdAogICAgIC8vIHRvIGJlIGVh
c3kgdG8gZmluZCAtIGhlbmNlIHRoZSBzdGF0aWMgY3JlYXRlIG1ldGhvZCBiZWxvdy4KLSAgICBl
eHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4g
Y29kZVB0cikKKyAgICBleHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoQ29kZVB0cjx0YWc+
IGNvZGVQdHIpCiAgICAgICAgIDogbV9jb2RlUHRyKGNvZGVQdHIpCiAgICAgewogICAgICAgICBB
U1NFUlQobV9jb2RlUHRyKTsKQEAgLTMwMiw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8UHRyVGFnIG90aGVyVGFnPgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgb3BlcmF0b3I9
KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKICAg
ICB7Ci0gICAgICAgIG1fY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OjpjcmVh
dGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mob3RoZXJDb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRh
Z2dlZEV4ZWN1dGFibGVBZGRyZXNzPHRhZz4oKSk7CisgICAgICAgIG1fY29kZVB0ciA9IENvZGVQ
dHI8dGFnPjo6ZnJvbVRhZ2dlZFB0cihvdGhlckNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFn
Z2VkUHRyPHRhZz4oKSk7CiAgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG90aGVyQ29kZVJl
Zi5tX2V4ZWN1dGFibGVNZW1vcnk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0z
MTAsNyArMTQzLDcgQEAgcHVibGljOgogICAgIC8vIFVzZSB0aGlzIG9ubHkgd2hlbiB5b3Uga25v
dyB0aGF0IHRoZSBjb2RlUHRyIHJlZmVycyB0byBjb2RlIHRoYXQgaXMKICAgICAvLyBhbHJlYWR5
IGJlaW5nIGtlcHQgYWxpdmUgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLiBUeXBpY2FsbHkgdGhp
cyBtZWFucwogICAgIC8vIHRoYXQgY29kZVB0ciBpcyBpbW1vcnRhbC4KLSAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8dGFnPiBjb2RlUHRyKQorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8dGFnPiBjb2RlUHRyKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihjb2RlUHRyKTsKICAgICB9CkBAIC0z
MjAsMTMgKzE1MywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2V4ZWN1dGFibGVNZW1v
cnkuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNv
ZGUoKSBjb25zdAorICAgIENvZGVQdHI8dGFnPiBjb2RlKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2NvZGVQdHI7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4K
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8bmV3VGFnPiByZXRhZ2dlZENvZGUoKSBjb25zdAor
ICAgIENvZGVQdHI8bmV3VGFnPiByZXRhZ2dlZENvZGUoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fY29kZVB0ci50ZW1wbGF0ZSByZXRhZ2dlZDxuZXdUYWc+KCk7CiAgICAgfQpAQCAt
Mzc1LDcgKzIwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICp0aGlzID0gb3RoZXJDb2RlUmVmOwog
ICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IG1fY29kZVB0cjsKKyAgICBD
b2RlUHRyPHRhZz4gbV9jb2RlUHRyOwogICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBtX2V4ZWN1dGFibGVNZW1vcnk7CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWc+IGZyaWVuZCBjbGFz
cyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CkBAIC0zODUsMTMgKzIxOCwzIEBAIGJvb2wgc2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwogYm9vbCBzaG91bGREdW1wRGlzYXNzZW1i
bHlGb3IoV2FzbTo6Q29tcGlsYXRpb25Nb2RlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KLW5h
bWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7
Ci10ZW1wbGF0ZTxKU0M6OlB0clRhZyB0YWc+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+PiA6IEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRySGFzaDx0
YWc+IHsgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Ci10ZW1w
bGF0ZTxKU0M6OlB0clRhZyB0YWc+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPHRhZz4+IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8SlNDOjpNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8dGFnPj4geyB9OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCmluZGV4
IDQ4ODg1ODQ2MGI3NS4uZjI5NWViYTMzYThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNzAxLDkgKzM3MDEsOSBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHJlc3VsdFRhZywgUHRyVGFn
IGxvY2F0aW9uVGFnPgotICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+IHJlYWRDYWxs
VGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCisgICAgc3RhdGljIENv
ZGVQdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsPGxvY2F0aW9u
VGFnPiBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyPHJlc3VsdFRhZz4o
cmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKCk+KE1JUFNBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0
KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CisgICAgICAgIHJldHVybiBDb2RlUHRyPHJlc3VsdFRh
Zz4ocmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKCk+KE1JUFNBc3NlbWJsZXI6OnJlYWRDYWxsVGFy
Z2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFn
IHN0YXJ0VGFnLCBQdHJUYWcgZGVzdFRhZz4KQEAgLTM3NjcsMTMgKzM3NjcsMTMgQEAgcHVibGlj
OgogICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KICAgICBzdGF0
aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgTUlQU0Fz
c2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxs
LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgotICAgIHN0YXRpYyB2b2lk
IHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8
ZGVzdFRhZz4gZGVzdGluYXRpb24pCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxv
Y2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQog
ICAgIHsKLSAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlv
bigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgTUlQU0Fzc2Vt
Ymxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdnZWRQ
dHIoKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzc4NCwxMiArMzc4NCwxMiBAQCBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0
aW9uUHRyPHRhZz4gZnVuY3Rpb24pCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29k
ZSwgQ2FsbCBjYWxsLCBDb2RlUHRyPHRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBpZiAo
Y2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAgICBNSVBTQXNzZW1ibGVyOjps
aW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgICAgICAgICAgTUlQU0Fzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVs
LCBmdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIE1JUFNB
c3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBj
YWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKICAgICB9CiAKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUklTQ1Y2
NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclJJU0NW
NjQuaAppbmRleCBmYzk4ZjliNTIyMTQuLjMwOTE0ZTAzNmJiNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclJJU0NWNjQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUklTQ1Y2NC5oCkBA
IC0xNzI1LDkgKzE3MjUsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFn
IHJlc3VsdFRhZywgUHRyVGFnIGxvY2F0aW9uVGFnPgotICAgIHN0YXRpYyBGdW5jdGlvblB0cjxy
ZXN1bHRUYWc+IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNh
bGwpCisgICAgc3RhdGljIENvZGVQdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9j
YXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0
aW9uUHRyPHJlc3VsdFRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHJlc3VsdFRhZz4oQXNzZW1i
bGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSkpOworICAgICAgICByZXR1
cm4gQ29kZVB0cjxyZXN1bHRUYWc+KEFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRh
TG9jYXRpb24oKSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC0xNzY1
LDI0ICsxNzY1LDI0IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgotICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rp
b25QdHI8dGFnPiBmdW5jdGlvbikKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2Rl
LCBDYWxsIGNhbGwsIENvZGVQdHI8dGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmICgh
Y2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpCi0gICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtQ
b2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbCwg
ZnVuY3Rpb24udGFnZ2VkUHRyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBBc3NlbWJs
ZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udGVtcGxhdGUgcmV0YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzczxOb1B0clRhZz4oKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udGVtcGxhdGUgcmV0YWdnZWRQ
dHI8Tm9QdHJUYWc+KCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQ
dHJUYWcgZGVzdFRhZz4KICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25D
YWxsPGNhbGxUYWc+IGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9u
KQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMb2Nh
dGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgQXNzZW1i
bGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdn
ZWRQdHIoKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBk
ZXN0VGFnPgotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2Fs
bFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRhZz4gZGVzdGluYXRpb24pCisgICAgc3RhdGlj
IHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlUHRy
PGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsKLSAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICAgICAgQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMb2NhdGlv
bigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAgICAgSnVtcCBqdW1wKCkK
QEAgLTI4MzUsMTAgKzI4MzUsMTAgQEAgcHVibGljOgogICAgIENhbGwgY2FsbChSZWdpc3RlcklE
IHRhcmdldCwgUmVnaXN0ZXJJRCBjYWxsVGFnKSB7IFVOVVNFRF9QQVJBTShjYWxsVGFnKTsgcmV0
dXJuIGNhbGwodGFyZ2V0LCBOb1B0clRhZyk7IH0KICAgICBDYWxsIGNhbGwoQWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGNhbGxUYWcpIHsgVU5VU0VEX1BBUkFNKGNhbGxUYWcpOyByZXR1cm4g
Y2FsbChhZGRyZXNzLCBOb1B0clRhZyk7IH0KIAotICAgIHZvaWQgY2FsbE9wZXJhdGlvbihjb25z
dCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICB2b2lkIGNhbGxP
cGVyYXRpb24oY29uc3QgQ29kZVB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKICAgICB7
CiAgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGE+KCk7Ci0gICAgICAgIGxvYWRJbW1lZGlh
dGUoVHJ1c3RlZEltbVB0cihvcGVyYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIHRlbXAuZGF0
YSgpKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbi50YWdn
ZWRQdHIoKSksIHRlbXAuZGF0YSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuamFsckluc24oUklT
Q1Y2NFJlZ2lzdGVyczo6eDEsIHRlbXAuZGF0YSgpLCBJbW06Okk8MD4oKSk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmgKaW5kZXggYjQwMWUzYmZhNDgxLi4xOGZhZjIyYTNjOWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOTMxLDEzICszOTMxLDEzIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0
ZTxQdHJUYWcgdGFnPgogICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoVk1IYWx0KENvZGVMb2Nh
dGlvbkxhYmVsPHRhZz4gaW5zdHJ1Y3Rpb25TdGFydCkKICAgICB7Ci0gICAgICAgIFg4NkFzc2Vt
Ymxlcjo6cmVwbGFjZVdpdGhIbHQoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygp
KTsKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBsYWNlV2l0aEhsdChpbnN0cnVjdGlvblN0YXJ0
LnRhZ2dlZFB0cigpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgc3RhcnRUYWcsIFB0
clRhZyBkZXN0VGFnPgogICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRp
b25MYWJlbDxzdGFydFRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVz
dFRhZz4gZGVzdGluYXRpb24pCiAgICAgewotICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VX
aXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRo
SnVtcChpbnN0cnVjdGlvblN0YXJ0LnRhZ2dlZFB0cigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIo
KSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4SnVtcFJlcGxhY2VtZW50
U2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgKaW5kZXggMTNlYTU4NWI3NWM1Li4xZGE4MjVhYjNhMTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2XzY0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNDksOSArMjQ5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAotICAgIHZvaWQgY2FsbE9wZXJhdGlvbihjb25zdCBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKKyAgICB2b2lkIGNhbGxPcGVyYXRpb24oY29uc3Qg
Q29kZVB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKICAgICB7Ci0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihvcGVyYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIHNjcmF0Y2hSZWdp
c3RlcigpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbi50YWdnZWRQdHIo
KSksIHNjcmF0Y2hSZWdpc3RlcigpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuY2FsbChzY3JhdGNo
UmVnaXN0ZXIoKSk7CiAgICAgfQogCkBAIC0yMDE4LDkgKzIwMTgsOSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIAogICAgIHRlbXBsYXRlPFB0clRhZyByZXN1bHRUYWcsIFB0clRhZyBsb2NhdGlvblRhZz4K
LSAgICBzdGF0aWMgRnVuY3Rpb25QdHI8cmVzdWx0VGFnPiByZWFkQ2FsbFRhcmdldChDb2RlTG9j
YXRpb25DYWxsPGxvY2F0aW9uVGFnPiBjYWxsKQorICAgIHN0YXRpYyBDb2RlUHRyPHJlc3VsdFRh
Zz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRhZz4gY2FsbCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cjxyZXN1bHRUYWc+KFg4NkFzc2VtYmxlcjo6
cmVhZFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FM
TF9SMTEpLmRhdGFMb2NhdGlvbigpKSk7CisgICAgICAgIHJldHVybiBDb2RlUHRyPHJlc3VsdFRh
Zz4oWDg2QXNzZW1ibGVyOjpyZWFkUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC1S
RVBBVENIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCkpKTsKICAgICB9CiAKICAgICBi
b29sIGhhdmVTY3JhdGNoUmVnaXN0ZXJGb3JCbGluZGluZygpIHsgcmV0dXJuIG1fYWxsb3dTY3Jh
dGNoUmVnaXN0ZXI7IH0KQEAgLTIwNjYsMzEgKzIwNjYsMzEgQEAgcHVibGljOgogICAgIHRlbXBs
YXRlPFB0clRhZyB0YWc+CiAgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9Q
YXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiBpbnN0cnVj
dGlvblN0YXJ0LCBBZGRyZXNzLCB2b2lkKiBpbml0aWFsVmFsdWUpCiAgICAgewotICAgICAgICBY
ODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZxX2k2NHIoaW5zdHJ1Y3Rpb25TdGFydC5leGVj
dXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PGludHB0cl90Pihpbml0aWFsVmFsdWUp
LCBzX3NjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRv
X21vdnFfaTY0cihpbnN0cnVjdGlvblN0YXJ0LnRhZ2dlZFB0cigpLCByZWludGVycHJldF9jYXN0
PGludHB0cl90Pihpbml0aWFsVmFsdWUpLCBzX3NjcmF0Y2hSZWdpc3Rlcik7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KICAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4g
aW5zdHJ1Y3Rpb25TdGFydCwgQWRkcmVzcywgaW50MzJfdCBpbml0aWFsVmFsdWUpCiAgICAgewot
ICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZsX2kzMnIoaW5zdHJ1Y3Rpb25T
dGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCBpbml0aWFsVmFsdWUsIHNfc2NyYXRjaFJlZ2lzdGVy
KTsKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92bF9pMzJyKGluc3RydWN0
aW9uU3RhcnQudGFnZ2VkUHRyKCksIGluaXRpYWxWYWx1ZSwgc19zY3JhdGNoUmVnaXN0ZXIpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CiAgICAgc3RhdGljIHZvaWQgcmV2ZXJ0
SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFn
PiBpbnN0cnVjdGlvblN0YXJ0LCBSZWdpc3RlcklELCB2b2lkKiBpbml0aWFsVmFsdWUpCiAgICAg
ewotICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19tb3ZxX2k2NHIoaW5zdHJ1Y3Rp
b25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PGludHB0cl90Pihp
bml0aWFsVmFsdWUpLCBzX3NjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6
cmV2ZXJ0SnVtcFRvX21vdnFfaTY0cihpbnN0cnVjdGlvblN0YXJ0LnRhZ2dlZFB0cigpLCByZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihpbml0aWFsVmFsdWUpLCBzX3NjcmF0Y2hSZWdpc3Rlcik7
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgog
ICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2Fs
bCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCiAgICAgewotICAgICAg
ICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQo
LVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
Y2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLmRhdGFM
b2NhdGlvbigpLCBkZXN0aW5hdGlvbi50YWdnZWRQdHIoKSk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgotICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8ZGVzdFRh
Zz4gZGVzdGluYXRpb24pCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbDxjYWxsVGFnPiBjYWxsLCBDb2RlUHRyPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQogICAgIHsK
LSAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjEx
KS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24udGFnZ2VkUHRyKCkpOwogICAgIH0KIAogcHJp
dmF0ZToKQEAgLTIxMTAsMTQgKzIxMTAsMTQgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
TGlua0J1ZmZlcjsKIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgc3RhdGljIHZvaWQg
bGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9u
KQorICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgQ29kZVB0
cjx0YWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYgKCFjYWxsLmlzRmxhZ1NldChDYWxs
OjpOZWFyKSkKLSAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwgY2Fs
bC5tX2xhYmVsLmxhYmVsQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKSwgZnVuY3Rp
b24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtQ
b2ludGVyKGNvZGUsIGNhbGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9D
QUxMX1IxMSksIGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbC5p
c0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtKdW1w
KGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rp
b24udGFnZ2VkUHRyKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBYODZBc3NlbWJsZXI6
OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJl
bCwgZnVuY3Rpb24udGFnZ2VkUHRyKCkpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggYTIzM2E5MmUzOGQyLi5hZDI3NmRl
OTg1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1h
c20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjM4LDcgKzIzOCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFn
PiBjb21waWxlKEdlbmVyYXRvciYmIGdlbmVyYXRlKQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgogVCBpbnZva2UoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpTRW50cnlQdHJUYWc+JiBjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewotICAgIHZv
aWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4o
Y29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFk
ZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjb2RlLmNvZGUoKS50YWdn
ZWRQdHIoKSk7CiAgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0
PFQoKikoQXJndW1lbnRzLi4uKT4oZXhlY3V0YWJsZUFkZHJlc3MpOwogCiAjaWYgQ1BVKFJJU0NW
NjQpCkBAIC00OTIwLDcgKzQ5MjAsNyBAQCB2b2lkIHRlc3RQcm9iZU1vZGlmaWVzUHJvZ3JhbUNv
dW50ZXIoKQogICAgICAgICAvLyBXcml0ZSBleHBlY3RlZCB2YWx1ZXMgaW50byB0aGUgcmVnaXN0
ZXJzLgogICAgICAgICBqaXQucHJvYmVEZWJ1ZyhbJl0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0
KSB7CiAgICAgICAgICAgICBwcm9iZUNhbGxDb3VudCsrOwotICAgICAgICAgICAgY29udGV4dC5j
cHUucGMoKSA9IHJldGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnLCBKSVRQcm9iZVBDUHRyVGFnPihj
b250aW51YXRpb24uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgY29u
dGV4dC5jcHUucGMoKSA9IHJldGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnLCBKSVRQcm9iZVBDUHRy
VGFnPihjb250aW51YXRpb24uY29kZSgpLnRhZ2dlZFB0cigpKTsKICAgICAgICAgfSk7CiAKICAg
ICAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCmluZGV4IDgzYTgwZjc2ZGEx
Zi4uZmRkMDg3MWFkOWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlck1hY3Jvcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNy
b3MuY3BwCkBAIC02MDIsNyArNjAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdXNp
bmcgSnVtcFRhYmxlQ29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU1N3aXRjaFB0clRh
Zz47CisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBKdW1wVGFibGVDb2RlUHRyID0gQ29k
ZVB0cjxKU1N3aXRjaFB0clRhZz47CiAgICAgICAgICAgICAgICAgICAgICAgICBKdW1wVGFibGVD
b2RlUHRyKiBqdW1wVGFibGUgPSBzdGF0aWNfY2FzdDxKdW1wVGFibGVDb2RlUHRyKj4oCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnByb2MoKS5hZGREYXRhU2VjdGlvbihzaXpl
b2YoSnVtcFRhYmxlQ29kZVB0cikgKiB0YWJsZVNpemUpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJEaXNhc3NlbWJsZXIuY3BwCmluZGV4IDFhNTY0ZDc1YzAxNi4u
YzRhMWQ5Y2VmN2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckRpc2Fzc2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJE
aXNhc3NlbWJsZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgRGlzYXNzZW1ibGVyOjphZGRJ
bnN0KEluc3QqIGluc3QsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzdGFydCwgTWFjcm9Bc3NlbWJs
CiAKIHZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wKENvZGUmIGNvZGUsIFByaW50U3RyZWFtJiBvdXQs
IExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIGNvbnN0IGNoYXIqIGFpclByZWZpeCwgY29uc3QgY2hh
ciogYXNtUHJlZml4LCBjb25zdCBTY29wZWRMYW1iZGE8dm9pZChJbnN0Jik+JiBkb1RvRWFjaElu
c3QpCiB7Ci0gICAgdm9pZCogY29kZVN0YXJ0ID0gbGlua0J1ZmZlci5lbnRyeXBvaW50PERpc2Fz
c2VtYmx5UHRyVGFnPigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lkKiBj
b2RlU3RhcnQgPSBsaW5rQnVmZmVyLmVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50
YWdnZWRQdHIoKTsKICAgICB2b2lkKiBjb2RlRW5kID0gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihj
b2RlU3RhcnQpICsgIGxpbmtCdWZmZXIuc2l6ZSgpOwogCiAgICAgYXV0byBkdW1wQXNtUmFuZ2Ug
PSBbJl0gKENDYWxsSGVscGVyczo6TGFiZWwgc3RhcnRMYWJlbCwgQ0NhbGxIZWxwZXJzOjpMYWJl
bCBlbmRMYWJlbCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90
ZXN0YWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKaW5k
ZXggYjYzOGJlY2QzMzM5Li4wYjMxMjMyYzRmOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci90ZXN0YWlyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDcgKzk5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKEIzOjpQcm9jZWR1cmUmIHByb2MpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiBUIGludm9rZShjb25zdCBDb21waWxhdGlvbiYgY29k
ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVz
cyA9IHVudGFnQ0Z1bmN0aW9uUHRyPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjb2RlLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFn
Q0Z1bmN0aW9uUHRyPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjb2RlLmNvZGUoKS50YWdnZWRQdHIo
KSk7CiAgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKiko
QXJndW1lbnRzLi4uKT4oZXhlY3V0YWJsZUFkZHJlc3MpOwogICAgIHJldHVybiBmdW5jdGlvbihh
cmd1bWVudHMuLi4pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IDhmZWE4ZGZk
NThhYi4uM2ViNjRkYzc1NWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk3
LDkgKzE5Nyw5IEBAIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGVQ
cm9jKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLVQgaW52b2tlKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRDb21waWxhdGlvblB0clRhZz4gcHRyLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQor
VCBpbnZva2UoQ29kZVB0cjxKSVRDb21waWxhdGlvblB0clRhZz4gcHRyLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQogewotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVuY3Rp
b25QdHI8SklUQ29tcGlsYXRpb25QdHJUYWc+KHB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ0Z1bmN0aW9uUHRyPEpJVENvbXBpbGF0
aW9uUHRyVGFnPihwdHIudGFnZ2VkUHRyKCkpOwogICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRz
Li4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGV4ZWN1dGFibGVBZGRyZXNz
KTsKICAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfNi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzXzYuY3BwCmluZGV4IGExYzk3YTM2YjdlMC4uOTIwMzE5MTE0NzYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzYuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfNi5jcHAKQEAgLTE2NzcsOCArMTY3Nyw4IEBAIHZv
aWQgdGVzdEludGVycHJldGVyKCkKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgIFZlY3RvcjxCb3g8Q0NhbGxI
ZWxwZXJzOjpMYWJlbD4+IGxhYmVscyA9IHBhcmFtcy5zdWNjZXNzb3JMYWJlbHMoKTsKIAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTU3dpdGNoUHRyVGFnPioganVtcFRhYmxl
ID0gYml0d2lzZV9jYXN0PE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU1N3aXRjaFB0clRhZz4qPigK
LSAgICAgICAgICAgICAgICBwYXJhbXMucHJvYygpLmFkZERhdGFTZWN0aW9uKHNpemVvZihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNTd2l0Y2hQdHJUYWc+KSAqIGxhYmVscy5zaXplKCkpKTsKKyAg
ICAgICAgICAgIENvZGVQdHI8SlNTd2l0Y2hQdHJUYWc+KiBqdW1wVGFibGUgPSBiaXR3aXNlX2Nh
c3Q8Q29kZVB0cjxKU1N3aXRjaFB0clRhZz4qPigKKyAgICAgICAgICAgICAgICBwYXJhbXMucHJv
YygpLmFkZERhdGFTZWN0aW9uKHNpemVvZihDb2RlUHRyPEpTU3dpdGNoUHRyVGFnPikgKiBsYWJl
bHMuc2l6ZSgpKSk7CiAKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2Ny
YXRjaCgwKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2Uu
Y3BwCmluZGV4IGI4NjZmOTczMGIwMi4uYjE0MWVjNzJjZjQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjE1OCw3ICsyMTU4LDcgQEAg
dm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihn
bG9iYWxPYmplY3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDZWxs
VmFsdWUoYmFzZUZvckN1c3RvbSksCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodWlkKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCku
bV9jdXN0b21BY2Nlc3Nvci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcy0+YXM8R2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZT4oKS5tX2N1c3RvbUFjY2Vzc29yLnRhZ2dlZFB0cigpKSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPEdl
dFZhbHVlRnVuYz4oCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwKQEAgLTIxNzIsNyArMjE3Miw3IEBAIHZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlRm9yQ3VzdG9tKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywKICAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQoKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcy0+YXM8R2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZT4oKS5tX2N1c3RvbUFjY2Vzc29yLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzLT5h
czxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLm1fY3VzdG9tQWNjZXNzb3IudGFnZ2VkUHRyKCkp
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBqaXQuc2V0
dXBBcmd1bWVudHM8UHV0VmFsdWVGdW5jPigKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLApAQCAtMjE5MCw5ICsyMTkwLDkg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBz
dGF0ZSkKICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPSwgdGhpc10gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUQ2FnZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIg
fHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4odm1FbnRyeUN1c3RvbUdldHRlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ2FsbCwgdm1FbnRyeUN1c3Rv
bUdldHRlcik7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KHZtRW50cnlDdXN0b21TZXR0ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIHZtRW50cnlDdXN0
b21TZXR0ZXIpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZT4oKS5tX2N1c3RvbUFjY2Vzc29yKTsKICAgICAgICAgICAgIH0pOwpAQCAtMjI1Miw3ICsy
MjUyLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAg
ICAgICAgICAgICBhdXRvIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcp
OwogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKSk7
CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uQ2FsbCwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
c3BpbGxTdGF0ZSk7CiAKQEAgLTIzNDcsOSArMjM0Nyw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2Fs
bCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVy
dHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRo
SW5pdGlhbENhcGFjaXR5KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJl
IHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CkBA
IC0yMzU5LDkgKzIzNTksOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVy
YXRpb25QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0
aW9uUHRyVGFnPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dy
b3dQcm9wZXJ0eVN0b3JhZ2UpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAppbmRleCA4ZmI5MTgz
YWQxZjIuLjU2NGI3YjYzMDgyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwCkBAIC02NSw3ICs2NSw3
IEBAIHB1YmxpYzoKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBq
aXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBhdXRvIGZ1bmN0aW9uID0gbV9mdW5j
dGlvbjsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4oZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIGZ1bmN0aW9uKTsKICAgICAgICAg
fSk7CiAKICAgICAgICAgaml0LnNldHVwUmVzdWx0cyhtX3Jlc3VsdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCmluZGV4IDUwNDljNjMyMDc2
OC4uZTAyZjNiNDU5MTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKICAgICByZXR1cm4g
bV9kb25lTG9jYXRpb247CiB9CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0Nh
bGxlZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikK
K3ZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZShWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkp
OwogICAgIFJFTEVBU0VfQVNTRVJUKCEoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVlKSAm
IHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgIH0KIH0KIAotdm9pZCBDYWxsTGlua0luZm86
OnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBjb2RlUHRyKQordm9pZCBDYWxsTGlua0luZm86OnNldFNsb3dQYXRoQ2FsbERlc3Rp
bmF0aW9uKENvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKICAgICBtX3Nsb3dQYXRo
Q2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaAppbmRleCAzZjJiMTMyZjBlM2IuLjE4NmQzMzU2NDczNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaApAQCAt
MTk5LDggKzE5OSw4IEBAIHB1YmxpYzoKIAogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCi0gICAgdm9pZCBzZXRNb25vbW9ycGhpY0NhbGxl
ZShWTSYsIEpTQ2VsbCosIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVCbG9jayosIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Ci0gICAgdm9pZCBzZXRTbG93UGF0aENhbGxEZXN0
aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOworICAgIHZvaWQg
c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mLCBKU0NlbGwqLCBKU09iamVjdCogY2FsbGVlLCBDb2Rl
QmxvY2sqLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKKyAgICB2b2lkIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKENvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwogICAgIHZvaWQgY2xlYXJDYWxs
ZWUoKTsKICAgICBKU09iamVjdCogY2FsbGVlKCk7CiAKQEAgLTM4Myw3ICszODMsNyBAQCBwcm90
ZWN0ZWQ6CiAKICAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsg
MCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9mIGFyZ3Vt
ZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9y
IGFyZ3VtZW50cy4KICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Rv
bmVMb2NhdGlvbjsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9z
bG93UGF0aENhbGxEZXN0aW5hdGlvbjsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xv
d1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKICAgICAgICAgVW5p
b25UeXBlKCkKICAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0ciwgbnVsbHB0ciB9CkBAIC0z
OTEsNyArMzkxLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIHN0cnVjdCBEYXRhSUMgewogICAg
ICAgICAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsgLy8gVGhpcyBpcyB3ZWVrbHkgaGVsZC4g
QW5kIGNsZWFyZWQgd2hlbmV2ZXIgbV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiBpcyBjaGFu
Z2VkLgotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1f
bW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb247CisgICAgICAgICAgICBDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IG1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb247CiAgICAgICAgIH0gZGF0YUlDOwog
CiAgICAgICAgIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmNwcAppbmRleCAyNjliOThhMGRhYTQuLjFkMjk1MGRjYjI1ZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCkBAIC0yODYsNyAr
Mjg2LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhv
dXRFeGl0U2l0ZUZlZWRiYWNrKAogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJ
bmxpbmVhYmxlOiB7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3Rh
dHVzPiBjYWxsTGlua1N0YXR1czsKICAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBpbnRyaW5z
aWNGdW5jdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25QdHI8Q3VzdG9t
QWNjZXNzb3JQdHJUYWc+IGN1c3RvbUFjY2Vzc29yR2V0dGVyOworICAgICAgICAgICAgICAgIENv
ZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGN1c3RvbUFjY2Vzc29yR2V0dGVyOwogICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRy
aWJ1dGU7CiAgICAgICAgICAgICAgICAgYm9vbCBoYXZlRE9NQXR0cmlidXRlID0gZmFsc2U7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVZhcmlhbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5VmFyaWFudC5jcHAKaW5k
ZXggNTQ5NDhkYjVkMjdmLi4wOTY2ZDAxYzg4OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVZhcmlhbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeVZhcmlhbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotR2V0QnlWYXJpYW50OjpHZXRCeVZhcmlhbnQoQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzLCBK
U0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQ
dHJUYWc+IGN1c3RvbUFjY2Vzc29yR2V0dGVyLCBzdGQ6OnVuaXF1ZV9wdHI8RE9NQXR0cmlidXRl
QW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlKQorR2V0QnlWYXJpYW50OjpHZXRCeVZhcmlhbnQoQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxM
aW5rU3RhdHVzLCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwgQ29kZVB0cjxDdXN0b21B
Y2Nlc3NvclB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxET01B
dHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCiAgICAgOiBtX3N0cnVjdHVyZVNldChz
dHJ1Y3R1cmVTZXQpCiAgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBt
X29mZnNldChvZmZzZXQpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBHZXRCeVZhcmlhbnQ6OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
CiAgICAgaWYgKG1faW50cmluc2ljRnVuY3Rpb24pCiAgICAgICAgIG91dC5wcmludCgiLCBpbnRy
aW5zaWMgPSAiLCAqbV9pbnRyaW5zaWNGdW5jdGlvbik7CiAgICAgaWYgKG1fY3VzdG9tQWNjZXNz
b3JHZXR0ZXIpCi0gICAgICAgIG91dC5wcmludCgiLCBjdXN0b21hY2Nlc3NvcmdldHRlciA9ICIs
IFJhd1BvaW50ZXIobV9jdXN0b21BY2Nlc3NvckdldHRlci5leGVjdXRhYmxlQWRkcmVzcygpKSk7
CisgICAgICAgIG91dC5wcmludCgiLCBjdXN0b21hY2Nlc3NvcmdldHRlciA9ICIsIFJhd1BvaW50
ZXIobV9jdXN0b21BY2Nlc3NvckdldHRlci50YWdnZWRQdHIoKSkpOwogICAgIGlmIChtX2RvbUF0
dHJpYnV0ZSkgewogICAgICAgICBvdXQucHJpbnQoIiwgZG9tY2xhc3MgPSAiLCBSYXdQb2ludGVy
KG1fZG9tQXR0cmlidXRlLT5jbGFzc0luZm8pKTsKICAgICAgICAgaWYgKG1fZG9tQXR0cmlidXRl
LT5kb21KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlWYXJpYW50
LmgKaW5kZXggMDk5YWVkNzczNjM4Li4zZWQwN2Y2MDk5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVZhcmlhbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlWYXJpYW50LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGlj
OgogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCgpLAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0
dXM+ID0gbnVsbHB0ciwKICAgICAgICAgSlNGdW5jdGlvbiogPSBudWxscHRyLAotICAgICAgICBG
dW5jdGlvblB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIgPSBu
dWxscHRyLAorICAgICAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nl
c3NvckdldHRlciA9IG51bGxwdHIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxET01BdHRyaWJ1
dGVBbm5vdGF0aW9uPiA9IG51bGxwdHIpOwogCiAgICAgfkdldEJ5VmFyaWFudCgpOwpAQCAtNzAs
NyArNzAsNyBAQCBwdWJsaWM6CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIEpTRnVuY3Rpb24q
IGludHJpbnNpY0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbnRyaW5zaWNGdW5jdGlvbjsg
fQogICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY0Z1
bmN0aW9uID8gbV9pbnRyaW5zaWNGdW5jdGlvbi0+aW50cmluc2ljKCkgOiBOb0ludHJpbnNpYzsg
fQotICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nlc3Nvckdl
dHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3JHZXR0ZXI7IH0KKyAgICBDb2Rl
UHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nlc3NvckdldHRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fY3VzdG9tQWNjZXNzb3JHZXR0ZXI7IH0KICAgICBET01BdHRyaWJ1dGVBbm5vdGF0
aW9uKiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX2RvbUF0dHJpYnV0ZS5nZXQoKTsg
fQogCiAgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBvZmZzZXQoKSA9
PSBpbnZhbGlkT2Zmc2V0OyB9CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICBQcm9w
ZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
IG1fY2FsbExpbmtTdGF0dXM7CiAgICAgSlNGdW5jdGlvbiogbV9pbnRyaW5zaWNGdW5jdGlvbjsK
LSAgICBGdW5jdGlvblB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gbV9jdXN0b21BY2Nlc3Nvckdl
dHRlcjsKKyAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBtX2N1c3RvbUFjY2Vzc29y
R2V0dGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBtX2Rv
bUF0dHJpYnV0ZTsKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZS5jcHAKaW5kZXggMDE5NTkzNmE3YTA2Li4xNjlkMWIyMWU0MzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OSw3ICs0OSw3IEBAIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6Okdl
dHRlclNldHRlckFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlCiAK
IFJlZjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCiAgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBib29s
IHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBGdW5jdGlvblB0cjxDdXN0
b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tR2V0dGVyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2Us
CisgICAgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgQ29kZVB0
cjxDdXN0b21BY2Nlc3NvclB0clRhZz4gY3VzdG9tR2V0dGVyLCBKU09iamVjdCogY3VzdG9tU2xv
dEJhc2UsCiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRy
aWJ1dGUsIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4mJiBwcm90b3R5cGVBY2Nlc3NDaGFp
bikKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTYzLDE3ICs2MywxOSBAQCBSZWY8QWNjZXNz
Q2FzZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAogCiAgICAgYXV0byByZXN1bHQg
PSBhZG9wdFJlZigqbmV3IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBp
ZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCB2aWFQcm94eSwgYWRk
aXRpb25hbFNldCwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4p
KSk7CiAgICAgcmVzdWx0LT5tX2RvbUF0dHJpYnV0ZSA9IGRvbUF0dHJpYnV0ZTsKLSAgICByZXN1
bHQtPm1fY3VzdG9tQWNjZXNzb3IgPSBjdXN0b21HZXR0ZXIgPyBGdW5jdGlvblB0cjxDdXN0b21B
Y2Nlc3NvclB0clRhZz4oY3VzdG9tR2V0dGVyKSA6IG51bGxwdHI7CisgICAgaWYgKGN1c3RvbUdl
dHRlcikKKyAgICAgICAgcmVzdWx0LT5tX2N1c3RvbUFjY2Vzc29yID0gY3VzdG9tR2V0dGVyOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFJlZjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LCBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+JiYgcHJvdG90eXBlQWNj
ZXNzQ2hhaW4sIGJvb2wgdmlhUHJveHksIAotICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29y
UHRyVGFnPiBjdXN0b21TZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSkKKyAgICBDb2Rl
UHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21TZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21T
bG90QmFzZSkKIHsKICAgICBBU1NFUlQodHlwZSA9PSBTZXR0ZXIgfHwgdHlwZSA9PSBDdXN0b21W
YWx1ZVNldHRlciB8fCB0eXBlID09IEN1c3RvbUFjY2Vzc29yU2V0dGVyKTsKICAgICBhdXRvIHJl
c3VsdCA9IGFkb3B0UmVmKCpuZXcgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5
cGUsIGlkZW50aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5
LCBudWxscHRyLCBjdXN0b21TbG90QmFzZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikp
KTsKLSAgICByZXN1bHQtPm1fY3VzdG9tQWNjZXNzb3IgPSBjdXN0b21TZXR0ZXIgPyBGdW5jdGlv
blB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4oY3VzdG9tU2V0dGVyKSA6IG51bGxwdHI7CisgICAg
aWYgKGN1c3RvbVNldHRlcikKKyAgICAgICAgcmVzdWx0LT5tX2N1c3RvbUFjY2Vzc29yID0gY3Vz
dG9tU2V0dGVyOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExOCw3ICsxMjAsNyBAQCB2
b2lkIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQsIENv
bW1hUHJpbnRlciYgY29tbWEsIEluZAogICAgIG91dC5wcmludChjb21tYSwgImN1c3RvbVNsb3RC
YXNlID0gIiwgUmF3UG9pbnRlcihjdXN0b21TbG90QmFzZSgpKSk7CiAgICAgaWYgKGNhbGxMaW5r
SW5mbygpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsTGlua0luZm8gPSAiLCBSYXdQ
b2ludGVyKGNhbGxMaW5rSW5mbygpKSk7Ci0gICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9tQWNj
ZXNzb3IgPSAiLCBSYXdQb2ludGVyKG1fY3VzdG9tQWNjZXNzb3IuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOworICAgIG91dC5wcmludChjb21tYSwgImN1c3RvbUFjY2Vzc29yID0gIiwgUmF3UG9pbnRl
cihtX2N1c3RvbUFjY2Vzc29yLnRhZ2dlZFB0cigpKSk7CiB9CiAKIHZvaWQgR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRl
LCBjb25zdCBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklULCBHUFJSZWcgYmFzZUZvckdldEdQ
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZS5oCmluZGV4IDk2NTdiZjI2MDQzZC4uZDc2ZmM4ODk0MTQ0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmgKQEAgLTU1LDE5ICs1NSwxOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVmPEFj
Y2Vzc0Nhc2U+IGNyZWF0ZSgKICAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
LCBDYWNoZWFibGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKLSAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRj
aHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBGdW5jdGlvblB0cjxDdXN0b21BY2Nlc3NvclB0clRh
Zz4gY3VzdG9tR2V0dGVyLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIENvZGVQdHI8
Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGN1c3RvbUdldHRlciwKICAgICAgICAgSlNPYmplY3QqIGN1
c3RvbVNsb3RCYXNlLCBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBSZWZQ
dHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+JiYpOwogCiAgICAgc3RhdGljIFJlZjxBY2Nlc3NDYXNl
PiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwKICAgICAgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmLCBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+JiYsIGJvb2wg
dmlhUHJveHkgPSBmYWxzZSwKLSAgICAgICAgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJU
YWc+IGN1c3RvbVNldHRlciA9IG51bGxwdHIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51
bGxwdHIpOworICAgICAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21TZXR0
ZXIgPSBudWxscHRyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKIAogICAg
IHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mLCBDb21tYVByaW50ZXImLCBJbmRlbnRlciYpIGNv
bnN0IGZpbmFsOwogICAgIFJlZjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0IGZpbmFsOwogCiAg
ICAgfkdldHRlclNldHRlckFjY2Vzc0Nhc2UoKSBmaW5hbDsKIAotICAgIEZ1bmN0aW9uUHRyPEN1
c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3Vz
dG9tQWNjZXNzb3I7IH0KKyAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBjdXN0b21B
Y2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3I7IH0KIAogcHJpdmF0ZToK
ICAgICBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRk
aXRpb25hbFNldCwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBSZWZQdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+JiYpOwpAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJy
aWVyPEpTT2JqZWN0PiBtX2N1c3RvbVNsb3RCYXNlOwogICAgIE9wdGltaXppbmdDYWxsTGlua0lu
Zm8qIG1fY2FsbExpbmtJbmZvIHsgbnVsbHB0ciB9OwotICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFj
Y2Vzc29yUHRyVGFnPiBtX2N1c3RvbUFjY2Vzc29yOworICAgIENvZGVQdHI8Q3VzdG9tQWNjZXNz
b3JQdHJUYWc+IG1fY3VzdG9tQWNjZXNzb3I7CiAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1
dGVBbm5vdGF0aW9uPiBtX2RvbUF0dHJpYnV0ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKaW5kZXggOTZlNzMxYWVmOWY4
Li43NzkzMzk0OWI5ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoa2luZCAhPSBHZW5lcmF0ZWRGaW5hbENvZGUpOwogICAgIH0KICAgICAK
LSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KEtpbmQga2luZCwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlKQorICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1
bHQoS2luZCBraW5kLCBDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlKQogICAgICAg
ICA6IG1fa2luZChraW5kKQogICAgICAgICAsIG1fY29kZShjb2RlKQogICAgIHsKQEAgLTk2LDcg
Kzk2LDcgQEAgcHVibGljOgogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZDsgfQogICAgIAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91
dGluZVB0clRhZz4mIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICBjb25zdCBD
b2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiYgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZTsgfQogICAgIAogICAgIGJvb2wgbWFkZU5vQ2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZCA9PSBNYWRlTm9DaGFuZ2VzOyB9CiAgICAgYm9vbCBnYXZlVXAoKSBjb25zdCB7IHJldHVybiBt
X2tpbmQgPT0gR2F2ZVVwOyB9CkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgIAogcHJp
dmF0ZToKICAgICBLaW5kIG1fa2luZDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IG1fY29kZTsKKyAgICBDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiBtX2NvZGU7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJbmxpbmVXYXRjaHBvaW50U2V0JiwgU3Ry
aW5nRmlyZURldGFpbD4+IG1fd2F0Y2hwb2ludHNUb0ZpcmU7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAKaW5kZXggYjliMTJiYTRhYTg3Li4yOGEzODdm
NDA4YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNo
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAKQEAg
LTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCog
Y2FsbGVlKQogCiB2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCiAgICAgVk0mIHZtLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2Fs
bGVlQ29kZUJsb2NrLAotICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQorICAgIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHVi
KCkpOwogCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8pCiAgICAgICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5m
bywgdm0uZ2V0Q1RJTGlua0NhbGwoKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29k
ZVB0cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTT2JqZWN0KiBjYWxsZWUpCitDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCwgSlNPYmplY3QqIGNhbGxlZSkKIHsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgaWYgKCFjYWxsZWUpCkBAIC0xODQsMjYgKzE4NCwyNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4ganNUb1dhc21JQ0NvZGVQdHIoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraQogCiAjaWYgRU5BQkxFKEpJVCkKIAotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+IG9wZXJhdGlvbikKK3N0YXRpYyBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdP
cGVyYXRpb25XaXRoVmFsaWRhdGlvbihDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gb3BlcmF0aW9u
KQogewogICAgIEpTQ19SRVRVUk5fUkVUQUdHRURfT1BFUkFUSU9OX1dJVEhfVkFMSURBVElPTihv
cGVyYXRpb24pOwogfQogCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZXRh
Z0NhbGxUYXJnZXRXaXRoVmFsaWRhdGlvbihDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJU
YWc+IGNhbGwpCitzdGF0aWMgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnQ2FsbFRhcmdl
dFdpdGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCkK
IHsKICAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFSR0VUX1dJVEhfVkFMSURBVElPTihj
YWxsKTsKIH0KIAotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElD
Q2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQorc3RhdGljIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZWFkUHV0SUNDYWxsVGFyZ2V0
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCiAgICAgICAgIHJldHVybiByZXRhZ09wZXJh
dGlvbldpdGhWYWxpZGF0aW9uKHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbik7CiAgICAgQ29kZUxv
Y2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsID0gc3R1YkluZm8ubV9zbG93UGF0aENh
bGxMb2NhdGlvbjsKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKSB7Ci0gICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5r
UHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQ
dHJUYWc+KGNhbGwpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJU
YWc+IHRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRl
RnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAg
ICAgcmV0dXJuIHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oY29kZUJsb2NrLT52bSgpLmZ0
bFRodW5rcy0+a2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKSk7Cisg
ICAgICAgIENvZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpy
ZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7CisgICAgICAgIHJldHVybiByZXRh
Z09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKGNvZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZv
clNsb3dQYXRoQ2FsbFRodW5rKHRhcmdldCkuY2FsbFRhcmdldCgpKTsKICAgICB9CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwpAQCAtMjExLDE3ICsyMTAsMTYgQEAgc3RhdGlj
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3QKICAgICByZXR1cm4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRp
b24oY2FsbCk7CiB9CiAKLXZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCit2b2lkIGZ0bFRodW5r
QXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxK
U0ludGVybmFsUHRyVGFnPiBjYWxsLCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVl
RnVuY3Rpb24pCiB7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgaWYgKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgewogICAgICAgICBWTSYgdm0gPSBjb2RlQmxvY2st
PnZtKCk7CiAgICAgICAgIEZUTDo6VGh1bmtzJiB0aHVua3MgPSAqdm0uZnRsVGh1bmtzOwotICAg
ICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6
OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKLSAgICAgICAgYXV0byBzbG93
UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRl
RnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAg
ICAgQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVy
OjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7CiAgICAgICAgIEZUTDo6U2xv
d1BhdGhDYWxsS2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0
aFRodW5rKTsKICAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0
aW9uKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIHRodW5rcy5n
ZXRTbG93UGF0aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkudG9GdW5jdGlvblB0cigpKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIHRodW5rcy5nZXRTbG93UGF0
aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vs
c2UgLy8gRU5BQkxFKEZUTF9KSVQpCkBAIC0yMzAsNyArMjI4LDcgQEAgdm9pZCBmdGxUaHVua0F3
YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVMb2NhdGlvbkNhbGw8SlNJ
bnRlcm5hbFAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVl
RnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQg
cmVwYXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0
aW9uKQorc3RhdGljIHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4g
bmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsK
ICAgICAgICAgc3R1YkluZm8ubV9zbG93T3BlcmF0aW9uID0gbmV3Q2FsbGVlRnVuY3Rpb24ucmV0
YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpOwpAQCAtMjg0LDcgKzI4Miw3IEBAIEFMV0FZU19JTkxJ
TkUgc3RhdGljIHZvaWQgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQoVk0mIHZt
LCBTdHJ1Y3R1cmVTCiAgICAgfQogfQogCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQor
aW5saW5lIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQogewogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNh
c2UgR2V0QnlLaW5kOjpCeUlkOgpAQCAtMzA1LDcgKzMwMyw3IEBAIGlubGluZSBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oR2V0
QnlLaW5kCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotaW5saW5lIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKEdldEJ5
S2luZCBraW5kKQoraW5saW5lIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdl
dEJ5RnVuY3Rpb24oR2V0QnlLaW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAg
Y2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6CkBAIC01NDIsOSArNTQwLDEyIEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayoKICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlk
V2l0aFRoaXMgJiYgdHlwZSA9PSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBk
b21BdHRyaWJ1dGUpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKIAorICAgICAgICAgICAgICAgICAgICBDb2RlUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPiBj
dXN0b21BY2Nlc3NvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yID0gc2xvdC5j
dXN0b21HZXR0ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIHR5cGUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwg
bG9hZFRhcmdldEZyb21Qcm94eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Qud2F0Y2hw
b2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBGdW5jdGlvblB0cjxDdXN0b21B
Y2Nlc3NvclB0clRhZz4oc2xvdC5jdXN0b21HZXR0ZXIoKSkgOiBudWxscHRyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIGN1c3RvbUFjY2Vzc29yLAogICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmIHNsb3Quc2xv
dEJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LnNsb3RCYXNlKCkgOiBudWxscHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgZG9tQXR0cmlidXRlLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0No
YWluKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzE3LDcgKzcxOCw3IEBAIHZvaWQgcmVwYXRj
aEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTCiAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mbywgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKIH0KIAotc3RhdGljIEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2lu
ZCkKK3N0YXRpYyBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtp
bmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgewogICAgIGNh
c2UgUHV0QnlLaW5kOjpCeUlkOiB7CkBAIC03NjQsNyArNzY1LDcgQEAgc3RhdGljIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihjb25z
dCBQdXRQcm8KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2lu
ZCkKK3N0YXRpYyBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5n
UHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRC
eUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgewogICAg
IGNhc2UgUHV0QnlLaW5kOjpCeUlkOgpAQCAtMTIwOSw3ICsxMjEwLDcgQEAgdm9pZCByZXBhdGNo
RGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIERlbGV0ZVAKICAgICB9CiB9CiAKLWlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQoraW5s
aW5lIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVu
Y3Rpb24oSW5CeUtpbmQga2luZCkKIHsKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIElu
QnlLaW5kOjpCeUlkOgpAQCAtMTIyMiw3ICsxMjIzLDcgQEAgaW5saW5lIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nSW5CeUZ1bmN0aW9uKEluQnlLaW5k
IGsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1pbmxpbmUgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5C
eUtpbmQga2luZCkKK2lubGluZSBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVH
ZW5lcmljSW5CeUZ1bmN0aW9uKEluQnlLaW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7
CiAgICAgY2FzZSBJbkJ5S2luZDo6QnlJZDoKQEAgLTE1NzUsNyArMTU3Niw3IEBAIHZvaWQgcmVw
YXRjaEluc3RhbmNlT2YoCiAKIHZvaWQgbGlua0RpcmVjdENhbGwoCiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIE9wdGltaXppbmdDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2Nr
KiBjYWxsZWVDb2RlQmxvY2ssCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHIpCisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewogICAg
IEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAgICAgCkBAIC0xNjE4LDcgKzE2MTksNyBA
QCBzdGF0aWMgdm9pZCBsaW5rVmlydHVhbEZvcihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSQogbmFtZXNwYWNlIHsKIHN0cnVjdCBDYWxsVG9Db2Rl
UHRyIHsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNvZGVQdHI7CiB9OwogfSAvLyBhbm5vbnltb3VzIG5hbWVzcGFjZQogCkBAIC0xODMyLDcgKzE4
MzMsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbAogICAgICAgICBQb2x5bW9ycGhpY0NhbGxD
YXNlJiBjYWxsQ2FzZSA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdOwogICAgICAgICBDYWxsVmFyaWFu
dCB2YXJpYW50ID0gY2FsbENhc2UudmFyaWFudCgpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CisgICAgICAgIENvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgp
KSB7CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVG
b3JDYWxsKCkpOwogICAgICAgICAgICAgCkBAIC0xOTE2LDcgKzE5MTcsNyBAQCB2b2lkIGxpbmtQ
b2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENhbAogICAgIC8vIDMuIElmIHdlJ3JlIGEgZGF0YSBJQywgdGhlbiB0aGUgcmV0
dXJuIGFkZHJlc3MgaXMgYWxyZWFkeSBjb3JyZWN0CiAgICAgLy8gVGh1cyB3ZSBuZWVkIHRvIHB1
dCBpdCBmb3IgdGhlIHNsb3ctcGF0aCBjYWxsLgogICAgIGlmICghaXNEYXRhSUMpIHsKLSAgICAg
ICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8u
ZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVn
VDQpOworICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZFB0cigpKSwgR1BSSW5mbzo6cmVnVDQp
OwogICAgICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUklu
Zm86OnJlZ1Q0KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBGSVhNRTogV2UgYXJlIG5vdCBk
b2luZyBhIHJlYWwgdGFpbC1jYWxsIGluIHRoaXMgY2FzZS4gV2UgbGVhdmUgc3RhY2sgZW50cmll
cyBpbiB0aGUgY2FsbGVyLCBhbmQgd2UgYXJlIG5vdCBydW5uaW5nIHByZXBhcmVGb3JUYWlsQ2Fs
bCwgdGh1cywKQEAgLTE5MjksNyArMTkzMCw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKICNlbmRpZgogICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5m
by5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHZtLmdldENUSVN0dWIoSklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVH
ZW5lcmF0b3IpLmNvZGUoKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpy
ZWdUNCk7CisgICAgICAgICAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cih2bS5nZXRDVElTdHViKEpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKS5j
b2RlKCkudW50YWdnZWRQdHIoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAgICAgICAgICAgICBz
dHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTkzOCw3ICsxOTM5LDcgQEAg
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICAgICAgICAgIC8vIFdoaWxlIEJhc2VsaW5lIC8g
TExJbnQgc2hhcmVzIEJhc2VsaW5lQ2FsbExpbmtJbmZvLCBPcHRpbWl6aW5nQ2FsbExpbmtJbmZv
IGlzIGV4Y2x1c2l2ZWx5IHVzZWQgZm9yIG9uZSBKSVQgY29kZS4KICAgICAgICAgICAgIC8vIFRo
dXMsIHdlIGNhbiBzYWZlbHkgdXNlIGRvbmVMb2NhdGlvbi4KICAgICAgICAgICAgIGlmIChjYWxs
TGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50
YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICAgICAg
ICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZv
LmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkUHRyKCkpLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgICAg
ICAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZv
OjpyZWdUNCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTYsNyAr
MTk1Nyw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAgICAgCiAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbENhc2VzLnNpemUoKSA9PSBjYWxscy5zaXplKCkpOwogICAgIGZvciAoQ2FsbFRvQ29k
ZVB0ciBjYWxsVG9Db2RlUHRyIDogY2FsbHMpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFRvQ29kZVB0ci5jYWxsLCBjYWxsVG9Db2RlUHRyLmNvZGVQdHIudG9GdW5jdGlvblB0cigpKTsK
KyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIGNhbGxUb0NvZGVQ
dHIuY29kZVB0cik7CiAKICAgICBpZiAoIWRvbmUuZW1wdHkoKSkgewogICAgICAgICBBU1NFUlQo
IWlzRGF0YUlDKTsKQEAgLTE5NjgsNyArMTk2OSw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2Fs
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2Fs
CiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAogICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2Nr
LCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICAgICAiUG9seW1v
cnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKLSAg
ICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygq
Y2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS5leGVj
dXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNz
ZW1ibHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZv
LmRvbmVMb2NhdGlvbigpLnRhZ2dlZFB0cigpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhs
aXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLAogICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCiAgICAgICAgIFdURk1v
dmUoZmFzdENvdW50cykpKTsKQEAgLTIwMDgsMTEgKzIwMDksMTEgQEAgdm9pZCByZXNldEdldEJ5
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5
S2luZCBraW4KIAogdm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQogewotICAgIEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgQ29kZVB0cjxDRnVuY3Rp
b25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOwogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNh
c2UgUHV0QnlLaW5kOjpCeUlkOiB7CiAgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0
eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwotICAgICAgICBGdW5j
dGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25U
eXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9j
aywgc3R1YkluZm8pLnRhZ2dlZFB0cigpKTsKICAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwogICAgICAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCkBAIC0y
MDMxLDcgKzIwMzIsNyBAQCB2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbgogICAgIH0KICAgICBjYXNl
IFB1dEJ5S2luZDo6QnlWYWw6IHsKICAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5
cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOwotICAgICAgICBGdW5jdGlvblR5
cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihy
ZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1
YkluZm8pLnRhZ2dlZFB0cigpKTsKICAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKICAgICAgICAgZWxzZSBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVy
aWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0
Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmgKaW5kZXggYmFh
NzRkOTY2ZWZlLi44ZTI0MWVlMzBhNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZXBhdGNoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1JlcGF0Y2guaApAQCAtNzEsOCArNzEsOCBAQCB2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQo
SlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZQogdm9p
ZCByZXBhdGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBK
U09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lk
IHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09i
amVjdCosIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CiB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3YXNG
b3VuZCk7Ci12b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlu
a0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4pOwotdm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBPcHRp
bWl6aW5nQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+KTsKK3ZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSos
IENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIENvZGVQdHI8SlNF
bnRyeVB0clRhZz4pOwordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBPcHRpbWl6aW5n
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7CiB2b2lk
IGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1bmxpbmtDYWxs
KFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7CkBAIC04NCw4
ICs4NCw3IEBAIHZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKIHZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJik7CiB2b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9j
ayosIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4sIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpT
T2JqZWN0KiBjYWxsZWUpOwotCit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxv
Y2sqLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+LCBDb2RlUHRyPENGdW5jdGlv
blB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOworQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1Rv
V2FzbUlDQ29kZVB0cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdCogY2FsbGVlKTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVwYXRjaElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZXBhdGNoSW5saW5lcy5oCmluZGV4IDFjYzdmZjQzYWU5Ni4uNjEwMDk5NDEwNGM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSwx
OSArNDksMTkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUKICAgICAgICAgICAgIERpc2FsbG93
R0MgZGlzYWxsb3dHQzsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAg
ICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLnRhZ2dlZFB0cigpLAogICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAg
ICAgICBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICBMTEludDo6Z2V0SG9zdENhbGxSZXR1
cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkudGFnZ2VkUHRyKCksCiAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxN
b2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAK
ICAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwog
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVu
Y3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOwogICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KAotICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICB2bS5nZXRDVElU
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkudGFnZ2VkUHRyKCksCiAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICB9CiAK
QEAgLTc3LDE3ICs3NywxNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RD
YWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZQogICAgICAgICBEaXNh
bGxvd0dDIGRpc2FsbG93R0M7CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAg
dm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoKCkuY29kZSgpLnRhZ2dlZFB0cigpLAogICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAKLSAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9p
bnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
S2VlcFRoZUZyYW1lKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoTExJbnQ6OmdldEhv
c3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLnRhZ2dlZFB0cigpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICB9CiAKICAgICBBU1NFUlQoY29u
c3RydWN0RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKICAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9i
YWxPYmplY3QsIGNhbGxlZSkpOwogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgIHZt
LmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGgoKS5jb2RlKCkudGFnZ2VkUHRyKCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEtlZXBUaGVGcmFtZSkpOwogfQogCkBAIC0xMDYsNyArMTA2LDcgQEAgQUxXQVlTX0lOTElORSBT
bG93UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2Jh
bE9iamVjdCoKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlv
bihjYWxsZWVBc1ZhbHVlKTsKICAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1
bmN0aW9uKj4oY2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRy
YW1wb2xpbmVGb3Ioa2luZCk7CisgICAgICAgICAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNv
ZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhY29kZVB0cik7CiAKICAgICAgICAgICAgIGlmICgh
Y2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQpAQCAtMTE0LDcgKzExNCw3IEBAIEFMV0FZU19JTkxJ
TkUgU2xvd1BhdGhSZXR1cm5UeXBlIGxpbmtGb3IoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNH
bG9iYWxPYmplY3QqCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbGlua01vbm9t
b3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVy
bmFsRnVuY3Rpb24sIGNvZGVQdHIpOwogCi0gICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQg
PSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICB2b2lkKiBsaW5rZWRU
YXJnZXQgPSBjb2RlUHRyLnRhZ2dlZFB0cigpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+
Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJh
bWUpKTsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
aGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwg
Y2FsbExpbmtJbmZvKSk7CkBAIC0xMjQsNyArMTI0LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0
aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVj
dCoKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKICAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwogCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CisgICAgQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVs
bHB0cjsKIAogICAgIERlZmVyVHJhcHMgZGVmZXJUcmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRp
c29uIGFueSBjb2RlIHVudGlsIGFmdGVyIHdlIGxpbmsgdGhlIGNhbGwuCkBAIC0xMzcsNyArMTM3
LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUq
IGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCoKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihl
eGVjdXRhYmxlKTsKIAogICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgp
IHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
ICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aCgpLmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkp
OwogICAgICAgICB9OwogCkBAIC0xNjYsNyArMTY2LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0
aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVj
dCoKICAgICBlbHNlCiAgICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1l
LCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CiAKLSAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8g
UmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
Y29kZVB0ci50YWdnZWRQdHIoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZv
LT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVG
cmFtZSkpOwogfQogCiBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9y
V2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCkKQEAgLTE4Miw5ICsxODIsOSBAQCBBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0
dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgog
ICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgewogICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0u
Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CisgICAgICAgICAgICBD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9u
VHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxs
TW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgICAg
IHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci50YWdnZWRQdHIoKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1
c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxl
ZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKICAgICB9CkBAIC0xOTksNyAr
MTk5LDcgQEAgQUxXQVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhG
dW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSk7CiAKICAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7
Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAg
ICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGgoKS5jb2RlKCkudGFnZ2VkUHRyKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsK
ICAgICAgICAgfTsKIApAQCAtMjE2LDcgKzIxNiw3IEBAIEFMV0FZU19JTkxJTkUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgd2FzbSBJQy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzM5CiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChl
eGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLnRhZ2dl
ZFB0cigpLAogICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNh
bGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1l
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCmluZGV4IGQyOTI0MTI2NWE4Zi4uYTE1ZDM5ZjY1NTBmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKQEAgLTQxMSw3ICs0MTEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnNldENhY2hlVHlwZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJgogICAgIG1fY2Fj
aGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCi1zdGF0aWMgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPiBzbG93T3BlcmF0aW9uRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oY29uc3Qg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3N0YXRpYyBDb2Rl
UHRyPE9wZXJhdGlvblB0clRhZz4gc2xvd09wZXJhdGlvbkZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKGNvbnN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8p
CiB7CiAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKICAgICBjYXNl
IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAppbmRleCBkMjQwZmEyNWRlODguLmRkNGU2Yzg4
MjZhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKQEAgLTM5MiwxMCArMzkyLDEwIEBAIHB1YmxpYzoKIAogICAgIHVuaW9uIHsK
ICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoQ2Fs
bExvY2F0aW9uOwotICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fc2xvd09w
ZXJhdGlvbjsKKyAgICAgICAgQ29kZVB0cjxPcGVyYXRpb25QdHJUYWc+IG1fc2xvd09wZXJhdGlv
bjsKICAgICB9OwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBtX2NvZGVQdHI7CisgICAgQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2Rl
UHRyOwogCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCmluZGV4IDRkZDIwNDU5NzkzOS4uYTky
NTYzN2I1MmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fz
c2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJs
ZXIuY3BwCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3Nl
bWJseShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIExpbmtCdWYKICAgICAg
ICAgcHJlZml4QnVmZmVyW2kgKyBwcmVmaXhMZW5ndGhdID0gJyAnOwogICAgIHByZWZpeEJ1ZmZl
cltwcmVmaXhMZW5ndGggKyBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlXSA9IDA7CiAgICAgCi0gICAg
dm9pZCogY29kZVN0YXJ0ID0gbGlua0J1ZmZlci5lbnRyeXBvaW50PERpc2Fzc2VtYmx5UHRyVGFn
PigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lkKiBjb2RlU3RhcnQgPSBs
aW5rQnVmZmVyLmVudHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50YWdnZWRQdHIoKTsK
ICAgICB2b2lkKiBjb2RlRW5kID0gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb2RlU3RhcnQpICsg
IGxpbmtCdWZmZXIuc2l6ZSgpOwogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RGlzYXNzZW1ibHlQ
dHJUYWc+IHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPERpc2Fzc2VtYmx5UHRyVGFnPihw
cmV2aW91c0xhYmVsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCBjYTU2
NmQzYTQ4NGUuLjVjZjliMDA4YjdjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aApAQCAtMTA3OCw3ICsxMDc4LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gKm1fdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2luZGV4XTsg
fQogICAgIFN0cmluZ0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKHVuc2lnbmVkIGlu
ZGV4KSB7IHJldHVybiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaW5kZXhdOyB9CiAKLSAgICB2
b2lkIGFwcGVuZENhdGNoRW50cnlwb2ludChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtYWNoaW5lQ29kZSwg
VmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0cykKKyAgICB2b2lkIGFwcGVuZENh
dGNoRW50cnlwb2ludChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIENvZGVQdHI8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGUsIFZlY3RvcjxGbHVzaEZvcm1hdD4mJiBhcmd1
bWVudEZvcm1hdHMpCiAgICAgewogICAgICAgICBtX2NhdGNoRW50cnlwb2ludHMuYXBwZW5kKENh
dGNoRW50cnlwb2ludERhdGEgeyBtYWNoaW5lQ29kZSwgRml4ZWRWZWN0b3I8Rmx1c2hGb3JtYXQ+
KFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSksIGJ5dGVjb2RlSW5kZXggfSk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCBjYmQ2MjIx
MTBkMzQuLjVhOWI4YWI0ODEwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5r
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgICAgIEFTU0VSVChtX2V4aXRTaXRlTGFiZWxz
LnNpemUoKSA9PSBtX29zckV4aXQuc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZXhpdFNpdGVMYWJlbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZlY3Rv
cjxMYWJlbD4mIGxhYmVscyA9IG1fZXhpdFNpdGVMYWJlbHNbaV07Ci0gICAgICAgICAgICBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBhZGRyZXNzZXM7Cisg
ICAgICAgICAgICBWZWN0b3I8Q29kZVB0cjxKU0ludGVybmFsUHRyVGFnPj4gYWRkcmVzc2VzOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGxhYmVscy5zaXplKCk7ICsraikK
ICAgICAgICAgICAgICAgICBhZGRyZXNzZXMuYXBwZW5kKGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihsYWJlbHNbal0pKTsKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGls
YXRpb24oKS0+YWRkT1NSRXhpdFNpdGUoYWRkcmVzc2VzKTsKQEAgLTUzNSwxMSArNTM1LDExIEBA
IHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgbV9zcGVjdWxhdGl2ZS0+
bGlua09TUkVudHJpZXMoKmxpbmtCdWZmZXIpOwogICAgIAogICAgIGlmIChyZXF1aXJlc0FyaXR5
Rml4dXApCi0gICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIHZtKCkuZ2V0
Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5jb2RlKCkudG9GdW5jdGlvblB0cigpKTsKKyAg
ICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgdm0oKS5nZXRDVElTdHViKGFy
aXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZl
cik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2sgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KGFyaXR5Q2hlY2sp
OworICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVy
LT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KGFyaXR5Q2hlY2spOwogCiAgICAgbV9qaXRDb2Rl
LT5pbml0aWFsaXplQ29kZVJlZkZvckRGRygKICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKmxp
bmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5n
KENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpERkdKSVQpKS5kYXRh
KCkpLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCmluZGV4IDIw
MzhjYzNiYTk1Yy4uNDQxNDlhOTMzOGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCkBAIC02NiwxNCArNjYsMTQgQEAgc3RydWN0IE9TUkV4aXQ7CiAvLyBF
dmVyeSBDYWxsTGlua1JlY29yZCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY2FsbCBpbnN0
cnVjdGlvbiAmIHRoZSBmdW5jdGlvbgogLy8gdGhhdCBpdCBuZWVkcyB0byBiZSBsaW5rZWQgdG8u
CiBzdHJ1Y3QgQ2FsbExpbmtSZWNvcmQgewotICAgIENhbGxMaW5rUmVjb3JkKE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pCisg
ICAgQ2FsbExpbmtSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgQ29kZVB0cjxPcGVy
YXRpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAgICAgICAs
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgewogICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIG1fY2FsbDsKLSAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG1fZnVuY3Rp
b247CisgICAgQ29kZVB0cjxPcGVyYXRpb25QdHJUYWc+IG1fZnVuY3Rpb247CiB9OwogCiAvLyA9
PT0gSklUQ29tcGlsZXIgPT09CkBAIC0xNDEsMTQgKzE0MSwxNCBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRp
b24gY2hlY2suCi0gICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24pCisgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IENvZGVQdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxs
ID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlu
a1JlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4o
KSkpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KIAotICAgIENhbGwgYXBw
ZW5kT3BlcmF0aW9uQ2FsbChjb25zdCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGZ1bmN0
aW9uKQorICAgIENhbGwgYXBwZW5kT3BlcmF0aW9uQ2FsbChjb25zdCBDb2RlUHRyPE9wZXJhdGlv
blB0clRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNh
bGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNv
cmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRGaW5hbGl6ZXIuY3BwCmluZGV4IGNjZDc1Y2ZmMWI4Ni4uZWE1ZWM5OTk0NjNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCkBAIC0z
Niw3ICszNiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotSklURmlu
YWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxhbiYgcGxhbiwgUmVmPEpJVENvZGU+JiYgaml0Q29kZSwg
c3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKK0pJVEZpbmFsaXplcjo6SklURmlu
YWxpemVyKFBsYW4mIHBsYW4sIFJlZjxKSVRDb2RlPiYmIGppdENvZGUsIHN0ZDo6dW5pcXVlX3B0
cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrKQogICAgIDogRmluYWxpemVyKHBsYW4pCiAgICAgLCBtX2ppdENvZGUoV1RGTW92ZShq
aXRDb2RlKSkKICAgICAsIG1fbGlua0J1ZmZlcihXVEZNb3ZlKGxpbmtCdWZmZXIpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmgKaW5kZXggZGI0ZTJiMTUzYzlm
Li44ZjljODNjMWNlMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklURmluYWxpemVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5h
bGl6ZXIuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKIGNsYXNzIEpJVEZpbmFsaXplciBmaW5hbCA6IHB1YmxpYyBGaW5hbGl6ZXIgewogcHVibGlj
OgotICAgIEpJVEZpbmFsaXplcihQbGFuJiwgUmVmPEpJVENvZGU+JiYsIHN0ZDo6dW5pcXVlX3B0
cjxMaW5rQnVmZmVyPiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhB
cml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPjo6RW1wdHlWYWx1ZSkpOworICAgIEpJVEZpbmFs
aXplcihQbGFuJiwgUmVmPEpJVENvZGU+JiYsIHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPiwg
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IENvZGVQdHI8SlNFbnRyeVB0
clRhZz4oQ29kZVB0cjxKU0VudHJ5UHRyVGFnPjo6RW1wdHlWYWx1ZSkpOwogICAgIH5KSVRGaW5h
bGl6ZXIoKSBmaW5hbDsKICAgICAKICAgICBzaXplX3QgY29kZVNpemUoKSBmaW5hbDsKQEAgLTQ1
LDcgKzQ1LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBSZWY8SklUQ29kZT4gbV9qaXRDb2RlOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPiBtX2xpbmtCdWZmZXI7Ci0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fd2l0aEFyaXR5Q2hlY2s7CisgICAgQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNrOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCBmOWZmNTA2
NThlOTMuLjQ2MTQ0N2IxNjJlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAg
LTI3OSw3ICsyNzksNyBAQCBzdHJ1Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKIH07CiAKIHN0cnVjdCBD
YWxsRE9NR2V0dGVyRGF0YSB7Ci0gICAgRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+
IGN1c3RvbUFjY2Vzc29yR2V0dGVyOworICAgIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+
IGN1c3RvbUFjY2Vzc29yR2V0dGVyOwogICAgIGNvbnN0IERPTUpJVDo6R2V0dGVyU2V0dGVyKiBk
b21KSVQgeyBudWxscHRyIH07CiAgICAgRE9NSklUOjpDYWxsRE9NR2V0dGVyU25pcHBldCogc25p
cHBldCB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyIHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCA4MDJiOTIzOWFl
NWEuLmM3MGY2Y2IyZTIzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAogdm9pZCBPU1JFbnRyeURhdGE6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KG1fYnl0ZWNvZGVJbmRl
eCwgIiwgbWFjaGluZSBjb2RlID0gIiwgUmF3UG9pbnRlcihtX21hY2hpbmVDb2RlLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICBvdXQucHJpbnQobV9ieXRlY29kZUluZGV4LCAiLCBtYWNoaW5l
IGNvZGUgPSAiLCBSYXdQb2ludGVyKG1fbWFjaGluZUNvZGUudGFnZ2VkUHRyKCkpKTsKICAgICBv
dXQucHJpbnQoIiwgc3RhY2sgcnVsZXMgPSBbIik7CiAgICAgCiAgICAgYXV0byBwcmludE9wZXJh
bmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKQEAgLTI1Miw4ICsyNTIsOCBAQCB2b2lk
KiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjbwogICAgIAogICAgICpiaXR3aXNlX2Nhc3Q8c2l6ZV90Kj4oc2Ny
YXRjaCArIDApID0gZnJhbWVTaXplOwogICAgIAotICAgIHZvaWQqIHRhcmdldFBDID0gZW50cnkt
Pm1fbWFjaGluZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChj
b2RlQmxvY2stPmppdENvZGUoKS0+Y29udGFpbnMoZW50cnktPm1fbWFjaGluZUNvZGUudW50YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgdm9pZCogdGFyZ2V0UEMgPSBlbnRyeS0+bV9t
YWNoaW5lQ29kZS50YWdnZWRQdHIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2stPmpp
dENvZGUoKS0+Y29udGFpbnMoZW50cnktPm1fbWFjaGluZUNvZGUudW50YWdnZWRQdHIoKSkpOwog
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBPU1IgdXNpbmcgdGFy
Z2V0IFBDICIsIFJhd1BvaW50ZXIodGFyZ2V0UEMpKTsKICAgICBSRUxFQVNFX0FTU0VSVCh0YXJn
ZXRQQyk7CiAgICAgKmJpdHdpc2VfY2FzdDx2b2lkKio+KHNjcmF0Y2ggKyAxKSA9IHRhZ0NvZGVQ
dHJXaXRoU3RhY2tQb2ludGVyRm9ySklUQ2FsbCh1bnRhZ0NvZGVQdHI8T1NSRW50cnlQdHJUYWc+
KHRhcmdldFBDKSwgY2FsbEZyYW1lKTsKQEAgLTM0NCw3ICszNDQsNyBAQCB2b2lkKiBwcmVwYXJl
T1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjbwogICAgIHJldHVybiBzY3JhdGNoOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgQ29kZUJs
b2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK0Nv
ZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgQ29k
ZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
IHsKICAgICBBU1NFUlQob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
REZHSklUIHx8IG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJ
VCk7CiAgICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+aXNTdGlsbFZhbGlkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5o
CmluZGV4IGI5YmUxOTc5ZTVjMC4uZDc4NDVlMzFjZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5oCkBAIC03NSw3ICs3NSw3IEBAIGlubGluZSBCeXRlY29kZUluZGV4
IGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEp
CiBzdHJ1Y3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSB7CiAgICAgLy8gV2UgdXNlIHRoaXMgd2hlbiBk
b2luZyBPU1IgZW50cnkgYXQgY2F0Y2guIFdlIHByb3ZlIHRoZSBhcmd1bWVudHMKICAgICAvLyBh
cmUgb2YgdGhlIGV4cGVjdGVkIHR5cGUgYmVmb3JlIGVudGVyaW5nIGF0IGEgY2F0Y2ggYmxvY2su
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1hY2hp
bmVDb2RlOworICAgIENvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGU7
CiAgICAgRml4ZWRWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0czsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiB9OwpAQCAtODUsOSArODUsOSBAQCBzdHJ1Y3QgQ2F0
Y2hFbnRyeXBvaW50RGF0YSB7CiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mLCBDYWxsRnJhbWUq
LCBDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKIAogLy8gSWYgbnVsbCBpcyByZXR1cm5lZCwg
d2UgY2FuJ3QgT1NSIGVudGVyLiBJZiBpdCdzIG5vdCBudWxsLCBpdCdzIHRoZSBQQyB0byBqdW1w
IHRvLgotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBh
cmVDYXRjaE9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jaywgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgpOworQ29k
ZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYsIENh
bGxGcmFtZSosIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIENvZGVCbG9jayogb3B0aW1p
emVkQ29kZUJsb2NrLCBCeXRlY29kZUluZGV4KTsKICNlbHNlCi1pbmxpbmUgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVPU1JFbnRyeShWTSYsIENh
bGxGcmFtZSosIENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpIHsgcmV0dXJuIG51bGxwdHI7IH0K
K2lubGluZSBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVPU1JFbnRyeShW
TSYsIENhbGxGcmFtZSosIENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpIHsgcmV0dXJuIG51bGxw
dHI7IH0KICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCA3ZDQ0ODQ4YWQ3ZDQuLjgxMzE3ZTcyMDE2
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjE1LDcg
KzIxNSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21waWxlT1NSRXhp
dCwgdm9pZCwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCB2CiAgICAgaWYgKGV4aXQuY29kZUxvY2F0
aW9uRm9yUmVwYXRjaCgpKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoZXhp
dC5jb2RlTG9jYXRpb25Gb3JSZXBhdGNoKCksIENvZGVMb2NhdGlvbkxhYmVsPE9TUkV4aXRQdHJU
YWc+KGV4aXRDb2RlLmNvZGUoKSkpOwogCi0gICAgdm0ub3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9
IGV4aXRDb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZtLm9zckV4aXRKdW1w
RGVzdGluYXRpb24gPSBleGl0Q29kZS5jb2RlKCkudGFnZ2VkUHRyKCk7CiB9CiAKIElHTk9SRV9X
QVJOSU5HU19CRUdJTigiZnJhbWUtYWRkcmVzcyIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggNmQ0ZjdjNzFm
YjViLi4yYzMzNWVlN2Q0OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzksMTQgKzEzOSwxNCBAQCB2
b2lkIGhhbmRsZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NS
RXhpdEJhc2UmIGV4aXQpCiAgICAgZG9uZUFkanVzdGluZy5saW5rKCZqaXQpOwogfQogCi1zdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5
dGVjb2RlSW5kZXgsIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGJv
b2wmIGNhbGxlcklzTExJbnQpCitzdGF0aWMgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJS
ZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRlY29kZUlu
ZGV4IGNhbGxCeXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxlckNh
bGxLaW5kLCBib29sJiBjYWxsZXJJc0xMSW50KQogewogICAgIGNhbGxlcklzTExJbnQgPSBPcHRp
b25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCiAgICAgaWYgKGNhbGxC
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKICAgICAgICAgcmV0dXJuIExMSW50OjpjaGVja3Bv
aW50T1NSRXhpdEZyb21JbmxpbmVkQ2FsbFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OworICAgIENv
ZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldDsKIAogICAgIGNvbnN0IGF1dG8mIGNhbGxJ
bnN0cnVjdGlvbiA9ICpiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zKCku
YXQoY2FsbEJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CkBA
IC0yNzYsNyArMjc2LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxp
bmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgYXV0byBjYWxsQnl0ZWNv
ZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0dXJu
UEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVlQ2Fs
bGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJbnQpOworICAgICAgICAgICAgQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBqdW1wVGFyZ2V0ID0gY2FsbGVyUmV0dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXIsIGNhbGxCeXRlY29kZUluZGV4LCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJ
bnQpOwogCiAgICAgICAgICAgICBpZiAodHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCkpIHsK
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKApAQCAtMjg4LDExICsyODgsMTEgQEAgdm9pZCBy
ZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFz
ZSYgZXhpdCkKIAogI2lmIENQVShBUk02NEUpCiAgICAgICAgICAgICBqaXQuYWRkUHRyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQo
KSArIHNpemVvZih2b2lkKikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
cmVnVDIpOwotICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGp1bXBUYXJnZXQudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVn
VDQpOworICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGp1bXBUYXJnZXQudW50YWdnZWRQdHIoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAgICAgICAg
IGppdC50YWdQdHIoR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1Q0KTsKICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUNCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
Qnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkpKTsKICNlbHNlCi0g
ICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1
bXBUYXJnZXQudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
anVtcFRhcmdldC51bnRhZ2dlZFB0cigpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0
ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkpKTsKICNlbmRpZgogICAg
ICAgICB9CiAKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChW
TSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICBp
ZiAoZXhpdFRvTExJbnQpIHsKICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5tX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICBjb25zdCBhdXRvJiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJ
bmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBkZXN0aW5hdGlvbjsKKyAgICAgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlv
bjsKICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQogICAgICAgICAgICAg
ZGVzdGluYXRpb24gPSBMTEludDo6Y2hlY2twb2ludE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5j
b2RlKCk7CiAgICAgICAgIGVsc2UgCkBAIC0zOTgsMTMgKzM5OCwxMyBAQCB2b2lkIGFkanVzdEFu
ZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFz
ZSYgZXhpdCkKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNv
ZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFk
YXRhVGFibGVHUFIpOwogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJl
Z2lzdGVyczo6cGJHUFIpOwogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwot
ICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4o
KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24u
cmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS50YWdnZWRQdHIoKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhp
dC0+bWV0YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRhR1BSKTsKICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5l
SklURGF0YSgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRl
eCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKKyAgICAg
ICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKICAgICAgICAgaWYgKGV4aXRJ
bmRleC5jaGVja3BvaW50KCkpCiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVj
a3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKICAgICAgICAgZWxzZSB7CkBA
IC00MTQsNyArNDE0LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAKICAgICAgICAgQVNTRVJU
KGRlc3RpbmF0aW9uKTsKIAotICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdn
ZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBqdW1wVGFy
Z2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS50YWdnZWRQdHIoKTsK
ICAgICB9CiAKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggZmE2YTA5MWVkNGEyLi5j
NjQxMDA3YjQ1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcApAQCAtMjgzMSw4ICsyODMxLDggQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUsIGNoYXIqLCAoVk0qIHZtUG8KICAgICBk
b3VibGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwogICAgIGludDMyX3QgYXNJbnQzMiA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KGFzRG91YmxlKTsKICAgICBpZiAoYXNEb3VibGUgPT0gYXNJ
bnQzMikKLSAgICAgICAgcmV0dXJuIGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKG1pbiwgYXNJbnQz
MikuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7Ci0gICAgcmV0dXJuIGxpbmtlZFRhYmxlLm1f
Y3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKKyAgICAgICAgcmV0dXJuIGxp
bmtlZFRhYmxlLmN0aUZvclZhbHVlKG1pbiwgYXNJbnQzMikudGFnZ2VkUHRyPGNoYXIqPigpOwor
ICAgIHJldHVybiBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQudGFnZ2VkUHRyPGNoYXIqPigpOwog
fQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nLCBjaGFy
KiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHNpemVfdCB0YWJsZUluZGV4LCBjb25z
dCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSogdW5saW5rZWRUYWJsZSwgSlNTdHJpbmcqIHN0cmlu
ZykpCkBAIC0yODQ3LDcgKzI4NDcsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIGNvbnN0IFN0cmluZ0p1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKLSAgICByZXR1cm4gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUoKnVubGlua2Vk
VGFibGUsIHN0ckltcGwpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgIHJldHVybiBs
aW5rZWRUYWJsZS5jdGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJsZSwgc3RySW1wbCkudGFnZ2VkUHRy
PGNoYXIqPigpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGFy
ZVN0cmluZ0ltcGxMZXNzLCB1aW50cHRyX3QsIChTdHJpbmdJbXBsKiBhLCBTdHJpbmdJbXBsKiBi
KSkKQEAgLTM3MzcsNyArMzczNyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25MaW5rRGlyZWN0Q2FsbCwgdm9pZCwgKE9wdGltaXppbmdDYWxsTGlua0luZm8qCiAKICAgICAv
LyBGSVhNRTogU3VwcG9ydCB3YXNtIElDLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gY29kZVB0cjsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgIERlZmVyVHJhcHMgZGVmZXJU
cmFwcyh2bSk7IC8vIFdlIGNhbid0IGpldHRpc29uIHRoaXMgY29kZSBpZiB3ZSdyZSBhYm91dCB0
byBsaW5rIHRvIGl0LgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCmluZGV4IGEwZDE4YTNlMjc0OS4uMzI4ZmVjY2NmNDFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtNTUwMiw3
ICs1NTAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKiBub2Rl
LCBKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aEkKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBtX2ppdC5sYWJlbCgpOwogICAg
ICAgICAgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1
ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoRW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKSAtIHN0YXRp
Y19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoRW5kKS50YWdnZWRQdHIoKSkg
LSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQp
LnRhZ2dlZFB0cigpKTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNp
emUgKz0gc2l6ZTsKICAgICAgICAgICAgIH0pOwogI2VuZGlmCkBAIC01NTI1LDcgKzU1MjUsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUqIG5vZGUsIEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
IGF1dG8gaW5saW5lRW5kID0gbV9qaXQubGFiZWwoKTsKICAgICBtX2ppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0
aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkgLSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlu
bGluZVN0YXJ0KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBz
dGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkudGFnZ2Vk
UHRyKCkpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVT
dGFydCkudGFnZ2VkUHRyKCkpOwogICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUg
Kz0gc2l6ZTsKICAgICB9KTsKICNlbmRpZgpAQCAtNjExNSw3ICs2MTE1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKiBub2RlLCBKSVRVbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiBtYXRoSUMKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICAgICAgICAgIGF1
dG8gc2xvd1BhdGhFbmQgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgbV9qaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgc2l6
ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQ
YXRoRW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKSAtIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5s
b2NhdGlvbk9mKHNsb3dQYXRoRW5kKS50YWdnZWRQdHIoKSkgLSBzdGF0aWNfY2FzdDxjaGFyKj4o
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLnRhZ2dlZFB0cigpKTsKICAgICAg
ICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKICAgICAgICAg
ICAgIH0pOwogI2VuZGlmCkBAIC02MTMwLDcgKzYxMzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTWF0aElDKE5vZGUqIG5vZGUsIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQwogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbV9q
aXQubGFiZWwoKTsKICAgICBtX2ppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1
ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkgLSBzdGF0aWNf
Y2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0KS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkudGFnZ2VkUHRyKCkpIC0gc3RhdGljX2Nhc3Q8
Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVTdGFydCkudGFnZ2VkUHRyKCkpOwog
ICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKICAgICB9KTsKICNl
bmRpZgpAQCAtMTEwMDMsMTMgKzExMDAzLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDYWxsRE9NKE5vZGUqIG5vZGUpCiAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQgKyAxOwogICAgIHN3aXRjaCAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HUD4oZnVuY3Rpb24uZ2V0KCkpLCBl
eHRyYWN0UmVzdWx0KHJlc3VsdFJlZ3MpLCBKSVRDb21waWxlcjo6TGlua2FibGVDb25zdGFudCht
X2ppdCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJl
Z3NbMF0pOworICAgICAgICBjYWxsT3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR1A+KGZ1bmN0aW9uLnVudHlwZWRGdW5jKCkpLCBleHRyYWN0UmVzdWx0KHJlc3VsdFJl
Z3MpLCBKSVRDb21waWxlcjo6TGlua2FibGVDb25zdGFudChtX2ppdCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJlZ3NbMF0pOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIDI6Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ocmVpbnRlcnByZXRfY2FzdDxK
X0pJVE9wZXJhdGlvbl9HUFA+KGZ1bmN0aW9uLmdldCgpKSwgZXh0cmFjdFJlc3VsdChyZXN1bHRS
ZWdzKSwgSklUQ29tcGlsZXI6OkxpbmthYmxlQ29uc3RhbnQobV9qaXQsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCByZWdzWzBdLCByZWdzWzFdKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dQUD4o
ZnVuY3Rpb24udW50eXBlZEZ1bmMoKSksIGV4dHJhY3RSZXN1bHQocmVzdWx0UmVncyksIEpJVENv
bXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1faml0LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcmVnc1swXSwgcmVnc1sxXSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgMzoKLSAgICAgICAgY2FsbE9wZXJhdGlvbihyZWludGVycHJldF9jYXN0PEpf
SklUT3BlcmF0aW9uX0dQUFA+KGZ1bmN0aW9uLmdldCgpKSwgZXh0cmFjdFJlc3VsdChyZXN1bHRS
ZWdzKSwgSklUQ29tcGlsZXI6OkxpbmthYmxlQ29uc3RhbnQobV9qaXQsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCByZWdzWzBdLCByZWdzWzFdLCByZWdz
WzJdKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dQUFA+KGZ1bmN0aW9uLnVudHlwZWRGdW5jKCkpLCBleHRyYWN0UmVzdWx0KHJlc3VsdFJl
Z3MpLCBKSVRDb21waWxlcjo6TGlua2FibGVDb25zdGFudChtX2ppdCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJlZ3NbMF0sIHJlZ3NbMV0sIHJlZ3Nb
Ml0pOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTEwMjQsNyArMTEwMjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ2FsbERPTUdldHRlcihOb2RlKiBub2RlKQogewogICAgIERPTUpJVDo6Q2Fs
bERPTUdldHRlclNuaXBwZXQqIHNuaXBwZXQgPSBub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5z
bmlwcGV0OwogICAgIGlmICghc25pcHBldCkgewotICAgICAgICBGdW5jdGlvblB0cjxDdXN0b21B
Y2Nlc3NvclB0clRhZz4gZ2V0dGVyID0gbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+Y3VzdG9t
QWNjZXNzb3JHZXR0ZXI7CisgICAgICAgIENvZGVQdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+IGdl
dHRlciA9IG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmN1c3RvbUFjY2Vzc29yR2V0dGVyOwog
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCkBAIC0xMTAzMyw3
ICsxMTAzMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NR2V0dGVyKE5v
ZGUqIG5vZGUpCiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgaWYgKE9wdGlv
bnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzPEpfSklU
T3BlcmF0aW9uX0dKSVA+KEpJVENvbXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1faml0LCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgQ0NhbGxIZWxwZXJz
OjpDZWxsVmFsdWUoYmFzZUdQUiksIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5j
YWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyKSksIFRydXN0ZWRJbW1QdHIoZ2V0
dGVyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzPEpfSklUT3BlcmF0aW9uX0dKSVA+KEpJVENvbXBpbGVyOjpMaW5rYWJsZUNvbnN0YW50KG1f
aml0LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgQ0Nh
bGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJ
RChub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyKSksIFRydXN0ZWRJ
bW1QdHIoZ2V0dGVyLnRhZ2dlZFB0cigpKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzPEpfSklUT3BlcmF0aW9uX0dKST4oSklUQ29tcGlsZXI6Okxpbmth
YmxlQ29uc3RhbnQobV9qaXQsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgVHJ1c3RlZEltbVB0
cihpZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1i
ZXIpKSk7CiAKQEAgLTExMDQyLDcgKzExMDQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNhbGxET01HZXR0ZXIoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJ
VENhZ2UoKSkKICAgICAgICAgICAgIG1faml0LmFwcGVuZENhbGwodm1FbnRyeUN1c3RvbUdldHRl
cik7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPiBieXBhc3NlZEZ1bmN0aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9wZXJhdGlvblB0
clRhZz4oV1RGOjp0YWdOYXRpdmVDb2RlUHRySW1wbDxPcGVyYXRpb25QdHJUYWc+KFdURjo6dW50
YWdOYXRpdmVDb2RlUHRySW1wbDxDdXN0b21BY2Nlc3NvclB0clRhZz4oZ2V0dGVyLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKSkudG9GdW5jdGlvblB0cigpOworICAgICAgICAgICAgQ29kZVB0cjxPcGVy
YXRpb25QdHJUYWc+IGJ5cGFzc2VkRnVuY3Rpb24oV1RGOjp0YWdOYXRpdmVDb2RlUHRySW1wbDxP
cGVyYXRpb25QdHJUYWc+KFdURjo6dW50YWdOYXRpdmVDb2RlUHRySW1wbDxDdXN0b21BY2Nlc3Nv
clB0clRhZz4oZ2V0dGVyLnRhZ2dlZFB0cigpKSkpOwogICAgICAgICAgICAgbV9qaXQuYXBwZW5k
T3BlcmF0aW9uQ2FsbChieXBhc3NlZEZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgICAgICBtX2pp
dC5zZXR1cFJlc3VsdHMocmVzdWx0UmVncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggMWQ3NWI5ZDIzYmY2Li5kNmNhNDIyN2I2ZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTEw
MDAsNyArMTAwMCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFk
ZCBjYWxsIGluc3RydWN0aW9ucywgb3B0aW9uYWxseSBzZXR0aW5nIHJlc3VsdHMsIGFuZCBvcHRp
b25hbGx5IHJvbGxpbmcgYmFjayB0aGUgY2FsbCBmcmFtZSBvbiBhbiBleGNlcHRpb24uCi0gICAg
SklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGwoY29uc3Qg
Q29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgcHJlcGFy
ZUZvckV4dGVybmFsQ2FsbCgpOwogICAgICAgICBtX2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2luKG1f
Y3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0xMDE0LDIxICsxMDE0LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChhZGRyZXNzKTsKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBhcHBlbmRPcGVyYXRpb25DYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kT3Bl
cmF0aW9uQ2FsbChjb25zdCBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAg
ewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7CiAgICAgICAgIG1faml0LmVtaXRT
dG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAg
cmV0dXJuIG1faml0LmFwcGVuZE9wZXJhdGlvbkNhbGwoZnVuY3Rpb24pOwogICAgIH0KIAotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlv
bihjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgewogICAgICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKCk7CiAgICAgICAgIHJl
dHVybiBjYWxsOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvblNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0KQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvblNldFJlc3Vs
dChjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQp
CiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKChyZXN1
bHQgIT0gSW52YWxpZEdQUlJlZykgJiYgKHJlc3VsdCAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpCkBAIC0xMDU4LDcgKzEwNTgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gSW52
YWxpZEdQUlJlZykKQEAgLTEwNjYsMTQgKzEwNjYsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gY2FsbDsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVz
dWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyBy
ZXN1bHQxLCBHUFJSZWcgcmVzdWx0MikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
U2V0UmVzdWx0KGNvbnN0IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgR1BSUmVn
IHJlc3VsdDEsIEdQUlJlZyByZXN1bHQyKQogICAgIHsKICAgICAgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24pOwogICAgICAgICBtX2ppdC5zZXR1cFJlc3Vs
dHMocmVzdWx0MSwgcmVzdWx0Mik7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KIAotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncykKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IENvZGVQdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncykKICAgICB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rp
b24sIHJlc3VsdFJlZ3MuZ3ByKCkpOwpAQCAtMTA4Miw3ICsxMDgyLDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgQ29kZVB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24pOwogICAgICAg
ICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RodW5rcy5jcHAKaW5kZXggYTM0MjFjNjdkNTY3Li4yOWM4OGEzMDdiZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTEyNSw3ICsxMjUsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5l
cmF0b3IoVk0mIHZtKQogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6REZHVGh1bmspOwogICAgIAotICAgIHBhdGNo
QnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbkNvbXBpbGVPU1JFeGl0KSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25Q
dHJUYWc+KGZ1bmN0aW9uQ2FsbCwgb3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQpOwogCiAgICAgcmV0
dXJuIEZJTkFMSVpFX1RIVU5LKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1Ig
ZXhpdCBnZW5lcmF0aW9uIHRodW5rIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCmluZGV4IDYyYTIwZTFm
NmE0Yy4uZGJjMGIxYTEzOWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGlzYXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcApAQCAtMzQsOSArMzQsOSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2
b2lkKiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRT
dHJlYW0mIG91dCkKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERpc2Fzc2Vt
Ymx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIHZvaWQqIGNvZGVTdGFydCwgdm9pZCog
Y29kZUVuZCwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewotICAgIHVp
bnQzMl90KiBjdXJyZW50UEMgPSBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dWlu
dDMyX3QqPigpOworICAgIHVpbnQzMl90KiBjdXJyZW50UEMgPSBjb2RlUHRyLnVudGFnZ2VkUHRy
PHVpbnQzMl90Kj4oKTsKICAgICBzaXplX3QgYnl0ZUNvdW50ID0gc2l6ZTsKIAogICAgIHVpbnQz
Ml90KiBhcm1Db2RlU3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3QqPihjb2RlU3RhcnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9DYXBzdG9uZURp
c2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0NhcHN0
b25lRGlzYXNzZW1ibGVyLmNwcAppbmRleCBmNDkwZTQ2MWE3NDkuLjE2YmRmZDFlNWE0MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9DYXBzdG9uZURpc2Fz
c2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9DYXBz
dG9uZURpc2Fzc2VtYmxlci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlz
YXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCosIHZvaWQqLCBjb25z
dCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCitib29sIHRyeVRvRGlzYXNzZW1ibGUo
Y29uc3QgQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2
b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKICAg
ICBjc2ggaGFuZGxlOwogICAgIGNzX2luc24qIGluc3RydWN0aW9uczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAppbmRleCAxZWU2
ZDFlZGQ1NTQuLmNlZTcxZDY0MTFmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcApAQCAtNTUsMTIgKzU1LDEyIEBAIHN0YXRp
YyBMYWJlbE1hcCYgZW5zdXJlTGFiZWxNYXAoKSBXVEZfUkVRVUlSRVNfTE9DSyhsYWJlbE1hcExv
Y2spCiAKIH0gLy8gbmFtZXNwYWNlIERpc2Fzc2VtYmxlcgogCi12b2lkIGRpc2Fzc2VtYmxlKGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNp
emVfdCBzaXplLCB2b2lkKiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHBy
ZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKK3ZvaWQgZGlzYXNzZW1ibGUoY29uc3QgQ29kZVB0cjxE
aXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lkKiBjb2RlU3RhcnQs
IHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsK
ICAgICBpZiAodHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCBjb2RlU3RhcnQsIGNvZGVF
bmQsIHByZWZpeCwgb3V0KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG91dC5wcmludGYo
IiVzZGlzYXNzZW1ibHkgbm90IGF2YWlsYWJsZSBmb3IgcmFuZ2UgJXAuLi4lcFxuIiwgcHJlZml4
LCBjb2RlUHRyLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSwgY29kZVB0ci51bnRhZ2dlZEV4
ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpICsgc2l6ZSk7CisgICAgb3V0LnByaW50ZigiJXNkaXNh
c3NlbWJseSBub3QgYXZhaWxhYmxlIGZvciByYW5nZSAlcC4uLiVwXG4iLCBwcmVmaXgsIGNvZGVQ
dHIudW50YWdnZWRQdHIoKSwgY29kZVB0ci51bnRhZ2dlZFB0cjxjaGFyKj4oKSArIHNpemUpOwog
fQogCiBuYW1lc3BhY2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fz
c2VtYmxlci9EaXNhc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvRGlzYXNzZW1ibGVyLmgKaW5kZXggYzQ2ZmVkNWRjZTY4Li42MGZiNjM2YmY0OTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaApA
QCAtMjgsMzEgKzI4LDMxIEBACiAjaW5jbHVkZSAiSlNDUHRyVGFnLmgiCiAjaW5jbHVkZSAiSlNF
eHBvcnRNYWNyb3MuaCIKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9Db2Rl
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI7CiB0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjsKIAogI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCi1ib29sIHRyeVRvRGlzYXNz
ZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYsIHNp
emVfdCwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2RlRW5kLCBjb25zdCBjaGFyKiBwcmVmaXgs
IFByaW50U3RyZWFtJik7Citib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgQ29kZVB0cjxEaXNh
c3NlbWJseVB0clRhZz4mLCBzaXplX3QsIHZvaWQqIGNvZGVTdGFydCwgdm9pZCogY29kZUVuZCwg
Y29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYpOwogI2Vsc2UKLWlubGluZSBib29sIHRy
eVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRy
VGFnPiYsIHNpemVfdCwgdm9pZCosIHZvaWQqLCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKQor
aW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERpc2Fzc2VtYmx5UHRy
VGFnPiYsIHNpemVfdCwgdm9pZCosIHZvaWQqLCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KICNlbmRpZgogCi1pbmxpbmUgYm9vbCB0cnlUb0Rpc2Fz
c2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNv
ZGUsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCitp
bmxpbmUgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IENvZGVQdHI8RGlzYXNzZW1ibHlQdHJU
YWc+JiBjb2RlLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYg
b3V0KQogewogICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlKGNvZGUsIHNpemUsIG51bGxwdHIs
IG51bGxwdHIsIHByZWZpeCwgb3V0KTsKIH0KIAogLy8gUHJpbnRzIGVpdGhlciB0aGUgZGlzYXNz
ZW1ibHksIG9yIGEgbGluZSBvZiB0ZXh0IGluZGljYXRpbmcgdGhhdCBkaXNhc3NlbWJseSBmYWls
ZWQgYW5kCiAvLyB0aGUgcmFuZ2Ugb2YgbWFjaGluZSBjb2RlIGFkZHJlc3Nlcy4KLXZvaWQgZGlz
YXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYs
IHNpemVfdCwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2RlRW5kLCBjb25zdCBjaGFyKiBwcmVm
aXgsIFByaW50U3RyZWFtJiBvdXQpOwordm9pZCBkaXNhc3NlbWJsZShjb25zdCBDb2RlUHRyPERp
c2Fzc2VtYmx5UHRyVGFnPiYsIHNpemVfdCwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2RlRW5k
LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpOwogCiAvLyBBc3luY2hyb25v
dXMgZGlzYXNzZW1ibHkuIFRoaXMgaGFwcGVucyBvbiBhbm90aGVyIHRocmVhZCwgYW5kIGNhbGxz
IHRoZSBwcm92aWRlZAogLy8gY2FsbGJhY2sgd2hlbiB0aGUgZGlzYXNzZW1ibHkgaXMgZG9uZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvUklTQ1Y2NERp
c2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1JJU0NW
NjREaXNhc3NlbWJsZXIuY3BwCmluZGV4IDc0MTA1N2I2Y2UyZS4uNmE3Yzc3NmU0ZDAzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1JJU0NWNjREaXNhc3Nl
bWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvUklTQ1Y2
NERpc2Fzc2VtYmxlci5jcHAKQEAgLTYzMyw3ICs2MzMsNyBAQCBDU3RyaW5nIGRpc2Fzc2VtYmxl
T3Bjb2RlKHVpbnQzMl90ICpwYykKIAogfSAvLyBuYW1lc3BhY2UgUklTQ1Y2NERpc2Fzc2VtYmxl
cgogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERp
c2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIHZvaWQqLCB2b2lkKiwgY29u
c3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxl
KGNvbnN0IENvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwg
dm9pZCosIHZvaWQqLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAg
ICAgdWludDMyX3QqIGN1cnJlbnRQQyA9IGNvZGVQdHIudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVz
czx1aW50MzJfdCo+KCk7CiAgICAgc2l6ZV90IGJ5dGVDb3VudCA9IHNpemU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHAK
aW5kZXggMzQ5ZDM2ZGUzODM2Li5hMDlmNGQ1Nzk3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHAKQEAgLTMzLDcg
KzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXpl
X3Qgc2l6ZSwgdm9pZCosIHZvaWQqLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBv
dXQpCitib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgQ29kZVB0cjxEaXNhc3NlbWJseVB0clRh
Zz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lkKiwgdm9pZCosIGNvbnN0IGNoYXIqIHByZWZp
eCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICBaeWRpc0RlY29kZXIgZGVjb2RlcjsKICAgICBa
eWRpc0RlY29kZXJJbml0KCZkZWNvZGVyLCBaWURJU19NQUNISU5FX01PREVfTE9OR182NCwgWllE
SVNfQUREUkVTU19XSURUSF82NCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZG9taml0L0RPTUpJVFNpZ25hdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RvbWppdC9E
T01KSVRTaWduYXR1cmUuaAppbmRleCBkMzFmYjRjYmI1YTEuLmI1N2JiYTQyNTViNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RvbWppdC9ET01KSVRTaWduYXR1cmUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZG9taml0L0RPTUpJVFNpZ25hdHVyZS5oCkBAIC0yOCw3
ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiRE9NSklURWZmZWN0
LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvQ29kZVB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERPTUpJVCB7CiAKQEAgLTQwLDExICs0MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERPTUpJVCB7CiAKIGNsYXNzIFNpZ25hdHVyZSB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgRnVu
Y3Rpb25QdHIgPSBXVEY6OkZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz47CisgICAgdXNpbmcg
Q29kZVB0ciA9IFdURjo6Q29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+OwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIGNvbnN0ZXhwciBTaWduYXR1cmUoRnVuY3Rpb25Q
dHIgZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywg
RWZmZWN0IGVmZmVjdCwgU3BlY3VsYXRlZFR5cGUgcmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQotICAgICAgICA6IGZ1bmN0aW9uV2l0aG91dFR5cGVDaGVja1B0cihmdW5jdGlvbldpdGhv
dXRUeXBlQ2hlY2suZ2V0KCkpCisgICAgY29uc3RleHByIFNpZ25hdHVyZShDb2RlUHRyIGZ1bmN0
aW9uV2l0aG91dFR5cGVDaGVjaywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEVmZmVjdCBl
ZmZlY3QsIFNwZWN1bGF0ZWRUeXBlIHJlc3VsdCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAg
ICAgICAgOiBmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2tQdHIoZnVuY3Rpb25XaXRob3V0VHlwZUNo
ZWNrLnVudHlwZWRGdW5jKCkpCiAgICAgICAgICwgY2xhc3NJbmZvKGNsYXNzSW5mbykKICAgICAg
ICAgLCByZXN1bHQocmVzdWx0KQogICAgICAgICAsIGFyZ3VtZW50cyB7c3RhdGljX2Nhc3Q8U3Bl
Y3VsYXRlZFR5cGU+KGFyZ3VtZW50cykuLi59CkBAIC01Myw5ICs1Myw5IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogCi0gICAgRnVuY3Rpb25QdHIgZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrKCkg
Y29uc3QgeyByZXR1cm4gRnVuY3Rpb25QdHIoZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrUHRyKTsg
fQorICAgIENvZGVQdHIgZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrKCkgY29uc3QgeyByZXR1cm4g
Q29kZVB0cihmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2tQdHIpOyB9CiAKLSAgICBjb25zdCBXVEZf
VlRCTF9GVU5DUFRSX1BUUkFVVEgoRE9NSklUU2lnbmF0dXJlKSBGdW5jdGlvblB0cjo6UHRyIGZ1
bmN0aW9uV2l0aG91dFR5cGVDaGVja1B0cjsKKyAgICBjb25zdCBXVEZfVlRCTF9GVU5DUFRSX1BU
UkFVVEgoRE9NSklUU2lnbmF0dXJlKSBDb2RlUHRyOjpVbnR5cGVkRnVuYyBmdW5jdGlvbldpdGhv
dXRUeXBlQ2hlY2tQdHI7CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjb25zdCBjbGFzc0luZm87CiAg
ICAgY29uc3QgU3BlY3VsYXRlZFR5cGUgcmVzdWx0OwogICAgIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IGFyZ3VtZW50c1tKU0NfRE9NSklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCmluZGV4IDdhZTExMjlhMGNmYy4uMjIzN2E2
M2E1MDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
Niw3ICs3Niw3IEBAIHZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50
KENvZGVSZWY8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludCkKICAgICBtX2FyaXR5Q2hlY2tFbnRy
eXBvaW50ID0gZW50cnlwb2ludDsKIH0KIAotSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eUNoZWNrKQorQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9k
ZSBhcml0eUNoZWNrKQogewogICAgIHN3aXRjaCAoYXJpdHlDaGVjaykgewogICAgIGNhc2UgQXJp
dHlDaGVja05vdFJlcXVpcmVkOgpAQCAtOTEsOSArOTEsOSBAQCBKSVRDb2RlOjpDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFyaXR5
Q2hlYwogdm9pZCogSklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zm
c2V0KQogewogICAgIGlmICghb2Zmc2V0KQotICAgICAgICByZXR1cm4gbV9hZGRyZXNzRm9yQ2Fs
bC5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXR1cm4gbV9hZGRyZXNzRm9yQ2FsbC50
YWdnZWRQdHIoKTsKIAotICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0gbV9hZGRyZXNzRm9y
Q2FsbC51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgIGNoYXIqIGV4ZWN1
dGFibGVBZGRyZXNzID0gbV9hZGRyZXNzRm9yQ2FsbC51bnRhZ2dlZFB0cjxjaGFyKj4oKTsKICAg
ICByZXR1cm4gdGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihleGVjdXRhYmxlQWRkcmVzcyArIG9m
ZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6
eVNsb3dQYXRoQ2FsbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1Bh
dGhDYWxsLmgKaW5kZXggNzRmZDZlYzdiNzJmLi4xNTFhMzIwNWViZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCkBAIC0zOCw3ICszOCw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
UmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KIFJlZjxMYXp5U2xvd1BhdGg6
OkdlbmVyYXRvcj4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgVk0mIHZtLCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1l
bnRUeXBlcy4uLiBhcmd1bWVudHMpCisgICAgVk0mIHZtLCBDb2RlUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50
cykKIHsKICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVHZW5lcmF0b3IoCiAgICAgICAg
IFs9LCAmdm1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TGluay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCmluZGV4IGY3
ZDNhNTNlNDliZC4uMTUwOGFmOTZiNTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGlu
ay5jcHAKQEAgLTEwMCw5ICsxMDAsOSBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAg
ICAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2Fs
bEFyaXR5Q2hlY2ssIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY29kZUJsb2NrLT5pc0Nv
bnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2Fs
bEFyaXR5Q2hlY2spKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbms8T3BlcmF0aW9uUHRy
VGFnPihjYWxsQXJpdHlDaGVjaywgY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRp
b25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2spOwogICAgICAg
ICAgICAgbGlua0J1ZmZlci0+bGluayhqdW1wVG9FeGNlcHRpb25IYW5kbGVyLCBDb2RlTG9jYXRp
b25MYWJlbCh2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Ci0gICAgICAgICAgICBsaW5r
QnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5l
cmF0b3IpLmNvZGUoKS50b0Z1bmN0aW9uUHRyKCkpOworICAgICAgICAgICAgbGlua0J1ZmZlci0+
bGluayhjYWxsQXJpdHlGaXh1cCwgdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5j
b2RlKCkpOwogICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhtYWluUGF0aEp1bXBzLCBzdGF0
ZS5nZW5lcmF0ZWRGdW5jdGlvbik7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDQ3Y2MzZDA4ZDI4My4uYTcwYWU0NmM2
ZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CkBAIC0zMjUsOCArMzI1LDggQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayh0
aHJvd0NhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVGhyb3dTdGFj
a092ZXJmbG93RXJyb3IpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJU
YWc+KHRocm93Q2FsbCwgb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsLCBvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVy
RnJvbUNhbGxlckZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICB9KTsKQEAgLTI0NTksNyArMjQ1OSw3IEBAIHByaXZhdGU6CiAj
aWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNs
b3dQYXRoRW5kID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhF
bmQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNs
b3dQYXRoU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRo
RW5kKS50YWdnZWRQdHI8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhT
dGFydCkudGFnZ2VkUHRyPGNoYXIqPigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAjZW5kaWYKQEAgLTI0NzMsNyArMjQ3Myw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVFbmQgPSBqaXQubGFi
ZWwoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGlubGluZUVuZCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigp
OworICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihpbmxpbmVFbmQpLnRhZ2dlZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihp
bmxpbmVTdGFydCkudGFnZ2VkUHRyPGNoYXIqPigpOwogICAgICAgICAgICAgICAgICAgICBtYXRo
SUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKICAgICAgICAgICAgICAgICB9KTsKICNl
bmRpZgpAQCAtMjU3MCw3ICsyNTcwLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBqaXQubGFi
ZWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
c2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkuZXhlY3V0YWJsZUFkZHJl
c3M8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkuZXhlY3V0
YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLnRhZ2dlZFB0cjxjaGFy
Kj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS50YWdnZWRQdHI8Y2hh
cio+KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRlZENv
ZGVTaXplICs9IHNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICNlbmRpZgpAQCAt
MjU4NCw3ICsyNTg0LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAg
ICAgICAgICAgICAgICBhdXRvIGlubGluZUVuZCA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5l
RW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihp
bmxpbmVTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkudGFnZ2Vk
UHRyPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0KS50YWdnZWRQ
dHI8Y2hhcio+KCk7CiAgICAgICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2Rl
U2l6ZSArPSBzaXplOwogICAgICAgICAgICAgICAgIH0pOwogI2VuZGlmCkBAIC0xNTc1MCwxMyAr
MTU3NTAsMTMgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBhdXRvIGZ1bmN0
aW9uID0gc2lnbmF0dXJlLT5mdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2soKTsKICAgICAgICAgc3dp
dGNoIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgewogICAgICAgICBjYXNlIDE6Ci0gICAg
ICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR1A+KGZ1bmN0aW9uLmdldCgpKSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgb3Bl
cmFuZHNbMF0pOworICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCByZWludGVycHJl
dF9jYXN0PEpfSklUT3BlcmF0aW9uX0dQPihmdW5jdGlvbi51bnR5cGVkRnVuYygpKSwgd2Vha1Bv
aW50ZXIoZ2xvYmFsT2JqZWN0KSwgb3BlcmFuZHNbMF0pOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgcmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HUFA+KGZ1bmN0aW9uLmdldCgpKSwgd2Vha1BvaW50
ZXIoZ2xvYmFsT2JqZWN0KSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgcmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9H
UFA+KGZ1bmN0aW9uLnVudHlwZWRGdW5jKCkpLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBv
cGVyYW5kc1swXSwgb3BlcmFuZHNbMV0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgMzoKLSAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgcmVpbnRlcnByZXRfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HUFBQPihmdW5jdGlvbi5nZXQoKSksIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pOworICAgICAg
ICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCByZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dQUFA+KGZ1bmN0aW9uLnVudHlwZWRGdW5jKCkpLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QpLCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTE1Nzc4LDEwICsxNTc3OCwxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklO
R1NfRU5ECiAgICAgICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgbV9vdXQuYWJz
b2x1dGUoJnZtKCkudG9wQ2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNl
SklUQ2FnZSgpKSB7CiAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSgKLSAgICAgICAgICAgICAg
ICAgICAgdm1DYWxsKEludDY0LCB2bUVudHJ5Q3VzdG9tR2V0dGVyLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdEludFB0ciht
X2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlm
aWVyTnVtYmVyXSksIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+Y2FsbERPTUdldHRlckRhdGEo
KS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgdm1DYWxsKEludDY0LCB2bUVudHJ5Q3VzdG9tR2V0dGVyLCB3ZWFrUG9pbnRl
cihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdElu
dFB0cihtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5p
ZGVudGlmaWVyTnVtYmVyXSksIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+Y2FsbERPTUdldHRl
ckRhdGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXIudGFnZ2VkUHRyKCkpKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRy
VGFnPiBnZXR0ZXIgPSBtX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmN1c3RvbUFjY2Vzc29y
R2V0dGVyOwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gYnlw
YXNzZWRGdW5jdGlvbiA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxPcGVyYXRpb25QdHJUYWc+KFdU
Rjo6dGFnTmF0aXZlQ29kZVB0ckltcGw8T3BlcmF0aW9uUHRyVGFnPihXVEY6OnVudGFnTmF0aXZl
Q29kZVB0ckltcGw8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KGdldHRlci5leGVjdXRhYmxlQWRkcmVz
cygpKSkpLnRvRnVuY3Rpb25QdHIoKTsKKyAgICAgICAgICAgICAgICBDb2RlUHRyPEN1c3RvbUFj
Y2Vzc29yUHRyVGFnPiBnZXR0ZXIgPSBtX25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmN1c3Rv
bUFjY2Vzc29yR2V0dGVyOworICAgICAgICAgICAgICAgIENvZGVQdHI8T3BlcmF0aW9uUHRyVGFn
PiBieXBhc3NlZEZ1bmN0aW9uKFdURjo6dGFnTmF0aXZlQ29kZVB0ckltcGw8T3BlcmF0aW9uUHRy
VGFnPihXVEY6OnVudGFnTmF0aXZlQ29kZVB0ckltcGw8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KGdl
dHRlci50YWdnZWRQdHIoKSkpKTsKICAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJ
bnQ2NCwgYnlwYXNzZWRGdW5jdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5pZGVudGlmaWVy
cygpW21fbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+aWRlbnRpZmllck51bWJlcl0pKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMDUyMiw3ICsyMDUyMiw3IEBA
IElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICBMVmFsdWUgdm1DYWxsKExUeXBlIHR5cGUs
IE9wZXJhdGlvblR5cGUgZnVuY3Rpb24sIEFyZ3MmJi4uLiBhcmdzKQogICAgIHsKICAgICAgICAg
c3RhdGljX2Fzc2VydCghc3RkOjppc19zYW1lPE9wZXJhdGlvblR5cGUsIExWYWx1ZT46OnZhbHVl
KTsKLSAgICAgICAgaWYgY29uc3RleHByICghc3RkOjppc19zYW1lX3Y8RnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPiwgT3BlcmF0aW9uVHlwZT4pCisgICAgICAgIGlmIGNvbnN0ZXhwciAoIXN0
ZDo6aXNfc2FtZV92PENvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPiwgT3BlcmF0aW9uVHlwZT4pCiAg
ICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+Ojpj
Q2FsbEFyaXR5KCkgPT0gc2l6ZW9mLi4uKEFyZ3MpLCAiU2FuaXR5IGNoZWNrIik7CiAgICAgICAg
IGNhbGxQcmVmbGlnaHQoKTsKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwodHlw
ZSwgbV9vdXQub3BlcmF0aW9uKGZ1bmN0aW9uKSwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggYzUyMTA4
MDg5YTJkLi5mMTgzNTgzMzc1ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RW50cnkuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAg
ICAKICAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7CiAgICAgCi0g
ICAgdm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90
UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCogcmVzdWx0ID0gZW50cnlD
b2RlLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpLnRhZ2dlZFB0cigpOwog
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBFbnRyeSB3aWxsIHN1
Y2NlZWQsIGdvaW5nIHRvIGFkZHJlc3MgIiwgUmF3UG9pbnRlcihyZXN1bHQpKTsKIAogICAgIC8v
IEF0IHRoaXMgcG9pbnQsIHdlJ3JlIGNvbW1pdHRlZCB0byB0cmlnZ2VyaW5nIGFuIE9TUiBlbnRy
eSBpbW1lZGlhdGVseSBhZnRlciB3ZSByZXR1cm4uIEhlbmNlLCBpdCBpcyBzYWZlIHRvIG1vZGlm
eSBzdGFjayBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwCmluZGV4IDA4MjFkNjhhYjllYi4uNjFkMjBlZTE5MmE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgx
LDcgKzY4MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21waWxlRlRM
T1NSRXhpdCwgdm9pZCosIChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wKAogICAgICAgICBleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJs
b2NrKSwgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRXhpdFB0clRhZz4oZXhpdC5tX2NvZGUuY29kZSgp
KSk7CiAgICAgCi0gICAgcmV0dXJuIGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgIHJldHVybiBleGl0Lm1fY29kZS5jb2RlKCkudGFnZ2VkUHRyKCk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCmluZGV4IDg2MGVjYjczNWI0MS4uMTc4NTI5MzA2NGYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKQEAgLTc0Nyw3ICs3NDcsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGlsZUZUTExhenlTbG93UGF0
aCwgdm9pZCosIChDYWxsRnJhbWUqIGNhbAogICAgIExhenlTbG93UGF0aCYgbGF6eVNsb3dQYXRo
ID0gKmppdENvZGUtPmxhenlTbG93UGF0aHNbaW5kZXhdOwogICAgIGxhenlTbG93UGF0aC5nZW5l
cmF0ZShjb2RlQmxvY2spOwogCi0gICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkuY29k
ZSgpLnRhZ2dlZFB0cigpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT05fV0lUSF9BVFRS
SUJVVEVTKG9wZXJhdGlvblJlcG9ydEJvdW5kc0NoZWNrRWxpbWluYXRpb25FcnJvckFuZENyYXNo
LCBOT19SRVRVUk5fRFVFX1RPX0NSQVNILCB2b2lkLCAoaW50cHRyX3QgY29kZUJsb2NrQXNJbnRQ
dHIsIGludDMyX3Qgbm9kZUluZGV4LCBpbnQzMl90IGNoaWxkMUluZGV4LCBpbnQzMl90IGNoaWxk
MkluZGV4LCBpbnQzMl90IGNoZWNrZWRJbmRleCwgaW50MzJfdCBib3VuZHMpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggZWQ4ZmY3M2UxYTNhLi41ZjQ1N2M0NjQyZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwNSw3ICs0MDUsNyBA
QCBwdWJsaWM6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4NDMyNAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KICAgICBMVmFsdWUg
b3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBmdW5jdGlvbikgeyByZXR1cm4gY29uc3RJbnRQdHIodGFn
Q0Z1bmN0aW9uUHRyPHZvaWQqLCBPcGVyYXRpb25QdHJUYWc+KGZ1bmN0aW9uKSk7IH0KLSAgICBM
VmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pIHsg
cmV0dXJuIGNvbnN0SW50UHRyKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOyB9CisgICAg
TFZhbHVlIG9wZXJhdGlvbihDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4gZnVuY3Rpb24pIHsgcmV0
dXJuIGNvbnN0SW50UHRyKGZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsgfQogCiAgICAgdm9pZCBqdW1w
KExCYXNpY0Jsb2NrKTsKICAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNC
bG9jayB0YWtlbiwgV2VpZ2h0IHRha2VuV2VpZ2h0LCBMQmFzaWNCbG9jayBub3RUYWtlbiwgV2Vp
Z2h0IG5vdFRha2VuV2VpZ2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsLmNwcAppbmRleCBlZGNlZjlmNmEzZGIuLjA3MTNjZjlhMzJlOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcApAQCAtMTE0LDcgKzEx
NCw3IEBAIFNsb3dQYXRoQ2FsbENvbnRleHQ6On5TbG93UGF0aENhbGxDb250ZXh0KCkKICAgICBt
X2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVk
KSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKLVNsb3dQYXRoQ2Fs
bEtleSBTbG93UGF0aENhbGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gY2FsbFRhcmdldCkgY29uc3QKK1Nsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENh
bGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFy
Z2V0KSBjb25zdAogewogICAgIHVpbnQ4X3QgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJ
ZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCA9IDA7CiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OmNsb2JiZXJBbGxSZWdzSW5GVExJQ1Nsb3dQYXRoKCkpKQpAQCAtMTMwLDcgKzEzMCw3IEBAIFNs
b3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KENDYWxsSGVs
cGVyczo6QWRkcmVzcyBhZGRyZXNzCiAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleShtX3RodW5r
U2F2ZVNldCwgbnVsbHB0ciwgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJp
bmdDaGVja0lzRW5hYmxlZCwgbV9vZmZzZXQsIGFkZHJlc3Mub2Zmc2V0KTsKIH0KIAotU2xvd1Bh
dGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KQorU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENv
bnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJn
ZXQpCiB7CiAgICAgU2xvd1BhdGhDYWxsS2V5IGtleSA9IGtleVdpdGhUYXJnZXQoY2FsbFRhcmdl
dCk7CiAgICAgU2xvd1BhdGhDYWxsIHJlc3VsdCA9IFNsb3dQYXRoQ2FsbChtX2ppdC5jYWxsKEpJ
VFRodW5rUHRyVGFnKSwga2V5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQ
YXRoQ2FsbC5oCmluZGV4IGNmOTYxNmUzYmJlNi4uYzQ3ZDlmYWRlNTA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKQEAgLTU5LDExICs1OSwxMSBAQCBw
dWJsaWM6CiAKICAgICAvLyBOT1RFOiBUaGUgY2FsbCB0aGF0IHRoaXMgcmV0dXJucyBpcyBhbHJl
YWR5IGdvaW5nIHRvIGJlIGxpbmtlZCBieSB0aGUgSklUIHVzaW5nIGFkZExpbmtUYXNrKCksCiAg
ICAgLy8gc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgeW91IHRvIGxpbmsgaXQgeW91cnNlbGYuCi0g
ICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxsKFZNJiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBjYWxsVGFyZ2V0KTsKKyAgICBTbG93UGF0aENhbGwgbWFrZUNhbGwoVk0mLCBDb2RlUHRyPENG
dW5jdGlvblB0clRhZz4gY2FsbFRhcmdldCk7CiAgICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxsKFZN
JiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKTsKIAogcHJpdmF0ZToKLSAgICBTbG93UGF0aENhbGxL
ZXkga2V5V2l0aFRhcmdldChGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQp
IGNvbnN0OworICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlXaXRoVGFyZ2V0KENvZGVQdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KSBjb25zdDsKICAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0
aFRhcmdldChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MpIGNvbnN0OwogICAgIAogICAgIFJlZ2lzdGVy
U2V0IG1fYXJndW1lbnRSZWdpc3RlcnM7CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRp
b24oCiAgICAgVk0mIHZtLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxI
ZWxwZXJzJiBqaXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKLSAg
ICBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BS
LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICBDb2RlUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRHUFIsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRz
KQogewogICAgIFNsb3dQYXRoQ2FsbCBjYWxsOwogICAgIHsKQEAgLTk2LDcgKzk2LDcgQEAgU2xv
d1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5
cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgVk0mIHZtLCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCwKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJn
ZXQsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRH
UFIsCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBDb2RlUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHRHUFIsCiAgICAgQXJndW1l
bnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKGNhbGxTaXRlSW5kZXgpIHsKQEAgLTEx
Miw3ICsxMTIsNyBAQCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKFN0
YXRlJiwgQ29kZU9yaWdpbik7CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgog
U2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3Vt
ZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2Vw
dGlvblRhcmdldCwgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBHUFJSZWcgcmVz
dWx0LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKIHsKICAgICByZXR1cm4gY2FsbE9wZXJh
dGlvbigKICAgICAgICAgc3RhdGUudm0oKSwgdXNlZFJlZ2lzdGVycywgaml0LCBjYWxsU2l0ZUlu
ZGV4Rm9yQ29kZU9yaWdpbihzdGF0ZSwgY29kZU9yaWdpbiksIGV4Y2VwdGlvblRhcmdldCwgZnVu
Y3Rpb24sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRo
Q2FsbEtleS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtl
eS5jcHAKaW5kZXggMDgzYjM1MzZhNThlLi5hMWIyYTRkNTFhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdm9pZCBTbG93UGF0aENhbGxL
ZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoIjx1c2Vk
UmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCwg
IiwgaW5kaXJlY3RPZmZzZXQgPSAiLCBtX2luZGlyZWN0T2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0g
IiwgUmF3UG9pbnRlcihtX2NhbGxUYXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIG91
dC5wcmludCgiPHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICIsIG9mZnNldCA9
ICIsIG1fb2Zmc2V0LCAiLCBpbmRpcmVjdE9mZnNldCA9ICIsIG1faW5kaXJlY3RPZmZzZXQsICIs
IGNhbGxUYXJnZXQgPSAiLCBSYXdQb2ludGVyKG1fY2FsbFRhcmdldC50YWdnZWRQdHIoKSkpOwog
ICAgIGlmIChPcHRpb25zOjpjbG9iYmVyQWxsUmVnc0luRlRMSUNTbG93UGF0aCgpKQogICAgICAg
ICBvdXQucHJpbnQoIiwgYXJndW1lbnRSZWdpc3RlcnMgPSAiLCBhcmd1bWVudFJlZ2lzdGVyc0lm
Q2xvYmJlcmluZ0NoZWNrSXNFbmFibGVkKCkpOwogICAgIG91dC5wcmludCgiPiIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgKaW5kZXggMDlhYjhh
ZDFjYmI5Li42OTgwZTVlZmE3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGxLZXkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogCiAgICAgU2xv
d1BhdGhDYWxsS2V5KCkgPSBkZWZhdWx0OwogICAgIAotICAgIFNsb3dQYXRoQ2FsbEtleShjb25z
dCBSZWdpc3RlclNldCYgc2V0LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJn
ZXQsIHVpbnQ4X3QgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVj
a0lzRW5hYmxlZCwgc2l6ZV90IG9mZnNldCwgaW50MzJfdCBpbmRpcmVjdE9mZnNldCkKKyAgICBT
bG93UGF0aENhbGxLZXkoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCwgQ29kZVB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGNhbGxUYXJnZXQsIHVpbnQ4X3QgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJ
ZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCwgc2l6ZV90IG9mZnNldCwgaW50MzJfdCBpbmRpcmVj
dE9mZnNldCkKICAgICAgICAgOiBtX251bWJlck9mVXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZDbG9i
YmVyaW5nQ2hlY2tJc0VuYWJsZWQobnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2Ji
ZXJpbmdDaGVja0lzRW5hYmxlZCkKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgICAg
ICwgbV91c2VkUmVnaXN0ZXJzKHNldCkKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQob2Zmc2V0ID09IG1fb2Zmc2V0KTsKICAgICB9CiAgICAgCi0gICAgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KCkgY29uc3QKKyAgICBDb2RlUHRyPE9wZXJh
dGlvblB0clRhZz4gY2FsbFRhcmdldCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAodHlwZSgp
ID09IFR5cGU6OkRpcmVjdCkKICAgICAgICAgICAgIHJldHVybiBtX2NhbGxUYXJnZXQ7CkBAIC05
Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAg
IFNsb3dQYXRoQ2FsbEtleSB3aXRoQ2FsbFRhcmdldChGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGNhbGxUYXJnZXQpCisgICAgU2xvd1BhdGhDYWxsS2V5IHdpdGhDYWxsVGFyZ2V0KENvZGVQ
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIFNs
b3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0ZXJzKCksIGNhbGxUYXJnZXQsIG51bWJlck9mVXNlZEFy
Z3VtZW50UmVnaXN0ZXJzSWZDbG9iYmVyaW5nQ2hlY2tJc0VuYWJsZWQoKSwgb2Zmc2V0KCksIGlu
ZGlyZWN0T2Zmc2V0KCkpOwogICAgIH0KQEAgLTEzNSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICAvLyBtX251bWJlck9mVXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZDbG9iYmVyaW5n
Q2hlY2tJc0VuYWJsZWQgaXMgaW50ZW50aW9uYWxseSBub3QgaW5jbHVkZWQgYmVjYXVzZSBpdCB3
aWxsIGFsd2F5cyBiZSAwCiAgICAgICAgIC8vIHVubGVzcyBPcHRpb25zOjpjbG9iYmVyQWxsUmVn
c0luRlRMSUNTbG93UGF0aCgpIGlzIHNldCwgYW5kIE9wdGlvbnM6OmNsb2JiZXJBbGxSZWdzSW5G
VExJQ1Nsb3dQYXRoKCkgaXMgb25seSBzZXQgaW4gZGVidWdnaW5nIHVzZSBjYXNlcy4KLSAgICAg
ICAgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKGNhbGxUYXJnZXQoKS5leGVjdXRhYmxlQWRk
cmVzcygpKSArIG1fb2Zmc2V0ICsgbV91c2VkUmVnaXN0ZXJzLmhhc2goKSArIGluZGlyZWN0T2Zm
c2V0KCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIFB0
ckhhc2g8dm9pZCo+OjpoYXNoKGNhbGxUYXJnZXQoKS50YWdnZWRQdHIoKSkgKyBtX29mZnNldCAr
IG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkgKyBpbmRpcmVjdE9mZnNldCgpICsgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHR5cGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTQ1LDcgKzE0NSw3IEBA
IHByaXZhdGU6CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlw
ZT4obV90eXBlKTsgfQogCiAgICAgdW5pb24gewotICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+IG1fY2FsbFRhcmdldCB7IH07CisgICAgICAgIENvZGVQdHI8T3BlcmF0aW9uUHRy
VGFnPiBtX2NhbGxUYXJnZXQgeyB9OwogICAgICAgICBpbnQzMl90IG1faW5kaXJlY3RPZmZzZXQ7
CiAgICAgfTsKICAgICBzaXplX3QgbV9udW1iZXJPZlVzZWRBcmd1bWVudFJlZ2lzdGVyc0lmQ2xv
YmJlcmluZ0NoZWNrSXNFbmFibGVkIDogOCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVGh1bmtzLmNwcAppbmRleCAyMjE5YzE0NjIzMjEuLjRkNTZhNGExOTUwNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcApAQCAtNDYsNyArNDYsNyBAQCBlbnVtIGNs
YXNzIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgewogfTsKIAogc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJpY0dlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcigKLSAgICBWTSYgdm0sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZ2Vu
ZXJhdGlvbkZ1bmN0aW9uLCBQdHJUYWcgcmVzdWx0VGFnLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNp
Z25lZCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1l
bnQgZnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCkKKyAgICBWTSYgdm0sIENvZGVQ
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBnZW5lcmF0aW9uRnVuY3Rpb24sIFB0clRhZyByZXN1bHRUYWcs
IGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRT
dGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCBmcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVt
ZW50KQogewogICAgIEFzc2VtYmx5SGVscGVycyBqaXQobnVsbHB0cik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFRodW5rcy5oCmluZGV4IGVmN2E0MTE4NzFjNC4uM2ZhOWU4NzNlZWQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZ3VtZW50Pgogc3RydWN0IFRodW5rTWFwIHsKICAgICB0
eXBlZGVmIEtleVR5cGVBcmd1bWVudCBLZXlUeXBlOwogICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlU
eXBlLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBUb1RodW5rTWFwOwot
ICAgIHR5cGVkZWYgSGFzaE1hcDxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+
LCBLZXlUeXBlPiBGcm9tVGh1bmtNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPENvZGVQdHI8SklU
VGh1bmtQdHJUYWc+LCBLZXlUeXBlPiBGcm9tVGh1bmtNYXA7CiAgICAgCiAgICAgVG9UaHVua01h
cCBtX3RvVGh1bms7CiAgICAgRnJvbVRodW5rTWFwIG1fZnJvbVRodW5rOwpAQCAtNjcsNyArNjcs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlSWZOZWNl
c3NhcnkoCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci10eXBlbmFtZSBNYXBUeXBl
OjpLZXlUeXBlIGtleUZvclRodW5rKE1hcFR5cGUmIG1hcCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBwdHIpCit0eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRo
dW5rKE1hcFR5cGUmIG1hcCwgQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gcHRyKQogewogICAgIHR5
cGVuYW1lIE1hcFR5cGU6OkZyb21UaHVua01hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX2Zyb21U
aHVuay5maW5kKHB0cik7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtYXAubV9mcm9tVGh1
bmsuZW5kKCkpOwpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBnZW5l
cmF0ZUlmTmVjZXNzYXJ5KHZtLCBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENh
bGxUaHVua0dlbmVyYXRvcik7CiAgICAgfQogCi0gICAgU2xvd1BhdGhDYWxsS2V5IGtleUZvclNs
b3dQYXRoQ2FsbFRodW5rKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gcHRy
KQorICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlGb3JTbG93UGF0aENhbGxUaHVuayhDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiBwdHIpCiAgICAgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2Nr
IH07CiAgICAgICAgIHJldHVybiBrZXlGb3JUaHVuayhtX3Nsb3dQYXRoQ2FsbFRodW5rcywgcHRy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCmluZGV4IGExMTFlM2U4MzdiMS4uOTFhMzk2MmViN2VjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTEwNjIsNyArMTA2
Miw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09iamVjdCoKICAgICAgICAgQVNTRVJUKGppdENvZGUgPT0g
Y2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgp
LnB0cigpKTsKICAgICAgICAgcmVzdWx0ID0gaml0Q29kZS0+ZXhlY3V0ZSgmdm0sICZwcm90b0Nh
bGxGcmFtZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2Rl
KHZtRW50cnlUb05hdGl2ZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpKTsKKyAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6
ZGVjb2RlKHZtRW50cnlUb05hdGl2ZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24udGFnZ2VkUHRy
KCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CiAKQEAgLTExNDEsNyArMTE0MSw3IEBAIEpT
T2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNPCiAgICAgICAgIEFTU0VSVChqaXRDb2RlID09IGNvbnN0cnVj
dERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0
KCkucHRyKCkpOwogICAgICAgICByZXN1bHQgPSBqaXRDb2RlLT5leGVjdXRlKCZ2bSwgJnByb3Rv
Q2FsbEZyYW1lKTsKICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNv
ZGUodm1FbnRyeVRvTmF0aXZlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uLmV4ZWN1dGFi
bGVBZGRyZXNzKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CisgICAgICAgIHJlc3VsdCA9IEpT
VmFsdWU6OmRlY29kZSh2bUVudHJ5VG9OYXRpdmUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rp
b24udGFnZ2VkUHRyKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CiAKICAgICAgICAgaWYgKExJ
S0VMWSghdGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQuaXNPYmplY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5oCmluZGV4IDc0MDc2MjZhNzJkNi4uZjhkMGNiNTkzZDlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAt
MTA5LDcgKzEwOSw3IEBAIHVzaW5nIEpTT3JXYXNtSW5zdHJ1Y3Rpb24gPSBzdGQ6OnZhcmlhbnQ8
Y29uc3QgSlNJbnN0cnVjdGlvbiosIGNvbnN0IFdhc21JbnN0cnVjCiAgICAgICAgIGJvb2wgbV92
YWxpZCB7IGZhbHNlIH07CiAgICAgICAgIEhhbmRsZXJUeXBlIG1fdHlwZTsKICNpZiBFTkFCTEUo
SklUKQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4gbV9uYXRpdmVDb2RlOworICAgICAgICBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
IG1fbmF0aXZlQ29kZTsKICNlbmRpZgogCiAgICAgICAgIEpTT3JXYXNtSW5zdHJ1Y3Rpb24gbV9j
YXRjaFBDRm9ySW50ZXJwcmV0ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5jcHAKaW5kZXggNTNkOGQxZWE2YWU3Li44MGIwMTg5ZGE1OWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHQKICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hh
ZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7CiB9
CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBl
cnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQordm9pZCBDQ2FsbEhlbHBl
cnM6OmVtaXRKSVRDb2RlT3ZlcihDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29w
ZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2Ny
aXB0aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZW1pdENvZGUoaml0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCmluZGV4IGU4YWU5ZmMxODE0Mi4u
ODUxNjdhNjA1YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgK
QEAgLTkzOCw3ICs5MzgsNyBAQCBwdWJsaWM6CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50
ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAg
IHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIAotICAgIHN0YXRp
YyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0
clRhZz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiwgY29uc3QgY2hh
ciopOworICAgIHN0YXRpYyB2b2lkIGVtaXRKSVRDb2RlT3ZlcihDb2RlUHRyPEpTSW50ZXJuYWxQ
dHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4sIGNvbnN0IGNo
YXIqKTsKIAogICAgIHZvaWQgZW1pdENUSVRodW5rUHJvbG9ndWUoYm9vbCByZXR1cm5BZGRyZXNz
QWxyZWFkeVRhZ2dlZCA9IGZhbHNlKTsKICAgICB2b2lkIGVtaXRDVElUaHVua0VwaWxvZ3VlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cAppbmRleCA4N2M3OWU2ZDk5MjMuLmMxMGViYzU3MzBhZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCkBAIC0yNjAsNyArMjYwLDcg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG8KICAgICBsb2NhbDIubGluaygmaml0KTsKICAgICBq
aXQucmV0KCk7CiAKLSAgICBhdXRvIHN0dWJCYXNlQ29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxMaW5rQnVmZmVyUHRyVGFnPih0YWdDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KHN0dWJC
YXNlKSk7CisgICAgYXV0byBzdHViQmFzZUNvZGVQdHIgPSBDb2RlUHRyPExpbmtCdWZmZXJQdHJU
YWc+KHRhZ0NvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4oc3R1YkJhc2UpKTsKICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoaml0LCBzdHViQmFzZUNvZGVQdHIsIHN0dWJTaXplLCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CiAgICAgLy8gV2UgZG9uJ3QgdXNlIEZJTkFMSVpFX0NPREUoKSBm
b3IgdHdvIHJlYXNvbnMuCiAgICAgLy8gVGhlIGZpcnN0IGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0
aGUgd3JpdGVhYmxlIGFkZHJlc3MsIGFzIGRpc2Fzc2VtYmxlZCBpbnN0cnVjdGlvbnMsCkBAIC0y
ODUsNyArMjg1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gQUxXQVlTX0lOTElORSBqaXRXcml0ZVRodW5rR2VuZXJhdG8KICAgICBmdW5jdGlvbkFzSW50
IC09IDE7CiAgICAgZnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbkFz
SW50KTsKICNlbmRpZgotICAgIGF1dG8gY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4odGFnQ0Z1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihmdW5jdGlvbikp
OworICAgIGF1dG8gY29kZVB0ciA9IENvZGVQdHI8SklUVGh1bmtQdHJUYWc+KHRhZ0NGdW5jdGlv
blB0cjxKSVRUaHVua1B0clRhZz4oZnVuY3Rpb24pKTsKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGNvZGVQ
dHIpOwogfQogI2VuZGlmIC8vIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQpA
QCAtMzM2LDcgKzMzNiw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6ZVNl
cGFyYXRlZFdYSGVhcHModm9pZCogc3R1YkJhc2UsIHNpemVfdCBzdHViCiAgICAgbWVtc2V0X3Mo
JndyaXRhYmxlQWRkciwgc2l6ZW9mKHdyaXRhYmxlQWRkciksIDAsIHNpemVvZih3cml0YWJsZUFk
ZHIpKTsKIAogI2lmIEVOQUJMRShTRVBBUkFURURfV1hfSEVBUCkKLSAgICBnX2pzY0NvbmZpZy5q
aXRXcml0ZVNlcGFyYXRlSGVhcHMgPSByZWludGVycHJldF9jYXN0PEpJVFdyaXRlU2VwYXJhdGVI
ZWFwc0Z1bmN0aW9uPih3cml0ZVRodW5rLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICBnX2pzY0NvbmZpZy5qaXRXcml0ZVNlcGFyYXRlSGVhcHMgPSByZWludGVycHJldF9jYXN0PEpJ
VFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uPih3cml0ZVRodW5rLmNvZGUoKS50YWdnZWRQdHIo
KSk7CiAjZW5kaWYKIH0KIApAQCAtNzU0LDcgKzc1NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CiAgICAgICAgICAgICAgICAgYXV0byBuZWFyVGFp
bENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKGppdCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihjdXJyZW50SXNs
YW5kKSwgaXNsYW5kU2l6ZUluQnl0ZXMsIExpbmtCdWZmZXI6OlByb2ZpbGU6Okp1bXBJc2xhbmQs
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBDb2RlUHRyPE5vUHRyVGFnPihjdXJyZW50SXNsYW5kKSwg
aXNsYW5kU2l6ZUluQnl0ZXMsIExpbmtCdWZmZXI6OlByb2ZpbGU6Okp1bXBJc2xhbmQsIEpJVENv
bXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSB1c2Ug
dGhpcyB0byBhcHBlYXNlIHRoZSBhc3NlcnRpb24gdGhhdCB3ZSdyZSBub3QgZmluYWxpemluZyBv
biBhIGNvbXBpbGVyIHRocmVhZC4gSW4gdGhpcyBzaXR1YXRpb24sIGl0J3MKQEAgLTEyODMsNyAr
MTI4Myw3IEBAIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlOjpjcmVhdGVJbXBsKHNpemVfdCBzaXplSW5CCiAgICAgdm9pZCoga2V5ID0gaml0X2hl
YXBfdHJ5X2FsbG9jYXRlKHNpemVJbkJ5dGVzKTsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlKE1lbW9yeVB0cjo6bWFrZUZyb21SYXdQb2ludGVyKGtleSksIGppdF9oZWFwX2dldF9zaXpl
KGtleSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUo
TWVtb3J5UHRyOjpmcm9tVW50YWdnZWRQdHIoa2V5KSwgaml0X2hlYXBfZ2V0X3NpemUoa2V5KSkp
OwogfQogCiBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlOjp+RXhlY3V0YWJsZU1lbW9yeUhhbmRsZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVNZW1vcnlI
YW5kbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZS5oCmluZGV4IDY4MGVkMGI1ZWYwYy4uNjIyMDM3M2IxYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVNZW1vcnlIYW5kbGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVNZW1vcnlIYW5kbGUuaApAQCAtMjYsNyArMjYs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBVU0UoTElCUEFTX0pJVF9IRUFQKSAmJiBFTkFCTEUo
SklUKQotI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yUHRyLmg+CisjaW5jbHVkZSA8d3RmL0Nv
ZGVQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNlbHNlCiAj
aW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaD4KQEAgLTM5LDcgKzM5LDcgQEAgY2xh
c3MgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxF
eGVjdXRhYmxlTWVtb3J5SGFuZGwKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hF
QVBfSURFTlRJRklFUihFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKTsKIAogcHVibGljOgotICAgIHVz
aW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8V1RGOjpIYW5kbGVNZW1vcnlQdHJUYWc+
OworICAgIHVzaW5nIE1lbW9yeVB0ciA9IENvZGVQdHI8V1RGOjpIYW5kbGVNZW1vcnlQdHJUYWc+
OwogCiAgICAgLy8gRG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5IC0gZm9yIHByb3BlciBhY2NvdW50
aW5nIGl0J3MgbmVjZXNzYXJ5IHRvIGNhbGwKICAgICAvLyBFeGVjdXRhYmxlQWxsb2NhdG9yOjph
bGxvY2F0ZSgpLgpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAKICAgICBNZW1vcnlQdHIgZW5k
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBNZW1vcnlQdHI6Om1ha2VGcm9tUmF3UG9p
bnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihlbmRBc0ludGVnZXIoKSkpOworICAgICAgICBy
ZXR1cm4gTWVtb3J5UHRyOjpmcm9tVW50YWdnZWRQdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZW5kQXNJbnRlZ2VyKCkpKTsKICAgICB9CiAKICAgICB1aW50cHRyX3Qgc3RhcnRBc0ludGVnZXIo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGJkYjdiN2I4ZGU3Zi4uY2E4
Njg1OTRiMDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC02MSwxMCArNjEsMTAg
QEAgU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTERGR0NvbXBp
bGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTEIzQ29tcGlsZVRpbWU7CiAKLXZvaWQgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKK3ZvaWQgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29kZVB0
cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoQ2FsbCgKLSAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNz
UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJu
QWRkcmVzcykpLAorICAgICAgICBDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+
KENvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz46OmZyb21UYWdnZWRQdHIoY29uc3RfY2FzdDx2
b2lkKj4ocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkpLAogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCkBAIC05OTUsNyArOTk1LDcgQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKICAg
ICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEo
KSk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhB
cml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5
Q2hlY2spOworICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7CiAgICAgbV9q
aXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlD
aGVjaykpOwogCiAgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBGaXhlZFZlY3RvcjxV
bmxpbmtlZENhbGxMaW5rSW5mbz4obV91bmxpbmtlZENhbGxzLnNpemUoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAppbmRleCAxZDgxMDEyMjE1YjEuLjg1ZjYyYTE4ZjFjMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCkBAIC03MiwxMyArNzIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdGVt
cGxhdGU8UHRyVGFnIHRhZz4KICAgICBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGZyb207Ci0gICAgICAgIEZ1bmN0aW9uUHRyPHRhZz4gY2FsbGVlOwor
ICAgICAgICBDb2RlUHRyPHRhZz4gY2FsbGVlOwogCiAgICAgICAgIENhbGxSZWNvcmQoKQogICAg
ICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGZyb20sIEZ1bmN0aW9uUHRyPHRhZz4gY2FsbGVlKQorICAgICAgICBDYWxsUmVjb3JkKE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGZyb20sIENvZGVQdHI8dGFnPiBjYWxsZWUpCiAgICAgICAgICAg
ICA6IGZyb20oZnJvbSkKICAgICAgICAgICAgICwgY2FsbGVlKGNhbGxlZSkKICAgICAgICAgewpA
QCAtMTQ4LDcgKzE0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87CiAgICAgfTsKIAotICAgIHZvaWQgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOworICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBu
ZXdDYWxsZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVQgZmluYWwgOiBwdWJsaWMgSlNJbnRl
cmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwpAQCAtMTk4
LDcgKzE5OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBw
cml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCi0gICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uKQorICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgQ29kZVB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CiAgICAgICAgICAgICBDYWxs
IGZ1bmN0aW9uQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgIG1fZmFy
Q2FsbHMuYXBwZW5kKEZhckNhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbi5yZXRhZ2dl
ZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsKQEAgLTIxMSw3ICsyMTEsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogCiAjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAg
Q2FsbCBhcHBlbmRDYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorICAgICAgICBDYWxsIGFwcGVuZENhbGxXaXRoU2xv
d1BhdGhSZXR1cm5UeXBlKGNvbnN0IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikK
ICAgICAgICAgewogICAgICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsV2l0aFNsb3dQ
YXRoUmV0dXJuVHlwZShPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICAgICAgbV9mYXJDYWxscy5h
cHBlbmQoRmFyQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJh
dGlvblB0clRhZz4oKSkpOwpAQCAtNjkzLDEzICs2OTMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5
dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICB2b2lk
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyk7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9s
bGJhY2tPbkV4Y2VwdGlvbihjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4pOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdChjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShj
b25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiwgY29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgICAgIHZv
aWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAg
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmluZGV4
IDRlZDQ3NTFhNzE3Yy4uMWRmOWI1YTg2YjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTc0Niw3ICs3NDYsNyBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBKU0luc3Ry
dWN0aW9uKgogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0g
bGFiZWwoKTsKICAgICBhZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS5l
eGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVT
dGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgIHNpemVfdCBzaXplID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkudGFnZ2VkUHRyPGNoYXIqPigpIC0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZVN0YXJ0KS50YWdnZWRQdHI8Y2hhcio+KCk7CiAgICAg
ICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwogICAgIH0pOwogI2VuZGlm
CkBAIC04MTMsNyArODEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEpTSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CiAgICAgYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBzaXpl
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hh
cio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRy
ZXNzPGNoYXIqPigpOworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihpbmxpbmVFbmQpLnRhZ2dlZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihp
bmxpbmVTdGFydCkudGFnZ2VkUHRyPGNoYXIqPigpOwogICAgICAgICBtYXRoSUMtPm1fZ2VuZXJh
dGVkQ29kZVNpemUgKz0gc2l6ZTsKICAgICB9KTsKICNlbmRpZgpAQCAtODUxLDcgKzg1MSw3IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRo
SUMsIGNvbnN0IEpTSW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAg
YXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CiAgICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHNsb3dQYXRoRW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsK
KyAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQp
LnRhZ2dlZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0
KS50YWdnZWRQdHI8Y2hhcio+KCk7CiAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6
ZSArPSBzaXplOwogICAgIH0pOwogI2VuZGlmCkBAIC05MTIsNyArOTEyLDcgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEpTSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQ
YXRoRW5kID0gbGFiZWwoKTsKICAgICBhZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xv
d1BhdGhFbmQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKHNsb3dQYXRoU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBz
aXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkudGFnZ2VkUHRy
PGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLnRhZ2dlZFB0
cjxjaGFyKj4oKTsKICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRlZENvZGVTaXplICs9IHNpemU7
CiAgICAgfSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCmluZGV4
IDY4MTU5YmRmNjljNi4uOTQ0MDE0NTBjMzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNjAsMTEgKzE2MCwxMSBAQCBKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRD
b2RlV2l0aENvZGVSZWYoKQogdm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpleGVjdXRhYmxlQWRk
cmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYp
OwotICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFnPihtX3JlZi5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+
KG1fcmVmLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAgICAgaWYgKCFvZmZzZXQpCi0gICAgICAgIHJl
dHVybiBtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgcmV0dXJuIG1f
cmVmLmNvZGUoKS50YWdnZWRQdHIoKTsKIAotICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0g
dW50YWdDb2RlUHRyPGNoYXIqLCBKU0VudHJ5UHRyVGFnPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NvZGVQdHI8
Y2hhciosIEpTRW50cnlQdHJUYWc+KG1fcmVmLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAgICAgcmV0
dXJuIHRhZ0NvZGVQdHI8SlNFbnRyeVB0clRhZz4oZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQp
OwogfQogCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpkYXRh
QWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB1bnNpZ25lZCBKSVRDb2RlV2l0aENvZGVS
ZWY6Om9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChtX3JlZik7Ci0gICAgaW50cHRyX3QgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4ocG9pbnRlckludG9Db2RlKSAtIG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzczxpbnRw
dHJfdD4oKTsKKyAgICBpbnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90
Pihwb2ludGVySW50b0NvZGUpIC0gbV9yZWYuY29kZSgpLnRhZ2dlZFB0cjxpbnRwdHJfdD4oKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
ZXN1bHQpKSA9PSByZXN1bHQpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVz
dWx0KTsKIH0KQEAgLTIwMCw3ICsyMDAsNyBAQCBEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2Rl
KEpJVFR5cGUgaml0VHlwZSkKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShK
SVRDb2RlOjpDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSBqaXRUeXBlLCBKSVRDb2RlOjpTaGFy
ZUF0dHJpYnV0ZSBzaGFyZUF0dHJpYnV0ZSkKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUo
SklUQ29kZTo6Q29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZWYsIENvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUgaml0VHlwZSwgSklUQ29kZTo6U2hhcmVBdHRyaWJ1
dGUgc2hhcmVBdHRyaWJ1dGUpCiAgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYocmVmLCBqaXRUeXBl
LCBzaGFyZUF0dHJpYnV0ZSkKICAgICAsIG1fd2l0aEFyaXR5Q2hlY2sod2l0aEFyaXR5Q2hlY2sp
CiB7CkBAIC0yMDgsNyArMjA4LDcgQEAgRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRD
b2RlOjpDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVAKICAgICBBU1NF
UlQobV93aXRoQXJpdHlDaGVjayk7CiB9CiAKLURpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUo
SklUQ29kZTo6Q29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZWYsIEpJVENvZGU6OkNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUgaml0VHlwZSwgSW50cmluc2ljIGlu
dHJpbnNpYywgSklUQ29kZTo6U2hhcmVBdHRyaWJ1dGUgc2hhcmVBdHRyaWJ1dGUpCitEaXJlY3RK
SVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVENvZGU6OkNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVm
LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlIGppdFR5cGUs
IEludHJpbnNpYyBpbnRyaW5zaWMsIEpJVENvZGU6OlNoYXJlQXR0cmlidXRlIHNoYXJlQXR0cmli
dXRlKQogICAgIDogSklUQ29kZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlwZSwgc2hhcmVBdHRyaWJ1
dGUpCiAgICAgLCBtX3dpdGhBcml0eUNoZWNrKHdpdGhBcml0eUNoZWNrKQogewpAQCAtMjIxLDcg
KzIyMSw3IEBAIERpcmVjdEpJVENvZGU6On5EaXJlY3RKSVRDb2RlKCkKIHsKIH0KIAotdm9pZCBE
aXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZkZvckRGRyhKSVRDb2RlOjpDb2RlUmVmPEpT
RW50cnlQdHJUYWc+IHJlZiwgSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJp
dHlDaGVjaykKK3ZvaWQgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkcoSklU
Q29kZTo6Q29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZWYsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4g
d2l0aEFyaXR5Q2hlY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVmKTsKICAgICBtX3Jl
ZiA9IHJlZjsKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxp
emVDb2RlUmVmRm9yREZHKEpJVENvZGU6OkNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVmLAogICAg
IEFTU0VSVChtX3dpdGhBcml0eUNoZWNrKTsKIH0KIAotSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBEaXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0
eSkKK0NvZGVQdHI8SlNFbnRyeVB0clRhZz4gRGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwo
QXJpdHlDaGVja01vZGUgYXJpdHkpCiB7CiAgICAgc3dpdGNoIChhcml0eSkgewogICAgIGNhc2Ug
QXJpdHlDaGVja05vdFJlcXVpcmVkOgpAQCAtMjU5LDcgKzI1OSw3IEBAIE5hdGl2ZUpJVENvZGU6
On5OYXRpdmVKSVRDb2RlKCkKIHsKIH0KIAotSklUQ29kZTo6Q29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBOYXRpdmVKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkKK0Nv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gTmF0aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlD
aGVja01vZGUgYXJpdHkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHN3aXRj
aCAoYXJpdHkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKaW5kZXggYTllNmI4YWFl
MTA5Li5lMzllZjRjNDc1MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCkBAIC02
Nyw3ICs2Nyw2IEBAIHN0YXRpY19hc3NlcnQoV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIoc3RhdGlj
X2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxKSVRUeXBlCiAKIGNsYXNzIEpJVENvZGUgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUQ29kZT4gewogcHVibGljOgotICAgIHRlbXBs
YXRlPFB0clRhZyB0YWc+IHVzaW5nIENvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
PjsKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiB1c2luZyBDb2RlUmVmID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPHRhZz47CiAKICAgICBzdGF0aWMgQVNDSUlMaXRlcmFsIHR5cGVOYW1lKEpJVFR5
cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlSW5saW5l
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlSW5saW5lcy5oCmluZGV4IGJj
ZmJjZmY5NWFhYy4uNjY4ZTFkODgwZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlSW5saW5lcy5oCkBAIC0zOCw3ICszOCw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBK
SVRDb2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIHByb3RvQ2FsbEZyYW1lKQog
ICAgICAgICB2bS0+ZGlkRW50ZXJWTSA9IHRydWU7CiAgICAgfSk7CiAgICAgdm9pZCogZW50cnlB
ZGRyZXNzOwotICAgIGVudHJ5QWRkcmVzcyA9IGFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5
KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIGVudHJ5QWRkcmVzcyA9IGFkZHJlc3NGb3JDYWxs
KE11c3RDaGVja0FyaXR5KS50YWdnZWRQdHIoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFs
dWU6OmRlY29kZSh2bUVudHJ5VG9KYXZhU2NyaXB0KGVudHJ5QWRkcmVzcywgdm0sIHByb3RvQ2Fs
bEZyYW1lKSk7CiAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpID8ganNOdWxsKCkgOiByZXN1
bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0
aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uLmgKaW5kZXgg
YWQ4OWM2M2FmZmQzLi4wMDdlMTFjZTcyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29tcGlsYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvbXBpbGF0aW9uLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIENvbXBpbGF0aW9uKENvbXBpbGF0aW9uJiYpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIH5Db21waWxhdGlvbigpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVENvbXBp
bGF0aW9uUHRyVGFnPiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmLmNvZGUoKTsgfQor
ICAgIENvZGVQdHI8SklUQ29tcGlsYXRpb25QdHJUYWc+IGNvZGUoKSBjb25zdCB7IHJldHVybiBt
X2NvZGVSZWYuY29kZSgpOyB9CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVENvbXBpbGF0
aW9uUHRyVGFnPiBjb2RlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmOyB9CiAgICAgCiAg
ICAgQ1N0cmluZyBkaXNhc3NlbWJseSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJlZi5kaXNhc3Nl
bWJseSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fz
c2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5j
cHAKaW5kZXggYTE4ZmQ2M2YxMjc5Li44MDIzZGM0ZDcyYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgSklURGlz
YXNzZW1ibGVyOjp+SklURGlzYXNzZW1ibGVyKCkKIAogdm9pZCBKSVREaXNhc3NlbWJsZXI6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKIHsKLSAgICBtX2Nv
ZGVTdGFydCA9IGxpbmtCdWZmZXIuZW50cnlwb2ludDxEaXNhc3NlbWJseVB0clRhZz4oKS51bnRh
Z2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgbV9jb2RlU3RhcnQgPSBsaW5rQnVmZmVyLmVu
dHJ5cG9pbnQ8RGlzYXNzZW1ibHlQdHJUYWc+KCkudW50YWdnZWRQdHIoKTsKICAgICBtX2NvZGVF
bmQgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KG1fY29kZVN0YXJ0KSArIGxpbmtCdWZmZXIuc2l6
ZSgpOwogCiAgICAgZHVtcEhlYWRlcihvdXQsIGxpbmtCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggNzhhN2IwMDYxYjliLi5mNzUxZDlk
Y2MwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApA
QCAtNjEsNyArNjEsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKICAgICBpZiAoaGFuZGxlci5tX3ZhbGlkKSB7CiAgICAgICAgIGNhdGNoUENGb3JJ
bnRlcnByZXRlciA9IGhhbmRsZXIubV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXI7CiAjaWYgRU5BQkxF
KEpJVCkKLSAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci5tX25hdGl2ZUNvZGUuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci5tX25hdGl2ZUNv
ZGUudGFnZ2VkUHRyKCk7CiAjZWxzZQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICNlcnJvciBX
QVNNIHJlcXVpcmVzIHRoZSBKSVQsIHNvIHRoaXMgc2VjdGlvbiBhc3N1bWVzIHdlIGFyZSBpbiBK
UwpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKICAgICAgICAgICAgIGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRDb2RlUHRy
KHBjLT5vcGNvZGVJRCgpKTsKICNlbmRpZgogICAgIH0gZWxzZQotICAgICAgICBjYXRjaFJvdXRp
bmUgPSBMTEludDo6aGFuZGxlVW5jYXVnaHRFeGNlcHRpb24odm0pLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOworICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTEludDo6aGFuZGxlVW5jYXVnaHRF
eGNlcHRpb24odm0pLmNvZGUoKS50YWdnZWRQdHIoKTsKIAogICAgIEFTU0VSVChiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihjYWxsRnJhbWUpIDwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odm0udG9w
RW50cnlGcmFtZSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4
IGY5NTUzOTFlYThjZi4uMWFkNzhmMmM5NmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaApAQCAtOTEsNyArOTEsNyBAQCBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6
OmVtaXROYWtlZE5lYXJDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IHRhcmdldCkKIHsKICAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7Ci0gICAgbV9uZWFyQ2Fs
bHMuYXBwZW5kKE5lYXJDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgdGFyZ2V0LnJldGFnZ2VkPEpTSW50
ZXJuYWxQdHJUYWc+KCkudG9GdW5jdGlvblB0cigpKSk7CisgICAgbV9uZWFyQ2FsbHMuYXBwZW5k
KE5lYXJDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgdGFyZ2V0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJU
YWc+KCkpKTsKICAgICByZXR1cm4gbmFrZWRDYWxsOwogfQogCkBAIC05OSw3ICs5OSw3IEBAIEFM
V0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkTmVhclRhaWxDYWxsKENvZGVQdHI8
Tm9QdHJUYWc+IHRhcmdldCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2Fs
bCA9IG5lYXJUYWlsQ2FsbCgpOwotICAgIG1fbmVhckNhbGxzLmFwcGVuZChOZWFyQ2FsbFJlY29y
ZChuYWtlZENhbGwsIHRhcmdldC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLnRvRnVuY3Rp
b25QdHIoKSkpOworICAgIG1fbmVhckNhbGxzLmFwcGVuZChOZWFyQ2FsbFJlY29yZChuYWtlZENh
bGwsIHRhcmdldC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIG5h
a2VkQ2FsbDsKIH0KIApAQCAtMTE4LDcgKzExOCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OnVwZGF0ZVRvcENhbGxGcmFtZSgpCiAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOwog
fQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQogewogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MgZnVu
Y3Rpb24pCiAgICAgZXhjZXB0aW9uQ2hlY2soKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQorQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1l
Um9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rp
b24pCiB7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7IC8vIFRoZSBjYWxsZWUgaXMgcmVzcG9u
c2libGUgZm9yIHNldHRpbmcgdG9wQ2FsbEZyYW1lIHRvIHRoZWlyIGNhbGxlcgogICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKQEAgLTE0MSw3ICsx
NDEsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQogCi1B
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChjb25zdCBDb2RlUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CkBAIC0xNTUsNyArMTU1LDcgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQo
QWRkcmVzcyBmdW4KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1BTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIGNvbnN0IENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUTWF0aElDLmgKaW5kZXggMmFiNjg0Nzc1NDFmLi4yMWIwNDI0ZTQ5NmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxp
bmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gY2Fs
bFJlcGxhY2VtZW50KQorICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsUmVwbGFjZW1lbnQpCiAgICAgewog
ICAgICAgICBhdXRvIGxpbmtKdW1wVG9PdXRPZkxpbmVTbmlwcGV0ID0gWyZdICgpIHsKICAgICAg
ICAgICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1faW5saW5lU3RhcnQgPSBzdGFydDsKIAogICAgICAgICBtX2lubGlu
ZUVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihzdGF0ZS5mYXN0
UGF0aEVuZCk7Ci0gICAgICAgIEFTU0VSVChtX2lubGluZUVuZC51bnRhZ2dlZEV4ZWN1dGFibGVB
ZGRyZXNzKCkgPiBtX2lubGluZVN0YXJ0LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgICAgIEFTU0VSVChtX2lubGluZUVuZC51bnRhZ2dlZFB0cigpID4gbV9pbmxpbmVTdGFydC51
bnRhZ2dlZFB0cigpKTsKIAogICAgICAgICBtX3Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KHN0YXRlLnNsb3dQYXRoQ2FsbCk7CiAg
ICAgICAgIG1fc2xvd1BhdGhTdGFydExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KHN0YXRlLnNsb3dQYXRoU3RhcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggYmM5MDczNThjYzU5Li43ODI5ZjI3ZWI3N2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNzI2LDcgKzcyNiw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19o
YW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2
bSk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvdykp
OworICAgIHBhdGNoQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb24sIG9wZXJh
dGlvblRocm93KTsKICAgICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRo
dW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9wX3Rocm93X2hhbmRsZXIiKTsKIH0KIApAQCAtMTMxMSwx
MCArMTMxMSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiAgICAgaml0LnJldCgpOwogCiAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25X
cml0ZUJhcnJpZXJDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldy
aXRlQmFycmllclNsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbldyaXRlQmFycmllckNhbGwsIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoT3B0aW9uczo6dXNlREZHSklUKCkp
Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uT3B0aW1pemVDYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk9wdGltaXplKSk7CisgICAgICAgIHBhdGNo
QnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PcHRpbWl6ZUNhbGwsIG9wZXJh
dGlvbk9wdGltaXplKTsKICNlbmRpZgogICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfZW50ZXJfaGFuZGxlciIpOwogfQpA
QCAtMTU1OSw3ICsxNTU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHYKICAgICBKdW1wIGV4
Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmsp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbkhhbmRsZVRyYXBzKSk7CisgICAgcGF0Y2hCdWZmZXIubGluazxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbiwgb3BlcmF0aW9uSGFuZGxlVHJhcHMpOwogICAgIHBhdGNo
QnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwog
ICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJC
YXNlbGluZTogb3BfY2hlY2tfdHJhcHNfaGFuZGxlciIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMDg3MTA3ZTE2NzY2Li4xNGY0ODcyMjhi
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAt
MTgyLDcgKzE4Miw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NYXRlcmlh
bGl6ZVJlbW90ZUZ1bmN0aW9uVGFyZ2V0Q29kZSwgU2xvd1BhdGhSCiAgICAgICAgICAgICBmdW5j
dGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2
bSwgdGFyZ2V0RnVuY3Rpb24sIHNjb3BlLCBDb2RlRm9yQ2FsbCwgY29kZUJsb2NrU2xvdCk7CiAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZVJlc3VsdChu
dWxscHRyLCBudWxscHRyKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dChleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKENvZGVGb3JDYWxsLCBNdXN0Q2hlY2tBcml0eSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgY29kZUJsb2NrU2xvdCk7CisgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihDb2RlRm9yQ2FsbCwgTXVzdENoZWNr
QXJpdHkpLnRhZ2dlZFB0cigpLCBjb2RlQmxvY2tTbG90KTsKICAgICB9CiB9CiAKQEAgLTIwNDQs
NyArMjA0NCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWl6ZSwg
U2xvd1BhdGhSZXR1cm5UeXBlLCAoVk0qIHZtUG9pbnRlciwKIAogICAgICAgICBjb2RlQmxvY2st
Pm9wdGltaXplU29vbigpOwogICAgICAgICBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkt
PnNldERpZE9wdGltaXplKFRyaVN0YXRlOjpUcnVlKTsKLSAgICAgICAgdm9pZCogdGFyZ2V0UEMg
PSB1bnRhZ0NvZGVQdHI8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIoREZHOjpvc3JFbnRy
eVRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHZv
aWQqIHRhcmdldFBDID0gdW50YWdDb2RlUHRyPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHVi
KERGRzo6b3NyRW50cnlUaHVua0dlbmVyYXRvcikuY29kZSgpLnRhZ2dlZFB0cigpKTsKICAgICAg
ICAgdGFyZ2V0UEMgPSB0YWdDb2RlUHRyV2l0aFN0YWNrUG9pbnRlckZvckpJVENhbGwodGFyZ2V0
UEMsIGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGFyZ2V0UEMsIGRh
dGFCdWZmZXIpOwogICAgIH0KQEAgLTIwOTgsOCArMjA5OCw4IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsIFNsb3dQ
YXRoUmV0CiAgICAgc3dpdGNoIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CiAg
ICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6IHsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5
ID0gREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIG9w
dGltaXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChlbnRyeS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSwgb3B0aW1pemVkUmVwbGFj
ZW1lbnQpOworICAgICAgICBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0g
REZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIG9wdGlt
aXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChlbnRyeS50YWdnZWRQdHI8Y2hhcio+KCksIG9wdGltaXplZFJlcGxhY2VtZW50KTsKICAg
ICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC0yNzY2LDE0ICsyNzY2LDE0IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBjaGFyKiwgKEpTR2xvYmFsCiAKICAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KS5tX21pbiA9PSBtaW4pOwotICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3Rp
RGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRh
YmxlLm1fY3RpRGVmYXVsdC50YWdnZWRQdHIoKTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkg
ewogICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcoa2V5KTsKICAgICAgICAgaWYg
KHN0cmluZy0+bGVuZ3RoKCkgPT0gMSkgewogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gc3Ry
aW5nLT52YWx1ZShnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxl
LmN0aUZvclZhbHVlKG1pbiwgdmFsdWVbMF0pLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
ICAgICByZXN1bHQgPSBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZShtaW4sIHZhbHVlWzBdKS50YWdn
ZWRQdHIoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjc5MywxMSArMjc5MywxMSBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBl
LCBjaGFyKiwgKFZNKiB2bVBvaQogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0Owog
ICAgIGlmIChrZXkuaXNJbnQzMigpKQotICAgICAgICByZXN1bHQgPSBsaW5rZWRUYWJsZS5jdGlG
b3JWYWx1ZShtaW4sIGtleS5hc0ludDMyKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
IHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKG1pbiwga2V5LmFzSW50MzIoKSkudGFn
Z2VkUHRyKCk7CiAgICAgZWxzZSBpZiAoa2V5LmlzRG91YmxlKCkgJiYga2V5LmFzRG91YmxlKCkg
PT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oa2V5LmFzRG91YmxlKCkpKQotICAgICAgICByZXN1bHQg
PSBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZShtaW4sIHN0YXRpY19jYXN0PGludDMyX3Q+KGtleS5h
c0RvdWJsZSgpKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgcmVzdWx0ID0gbGlua2Vk
VGFibGUuY3RpRm9yVmFsdWUobWluLCBzdGF0aWNfY2FzdDxpbnQzMl90PihrZXkuYXNEb3VibGUo
KSkpLnRhZ2dlZFB0cigpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gbGlua2VkVGFibGUu
bV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHJlc3VsdCA9IGxpbmtl
ZFRhYmxlLm1fY3RpRGVmYXVsdC50YWdnZWRQdHIoKTsKICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8
SlNTd2l0Y2hQdHJUYWc+KHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHJlc3VsdCk7CiB9CkBAIC0yODIwLDkgKzI4MjAsOSBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKEpT
R2xvYgogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwog
CiAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
Y29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICAgICAgcmVzdWx0ID0gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUodW5saW5rZWRUYWJsZSwgdmFs
dWUpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0
aUZvclZhbHVlKHVubGlua2VkVGFibGUsIHZhbHVlKS50YWdnZWRQdHIoKTsKICAgICB9IGVsc2UK
LSAgICAgICAgcmVzdWx0ID0gbGlua2VkVGFibGUuY3RpRGVmYXVsdCgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0aURlZmF1bHQoKS50YWdnZWRQ
dHIoKTsKIAogICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU1N3aXRjaFB0clRhZz4ocmVzdWx0KTsK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggNWFlOGYyYzcz
MmY3Li5hZmI5YTE5ZjhmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0xNjYwLDcgKzE2NjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KFZNJiB2bQogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQuanVtcCgpOwogCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lKSk7Cisg
ICAgcGF0Y2hCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbiwgb3BlcmF0aW9u
UmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9u
Q2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9U
SFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNv
bHZlX3Njb3BlIik7CiB9CkBAIC0xODkwLDcgKzE4OTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihW
TSYgdgogICAgIEp1bXAganVtcFRvSGFuZGxlciA9IGppdC5qdW1wKCk7CiAKICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRGcm9tU2NvcGUpKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uLCBvcGVyYXRpb25HZXRGcm9t
U2NvcGUpOwogICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIocG9wVGh1bmtTdGFja1By
ZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhqdW1wVG9IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwpAQCAtMjA5
MCw3ICsyMDkwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKICAgICBKdW1wIGV4Y2VwdGlv
bkNoZWNrID0gaml0Lmp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvblB1dFRvU2NvcGUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uLCBvcGVyYXRpb25QdXRUb1Njb3BlKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1
cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6
IHNsb3dfb3BfcHV0X3RvX3Njb3BlIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU2l6ZVN0YXRpc3RpY3MuY3BwCmluZGV4IGE2YTMwNTBmYzgxNC4uZDJkMWMxZWJkYzk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmNw
cApAQCAtNDYsNyArNDYsNyBAQCB2b2lkIEpJVFNpemVTdGF0aXN0aWNzOjptYXJrRW5kKE1hcmtl
ciBtYXJrZXIsIENDYWxsSGVscGVycyYgaml0KQogewogICAgIENDYWxsSGVscGVyczo6TGFiZWwg
ZW5kID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOwogICAgIGppdC5hZGRMaW5rVGFz
ayhbPSwgdGhpc10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNp
emUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KGVuZCkudW50YWdnZWRFeGVjdXRh
YmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obWFy
a2VyLnN0YXJ0KS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBz
aXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oZW5kKS51bnRhZ2dl
ZFB0cjxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obWFya2VyLnN0
YXJ0KS51bnRhZ2dlZFB0cjxjaGFyKj4oKTsKICAgICAgICAgbGlua0J1ZmZlci5hZGRNYWluVGhy
ZWFkRmluYWxpemF0aW9uVGFzayhbPSwgdGhpc10gewogICAgICAgICAgICAgYXV0byYgZW50cnkg
PSBtX2RhdGEuYWRkKG1hcmtlci5pZGVudGlmaWVyLCBFbnRyeSB7IH0pLml0ZXJhdG9yLT52YWx1
ZTsKICAgICAgICAgICAgICsrZW50cnkuY291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJSb3V0aW5lLmgKaW5kZXggMzdhMDIyZGU1MjI3Li4yMDFiZGRjOTg5MjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKQEAgLTYxLDggKzYxLDcg
QEAgcHVibGljOgogICAgIAogICAgIC8vIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBD
b2RlUHRyIHRvIHNvbWVvbmUgd2hvIGluc2lzdHMgb24gdGFraW5nCiAgICAgLy8gYSBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+LgotICAgIHN0YXRpYyBSZWY8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZVNl
bGZNYW5hZ2VkUm91dGluZSgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPiByYXdDb2RlUG9pbnRlcikKKyAgICBzdGF0aWMgUmVmPEpJVFN0dWJSb3V0
aW5lPiBjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRh
Zz4gcmF3Q29kZVBvaW50ZXIpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBK
SVRTdHViUm91dGluZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYocmF3Q29kZVBvaW50ZXIpKSk7CiAgICAgfQpAQCAt
NzUsOSArNzQsOSBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGNodXJuLgogICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4mIGNvZGUoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGU7IH0KICAgICAKLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiBhc0NvZGVQdHIoUmVmPEpJVFN0dWJSb3V0aW5lPiYmIHN0dWJS
b3V0aW5lKQorICAgIHN0YXRpYyBDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBhc0NvZGVQ
dHIoUmVmPEpJVFN0dWJSb3V0aW5lPiYmIHN0dWJSb3V0aW5lKQogICAgIHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiByZXN1bHQgPSBzdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKTsKKyAgICAgICAgQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRh
Zz4gcmVzdWx0ID0gc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCk7CiAgICAgICAgIEFTU0VSVCgh
IXJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRUaHVua3MuY3BwCmluZGV4IDc5MTg1NDdkMzdjNy4uZWViYzUwZGZkYTIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCkBAIC05MywzNyArOTMsMzcg
QEAgaW5saW5lIGJvb2wgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFs
KGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWIKICAgICByZXR1cm4gYUV4ZWN1dGFibGUuZnVuY3Rp
b24oKSA9PSBzdGQ6OmdldDwwPihiKSAmJiBhRXhlY3V0YWJsZS5jb25zdHJ1Y3RvcigpID09IHN0
ZDo6Z2V0PDE+KGIpICYmIGFFeGVjdXRhYmxlLmltcGxlbWVudGF0aW9uVmlzaWJpbGl0eSgpID09
IHN0ZDo6Z2V0PDI+KGIpICYmIGFFeGVjdXRhYmxlLm5hbWUoKSA9PSBzdGQ6OmdldDwzPihiKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0
aU5hdGl2ZUNhbGwoVk0mIHZtKQorQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpj
dGlOYXRpdmVDYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwog
ICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVDYWxsR2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRp
dmVDb25zdHJ1Y3QoVk0mIHZtKQorQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpj
dGlOYXRpdmVDb25zdHJ1Y3QoVk0mIHZtKQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQo
KSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcikuY29k
ZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5r
czo6Y3RpTmF0aXZlVGFpbENhbGwoVk0mIHZtKQorQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklU
VGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6
OnVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlVGFpbENhbGxHZW5lcmF0
b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBK
SVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSYgdm0pCitDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNh
dmVkVGFncyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICBy
ZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9y
KS5jb2RlKCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklU
VGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChWTSYgdm0pCitDb2RlUHRyPEpJVFRodW5r
UHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNJiB2bSkKIHsKICAg
ICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBpbnRl
cm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0
cnVjdChWTSYgdm0pCitDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVy
bmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mIHZtKQogewogICAgIEFTU0VSVChPcHRpb25zOjp1c2VK
SVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RH
ZW5lcmF0b3IpLmNvZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCmluZGV4
IDhlOTg4NzhmOWU4ZS4uM2ZiYzgyZjBmY2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VGh1bmtzLmgKQEAgLTU2LDEyICs1NiwxMiBAQCBwdWJsaWM6CiAgICAgSklUVGh1bmtzKCk7CiAg
ICAgfkpJVFRodW5rcygpIGZpbmFsOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPiBjdGlOYXRpdmVDYWxsKFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVDb25zdHJ1Y3QoVk0mKTsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsKFZNJik7Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVUYWlsQ2FsbFdp
dGhvdXRTYXZlZFRhZ3MoVk0mKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQ
dHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJik7
CisgICAgQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlQ2FsbChWTSYpOworICAgIENv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNvbnN0cnVjdChWTSYpOworICAgIENvZGVQ
dHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsKFZNJik7CisgICAgQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNJik7Cisg
ICAgQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0mKTsK
KyAgICBDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0
KFZNJik7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGN0aVN0
dWIoVk0mLCBUaHVua0dlbmVyYXRvcik7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBjdGlTbG93UGF0aEZ1bmN0aW9uU3R1YihWTSYsIFNsb3dQYXRoRnVuY3Rpb24p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCmluZGV4IGIwNmUw
YmZlNjhmMi4uYWI0ZTAyMjY5N2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1Nsb3dQYXRoQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93
UGF0aENhbGwuY3BwCkBAIC05Miw3ICs5Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUU2xvd1BhdGhDYWxsOjpnZW5lcmF0ZVRodW5rKFZNJiB2bSwgU2xvCiAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAoKTsKIAogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihzbG93UGF0aEZ1bmN0aW9uKSk7CisgICAgcGF0Y2hC
dWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KGNhbGwsIHNsb3dQYXRoRnVuY3Rpb24pOwogICAg
IHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOwogICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJTbG93UGF0aENhbGwiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
cGVjaWFsaXplZFRodW5rSklULmgKaW5kZXggNTk2YjBjMDUyMjE4Li5mOGJkYjkyZDU0OTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBA
IC0xNTMsNyArMTUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXQoKTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBmaW5hbGl6ZShNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGZh
bGxiYWNrLCBjb25zdCBjaGFyKiB0aHVua0tpbmQpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gZmluYWxpemUoQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gZmFs
bGJhY2ssIGNvbnN0IGNoYXIqIHRodW5rS2luZCkKICAgICAgICAgewogICAgICAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpTcGVjaWFsaXplZFRodW5rKTsKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
bV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KGZhbGxiYWNrKSk7
CkBAIC0xNjQsMTIgKzE2NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBBc3N1
bWVzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiB1c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBmaXJz
dCBhcmd1bWVudAogICAgICAgICAvLyBhbmQgcmV0dXJuIHZhbHVlLiBMaWtlIGFueSBzZW5zaWJs
ZSBhcmNoaXRlY3R1cmUgd291bGQuCi0gICAgICAgIHZvaWQgY2FsbERvdWJsZVRvRG91YmxlKEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAgICAgIHZvaWQgY2FsbERv
dWJsZVRvRG91YmxlKENvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAg
ewogICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY2FsbChPcGVyYXRp
b25QdHJUYWcpLCBmdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBjYWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5n
UmV0dXJuKEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCisgICAgICAgIHZv
aWQgY2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybihDb2RlUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghaXNYODYoKSkKICAg
ICAgICAgICAgICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwpAQCAt
MTk2LDcgKzE5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9mYWlsdXJlczsKLSAgICAgICAgVmVjdG9y
PHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+Pj4gbV9jYWxsczsK
KyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBDb2RlUHRyPE9wZXJhdGlvblB0clRhZz4+
PiBtX2NhbGxzOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAppbmRleCA3NmFmYzJiNjQzMmYuLjgyMmNlZWE2MzY2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtNTUsNyAr
NTUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2Vw
dGlvbkdlbmVyYXRvcihWTSYgdm0pCiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0p
OwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlu
a0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhv
cGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhj
ZXB0aW9uSGFuZGxlcikpOworICAgIHBhdGNoQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb24sIG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwogICAgIHJldHVybiBG
SU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRp
b24iKTsKIH0KIApAQCAtNzEsNyArNzEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYQogICAg
IGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJ
VGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJh
bWUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uLCBv
cGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKTsKICAgICByZXR1
cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhj
ZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrIik7CiB9CiAKQEAgLTMxNyw3ICszMTcsNyBAQCBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtG
b3IoVk0mIHZtLCBDYWxsTW9kZSBtbwogICAgIC8vIE51bGxTZXR0ZXJGdW5jdGlvblR5cGUgZG9l
cyBub3QgZ2V0IHRoZSBmYXN0IHBhdGggc3VwcG9ydC4gQnV0IGl0IGlzIE9LIHNpbmNlIHVzaW5n
IE51bGxTZXR0ZXJGdW5jdGlvblR5cGUgaXMgZXh0cmVtZWx5IHJhcmUuCiAgICAgbm90SlNGdW5j
dGlvbi5saW5rKCZqaXQpOwogICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUeXBl
KEdQUkluZm86OnJlZ1QwLCBJbnRlcm5hbEZ1bmN0aW9uVHlwZSkpOwotICAgIHZvaWQqIGV4ZWN1
dGFibGVBZGRyZXNzID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2lu
ZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHZt
LmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpLnRhZ2dlZFB0cigpOwog
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlQWRkcmVz
cyksIEdQUkluZm86OnJlZ1Q0KTsKIAogICAgIGlzTmF0aXZlLmxpbmsoJmppdCk7CkBAIC00MjUs
NyArNDI1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bmF0aXZlRm9yR2VuZXJhdG9yKFZNJiB2bSwgVGh1bmtGdW4KICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjIsIGV4ZWN1dGFi
bGVPZmZzZXRUb0Z1bmN0aW9uKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICAgICAgICAg
IGF1dG8gb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4odm1FbnRyeUhvc3RGdW5jdGlvbikpOworICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNhbGwsIHZtRW50cnlIb3N0
RnVuY3Rpb24pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgZXhl
Y3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBIb3N0RnVuY3Rpb25QdHJUYWcpOwpAQCAtNDM2LDcg
KzQzNiw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5h
dGl2ZUZvckdlbmVyYXRvcihWTSYgdm0sIFRodW5rRnVuCiAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBJbnRlcm5hbEZ1
bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyKTsKICAgICAgICAgICAgIGF1dG8gb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJh
dGlvblB0clRhZyk7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlv
bkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odm1FbnRyeUhvc3RGdW5jdGlvbikp
OworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbkNhbGwsIHZtRW50cnlIb3N0RnVuY3Rpb24pOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmFyZ3VtZW50R1BSMiwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlv
bkZvcihraW5kKSksIEhvc3RGdW5jdGlvblB0clRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludERhdGEuY3BwCmluZGV4IDY3MDc3NTdiYzVjNC4uMTc5ODg4OWZkM2FkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDcgKzk0LDcg
QEAgdm9pZCBpbml0aWFsaXplKCkKIAogI2lmIEVOQUJMRShKSVRfQ0FHRSkKICAgICBpZiAoT3B0
aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpqaXRDYWdlUHRyKV0gPSBqaXRDYWdlUHRyVGh1bmso
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQu
Z2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6aml0Q2FnZVB0cildID0gaml0Q2Fn
ZVB0clRodW5rKCkuY29kZSgpLnRhZ2dlZFB0cigpOwogI2VuZGlmCiAKICNkZWZpbmUgSU5JVElB
TElaRV9KU19HQVRFKG5hbWUsIHRhZykgXApAQCAtMTExLDkgKzExMSw5IEBAIHZvaWQgaW5pdGlh
bGl6ZSgpCiAgICAgICAgICAgICBjb2RlUmVmMTYuY29uc3RydWN0KExMSW50OjpnZXRXaWRlMTZD
b2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oanNfdHJhbXBvbGluZV8jI25hbWUpKTsgXAog
ICAgICAgICAgICAgY29kZVJlZjMyLmNvbnN0cnVjdChMTEludDo6Z2V0V2lkZTMyQ29kZVJlZjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+KGpzX3RyYW1wb2xpbmVfIyNuYW1lKSk7IFwKICAgICAgICAg
fSBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEdhdGU6Om5hbWUpXSA9IGNvZGVSZWY4LmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOyBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNvZGVSZWYxNi5nZXQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsgXAotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNfd2lkZTMyKV0gPSBjb2RlUmVmMzIuZ2V0
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxp
bnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bmFtZSldID0gY29kZVJlZjgu
Z2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOyBcCisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50Lmdh
dGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNvZGVS
ZWYxNi5nZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7IFwKKyAgICAgICAgZ19qc2NDb25maWcubGxp
bnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bmFtZSMjX3dpZGUzMildID0g
Y29kZVJlZjMyLmdldCgpLmNvZGUoKS50YWdnZWRQdHIoKTsgXAogICAgIH0gd2hpbGUgKDApOwog
CiAgICAgSlNDX0pTX0dBVEVfT1BDT0RFUyhJTklUSUFMSVpFX0pTX0dBVEUpCkBAIC0xMzQsOSAr
MTM0LDkgQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICAgICAgICAgIGNvZGVSZWYxNi5jb25zdHJ1
Y3QoTExJbnQ6OmdldFdpZGUxNkNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPih3YXNtX3Ry
YW1wb2xpbmVfIyNuYW1lKSk7IFwKICAgICAgICAgICAgIGNvZGVSZWYzMi5jb25zdHJ1Y3QoTExJ
bnQ6OmdldFdpZGUzMkNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPih3YXNtX3RyYW1wb2xp
bmVfIyNuYW1lKSk7IFwKICAgICAgICAgfSBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50Lmdh
dGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUpXSA9IGNvZGVSZWY4LmdldCgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyBcCi0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50
LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI193aWRlMTYpXSA9IGNv
ZGVSZWYxNi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgXAotICAgICAgICBnX2pz
Y0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNf
d2lkZTMyKV0gPSBjb2RlUmVmMzIuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IFwK
KyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
R2F0ZTo6bmFtZSldID0gY29kZVJlZjguZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOyBcCisgICAg
ICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6
Om5hbWUjI193aWRlMTYpXSA9IGNvZGVSZWYxNi5nZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7IFwK
KyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
R2F0ZTo6bmFtZSMjX3dpZGUzMildID0gY29kZVJlZjMyLmdldCgpLmNvZGUoKS50YWdnZWRQdHIo
KTsgXAogICAgIH0gd2hpbGUgKDApOwogCiAgICAgSlNDX1dBU01fR0FURV9PUENPREVTKElOSVRJ
QUxJWkVfV0FTTV9HQVRFKQpAQCAtMTQ4LDU0ICsxNDgsNTQgQEAgdm9pZCBpbml0aWFsaXplKCkK
ICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICAgICAgY29kZVJlZi5jb25z
dHJ1Y3QoY3JlYXRlSlNHYXRlVGh1bmsocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJU
YWcsIE9wZXJhdGlvblB0clRhZz4oJnZtRW50cnlUb0phdmFTY3JpcHRHYXRlQWZ0ZXIpLCBKU0Vu
dHJ5UHRyVGFnLCAidm1FbnRyeVRvSmF2YVNjcmlwdCIpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
KCZ2bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGluZSkpKSk7Ci0gICAgICAgIGdfanNjQ29uZmln
LmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnZtRW50cnlUb0phdmFT
Y3JpcHQpXSA9IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
ICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPjo6ZnJvbVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlv
blB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1w
b2xpbmUpKSkpOworICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0
PHVuc2lnbmVkPihHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0KV0gPSBjb2RlUmVmLmdldCgpLmNv
ZGUoKS50YWdnZWRQdHIoKTsKICAgICB9CiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVy
RGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBj
b2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgICAgICBjb2Rl
UmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgdHJ1ZSkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9t
RXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRhaWxDYWxsSlNFbnRyeVRyYW1wb2xpbmUpKSkpOwotICAg
ICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRl
Ojp0YWlsQ2FsbEpTRW50cnlQdHJUYWcpXT0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
Q29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+Ojpmcm9tVGFnZ2VkUHRyKHJldGFnQ29kZVB0
cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2Fs
bEpTRW50cnlUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1h
cFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5UHRyVGFnKV09IGNv
ZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOwogICAgIH0KICAgICB7CiAgICAgICAgIHN0
YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAg
ICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRy
VGFnLCB0cnVlKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0
KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5j
dGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxKU0VudHJ5U2xvd1Bh
dGhUcmFtcG9saW5lKSkpKTsKLSAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5U2xvd1BhdGhQdHJUYWcpXSA9
IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBj
b2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPjo6ZnJvbVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywg
TmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5l
KSkpKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5U2xvd1BhdGhQdHJUYWcpXSA9IGNvZGVSZWYuZ2V0
KCkuY29kZSgpLnRhZ2dlZFB0cigpOwogICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5
TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz4+IGNvZGVSZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAg
IGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFnLCBmYWxz
ZSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVh
dGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJU
YWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRy
YW1wb2xpbmUpKSkpOwotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlQdHJUYWcpXT0g
Y29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIGNv
ZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJU
YWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJU
YWc+Ojpmcm9tVGFnZ2VkUHRyKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9s
aW5lKSkpKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVS
ZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOwogICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAg
ICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGV4Y2VwdGlvbkhhbmRsZXJHYXRlVGh1bmsoKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21F
eGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0
aXZlVG9KSVRHYXRlUHRyVGFnPigmZXhjZXB0aW9uSGFuZGxlclRyYW1wb2xpbmUpKSkpOwotICAg
ICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRl
OjpleGNlcHRpb25IYW5kbGVyKV0gPSBjb2RlUmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihDb2Rl
UHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmZyb21UYWdnZWRQdHIocmV0YWdDb2RlUHRyPHZv
aWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJmV4Y2VwdGlvbkhh
bmRsZXJUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6ZXhjZXB0aW9uSGFuZGxlcildID0gY29kZVJlZi5n
ZXQoKS5jb2RlKCkudGFnZ2VkUHRyKCk7CiAgICAgfQogICAgIHsKICAgICAgICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICAg
ICAgY29kZVJlZi5jb25zdHJ1Y3QocmV0dXJuRnJvbUxMSW50R2F0ZVRodW5rKCkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz4oJnJldHVybkZyb21MTEludFRyYW1wb2xpbmUpKSkpOwotICAgICAgICBn
X2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpyZXR1
cm5Gcm9tTExJbnQpXSA9IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKENvZGVQdHI8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPjo6ZnJvbVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENG
dW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmcmV0dXJuRnJvbUxMSW50VHJh
bXBvbGluZSkpKSk7CisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEdhdGU6OnJldHVybkZyb21MTEludCldID0gY29kZVJlZi5nZXQoKS5jb2Rl
KCkudGFnZ2VkUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7Ci0g
ICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdh
dGU6Omxvb3BPU1JFbnRyeSldID0gbG9vcE9TUkVudHJ5R2F0ZVRodW5rKCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OmVudHJ5T1NSRW50cnkpXSA9IGVudHJ5T1NSRW50cnlHYXRl
VGh1bmsoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgZ19qc2NDb25maWcu
bGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6d2FzbU9TUkVudHJ5KV0g
PSB3YXNtT1NSRW50cnlHYXRlVGh1bmsoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAg
ICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0
ZTo6bG9vcE9TUkVudHJ5KV0gPSBsb29wT1NSRW50cnlHYXRlVGh1bmsoKS5jb2RlKCkudGFnZ2Vk
UHRyKCk7CisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEdhdGU6OmVudHJ5T1NSRW50cnkpXSA9IGVudHJ5T1NSRW50cnlHYXRlVGh1bmsoKS5j
b2RlKCkudGFnZ2VkUHRyKCk7CisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Ondhc21PU1JFbnRyeSldID0gd2FzbU9TUkVudHJ5R2F0
ZVRodW5rKCkuY29kZSgpLnRhZ2dlZFB0cigpOwogICAgIH0KIAogI2RlZmluZSBJTklUSUFMSVpF
X1RBR19BTkRfVU5UQUdfVEhVTktTKG5hbWUpIFwKQEAgLTIwOSw4ICsyMDksOCBAQCB2b2lkIGlu
aXRpYWxpemUoKQogICAgICAgICAgICAgdGFnQ29kZVJlZi5jb25zdHJ1Y3QoTExJbnQ6OmdldENv
ZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPihqc190cmFtcG9saW5lXyMjbmFtZSMjX3RhZykp
OyBcCiAgICAgICAgICAgICB1bnRhZ0NvZGVSZWYuY29uc3RydWN0KExMSW50OjpnZXRDb2RlUmVm
PE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oanNfdHJhbXBvbGluZV8jI25hbWUjI191bnRhZykpOyBc
CiAgICAgICAgIH0gXAotICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNUYWcpXSA9IHRhZ0NvZGVSZWYuZ2V0KCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7IFwKLSAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1h
cFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6bmFtZSMjVW50YWcpXSA9IHVudGFnQ29kZVJl
Zi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgXAorICAgICAgICBnX2pzY0NvbmZp
Zy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjpuYW1lIyNUYWcpXSA9
IHRhZ0NvZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOyBcCisgICAgICAgIGdfanNjQ29u
ZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6Om5hbWUjI1VudGFn
KV0gPSB1bnRhZ0NvZGVSZWYuZ2V0KCkuY29kZSgpLnRhZ2dlZFB0cigpOyBcCiAgICAgfSB3aGls
ZSAoMCk7CiAKICAgICBJTklUSUFMSVpFX1RBR19BTkRfVU5UQUdfVEhVTktTKGxsaW50X2Z1bmN0
aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dERhdGEuaAppbmRleCAxNTExNWVlMDdkMjQuLjhiZmVmMjU1Yzc4MiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludERhdGEuaApAQCAtNjYsOSArNjYsOSBAQCBwcml2YXRlOgogICAg
IGZyaWVuZCBjb25zdCBPcGNvZGUqIGdldE9wY29kZUFkZHJlc3MoT3Bjb2RlSUQpOwogICAgIGZy
aWVuZCBjb25zdCBPcGNvZGUqIGdldE9wY29kZVdpZGUxNkFkZHJlc3MoT3Bjb2RlSUQpOwogICAg
IGZyaWVuZCBjb25zdCBPcGNvZGUqIGdldE9wY29kZVdpZGUzMkFkZHJlc3MoT3Bjb2RlSUQpOwot
ICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
PiBnZXRDb2RlUHRyKE9wY29kZUlEKTsKLSAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiBmcmllbmQg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29kZVB0cihPcGNvZGVJRCk7Ci0g
ICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+
IGdldFdpZGUzMkNvZGVQdHIoT3Bjb2RlSUQpOworICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IGZy
aWVuZCBDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNvZGVJRCk7CisgICAgdGVtcGxhdGU8UHRy
VGFnIHRhZz4gZnJpZW5kIENvZGVQdHI8dGFnPiBnZXRXaWRlMTZDb2RlUHRyKE9wY29kZUlEKTsK
KyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPiBmcmllbmQgQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNv
ZGVQdHIoT3Bjb2RlSUQpOwogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+IGZyaWVuZCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8dGFnPiBnZXRDb2RlUmVmKE9wY29kZUlEKTsKIH07CiAKQEAgLTE0Nywx
MiArMTQ3LDEyIEBAIGlubGluZSBjb25zdCBPcGNvZGUqIGdldE9wY29kZVdpZGUzMkFkZHJlc3Mo
T3Bjb2RlSUQgaWQpCiAjZW5kaWYKIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KLUFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0ckltcGwoY29uc3QgT3Bjb2Rl
IG9wY29kZSwgY29uc3Qgdm9pZCogb3Bjb2RlQWRkcmVzcykKK0FMV0FZU19JTkxJTkUgQ29kZVB0
cjx0YWc+IGdldENvZGVQdHJJbXBsKGNvbnN0IE9wY29kZSBvcGNvZGUsIGNvbnN0IHZvaWQqIG9w
Y29kZUFkZHJlc3MpCiB7CiAgICAgdm9pZCogb3Bjb2RlVmFsdWUgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihvcGNvZGUpOwogICAgIHZvaWQqIHVudGFnZ2VkT3Bjb2RlID0gdW50YWdBZGRyZXNz
RGl2ZXJzaWZpZWRDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnPihvcGNvZGVWYWx1ZSwgb3Bjb2RlQWRk
cmVzcyk7CiAgICAgdm9pZCogcmV0YWdnZWRPcGNvZGUgPSB0YWdDb2RlUHRyPHRhZz4odW50YWdn
ZWRPcGNvZGUpOwotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6Y3JlYXRl
RnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnZ2VkT3Bjb2RlKTsKKyAgICByZXR1cm4gQ29kZVB0
cjx0YWc+Ojpmcm9tVGFnZ2VkUHRyKHJldGFnZ2VkT3Bjb2RlKTsKIH0KIAogI2lmIEVOQUJMRShB
Uk02NEUpICYmICFFTkFCTEUoQ09NUFVURURfR09UT19PUENPREVTKQpAQCAtMTYwLDcgKzE2MCw3
IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cklt
cGwoY29uc3QgT3Bjb2RlIG9wY29kZSwgY29uCiAjZW5kaWYKIAogdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihP
cGNvZGVJRCBvcGNvZGVJRCkKK0FMV0FZU19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldENvZGVQdHIo
T3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykK
ICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZUFkZHJlc3Mob3Bjb2RlSUQpOwpA
QCAtMTcxLDcgKzE3MSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRh
Zz4gZ2V0Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKIH0KIAogdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29k
ZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKK0FMV0FZU19JTkxJTkUgQ29kZVB0cjx0YWc+IGdldFdp
ZGUxNkNvZGVQdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dP
VE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUxNkFk
ZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMTgyLDcgKzE4Miw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkK
IH0KIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPHRhZz4gZ2V0V2lkZTMyQ29kZVB0cihPcGNvZGVJRCBvcGNvZGVJRCkKK0FMV0FZU19J
TkxJTkUgQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7
CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9w
Y29kZSA9IGdldE9wY29kZVdpZGUzMkFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMjE1LDkgKzIxNSw5
IEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRDb2Rl
RnVuY3Rpb25QdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldENvZGVQdHI8dGFnPihvcGNv
ZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
TExJbnRDb2RlPihnZXRDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsKICNlbHNl
Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRDb2RlUHRyPHRhZz4o
b3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0
ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjI1LDkgKzIyNSw5IEBAIHRlbXBsYXRl
PFB0clRhZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRXaWRlMTZDb2RlRnVuY3Rp
b25QdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykKLSAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUxNkNvZGVQdHI8dGFnPihvcGNv
ZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
TExJbnRDb2RlPihnZXRXaWRlMTZDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dlZFB0cigpKTsK
ICNlbHNlCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMTZD
b2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0V2lkZTE2Q29kZVB0cjx0YWc+
KG9wY29kZUlEKS50ZW1wbGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjM1LDkg
KzIzNSw5IEBAIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBn
ZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElM
RVIoTVNWQykKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUz
MkNvZGVQdHI8dGFnPihvcGNvZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2Rl
SUQpLnRhZ2dlZFB0cigpKTsKICNlbHNlCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJ
bnRDb2RlPihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0
V2lkZTMyQ29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5k
aWYKIH0KIApAQCAtMjkwLDcgKzI5MCw3IEBAIGlubGluZSBjb25zdCBPcGNvZGUqIGdldE9wY29k
ZVdpZGUzMkFkZHJlc3MoV2FzbU9wY29kZUlEIGlkKQogI2VuZGlmCiAKIHRlbXBsYXRlPFB0clRh
ZyB0YWc+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldENvZGVQ
dHIoV2FzbU9wY29kZUlEIG9wY29kZUlEKQorQUxXQVlTX0lOTElORSBDb2RlUHRyPHRhZz4gZ2V0
Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dP
VE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZUFkZHJlc3Mo
b3Bjb2RlSUQpOwpAQCAtMzAxLDcgKzMwMSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB9CiAKIHRl
bXBsYXRlPFB0clRhZyB0YWc+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0
YWc+IGdldFdpZGUxNkNvZGVQdHIoV2FzbU9wY29kZUlEIG9wY29kZUlEKQorQUxXQVlTX0lOTElO
RSBDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7
CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9w
Y29kZSA9IGdldE9wY29kZVdpZGUxNkFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMzEyLDcgKzMxMiw3
IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTE2Q29k
ZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB9CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci1B
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIo
V2FzbU9wY29kZUlEIG9wY29kZUlEKQorQUxXQVlTX0lOTElORSBDb2RlUHRyPHRhZz4gZ2V0V2lk
ZTMyQ29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVE
X0dPVE9fT1BDT0RFUykKICAgICBjb25zdCBPcGNvZGUqIG9wY29kZSA9IGdldE9wY29kZVdpZGUz
MkFkZHJlc3Mob3Bjb2RlSUQpOwpAQCAtMzQ0LDkgKzM0NCw5IEBAIHRlbXBsYXRlPFB0clRhZyB0
YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRDb2RlRnVuY3Rpb25QdHIoV2FzbU9wY29k
ZUlEIG9wY29kZUlEKQogewogI2lmIENPTVBJTEVSKE1TVkMpCi0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0Q29k
ZVB0cjx0YWc+KG9wY29kZUlEKS50YWdnZWRQdHIoKSk7CiAjZWxzZQotICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0
ZSBleGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTElu
dENvZGU+KGdldENvZGVQdHI8dGFnPihvcGNvZGVJRCkudGVtcGxhdGUgdGFnZ2VkUHRyKCkpOwog
I2VuZGlmCiB9CiAKQEAgLTM1NCw5ICszNTQsOSBAQCB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogQUxX
QVlTX0lOTElORSBMTEludENvZGUgZ2V0V2lkZTE2Q29kZUZ1bmN0aW9uUHRyKFdhc21PcGNvZGVJ
RCBvcGNvZGVJRCkKIHsKICNpZiBDT01QSUxFUihNU1ZDKQotICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PExMSW50Q29kZT4oZ2V0V2lkZTE2Q29kZVB0cjx0YWc+KG9wY29kZUlEKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdl
dFdpZGUxNkNvZGVQdHI8dGFnPihvcGNvZGVJRCkudGFnZ2VkUHRyKCkpOwogI2Vsc2UKLSAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUxNkNvZGVQdHI8dGFnPihv
cGNvZGVJRCkudGVtcGxhdGUgZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMTZDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRl
bXBsYXRlIHRhZ2dlZFB0cigpKTsKICNlbmRpZgogfQogCkBAIC0zNjQsOSArMzY0LDkgQEAgdGVt
cGxhdGU8UHRyVGFnIHRhZz4KIEFMV0FZU19JTkxJTkUgTExJbnRDb2RlIGdldFdpZGUzMkNvZGVG
dW5jdGlvblB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAjaWYgQ09NUElMRVIoTVNWQykK
LSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldFdpZGUzMkNvZGVQdHI8
dGFnPihvcGNvZGVJRCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8TExJbnRDb2RlPihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRhZ2dl
ZFB0cigpKTsKICNlbHNlCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TExJbnRDb2RlPihn
ZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpLnRlbXBsYXRlIGV4ZWN1dGFibGVBZGRyZXNz
KCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4oZ2V0V2lkZTMyQ29k
ZVB0cjx0YWc+KG9wY29kZUlEKS50ZW1wbGF0ZSB0YWdnZWRQdHIoKSk7CiAjZW5kaWYKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAppbmRl
eCBkZjY0NWQ4Yzc0YjYuLjRiMWI3ZDA0MzBkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgZXh0ZXJuICJD
IiB2b2lkIGpzVHJhbXBvbGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1Byb2xvZ3Vl
KHZvaWQpOwogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4KIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gZW50cnlwb2ludFRyYW1wb2xpbmUoUHRyVHlwZSBhZGRy
ZXNzKQogewotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENG
dW5jdGlvblB0clRhZywgSlNFbnRyeVB0clRhZz4oYWRkcmVzcykpKTsKKyAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYoQ29kZVB0cjxKU0VudHJ5UHRyVGFnPjo6ZnJvbVRhZ2dlZFB0cihyZXRhZ0NvZGVQdHI8dm9p
ZCosIENGdW5jdGlvblB0clRhZywgSlNFbnRyeVB0clRhZz4oYWRkcmVzcykpKTsKIH0KICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApp
bmRleCBkMzFmOWNkZTVkZTIuLmI2YjA3MDQ4NmJjOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0xNjYsMTQgKzE2NiwxNCBAQCBpbmxp
bmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkgeyByZXR1cgogI2RlZmluZSBMTElOVF9DQUxMX1RIUk9XKGdsb2JhbE9iamVj
dCwgZXhjZXB0aW9uVG9UaHJvdykgZG8geyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBfX2N0X2dsb2JhbE9iamVjdCA9IChnbG9iYWxPYmplY3QpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHRocm93RXhjZXB0aW9uKF9fY3Rf
Z2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRpb25Ub1Rocm93KTsgICAgICAgIFwKLSAg
ICAgICAgTExJTlRfQ0FMTF9FTkRfSU1QTChudWxscHRyLCBjYWxsVG9UaHJvdyh2bSkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBMTElOVF9DQUxMX0VORF9JTVBMKG51bGxwdHIsIGNhbGxUb1Rocm93
KHZtKS5jb2RlKCkudGFnZ2VkUHRyKCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyAgICAgICAg
ICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIExMSU5UX0NBTExfQ0hF
Q0tfRVhDRVBUSU9OKGdsb2JhbE9iamVjdCkgZG8geyAgICAgICAgICAgICAgIFwKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIF9fY2NlX2dsb2JhbE9iamVjdCA9IChnbG9iYWxPYmplY3QpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZG9FeGNlcHRpb25GdXp6aW5n
SWZFbmFibGVkKF9fY2NlX2dsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgIkxMSW50U2xvd1BhdGhz
L2NhbGwiLCBudWxscHRyKTsgXAogICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTExJTlRf
Q0FMTF9FTkRfSU1QTChudWxscHRyLCBjYWxsVG9UaHJvdyh2bSkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyBcCisgICAgICAgICAgICBMTElOVF9D
QUxMX0VORF9JTVBMKG51bGxwdHIsIGNhbGxUb1Rocm93KHZtKS5jb2RlKCkudGFnZ2VkUHRyKCks
IEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZp
bmUgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbFRhcmdl
dCwgY2FsbFRhcmdldFRhZykgZG8geyBcCkBAIC00MjUsNyArNDI1LDcgQEAgc3RhdGljIFNsb3dQ
YXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAq
bmFtZSwgRW50cnkKICAgICBpZiAoa2luZCA9PSBQcm9sb2d1ZSkKICAgICAgICAgTExJTlRfUkVU
VVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0
cik7CiAgICAgQVNTRVJUKGtpbmQgPT0gQXJpdHlDaGVjayk7Ci0gICAgTExJTlRfUkVUVVJOX1RX
Tyhjb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOworICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJs
b2NrLT5qaXRDb2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS50YWdnZWRQdHIo
KSwgbnVsbHB0cik7CiB9CiAjZWxzZSAvLyBFTkFCTEUoSklUKQogc3RhdGljIFNsb3dQYXRoUmV0
dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5
S2luZCkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikK
ICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIo
cGMpOwogICAgICAgICAqcHRyICs9IGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLm1f
YWN0aXZlVGhyZXNob2xkOwogICAgICAgICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVy
bkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkKLSAgICAgICAgICAgIExMSU5UX1JFVFVSTl9UV08o
TExJbnQ6OmZ1enplclJldHVybkVhcmx5RnJvbUxvb3BIaW50RW50cnlwb2ludCgpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CisgICAgICAgICAg
ICBMTElOVF9SRVRVUk5fVFdPKExMSW50OjpmdXp6ZXJSZXR1cm5FYXJseUZyb21Mb29wSGludEVu
dHJ5cG9pbnQoKS5jb2RlKCkudGFnZ2VkUHRyKCksIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsK
ICAgICB9CiAgICAgCiAgICAgCkBAIC01MDIsNyArNTAyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0wobG9vcF9vc3IpCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxv
Y2F0aW9uID0gY29kZU1hcC5maW5kKGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgIEFT
U0VSVChjb2RlTG9jYXRpb24pOwogCi0gICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRp
b24udGFnZ2VkUHRyKCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOwogICAgIAogICAgIExMSU5U
X1JFVFVSTl9UV08oanVtcFRhcmdldCwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOwpAQCAtMTg1
MCw3ICsxODUwLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgICAgIHZtLmVu
Y29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2Jq
ZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCgpLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgICAgICBE
aXNhbGxvd0dDIGRpc2FsbG93R0M7CiAgICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxl
ZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICAgICAg
TExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RD
YWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpT
RW50cnlQdHJUYWcpOworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0
LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29k
ZSgpLnRhZ2dlZFB0cigpLCBKU0VudHJ5UHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgc2xvd1BhdGhMb2coIkNhbGwgY2FsbGVlIGlzIG5vdCBhIGZ1bmN0aW9uOiAiLCBjYWxs
ZWUsICJcbiIpOwpAQCAtMTg3MCw3ICsxODcwLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlw
ZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwK
ICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5h
dGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3QoKSwgY2FsbGVlRnJh
bWUpOwogICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CiAgICAgICAgIGF1dG8qIGNhbGxl
clNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7Ci0g
ICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50Ojpn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2Jq
ZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCku
Y29kZSgpLnRhZ2dlZFB0cigpLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9CiAgICAgCiAgICAgc2xv
d1BhdGhMb2coIkNvbnN0cnVjdG9yIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2FsbGVl
LCAiXG4iKTsKQEAgLTE4OTIsMTEgKzE4OTIsMTEgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlw
ZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kK
ICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVB
c1ZhbHVlKTsKICAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CiAgICAgICAgIGlmIChj
YWxsZWVBc1ZhbHVlLmluaGVyaXRzPEludGVybmFsRnVuY3Rpb24+KCkpIHsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJ
SW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CisgICAgICAgICAgICBDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBv
bGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAg
ICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4o
Y29kZVB0ci50YWdnZWRQdHIoKSk7CiAgICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxl
ZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICAgICAg
TExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgICAgIExMSU5UX0NBTExfUkVU
VVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIudGFnZ2VkUHRyKCksIEpTRW50cnlQ
dHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCBoYW5kbGVIb3N0Q2FsbChjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOwogICAg
IH0KQEAgLTE5MDYsNyArMTkwNiw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBD
YWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAKICAgICBE
ZWZlclRyYXBzIGRlZmVyVHJhcHModm0pOyAvLyBXZSBjYW4ndCBqZXR0aXNvbiB0aGlzIGNvZGUg
aWYgd2UncmUgYWJvdXQgdG8gcnVuIGl0LgogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHI7CisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRy
OwogICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMzOQogICAgIGlmIChleGVjdXRhYmxlLT5pc0hv
c3RGdW5jdGlvbigpKQpAQCAtMTkzMiw5ICsxOTMyLDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9u
S2kKICAgICB9CiAKICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICBhc3NlcnRJc1RhZ2dlZFdp
dGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci50YWdnZWRQdHIoKSk7CiAgICAg
YXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJl
Z2lzdGVyczsKLSAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBj
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgIExMSU5UX0NB
TExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIudGFnZ2VkUHRyKCksIEpT
RW50cnlQdHJUYWcpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc2l6ZV9m
cmFtZV9mb3JfdmFyYXJncykKQEAgLTIwNjgsNyArMjA2OCw3IEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEpTSW5z
dHJ1Y3RpCiAgICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5
dGVjb2RlLm1fYXJnYyk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFt
ZSk7CiAgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFtZS0+c2V0UmV0
dXJuUEMocmV0dXJuUG9pbnQuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIGNhbGxl
ZUZyYW1lLT5zZXRSZXR1cm5QQyhyZXR1cm5Qb2ludC5jb2RlKCkudGFnZ2VkUHRyKCkpOwogICAg
IGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5zZXRD
dXJyZW50VlBDKHBjKTsKICAgICAKQEAgLTIwNzgsNyArMjA3OCw3IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEpT
SW5zdHJ1Y3RpCiAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpl
bmNvZGUoZXZhbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBieXRlY29kZS5tX2VjbWFNb2Rl
KSk7CiAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwogICAgIGF1dG8qIGNhbGxlclNQID0gY2Fs
bGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7Ci0gICAgTExJTlRf
Q0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0
dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQ
dHJUYWcpOworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExM
SW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS50YWdnZWRQdHIo
KSwgSlNFbnRyeVB0clRhZyk7CiB9CiAgICAgCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfY2FsbF9ldmFsKQpAQCAtMjM4NSw5ICsyMzg1LDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBkaXNwYXRjaFRvTmV4dEluc3RydWN0aW9uRHVyaW5nRXhpdChUaHJvd1Njb3BlJiBzY29w
ZSwKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspIHsKICAgICAgICAgY29uc3Qg
SlNJbnN0cnVjdGlvbiogbmV4dFBDID0gcGMubmV4dCgpLnB0cigpOwogI2lmIEVOQUJMRShKSVQp
Ci0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBDLCBMTEludDo6bm9ybWFsT1NSRXhp
dFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChuZXh0UEMsIExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGlu
ZVRodW5rKCkuY29kZSgpLnRhZ2dlZFB0cigpKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQobmV4dFBDLCBMTEludDo6Z2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihub3JtYWxf
b3NyX2V4aXRfdHJhbXBvbGluZSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KG5leHRQQywgTExJbnQ6OmdldENvZGVSZWY8SlNFbnRyeVB0
clRhZz4obm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmUpLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAj
ZW5kaWYKICAgICB9CiAKQEAgLTIzOTUsNyArMjM5NSw3IEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgZGlzcGF0Y2hUb05leHRJbnN0cnVjdGlvbkR1cmluZ0V4aXQoVGhyb3dTY29wZSYgc2Nv
cGUsCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKICAgICBCeXRlY29kZUluZGV4IG5leHRCeXRlY29kZUluZGV4ID0gcGMubmV4dCgpLmlu
ZGV4KCk7CiAgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKS5m
aW5kKG5leHRCeXRlY29kZUluZGV4KTsKLSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSksIG5leHRCeXRlY29kZS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSksIG5leHRCeXRlY29kZS50YWdnZWRQdHIo
KSk7CiAjZW5kaWYKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24u
Y3BwCmluZGV4IGJkNGM0ZTRhNDc0OC4uNzM1YzFkZTUyNmY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCkBAIC04
Miw3ICs4Miw3IEBAIEV4ZWN1dGlvbkNvdW50ZXIqIENvbXBpbGF0aW9uOjpleGVjdXRpb25Db3Vu
dGVyRm9yKGNvbnN0IE9yaWdpblN0YWNrJiBvcmlnaW4pCiAgICAgcmV0dXJuIGNvdW50ZXIuZ2V0
KCk7CiB9CiAKLXZvaWQgQ29tcGlsYXRpb246OmFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKQor
dm9pZCBDb21waWxhdGlvbjo6YWRkT1NSRXhpdFNpdGUoY29uc3QgVmVjdG9yPENvZGVQdHI8SlNJ
bnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKQogewogICAgIG1fb3NyRXhpdFNpdGVzLmFw
cGVuZChPU1JFeGl0U2l0ZShjb2RlQWRkcmVzc2VzKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uaAppbmRleCA0ZjM2ZjU2
MDI0ZDkuLjI4MzQ3ODY2MDY3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5oCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFkZERlc2NyaXB0aW9uKGNvbnN0IENvbXBpbGVkQnl0ZWNvZGUmKTsKICAgICB2
b2lkIGFkZERlc2NyaXB0aW9uKGNvbnN0IE9yaWdpblN0YWNrJiwgY29uc3QgQ1N0cmluZyYgZGVz
Y3JpcHRpb24pOwogICAgIEV4ZWN1dGlvbkNvdW50ZXIqIGV4ZWN1dGlvbkNvdW50ZXJGb3IoY29u
c3QgT3JpZ2luU3RhY2smKTsKLSAgICB2b2lkIGFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzc2VzKTsK
KyAgICB2b2lkIGFkZE9TUkV4aXRTaXRlKGNvbnN0IFZlY3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQ
dHJUYWc+PiYgY29kZUFkZHJlc3Nlcyk7CiAgICAgT1NSRXhpdCogYWRkT1NSRXhpdCh1bnNpZ25l
ZCBpZCwgY29uc3QgT3JpZ2luU3RhY2smLCBFeGl0S2luZCwgYm9vbCBpc1dhdGNocG9pbnQpOwog
ICAgIAogICAgIHZvaWQgc2V0SmV0dGlzb25SZWFzb24oSmV0dGlzb25SZWFzb24sIGNvbnN0IEZp
cmVEZXRhaWwqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlck9TUkV4aXRTaXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPU1JFeGl0U2l0ZS5oCmluZGV4IGU4MTE4MThlZWExZC4uZWU4NDU3ZjE2NDMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRT
aXRlLmgKQEAgLTMzLDE3ICszMywxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFByb2Zp
bGVyIHsKIAogY2xhc3MgT1NSRXhpdFNpdGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IE9TUkV4
aXRTaXRlKGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRh
Zz4+JiBjb2RlQWRkcmVzc2VzKQorICAgIGV4cGxpY2l0IE9TUkV4aXRTaXRlKGNvbnN0IFZlY3Rv
cjxDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29kZUFkZHJlc3NlcykKICAgICAgICAgOiBt
X2NvZGVBZGRyZXNzZXMoY29kZUFkZHJlc3NlcykKICAgICB7CiAgICAgfQogICAgIAotICAgIGNv
bnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2Rl
QWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUFkZHJlc3NlczsgfQorICAgIGNvbnN0IFZl
Y3RvcjxDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiYgY29kZUFkZHJlc3MoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVBZGRyZXNzZXM7IH0KICAgICAKICAgICBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxP
YmplY3QqKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBtX2NvZGVBZGRyZXNzZXM7CisgICAgVmVjdG9yPENvZGVQ
dHI8SlNJbnRlcm5hbFB0clRhZz4+IG1fY29kZUFkZHJlc3NlczsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpQcm9maWxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZUJhc2UuY3BwCmluZGV4IDJkOTRlMTRmNmQ2Yy4uMTkwMzU1ZGM0MjA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwCkBA
IC00OSw3ICs0OSw3IEBAIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICBzd2l0Y2ggKHR5cGUoKSkgewogICAgIGNhc2UgTmF0aXZlRXhlY3V0YWJs
ZVR5cGU6IHsKICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlID0ganNDYXN0PE5hdGl2
ZUV4ZWN1dGFibGUqPihyZWFsVGhpcyk7Ci0gICAgICAgIG91dC5wcmludCgiTmF0aXZlRXhlY3V0
YWJsZToiLCBSYXdQb2ludGVyKG5hdGl2ZS0+ZnVuY3Rpb24oKS5leGVjdXRhYmxlQWRkcmVzcygp
KSwgIi8iLCBSYXdQb2ludGVyKG5hdGl2ZS0+Y29uc3RydWN0b3IoKS5leGVjdXRhYmxlQWRkcmVz
cygpKSk7CisgICAgICAgIG91dC5wcmludCgiTmF0aXZlRXhlY3V0YWJsZToiLCBSYXdQb2ludGVy
KG5hdGl2ZS0+ZnVuY3Rpb24oKS50YWdnZWRQdHIoKSksICIvIiwgUmF3UG9pbnRlcihuYXRpdmUt
PmNvbnN0cnVjdG9yKCkudGFnZ2VkUHRyKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZTogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKaW5kZXggZTgyOTdkNzNiZmI0Li5hNzc0ZThkMDBkZDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaApA
QCAtMTMwLDcgKzEzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENv
ZGVGb3JDb25zdHJ1Y3QoKTsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gZW50cnlwb2ludEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEFy
aXR5Q2hlY2tNb2RlIGFyaXR5KQorICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gZW50cnlwb2lu
dEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQog
ICAgIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQuIFdlIG9u
bHkgaGF2ZSBpdCBmb3IgYXJpdHkgY2hlY2sgYmVjYXVzZSB3ZSB1c2UgdGhlCiAgICAgICAgIC8v
IG5vLWFyaXR5IGVudHJ5cG9pbnQgaW4gbm9uLXZpcnR1YWwgY2FsbHMsIHdoaWNoIHdpbGwgImNh
Y2hlIiB0aGlzIHZhbHVlIGRpcmVjdGx5IGluCkBAIC0xMzgsMTYgKzEzOCwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIGlmIChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgewogICAgICAgICAgICAgc3dp
dGNoIChraW5kKSB7CiAgICAgICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgotICAgICAgICAgICAg
ICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgIGlmIChDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaykK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKLSAgICAgICAgICAgICAgICBp
ZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgIGlmIChDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQp
LT5hZGRyZXNzRm9yQ2FsbChhcml0eSk7CisgICAgICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4g
cmVzdWx0ID0gZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoYXJpdHkp
OwogICAgICAgICBpZiAoYXJpdHkgPT0gTXVzdENoZWNrQXJpdHkpIHsKICAgICAgICAgICAgIC8v
IENhY2hlIHRoZSByZXN1bHQ7IHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgSklUJ3MgdmlydHVh
bCBjYWxsIG9wdGltaXphdGlvbnMuCiAgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKQEAgLTIw
Myw4ICsyMDMsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPEpJVENvZGU+IG1f
aml0Q29kZUZvckNhbGw7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZUZvckNvbnN0cnVj
dDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9qaXRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYWNoaW5lQ29udGV4dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFjaGluZUNvbnRleHQuaAppbmRleCBlYWQ0YzNiNGEyN2IuLmI1NmU5MDVhMzA4MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFjaGluZUNvbnRleHQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYWNoaW5lQ29udGV4dC5oCkBAIC00MSw5
ICs0MSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4gVCBzdGFja1BvaW50ZXIoY29u
c3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsKIAogI2lmIE9TKFdJTkRPV1MpIHx8IEhBVkUoTUFDSElO
RV9DT05URVhUKQogdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPiBUIGZyYW1lUG9pbnRlcihj
b25zdCBQbGF0Zm9ybVJlZ2lzdGVycyYpOwotaW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQ
bGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3QgUGxhdGZvcm1SZWdp
c3RlcnMmKTsKLWlubGluZSBzdGQ6Om9wdGlvbmFsPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0
Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPj4gaW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnN0IFBsYXRmb3Jt
UmVnaXN0ZXJzJik7Ci1pbmxpbmUgdm9pZCBzZXRJbnN0cnVjdGlvblBvaW50ZXIoUGxhdGZvcm1S
ZWdpc3RlcnMmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPik7Citpbmxp
bmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3Qg
UGxhdGZvcm1SZWdpc3RlcnMmKTsKK2lubGluZSBzdGQ6Om9wdGlvbmFsPENvZGVQdHI8UGxhdGZv
cm1SZWdpc3RlcnNQQ1B0clRhZz4+IGluc3RydWN0aW9uUG9pbnRlcihjb25zdCBQbGF0Zm9ybVJl
Z2lzdGVycyYpOworaW5saW5lIHZvaWQgc2V0SW5zdHJ1Y3Rpb25Qb2ludGVyKFBsYXRmb3JtUmVn
aXN0ZXJzJiwgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKIAogdGVtcGxhdGU8c2l6ZV90IE4+
IHZvaWQqJiBhcmd1bWVudFBvaW50ZXIoUGxhdGZvcm1SZWdpc3RlcnMmKTsKIHRlbXBsYXRlPHNp
emVfdCBOPiB2b2lkKiBhcmd1bWVudFBvaW50ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKTsK
QEAgLTY2LDcgKzY2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkKiYgZnJhbWVQb2ludGVySW1wbCht
Y29udGV4dF90Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4gVCBzdGFja1BvaW50
ZXIoY29uc3QgbWNvbnRleHRfdCYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPiBUIGZy
YW1lUG9pbnRlcihjb25zdCBtY29udGV4dF90Jik7Ci1pbmxpbmUgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+IGluc3RydWN0aW9uUG9pbnRlcihjb25zdCBt
Y29udGV4dF90Jik7CitpbmxpbmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBp
bnN0cnVjdGlvblBvaW50ZXIoY29uc3QgbWNvbnRleHRfdCYpOwogCiB0ZW1wbGF0ZTxzaXplX3Qg
Tj4gdm9pZComIGFyZ3VtZW50UG9pbnRlcihtY29udGV4dF90Jik7CiB0ZW1wbGF0ZTxzaXplX3Qg
Tj4gdm9pZCogYXJndW1lbnRQb2ludGVyKGNvbnN0IG1jb250ZXh0X3QmKTsKQEAgLTQyNiw3ICs0
MjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQqJiBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdzKQogfQogI2VuZGlmIC8vICFVU0UoUExBVEZPUk1fUkVHSVNURVJT
X1dJVEhfUFJPRklMRSkKIAotaW5saW5lIHN0ZDo6b3B0aW9uYWw8TWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+PiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3Qg
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxDb2RlUHRyPFBs
YXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+PiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QgUGxhdGZv
cm1SZWdpc3RlcnMmIHJlZ3MpCiB7CiAjaWYgVVNFKFBMQVRGT1JNX1JFR0lTVEVSU19XSVRIX1BS
T0ZJTEUpCiAgICAgdm9pZCogdmFsdWUgPSBXVEZfUkVBRF9QTEFURk9STV9SRUdJU1RFUlNfUENf
V0lUSF9QUk9GSUxFKHJlZ3MpOwpAQCAtNDM2LDIyICs0MzYsMjIgQEAgaW5saW5lIHN0ZDo6b3B0
aW9uYWw8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+PiBp
bnN0cnVjdGkKICAgICB2b2lkKiB2YWx1ZSA9IGluc3RydWN0aW9uUG9pbnRlckltcGwoY29uc3Rf
Y2FzdDxQbGF0Zm9ybVJlZ2lzdGVycyY+KHJlZ3MpKTsKICNlbmRpZgogICAgIGlmICghdmFsdWUp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2Vfb3B0aW9uYWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KG51bGxwdHIpKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9vcHRpb25hbChDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KG51bGxw
dHIpKTsKICAgICBpZiAoIXVzZXNQb2ludGVyVGFnZ2luZygpKQotICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX29wdGlvbmFsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BD
UHRyVGFnPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsKENvZGVQ
dHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4odmFsdWUpKTsKICAgICBpZiAoaXNUYWdnZWRX
aXRoPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9vcHRpb25hbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQ
Q1B0clRhZz4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbChDb2Rl
UHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KHZhbHVlKSk7CiAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIH0KIAotaW5saW5lIHZvaWQgc2V0SW5zdHJ1Y3Rpb25Qb2ludGVyKFBsYXRmb3Jt
UmVnaXN0ZXJzJiByZWdzLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnPiB2
YWx1ZSkKK2lubGluZSB2b2lkIHNldEluc3RydWN0aW9uUG9pbnRlcihQbGF0Zm9ybVJlZ2lzdGVy
cyYgcmVncywgQ29kZVB0cjxDRnVuY3Rpb25QdHJUYWc+IHZhbHVlKQogewogI2lmIFVTRShQTEFU
Rk9STV9SRUdJU1RFUlNfV0lUSF9QUk9GSUxFKQotICAgIFdURl9XUklURV9QTEFURk9STV9SRUdJ
U1RFUlNfUENfV0lUSF9QUk9GSUxFKHJlZ3MsIHZhbHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
ICAgIFdURl9XUklURV9QTEFURk9STV9SRUdJU1RFUlNfUENfV0lUSF9QUk9GSUxFKHJlZ3MsIHZh
bHVlLnRhZ2dlZFB0cigpKTsKICNlbGlmIFVTRShEQVJXSU5fUkVHSVNURVJfTUFDUk9TKQotICAg
IF9fZGFyd2luX2FybV90aHJlYWRfc3RhdGU2NF9zZXRfcGNfZnB0cihyZWdzLCB2YWx1ZS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKKyAgICBfX2Rhcndpbl9hcm1fdGhyZWFkX3N0YXRlNjRfc2V0X3Bj
X2ZwdHIocmVncywgdmFsdWUudGFnZ2VkUHRyKCkpOwogI2Vsc2UKLSAgICBpbnN0cnVjdGlvblBv
aW50ZXJJbXBsKHJlZ3MpID0gdmFsdWUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBpbnN0cnVj
dGlvblBvaW50ZXJJbXBsKHJlZ3MpID0gdmFsdWUudGFnZ2VkUHRyKCk7CiAjZW5kaWYKIH0KICNl
bmRpZiAvLyBPUyhXSU5ET1dTKSB8fCBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKQEAgLTUyMSw3ICs1
MjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQqJiBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKG1jb250
ZXh0X3QmIG1hY2hpbmVDb250ZXh0KQogfQogI2VuZGlmIC8vICFVU0UoUExBVEZPUk1fUkVHSVNU
RVJTX1dJVEhfUFJPRklMRSkKIAotaW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9y
bVJlZ2lzdGVyc1BDUHRyVGFnPiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QgbWNvbnRleHRfdCYg
bWFjaGluZUNvbnRleHQpCitpbmxpbmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFn
PiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QgbWNvbnRleHRfdCYgbWFjaGluZUNvbnRleHQpCiB7
CiAjaWYgVVNFKERBUldJTl9SRUdJU1RFUl9NQUNST1MpCiAgICAgcmV0dXJuICppbnN0cnVjdGlv
blBvaW50ZXIobWFjaGluZUNvbnRleHQtPl9fc3MpOwpAQCAtNTMzLDcgKzUzMyw3IEBAIGlubGlu
ZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gaW5zdHJ1
Y3Rpb25Qb2ludGVyKGNvbnN0CiAgICAgdm9pZCogdmFsdWUgPSBpbnN0cnVjdGlvblBvaW50ZXJJ
bXBsKGNvbnN0X2Nhc3Q8bWNvbnRleHRfdCY+KG1hY2hpbmVDb250ZXh0KSk7CiAjZW5kaWYKIAot
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRh
Zz4odmFsdWUpOworICAgIHJldHVybiBDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+
KHZhbHVlKTsKICNlbmRpZgogfQogI2VuZGlmIC8vIEhBVkUoTUFDSElORV9DT05URVhUKQpAQCAt
NTQzLDE0ICs1NDMsMTQgQEAgaW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJl
Z2lzdGVyc1BDUHRyVGFnPiBpbnN0cnVjdGlvblBvaW50ZXIoY29uc3QKIAogI2lmIE9TKERBUldJ
TikgJiYgX19EQVJXSU5fVU5JWDAzICYmIENQVShBUk02NCkKIAotaW5saW5lIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3Qg
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MpCitpbmxpbmUgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVy
c0xSUHRyVGFnPiBsaW5rUmVnaXN0ZXIoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MpCiB7
CiAjaWYgVVNFKFBMQVRGT1JNX1JFR0lTVEVSU19XSVRIX1BST0ZJTEUpCiAgICAgdm9pZCogdmFs
dWUgPSBXVEZfUkVBRF9QTEFURk9STV9SRUdJU1RFUlNfTFJfV0lUSF9QUk9GSUxFKHJlZ3MpOwog
I2Vsc2UKICAgICB2b2lkKiB2YWx1ZSA9IF9fZGFyd2luX2FybV90aHJlYWRfc3RhdGU2NF9nZXRf
bHJfZnB0cihyZWdzKTsKICNlbmRpZgotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
UGxhdGZvcm1SZWdpc3RlcnNMUlB0clRhZz4odmFsdWUpOworICAgIHJldHVybiBDb2RlUHRyPFBs
YXRmb3JtUmVnaXN0ZXJzTFJQdHJUYWc+KHZhbHVlKTsKIH0KICNlbmRpZiAvLyBPUyhEQVJXSU4p
ICYmIF9fREFSV0lOX1VOSVgwMyAmJiBDUFUoQVJNNjQpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAKaW5kZXggOTEwZGZjMjU5YjA1
Li41M2ZjYzk5ZTU0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L05hdGl2ZUV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L05hdGl2ZUV4ZWN1dGFibGUuY3BwCkBAIC02MCwxMCArNjAsMTAgQEAgdm9pZCBOYXRpdmVFeGVj
dXRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJlZjxKSVRDb2RlPiYmIGNhbGxUaHVuaywg
UmVmPEpJVEMKICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1faml0
Q29kZUZvckNvbnN0cnVjdC0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpOwogICAgIG1f
bmFtZSA9IG5hbWU7CiAKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9q
aXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4o
bV9qaXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWly
ZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5
UHRyVGFnPihtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2suZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KG1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIGFzc2VydElz
VGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFnPihtX2ppdENvZGVGb3JDYWxsLT5hZGRyZXNzRm9yQ2Fs
bChBcml0eUNoZWNrTm90UmVxdWlyZWQpLnRhZ2dlZFB0cigpKTsKKyAgICBhc3NlcnRJc1RhZ2dl
ZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2Fs
bChBcml0eUNoZWNrTm90UmVxdWlyZWQpLnRhZ2dlZFB0cigpKTsKKyAgICBhc3NlcnRJc1RhZ2dl
ZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLnRhZ2dl
ZFB0cigpKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4obV9qaXRDb2Rl
Rm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sudGFnZ2VkUHRyKCkpOwogfQogCiBOYXRpdmVFeGVj
dXRhYmxlOjpOYXRpdmVFeGVjdXRhYmxlKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBJbXBsZW1lbnRhdGlvblZp
c2liaWxpdHkgaW1wbGVtZW50YXRpb25WaXNpYmlsaXR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmgKaW5kZXggZDcyNTIzYzY2ZDk1Li41ZGY4MmE0
ZGQ4NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1
bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRnVuY3Rp
b24uaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbEZyYW1l
OwogCi11c2luZyBOYXRpdmVGdW5jdGlvbiA9IFR5cGVkRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnLCBFbmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopLCBGdW5jdGlv
bkF0dHJpYnV0ZXM6OkpTQ0hvc3RDYWxsPjsKK3VzaW5nIE5hdGl2ZUZ1bmN0aW9uID0gRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpTQ0hvc3RDYWxsPjsKIAogc3RydWN0IE5h
dGl2ZUZ1bmN0aW9uSGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goTmF0aXZlRnVuY3Rp
b24ga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CkBAIC00Miw3ICs0Miw3IEBAIHN0
cnVjdCBOYXRpdmVGdW5jdGlvbkhhc2ggewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZl
VG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwogCi11c2luZyBUYWdnZWROYXRp
dmVGdW5jdGlvbiA9IFR5cGVkRnVuY3Rpb25QdHI8SG9zdEZ1bmN0aW9uUHRyVGFnLCBFbmNvZGVk
SlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6
OkpTQ0hvc3RDYWxsPjsKK3VzaW5nIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uID0gRnVuY3Rpb25QdHI8
SG9zdEZ1bmN0aW9uUHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpTQ0hvc3RDYWxsPjsKIAogc3RydWN0IFRhZ2dl
ZE5hdGl2ZUZ1bmN0aW9uSGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goVGFnZ2VkTmF0
aXZlRnVuY3Rpb24ga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CkBAIC02NCw3ICs2
NCw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IEpTQzo6TmF0aXZlRnVuY3Rpb24ga2V5KQogewotICAgIGFkZChoYXNoZXIsIGtleS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICBhZGQoaGFzaGVyLCBrZXkudGFnZ2VkUHRyKCkpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERlZmF1bHRIYXNoOwpAQCAtNzIsNyArNzIsNyBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok5hdGl2ZUZ1bmN0aW9uPiA6IEpTQzo6
TmF0aXZlRnVuY3Rpb25IYXNoIHsgfQogCiBpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IEpTQzo6VGFnZ2VkTmF0aXZlRnVuY3Rpb24ga2V5KQogewotICAgIGFkZChoYXNoZXIsIGtleS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBhZGQoaGFzaGVyLCBrZXkudGFnZ2VkUHRyKCkpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERlZmF1bHRIYXNoOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAppbmRleCBhZDc4MDlkMzYyZjkuLmUw
OTJlNmY1YzhjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlTbG90LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlT
bG90LmgKQEAgLTg2LDExICs4NiwxMSBAQCBpbmxpbmUgdW5zaWduZWQgYXR0cmlidXRlc0ZvclN0
cnVjdHVyZSh1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
OF90PihhdHRyaWJ1dGVzKTsKIH0KIAotdXNpbmcgR2V0VmFsdWVGdW5jID0gVHlwZWRGdW5jdGlv
blB0cjxHZXRWYWx1ZUZ1bmNQdHJUYWcsIEVuY29kZWRKU1ZhbHVlKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSksIEZ1bmN0aW9uQXR0cmlidXRlczo6SklUT3Bl
cmF0aW9uPjsKLXVzaW5nIEdldFZhbHVlRnVuY1dpdGhQdHIgPSBUeXBlZEZ1bmN0aW9uUHRyPEdl
dFZhbHVlRnVuY1dpdGhQdHJQdHJUYWcsIEVuY29kZWRKU1ZhbHVlKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSwgdm9pZCopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6
OkpJVE9wZXJhdGlvbj47Cit1c2luZyBHZXRWYWx1ZUZ1bmMgPSBGdW5jdGlvblB0cjxHZXRWYWx1
ZUZ1bmNQdHJUYWcsIEVuY29kZWRKU1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIFByb3BlcnR5TmFtZSksIEZ1bmN0aW9uQXR0cmlidXRlczo6SklUT3BlcmF0aW9uPjsKK3Vz
aW5nIEdldFZhbHVlRnVuY1dpdGhQdHIgPSBGdW5jdGlvblB0cjxHZXRWYWx1ZUZ1bmNXaXRoUHRy
UHRyVGFnLCBFbmNvZGVkSlNWYWx1ZShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUsIHZvaWQqKSwgRnVuY3Rpb25BdHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+Owog
Ci11c2luZyBQdXRWYWx1ZUZ1bmMgPSBUeXBlZEZ1bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1B0clRh
ZywgYm9vbChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
UHJvcGVydHlOYW1lKSwgRnVuY3Rpb25BdHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+OwotdXNpbmcg
UHV0VmFsdWVGdW5jV2l0aFB0ciA9IFR5cGVkRnVuY3Rpb25QdHI8UHV0VmFsdWVGdW5jV2l0aFB0
clB0clRhZywgYm9vbChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgUHJvcGVydHlOYW1lLCB2b2lkKiksIEZ1bmN0aW9uQXR0cmlidXRlczo6SklUT3BlcmF0
aW9uPjsKK3VzaW5nIFB1dFZhbHVlRnVuYyA9IEZ1bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1B0clRh
ZywgYm9vbChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
UHJvcGVydHlOYW1lKSwgRnVuY3Rpb25BdHRyaWJ1dGVzOjpKSVRPcGVyYXRpb24+OwordXNpbmcg
UHV0VmFsdWVGdW5jV2l0aFB0ciA9IEZ1bmN0aW9uUHRyPFB1dFZhbHVlRnVuY1dpdGhQdHJQdHJU
YWcsIGJvb2woSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IFByb3BlcnR5TmFtZSwgdm9pZCopLCBGdW5jdGlvbkF0dHJpYnV0ZXM6OkpJVE9wZXJhdGlvbj47
CiAKIGNsYXNzIFByb3BlcnR5U2xvdCB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHV0UHJvcGVydHlTbG90LmgKaW5kZXggN2RiYmY1N2U3MDQ1Li5jYTZkMzc3NWY3ODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xv
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5o
CkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNPYmplY3Q7CiBjbGFz
cyBKU0Z1bmN0aW9uOwogICAgIAotdXNpbmcgQ3VzdG9tQWNjZXNzb3JWYWx1ZUZ1bmMgPSBUeXBl
ZEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnLCBib29sKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpPjsKK3VzaW5nIEN1
c3RvbUFjY2Vzc29yVmFsdWVGdW5jID0gRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWcs
IGJvb2woSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFBy
b3BlcnR5TmFtZSk+OwogCiBjbGFzcyBQdXRQcm9wZXJ0eVNsb3QgewogcHVibGljOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAppbmRl
eCBmYjBkZGRlNzlmNDUuLjJmYjRiZTU1MTI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKQEAgLTM3OSw3ICszNzksNyBAQCB2
b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoU2Vjb25kcyYgc3RhY2tUcmFjZVByb2Nl
c3NpbmdUaW1lKQogICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IHN0YXRpY19jYXN0PENhbGxG
cmFtZSo+KG1hY2hpbmVGcmFtZSk7CiAgICAgICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlvblBv
aW50ZXIgPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lzdGVycyk7CiAg
ICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uUG9pbnRlcikKLSAgICAgICAgICAgICAgICAg
ICAgbWFjaGluZVBDID0gaW5zdHJ1Y3Rpb25Qb2ludGVyLT51bnRhZ2dlZEV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9IGluc3RydWN0aW9uUG9pbnRl
ci0+dW50YWdnZWRQdHIoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIG1hY2hpbmVQQyA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlbW92
ZUNvZGVQdHJUYWcoTWFjaGluZUNvbnRleHQ6OmxsaW50SW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lz
dGVycykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVj
dXRhYmxlLmNwcAppbmRleCA5NmM5NTczODk5MzguLjViOTI3ZWIxNDdiYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKQEAgLTc1
LDggKzc1LDggQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpjbGVhckNvZGUoSXNvQ2VsbFNldCYg
Y2xlYXJhYmxlQ29kZVNldCkKIHsKICAgICBtX2ppdENvZGVGb3JDYWxsID0gbnVsbHB0cjsKICAg
ICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBudWxscHRyOwotICAgIG1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwot
ICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNo
ZWNrID0gQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVj
dFdpdGhBcml0eUNoZWNrID0gQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwogCiAgICAgc3dpdGNo
ICh0eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBlODAyYjM5MWExM2EuLmE3NWI0MjIxM2IzZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtNzE3LDcgKzcxNyw3IEBAIE5h
dGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRSZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbikK
ICAgICByZXR1cm4gZ2V0T3JDcmVhdGUobV9mYXN0UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRl
cm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGlu
ZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmlu
ZGV4IDhjMTFmNTM5NDQwYi4uYTg5ZjE2Zjk2M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKQEAgLTU2NCw3ICs1NjQsNyBAQCBwdWJsaWM6CiAgICAgTmF0aXZlRXhlY3V0YWJsZSog
Z2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOwog
ICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldFJlbW90ZUZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9u
KTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRl
cm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9y
KENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBnZXRDVElMaW5rQ2FsbCgpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiBnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKTsKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGdldENUSVZpcnR1
YWxDYWxsKENhbGxNb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNVHJhcHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5j
cHAKaW5kZXggYjUxMDUyOTdiODQ0Li5jNDZjMTg3Y2ZmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBzdHJ1Y3QgVk1UcmFwczo6U2lnbmFsQ29udGV4dCB7CiBwcml2YXRlOgotICAgIFNpZ25h
bENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycywgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+IHRyYXBQQykKKyAgICBTaWduYWxDb250ZXh0
KFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMsIENvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQ
Q1B0clRhZz4gdHJhcFBDKQogICAgICAgICA6IHJlZ2lzdGVycyhyZWdpc3RlcnMpCiAgICAgICAg
ICwgdHJhcFBDKHRyYXBQQykKICAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6
OnN0YWNrUG9pbnRlcihyZWdpc3RlcnMpKQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVyczsKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gdHJhcFBDOworICAgIENvZGVQdHI8
UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gdHJhcFBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRl
cjsKICAgICB2b2lkKiBmcmFtZVBvaW50ZXI7CiB9OwpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFZN
VHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoVk1UcmFwczo6U2lnbmFsQ29udGV4dCYg
Y29udGV4dCwgU3RhY2tCbwogICAgIC8vIFRoaXMgbXVzdCBiZSB0aGUgaW5pdGlhbCBzaWduYWwg
dG8gZ2V0IHRoZSBtdXRhdG9yIHRocmVhZCdzIGF0dGVudGlvbi4KICAgICAvLyBMZXQncyBnZXQg
dGhlIHRocmVhZCB0byBicmVhayBhdCBpbnZhbGlkYXRpb24gcG9pbnRzIGlmIG5lZWRlZC4KICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgIHZvaWQqIHRyYXBQQyA9IGNvbnRleHQudHJhcFBD
LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lkKiB0cmFwUEMgPSBjb250ZXh0
LnRyYXBQQy51bnRhZ2dlZFB0cigpOwogICAgIC8vIFdlIG11c3QgZW5zdXJlIHdlJ3JlIGluIEpJ
VC9MTGludCBjb2RlLiBJZiB3ZSBhcmUsIHdlIGtub3cgYSBmZXcgdGhpbmdzOgogICAgIC8vIC0g
VGhlIEpTIHRocmVhZCBpc24ndCBob2xkaW5nIHRoZSBtYWxsb2MgbG9jay4gVGhlcmVmb3JlLCBp
dCdzIHNhZmUgdG8gbWFsbG9jIGJlbG93LgogICAgIC8vIC0gVGhlIEpTIHRocmVhZCBpc24ndCBo
b2xkaW5nIHRoZSBDb2RlQmxvY2tTZXQgbG9jay4KQEAgLTIxMyw3ICsyMTMsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgaWYgKCFzaWduYWxDb250ZXh0KQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOwogCi0gICAgICAgICAgICAgICAgdm9p
ZCogdHJhcFBDID0gc2lnbmFsQ29udGV4dC0+dHJhcFBDLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICAgICAgICAgICAgICB2b2lkKiB0cmFwUEMgPSBzaWduYWxDb250ZXh0LT50cmFw
UEMudW50YWdnZWRQdHIoKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzSklUUEModHJhcFBDKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIu
Y3BwCmluZGV4IDZkNjlhNGRmMmUyMy4uYjM2YjU1NzQ3ZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCkBAIC04MCw3ICs4
MCw3IEBAIHByaXZhdGU6CiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKIHByaXZhdGU6Ci0gICAg
U2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4gbWFjaGluZVBDKQorICAgIFNpZ25h
bENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycywgQ29kZVB0cjxQbGF0Zm9ybVJl
Z2lzdGVyc1BDUHRyVGFnPiBtYWNoaW5lUEMpCiAgICAgICAgIDogcmVnaXN0ZXJzKHJlZ2lzdGVy
cykKICAgICAgICAgLCBtYWNoaW5lUEMobWFjaGluZVBDKQogICAgICAgICAsIHN0YWNrUG9pbnRl
cihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKHJlZ2lzdGVycykpCkBAIC0xNDAsMTYgKzE0
MCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IGZwOiAlMDE2bGx4IGxy
OiAlMDE2bGx4IiwKICAgICAgICAgICAgIGksIHJlZ2lzdGVycy5fX3hbaV0sCiAgICAgICAgICAg
ICBNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyPHVpbnQ2NF90PihyZWdpc3RlcnMpLAotICAg
ICAgICAgICAgTWFjaGluZUNvbnRleHQ6OmxpbmtSZWdpc3RlcihyZWdpc3RlcnMpLnVudGFnZ2Vk
RXhlY3V0YWJsZUFkZHJlc3M8dWludDY0X3Q+KCkpOworICAgICAgICAgICAgTWFjaGluZUNvbnRl
eHQ6OmxpbmtSZWdpc3RlcihyZWdpc3RlcnMpLnVudGFnZ2VkUHRyPHVpbnQ2NF90PigpKTsKICAg
ICAgICAgbG9nKCJzcDogJTAxNmxseCBwYzogJTAxNmxseCBjcHNyOiAlMDh4IiwKICAgICAgICAg
ICAgIE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXI8dWludDY0X3Q+KHJlZ2lzdGVycyksCi0g
ICAgICAgICAgICBtYWNoaW5lUEMudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx1aW50NjRfdD4o
KSwKKyAgICAgICAgICAgIG1hY2hpbmVQQy51bnRhZ2dlZFB0cjx1aW50NjRfdD4oKSwKICAgICAg
ICAgICAgIHJlZ2lzdGVycy5fX2Nwc3IpOwogI2VuZGlmCiAgICAgfQogCiAgICAgUGxhdGZvcm1S
ZWdpc3RlcnMmIHJlZ2lzdGVyczsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1S
ZWdpc3RlcnNQQ1B0clRhZz4gbWFjaGluZVBDOworICAgIENvZGVQdHI8UGxhdGZvcm1SZWdpc3Rl
cnNQQ1B0clRhZz4gbWFjaGluZVBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lk
KiBmcmFtZVBvaW50ZXI7CiB9OwpAQCAtMTY0LDcgKzE2NCw3IEBAIHN0YXRpYyB2b2lkIGluc3Rh
bGxDcmFzaEhhbmRsZXIoKQogICAgICAgICBpZiAoIXNpZ25hbENvbnRleHQpCiAgICAgICAgICAg
ICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOwogICAgICAgICAgICAgCi0gICAgICAg
IHZvaWQqIG1hY2hpbmVQQyA9IHNpZ25hbENvbnRleHQtPm1hY2hpbmVQQy51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHZvaWQqIG1hY2hpbmVQQyA9IHNpZ25hbENvbnRleHQt
Pm1hY2hpbmVQQy51bnRhZ2dlZFB0cigpOwogICAgICAgICBpZiAoIWlzSklUUEMobWFjaGluZVBD
KSkKICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CiAKQEAgLTE4
NSw3ICsxODUsNyBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAKICAgICB2b2lkIGR1bXAoKSB7
IH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFn
PiBtYWNoaW5lUEM7CisgICAgQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPiBtYWNo
aW5lUEM7CiAgICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsK
IH07CkBAIC0yMzYsNyArMjM2LDcgQEAgYXV0byBTaWdpbGxDcmFzaEFuYWx5emVyOjphbmFseXpl
KFNpZ25hbENvbnRleHQmIGNvbnRleHQpIC0+IENyYXNoU291cmNlCiAgICAgICAgIH0KICAgICAg
ICAgTG9ja2VyIGxvY2tlciB7IEFkb3B0TG9jaywgaW5zcGVjdG9yLmdldExvY2soKSB9OwogCi0g
ICAgICAgIHZvaWQqIHBjID0gY29udGV4dC5tYWNoaW5lUEMudW50YWdnZWRFeGVjdXRhYmxlQWRk
cmVzcygpOworICAgICAgICB2b2lkKiBwYyA9IGNvbnRleHQubWFjaGluZVBDLnVudGFnZ2VkUHRy
KCk7CiAgICAgICAgIGF1dG8gaXNJbkpJVE1lbW9yeSA9IGluc3BlY3Rvci5pc1ZhbGlkRXhlY3V0
YWJsZU1lbW9yeShwYyk7CiAgICAgICAgIGlmICghaXNJbkpJVE1lbW9yeSkgewogICAgICAgICAg
ICAgbG9nKCJFUlJPUjogVGltZWQgb3V0OiBub3QgYWJsZSB0byBkZXRlcm1pbmUgaWYgcGMgJXAg
aXMgaW4gdmFsaWQgSklUIGV4ZWN1dGFibGUgbWVtb3J5IiwgcGMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKaW5kZXggMWNlY2ZkMmVh
ODVjLi40MWIwY2QzMGVhMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21BaXJJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcApAQCAtMzM4Niw3ICszMzg2LDcgQEAgVG1wIEFpcklSR2Vu
ZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKENhdGNoS2luZCBraW5kLCBDb250cm9sVHlwZSYgZGF0YSwg
dW5zaWduZWQgZXgKICAgICAgICAgaml0Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxs
KE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENsZWFy
RXhjZXB0aW9uSWZDYXRjaGFibGUpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVy
YXRpb25QdHJUYWc+KGNhbGwsIG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9u
SWZDYXRjaGFibGUpOwogICAgICAgICB9KTsKICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDhkZTEwZmE3YzI5Ny4u
M2YxMDRiNThmOGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCkBAIC0yNzExLDcgKzI3MTEsNyBAQCBWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6ZW1pdENhdGNoSW1wbChDYXRjaEtpbmQga2luZCwgQ29udHJvbFR5cGUmIGRhdGEsIHVuc2ln
bmVkCiAgICAgICAgIGppdC5tb3ZlKHBhcmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRp
b25QdHJUYWcpOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlv
bklmQ2F0Y2hhYmxlKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRy
VGFnPihjYWxsLCBvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hh
YmxlKTsKICAgICAgICAgfSk7CiAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmNwcAppbmRleCBmYmQ2ODI2ODEyOWYuLjc4NDRhMmQyYjE5MCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtMTQyLDcgKzE0Miw3
IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAg
IEZJTkFMSVpFX1dBU01fQ09ERV9GT1JfTU9ERShDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGxp
bmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1bmN0aW9u
WyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNl
KSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBv
aW50Qnlwcm9kdWN0cykpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0
clRhZz4gZW50cnlwb2ludDsKKyAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2lu
dDsKICAgICB7CiAgICAgICAgIFJlZjxCQlFDYWxsZWU+IGNhbGxlZSA9IEJCUUNhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwg
V1RGTW92ZSh0aWVyVXApLCBXVEZNb3ZlKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKSwgV1RGTW92
ZShmdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxl
cnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpLCBXVEZNb3ZlKGxvb3BFbnRy
eXBvaW50TG9jYXRpb25zKSwgZnVuY3Rpb24tPm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwog
ICAgICAgICBmb3IgKGF1dG8mIG1vdmVMb2NhdGlvbiA6IGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9j
YXRpb25zKQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIG1fY2FsbGVlR3JvdXAtPnNldEJCUUNhbGxlZShsb2Nr
ZXIsIG1fZnVuY3Rpb25JbmRleCwgY2FsbGVlLmNvcHlSZWYoKSk7CiAKICAgICAgICAgZm9yIChh
dXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAg
ICAgICAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAg
IGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9y
dEZ1bmN0aW9uQ291bnQoKSkKICAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jYWxsZWVH
cm91cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2Rl
KCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBCQlFQbGFuOjpk
aWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkKIAogICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlu
a2VkKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
PiBleGVjdXRhYmxlQWRkcmVzczsKKyAgICAgICAgICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
PiBleGVjdXRhYmxlQWRkcmVzczsKICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9u
LT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25J
bmRleFNwYWNlKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2
ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4g
VGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKICAgICAgICAgICAg
ICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5hdChjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSkuY29kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxlZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q2FsbGVlLmNwcAppbmRleCAzMjAyZjU0ODBjYTQuLjczY2QzYmRlNTVhMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKQEAgLTExMCwxMiArMTEwLDEyIEBAIExM
SW50Q2FsbGVlOjpMTEludENhbGxlZShGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciYgZ2VuZXJh
dG9yLCBzaXplX3QgaW5kZXgsIHN0CiAgICAgfQogfQogCi12b2lkIExMSW50Q2FsbGVlOjpzZXRF
bnRyeXBvaW50KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9p
bnQpCit2b2lkIExMSW50Q2FsbGVlOjpzZXRFbnRyeXBvaW50KENvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPiBlbnRyeXBvaW50KQogewogICAgIG1fZW50cnlwb2ludCA9IGVudHJ5cG9pbnQ7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IExMSW50Q2FsbGVlOjplbnRy
eXBvaW50KCkgY29uc3QKK0NvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBMTEludENhbGxlZTo6ZW50
cnlwb2ludCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZW50cnlwb2ludDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAppbmRleCBkOGFkZjRiMTMwZmEuLmY5YTdjNDll
NzQzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaApAQCAtNTUsNyAr
NTUsNyBAQCBwdWJsaWM6CiAgICAgSW5kZXhPck5hbWUgaW5kZXhPck5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4T3JOYW1lOyB9CiAgICAgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsYXRpb25Nb2RlOyB9CiAKLSAgICB2aXJ0dWFsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkgPSAwOwogICAgIHZpcnR1YWwgc3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+IHJhbmdl
KCkgY29uc3QgPSAwOwogCkBAIC03OSw3ICs3OSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgSklU
Q2FsbGVlIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRh
Zz4oKTsgfQorICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdn
ZWQ8V2FzbUVudHJ5UHRyVGFnPigpOyB9CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSBvdmVycmlkZSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNh
dmVSZWdpc3RlcnM7IH0KICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
d2FzbVRvV2FzbUNhbGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQog
CkBAIC0yMjUsOCArMjI1LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBMTEludENhbGxlZShnZW5lcmF0b3IsIGluZGV4LCBXVEZNb3ZlKG5hbWUpKSk7CiAgICAgfQog
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50KCkgY29uc3QgZmluYWw7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRFbnRyeXBvaW50KENvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+IGVudHJ5cG9pbnQoKSBjb25zdCBmaW5hbDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdp
c3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGZpbmFsOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPiByYW5nZSgpIGNvbnN0IGZpbmFs
OwogCkBAIC0zMTMsNyArMzEzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8T3B0aW1pemluZ0pJ
VENhbGxlZT4gbV9yZXBsYWNlbWVudHNbV2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2Rlc107CiAgICAg
UmVmUHRyPE9TUkVudHJ5Q2FsbGVlPiBtX29zckVudHJ5Q2FsbGVlc1tXYXNtOjpOdW1iZXJPZk1l
bW9yeU1vZGVzXTsKICNlbmRpZgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQ
dHJUYWc+IG1fZW50cnlwb2ludDsKKyAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gbV9lbnRy
eXBvaW50OwogfTsKIAogdXNpbmcgTExJbnRDYWxsZWVzID0gVGhyZWFkU2FmZVJlZkNvdW50ZWRG
aXhlZFZlY3RvcjxSZWY8TExJbnRDYWxsZWU+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGVlR3JvdXAuY3BwCmluZGV4IDFiZWJjOWNiMWEyYi4uNWQ1ZjZiMDI2OTE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5jcHAK
QEAgLTc0LDcgKzc0LDcgQEAgQ2FsbGVlR3JvdXA6OkNhbGxlZUdyb3VwKFZNJiB2bSwgTWVtb3J5
TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3IKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2Fs
bEVudHJ5UG9pbnRzID0gRml4ZWRWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRy
eVB0clRhZz4+KG1fY2FsbGVlQ291bnQpOworICAgICAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxs
RW50cnlQb2ludHMgPSBGaXhlZFZlY3RvcjxDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+KG1fY2Fs
bGVlQ291bnQpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxs
ZWVDb3VudDsgKytpKQogICAgICAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzW2ldID0gbV9sbGludENhbGxlZXMtPmF0KGkpLT5lbnRyeXBvaW50KCk7CkBAIC05Niw3ICs5
Niw3IEBAIENhbGxlZUdyb3VwOjpDYWxsZWVHcm91cChWTSYgdm0sIE1lbW9yeU1vZGUgbW9kZSwg
TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9yCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50
cyA9IEZpeGVkVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+Piht
X2NhbGxlZUNvdW50KTsKKyAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRz
ID0gRml4ZWRWZWN0b3I8Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+PihtX2NhbGxlZUNvdW50KTsK
IAogICAgICAgICAgICAgQkJRUGxhbiogYmJxUGxhbiA9IHN0YXRpY19jYXN0PEJCUVBsYW4qPiht
X3BsYW4uZ2V0KCkpOwogICAgICAgICAgICAgYmJxUGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZd
ICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4m
JiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIFJlZlB0cjxCQlFDYWxsZWU+JiYgd2FzbUVudHJ5
cG9pbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
ZWVHcm91cC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmgK
aW5kZXggNmUyMThmYjg4YzZhLi43NTFhZmU2ZWIzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsZWVHcm91cC5oCkBAIC0xNDIsMTQgKzE0MiwxNCBAQCBwdWJsaWM6
CiAgICAgfQogI2VuZGlmCiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPiogZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiogZW50
cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRl
eFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxl
ZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAg
ICAgICByZXR1cm4gJm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XTsK
ICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiB3YXNt
VG9XYXNtRXhpdFN0dWIodW5zaWduZWQgZnVuY3Rpb25JbmRleCkKKyAgICBDb2RlUHRyPFdhc21F
bnRyeVB0clRhZz4gd2FzbVRvV2FzbUV4aXRTdHViKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV93YXNtVG9XYXNtRXhpdFN0dWJzW2Z1bmN0aW9uSW5kZXhd
LmNvZGUoKTsKICAgICB9CkBAIC0xNzgsNyArMTc4LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAg
IFJlZlB0cjxMTEludENhbGxlZXM+IG1fbGxpbnRDYWxsZWVzOwogICAgIEhhc2hNYXA8dWludDMy
X3QsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+LCBEZWZhdWx0SGFzaDx1aW50MzJf
dD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVk
ZGVyQ2FsbGVlczsKLSAgICBGaXhlZFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7CisgICAgRml4ZWRWZWN0
b3I8Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50
czsKICAgICBGaXhlZFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fd2Fz
bVRvV2FzbUNhbGxzaXRlczsKICAgICBGaXhlZFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxFbnRy
eVBsYW4+IG1fcGxhbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmRlOWYxNjZmYTdlLi4zNzE2NDRlMzEyODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuY3BwCkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhh
bmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlCiAg
ICAgYXV0byBpbnN0cnVjdGlvblBvaW50ZXIgPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Q
b2ludGVyKGNvbnRleHQpOwogICAgIGlmICghaW5zdHJ1Y3Rpb25Qb2ludGVyKQogICAgICAgICBy
ZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOwotICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1
Y3Rpb24gPSBpbnN0cnVjdGlvblBvaW50ZXItPnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICB2b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25Qb2ludGVyLT51bnRh
Z2dlZFB0cigpOwogICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25hbEhhbmRsZXJJbnRlcm5h
bDo6dmVyYm9zZSwgInN0YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVy
KGZhdWx0aW5nSW5zdHJ1Y3Rpb24pKTsKIAogICAgIGRhdGFMb2dMbklmKFdhc21GYXVsdFNpZ25h
bEhhbmRsZXJJbnRlcm5hbDo6dmVyYm9zZSwgIkpJVCBtZW1vcnkgc3RhcnQ6ICIsIFJhd1BvaW50
ZXIoc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2woKSksICIgZW5kOiAiLCBSYXdQb2lu
dGVyKGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMzY2ZDY1YjJlYjk1Li42YTBmMWQ2N2FiODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTQ2MSw3ICs0NjEsNyBA
QCBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbiB7CiAvLyBtZWFudCBhcyBmYXN0IGxvb2t1cCB0YWJs
ZXMgZm9yIHRoZXNlIG9wY29kZXMgYW5kIGRvIG5vdCBvd24gY29kZS4KIHN0cnVjdCBXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RUQ7Ci0gICAgdXNpbmcgTG9hZExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21F
bnRyeVB0clRhZz4qOworICAgIHVzaW5nIExvYWRMb2NhdGlvbiA9IENvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPio7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIHR5
cGVJbmRleCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2ludExvYWRM
b2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcAppbmRleCA0YjU4OWU1NWI3MDAuLjcyM2Qy
MmMxOGE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRs
ZXJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlcklu
Zm8uY3BwCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBXYXNt
IHsKIAotdm9pZCBIYW5kbGVySW5mbzo6aW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJ
bmZvJiB1bmxpbmtlZEluZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPiBsYWJlbCkKK3ZvaWQgSGFuZGxlckluZm86OmluaXRpYWxpemUoY29uc3QgVW5saW5r
ZWRIYW5kbGVySW5mbyYgdW5saW5rZWRJbmZvLCBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IGxhYmVsKQogewogICAgIG1fdHlwZSA9IHVubGlua2VkSW5mby5tX3R5cGU7CiAgICAgbV9z
dGFydCA9IHVubGlua2VkSW5mby5tX3N0YXJ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtSGFuZGxlckluZm8uaAppbmRleCA4M2ZhMmYwMjM4YmQuLmNlYjg4YzcwOWRkNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKQEAgLTg3LDcg
Kzg3LDcgQEAgc3RydWN0IFVubGlua2VkSGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9C
YXNlIHsKIHN0cnVjdCBIYW5kbGVySW5mbyA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgewogICAg
IHN0YXRpYyBjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4KEluc3RhbmNlJiwgY29u
c3QgRml4ZWRWZWN0b3I8SGFuZGxlckluZm8+JiBleGVwdGlvbkhhbmRsZXJzLCB1bnNpZ25lZCBp
bmRleCwgY29uc3QgV2FzbTo6VGFnKiBleGNlcHRpb25UYWcpOwogCi0gICAgdm9pZCBpbml0aWFs
aXplKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4pOworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVbmxpbmtl
ZEhhbmRsZXJJbmZvJiwgQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPik7CiAKICAgICB1
bnNpZ25lZCB0YWcoKSBjb25zdAogICAgIHsKQEAgLTEwMSw3ICsxMDEsNyBAQCBzdHJ1Y3QgSGFu
ZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKICAgICAgICAgcmV0dXJuIG1fZGVs
ZWdhdGVUYXJnZXQ7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IG1fbmF0aXZlQ29kZTsKKyAgICBDb2RlUHRyPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IG1fbmF0aXZlQ29kZTsKIAogcHJpdmF0ZToKICAgICB1bmlvbiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgKaW5k
ZXggOTY4OTVmZTgwNjg0Li4wY2MzY2Q0MmE0NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21JUkdlbmVyYXRvckhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgKQEAgLTEyOSw3ICsxMjksNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZW1pdFJldGhyb3dJbXBsKENDYWxsSGVscGVycyYgaml0KQog
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsK
ICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7CiAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0aHJvdykpOworICAgICAgICBsaW5rQnVmZmVyLmxp
bms8T3BlcmF0aW9uUHRyVGFnPihjYWxsLCBvcGVyYXRpb25XYXNtUmV0aHJvdyk7CiAgICAgfSk7
CiB9CiAKQEAgLTE1OSw3ICsxNTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW1pdFRocm93SW1w
bChDQ2FsbEhlbHBlcnMmIGppdCwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXgpCiAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5m
YXJKdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsK
ICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbldhc21UaHJvdykpOworICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9u
UHRyVGFnPihjYWxsLCBvcGVyYXRpb25XYXNtVGhyb3cpOwogICAgIH0pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCmluZGV4IGM4NjFlOWJlNjNhYy4uNjM2
NDhmM2NhZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5z
dGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApA
QCAtMTk1LDcgKzE5NSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGFyZ2V0IGluc3RhbmNlIGFu
ZCBlbnRyeXBvaW50IGFyZSBvbmx5IHNldCBmb3Igd2FzbS0+d2FzbSBjYWxscywgYW5kIGFyZSBv
dGhlcndpc2UgbnVsbHB0ci4gVGhlIGVtYmVkZGVyLXNwZWNpZmljIGxvZ2ljIG9jY3VycyB0aHJv
dWdoIGltcG9ydCBmdW5jdGlvbi4KICAgICAgICAgSW5zdGFuY2UqIHRhcmdldEluc3RhbmNlIHsg
bnVsbHB0ciB9OwogICAgICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9j
YXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24geyBudWxscHRyIH07Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YjsK
KyAgICAgICAgQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1YjsKICAg
ICAgICAgdm9pZCogaW1wb3J0RnVuY3Rpb24geyBudWxscHRyIH07IC8vIEluIGEgSlMgZW1iZWRk
aW5nLCB0aGlzIGlzIGEgV3JpdGVCYXJyaWVyPEpTT2JqZWN0Pi4KICAgICB9OwogICAgIHVuc2ln
bmVkIG51bUltcG9ydEZ1bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtSW1wb3J0RnVuY3Rp
b25zOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQ
bGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCmlu
ZGV4IDU4MTQyNjcxZThiZi4uNTJmYzNiMmE0MTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcApAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgTExJbnRQ
bGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkKIAogICAgIGZvciAoYXV0byYgdW5saW5rZWQg
OiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6
IHVubGlua2VkKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKKyAgICAgICAgICAgIENvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9y
bWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBvcnRzIGNv
dWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNo
cG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNT
RVJULgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjY0NjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAppbmRleCA4OTBkOGQyMDk3YWYuLjk1ZmMxZDE5OTJjNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgT01HUGxh
bjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKIAogICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jYWxsZWVT
YXZlUmVnaXN0ZXJzKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+IGVudHJ5cG9pbnQ7CisgICAgQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7
CiAgICAgewogICAgICAgICBBU1NFUlQobV9jYWxsZWVHcm91cC5wdHIoKSA9PSBtX21vZHVsZS0+
Y2FsbGVlR3JvdXBGb3IobW9kZSgpKSk7CiAgICAgICAgIFJlZjxPTUdDYWxsZWU+IGNhbGxlZSA9
IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4
U3BhY2UpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24t
PnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMp
LCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKQEAgLTEyMiw3ICsxMjIsNyBA
QCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIG1fY2FsbGVl
R3JvdXAtPnNldE9NR0NhbGxlZShsb2NrZXIsIG1fZnVuY3Rpb25JbmRleCwgY2FsbGVlLmNvcHlS
ZWYoKSk7CiAKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2Fs
bHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQ
dHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgICAgICAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4g
ZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1f
bW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKICAgICAg
ICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jYWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0
dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CiAgICAgICAgICAgICBlbHNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCmluZGV4
IDFjNWQyMWVhZDY4Ny4uY2E1ODBkY2MwN2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgT1NS
RW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogCiAgICAgICAgIExvY2tlciBsb2Nr
ZXIgeyBtX2NhbGxlZUdyb3VwLT5tX2xvY2sgfTsKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDog
Y2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgICAgICAgICBDb2Rl
UHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1
bmN0aW9uQ291bnQoKSkKICAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jYWxsZWVHcm91
cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7
CiAgICAgICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bl
cmF0aW9ucy5jcHAKaW5kZXggOTA3YjRjOTlkOWM4Li5jMTNmYmM3ODBjNWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKQEAgLTIxNiw3ICsyMTYs
NyBAQCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNv
bnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgYwogI2VuZGlmCiAgICAgLy8gNC4gQ29uZmlndXJl
IGFyZ3VtZW50IHJlZ2lzdGVycyB0byBqdW1wIHRvIE9TUiBlbnRyeSBmcm9tIHRoZSBjYWxsZXIg
b2YgdGhpcyBydW50aW1lIGZ1bmN0aW9uLgogICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkgPSBiaXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVyPihidWZmZXIpOwotICAgIGNvbnRl
eHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMSkgPSBiaXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVy
Pihvc3JFbnRyeUNhbGxlZS5lbnRyeXBvaW50KCkuZXhlY3V0YWJsZUFkZHJlc3M8PigpKTsKKyAg
ICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjEpID0gYml0d2lzZV9jYXN0PFVDUFVS
ZWdpc3Rlcj4ob3NyRW50cnlDYWxsZWUuZW50cnlwb2ludCgpLnRhZ2dlZFB0cjw+KCkpOwogfQog
CiBpbmxpbmUgYm9vbCBzaG91bGRKSVQodW5zaWduZWQgZnVuY3Rpb25JbmRleCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBmYTlhYTc3OGU2OGMuLjNhMzc1MzM1
NjQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtMTY0LDcg
KzE2NCw3IEBAIHZvaWQgUGxhbjo6dXBkYXRlQ2FsbFNpdGVzVG9DYWxsVXMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGNhbGxlZUdyb3VwTG9ja2VyLCBDYWxsCiAgICAgICAgIGZvciAoYXV0byYgY2Fs
bCA6IGNhbGxzaXRlcykgewogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbVBsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRl
cihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNh
bGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5k
ZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZihXYXNtUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUmVwYXRjaGluZyBjYWxsIGF0OiAiLCBS
YXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0byAiLCBSYXdQ
b2ludGVyKGVudHJ5cG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAg
IGRhdGFMb2dMbklmKFdhc21QbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwg
YXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRv
ICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC50YWdnZWRQdHIoKSkpOwogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIHN0YWdl
ZENhbGxzLmdldChjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0
aHMuY3BwCmluZGV4IGVkMjA3Yzk1MjM0Yy4uMGRhODcwMDFlNDNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIFdB
U01fU0xPV19QQVRIX0RFQ0wocHJvbG9ndWVfb3NyKQogICAgIGlmICghaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3MoY2FsbGVlLCBpbnN0YW5jZSkpCiAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhu
dWxscHRyLCBudWxscHRyKTsKIAotICAgIFdBU01fUkVUVVJOX1RXTyhjYWxsZWUtPnJlcGxhY2Vt
ZW50KGluc3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpKS0+ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIG51bGxwdHIpOworICAgIFdBU01fUkVUVVJOX1RXTyhjYWxsZWUtPnJlcGxhY2Vt
ZW50KGluc3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpKS0+ZW50cnlwb2ludCgpLnRhZ2dlZFB0cigp
LCBudWxscHRyKTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChsb29wX29zcikKQEAgLTIxMCw3
ICsyMTAsNyBAQCBXQVNNX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgICAgICBmb3IgKFZp
cnR1YWxSZWdpc3RlciByZWcgOiBvc3JFbnRyeURhdGEudmFsdWVzKQogICAgICAgICAgICAgYnVm
ZmVyW2luZGV4KytdID0gUkVBRChyZWcpLmVuY29kZWRKU1ZhbHVlKCk7CiAKLSAgICAgICAgV0FT
TV9SRVRVUk5fVFdPKGJ1ZmZlciwgYmJxQ2FsbGVlLT5sb29wRW50cnlwb2ludHMoKVtvc3JFbnRy
eURhdGEubG9vcEluZGV4XS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgV0FTTV9SRVRV
Uk5fVFdPKGJ1ZmZlciwgYmJxQ2FsbGVlLT5sb29wRW50cnlwb2ludHMoKVtvc3JFbnRyeURhdGEu
bG9vcEluZGV4XS50YWdnZWRQdHIoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29uc3QgYXV0
byBkb09TUkVudHJ5ID0gWyZdKFdhc206Ok9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSkg
ewogICAgICAgICAgICAgaWYgKG9zckVudHJ5Q2FsbGVlLT5sb29wSW5kZXgoKSAhPSBvc3JFbnRy
eURhdGEubG9vcEluZGV4KQpAQCAtMjI2LDcgKzIyNiw3IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wo
bG9vcF9vc3IpCiAgICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgOiBvc3JFbnRy
eURhdGEudmFsdWVzKQogICAgICAgICAgICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IFJFQUQocmVn
KS5lbmNvZGVkSlNWYWx1ZSgpOwogCi0gICAgICAgICAgICBXQVNNX1JFVFVSTl9UV08oYnVmZmVy
LCBvc3JFbnRyeUNhbGxlZS0+ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
ICAgICAgICAgV0FTTV9SRVRVUk5fVFdPKGJ1ZmZlciwgb3NyRW50cnlDYWxsZWUtPmVudHJ5cG9p
bnQoKS50YWdnZWRQdHIoKSk7CiAgICAgICAgIH07CiAKICAgICAgICAgaWYgKGF1dG8qIG9zckVu
dHJ5Q2FsbGVlID0gY2FsbGVlLT5vc3JFbnRyeUNhbGxlZShpbnN0YW5jZS0+bWVtb3J5KCktPm1v
ZGUoKSkpCkBAIC00NTEsNyArNDUxLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dh
c21DYWxsKFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZnVuY3Rpb24KIHsKICAg
ICB1aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50ID0gaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVs
ZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICBDb2RlUHRyPFdhc21FbnRy
eVB0clRhZz4gY29kZVB0cjsKIAogICAgIGlmIChmdW5jdGlvbkluZGV4IDwgaW1wb3J0RnVuY3Rp
b25Db3VudCkgewogICAgICAgICBXYXNtOjpJbnN0YW5jZTo6SW1wb3J0RnVuY3Rpb25JbmZvKiBm
dW5jdGlvbkluZm8gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb25JbmZvKGZ1bmN0aW9uSW5kZXgp
OwpAQCAtNDY3LDcgKzQ2Nyw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2Fs
bChXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGZ1bmN0aW9uCiAgICAgICAgIGNv
ZGVQdHIgPSAqaW5zdGFuY2UtPmNhbGxlZUdyb3VwKCktPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25G
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgIH0KIAotICAgIFdBU01f
Q0FMTF9SRVRVUk4oaW5zdGFuY2UsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgV2FzbUVu
dHJ5UHRyVGFnKTsKKyAgICBXQVNNX0NBTExfUkVUVVJOKGluc3RhbmNlLCBjb2RlUHRyLnRhZ2dl
ZFB0cigpLCBXYXNtRW50cnlQdHJUYWcpOwogfQogCiBXQVNNX1NMT1dfUEFUSF9ERUNMKGNhbGwp
CkBAIC01MDYsNyArNTA2LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxs
SW5kaXJlY3QoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206Okluc3RhbmMKICAgICBpZiAodGFy
Z2V0SW5zdGFuY2UgIT0gaW5zdGFuY2UpCiAgICAgICAgIHRhcmdldEluc3RhbmNlLT5zZXRDYWNo
ZWRTdGFja0xpbWl0KGluc3RhbmNlLT5jYWNoZWRTdGFja0xpbWl0KCkpOwogCi0gICAgV0FTTV9D
QUxMX1JFVFVSTih0YXJnZXRJbnN0YW5jZSwgZnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlv
bi0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICBXQVNNX0NBTExf
UkVUVVJOKHRhcmdldEluc3RhbmNlLCBmdW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0aW9uLT50
YWdnZWRQdHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChj
YWxsX2luZGlyZWN0KQpAQCAtNTQzLDcgKzU0Myw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgZG9XYXNtQ2FsbFJlZihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGNh
CiAKICAgICBBU1NFUlQoV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVy
ZShmdW5jdGlvbi50eXBlSW5kZXgpID09IENBTExFRSgpLT5zaWduYXR1cmUodHlwZUluZGV4KSk7
CiAgICAgVU5VU0VEX1BBUkFNKHR5cGVJbmRleCk7Ci0gICAgV0FTTV9DQUxMX1JFVFVSTihjYWxs
ZWVJbnN0YW5jZSwgZnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbi0+ZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICBXQVNNX0NBTExfUkVUVVJOKGNhbGxlZUlu
c3RhbmNlLCBmdW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0aW9uLT50YWdnZWRQdHIoKSwgV2Fz
bUVudHJ5UHRyVGFnKTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChjYWxsX3JlZikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKaW5kZXggZmVjMmExMzc3OWJmLi41
NDcyZjFhMDA4NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
aHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3Bw
CkBAIC01Nyw3ICs1Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0CiAgICAgaml0LmJyZWFr
cG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5vdCByZWFjaCB0aGlzLgogCiAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNt
VGh1bmspOwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKSk7CisgICAgbGlua0J1ZmZlci5saW5r
PE9wZXJhdGlvblB0clRhZz4oY2FsbCwgb3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOwogICAg
IHJldHVybiBGSU5BTElaRV9XQVNNX0NPREUobGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJU
aHJvdyBleGNlcHRpb24gZnJvbSBXYXNtIik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtLmNwcAppbmRleCA1MDU4MTEzMjM3NDguLjlhM2U3Mzc1MTA2NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAtODcsNyArODcs
NyBAQCB2b2lkIG1hcnNoYWxsSlNSZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFR5cGVE
ZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbiwgYwogICAgICAgICAgICAgICAgIGppdC5sb2FkV2Fz
bUNvbnRleHRJbnN0YW5jZSh3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Db252ZXJ0
VG9CaWdJbnQpPih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCBpbnB1dEpTUik7Ci0gICAgICAgICAg
ICBqaXQuY2FsbE9wZXJhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bkNvbnZlcnRUb0JpZ0ludCkpOworICAgICAgICAgICAgaml0LmNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29udmVydFRvQmlnSW50KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBib3hXYXNt
UmVzdWx0KGppdCwgc2lnbmF0dXJlLnJldHVyblR5cGUoMCksIHdhc21GcmFtZUNvbnZlbnRpb24u
cmVzdWx0c1swXSwgSlNSSW5mbzo6cmV0dXJuVmFsdWVKU1IpOwogICAgIH0gZWxzZSB7CkBAIC0y
MDIsNyArMjAyLDcgQEAgdm9pZCBtYXJzaGFsbEpTUmVzdWx0KENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24sIGMKIAogICAgICAgICAgICAgICAg
IGppdC5sb2FkVmFsdWUoYWRkcmVzcywgdmFsdWVKU1IpOwogICAgICAgICAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpPih3YXNtQ29u
dGV4dEluc3RhbmNlR1BSLCB2YWx1ZUpTUik7Ci0gICAgICAgICAgICAgICAgaml0LmNhbGxPcGVy
YXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Db252ZXJ0VG9CaWdJ
bnQpKTsKKyAgICAgICAgICAgICAgICBqaXQuY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0
VG9CaWdJbnQpOwogICAgICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKEpTUkluZm86OnJldHVy
blZhbHVlSlNSLCBhZGRyZXNzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIwLDcg
KzIyMCw3IEBAIHZvaWQgbWFyc2hhbGxKU1Jlc3VsdChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uLCBjCiAgICAgICAgICAgICBqaXQuc3ViUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIEFTU0VSVCh3
YXNtQ29udGV4dEluc3RhbmNlR1BSICE9IHNhdmVkUmVzdWx0c0dQUik7CiAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25BbGxvY2F0ZVJlc3VsdHNBcnJheSk+KHdh
c21Db250ZXh0SW5zdGFuY2VHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdHlwZURl
ZmluaXRpb24pLCBpbmRleGluZ1R5cGUsIHNhdmVkUmVzdWx0c0dQUik7Ci0gICAgICAgIGppdC5j
YWxsT3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQWxsb2Nh
dGVSZXN1bHRzQXJyYXkpKTsKKyAgICAgICAgaml0LmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWxs
b2NhdGVSZXN1bHRzQXJyYXkpOwogICAgICAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggMTY4YmI5YzE4ZmI0Li5jNjUxNjNi
ODgzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmgKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIFdhc206OlR5cGVJ
bmRleCB0eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgY29uc3Q7CiAKICAgICBFeHBlY3RlZDx2b2lkLCBXYXNtOjpCaW5kaW5nRmFpbHVy
ZT4gZ2VuZXJhdGVXYXNtVG9KU1N0dWJzKFZNJik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PFdhc21FbnRyeVB0clRhZz4gd2FzbVRvRW1iZWRkZXJTdHViKHNpemVfdCBpbXBvcnRGdW5jdGlv
bk51bSkgeyByZXR1cm4gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRGdW5jdGlvbk51bV0uY29k
ZSgpOyB9CisgICAgQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVyU3R1Yihz
aXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1w
b3J0RnVuY3Rpb25OdW1dLmNvZGUoKTsgfQogCiAgICAgdm9pZCBjbGVhckpTQ2FsbElDcyhWTSYp
OwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAppbmRleCAxNTNkYTNlNWZiNjMuLjU1Mzc4NDgz
NGFlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAt
MjY4LDcgKzI2OCw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQ
dHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZtCiAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOwogICAg
ICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKEpTUkluZm86OnJldHVyblZhbHVlSlNSLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2FsbCwgb3BlcmF0aW9uQ29udmVydFRvQmln
SW50KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
bGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CkBAIC0zMjUsNyArMzI1LDcgQEAg
RXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdG
YWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgICAgIGppdC5tb3ZlVmFsdWVSZWdzKEpT
UkluZm86OnJldHVyblZhbHVlSlNSLCBkZXN0KTsKIAogICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNv
bnZlcnRUb0k2NCkpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25Q
dHJUYWc+KGNhbGwsIG9wZXJhdGlvbkNvbnZlcnRUb0k2NCk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNDksNyArMzQ5LDcgQEAgRXhwZWN0ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3
YXNtVG9KUyhWTSYgdm0KICNlbmRpZgogCiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ29udmVydFRv
STMyKSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4o
Y2FsbCwgb3BlcmF0aW9uQ29udmVydFRvSTMyKTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAg
ICAgICBkb25lLmxpbmsoJmppdCk7CkBAIC0zODEsNyArMzgxLDcgQEAgRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9K
UyhWTSYgdm0KICAgICAgICAgICAgIGppdC5tb3ZlKEZQUkluZm86OnJldHVyblZhbHVlRlBSICwg
ZGVzdCk7CiAKICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Db252ZXJ0VG9GMzIpKTsKKyAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbms8T3BlcmF0aW9uUHRyVGFnPihjYWxsLCBvcGVyYXRpb25D
b252ZXJ0VG9GMzIpOwogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGRvbmUubGluaygm
aml0KTsKQEAgLTQxMiw3ICs0MTIsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAg
ICAgICAgaml0Lm1vdmUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIGRlc3QpOwogCiAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uQ29udmVydFRvRjY0KSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2FsbCwgb3BlcmF0aW9uQ29udmVydFRvRjY0KTsKICAg
ICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CkBAIC00NDEsNyAr
NDQxLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4s
IEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgc3RhdGljX2Fzc2VydChu
b092ZXJsYXAoc2F2ZWRSZXN1bHRzR1BSLCBKU1JJbmZvOjpyZXR1cm5WYWx1ZUpTUikpOwogICAg
ICAgICBBU1NFUlQod2FzbUNvbnRleHRJbnN0YW5jZUdQUiAhPSBzYXZlZFJlc3VsdHNHUFIpOwog
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uSXRlcmF0ZVJlc3Vs
dHMpPih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
JnR5cGVEZWZpbml0aW9uKSwgSlNSSW5mbzo6cmV0dXJuVmFsdWVKU1IsIHNhdmVkUmVzdWx0c0dQ
UiwgQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5jYWxs
T3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXRlcmF0ZVJl
c3VsdHMpKTsKKyAgICAgICAgaml0LmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSXRlcmF0ZVJlc3Vs
dHMpOwogICAgICAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KQogICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogCkBAIC00NzAsNyArNDcwLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAg
ICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogCiAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldh
c21VbndpbmQpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluazxPcGVyYXRpb25QdHJUYWc+
KGNhbGwsIG9wZXJhdGlvbldhc21VbndpbmQpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTUw
MCw3ICs1MDAsNyBAQCB2b2lkIGVtaXRUaHJvd1dhc21Ub0pTRXhjZXB0aW9uKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgd2FzbUluc3RhbmNlLCBXYXNtOjpFeAogICAgIGppdC5icmVha3BvaW50
KCk7IC8vIFdlIHNob3VsZCBub3QgcmVhY2ggdGhpcy4KIAogICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oV2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNF
eGNlcHRpb24pKTsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rPE9wZXJhdGlvblB0clRhZz4oY2Fs
bCwgV2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOwogICAgIH0pOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCmluZGV4IDE0YWNjMjg4MWMwOC4uZDU4ZWViMzJiMzJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtMTA5
LDcgKzEwOSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgdm0ud2FzbUNvbnRleHQu
c3RvcmUod2FzbUluc3RhbmNlLCB2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKICAgICBBU1NFUlQod2Fz
bUZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKICAgICBBU1NFUlQoJndhc21GdW5jdGlvbi0+aW5zdGFu
Y2UoKS0+aW5zdGFuY2UoKSA9PSB2bS53YXNtQ29udGV4dC5sb2FkKCkpOwotICAgIEVuY29kZWRK
U1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20od2FzbUZ1bmN0aW9uLT5qc0VudHJ5cG9p
bnQoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksICZ2bSwgJnByb3RvQ2FsbEZy
YW1lKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9XYXNtKHdhc21G
dW5jdGlvbi0+anNFbnRyeXBvaW50KE11c3RDaGVja0FyaXR5KS50YWdnZWRQdHIoKSwgJnZtLCAm
cHJvdG9DYWxsRnJhbWUpOwogICAgIGlmIChwcmV2V2FzbUluc3RhbmNlICE9IHdhc21JbnN0YW5j
ZSkgewogICAgICAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIHNvbWUgZXh0cmEgc2FmZXR5IGluc3Rl
YWQgb2YgbGVhdmluZyBhIGNhY2hlZAogICAgICAgICAvLyB2YWx1ZSBpbiB0aGVyZS4gSWYgd2Ug
ZXZlciBmb3JnZXQgdG8gc2V0IHRoZSB2YWx1ZSB0byBiZSBhIHJlYWwKQEAgLTE3OSw3ICsxNzks
NyBAQCBXYXNtOjpJbnN0YW5jZSogV2ViQXNzZW1ibHlGdW5jdGlvbjo6cHJldmlvdXNJbnN0YW5j
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxs
RW50cnlwb2ludFNsb3coKQorQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiB7CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCmluZGV4IDY2OGYxNTJlMWIyMS4uNjU3ZDAwZWI4
MzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246OkxvYWRMb2NhdGlvbiwgV2FzbTo6VHlwZUluZGV4KTsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwog
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4ganNFbnRyeXBvaW50
KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQorICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBqc0Vu
dHJ5cG9pbnQoQXJpdHlDaGVja01vZGUgYXJpdHkpCiAgICAgewogICAgICAgICBpZiAoYXJpdHkg
PT0gQXJpdHlDaGVja05vdFJlcXVpcmVkKQogICAgICAgICAgICAgcmV0dXJuIG1fanNFbnRyeXBv
aW50OwpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2pzRW50cnlw
b2ludDsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
anNDYWxsRW50cnlwb2ludCgpCisgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRy
eXBvaW50KCkKICAgICB7CiAgICAgICAgIGlmIChtX2pzQ2FsbEVudHJ5cG9pbnQpCiAgICAgICAg
ICAgICByZXR1cm4gbV9qc0NhbGxFbnRyeXBvaW50LmNvZGUoKTsKQEAgLTgyLDcgKzgyLDcgQEAg
cHJpdmF0ZToKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlR5cGVJbmRleCk7
CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlw
b2ludFNsb3coKTsKKyAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRT
bG93KCk7CiAgICAgcHRyZGlmZl90IHByZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSBjb25zdDsKICAg
ICBib29sIHVzZXNUYWdSZWdpc3RlcnMoKSBjb25zdDsKIApAQCAtOTEsNyArOTEsNyBAQCBwcml2
YXRlOgogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBqc0VudHJ5cG9pbnQg
YmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCiAgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3aGlj
aCBwb2ludHMgdG8gdGhlIE1vZHVsZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGljaAogICAgIC8vIGVu
c3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNpZ25hdHVyZS9jb2RlIGRvZXNuJ3QgZ2V0IGRlYWxsb2Nh
dGVkLgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IG1fanNFbnRy
eXBvaW50OworICAgIENvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBtX2pzRW50cnlwb2ludDsKICAg
ICBXcml0ZUJhcnJpZXI8SlNUb1dhc21JQ0NhbGxlZT4gbV9qc1RvV2FzbUlDQ2FsbGVlOwogICAg
IC8vIFVzZWQgZm9yIEpTIGNhbGxpbmcgaW50byBXYXNtLgogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiBtX2pzQ2FsbEVudHJ5cG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyRGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJEaXNhc3NlbWJsZXIuY3BwCmluZGV4IDY0ZGMwNjQ4OTUyNS4u
YTVhNmY2YTMzNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
RGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyRGlz
YXNzZW1ibGVyLmNwcApAQCAtNTgsNyArNTgsNyBAQCBZYXJyRGlzYXNzZW1ibGVyOjp+WWFyckRp
c2Fzc2VtYmxlcigpCiAKIHZvaWQgWWFyckRpc2Fzc2VtYmxlcjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogewotICAgIG1fY29kZVN0YXJ0ID0gbGlua0J1
ZmZlci5lbnRyeXBvaW50PERpc2Fzc2VtYmx5UHRyVGFnPigpLnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKTsKKyAgICBtX2NvZGVTdGFydCA9IGxpbmtCdWZmZXIuZW50cnlwb2ludDxEaXNhc3Nl
bWJseVB0clRhZz4oKS51bnRhZ2dlZFB0cigpOwogICAgIG1fY29kZUVuZCA9IGJpdHdpc2VfY2Fz
dDx1aW50OF90Kj4obV9jb2RlU3RhcnQpICsgbGlua0J1ZmZlci5zaXplKCk7CiAKICAgICBkdW1w
SGVhZGVyKG91dCwgbGlua0J1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgK
aW5kZXggMzFmNmJmZDRiMDM4Li42ODhkM2UxYmJhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySklULmgKQEAgLTMzMyw5ICszMzMsOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCho
YXM4Qml0Q29kZSgpKTsKICNpZiBDUFUoQVJNNjRFKQogICAgICAgICBpZiAoT3B0aW9uczo6dXNl
SklUQ2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50cnlUb1lhcnJK
SVQoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwgbWF0Y2hpbmdDb250ZXh0LCByZXRhZ0Nv
ZGVQdHI8WWFycjhCaXRQdHJUYWcsIFlhcnJFbnRyeVB0clRhZz4obV9yZWY4LmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKSkpOworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50
cnlUb1lhcnJKSVQoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwgbWF0Y2hpbmdDb250ZXh0
LCByZXRhZ0NvZGVQdHI8WWFycjhCaXRQdHJUYWcsIFlhcnJFbnRyeVB0clRhZz4obV9yZWY4LmNv
ZGUoKS50YWdnZWRQdHIoKSkpKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQo
dW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGU4LCBZYXJyOEJpdFB0clRhZz4obV9yZWY4LmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBt
YXRjaGluZ0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0
aW9uUHRyPFlhcnJKSVRDb2RlOCwgWWFycjhCaXRQdHJUYWc+KG1fcmVmOC5jb2RlKCkudGFnZ2Vk
UHRyKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIG1hdGNoaW5nQ29udGV4dCkpOwog
ICAgIH0KIAogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgTWF0Y2hpbmdDb250ZXh0
SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQpCkBAIC0zNDMsOSArMzQzLDkgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQoaGFzMTZCaXRDb2RlKCkpOwogI2lmIENQVShBUk02NEUpCiAgICAgICAgIGlm
IChPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQo
dm1FbnRyeVRvWWFyckpJVChpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRjaGluZ0Nv
bnRleHQsIHJldGFnQ29kZVB0cjxZYXJyMTZCaXRQdHJUYWcsIFlhcnJFbnRyeVB0clRhZz4obV9y
ZWYxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdCh2bUVudHJ5VG9ZYXJySklUKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQs
IG1hdGNoaW5nQ29udGV4dCwgcmV0YWdDb2RlUHRyPFlhcnIxNkJpdFB0clRhZywgWWFyckVudHJ5
UHRyVGFnPihtX3JlZjE2LmNvZGUoKS50YWdnZWRQdHIoKSkpKTsKICNlbmRpZgotICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGUxNiwgWWFycjE2
Qml0UHRyVGFnPihtX3JlZjE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3Rh
cnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRjaGluZ0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1h
dGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlMTYsIFlhcnIxNkJpdFB0clRh
Zz4obV9yZWYxNi5jb2RlKCkudGFnZ2VkUHRyKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRw
dXQsIG1hdGNoaW5nQ29udGV4dCkpOwogICAgIH0KIAogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUo
Y29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBNYXRj
aGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkKQEAgLTM1Myw5ICszNTMsOSBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZU1hdGNoT25seSgpKTsKICNpZiBDUFUo
QVJNNjRFKQogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICAgICAg
cmV0dXJuIE1hdGNoUmVzdWx0KHZtRW50cnlUb1lhcnJKSVQoaW5wdXQsIHN0YXJ0LCBsZW5ndGgs
IG51bGxwdHIsIG1hdGNoaW5nQ29udGV4dCwgcmV0YWdDb2RlUHRyPFlhcnJNYXRjaE9ubHk4Qml0
UHRyVGFnLCBZYXJyRW50cnlQdHJUYWc+KG1fbWF0Y2hPbmx5OC5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpKTsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh2bUVudHJ5VG9ZYXJy
SklUKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQsIHJldGFn
Q29kZVB0cjxZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZywgWWFyckVudHJ5UHRyVGFnPihtX21hdGNo
T25seTguY29kZSgpLnRhZ2dlZFB0cigpKSkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBNYXRj
aFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTgsIFlhcnJNYXRj
aE9ubHk4Qml0UHRyVGFnPihtX21hdGNoT25seTguY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KGlucHV0LCBzdGFydCwgbGVuZ3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsKKyAgICAg
ICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hP
bmx5OCwgWWFyck1hdGNoT25seThCaXRQdHJUYWc+KG1fbWF0Y2hPbmx5OC5jb2RlKCkudGFnZ2Vk
UHRyKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsK
ICAgICB9CiAKICAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyKiBtYXRj
aGluZ0NvbnRleHQpCkBAIC0zNjMsOSArMzYzLDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
aGFzMTZCaXRDb2RlTWF0Y2hPbmx5KCkpOwogI2lmIENQVShBUk02NEUpCiAgICAgICAgIGlmIChP
cHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodm1F
bnRyeVRvWWFyckpJVChpbnB1dCwgc3RhcnQsIGxlbmd0aCwgbnVsbHB0ciwgbWF0Y2hpbmdDb250
ZXh0LCByZXRhZ0NvZGVQdHI8WWFyck1hdGNoT25seTE2Qml0UHRyVGFnLCBZYXJyRW50cnlQdHJU
YWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSk7CisgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodm1FbnRyeVRvWWFyckpJVChpbnB1dCwgc3RhcnQsIGxl
bmd0aCwgbnVsbHB0ciwgbWF0Y2hpbmdDb250ZXh0LCByZXRhZ0NvZGVQdHI8WWFyck1hdGNoT25s
eTE2Qml0UHRyVGFnLCBZYXJyRW50cnlQdHJUYWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLnRhZ2dl
ZFB0cigpKSkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5j
dGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTE2LCBZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+
KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwg
bGVuZ3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNo
UmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTYsIFlhcnJNYXRj
aE9ubHkxNkJpdFB0clRhZz4obV9tYXRjaE9ubHkxNi5jb2RlKCkudGFnZ2VkUHRyKCkpKGlucHV0
LCBzdGFydCwgbGVuZ3RoLCBudWxscHRyLCBtYXRjaGluZ0NvbnRleHQpKTsKICAgICB9CiAKICNp
ZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0zNzQsNyArMzc0LDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIWhhczhCaXRDb2RlTWF0Y2hPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsK
IAotICAgICAgICByZXR1cm4gbV9tYXRjaE9ubHk4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgICAgICByZXR1cm4gbV9tYXRjaE9ubHk4LmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9
CiAKICAgICB2b2lkICpnZXQxNkJpdE1hdGNoT25seUFkZHIoKQpAQCAtMzgyLDcgKzM4Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKCFoYXMxNkJpdENvZGVNYXRjaE9ubHkoKSkKICAgICAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgICAgIHJldHVybiBtX21hdGNoT25seTE2LmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOworICAgICAgICByZXR1cm4gbV9tYXRjaE9ubHkxNi5jb2RlKCkudGFn
Z2VkUHRyKCk7CiAgICAgfQogCiAgICAgdm9pZCAqZ2V0OEJpdE1hdGNoQWRkcigpCkBAIC0zOTAs
NyArMzkwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWhhczhCaXRDb2RlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKIAotICAgICAgICByZXR1cm4gbV9yZWY4LmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOworICAgICAgICByZXR1cm4gbV9yZWY4LmNvZGUoKS50YWdnZWRQdHIoKTsKICAg
ICB9CiAKICAgICB2b2lkICpnZXQxNkJpdE1hdGNoQWRkcigpCkBAIC0zOTgsNyArMzk4LDcgQEAg
cHVibGljOgogICAgICAgICBpZiAoIWhhczE2Qml0Q29kZSgpKQogICAgICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICAgICAgcmV0dXJuIG1fcmVmMTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgIHJldHVybiBtX3JlZjE2LmNvZGUoKS50YWdnZWRQdHIoKTsKICAgICB9CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGU5Yjk2
YTM2YTk5Li4zMWM0YWM0MmY3ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMjAzLDcgKzIwMyw2IEBACiAJCUREM0RDODdEMjdBNEJGOEUwMDdFNUI2MSAv
KiBHcmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQz
REM4N0UyN0E0QkY4RTAwN0U1QjYxIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzI2NzE1MUE4MjVBMDA0
MTIzRkYgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlERDNEQzg3RjI3QTRCRjhFMDA3RTVCNjEgLyogTG9n
Z2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzdD
RDg2QTFGRDlDRkQyMDA4Mjg1ODcgLyogTG9nZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJREQzREM4ODAyN0E0QkY4RTAwN0U1QjYxIC8qIE1l
dGFBbGxvY2F0b3JQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFNzQ5N0VEMjA5MTYzMDYwMDAzNTY1QiAvKiBNZXRhQWxsb2NhdG9yUHRyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzREM4ODEy
N0E0QkY4RTAwN0U1QjYxIC8qIE1ldGFBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MkNFMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRh
QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJREQzREM4ODIyN0E0QkY4RTAwN0U1QjYxIC8qIENoZWNrZWRQdHIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQjkxRjUxMjY0OEVBNEQwMEE1
NjIxNyAvKiBDaGVja2VkUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJREQzREM4ODMyN0E0QkY4RTAwN0U1QjYxIC8qIE9iamVjdElkZW50aWZp
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzQThB
QzNEMUZBQkJFOTQwMDIwNjRBQyAvKiBPYmplY3RJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgxNiw2ICs4MTUsOCBAQAogCQlG
RTFFMkM0MjIyNDE4N0M2MDBGNkI3MjkgLyogUGxhdGZvcm1SZWdpc3RlcnMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDNDEyMjQxODdDNjAw
RjZCNzI5IC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmNwcCAqLzsgfTsKIAkJRkUzNUQwOTIyN0RDNUVD
QzAwOURGQTVCIC8qIFN0YWNrQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUzNUQwOTEyN0RDNUVDQzAwOURGQTVCIC8qIFN0YWNrQ2hlY2su
Y3BwICovOyB9OwogCQlGRTdBQ0ZFRjI4NURDMkY5MDA3RkM4RTkgLyogUmF3SGV4LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTdBQ0ZFRTI4NURDMkY4
MDA3RkM4RTkgLyogUmF3SGV4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJRkU5QjhCMUEyOEIxNDUzRDAwODhDNkUxIC8qIENvZGVQdHIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOUI4QjE5MjhCMTQ1
M0QwMDg4QzZFMSAvKiBDb2RlUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJRkU5QjhCMUUyOEIxQjFDNzAwODhDNkUxIC8qIENvZGVQdHIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5QjhCMUQy
OEIxQjFDNjAwODhDNkUxIC8qIENvZGVQdHIuY3BwICovOyB9OwogCQlGRUMyNkJGMzI4OURCQkQz
MDA2MzlBNTkgLyogRnVuY3Rpb25QdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFQzI2QkYyMjg5REJCRDMwMDYzOUE1OSAvKiBGdW5jdGlvblB0ci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFREFD
RDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBT
dGFja1N0YXRzLmNwcCAqLzsgfTsKIAkJRkVFQTRERjkyMTZEN0JFNDAwQUMwNjAyIC8qIFN0YWNr
UG9pbnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRUVBNERGODIxNkQ3QkU0MDBBQzA2MDIgLyogU3RhY2tQb2ludGVyLmNwcCAqLzsgfTsKQEAg
LTE3MTcsMTMgKzE3MTgsMTQgQEAKIAkJRkUzNUQwOTEyN0RDNUVDQzAwOURGQTVCIC8qIFN0YWNr
Q2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tDaGVj
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzg0MjM0MjMyNUNDODAwMDlE
RDQ0NSAvKiBSZXNvdXJjZVVzYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlc291cmNlVXNhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU3NDk3RTQy
MDhGRkNBQTAwMDM1NjVCIC8qIFB0clRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQdHJUYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU3NDk3RUQyMDkx
NjMwNjAwMDM1NjVCIC8qIE1ldGFBbGxvY2F0b3JQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWV0YUFsbG9jYXRvclB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTdBQ0ZFRTI4NURDMkY4MDA3RkM4RTkgLyogUmF3SGV4LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJhd0hleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTgyMjUzMDFCMkExRTVCMDBCQTY4RkQgLyogTmFrZWRQdHIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkU4NkE4NzQxRTU5NDQwMjAwMTExQkJGIC8qIEZvcmJpZEhlYXBBbGxvY2F0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcmJpZEhlYXBBbGxvY2F0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFODkyNUFGMUQwMERBRUMwMDQ2OTA3RSAvKiBJ
bmRlbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRlbnRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk3RjZBODI0NUNFNUREMDBDNjNGQzYgLyog
U3RkSW50RXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZEludEV4
dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5NkI1MjI0QTg0NUFGMDAx
RDJFNjMgLyogRmFpbHVyZUFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGYWlsdXJlQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOUI4QjE5
MjhCMTQ1M0QwMDg4QzZFMSAvKiBDb2RlUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvZGVQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU5QjhCMUQy
OEIxQjFDNjAwODhDNkUxIC8qIENvZGVQdHIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZVB0ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
QjZCMDM1MjAxQkUwQjYwMEI5NThDMSAvKiBQb2ludGVyUHJlcGFyYXRpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJQcmVwYXJhdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVDMjZCRjIyODlEQkJEMzAwNjM5QTU5IC8qIEZ1bmN0aW9u
UHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uUHRyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBT
dGFja1N0YXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNr
U3RhdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1MCw2ICsxOTUyLDgg
QEAKIAkJCQk5QkYwMDEzNDI2N0M0Q0NGMDBEQ0ZCM0YgLyogQ2hlY2tlZFJlZi5oICovLAogCQkJ
CTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovLAogCQkJCTBGNjZC
MjgxMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCAqLywKKwkJCQlGRTlCOEIxRDI4QjFC
MUM2MDA4OEM2RTEgLyogQ29kZVB0ci5jcHAgKi8sCisJCQkJRkU5QjhCMTkyOEIxNDUzRDAwODhD
NkUxIC8qIENvZGVQdHIuaCAqLywKIAkJCQkwRkM0RURFNTE2OTYxNDk2MDBGNjUwNDEgLyogQ29t
bWFQcmludGVyLmggKi8sCiAJCQkJRTNDRjc2OTAyMTE1RDZCQTAwOTFERTQ4IC8qIENvbXBhY3RQ
b2ludGVyVHVwbGUuaCAqLywKIAkJCQlGRkVFNDZGMzI4MjVERjgwMDAzQkM5ODEgLyogQ29tcGFj
dFB0ci5oICovLApAQCAtMjExNiw3ICsyMTIwLDYgQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0
MTIzRkYgLyogTWV0YUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEy
M0ZGIC8qIE1ldGFBbGxvY2F0b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYg
LyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovLAotCQkJCUZFNzQ5N0VEMjA5MTYzMDYwMDAzNTY1
QiAvKiBNZXRhQWxsb2NhdG9yUHRyLmggKi8sCiAJCQkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNG
IC8qIE1vbm90b25pY1RpbWUuY3BwICovLAogCQkJCTBGNjZCMjgzMURDOTdCQUIwMDRBMUQzRiAv
KiBNb25vdG9uaWNUaW1lLmggKi8sCiAJCQkJRkU4MjI1MzAxQjJBMUU1QjAwQkE2OEZEIC8qIE5h
a2VkUHRyLmggKi8sCkBAIC0zMDQxLDcgKzMwNDQsNiBAQAogCQkJCUREM0RDOTI0MjdBNEJGOEUw
MDdFNUI2MSAvKiBNZXNzYWdlUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RDODgxMjdB
NEJGOEUwMDdFNUI2MSAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlERDNE
Qzg3MDI3QTRCRjhFMDA3RTVCNjEgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJREQzREM4ODAyN0E0QkY4RTAwN0U1QjYxIC8qIE1ldGFBbGxvY2F0b3JQdHIuaCBp
biBIZWFkZXJzICovLAogCQkJCURERjMwNkRCMjdDMDg2NTQwMDZBNTI2RiAvKiBNZXRhZGF0YVNQ
SS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREQzREM5NjgyN0E0QkY4RTAwN0U1QjYxIC8qIE1vbm90
b25pY1RpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUREM0RDOTYyMjdBNEJGOEUwMDdFNUI2MSAv
KiBOYWtlZFB0ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTcxLDYgKzMxNzMsNyBAQAogCQkJCURE
M0RDOTk1MjdBNEJGOEUwMDdFNUI2MSAvKiBTdGFja1BvaW50ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUREM0RDOEZFMjdBNEJGOEUwMDdFNUI2MSAvKiBTdGFja1Nob3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUREM0RDOEExMjdBNEJGOEUwMDdFNUI2MSAvKiBTdGFja1Nob3RQcm9maWxlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkU5QjhCMUEyOEIxNDUzRDAwODhDNkUxIC8qIENvZGVQdHIuaCBp
biBIZWFkZXJzICovLAogCQkJCUREM0RDOTdBMjdBNEJGOEUwMDdFNUI2MSAvKiBTdGFja1N0YXRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlERDNEQzk5QzI3QTRCRjhFMDA3RTVCNjEgLyogU3RhY2tU
cmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREQzREM5NDgyN0E0QkY4RTAwN0U1QjYxIC8qIFN0
ZEZpbGVzeXN0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtMzYyMiw2ICszNjI1LDcgQEAKIAkJCQkw
Rjk1QjYzMzIwQ0I0Qjc3MDA0Nzk2MzUgLyogRGVidWdIZWFwLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4QTQ3M0FFMTUxQTgyNUIwMDQxMjNGRiAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAqLywK
IAkJCQlBOEE0NzNCMDE1MUE4MjVCMDA0MTIzRkYgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4g
U291cmNlcyAqLywKKwkJCQlGRTlCOEIxRTI4QjFCMUM3MDA4OEM2RTEgLyogQ29kZVB0ci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNCQTE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDNEREU5NjIwQzhCQzM3MDA3Rjc2RkEgLyogRW50aXRsZW1l
bnRzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTBERTM1RjUyMTVCQjAxNTAwQjk3OUM3IC8qIEV4
dGVybmFsU3RyaW5nSW1wbC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5k
ZXggNWZhNjQ0Yjg3MGU3Li43NWUzZGFhMzhhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0z
Myw2ICszMyw3IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBDaGVja2VkUHRyLmgKICAg
ICBDaGVja2VkUmVmLmgKICAgICBDbG9ja1R5cGUuaAorICAgIENvZGVQdHIuaAogICAgIENvbW1h
UHJpbnRlci5oCiAgICAgQ29tcGFjdFBvaW50ZXJUdXBsZS5oCiAgICAgQ29tcGFjdFB0ci5oCkBA
IC0xNTgsNyArMTU5LDYgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIE1lc3NhZ2VRdWV1
ZS5oCiAgICAgTWV0YUFsbG9jYXRvci5oCiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZS5oCi0gICAg
TWV0YUFsbG9jYXRvclB0ci5oCiAgICAgTW9ub3RvbmljVGltZS5oCiAgICAgTmFrZWRQdHIuaAog
ICAgIE5ha2VkUmVmLmgKQEAgLTQxNyw2ICs0MTcsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBC
aXRWZWN0b3IuY3BwCiAgICAgQ1BVVGltZS5jcHAKICAgICBDbG9ja1R5cGUuY3BwCisgICAgQ29k
ZVB0ci5jcHAKICAgICBDb21waWxhdGlvblRocmVhZC5jcHAKICAgICBDb25jdXJyZW50QnVmZmVy
LmNwcAogICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvQ29kZVB0ci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Db2RlUHRyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMwNjYwMjVjYzA0MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NvZGVQdHIuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSA8d3RmL0NvZGVQdHIuaD4KKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1l
KHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCB2b2lkKiBkYXRhTG9jYXRpb24sIGNvbnN0IGNoYXIq
IG5hbWUsIFByaW50U3RyZWFtJiBvdXQpCit7CisgICAgaWYgKCFleGVjdXRhYmxlQWRkcmVzcykg
eworICAgICAgICBvdXQucHJpbnQobmFtZSwgIihudWxsKSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcyA9PSBkYXRhTG9jYXRpb24pIHsKKyAgICAg
ICAgb3V0LnByaW50KG5hbWUsICIoIiwgUmF3UG9pbnRlcihleGVjdXRhYmxlQWRkcmVzcyksICIp
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb3V0LnByaW50KG5hbWUsICIoZXhlY3V0
YWJsZSA9ICIsIFJhd1BvaW50ZXIoZXhlY3V0YWJsZUFkZHJlc3MpLCAiLCBkYXRhTG9jYXRpb24g
PSAiLCBSYXdQb2ludGVyKGRhdGFMb2NhdGlvbiksICIpIik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ29kZVB0ci5oIGIvU291cmNlL1dURi93
dGYvQ29kZVB0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYmZl
OTU0ZTdkOTNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvQ29kZVB0ci5oCkBA
IC0wLDAgKzEsMjg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Cisj
aW5jbHVkZSA8d3RmL1B0clRhZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRT
dHJlYW07Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSwgRnVuY3Rpb25BdHRyaWJ1dGVz
PiBjbGFzcyBGdW5jdGlvblB0cjsKKworLy8gQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUiBjaGVj
a3MgdGhhdCBwdHIgaXMgYSBub24tbnVsbCBwb2ludGVyLCBhbmQgdGhhdCBpdCBpcyBhIHZhbGlk
CisvLyBpbnN0cnVjdGlvbiBhZGRyZXNzIG9uIHRoZSBwbGF0Zm9ybSAoZm9yIGV4YW1wbGUsIGNo
ZWNrIGFueSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzKS4KKyNpZiBDUFUoQVJNX1RIVU1CMikgJiYg
RU5BQkxFKEpJVCkKKy8vIEFSTSBpbnN0cnVjdGlvbnMgbXVzdCBiZSAxNi1iaXQgYWxpZ25lZC4g
VGh1bWIyIGNvZGUgcG9pbnRlcnMgdG8gYmUgbG9hZGVkIGludG8KKy8vIGludG8gdGhlIHByb2Nl
c3NvciBhcmUgZGVjb3JhdGVkIHdpdGggdGhlIGJvdHRvbSBiaXQgc2V0LCB3aGlsZSB0cmFkaXRp
b25hbCBBUk0gaGFzCisvLyB0aGUgbG93ZXIgYml0IGNsZWFyLiBTaW5jZSB3ZSBkb24ndCBrbm93
IHdoYXQga2luZCBvZiBwb2ludGVyLCB3ZSBjaGVjayBmb3IgYm90aAorLy8gZGVjb3JhdGVkIGFu
ZCB1bmRlY29yYXRlZCBudWxsLgorI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0
cikgXAorICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PGludHB0cl90PihwdHIpICYgfjEpCisj
ZWxzZQorI2RlZmluZSBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0cikgXAorICAgIEFTU0VS
VChwdHIpCisjZW5kaWYKKworc3RydWN0IENvZGVQdHJCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBX
ZSBuZWVkIHRvIGRlY2xhcmUgdGhpcyBpbiB0aGlzIG5vbi10ZW1wbGF0ZSBiYXNlLiBPdGhlcndp
c2UsIGV2ZXJ5IHVzZSBvZgorICAgIC8vIEFscmVhZHlUYWdnZWRWYWx1ZVRhZyB3aWxsIHJlcXVp
cmUgYSBzcGVjaWFsaXplZCB0ZW1wbGF0ZSBxdWFsaWZpY2F0aW9uLgorICAgIGVudW0gQWxyZWFk
eVRhZ2dlZFZhbHVlVGFnIHsgQWxyZWFkeVRhZ2dlZFZhbHVlIH07CisKK3Byb3RlY3RlZDoKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZHVtcFdpdGhOYW1lKHZvaWQqIGV4ZWN1
dGFibGVBZGRyZXNzLCB2b2lkKiBkYXRhTG9jYXRpb24sIGNvbnN0IGNoYXIqIG5hbWUsIFByaW50
U3RyZWFtJiBvdXQpOworfTsKKwordGVtcGxhdGU8UHRyVGFnIHRhZywgRnVuY3Rpb25BdHRyaWJ1
dGVzIGF0dHIgPSBGdW5jdGlvbkF0dHJpYnV0ZXM6Ok5vbmU+CitjbGFzcyBDb2RlUHRyIDogcHVi
bGljIENvZGVQdHJCYXNlIHsKKyAgICB1c2luZyBCYXNlID0gQ29kZVB0ckJhc2U7CitwdWJsaWM6
CisgICAgdXNpbmcgVW50eXBlZEZ1bmMgPSB2b2lkKCopKCk7CisKKyAgICBDb2RlUHRyKCkgPSBk
ZWZhdWx0OworICAgIENvZGVQdHIoc3RkOjpudWxscHRyX3QpIHsgfQorCisgICAgZXhwbGljaXQg
Q29kZVB0cih2b2lkKiB2YWx1ZSkKKyNpZiBDUFUoQVJNX1RIVU1CMikKKyAgICAgICAgLy8gRGVj
b3JhdGUgdGhlIHBvaW50ZXIgYXMgYSB0aHVtYiBjb2RlIHBvaW50ZXIuCisgICAgICAgIDogbV92
YWx1ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih2YWx1ZSkgKyAxKQorI2Vsc2UKKyAgICAgICAg
OiBtX3ZhbHVlKHZhbHVlKQorI2VuZGlmCisgICAgeworICAgICAgICBhc3NlcnRJc1RhZ2dlZFdp
dGg8dGFnPih2YWx1ZSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZSk7CisjaWYgQ1BVKEFSTV9USFVN
QjIpCisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkg
JiAxKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVl
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluPgor
ICAgIGNvbnN0ZXhwciBDb2RlUHRyKE91dCgqcHRyKShJbi4uLikpCisgICAgICAgIDogbV92YWx1
ZShlbmNvZGVGdW5jKHB0cikpCisgICAgeyB9CisKKy8vIE1TVkMgZG9lc24ndCBzZWVtIHRvIHRy
ZWF0IGZ1bmN0aW9ucyB3aXRoIGRpZmZlcmVudCBjYWxsaW5nIGNvbnZlbnRpb25zIGFzCisvLyBk
aWZmZXJlbnQgdHlwZXM7IHRoZXNlIG1ldGhvZHMgYWxyZWFkeSBkZWZpbmVkIGZvciBmYXN0Y2Fs
bCwgYmVsb3cuCisjaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwgJiYgIU9TKFdJTkRP
V1MpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbj4KKyAgICBjb25z
dGV4cHIgQ29kZVB0cihPdXQoQ0RFQ0wgKnB0cikoSW4uLi4pKQorICAgICAgICA6IG1fdmFsdWUo
ZW5jb2RlRnVuYyhwdHIpKQorICAgIHsgfQorI2VuZGlmCisKKyNpZiBDT01QSUxFUl9TVVBQT1JU
UyhGQVNUQ0FMTF9DQUxMSU5HX0NPTlZFTlRJT04pCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0
LCB0eXBlbmFtZS4uLiBJbj4KKyAgICBjb25zdGV4cHIgQ29kZVB0cihPdXQoRkFTVENBTEwgKnB0
cikoSW4uLi4pKQorICAgICAgICA6IG1fdmFsdWUoZW5jb2RlRnVuYyhwdHIpKQorICAgIHsgfQor
I2VuZGlmCisKKyNpZiBFTkFCTEUoSklUKQorICAgIC8vIFRoZXNlIDIgY29uc3RydWN0b3JzIGln
bm9yZXMgdGhlIEZ1bmN0aW9uQXR0cmlidXRlcyBvZiB0aGUgRnVuY3Rpb25QdHIgcGFyYW1ldGVy
IHdoZW4KKyAgICAvLyBjcmVhdGluZyB0aGUgRnVuY3Rpb25QdHIuIEluIGdlbmVyYWwsIHRoaXMg
Y2FuIGJlIGEgcHJvYmxlbSBvbiB4ODYgcG9ydHMgKGVzcGVjaWFsbHkgZm9yCisgICAgLy8gV2lu
ZG93cykuIEhvd2V2ZXIsIHRoZXNlIGNvbnN0cnVjdG9ycyBhcmUgb25seSB1c2VkIGluIFJlcGF0
Y2guY3BwIGZvciBFTkFCTEUoSklUKS4KKyAgICAvLyBTaW5jZSB3ZSBubyBsb25nZXIgc3VwcG9y
dCBFTkFCTEUoSklUKSBmb3IgeDg2LCB0aGlzIGlzIG5vdCByZWFsbHkgYW4gaXNzdWUuCisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluLCBGdW5jdGlvbkF0dHJpYnV0
ZXMgb3RoZXJBdHRyPgorICAgIENvZGVQdHIoY29uc3QgRnVuY3Rpb25QdHI8dGFnLCBPdXQoSW4u
Li4pLCBvdGhlckF0dHI+JiBvdGhlcikKKyAgICAgICAgOiBDb2RlUHRyKEFscmVhZHlUYWdnZWRW
YWx1ZSwgb3RoZXIudGFnZ2VkUHRyKCkpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcg
b3RoZXJUYWcsIHR5cGVuYW1lIE91dCwgdHlwZW5hbWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRl
cyBvdGhlckF0dHI+CisgICAgQ29kZVB0cihjb25zdCBGdW5jdGlvblB0cjxvdGhlclRhZywgT3V0
KEluLi4uKSwgb3RoZXJBdHRyPiYgb3RoZXIpCisgICAgICAgIDogQ29kZVB0cihBbHJlYWR5VGFn
Z2VkVmFsdWUsIG90aGVyLnRlbXBsYXRlIHJldGFnZ2VkUHRyPHRhZz4oKSkKKyAgICB7IH0KKyNl
bmRpZgorCisgICAgc3RhdGljIENvZGVQdHIgZnJvbVRhZ2dlZFB0cih2b2lkKiBwdHIpCisgICAg
eworICAgICAgICBBU1NFUlQocHRyKTsKKyAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRF
UihwdHIpOworICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8dGFnPihwdHIpOworICAgICAgICBy
ZXR1cm4gQ29kZVB0cihBbHJlYWR5VGFnZ2VkVmFsdWUsIHB0cik7CisgICAgfQorCisgICAgc3Rh
dGljIENvZGVQdHIgZnJvbVVudGFnZ2VkUHRyKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIEFT
U0VSVChwdHIpOworICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKHB0cik7CisgICAg
ICAgIGFzc2VydElzTm90VGFnZ2VkKHB0cik7CisgICAgICAgIHJldHVybiBDb2RlUHRyKEFscmVh
ZHlUYWdnZWRWYWx1ZSwgdGFnQ29kZVB0cjx0YWc+KHB0cikpOworICAgIH0KKworICAgIHRlbXBs
YXRlPFB0clRhZyBuZXdUYWc+CisgICAgQ29kZVB0cjxuZXdUYWcsIGF0dHI+IHJldGFnZ2VkKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV92YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBD
b2RlUHRyPG5ld1RhZywgYXR0cj4oKTsKKyAgICAgICAgcmV0dXJuIENvZGVQdHI8bmV3VGFnLCBh
dHRyPihBbHJlYWR5VGFnZ2VkVmFsdWUsIHJldGFnZ2VkUHRyPG5ld1RhZz4oKSk7CisgICAgfQor
CisgICAgY29uc3RleHByIFVudHlwZWRGdW5jIHVudHlwZWRGdW5jKCkgY29uc3QgeyByZXR1cm4g
ZGVjb2RlRnVuYyhtX3ZhbHVlKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQq
PgorICAgIFQgdGFnZ2VkUHRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8VD4obV92YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZv
aWQqPgorICAgIFQgdW50YWdnZWRQdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVu
dGFnQ29kZVB0cjxULCB0YWc+KG1fdmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPFB0clRh
ZyBuZXdUYWcsIHR5cGVuYW1lIFQgPSB2b2lkKj4KKyAgICBUIHJldGFnZ2VkUHRyKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8VCwgdGFnLCBuZXdUYWc+KG1fdmFs
dWUpOworICAgIH0KKworI2lmIENQVShBUk1fVEhVTUIyKQorICAgIC8vIFRvIHVzZSB0aGlzIHBv
aW50ZXIgYXMgYSBkYXRhIGFkZHJlc3MgcmVtb3ZlIHRoZSBkZWNvcmF0aW9uLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQgPSB2b2lkKj4KKyAgICBUIGRhdGFMb2NhdGlvbigpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOworICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQ+KG1fdmFsdWUgPyBiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1fdmFs
dWUpIC0gMSA6IG51bGxwdHIpOworICAgIH0KKyNlbHNlCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCA9IHZvaWQqPgorICAgIFQgZGF0YUxvY2F0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CisgICAgICAgIHJldHVybiB1bnRhZ0Nv
ZGVQdHI8VCwgdGFnPihtX3ZhbHVlKTsKKyAgICB9CisjZW5kaWYKKworICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV92YWx1ZTsKKyAgICB9CisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEoISp0aGlzKTsgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2RlUHRyJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IENvZGVQdHImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7
IH0KKworICAgIC8vIERpc2FsbG93IGFueSBjYXN0aW5nIG9wZXJhdGlvbnMgKGV4Y2VwdCBmb3Ig
Ym9vbGVhbnMpLiBJbnN0ZWFkLCB0aGUgY2xpZW50CisgICAgLy8gc2hvdWxkIGJlIGFza2luZyB0
YWdnZWRQdHIoKSBleHBsaWNpdGx5LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
ID0gc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2YWx1ZT4+CisgICAg
b3BlcmF0b3IgVCgpID0gZGVsZXRlOworCisgICAgQ29kZVB0ciBvcGVyYXRvcisoc2l6ZV90IHNp
emVJbkJ5dGVzKSBjb25zdCB7IHJldHVybiBDb2RlUHRyOjpmcm9tVW50YWdnZWRQdHIodW50YWdn
ZWRQdHI8dWludDhfdCo+KCkgKyBzaXplSW5CeXRlcyk7IH0KKyAgICBDb2RlUHRyIG9wZXJhdG9y
LShzaXplX3Qgc2l6ZUluQnl0ZXMpIGNvbnN0IHsgcmV0dXJuIENvZGVQdHI6OmZyb21VbnRhZ2dl
ZFB0cih1bnRhZ2dlZFB0cjx1aW50OF90Kj4oKSAtIHNpemVJbkJ5dGVzKTsgfQorCisgICAgQ29k
ZVB0ciYgb3BlcmF0b3IrPShzaXplX3Qgc2l6ZUluQnl0ZXMpIHsgcmV0dXJuICp0aGlzID0gKnRo
aXMgKyBzaXplSW5CeXRlczsgfQorICAgIENvZGVQdHImIG9wZXJhdG9yLT0oc2l6ZV90IHNpemVJ
bkJ5dGVzKSB7IHJldHVybiAqdGhpcyA9ICp0aGlzIC0gc2l6ZUluQnl0ZXM7IH0KKworICAgIHZv
aWQgZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAgIENvZGVQdHJCYXNlOjpk
dW1wV2l0aE5hbWUodGFnZ2VkUHRyKCksIGRhdGFMb2NhdGlvbigpLCBuYW1lLCBvdXQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKG51bGxwdHIs
IG51bGxwdHIsIG5hbWUsIG91dCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0IHsgZHVtcFdpdGhOYW1lKCJDb2RlUHRyIiwgb3V0KTsgfQorCisgICAgZW51
bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFn
IHsgRGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgQ29kZVB0cihFbXB0eVZhbHVlVGFnKQorICAg
ICAgICA6IG1fdmFsdWUoZW1wdHlWYWx1ZSgpKQorICAgIHsgfQorICAgIAorICAgIENvZGVQdHIo
RGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fdmFsdWUoZGVsZXRlZFZhbHVlKCkpCisgICAg
eyB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
ID09IGVtcHR5VmFsdWUoKTsgfQorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlID09IGRlbGV0ZWRWYWx1ZSgpOyB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QgeyByZXR1cm4gUHRySGFzaDx2b2lkKj46Omhhc2gobV92YWx1ZSk7IH0KKworICAgIHN0
YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKKworcHJpdmF0ZToKKyAgICBDb2RlUHRyKEFscmVhZHlU
YWdnZWRWYWx1ZVRhZywgdm9pZCogcHRyKQorICAgICAgICA6IG1fdmFsdWUocHRyKQorICAgIHsK
KyAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPHRhZz4ocHRyKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCogZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KDEpKTsgfQorICAgIHN0YXRpYyB2b2lkKiBkZWxldGVkVmFsdWUoKSB7
IHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PigyKSk7IH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmNQdHI+CisgICAgQUxXQVlTX0lOTElORSBzdGF0
aWMgY29uc3RleHByIHZvaWQqIGVuY29kZUZ1bmMoRnVuY1B0ciBwdHIpCisgICAgeworICAgICAg
ICAvLyBOb3RlOiB3ZSBjYW5ub3QgZG8gdGhlIGFzc2VydCBiZWZvcmUgdGhpcyBjaGVjayBiZWNh
dXNlIGl0IHdpbGwgZGlzcXVhbGlmeQorICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIGZvciB1c2Ug
aW4gYW4gY29uc3RleHByIGNvbnRleHQgZm9yIHNvbWUgdXNlIGNhc2VzLgorICAgICAgICBpZiBj
b25zdGV4cHIgKHRhZyA9PSBDRnVuY3Rpb25QdHJUYWcpCisgICAgICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKTsKKyAgICAgICAgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rp
b25QdHIocHRyKTsKKyAgICAgICAgcmV0dXJuIHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9u
UHRyVGFnLCB0YWc+KHB0cik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29u
c3RleHByIFVudHlwZWRGdW5jIGRlY29kZUZ1bmModm9pZCogcHRyKQorICAgIHsKKyAgICAgICAg
aWYgY29uc3RleHByICh0YWcgPT0gQ0Z1bmN0aW9uUHRyVGFnKQorICAgICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8VW50eXBlZEZ1bmM+KHB0cik7CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gcmV0YWdDb2RlUHRyPFVudHlwZWRGdW5jLCB0YWcsIENGdW5jdGlvblB0clRhZz4ocHRyKTsK
KyAgICAgICAgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIocmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkKiBtX3ZhbHVlIHsgbnVsbHB0ciB9OworCisg
ICAgdGVtcGxhdGU8UHRyVGFnLCBGdW5jdGlvbkF0dHJpYnV0ZXM+IGZyaWVuZCBjbGFzcyBDb2Rl
UHRyOworfTsKKwordGVtcGxhdGU8UHRyVGFnIHRhZywgRnVuY3Rpb25BdHRyaWJ1dGVzIGF0dHI+
CitzdHJ1Y3QgQ29kZVB0ckhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENv
ZGVQdHI8dGFnLCBhdHRyPiYgcHRyKSB7IHJldHVybiBwdHIuaGFzaCgpOyB9CisgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgQ29kZVB0cjx0YWcsIGF0dHI+JiBhLCBjb25zdCBDb2RlUHRyPHRh
ZywgYXR0cj4mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxh
dGU8UHRyVGFnIHRhZywgRnVuY3Rpb25BdHRyaWJ1dGVzIGF0dHI+CitzdHJ1Y3QgRGVmYXVsdEhh
c2g8Q29kZVB0cjx0YWcsIGF0dHI+PiA6IENvZGVQdHJIYXNoPHRhZywgYXR0cj4geyB9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPFB0clRhZyB0
YWcsIEZ1bmN0aW9uQXR0cmlidXRlcyBhdHRyPgorc3RydWN0IEhhc2hUcmFpdHM8Q29kZVB0cjx0
YWcsIGF0dHI+PiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPENvZGVQdHI8dGFnLCBhdHRyPj4g
eyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpDb2RlUHRyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvRnVuY3Rpb25QdHIuaCBiL1NvdXJjZS9XVEYvd3RmL0Z1bmN0
aW9uUHRyLmgKaW5kZXggMjY2MDA4MDBhYTA1Li41ODQxOThhM2UyZTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0Z1bmN0aW9uUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvRnVuY3Rpb25Q
dHIuaApAQCAtNDUsNyArNDUsNyBAQCBlbnVtIGNsYXNzIEZ1bmN0aW9uQXR0cmlidXRlcyB7CiAg
ICAgSlNDSG9zdENhbGwsIC8vIEpTQ19IT1NUX0NBTExfQVRUUklCVVRFUwogfTsKIAotdGVtcGxh
dGU8UHRyVGFnIHRhZywgdHlwZW5hbWUsIEZ1bmN0aW9uQXR0cmlidXRlcyA9IEZ1bmN0aW9uQXR0
cmlidXRlczo6Tm9uZT4gY2xhc3MgVHlwZWRGdW5jdGlvblB0cjsKK3RlbXBsYXRlPFB0clRhZyB0
YWcsIHR5cGVuYW1lLCBGdW5jdGlvbkF0dHJpYnV0ZXMgPSBGdW5jdGlvbkF0dHJpYnV0ZXM6Ok5v
bmU+IGNsYXNzIEZ1bmN0aW9uUHRyOwogCiB0ZW1wbGF0ZTxGdW5jdGlvbkF0dHJpYnV0ZXMsIHR5
cGVuYW1lPiBzdHJ1Y3QgRnVuY3Rpb25DYWxsQ29udmVudGlvbjsKIApAQCAtNjUsNyArNjUsNyBA
QCBzdHJ1Y3QgRnVuY3Rpb25DYWxsQ29udmVudGlvbjxGdW5jdGlvbkF0dHJpYnV0ZXM6OkpTQ0hv
c3RDYWxsLCBPdXQoSW4uLi4pPiB7CiB9OwogCiAKLWNsYXNzIFR5cGVkRnVuY3Rpb25QdHJCYXNl
IHsKK2NsYXNzIEZ1bmN0aW9uUHRyQmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gV2UgbmVlZCB0byBk
ZWNsYXJlIHRoaXMgaW4gdGhpcyBub24tdGVtcGxhdGUgYmFzZS4gT3RoZXJ3aXNlLCBldmVyeSB1
c2Ugb2YKICAgICAvLyBBbHJlYWR5VGFnZ2VkVmFsdWVUYWcgd2lsbCByZXF1aXJlIGEgc3BlY2lh
bGl6ZWQgdGVtcGxhdGUgcXVhbGlmaWNhdGlvbi4KQEAgLTczLDI3ICs3MywyNyBAQCBwdWJsaWM6
CiB9OwogCiB0ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIElu
LCBGdW5jdGlvbkF0dHJpYnV0ZXMgYXR0cj4KLWNsYXNzIFR5cGVkRnVuY3Rpb25QdHI8dGFnLCBP
dXQoSW4uLi4pLCBhdHRyPiA6IHB1YmxpYyBUeXBlZEZ1bmN0aW9uUHRyQmFzZSB7CitjbGFzcyBG
dW5jdGlvblB0cjx0YWcsIE91dChJbi4uLiksIGF0dHI+IDogcHVibGljIEZ1bmN0aW9uUHRyQmFz
ZSB7CiBwdWJsaWM6CiAgICAgdXNpbmcgUHRyID0gdHlwZW5hbWUgRnVuY3Rpb25DYWxsQ29udmVu
dGlvbjxhdHRyLCBPdXQoSW4uLi4pPjo6VHlwZTsKIAotICAgIGNvbnN0ZXhwciBUeXBlZEZ1bmN0
aW9uUHRyKCkgOiBtX3B0cihudWxscHRyKSB7IH0KLSAgICBjb25zdGV4cHIgVHlwZWRGdW5jdGlv
blB0cihzdGQ6Om51bGxwdHJfdCkgOiBtX3B0cihudWxscHRyKSB7IH0KKyAgICBjb25zdGV4cHIg
RnVuY3Rpb25QdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQorICAgIGNvbnN0ZXhwciBGdW5jdGlv
blB0cihzdGQ6Om51bGxwdHJfdCkgOiBtX3B0cihudWxscHRyKSB7IH0KIAotICAgIGNvbnN0ZXhw
ciBUeXBlZEZ1bmN0aW9uUHRyKE91dCgqcHRyKShJbi4uLikpCisgICAgY29uc3RleHByIEZ1bmN0
aW9uUHRyKE91dCgqcHRyKShJbi4uLikpCiAgICAgICAgIDogbV9wdHIoZW5jb2RlKHB0cikpCiAg
ICAgeyB9CiAKIC8vIE1TVkMgZG9lc24ndCBzZWVtIHRvIHRyZWF0IGZ1bmN0aW9ucyB3aXRoIGRp
ZmZlcmVudCBjYWxsaW5nIGNvbnZlbnRpb25zIGFzCiAvLyBkaWZmZXJlbnQgdHlwZXM7IHRoZXNl
IG1ldGhvZHMgYWxyZWFkeSBkZWZpbmVkIGZvciBmYXN0Y2FsbCwgYmVsb3cuCiAjaWYgQ0FMTElO
R19DT05WRU5USU9OX0lTX1NURENBTEwgJiYgIU9TKFdJTkRPV1MpCi0gICAgY29uc3RleHByIFR5
cGVkRnVuY3Rpb25QdHIoT3V0KENERUNMICpwdHIpKEluLi4uKSkKKyAgICBjb25zdGV4cHIgRnVu
Y3Rpb25QdHIoT3V0KENERUNMICpwdHIpKEluLi4uKSkKICAgICAgICAgOiBtX3B0cihlbmNvZGUo
cHRyKSkKICAgICB7IH0KICNlbmRpZgogCiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoRkFTVENBTExf
Q0FMTElOR19DT05WRU5USU9OKQotICAgIGNvbnN0ZXhwciBUeXBlZEZ1bmN0aW9uUHRyKE91dChG
QVNUQ0FMTCAqcHRyKShJbi4uLikpCisgICAgY29uc3RleHByIEZ1bmN0aW9uUHRyKE91dChGQVNU
Q0FMTCAqcHRyKShJbi4uLikpCiAgICAgICAgIDogbV9wdHIoZW5jb2RlKHB0cikpCiAgICAgeyB9
CiAjZW5kaWYKQEAgLTEwNyw1MCArMTA3LDUwIEBAIHB1YmxpYzoKICAgICBjb25zdGV4cHIgUHRy
IGdldCgpIGNvbnN0IHsgcmV0dXJuIGRlY29kZShtX3B0cik7IH0KIAogICAgIHRlbXBsYXRlPFB0
clRhZyBvdGhlclRhZz4KLSAgICBUeXBlZEZ1bmN0aW9uUHRyPG90aGVyVGFnLCBPdXQoSW4uLi4p
LCBhdHRyPiByZXRhZ2dlZCgpIGNvbnN0CisgICAgRnVuY3Rpb25QdHI8b3RoZXJUYWcsIE91dChJ
bi4uLiksIGF0dHI+IHJldGFnZ2VkKCkgY29uc3QKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3Nl
cnQodGFnICE9IG90aGVyVGFnKTsKLSAgICAgICAgcmV0dXJuIFR5cGVkRnVuY3Rpb25QdHI8b3Ro
ZXJUYWcsIE91dChJbi4uLiksIGF0dHI+KEFscmVhZHlUYWdnZWRWYWx1ZSwgcmV0YWdnZWRFeGVj
dXRhYmxlQWRkcmVzczxvdGhlclRhZz4oKSk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cjxv
dGhlclRhZywgT3V0KEluLi4uKSwgYXR0cj4oQWxyZWFkeVRhZ2dlZFZhbHVlLCByZXRhZ2dlZFB0
cjxvdGhlclRhZz4oKSk7CiAgICAgfQogCi0gICAgY29uc3RleHByIHZvaWQqIGV4ZWN1dGFibGVB
ZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9wdHIpOyB9
CisgICAgY29uc3RleHByIHZvaWQqIHRhZ2dlZFB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KG1fcHRyKTsgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIG5ld1RhZz4K
LSAgICB2b2lkKiByZXRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkgY29uc3QKKyAgICB2b2lkKiBy
ZXRhZ2dlZFB0cigpIGNvbnN0CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHRhZyAhPSBu
ZXdUYWcpOwogICAgICAgICByZXR1cm4gcmV0YWdDb2RlUHRyPHZvaWQqLCB0YWcsIG5ld1RhZz4o
bV9wdHIpOwogICAgIH0KIAotICAgIHZvaWQqIHVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSBj
b25zdCB7IHJldHVybiB1bnRhZ0NvZGVQdHI8dm9pZCosIHRhZz4obV9wdHIpOyB9CisgICAgdm9p
ZCogdW50YWdnZWRQdHIoKSBjb25zdCB7IHJldHVybiB1bnRhZ0NvZGVQdHI8dm9pZCosIHRhZz4o
bV9wdHIpOyB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX3B0cjsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fcHRyOyB9
CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHlwZWRGdW5jdGlvblB0ciYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG1fcHRyID09IG90aGVyLm1fcHRyOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFR5cGVkRnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3B0ciAhPSBv
dGhlci5tX3B0cjsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGdW5jdGlvblB0ciYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09IG90aGVyLm1fcHRyOyB9CisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEZ1bmN0aW9uUHRyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wdHIgIT0g
b3RoZXIubV9wdHI7IH0KIAotICAgIFR5cGVkRnVuY3Rpb25QdHImIG9wZXJhdG9yPShQdHIgcHRy
KQorICAgIEZ1bmN0aW9uUHRyJiBvcGVyYXRvcj0oUHRyIHB0cikKICAgICB7CiAgICAgICAgIG1f
cHRyID0gZW5jb2RlKHB0cik7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxQdHJUYWcgb3RoZXJUYWc+Ci0gICAgVHlwZWRGdW5jdGlvblB0ciYgb3BlcmF0b3I9
KGNvbnN0IFR5cGVkRnVuY3Rpb25QdHI8b3RoZXJUYWcsIE91dChJbi4uLiksIGF0dHI+JiBvdGhl
cikKKyAgICBGdW5jdGlvblB0ciYgb3BlcmF0b3I9KGNvbnN0IEZ1bmN0aW9uUHRyPG90aGVyVGFn
LCBPdXQoSW4uLi4pLCBhdHRyPiYgb3RoZXIpCiAgICAgewogICAgICAgICBtX3B0ciA9IGVuY29k
ZShvdGhlci5nZXQoKSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICBUeXBl
ZEZ1bmN0aW9uUHRyJiBvcGVyYXRvcj0oc3RkOjpudWxscHRyX3QpCisgICAgRnVuY3Rpb25QdHIm
IG9wZXJhdG9yPShzdGQ6Om51bGxwdHJfdCkKICAgICB7CiAgICAgICAgIG1fcHRyID0gbnVsbHB0
cjsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIFR5cGVk
RnVuY3Rpb25QdHIoQWxyZWFkeVRhZ2dlZFZhbHVlVGFnLCB2b2lkKiBwdHIpCisgICAgRnVuY3Rp
b25QdHIoQWxyZWFkeVRhZ2dlZFZhbHVlVGFnLCB2b2lkKiBwdHIpCiAgICAgICAgIDogbV9wdHIo
Yml0d2lzZV9jYXN0PFB0cj4ocHRyKSkKICAgICB7CiAgICAgICAgIGFzc2VydElzTnVsbE9yVGFn
Z2VkV2l0aDx0YWc+KHB0cik7CkBAIC0xNzcsMTAxICsxNzcsMjUgQEAgcHJvdGVjdGVkOgogCiAg
ICAgUHRyIG1fcHRyOwogCi0gICAgdGVtcGxhdGU8UHRyVGFnLCB0eXBlbmFtZSwgRnVuY3Rpb25B
dHRyaWJ1dGVzPiBmcmllbmQgY2xhc3MgVHlwZWRGdW5jdGlvblB0cjsKKyAgICB0ZW1wbGF0ZTxQ
dHJUYWcsIHR5cGVuYW1lLCBGdW5jdGlvbkF0dHJpYnV0ZXM+IGZyaWVuZCBjbGFzcyBGdW5jdGlv
blB0cjsKIH07CiAKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKFR5cGVkRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnLCB2b2lkKCk+KSA9PSBzaXplb2Yodm9pZCopKTsKK3N0YXRpY19hc3NlcnQoc2l6
ZW9mKEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZywgdm9pZCgpPikgPT0gc2l6ZW9mKHZvaWQq
KSk7CiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoQlVJTFRJTl9JU19UUklWSUFMTFlfQ09QWUFCTEUp
Ci1zdGF0aWNfYXNzZXJ0KF9faXNfdHJpdmlhbGx5X2NvcHlhYmxlKFR5cGVkRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnLCB2b2lkKCk+KSk7CitzdGF0aWNfYXNzZXJ0KF9faXNfdHJpdmlhbGx5
X2NvcHlhYmxlKEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZywgdm9pZCgpPikpOwogI2VuZGlm
CiAKLQotdGVtcGxhdGU8UHRyVGFnIHRhZywgRnVuY3Rpb25BdHRyaWJ1dGVzIGF0dHIgPSBGdW5j
dGlvbkF0dHJpYnV0ZXM6Ok5vbmU+Ci1jbGFzcyBGdW5jdGlvblB0ciA6IHB1YmxpYyBUeXBlZEZ1
bmN0aW9uUHRyPHRhZywgdm9pZCgpLCBhdHRyPiB7Ci0gICAgdXNpbmcgQmFzZSA9IFR5cGVkRnVu
Y3Rpb25QdHI8dGFnLCB2b2lkKCk+OwotICAgIHVzaW5nIFB0clR5cGUgPSB2b2lkKCopKCk7Ci0g
ICAgdXNpbmcgVHlwZWRGdW5jdGlvblB0ckJhc2U6OkFscmVhZHlUYWdnZWRWYWx1ZTsKLXB1Ymxp
YzoKLSAgICBjb25zdGV4cHIgRnVuY3Rpb25QdHIoKSA9IGRlZmF1bHQ7Ci0gICAgY29uc3RleHBy
IEZ1bmN0aW9uUHRyKHN0ZDo6bnVsbHB0cl90KSA6IEJhc2UobnVsbHB0cikgeyB9Ci0KLSAgICBj
b25zdGV4cHIgRnVuY3Rpb25QdHIodm9pZCogcHRyKQotICAgICAgICA6IEJhc2UocmVpbnRlcnBy
ZXRfY2FzdDxQdHJUeXBlPihwdHIpKQotICAgIHsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3V0LCB0eXBlbmFtZS4uLiBJbj4KLSAgICBjb25zdGV4cHIgRnVuY3Rpb25QdHIoT3V0KCpwdHIp
KEluLi4uKSkKLSAgICAgICAgOiBCYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8UHRyVHlwZT4ocHRyKSkK
LSAgICB7IH0KLQotLy8gTVNWQyBkb2Vzbid0IHNlZW0gdG8gdHJlYXQgZnVuY3Rpb25zIHdpdGgg
ZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnMgYXMKLS8vIGRpZmZlcmVudCB0eXBlczsgdGhl
c2UgbWV0aG9kcyBhbHJlYWR5IGRlZmluZWQgZm9yIGZhc3RjYWxsLCBiZWxvdy4KLSNpZiBDQUxM
SU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTCAmJiAhT1MoV0lORE9XUykKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIEluPgotICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cihP
dXQoQ0RFQ0wgKnB0cikoSW4uLi4pKQotICAgICAgICA6IEJhc2UocmVpbnRlcnByZXRfY2FzdDxQ
dHJUeXBlPihwdHIpKQotICAgIHsgfQotI2VuZGlmCi0KLSNpZiBDT01QSUxFUl9TVVBQT1JUUyhG
QVNUQ0FMTF9DQUxMSU5HX0NPTlZFTlRJT04pCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0LCB0
eXBlbmFtZS4uLiBJbj4KLSAgICBjb25zdGV4cHIgRnVuY3Rpb25QdHIoT3V0KEZBU1RDQUxMICpw
dHIpKEluLi4uKSkKLSAgICAgICAgOiBCYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8UHRyVHlwZT4ocHRy
KSkKLSAgICB7IH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAvLyBUaGVzZSAyIGNv
bnN0cnVjdG9ycyBpZ25vcmVzIHRoZSBGdW5jdGlvbkF0dHJpYnV0ZXMgb2YgdGhlIFR5cGVkRnVu
Y3Rpb25QdHIgcGFyYW1ldGVyIHdoZW4KLSAgICAvLyBjcmVhdGluZyB0aGUgRnVuY3Rpb25QdHIu
IEluIGdlbmVyYWwsIHRoaXMgY2FuIGJlIGEgcHJvYmxlbSBvbiB4ODYgcG9ydHMgKGVzcGVjaWFs
bHkgZm9yCi0gICAgLy8gV2luZG93cykuIEhvd2V2ZXIsIHRoZXNlIGNvbnN0cnVjdG9ycyBhcmUg
b25seSB1c2VkIGluIFJlcGF0Y2guY3BwIGZvciBFTkFCTEUoSklUKS4KLSAgICAvLyBTaW5jZSB3
ZSBubyBsb25nZXIgc3VwcG9ydCBFTkFCTEUoSklUKSBmb3IgeDg2LCB0aGlzIGlzIG5vdCByZWFs
bHkgYW4gaXNzdWUuCi0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXQsIHR5cGVuYW1lLi4uIElu
LCBGdW5jdGlvbkF0dHJpYnV0ZXMgb3RoZXJBdHRyPgotICAgIEZ1bmN0aW9uUHRyKGNvbnN0IFR5
cGVkRnVuY3Rpb25QdHI8dGFnLCBPdXQoSW4uLi4pLCBvdGhlckF0dHI+JiBvdGhlcikKLSAgICAg
ICAgOiBCYXNlKEFscmVhZHlUYWdnZWRWYWx1ZSwgb3RoZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSkK
LSAgICB7IH0KLQotICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRhZywgdHlwZW5hbWUgT3V0LCB0
eXBlbmFtZS4uLiBJbiwgRnVuY3Rpb25BdHRyaWJ1dGVzIG90aGVyQXR0cj4KLSAgICBGdW5jdGlv
blB0cihjb25zdCBUeXBlZEZ1bmN0aW9uUHRyPG90aGVyVGFnLCBPdXQoSW4uLi4pLCBvdGhlckF0
dHI+JiBvdGhlcikKLSAgICAgICAgOiBCYXNlKEFscmVhZHlUYWdnZWRWYWx1ZSwgb3RoZXIudGVt
cGxhdGUgcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx0YWc+KCkpCi0gICAgeyB9Ci0jZW5kaWYK
LQotICAgIHN0YXRpYyBGdW5jdGlvblB0ciBmcm9tQWxyZWFkeVRhZ2dlZFBvaW50ZXIodm9pZCog
cHRyKQotICAgIHsKLSAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPHRhZz4ocHRyKTsKLSAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uUHRyKEFscmVhZHlUYWdnZWRWYWx1ZSwgcHRyKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJUYWc+Ci0gICAgRnVuY3Rpb25QdHI8b3RoZXJUYWc+
IHJldGFnZ2VkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cjxvdGhl
clRhZz4oQWxyZWFkeVRhZ2dlZFZhbHVlLCBCYXNlOjp0ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1dGFi
bGVBZGRyZXNzPG90aGVyVGFnPigpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRnVuY3Rpb25Q
dHIodHlwZW5hbWUgQmFzZTo6QWxyZWFkeVRhZ2dlZFZhbHVlVGFnLCB2b2lkKiBwdHIpCi0gICAg
ICAgIDogQmFzZShBbHJlYWR5VGFnZ2VkVmFsdWUsIHB0cikKLSAgICB7IH0KLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE91dCwgdHlwZW5hbWUuLi4gSW4+Ci0gICAgT3V0IG9wZXJhdG9yKCkoSW4u
Li4pIGNvbnN0ID0gZGVsZXRlOwotCi0gICAgdGVtcGxhdGU8UHRyVGFnLCBGdW5jdGlvbkF0dHJp
YnV0ZXM+IGZyaWVuZCBjbGFzcyBGdW5jdGlvblB0cjsKLX07Ci0KIHRlbXBsYXRlPFB0clRhZyB0
YWcsIHR5cGVuYW1lIE91dCwgdHlwZW5hbWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRlcyBhdHRy
Pgotc3RydWN0IEZ1bmN0aW9uVHJhaXRzPFR5cGVkRnVuY3Rpb25QdHI8dGFnLCBPdXQoSW4uLi4p
LCBhdHRyPj4gOiBwdWJsaWMgRnVuY3Rpb25UcmFpdHM8T3V0KEluLi4uKT4geworc3RydWN0IEZ1
bmN0aW9uVHJhaXRzPEZ1bmN0aW9uUHRyPHRhZywgT3V0KEluLi4uKSwgYXR0cj4+IDogcHVibGlj
IEZ1bmN0aW9uVHJhaXRzPE91dChJbi4uLik+IHsKIH07CiAKIHRlbXBsYXRlPFB0clRhZyB0YWcs
IHR5cGVuYW1lIE91dCwgdHlwZW5hbWUuLi4gSW4sIEZ1bmN0aW9uQXR0cmlidXRlcyBhdHRyPgot
dm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFR5cGVkRnVuY3Rpb25QdHI8dGFnLCBPdXQo
SW4uLi4pLCBhdHRyPiYgcHRyKQordm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZ1bmN0
aW9uUHRyPHRhZywgT3V0KEluLi4uKSwgYXR0cj4mIHB0cikKIHsKLSAgICBhZGQoaGFzaGVyLCBw
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgYWRkKGhhc2hlciwgcHRyLnRhZ2dlZFB0cigp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6RnVuY3Rpb25BdHRyaWJ1
dGVzOwogdXNpbmcgV1RGOjpGdW5jdGlvblB0cjsKLXVzaW5nIFdURjo6VHlwZWRGdW5jdGlvblB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwIGIvU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKaW5kZXggZWVmODliNzdlN2JkLi5lYzhjMDI2ZGVm
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgTWV0
YUFsbG9jYXRvcjo6cmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiwgTWV0YUFsbG9jYXRvckhhbmRs
ZSYgaGFuZGxlKQogICAgICAgICBNZW1vcnlQdHIgc3RhcnQgPSBoYW5kbGUuc3RhcnQoKTsKICAg
ICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLnNpemVJbkJ5dGVzKCk7CiAgICAgICAg
IGRlY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQudW50YWdnZWRQdHIoKSwgc2l6ZUluQnl0ZXMp
OwotICAgICAgICBhZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUoRnJlZVNwYWNlUHRyKHN0
YXJ0KSwgc2l6ZUluQnl0ZXMpOworICAgICAgICBhZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5k
bGUoc3RhcnQucmV0YWdnZWQ8RnJlZVNwYWNlUHRyVGFnPigpLCBzaXplSW5CeXRlcyk7CiAgICAg
fQogCiAgICAgaWYgKFVOTElLRUxZKCEhbV90cmFja2VyKSkKQEAgLTExNCw3ICsxMTQsNyBAQCB2
b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpCiAg
ICAgaWYgKGZpcnN0Q29tcGxldGVseUZyZWVQYWdlIDwgZnJlZUVuZCkKICAgICAgICAgYWxsb2Nh
dG9yLmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RD
b21wbGV0ZWx5RnJlZVBhZ2UpLCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAt
IGZyZWVTdGFydFZhbHVlKSk7CiAKLSAgICBhbGxvY2F0b3IuYWRkRnJlZVNwYWNlRnJvbVJlbGVh
c2VkSGFuZGxlKE1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZVB0cihmcmVlU3RhcnQpLCBmcmVlU2l6
ZSk7CisgICAgYWxsb2NhdG9yLmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShmcmVlU3Rh
cnQucmV0YWdnZWQ8RnJlZVNwYWNlUHRyVGFnPigpLCBmcmVlU2l6ZSk7CiAKICAgICBtX2VuZCA9
IGZyZWVTdGFydDsKIH0KQEAgLTE5MCw3ICsxOTAsNyBAQCBSZWZQdHI8TWV0YUFsbG9jYXRvckhh
bmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoY29uc3QgTG9ja0hvbGRlciYsIHNpemVfdCBz
aQogICAgIG1fbnVtQWxsb2NhdGlvbnMrKzsKICNlbmRpZgogCi0gICAgYXV0byBoYW5kbGUgPSBh
ZG9wdFJlZigqbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUoKnRoaXMsIE1lbW9yeVB0cihzdGFydCks
IHNpemVJbkJ5dGVzKSk7CisgICAgYXV0byBoYW5kbGUgPSBhZG9wdFJlZigqbmV3IE1ldGFBbGxv
Y2F0b3JIYW5kbGUoKnRoaXMsIHN0YXJ0LnJldGFnZ2VkPEhhbmRsZU1lbW9yeVB0clRhZz4oKSwg
c2l6ZUluQnl0ZXMpKTsKIAogICAgIGlmIChVTkxJS0VMWSghIW1fdHJhY2tlcikpCiAgICAgICAg
IG1fdHJhY2tlci0+bm90aWZ5KCpoYW5kbGUucHRyKCkpOwpAQCAtMjg5LDcgKzI4OSw3IEBAIHZv
aWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBz
aXplSW5CeXRlcykKICAgICBDb25maWc6OkFzc2VydE5vdEZyb3plblNjb3BlIGFzc2VydE5vdEZy
b3plblNjb3BlOwogICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKICAgICBtX2J5dGVzUmVz
ZXJ2ZWQgKz0gc2l6ZUluQnl0ZXM7Ci0gICAgYWRkRnJlZVNwYWNlKEZyZWVTcGFjZVB0cjo6bWFr
ZUZyb21SYXdQb2ludGVyKHN0YXJ0KSwgc2l6ZUluQnl0ZXMpOworICAgIGFkZEZyZWVTcGFjZShG
cmVlU3BhY2VQdHI6OmZyb21VbnRhZ2dlZFB0cihzdGFydCksIHNpemVJbkJ5dGVzKTsKIH0KIAog
c2l6ZV90IE1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2Nh
dG9yLmgKaW5kZXggNWZiNzJjMjgwZWRjLi5mNmZiZTk0NDRkYjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2Nh
dG9yLmgKQEAgLTYyLDcgKzYyLDcgQEAgY2xhc3MgTWV0YUFsbG9jYXRvciB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTWV0YUFsbG9jYXRvcik7CiAKIHB1YmxpYzoKLSAgICB1c2luZyBGcmVl
U3BhY2VQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEZyZWVTcGFjZVB0clRhZz47CisgICAgdXNpbmcg
RnJlZVNwYWNlUHRyID0gQ29kZVB0cjxGcmVlU3BhY2VQdHJUYWc+OwogICAgIHVzaW5nIE1lbW9y
eVB0ciA9IE1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1lbW9yeVB0cjsKIAogICAgIFdURl9FWFBPUlRf
UFJJVkFURSBNZXRhQWxsb2NhdG9yKExvY2smLCBzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNp
emVfdCBwYWdlU2l6ZSA9IFdURjo6cGFnZVNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9y
SGFuZGxlLmgKaW5kZXggOWI5ZmIyODkyZDA5Li44OTAyMGNhYzY0YmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9N
ZXRhQWxsb2NhdG9ySGFuZGxlLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvclB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9Db2RlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJl
ZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCkBAIC00Myw3ICs0
Myw3IEBAIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8TWV0YUFsbG9jYXRvckhhbmRsZT4sIHB1CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RURfV0lUSF9IRUFQX0lERU5USUZJRVIoTWV0YUFsbG9jYXRvckhhbmRsZSk7CiAKIHB1YmxpYzoK
LSAgICB1c2luZyBNZW1vcnlQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEhhbmRsZU1lbW9yeVB0clRh
Zz47CisgICAgdXNpbmcgTWVtb3J5UHRyID0gQ29kZVB0cjxIYW5kbGVNZW1vcnlQdHJUYWc+Owog
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NZXRhQWxsb2NhdG9ySGFuZGxlKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JQdHIuaCBiL1NvdXJjZS9XVEYvd3Rm
L01ldGFBbGxvY2F0b3JQdHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUwYzFi
MWUwZTgxLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvclB0
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8
d3RmL0hhc2hUcmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvUHRyVGFnLmg+Ci0jaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KLWNsYXNzIE1ldGFBbGxvY2F0b3JQdHIgewotcHVibGljOgotICAgIE1ldGFBbGxvY2F0b3JQ
dHIoKSA9IGRlZmF1bHQ7Ci0gICAgTWV0YUFsbG9jYXRvclB0cihzdGQ6Om51bGxwdHJfdCkgeyB9
Ci0KLSAgICBzdGF0aWMgTWV0YUFsbG9jYXRvclB0ciBtYWtlRnJvbVJhd1BvaW50ZXIodm9pZCog
cHRyKSB7IHJldHVybiBNZXRhQWxsb2NhdG9yUHRyKHB0cik7IH0KLQotICAgIHRlbXBsYXRlPFB0
clRhZyBvdGhlclRhZz4KLSAgICBleHBsaWNpdCBNZXRhQWxsb2NhdG9yUHRyKE1ldGFBbGxvY2F0
b3JQdHI8b3RoZXJUYWc+IG90aGVyKQotICAgICAgICA6IG1fcHRyKG90aGVyLnRlbXBsYXRlIHJl
dGFnZ2VkUHRyPHRhZz4oKSkKLSAgICB7IH0KLQotICAgIGV4cGxpY2l0IE1ldGFBbGxvY2F0b3JQ
dHIodWludHB0cl90IHB0ckFzSW50KQotICAgICAgICA6IE1ldGFBbGxvY2F0b3JQdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocHRyQXNJbnQpKQotICAgIHsgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCA9IHZvaWQqPgotICAgIFQgdW50YWdnZWRQdHIoKSBjb25zdCB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8VD4odW50YWdDb2RlUHRyPHRhZz4obV9wdHIpKTsgfQotCi0gICAgdGVtcGxhdGU8
UHRyVGFnIG5ld1RhZywgdHlwZW5hbWUgVCA9IHZvaWQqPgotICAgIFQgcmV0YWdnZWRQdHIoKSBj
b25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocmV0YWdDb2RlUHRyPHRhZywgbmV3VGFnPiht
X3B0cikpOyB9Ci0KLSAgICAvLyBEaXNhbGxvdyBhbnkgY2FzdGluZyBvcGVyYXRpb25zIChleGNl
cHQgZm9yIGJvb2xlYW5zKS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0
ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWU+PgotICAgIG9wZXJh
dG9yIFQoKSA9IGRlbGV0ZTsKLQotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAhIW1fcHRyOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
bV9wdHI7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShNZXRhQWxsb2NhdG9yUHRyIG90aGVyKSBj
b25zdCB7IHJldHVybiBtX3B0ciA9PSBvdGhlci5tX3B0cjsgfQotICAgIGJvb2wgb3BlcmF0b3Ih
PShNZXRhQWxsb2NhdG9yUHRyIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3B0ciAhPSBvdGhlci5t
X3B0cjsgfQotCi0gICAgTWV0YUFsbG9jYXRvclB0ciBvcGVyYXRvcisoc2l6ZV90IHNpemVJbkJ5
dGVzKSBjb25zdCB7IHJldHVybiBNZXRhQWxsb2NhdG9yUHRyKHVudGFnZ2VkUHRyPHVpbnQ4X3Qq
PigpICsgc2l6ZUluQnl0ZXMpOyB9Ci0gICAgTWV0YUFsbG9jYXRvclB0ciBvcGVyYXRvci0oc2l6
ZV90IHNpemVJbkJ5dGVzKSBjb25zdCB7IHJldHVybiBNZXRhQWxsb2NhdG9yUHRyKHVudGFnZ2Vk
UHRyPHVpbnQ4X3QqPigpIC0gc2l6ZUluQnl0ZXMpOyB9Ci0KLSAgICBNZXRhQWxsb2NhdG9yUHRy
JiBvcGVyYXRvcis9KHNpemVfdCBzaXplSW5CeXRlcykKLSAgICB7Ci0gICAgICAgIHJldHVybiAq
dGhpcyA9ICp0aGlzICsgc2l6ZUluQnl0ZXM7Ci0gICAgfQotCi0gICAgTWV0YUFsbG9jYXRvclB0
ciYgb3BlcmF0b3ItPShzaXplX3Qgc2l6ZUluQnl0ZXMpCi0gICAgewotICAgICAgICByZXR1cm4g
KnRoaXMgPSAqdGhpcyAtIHNpemVJbkJ5dGVzOwotICAgIH0KLQotICAgIGVudW0gRW1wdHlWYWx1
ZVRhZyB7IEVtcHR5VmFsdWUgfTsKLSAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRW
YWx1ZSB9OwotCi0gICAgTWV0YUFsbG9jYXRvclB0cihFbXB0eVZhbHVlVGFnKQotICAgICAgICA6
IG1fcHRyKGVtcHR5VmFsdWUoKSkKLSAgICB7IH0KLQotICAgIE1ldGFBbGxvY2F0b3JQdHIoRGVs
ZXRlZFZhbHVlVGFnKQotICAgICAgICA6IG1fcHRyKGRlbGV0ZWRWYWx1ZSgpKQotICAgIHsgfQot
Ci0gICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBlbXB0eVZh
bHVlKCk7IH0KLSAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIg
PT0gZGVsZXRlZFZhbHVlKCk7IH0KLQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVy
biBQdHJIYXNoPHZvaWQqPjo6aGFzaChtX3B0cik7IH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBNZXRhQWxsb2NhdG9yUHRyKHZvaWQqIHB0cikKLSAgICAgICAgOiBtX3B0cih0YWdDb2RlUHRy
PHRhZz4ocHRyKSkKLSAgICB7Ci0gICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHB0cik7Ci0gICAg
fQotCi0gICAgc3RhdGljIHZvaWQqIGVtcHR5VmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPigxKTsgfQotICAgIHN0YXRpYyB2b2lkKiBkZWxldGVkVmFsdWUoKSB7IHJldHVy
biByZWludGVycHJldF9jYXN0PHZvaWQqPigyKTsgfQotCi0gICAgdm9pZCogbV9wdHIgeyBudWxs
cHRyIH07Ci19OwotCi10ZW1wbGF0ZTxQdHJUYWcgdGFnPgotc3RydWN0IE1ldGFBbGxvY2F0b3JQ
dHJIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBNZXRhQWxsb2NhdG9yUHRy
PHRhZz4mIHB0cikgeyByZXR1cm4gcHRyLmhhc2goKTsgfQotICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IE1ldGFBbGxvY2F0b3JQdHI8dGFnPiYgYSwgY29uc3QgTWV0YUFsbG9jYXRvclB0cjx0
YWc+JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICB9Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci10ZW1wbGF0ZTxQdHJU
YWcgdGFnPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8TWV0YUFsbG9jYXRvclB0cjx0YWc+PiA6IE1ldGFB
bGxvY2F0b3JQdHJIYXNoPHRhZz4geyB9OwotCi10ZW1wbGF0ZTxQdHJUYWcgdGFnPiBzdHJ1Y3Qg
SGFzaFRyYWl0czxNZXRhQWxsb2NhdG9yUHRyPHRhZz4+IDogcHVibGljIEN1c3RvbUhhc2hUcmFp
dHM8TWV0YUFsbG9jYXRvclB0cjx0YWc+PiB7IH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11
c2luZyBXVEY6Ok1ldGFBbGxvY2F0b3JQdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKaW5kZXggMmQ1YzJmYmY2NjE4Li44ZGZiNDU5MGE1
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dC5jcHAKQEAgLTM1Myw3ICszNTMsNyBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpjbGVhckRP
TUd1YXJkZWRPYmplY3RzKCkgY29uc3QKIEpTRnVuY3Rpb24qIEpTRE9NR2xvYmFsT2JqZWN0Ojpj
cmVhdGVDcm9zc09yaWdpbkZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5j
dGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBDcm9zc09yaWdpbk1hcEtleSBrZXkgPSBzdGQ6Om1ha2VfcGFpcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBuYXRpdmVGdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsK
KyAgICBDcm9zc09yaWdpbk1hcEtleSBrZXkgPSBzdGQ6Om1ha2VfcGFpcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBuYXRpdmVGdW5jdGlvbi50YWdnZWRQdHIoKSk7CiAKICAgICAvLyBXZWFrR0NNYXA6
OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5vdCBpbnZva2UgR0Mgc2luY2UgR0MgY2FuIG1v
ZGlmeSBXZWFrR0NNYXAgaW4gdGhlIG1pZGRsZSBvZiBIYXNoTWFwOjplbnN1cmUuCiAgICAgLy8g
V2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRvIGludm9rZSBHQyB3aGVuIGV4ZWN1dGluZyBX
ZWFrR0NNYXA6OmVuc3VyZVZhbHVlIGFuZCAoMikgdG8gYXZvaWQgbG9va2luZyB1cCBIYXNoTWFw
IHR3aWNlLgpAQCAtMzY3LDcgKzM2Nyw3IEBAIEdldHRlclNldHRlciogSlNET01HbG9iYWxPYmpl
Y3Q6OmNyZWF0ZUNyb3NzT3JpZ2luR2V0dGVyU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBsCiB7CiAg
ICAgQVNTRVJUKGdldHRlciB8fCBzZXR0ZXIpOwogICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBDcm9zc09yaWdpbk1hcEtleSBrZXkgPSBzdGQ6Om1ha2VfcGFp
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnZXR0ZXIgPyBnZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSA6IHNldHRlci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBDcm9zc09yaWdpbk1hcEtleSBr
ZXkgPSBzdGQ6Om1ha2VfcGFpcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnZXR0ZXIgPyBnZXR0ZXIu
dGFnZ2VkUHRyKCkgOiBzZXR0ZXIudGFnZ2VkUHRyKCkpOwogCiAgICAgLy8gV2Vha0dDTWFwOjpl
bnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDIHNpbmNlIEdDIGNhbiBtb2Rp
ZnkgV2Vha0dDTWFwIGluIHRoZSBtaWRkbGUgb2YgSGFzaE1hcDo6ZW5zdXJlLgogICAgIC8vIFdl
IHVzZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0byBpbnZva2UgR0Mgd2hlbiBleGVjdXRpbmcgV2Vh
a0dDTWFwOjplbnN1cmVWYWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxvb2tpbmcgdXAgSGFzaE1hcCB0
d2ljZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9Db21waWxlZFNlbGVjdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvQ29tcGlsZWRTZWxlY3Rvci5oCmluZGV4IDc2ZGJj
ZWFkNDExMi4uMmZkZWRjY2JhNTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQv
Q29tcGlsZWRTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9Db21waWxlZFNl
bGVjdG9yLmgKQEAgLTU0LDcgKzU0LDcgQEAgc3RydWN0IENvbXBpbGVkU2VsZWN0b3IgewogCiAg
ICAgfkNvbXBpbGVkU2VsZWN0b3IoKQogICAgIHsKLSAgICAgICAgaWYgKGNvZGVSZWYuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpCisgICAgICAgIGlmIChjb2RlUmVmLmNvZGUoKS50YWdnZWRQ
dHIoKSkKICAgICAgICAgICAgIGRhdGFMb2dGKCJDb21waWxlZFNlbGVjdG9yICVkIFwiJXNcIlxu
IiwgdXNlQ291bnQsIHNlbGVjdG9yLT5zZWxlY3RvclRleHQoKS51dGY4KCkuZGF0YSgpKTsKICAg
ICB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2Fs
bC5oIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCmluZGV4IDk0OGJiMTRm
YzNmMS4uOTAwZDlhNzcxNGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVu
Y3Rpb25DYWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCkBA
IC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnVuY3Rpb25DYWxs
IHsKIHB1YmxpYzoKLSAgICBGdW5jdGlvbkNhbGwoSlNDOjpNYWNyb0Fzc2VtYmxlciYgYXNzZW1i
bGVyLCBSZWdpc3RlckFsbG9jYXRvciYgcmVnaXN0ZXJBbGxvY2F0b3IsIFN0YWNrQWxsb2NhdG9y
JiBzdGFja0FsbG9jYXRvciwgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpD
YWxsLCBGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4+LCAzMj4mIGNhbGxSZWdpc3Ry
eSkKKyAgICBGdW5jdGlvbkNhbGwoSlNDOjpNYWNyb0Fzc2VtYmxlciYgYXNzZW1ibGVyLCBSZWdp
c3RlckFsbG9jYXRvciYgcmVnaXN0ZXJBbGxvY2F0b3IsIFN0YWNrQWxsb2NhdG9yJiBzdGFja0Fs
bG9jYXRvciwgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxsLCBDb2Rl
UHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPj4sIDMyPiYgY2FsbFJlZ2lzdHJ5KQogICAgICAgICA6
IG1fYXNzZW1ibGVyKGFzc2VtYmxlcikKICAgICAgICAgLCBtX3JlZ2lzdGVyQWxsb2NhdG9yKHJl
Z2lzdGVyQWxsb2NhdG9yKQogICAgICAgICAsIG1fc3RhY2tBbGxvY2F0b3Ioc3RhY2tBbGxvY2F0
b3IpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRGdW5jdGlvbkFkZHJlc3MoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGZ1bmN0
aW9uQWRkcmVzcykKKyAgICB2b2lkIHNldEZ1bmN0aW9uQWRkcmVzcyhDb2RlUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPiBmdW5jdGlvbkFkZHJlc3MpCiAgICAgewogICAgICAgICBtX2Z1bmN0aW9u
QWRkcmVzcyA9IGZ1bmN0aW9uQWRkcmVzczsKICAgICB9CkBAIC0xMTAsNyArMTEwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgcHJlcGFyZUFuZENhbGwoKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fZnVuY3Rpb25BZGRyZXNzLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBBU1NFUlQo
bV9mdW5jdGlvbkFkZHJlc3MudGFnZ2VkUHRyKCkpOwogICAgICAgICBBU1NFUlQoIW1fZmlyc3RB
cmd1bWVudCB8fCAobV9maXJzdEFyZ3VtZW50ICYmICFtX3NlY29uZEFyZ3VtZW50KSB8fCAobV9m
aXJzdEFyZ3VtZW50ICYmIG1fc2Vjb25kQXJndW1lbnQpKTsKIAogICAgICAgICBzYXZlQWxsb2Nh
dGVkQ2FsbGVyU2F2ZWRSZWdpc3RlcnMoKTsKQEAgLTE3OSwxMiArMTc5LDEyIEBAIHByaXZhdGU6
CiAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlciYgbV9hc3NlbWJsZXI7CiAgICAgUmVnaXN0ZXJBbGxv
Y2F0b3ImIG1fcmVnaXN0ZXJBbGxvY2F0b3I7CiAgICAgU3RhY2tBbGxvY2F0b3ImIG1fc3RhY2tB
bGxvY2F0b3I7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxs
LCBGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4+LCAzMj4mIG1fY2FsbFJlZ2lzdHJ5
OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCwgQ29kZVB0
cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4+LCAzMj4mIG1fY2FsbFJlZ2lzdHJ5OwogCiAgICAgUmVn
aXN0ZXJWZWN0b3IgbV9zYXZlZFJlZ2lzdGVyczsKICAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tS
ZWZlcmVuY2VWZWN0b3IgbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzOwogICAgIAotICAg
IEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBtX2Z1bmN0aW9uQWRkcmVzczsKKyAg
ICBDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBtX2Z1bmN0aW9uQWRkcmVzczsKICAgICB1
bnNpZ25lZCBtX2FyZ3VtZW50Q291bnQ7CiAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBtX2ZpcnN0QXJndW1lbnQ7CiAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBtX3NlY29uZEFyZ3VtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1Nl
bGVjdG9yQ29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGls
ZXIuY3BwCmluZGV4IDlhM2E2YWM5ODFmNi4uNGM2MjIzMTA1OWRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCkBAIC0yNzYsNyArMjc2LDcgQEAgc3RydWN0
IFNlbGVjdG9yRnJhZ21lbnQgewogICAgIFZlY3Rvcjxjb25zdCBWZWN0b3I8QXRvbVN0cmluZz4q
PiBsYW5ndWFnZUFyZ3VtZW50c0xpc3Q7CiAgICAgVmVjdG9yPGNvbnN0IEF0b21TdHJpbmdJbXBs
KiwgOD4gY2xhc3NOYW1lczsKICAgICBIYXNoU2V0PHVuc2lnbmVkPiBwc2V1ZG9DbGFzc2VzOwot
ICAgIFZlY3RvcjxGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4sIDQ+IHVub3B0aW1p
emVkUHNldWRvQ2xhc3NlczsKKyAgICBWZWN0b3I8Q29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRh
Zz4sIDQ+IHVub3B0aW1pemVkUHNldWRvQ2xhc3NlczsKICAgICBWZWN0b3I8QXR0cmlidXRlTWF0
Y2hpbmdJbmZvLCA0PiBhdHRyaWJ1dGVzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBpbnQ+
LCAyPiBudGhDaGlsZEZpbHRlcnM7CiAgICAgVmVjdG9yPE50aENoaWxkT2ZTZWxlY3RvckluZm8+
IG50aENoaWxkT2ZGaWx0ZXJzOwpAQCAtMzY5LDcgKzM2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBtYXRjaGluZ1Rh
Z05hbWVGYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW5nUG9zdFRhZ05h
bWVGYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKICAgICB2b2lkIGdlbmVy
YXRlRWxlbWVudERhdGFNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMs
IGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudExpbmtN
YXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9y
RnJhZ21lbnQmKTsKLSAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEZ1bmN0aW9uQ2FsbFRlc3QoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlv
blB0clRhZz4pOworICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3Nl
bWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJU
YWc+KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzQWN0aXZlKEFzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAgIHZvaWQgZ2Vu
ZXJhdGVFbGVtZW50SXNFbXB0eShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOwog
ICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNGaXJzdENoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcyk7CkBAIC0zODUsNyArMzg1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdl
bmVyYXRlRWxlbWVudEF0dHJpYnV0ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1
cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBB
c3NlbWJsZXI6OlJlZ2lzdGVySUQgZGVjSW5kZXhSZWdpc3RlciwgY29uc3QgQXR0cmlidXRlTWF0
Y2hpbmdJbmZvJiBhdHRyaWJ1dGVJbmZvKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEF0dHJp
YnV0ZVZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0dHJpYnV0
ZU1hdGNoaW5nSW5mbyYgYXR0cmlidXRlSW5mbyk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRB
dHRyaWJ1dGVWYWx1ZUV4YWN0TWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0
IEF0b21TdHJpbmcmIGV4cGVjdGVkVmFsdWUsIEF0dHJpYnV0ZUNhc2VTZW5zaXRpdml0eSB2YWx1
ZUNhc2VTZW5zaXRpdml0eSk7Ci0gICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5j
dGlvbkNhbGxWYWx1ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdG9t
U3RyaW5nJiBleHBlY3RlZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkgdmFsdWVDYXNl
U2Vuc2l0aXZpdHksIEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBjYXNlU2Vuc2l0
aXZlVGVzdCwgRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGNhc2VJbnNlbnNpdGl2
ZVRlc3QpOworICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rpb25DYWxsVmFs
dWVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgY29uc3QgQXRvbVN0cmluZyYgZXhw
ZWN0ZWRWYWx1ZSwgQXR0cmlidXRlQ2FzZVNlbnNpdGl2aXR5IHZhbHVlQ2FzZVNlbnNpdGl2aXR5
LCBDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiBjYXNlU2Vuc2l0aXZlVGVzdCwgQ29kZVB0
cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4gY2FzZUluc2Vuc2l0aXZlVGVzdCk7CiAgICAgdm9pZCBn
ZW5lcmF0ZUVsZW1lbnRIYXNUYWdOYW1lKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNl
cywgY29uc3QgQ1NTU2VsZWN0b3ImIHRhZ01hdGNoaW5nU2VsZWN0b3IpOwogICAgIHZvaWQgZ2Vu
ZXJhdGVFbGVtZW50SGFzSWQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25z
dCBMb2NhbFJlZ2lzdGVyJiBlbGVtZW50RGF0YUFkZHJlc3MsIGNvbnN0IEF0b21TdHJpbmcmIGlk
VG9NYXRjaCk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRIYXNDbGFzc2VzKEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgTG9jYWxSZWdpc3RlciYgZWxlbWVudERhdGFB
ZGRyZXNzLCBjb25zdCBWZWN0b3I8Y29uc3QgQXRvbVN0cmluZ0ltcGwqLCA4PiYgY2xhc3NOYW1l
cyk7CkBAIC00MzMsNyArNDMzLDcgQEAgcHJpdmF0ZToKICAgICBBc3NlbWJsZXIgbV9hc3NlbWJs
ZXI7CiAgICAgUmVnaXN0ZXJBbGxvY2F0b3IgbV9yZWdpc3RlckFsbG9jYXRvcjsKICAgICBTdGFj
a0FsbG9jYXRvciBtX3N0YWNrQWxsb2NhdG9yOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1i
bGVyOjpDYWxsLCBGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4+LCAzMj4gbV9mdW5j
dGlvbkNhbGxzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1ibGVyOjpDYWxsLCBDb2RlUHRy
PEpTQzo6T3BlcmF0aW9uUHRyVGFnPj4sIDMyPiBtX2Z1bmN0aW9uQ2FsbHM7CiAKICAgICBTZWxl
Y3RvckNvbnRleHQgbV9zZWxlY3RvckNvbnRleHQ7CiAgICAgRnVuY3Rpb25UeXBlIG1fZnVuY3Rp
b25UeXBlOwpAQCAtODE2LDEzOCArODE2LDEzOCBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlw
ZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgIC8vIFVub3B0aW1pemVkIHBzZXVkbyBzZWxlY3Rvci4g
VGhleSBhcmUganVzdCBmdW5jdGlvbiBjYWxsIHRvIGEgc2ltcGxlIHRlc3RpbmcgZnVuY3Rpb24u
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBdXRvZmlsbDoKLSAgICAgICAgZnJh
Z21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNBdXRvZmlsbGVkKSk7CisgICAgICAgIGZyYWdtZW50
LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uSXNBdXRvZmlsbGVkKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5
cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc0F1dG9maWxsQW5kT2JzY3VyZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbklzQXV0b2ZpbGxlZEFuZE9ic2N1cmVkKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uSXNBdXRvZmlsbGVkQW5kT2JzY3VyZWQpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9u
VHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzQXV0b2ZpbGxTdHJvbmdQYXNzd29yZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uSXNBdXRvZmlsbGVkU3Ryb25nUGFzc3dvcmQpKTsKKyAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25Jc0F1dG9maWxsZWRTdHJvbmdQYXNzd29yZCkpOwogICAgICAgICByZXR1
cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NBdXRvZmlsbFN0cm9uZ1Bhc3N3b3JkVmlld2FibGU6Ci0gICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlND
OjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzQXV0b2ZpbGxlZFN0cm9uZ1Bhc3N3b3JkVmll
d2FibGUpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVu
ZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0F1dG9maWxsZWRTdHJv
bmdQYXNzd29yZFZpZXdhYmxlKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0NoZWNr
ZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVu
Y3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzQ2hlY2tlZCkpOworICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlND
OjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzQ2hlY2tlZCkpOwogICAgICAgICByZXR1cm4g
RnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NEZWZhdWx0OgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVk
b0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25NYXRjaGVzRGVmYXVsdFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uTWF0Y2hlc0RlZmF1bHRQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rp
b25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NEaXNhYmxlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0
Y2hlc0Rpc2FibGVkUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25NYXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NFbmFibGVkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVz
RW5hYmxlZFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0
Y2hlc0VuYWJsZWRQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpT
aW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NE
ZWZpbmVkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5k
KEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc0RlZmluZWRFbGVt
ZW50KSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
Q29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNEZWZpbmVkRWxlbWVudCkp
OwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGb2N1czoKLSAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJh
Z21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcykpOwogICAgICAgICBy
ZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NGb2N1c1Zpc2libGU6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0
aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbk1hdGNoZXNGb2N1c1Zpc2libGVQc2V1ZG9DbGFzcykpOworICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGb2N1c1Zpc2libGVQc2V1ZG9DbGFzcykpOwog
ICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGb2N1c1dpdGhpbjoKLSAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0ZvY3VzV2l0aGluUHNldWRvQ2xhc3MpKTsKKyAg
ICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpT
Qzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRm9jdXNXaXRoaW5Qc2V1ZG9DbGFz
cykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGdWxsUGFnZU1lZGlhOgotICAgICAg
ICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpT
Qzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc01lZGlhRG9jdW1lbnQpKTsKKyAgICAgICAg
ZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc01lZGlhRG9jdW1lbnQpKTsKICAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzSW5SYW5nZToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uSXNJblJhbmdlKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nl
cy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNJblJhbmdl
KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0luZGV0ZXJtaW5hdGU6Ci0gICAgICAg
IGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlND
OjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNJbmRldGVybWluYXRlUHNldWRvQ2xh
c3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChD
b2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzSW5kZXRlcm1pbmF0
ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ludmFsaWQ6Ci0g
ICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25Q
dHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzSW52YWxpZCkpOworICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbklzSW52YWxpZCkpOwogICAgICAgICByZXR1cm4gRnVuY3Rp
b25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NPcHRpb25hbDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNP
cHRpb25hbEZvcm1Db250cm9sKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRv
Q2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNP
cHRpb25hbEZvcm1Db250cm9sKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc091dE9m
UmFuZ2U6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
RnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzT3V0T2ZSYW5nZSkp
OworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQ
dHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbklzT3V0T2ZSYW5nZSkpOwogICAgICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NSZWFkT25seToKLSAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uTWF0Y2hlc1JlYWRPbmx5UHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21l
bnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25NYXRjaGVzUmVhZE9ubHlQc2V1ZG9DbGFzcykpOwogICAgICAgICBy
ZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NSZWFkV3JpdGU6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbk1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcykpOworICAgICAgICBmcmFnbWVu
dC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcykpOwogICAgICAgICBy
ZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NSZXF1aXJlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uSXNSZXF1aXJlZEZvcm1Db250cm9sKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0
aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uSXNSZXF1aXJlZEZvcm1Db250cm9sKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlv
blR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc1ZhbGlkOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMu
YXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Jc1ZhbGlk
KSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29k
ZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSXNWYWxpZCkpOwogICAgICAgICBy
ZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NXaW5kb3dJbmFjdGl2ZToKLSAgICAgICAgZnJhZ21lbnQudW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uSXNXaW5kb3dJbmFjdGl2ZSkpOworICAgICAgICBmcmFnbWVudC51bm9w
dGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbklzV2luZG93SW5hY3RpdmUpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlw
ZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFNjcmVlbjoKLSAgICAgICAgZnJh
Z21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0Z1bGxTY3JlZW5Qc2V1ZG9DbGFzcykpOwor
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8
SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGdWxsU2NyZWVuUHNldWRvQ2xh
c3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2Vy
OwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFNjcmVlbkRvY3VtZW50Ogot
ICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9u
UHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnVsbFNjcmVlbkRvY3Vt
ZW50UHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVz
RnVsbFNjcmVlbkRvY3VtZW50UHNldWRvQ2xhc3MpKTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9u
VHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzRnVsbFNjcmVlbkFuY2VzdG9yOgotICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBz
ZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25NYXRjaGVzRnVsbFNjcmVlbkFuY2VzdG9yUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJh
Z21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzRnVsbFNjcmVlbkFuY2VzdG9yUHNldWRvQ2xhc3Mp
KTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQW5pbWF0aW5nRnVsbFNjcmVlblRyYW5z
aXRpb246Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQo
RnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGdWxsU2Ny
ZWVuQW5pbWF0aW5nRnVsbFNjcmVlblRyYW5zaXRpb25Qc2V1ZG9DbGFzcykpOworICAgICAgICBm
cmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQdHI8SlNDOjpPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNGdWxsU2NyZWVuQW5pbWF0aW5nRnVsbFNjcmVl
blRyYW5zaXRpb25Qc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpT
aW1wbGVTZWxlY3RvckNoZWNrZXI7CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0Z1bGxTY3JlZW5Db250cm9sc0hpZGRlbjoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uTWF0Y2hlc0Z1bGxTY3JlZW5Db250cm9sc0hpZGRlblBzZXVkb0NsYXNzKSk7CisgICAg
ICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6
Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0Z1bGxTY3JlZW5Db250cm9sc0hpZGRl
blBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBJQ1RVUkVfSU5fUElDVFVSRV9BUEkp
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NQaWN0dXJlSW5QaWN0dXJlOgotICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRy
PEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzUGljdHVyZUluUGljdHVyZVBz
ZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5h
cHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1BpY3R1
cmVJblBpY3R1cmVQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpT
aW1wbGVTZWxlY3RvckNoZWNrZXI7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1dHVyZToKLSAgICAgICAgZnJhZ21lbnQudW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0Z1dHVyZUN1ZVBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZy
YWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0Z1dHVyZUN1ZVBzZXVkb0NsYXNzKSk7CiAgICAg
ICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Bhc3Q6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1p
emVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbk1hdGNoZXNQYXN0Q3VlUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25NYXRjaGVzUGFzdEN1ZVBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVy
biBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc1BsYXlpbmc6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbk1hdGNoZXNQbGF5aW5nUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25NYXRjaGVzUGxheWluZ1BzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5j
dGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc1BhdXNlZDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0
Y2hlc1BhdXNlZFBzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNl
dWRvQ2xhc3Nlcy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
TWF0Y2hlc1BhdXNlZFBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c1NlZWtpbmc6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBl
bmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNTZWVr
aW5nUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVz
U2Vla2luZ1BzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0J1ZmZl
cmluZzoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChG
dW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0J1ZmZlcmlu
Z1BzZXVkb0NsYXNzKSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nl
cy5hcHBlbmQoQ29kZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc0J1
ZmZlcmluZ1BzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1N0YWxs
ZWQ6Ci0gICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVu
Y3Rpb25QdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNTdGFsbGVkUHNl
dWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFw
cGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzU3RhbGxl
ZFBzZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc011dGVkOgotICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEZ1bmN0aW9uUHRy
PEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRjaGVzTXV0ZWRQc2V1ZG9DbGFzcykp
OworICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKENvZGVQ
dHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGNoZXNNdXRlZFBzZXVkb0NsYXNz
KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1ZvbHVtZUxvY2tlZDoKLSAgICAgICAg
ZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6
Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1ZvbHVtZUxvY2tlZFBzZXVkb0NsYXNz
KSk7CisgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoQ29k
ZVB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0Y2hlc1ZvbHVtZUxvY2tlZFBz
ZXVkb0NsYXNzKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9y
Q2hlY2tlcjsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hhc0F0dGFjaG1lbnQ6Ci0gICAgICAgIGZyYWdt
ZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoRnVuY3Rpb25QdHI8SlNDOjpPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhc0F0dGFjaG1lbnQpKTsKKyAgICAgICAgZnJhZ21lbnQu
dW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25IYXNBdHRhY2htZW50KSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5
cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICNlbmRpZgogCiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NNb2RhbDoKLSAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQc2V1ZG9D
bGFzc2VzLmFwcGVuZChGdW5jdGlvblB0cjxKU0M6Ok9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
TWF0Y2hlc01vZGFsUHNldWRvQ2xhc3MpKTsKKyAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc2VzLmFwcGVuZChDb2RlUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25NYXRjaGVzTW9kYWxQc2V1ZG9DbGFzcykpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBl
OjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAKICAgICAvLyBUaGVzZSBwc2V1ZG8tY2xhc3NlcyBv
bmx5IGhhdmUgbWVhbmluZyB3aXRoIHNjcm9sbGJhcnMuCkBAIC0zMzc4LDcgKzMzNzgsNyBAQCB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRlVmFsdWVF
eGFjdE1hdGNoaW5nKEFzc2VtYmxlcgogICAgIH0KIH0KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmco
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQg
Y3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0b21TdHJpbmcmIGV4cGVjdGVkVmFsdWUs
IEF0dHJpYnV0ZUNhc2VTZW5zaXRpdml0eSB2YWx1ZUNhc2VTZW5zaXRpdml0eSwgRnVuY3Rpb25Q
dHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGNhc2VTZW5zaXRpdmVUZXN0LCBGdW5jdGlvblB0cjxK
U0M6Ok9wZXJhdGlvblB0clRhZz4gY2FzZUluc2Vuc2l0aXZlVGVzdCkKK3ZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxWYWx1ZU1h
dGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdG9tU3RyaW5nJiBleHBlY3Rl
ZFZhbHVlLCBBdHRyaWJ1dGVDYXNlU2Vuc2l0aXZpdHkgdmFsdWVDYXNlU2Vuc2l0aXZpdHksIENv
ZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+IGNhc2VTZW5zaXRpdmVUZXN0LCBDb2RlUHRyPEpT
Qzo6T3BlcmF0aW9uUHRyVGFnPiBjYXNlSW5zZW5zaXRpdmVUZXN0KQogewogICAgIExvY2FsUmVn
aXN0ZXJXaXRoUHJlZmVyZW5jZSBleHBlY3RlZFZhbHVlUmVnaXN0ZXIobV9yZWdpc3RlckFsbG9j
YXRvciwgSlNDOjpHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIG1fYXNzZW1ibGVyLm1vdmUo
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGV4cGVjdGVkVmFsdWUuaW1wbCgpKSwgZXhwZWN0ZWRW
YWx1ZVJlZ2lzdGVyKTsKQEAgLTM0MzQsNyArMzQzNCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxWYWx1ZU1hdGNoaW5n
KEFzCiAgICAgfQogfQogCi12b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEZ1
bmN0aW9uUHRyPEpTQzo6T3BlcmF0aW9uUHRyVGFnPiB0ZXN0RnVuY3Rpb24pCit2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIENvZGVQdHI8SlNDOjpPcGVyYXRpb25QdHJUYWc+
IHRlc3RGdW5jdGlvbikKIHsKICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudEFkZHJl
c3MgPSBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyOwogICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNh
bGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1f
ZnVuY3Rpb25DYWxscyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0
b3JDb21waWxlci5oIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuaApp
bmRleCAxYjNkN2YxNDAzNTEuLjdiODFlOWM2ZGJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQv
U2VsZWN0b3JDb21waWxlci5oCkBAIC01OCwxMCArNTgsMTAgQEAgaW5saW5lIHVuc2lnbmVkIHJ1
bGVDb2xsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIoQ29tcGlsZWRTZWxlY3RvciYgY29tcGls
ZWRTZWwKICAgICBBU1NFUlQoY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMgPT0gU2VsZWN0b3JDb21w
aWxhdGlvblN0YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2VyKTsKICNpZiBDUFUoQVJNNjRFKQog
ICAgIGlmIChKU0M6Ok9wdGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgcmV0dXJuIHZtRW50
cnlUb0NTU0pJVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbGVtZW50KSwgYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4odmFsdWUpLCAwLCBjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICByZXR1cm4gdm1FbnRyeVRvQ1NTSklUKGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGVsZW1lbnQpLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1
ZSksIDAsIGNvbXBpbGVkU2VsZWN0b3IuY29kZVJlZi5jb2RlKCkudGFnZ2VkUHRyKCkpOwogI2Vu
ZGlmCiAgICAgdXNpbmcgUnVsZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciA9IHVuc2ln
bmVkKCopKGNvbnN0IEVsZW1lbnQqLCB1bnNpZ25lZCopOwotICAgIHJldHVybiB1bnRhZ0NGdW5j
dGlvblB0cjxSdWxlQ29sbGVjdG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyLCBKU0M6OkNTU1NlbGVj
dG9yUHRyVGFnPihjb21waWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKGVsZW1lbnQsIHZhbHVlKTsKKyAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8UnVs
ZUNvbGxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciwgSlNDOjpDU1NTZWxlY3RvclB0clRhZz4o
Y29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS50YWdnZWRQdHIoKSkoZWxlbWVudCwgdmFs
dWUpOwogfQogCiBpbmxpbmUgdW5zaWduZWQgcXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcihDb21waWxlZFNlbGVjdG9yJiBjb21waWxlZFNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBl
bGVtZW50KQpAQCAtNjksMTAgKzY5LDEwIEBAIGlubGluZSB1bnNpZ25lZCBxdWVyeVNlbGVjdG9y
U2ltcGxlU2VsZWN0b3JDaGVja2VyKENvbXBpbGVkU2VsZWN0b3ImIGNvbXBpbGVkU2VsCiAgICAg
QVNTRVJUKGNvbXBpbGVkU2VsZWN0b3Iuc3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0
dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcik7CiAjaWYgQ1BVKEFSTTY0RSkKICAgICBpZiAoSlND
OjpPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgIHJldHVybiB2bUVudHJ5VG9DU1NKSVQo
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZWxlbWVudCksIDAsIDAsIGNvbXBpbGVkU2VsZWN0b3Iu
Y29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHJldHVybiB2bUVu
dHJ5VG9DU1NKSVQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZWxlbWVudCksIDAsIDAsIGNvbXBp
bGVkU2VsZWN0b3IuY29kZVJlZi5jb2RlKCkudGFnZ2VkUHRyKCkpOwogI2VuZGlmCiAgICAgdXNp
bmcgUXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciA9IHVuc2lnbmVkKCopKGNvbnN0
IEVsZW1lbnQqKTsKLSAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxlY3RvclNp
bXBsZVNlbGVjdG9yQ2hlY2tlciwgSlNDOjpDU1NTZWxlY3RvclB0clRhZz4oY29tcGlsZWRTZWxl
Y3Rvci5jb2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShlbGVtZW50KTsKKyAgICBy
ZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tl
ciwgSlNDOjpDU1NTZWxlY3RvclB0clRhZz4oY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUo
KS50YWdnZWRQdHIoKSkoZWxlbWVudCk7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBydWxlQ29sbGVj
dG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dChDb21waWxlZFNlbGVjdG9yJiBj
b21waWxlZFNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQqIHZhbHVlKQpAQCAtODAsMTAgKzgw
LDEwIEBAIGlubGluZSB1bnNpZ25lZCBydWxlQ29sbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENo
ZWNraW5nQ29udGV4dChDb21waWxlZFNlbGVjdG9yCiAgICAgQVNTRVJUKGNvbXBpbGVkU2VsZWN0
b3Iuc3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldp
dGhDaGVja2luZ0NvbnRleHQpOwogI2lmIENQVShBUk02NEUpCiAgICAgaWYgKEpTQzo6T3B0aW9u
czo6dXNlSklUQ2FnZSgpKQotICAgICAgICByZXR1cm4gdm1FbnRyeVRvQ1NTSklUKGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KGVsZW1lbnQpLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb250ZXh0
KSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpLCBjb21waWxlZFNlbGVjdG9yLmNvZGVS
ZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICByZXR1cm4gdm1FbnRyeVRv
Q1NTSklUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVsZW1lbnQpLCBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90Pihjb250ZXh0KSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpLCBjb21waWxl
ZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLnRhZ2dlZFB0cigpKTsKICNlbmRpZgogICAgIHVzaW5n
IFJ1bGVDb2xsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0ID0gdW5zaWdu
ZWQoKikoY29uc3QgRWxlbWVudCosIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0Kiwg
dW5zaWduZWQqKTsKLSAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8UnVsZUNvbGxlY3RvclNl
bGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQsIEpTQzo6Q1NTU2VsZWN0b3JQdHJUYWc+
KGNvbXBpbGVkU2VsZWN0b3IuY29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoZWxl
bWVudCwgY29udGV4dCwgdmFsdWUpOworICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0cjxSdWxl
Q29sbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCwgSlNDOjpDU1NTZWxl
Y3RvclB0clRhZz4oY29tcGlsZWRTZWxlY3Rvci5jb2RlUmVmLmNvZGUoKS50YWdnZWRQdHIoKSko
ZWxlbWVudCwgY29udGV4dCwgdmFsdWUpOwogfQogCiBpbmxpbmUgdW5zaWduZWQgcXVlcnlTZWxl
Y3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQoQ29tcGlsZWRTZWxlY3RvciYg
Y29tcGlsZWRTZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHQqIGNvbnRleHQpCkBAIC05MSwxMCArOTEsMTAgQEAgaW5s
aW5lIHVuc2lnbmVkIHF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250
ZXh0KENvbXBpbGVkU2VsZWN0b3IKICAgICBBU1NFUlQoY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMg
PT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5n
Q29udGV4dCk7CiAjaWYgQ1BVKEFSTTY0RSkKICAgICBpZiAoSlNDOjpPcHRpb25zOjp1c2VKSVRD
YWdlKCkpCi0gICAgICAgIHJldHVybiB2bUVudHJ5VG9DU1NKSVQoYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oZWxlbWVudCksIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvbnRleHQpLCAwLCBjb21w
aWxlZFNlbGVjdG9yLmNvZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAg
ICByZXR1cm4gdm1FbnRyeVRvQ1NTSklUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVsZW1lbnQp
LCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb250ZXh0KSwgMCwgY29tcGlsZWRTZWxlY3Rvci5j
b2RlUmVmLmNvZGUoKS50YWdnZWRQdHIoKSk7CiAjZW5kaWYKICAgICB1c2luZyBRdWVyeVNlbGVj
dG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCA9IHVuc2lnbmVkKCopKGNvbnN0
IEVsZW1lbnQqLCBjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCopOwotICAg
IHJldHVybiB1bnRhZ0NGdW5jdGlvblB0cjxRdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0
aENoZWNraW5nQ29udGV4dCwgSlNDOjpDU1NTZWxlY3RvclB0clRhZz4oY29tcGlsZWRTZWxlY3Rv
ci5jb2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShlbGVtZW50LCBjb250ZXh0KTsK
KyAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8UXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tl
cldpdGhDaGVja2luZ0NvbnRleHQsIEpTQzo6Q1NTU2VsZWN0b3JQdHJUYWc+KGNvbXBpbGVkU2Vs
ZWN0b3IuY29kZVJlZi5jb2RlKCkudGFnZ2VkUHRyKCkpKGVsZW1lbnQsIGNvbnRleHQpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBTZWxlY3RvckNvbXBpbGVyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCmluZGV4IGI5MWY2OGVjMGNjMS4uM2ViZWJh
ODk0NTRlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxs
b2NhdG9yLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2Nh
dG9yLmNwcApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgbV9wYXJlbnQtPmFkZGl0aW9uYWxQYWdlc0luSGVhcCArPSBudW1QYWdlczsK
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZyZWVTcGFjZVB0cjo6bWFrZUZyb21S
YXdQb2ludGVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZyZWVTcGFjZVB0cjo6
ZnJvbVVudGFnZ2VkUHRyKHJlc3VsdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBkZWZhdWx0Ogo=
</data>

          </attachment>
      

    </bug>

</bugzilla>