<?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>171101</bug_id>
          
          <creation_ts>2017-04-20 22:52:55 -0700</creation_ts>
          <short_desc>Refactor MASM probe to allow printing of custom types.</short_desc>
          <delta_ts>2017-04-21 14:43:14 -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></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>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1299515</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-20 22:52:55 -0700</bug_when>
    <thetext>This allows us to add printing of CodeBlock* and Air::Args amongst other things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299534</commentid>
    <comment_count>1</comment_count>
      <attachid>307701</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-20 23:48:43 -0700</bug_when>
    <thetext>Created attachment 307701
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299535</commentid>
    <comment_count>2</comment_count>
      <attachid>307702</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-21 00:01:27 -0700</bug_when>
    <thetext>Created attachment 307702
proposed patch: fix EWS complaint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299540</commentid>
    <comment_count>3</comment_count>
      <attachid>307704</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-21 00:31:52 -0700</bug_when>
    <thetext>Created attachment 307704
proposed patch: fix 32-bit, and guess fix for Win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299661</commentid>
    <comment_count>4</comment_count>
      <attachid>307704</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-21 10:04:43 -0700</bug_when>
    <thetext>Comment on attachment 307704
proposed patch: fix 32-bit, and guess fix for Win.

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

Needs a 🖨 somewhere.

A few comments, but this looks good. r=me

&gt; Source/JavaScriptCore/assembler/MacroAssemblerPrinter.cpp:47
&gt; +            out.print(&quot; &quot;);

out.print(&apos; &apos;); instead?

&gt; Source/JavaScriptCore/assembler/MacroAssemblerPrinter.cpp:119
&gt; +    out.printf(&quot;%s:&lt;0x%016llx %.13g&gt;&quot;, name, u.uint64Value, u.doubleValue);

Use bitwise_cast instead of the union(here and below).

&gt; Source/JavaScriptCore/assembler/MacroAssemblerPrinter.h:71
&gt; +//      jit.print(AllRegisters(4)); // The 4 here is for an indentation of 4 characters.

Instead of comment-comment:
size_t indentation = 4;
jit.print(AllRegisters(indentation));

&gt; Source/JavaScriptCore/assembler/MacroAssemblerPrinter.h:94
&gt; +    AllRegisters(int charsToIndent = 0)

`explicit` here and other constructors below (especially the ones that are non-class enum like Printer).

&gt; Source/JavaScriptCore/assembler/Printer.h:41
&gt; +    Data() { }

is this useful? Can we = delete it, or at least memset the entire content to zero?

&gt; Source/JavaScriptCore/assembler/Printer.h:51
&gt; +        memcpy(buffer, src, size);

OK so this is great for a union, because &quot;active member&quot; is what matters in unions. You&apos;re only allowed to load back the active member of a union, and the active member is the last one you stored... When you memcpy into a union *all* the members become active, so it&apos;s well-defined behavior to load from *any* member!

You should therefore use the same memcpy trick (or bitwise_cast) in the above 3 constructors.

&gt; Source/JavaScriptCore/assembler/Printer.h:61
&gt; +    const T as(int = 0) const

Why the unused default param here?

&gt; Source/JavaScriptCore/assembler/Printer.h:78
&gt; +    uintptr_t buffer[6];

The buffer should be `char` because you cast around it and `char` has magical pixie-dust TBAA properties. Or std::aligned_storage, that&apos;s much nicer actually.

&gt; Source/JavaScriptCore/assembler/Printer.h:134
&gt; +inline PrintRecordList* makePrintRecordList(Arguments&amp;&amp;... arguments)

The lifetime of the pointer is unclear here. It&apos;s both appended and returned. Who owns it? Should this be some smart pointer?

&gt; Source/JavaScriptCore/assembler/Printer.h:174
&gt; +void setPrinter(PrintRecord&amp; record, T value, intptr_t = 0)

The defaults param is to distinguish signedness? Can you make an enum instead, and pass it as a defaulted template parameter after T?

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1145
&gt; +        Printer::appendAirArgs(inst, std::forward&lt;Arguments&gt;(arguments)...);

You&apos;re forwarding the arguments twice. Can&apos;t do that.

&gt; Source/JavaScriptCore/b3/air/AirPrintSpecial.h:124
&gt; +    numSpecialArgs + numCalleeArgs + numReturnGPArgs + numReturnFPArgs;

constexpr instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299714</commentid>
    <comment_count>5</comment_count>
      <attachid>307704</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-21 11:29:30 -0700</bug_when>
    <thetext>Comment on attachment 307704
proposed patch: fix 32-bit, and guess fix for Win.

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

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerPrinter.cpp:47
&gt;&gt; +            out.print(&quot; &quot;);
&gt; 
&gt; out.print(&apos; &apos;); instead?

Can&apos;t so that.  That would print the ascii value of &apos; &apos; as a number.  See printInternal(PrintStream&amp; out, signed char value) and printInternal(PrintStream&amp; out, unsigned char value) in PrintStream.cpp.

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerPrinter.cpp:119
&gt;&gt; +    out.printf(&quot;%s:&lt;0x%016llx %.13g&gt;&quot;, name, u.uint64Value, u.doubleValue);
&gt; 
&gt; Use bitwise_cast instead of the union(here and below).

Fixed.

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerPrinter.h:71
&gt;&gt; +//      jit.print(AllRegisters(4)); // The 4 here is for an indentation of 4 characters.
&gt; 
&gt; Instead of comment-comment:
&gt; size_t indentation = 4;
&gt; jit.print(AllRegisters(indentation));

Fixed.

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerPrinter.h:94
&gt;&gt; +    AllRegisters(int charsToIndent = 0)
&gt; 
&gt; `explicit` here and other constructors below (especially the ones that are non-class enum like Printer).

I made AllRegisters, Memory, and MemWord constructors explicit.

I want Printer to be implicit.  This way we can do:
    jit.print(&quot;cb = &quot;, codeBlock, &quot;\n&quot;);
instead of:
    jit.print(Printer(&quot;cb = &quot;), Printer(codeBlock), Printer(&quot;\n&quot;));

And it is safe to have the Printer constructors be implicit because there&apos;s only one consumer of Printer instances (i.e. the MASM print mechanism).  It won&apos;t get auto-substituted elsewhere (or should not).

&gt;&gt; Source/JavaScriptCore/assembler/Printer.h:41
&gt;&gt; +    Data() { }
&gt; 
&gt; is this useful? Can we = delete it, or at least memset the entire content to zero?

Yes, this is needed because we can instantiate PrintRecord with an uninitialized Data.  I&apos;ll memcpy 0xdeadb0d0 into it to mark it as uninitialized.

&gt;&gt; Source/JavaScriptCore/assembler/Printer.h:51
&gt;&gt; +        memcpy(buffer, src, size);
&gt; 
&gt; OK so this is great for a union, because &quot;active member&quot; is what matters in unions. You&apos;re only allowed to load back the active member of a union, and the active member is the last one you stored... When you memcpy into a union *all* the members become active, so it&apos;s well-defined behavior to load from *any* member!
&gt; 
&gt; You should therefore use the same memcpy trick (or bitwise_cast) in the above 3 constructors.

Fixed.

&gt;&gt; Source/JavaScriptCore/assembler/Printer.h:61
&gt;&gt; +    const T as(int = 0) const
&gt; 
&gt; Why the unused default param here?

Because VC on Win is not smart enough.  This is a workaround for VC not being able to see that this does not conflict with the as() above.

&gt;&gt; Source/JavaScriptCore/assembler/Printer.h:78
&gt;&gt; +    uintptr_t buffer[6];
&gt; 
&gt; The buffer should be `char` because you cast around it and `char` has magical pixie-dust TBAA properties. Or std::aligned_storage, that&apos;s much nicer actually.

Fixed to use std::aligned_storage.

&gt;&gt; Source/JavaScriptCore/assembler/Printer.h:134
&gt;&gt; +inline PrintRecordList* makePrintRecordList(Arguments&amp;&amp;... arguments)
&gt; 
&gt; The lifetime of the pointer is unclear here. It&apos;s both appended and returned. Who owns it? Should this be some smart pointer?

The MASM print mechanism is debugging code and this list is intentionally being leaked.  I&apos;ll add a comment indicating that.

&gt;&gt; Source/JavaScriptCore/assembler/Printer.h:174
&gt;&gt; +void setPrinter(PrintRecord&amp; record, T value, intptr_t = 0)
&gt; 
&gt; The defaults param is to distinguish signedness? Can you make an enum instead, and pass it as a defaulted template parameter after T?

The default parameter is not for distinguishing sign-ness.  I could have used &quot;uintptr_t = 0, uintptr_t = 0&quot; here instead.  It is just to give this setPrinter template a different signature than the one one below, because of template magic reasons.  The compiler (or maybe the language?) doesn&apos;t like it otherwise.

&gt;&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1145
&gt;&gt; +        Printer::appendAirArgs(inst, std::forward&lt;Arguments&gt;(arguments)...);
&gt; 
&gt; You&apos;re forwarding the arguments twice. Can&apos;t do that.

Fixed.

&gt;&gt; Source/JavaScriptCore/b3/air/AirPrintSpecial.h:124
&gt;&gt; +    numSpecialArgs + numCalleeArgs + numReturnGPArgs + numReturnFPArgs;
&gt; 
&gt; constexpr instead?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299750</commentid>
    <comment_count>6</comment_count>
      <attachid>307704</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-21 12:01:40 -0700</bug_when>
    <thetext>Comment on attachment 307704
proposed patch: fix 32-bit, and guess fix for Win.

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

&gt;&gt;&gt; Source/JavaScriptCore/assembler/Printer.h:78
&gt;&gt;&gt; +    uintptr_t buffer[6];
&gt;&gt; 
&gt;&gt; The buffer should be `char` because you cast around it and `char` has magical pixie-dust TBAA properties. Or std::aligned_storage, that&apos;s much nicer actually.
&gt; 
&gt; Fixed to use std::aligned_storage.

Actually, std::aligned_storage&lt;N&gt; appears to always gives me a size of 1 regardless of what I specify for N.  I&apos;m reverting to uintptr_t arrays so that I&apos;ll get uintptr_t alignment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299754</commentid>
    <comment_count>7</comment_count>
      <attachid>307769</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-21 12:10:01 -0700</bug_when>
    <thetext>Created attachment 307769
updated patch w/ JF&apos;s feedback applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299848</commentid>
    <comment_count>8</comment_count>
      <attachid>307769</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-21 13:50:58 -0700</bug_when>
    <thetext>Comment on attachment 307769
updated patch w/ JF&apos;s feedback applied.

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

r=me

&gt; Source/JavaScriptCore/assembler/MacroAssemblerPrinter.h:117
&gt; +    explicit Memory(RegisterID&amp; reg, size_t bytes, DumpStyle style = GenericDump)

FWIW I only meant for the single-parameter ctors. This is fine though: pre-C++11 it didn&apos;t mean anything, but now it applies the same rules for initialization with curlies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299912</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-21 14:43:14 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r215642: &lt;http://trac.webkit.org/r215642&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307701</attachid>
            <date>2017-04-20 23:48:43 -0700</date>
            <delta_ts>2017-04-21 00:01:27 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-171101.patch</filename>
            <type>text/plain</type>
            <size>54810</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1NjA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBA
QAorMjAxNy0wNC0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3IgTUFTTSBwcm9iZSB0byBhbGxvdyBwcmludGluZyBvZiBjdXN0b20gdHlwZXMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzExMDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb3IgZXhhbXBs
ZSwgdGhpcyBhbGxvd3MgdXMgdG8gYWRkIE1BU00gcHJpbnRpbmcgb2YgQ29kZUJsb2NrKiBhbmQg
QWlyOjpBcmdzLgorCisgICAgICAgIEluIGdlbmVyYWwsIE1BU00gcHJpbnQgY2FuIGJlIHVzZWQg
bGlrZSBkYXRhTG9nLCBleGNlcHQgdGhhdCBpdCBnZW5lcmF0ZXMgSklUdGVkCisgICAgICAgIGNv
ZGUgZm9yIGRvaW5nIHRoZSBkYXRhTG9nZ2luZyBsYXRlciB3aGVuIHRoZSBKSVR0ZWQgY29kZSBy
dW5zLiAgTUFTTSBwcmludCBjYW4KKyAgICAgICAgcHJpbnQgYW55IHZhbHVlIHR5cGUgdGhhdCBh
IHNwZWNpYWxpemVkIFByaW50ZXIgdGVtcGxhdGUgb3IgYSBzZXRQcmludGVyKCkKKyAgICAgICAg
ZnVuY3Rpb24gaW1wbGVtZW50ZWQgZm9yIHRoYXQgdHlwZS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJpbnRl
cjo6cHJpbnRBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFBDUmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFJlZ2lzdGVySUQpOgorICAgICAg
ICAoSlNDOjpQcmludGVyOjpwcmludEZQUmVnaXN0ZXJJRCk6CisgICAgICAgIChKU0M6OlByaW50
ZXI6OnByaW50QWRkcmVzcyk6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6UHJpbnRlcjo6cHJpbnRDYWxsYmFjayk6CisgICAgICAgIChKU0M6OnBy
aW50SW5kZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cHJpbnRDUFUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpwcmludENQVVJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OnByaW50UEMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpwcmludFJlZ2lzdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6cHJpbnRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclByaW50ZXI6OnByaW50Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuaDoKKyAgICAgICAgKEpTQzo6QWxsUmVn
aXN0ZXJzOjpBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPEFs
bFJlZ2lzdGVycz46OlByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPFBD
UmVnaXN0ZXI+OjpQcmludGVyKToKKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD46OlByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVy
OjpQcmludGVyPE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+OjpQcmludGVyKToKKyAgICAg
ICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcz46OlByaW50
ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPE1lbW9yeT46OlByaW50ZXIpOgor
ICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPE1lbVdvcmQ8SW50VHlwZT4+OjpQcmludGVy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnByaW50KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJQcmludGVyOjpwcmludCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyUHJpbnRlcjo6UHJpbnRBcmc6OlByaW50QXJnKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJQcmludGVyOjphcHBlbmRQcmludEFyZyk6IERlbGV0ZWQu
CisgICAgICAgIC0gUmVmYWN0b3JlZCB0byBtb3ZlIHRoZSB1bmRlcmx5aW5nIFByaW50UmVjb3Jk
IChhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMpCisgICAgICAgICAgb3V0IHRvIFByaW50
ZXIuY3BwL2guCisgICAgICAgIC0gTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcC9oIG5vdyBvbmx5
IGFkZCBjdXN0b20gUHJpbnRlcnMgZm9yIE1BU00gdHlwZXMgbGlrZQorICAgICAgICAgIFJlZ2lz
dGVySUQgYW5kIE1lbW9yeS4gIEl0IGFsc28gZGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gb2YK
KyAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cHJpbnQoKS4KKworICAgICAgICAgIEFzIGJlZm9y
ZSwgSklUIGNvZGUgdGhhdCB3aXNoZXMgdG8gdXNlIE1hY3JvQXNzZW1ibGVyOjpwcmludCgpIG5l
ZWRzIHRvCisgICAgICAgICAgI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIi4KKwor
ICAgICAgICAtIEFsc28gYWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhbiBvcHRpb25hbCBp
bmRlbnRhdGlvbiAoaW4gbnVtYmVyIG9mIGNoYXJzKQorICAgICAgICAgIHdoZW4gTUFTTSBwcmlu
dGluZyBBbGxSZWdpc3RlcnMuICBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIEFsbFJlZ2lzdGVycyBw
cmludHMKKyAgICAgICAgICBhIGJsb2NrIG9mIGRhdGEgdW5saWtlIG90aGVyIHByaW50ZXJzIHdo
aWNoIHByaW50IGlubGluZS4KKworICAgICAgICAqIGFzc2VtYmxlci9QcmludGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50Q29uc3RDaGFyU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6UHJpbnRlcjo6cHJpbnRJbnRwdHIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpw
cmludFVpbnRwdHIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFBvaW50ZXIpOgorICAg
ICAgICAoSlNDOjpQcmludGVyOjpzZXRQcmludGVyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvUHJp
bnRlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6Q29udGV4dDo6Q29udGV4dCk6
CisgICAgICAgIChKU0M6OlByaW50ZXI6OlByaW50UmVjb3JkOjpQcmludFJlY29yZCk6CisgICAg
ICAgIChKU0M6OlByaW50ZXI6OmFwcGVuZFByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVy
OjptYWtlUHJpbnRSZWNvcmRMaXN0KToKKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxS
YXdQb2ludGVyPjo6UHJpbnRlcik6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnNldFByaW50ZXIp
OgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyOjpQcmludGVyKToKKyAgICAgICAgLSBE
YXRhIHN0cnVjdHVyZXMgZm9yIGNyZWF0aW5nIGEgbGlzdCBvZiBQcmludFJlY29yZHMuICBDbGFz
c2VzIHdoaWNoIHdpc2ggdG8KKyAgICAgICAgICBhZGQgY3VzdG9tIHN1cHBvcnQgZm9yIE1BU00g
cHJpbnRpbmcgY2FuICNpbmNsdWRlICJQcmludGVyLmgiIGFuZCBpbXBsZW1lbnQKKyAgICAgICAg
ICBlaXRoZXI6CisgICAgICAgICAgMS4gYSBzcGVjaWFsaXplZCBQcmludGVyIHRlbXBsYXRlLCBv
cgorICAgICAgICAgIDIuIGEgc2V0UHJpbnRlcigpIGZ1bmN0aW9uLgorCisgICAgICAgICAgU2Vl
IFByaW50ZXI8UmVnPiBhbmQgUHJpbnRlcjxCMzo6QWlyOjpUbXA+IGluIEFpclByaW50U3BlY2lh
bC5oIGZvciBleGFtcGxlcyBvZgorICAgICAgICAgICgxKS4gIFNlZSBDb2RlQmxvY2sncyBzZXRQ
cmludGVyKCkgZm9yIGFuIGV4YW1wbGUgb2YgKDIpLgorCisgICAgICAgICogYjMvQjNMb3dlclRv
QWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6cHJpbnQpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJQcmludFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpQcmludFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpQcmludFNwZWNpYWw6On5QcmludFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpQcmludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmlu
dFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6
OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpyZXBv
cnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlByaW50U3BlY2lhbDo6ZXh0cmFFYXJs
eUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6OmV4
dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlByaW50U3BlY2lhbDo6
ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6OmRlZXBEdW1w
SW1wbCk6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50QWlyQXJnKToKKyAgICAgICAgKiBi
My9haXIvQWlyUHJpbnRTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpQcmludGVyOjph
cHBlbmRBaXJBcmcpOgorICAgICAgICAoSlNDOjpQcmludGVyOjphcHBlbmRBaXJBcmdzKToKKyAg
ICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxCMzo6QWlyOjpUbXA+OjpQcmludGVyKToKKyAg
ICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxSZWc+OjpQcmludGVyKToKKyAgICAgICAgLSBB
ZGQgdGhlIHByaW50KCkgb3BlcmF0aW9uIGZvciB1c2UgaW4gTG93ZXJUb0Fpci4gIHByaW50KCkg
d2lsbCBlbWl0IGEKKyAgICAgICAgICBQcmludFNwZWNpYWwgdGhhdCB3aWxsIHVsdGltYXRlbHkg
ZW1pdCBhIE1BU00gcHJpbnQgdG8gcHJpbnQgd2hhdCB3ZSB3YW50LgorICAgICAgICAtIExvd2Vy
VG9BaXIncyBwcmludCgpIGFkZHMgdGhlIGFiaWxpdHkgdG8gcHJpbnQgQWlyOjpBcmdzLgorICAg
ICAgICAtIFVubGlrZSBpbiB0aGUgYmFzZWxpbmUgSklUIGFuZCB0aGUgREZHLCBMb3dlclRvQWly
J3MgcHJpbnQoKSBjYW4gcGVydHVyYiB0aGUKKyAgICAgICAgICB1c2FnZSBvZiByZWdpc3RlcnMu
ICBUaGlzIGlzIGJlY2F1c2UgUHJpbnRTcGVjaWFsIGlzIGEgcGF0Y2ggcG9pbnQsIGFuZCBpdAor
ICAgICAgICAgIHByZXZlbnRzIGNlcnRhaW4gb3B0aW1pemF0aW9ucy4gIElmIG5vdCB1c2VkIGNh
cmVmdWxseSwgYW4gYXR0ZW1wdCB0byBwcmludCgpCisgICAgICAgICAgYW4gQXJnIGJ5IHRha2lu
ZyBhIFRtcCwgY2FuIGZvcmNlIHRoZSBCMyBWYWx1ZSBpbnRvIGEgVG1wIGVhcmxpZXIgdGhhbiBp
dCB3b3VsZAorICAgICAgICAgIG90aGVyd2lzZSBkbyBzby4gIFNvLCB1c2UgTG93ZXJUb0Fpcidz
IHByaW50KCkgd2l0aCBjYXJlLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6c2V0UHJpbnRlcik6CisgICAgICAgIC0gTm93IHdlIGNhbiBNQVNNIHBy
aW50IENvZGVCbG9jayouCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAt
IE5vdyB3ZSBjYW4gZGF0YUxvZyBDb2RlQmxvY2sqIChpbmNsdWRpbmcgbnVsbCBDb2RlQmxvY2sg
cG9pbnRlcnMpLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisKKyAgICAgICAg
KiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OnRocm93RXhjZXB0aW9uKToKKyAg
ICAgICAgLSBVc2UgdGhlIG5ldyBhYmlsaXR5IHRvIGRhdGFMb2cgQ29kZUJsb2NrKi4gIE5vIG5l
ZWQgdG8gZG8gYW4gZXhwbGljaXQgbnVsbAorICAgICAgICAgIGNoZWNrIGJlZm9yZSBwcmludGlu
ZyBhbnltb3JlLgorCiAyMDE3LTA0LTIwICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlh
bmRleC5ydT4KIAogICAgICAgICBbY21ha2VdIERlZmluZSBGT1JXQVJESU5HX0hFQURFUlNfRElS
IGluIFdlYktpdEZTIGFuZCB1c2UgaXQgZXZlcnl3aGVyZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE1NjA2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5jcHAKICAgICBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcAogICAgIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAKKyAgICBhc3NlbWJsZXIvUHJpbnRlci5j
cHAKIAogICAgIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2Fu
LmNwcAogICAgIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAK
QEAgLTEwNSw2ICsxMDYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIzL2Fp
ci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCiAgICAgYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0
LmNwcAogICAgIGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAorICAgIGIzL2Fpci9BaXJQcmludFNw
ZWNpYWwuY3BwCiAgICAgYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmNwcAogICAgIGIzL2Fpci9BaXJS
ZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAogICAgIGIzL2Fpci9BaXJTaW1wbGlmeUNGRy5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTU2MDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjQ0NSw5ICsyNDQ1LDEzIEBACiAJCUZFNEQ1NUI4MUFFNzE2
Q0EwMDUyRTQ1OSAvKiBJdGVyYXRpb25TdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEQ1NUI3MUFFNzE2Q0EwMDUyRTQ1OSAvKiBJdGVyYXRp
b25TdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRTUwNjg2NTFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTUwNjg2NDFBRTI0
NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU1MDY4NjcxQUUyNUUyODAwMDlEQUI3IC8q
IERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmNwcCAqLzsgfTsKKwkJRkU1NjI4Q0QxRTk5NTEyRDAwQzQ5RTQ1IC8qIEFpclByaW50U3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTU2MjhDQjFFOTk1MTI0MDBDNDlFNDUgLyogQWlyUHJpbnRTcGVjaWFsLmNwcCAqLzsgfTsKKwkJ
RkU1NjI4Q0UxRTk5NTEzMjAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1NjI4Q0MxRTk5NTEyNDAwQzQ5
RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oICovOyB9OwogCQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVD
Q0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3Bw
ICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5MzJBNjE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU2MDI5RDkxRDZFMUU0RjAwMzAyMDREIC8qIEV4Y2Vw
dGlvbkV2ZW50TG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RkU2M0RENTQxRUE5QjYxRTAwMTAzQTY5IC8qIFByaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjNERDUzMUVBOUI2MEUwMDEwM0E2OSAvKiBQ
cmludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRkU2M0RENTYxRUE5QkM2NzAwMTAzQTY5IC8qIFByaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2M0RENTUxRUE5QkM1RDAwMTAzQTY5
IC8qIFByaW50ZXIuY3BwICovOyB9OwogCQlGRTY0OTEzNzFENzhGMDFEMDBBNjk0RDQgLyogRXhj
ZXB0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFNjQ5MTM2MUQ3OEYwMTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNjQ5MTM5MUQ3OEYz
QUYwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY0OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0
aW9uU2NvcGUuY3BwICovOyB9OwogCQlGRTY4QzYzNzFCOTBERTA0MDA0MkJDQjMgLyogTWFjcm9B
c3NlbWJsZXJQcmludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUw
NzEsOSArNTA3NSwxMyBAQAogCQlGRTRENTVCNzFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9u
U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvblN0YXR1
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUwNjg2NDFBRTI0NjM5MDAwOURB
QjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlZmVycmVkU291cmNlRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVtcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNTYyOENCMUU5OTUxMjQwMEM0OUU0NSAvKiBB
aXJQcmludFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QWlyUHJpbnRTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQcmludFNwZWNpYWwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTU2MjhDQzFFOTk1MTI0MDBDNDlFNDUgLyog
QWlyUHJpbnRTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclBy
aW50U3BlY2lhbC5oOyBwYXRoID0gYjMvYWlyL0FpclByaW50U3BlY2lhbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEEx
RUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Vk1FbnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjAyOUQ4MUQ2
RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkU2M0RENTMxRUE5QjYwRTAwMTAzQTY5IC8qIFByaW50ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRTYzREQ1NTFFQTlCQzVEMDAxMDNBNjkgLyogUHJpbnRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmludGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2NDkxMzYxRDc4RjAxMzAwQTY5NEQ0IC8qIEV4Y2Vw
dGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvblNj
b3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjQ5MTM4MUQ3OEYzQTMwMEE2
OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFeGNlcHRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFNjhDNjM1MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJQcmludGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NTIsNiArNTY2MCw4IEBACiAJ
CQkJMEYyQUM1NkQxRThEN0FGRjAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmggKi8s
CiAJCQkJMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovLAog
CQkJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8sCisJCQkJ
RkU1NjI4Q0IxRTk5NTEyNDAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5jcHAgKi8sCisJCQkJ
RkU1NjI4Q0MxRTk5NTEyNDAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oICovLAogCQkJCTBG
RjRCNEJBMUU4ODQ0OTUwMERCQkU4NiAvKiBBaXJSZWdMaXZlbmVzcy5jcHAgKi8sCiAJCQkJMEZG
NEI0QkIxRTg4NDQ5NTAwREJCRTg2IC8qIEFpclJlZ0xpdmVuZXNzLmggKi8sCiAJCQkJMEY0NTcw
M0ExQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwICovLApAQCAt
NzUyNiw2ICs3NTM2LDggQEAKIAkJCQk4NjAxNjFFMjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4NUE4RjVFMDAwMzBFRUUgLyog
TWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKIAkJCQk4NkM1NjhERjExQTIxM0VF
MDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oICovLAorCQkJCUZFNjNERDU1MUVBOUJDNUQwMDEw
M0E2OSAvKiBQcmludGVyLmNwcCAqLywKKwkJCQlGRTYzREQ1MzFFQTlCNjBFMDAxMDNBNjkgLyog
UHJpbnRlci5oICovLAogCQkJCTk2ODhDQjE0MEVEMTJCNEUwMDFENjQ5RiAvKiBYODZBc3NlbWJs
ZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gYXNzZW1ibGVyOwpAQCAtODI2NSw2ICs4Mjc3LDcg
QEAKIAkJCQkwRjZCOEFERDFDNEVGQUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjMzRkNGODFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU1NjI4Q0Ux
RTk5NTEzMjAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjIxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2ttYXBWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xs
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg1NDYsNiArODU1OSw3IEBACiAJCQkJMEYyMzVC
RUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4
aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2M0RENTQxRUE5QjYxRTAwMTAzQTY5
IC8qIFByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMw
RSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzky
QzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMTAzMTQsNiArMTAzMjgsNyBAQAogCQkJCTc5ODBDMTZDMUUz
QTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkZDQ0ZCMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFNjNERDU2MUVBOUJDNjcwMDEwM0E2OSAv
KiBQcmludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0
MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgw
RjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNjgyRkIyMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMTA1NDQsNiArMTA1NTksNyBAQAogCQkJCTE0NDBGODkyMEE1
MDhCMTAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZFNTYyOENEMUU5OTUxMkQwMEM0OUU0NSAvKiBBaXJQcmludFNw
ZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODAxQTgxODgwRDZBODAwMjZDMzlCIC8q
IEpTQ0J1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQxMTA3RUMzNzYwMDQy
N0E0OCAvKiBKU0NlbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlBQkIxN0QxRTVDQ0I1NzAw
NDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlz
aW9uIDIxNTYwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYOAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNl
IFByaW50ZXIgeworCitzdHJ1Y3QgUHJpbnRSZWNvcmQ7Cit0eXBlZGVmIFZlY3RvcjxQcmludFJl
Y29yZD4gUHJpbnRSZWNvcmRMaXN0OworCit9CisKIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVi
bGljIE1hY3JvQXNzZW1ibGVyQmFzZSB7CiBwdWJsaWM6CiAKQEAgLTE4MjAsNyArMTgyNyw5IEBA
IHB1YmxpYzoKICAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYgRU5BQkxFKE1BU01fUFJPQkUpLiBP
dGhlcndpc2UsIHByaW50KCkgaXMgYSBuby1vcC4KICAgICAvLyBTZWUgY29tbWVudHMgaW4gTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmggZm9yIGV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhpcy4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgdm9pZCBwcmludChBcmd1bWVu
dHMuLi4gYXJncyk7CisgICAgdm9pZCBwcmludChBcmd1bWVudHMmJi4uLiBhcmdzKTsKKworICAg
IHZvaWQgcHJpbnQoUHJpbnRlcjo6UHJpbnRSZWNvcmRMaXN0Kik7CiB9OwogCiAjaWYgRU5BQkxF
KE1BU01fUFJPQkUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyUHJpbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwCShyZXZpc2lvbiAyMTU2MDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUHJpbnRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI4ICszMSwyNSBAQAogI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIFByaW50ZXIgewogCiB1c2lu
ZyBDUFVTdGF0ZSA9IE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZTsKIHVzaW5nIFJlZ2lzdGVySUQg
PSBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRDsKIHVzaW5nIEZQUmVnaXN0ZXJJRCA9IE1hY3Jv
QXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ7CiAKLXN0YXRpYyB2b2lkIHByaW50SW5kZW50KGludCBp
bmRlbnRhdGlvbikKK3ZvaWQgcHJpbnRBbGxSZWdpc3RlcnMoUHJpbnRTdHJlYW0mIG91dCwgQ29u
dGV4dCYgY29udGV4dCkKIHsKLSAgICBmb3IgKDsgaW5kZW50YXRpb24gPiAwOyBpbmRlbnRhdGlv
bi0tKQotICAgICAgICBkYXRhTG9nKCIgICAgIik7Ci19CisgICAgYXV0byYgY3B1ID0gY29udGV4
dC5wcm9iZUNvbnRleHQuY3B1OworICAgIGludCBjaGFyc1RvSW5kZW50ID0gY29udGV4dC5kYXRh
LmFzPGludD4oKTsKIAotI2RlZmluZSBJTkRFTlQgcHJpbnRJbmRlbnQoaW5kZW50YXRpb24pCi0g
ICAgCi12b2lkIHByaW50Q1BVKENQVVN0YXRlJiBjcHUsIGludCBpbmRlbnRhdGlvbikKLXsKLSAg
ICBJTkRFTlQsIGRhdGFMb2coImNwdToge1xuIik7Ci0gICAgcHJpbnRDUFVSZWdpc3RlcnMoY3B1
LCBpbmRlbnRhdGlvbiArIDEpOwotICAgIElOREVOVCwgZGF0YUxvZygifVxuIik7Ci19CisgICAg
YXV0byBpbmRlbnQgPSBbJl0gKCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoYXJz
VG9JbmRlbnQ7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICIpOworICAgIH07CisjZGVm
aW5lIElOREVOVCBpbmRlbnQoKQorCisgICAgSU5ERU5ULCBvdXQucHJpbnQoImNwdToge1xuIik7
CiAKLXZvaWQgcHJpbnRDUFVSZWdpc3RlcnMoQ1BVU3RhdGUmIGNwdSwgaW50IGluZGVudGF0aW9u
KQotewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgI2RlZmluZSBJTlRQVFJfSEVYX1ZBTFVF
X0ZPUk1BVCAiMHglMDhseCIKICNlbHNlCkBAIC02MSw3ICs1OCw3IEBAIHZvaWQgcHJpbnRDUFVS
ZWdpc3RlcnMoQ1BVU3RhdGUmIGNwdSwgaW4KIAogICAgICNkZWZpbmUgUFJJTlRfR1BSRUdJU1RF
UihfdHlwZSwgX3JlZ05hbWUpIHsgXAogICAgICAgICBpbnRwdHJfdCB2YWx1ZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGNwdS5fcmVnTmFtZSk7IFwKLSAgICAgICAgSU5ERU5ULCBkYXRh
TG9nRigiJTZzOiAiIElOVFBUUl9IRVhfVkFMVUVfRk9STUFUICIgICVsZFxuIiwgI19yZWdOYW1l
LCB2YWx1ZSwgdmFsdWUpIDsgXAorICAgICAgICBJTkRFTlQsIG91dC5wcmludGYoIiAgICAlNnM6
ICIgSU5UUFRSX0hFWF9WQUxVRV9GT1JNQVQgIiAgJWxkXG4iLCAjX3JlZ05hbWUsIHZhbHVlLCB2
YWx1ZSkgOyBcCiAgICAgfQogICAgIEZPUl9FQUNIX0NQVV9HUFJFR0lTVEVSKFBSSU5UX0dQUkVH
SVNURVIpCiAgICAgRk9SX0VBQ0hfQ1BVX1NQRUNJQUxfUkVHSVNURVIoUFJJTlRfR1BSRUdJU1RF
UikKQEAgLTcxLDE0ICs2OCwxOSBAQCB2b2lkIHByaW50Q1BVUmVnaXN0ZXJzKENQVVN0YXRlJiBj
cHUsIGluCiAgICAgI2RlZmluZSBQUklOVF9GUFJFR0lTVEVSKF90eXBlLCBfcmVnTmFtZSkgeyBc
CiAgICAgICAgIHVpbnQ2NF90KiB1ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KCZjcHUu
X3JlZ05hbWUpOyBcCiAgICAgICAgIGRvdWJsZSogZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZG91Ymxl
Kj4oJmNwdS5fcmVnTmFtZSk7IFwKLSAgICAgICAgSU5ERU5ULCBkYXRhTG9nRigiJTZzOiAweCUw
MTZsbHggICUuMTNnXG4iLCAjX3JlZ05hbWUsICp1LCAqZCk7IFwKKyAgICAgICAgSU5ERU5ULCBv
dXQucHJpbnRmKCIgICAgJTZzOiAweCUwMTZsbHggICUuMTNnXG4iLCAjX3JlZ05hbWUsICp1LCAq
ZCk7IFwKICAgICB9CiAgICAgRk9SX0VBQ0hfQ1BVX0ZQUkVHSVNURVIoUFJJTlRfRlBSRUdJU1RF
UikKICAgICAjdW5kZWYgUFJJTlRfRlBSRUdJU1RFUgorCisgICAgSU5ERU5ULCBvdXQucHJpbnQo
In1cbiIpOworI3VuZGVmIElOREVOVAorCiB9CiAKLXN0YXRpYyB2b2lkIHByaW50UEMoQ1BVU3Rh
dGUmIGNwdSkKK3ZvaWQgcHJpbnRQQ1JlZ2lzdGVyKFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQm
IGNvbnRleHQpCiB7CisgICAgYXV0byBjcHUgPSBjb250ZXh0LnByb2JlQ29udGV4dC5jcHU7CiAg
ICAgdW5pb24gewogICAgICAgICB2b2lkKiB2b2lkUHRyOwogICAgICAgICBpbnRwdHJfdCBpbnRw
dHJWYWx1ZTsKQEAgLTkwLDM3ICs5Miw1NCBAQCBzdGF0aWMgdm9pZCBwcmludFBDKENQVVN0YXRl
JiBjcHUpCiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRlZCBDUFUiCiAjZW5kaWYKLSAgICBkYXRh
TG9nRigicGM6PCVwICVsZD4iLCB1LnZvaWRQdHIsIHUuaW50cHRyVmFsdWUpOworICAgIG91dC5w
cmludGYoInBjOjwlcCAlbGQ+IiwgdS52b2lkUHRyLCB1LmludHB0clZhbHVlKTsKIH0KIAotdm9p
ZCBwcmludFJlZ2lzdGVyKENQVVN0YXRlJiBjcHUsIFJlZ2lzdGVySUQgcmVnSUQpCit2b2lkIHBy
aW50UmVnaXN0ZXJJRChQcmludFN0cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQogeworICAg
IFJlZ2lzdGVySUQgcmVnSUQgPSBjb250ZXh0LmRhdGEuYXM8UmVnaXN0ZXJJRD4oKTsKICAgICBj
b25zdCBjaGFyKiBuYW1lID0gQ1BVU3RhdGU6Omdwck5hbWUocmVnSUQpOwogICAgIHVuaW9uIHsK
ICAgICAgICAgdm9pZCogdm9pZFB0cjsKICAgICAgICAgaW50cHRyX3QgaW50cHRyVmFsdWU7CiAg
ICAgfSB1OwotICAgIHUudm9pZFB0ciA9IGNwdS5ncHIocmVnSUQpOwotICAgIGRhdGFMb2dGKCIl
czo8JXAgJWxkPiIsIG5hbWUsIHUudm9pZFB0ciwgdS5pbnRwdHJWYWx1ZSk7CisgICAgdS52b2lk
UHRyID0gY29udGV4dC5wcm9iZUNvbnRleHQuZ3ByKHJlZ0lEKTsKKyAgICBvdXQucHJpbnRmKCIl
czo8JXAgJWxkPiIsIG5hbWUsIHUudm9pZFB0ciwgdS5pbnRwdHJWYWx1ZSk7CiB9CiAKLXZvaWQg
cHJpbnRSZWdpc3RlcihDUFVTdGF0ZSYgY3B1LCBGUFJlZ2lzdGVySUQgcmVnSUQpCit2b2lkIHBy
aW50RlBSZWdpc3RlcklEKFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQmIGNvbnRleHQpCiB7Cisg
ICAgRlBSZWdpc3RlcklEIHJlZ0lEID0gY29udGV4dC5kYXRhLmFzPEZQUmVnaXN0ZXJJRD4oKTsK
ICAgICBjb25zdCBjaGFyKiBuYW1lID0gQ1BVU3RhdGU6OmZwck5hbWUocmVnSUQpOwogICAgIHVu
aW9uIHsKICAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwogICAgICAgICB1aW50NjRfdCB1aW50
NjRWYWx1ZTsKICAgICB9IHU7Ci0gICAgdS5kb3VibGVWYWx1ZSA9IGNwdS5mcHIocmVnSUQpOwot
ICAgIGRhdGFMb2dGKCIlczo8MHglMDE2bGx4ICUuMTNnPiIsIG5hbWUsIHUudWludDY0VmFsdWUs
IHUuZG91YmxlVmFsdWUpOworICAgIHUuZG91YmxlVmFsdWUgPSBjb250ZXh0LnByb2JlQ29udGV4
dC5mcHIocmVnSUQpOworICAgIG91dC5wcmludGYoIiVzOjwweCUwMTZsbHggJS4xM2c+IiwgbmFt
ZSwgdS51aW50NjRWYWx1ZSwgdS5kb3VibGVWYWx1ZSk7Cit9CisKK3ZvaWQgcHJpbnRBZGRyZXNz
KFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQmIGNvbnRleHQpCit7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MgYWRkcmVzcyA9IGNvbnRleHQuZGF0YS5hczxNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcz4oKTsKKyAgICBSZWdpc3RlcklEIHJlZ0lEID0gYWRkcmVzcy5iYXNlOworICAgIGNvbnN0
IGNoYXIqIG5hbWUgPSBDUFVTdGF0ZTo6Z3ByTmFtZShyZWdJRCk7CisgICAgdW5pb24geworICAg
ICAgICB2b2lkKiB2b2lkUHRyOworICAgICAgICBpbnRwdHJfdCBpbnRwdHJWYWx1ZTsKKyAgICB9
IHU7CisgICAgdS52b2lkUHRyID0gY29udGV4dC5wcm9iZUNvbnRleHQuZ3ByKHJlZ0lEKTsKKyAg
ICBvdXQucHJpbnRmKCJBZGRyZXNze2Jhc2U6JXM6PCVwICVsZD4sIG9mZnNldDo8MHgleCAlZD4i
LCBuYW1lLCB1LnZvaWRQdHIsIHUuaW50cHRyVmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
Lm9mZnNldCk7CiB9CiAKLXZvaWQgcHJpbnRNZW1vcnkoQ1BVU3RhdGUmIGNwdSwgY29uc3QgTWVt
b3J5JiBtZW1vcnkpCit2b2lkIHByaW50TWVtb3J5KFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQm
IGNvbnRleHQpCiB7CisgICAgY29uc3QgTWVtb3J5JiBtZW1vcnkgPSBjb250ZXh0LmRhdGEuYXM8
TWVtb3J5PigpOworCiAgICAgdWludDhfdCogcHRyID0gbnVsbHB0cjsKICAgICBzd2l0Y2ggKG1l
bW9yeS5hZGRyZXNzVHlwZSkgewogICAgIGNhc2UgTWVtb3J5OjpBZGRyZXNzVHlwZTo6QWRkcmVz
czogewotICAgICAgICBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjcHUuZ3ByKG1l
bW9yeS51LmFkZHJlc3MuYmFzZSkpOworICAgICAgICBwdHIgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihjb250ZXh0LnByb2JlQ29udGV4dC5ncHIobWVtb3J5LnUuYWRkcmVzcy5iYXNlKSk7
CiAgICAgICAgIHB0ciArPSBtZW1vcnkudS5hZGRyZXNzLm9mZnNldDsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMTMzLDIyICsxNTIsMjIgQEAgdm9pZCBwcmludE1lbW9yeShDUFVTdGF0ZSYg
Y3B1LCBjb25zdCBNZQogICAgIGlmIChtZW1vcnkuZHVtcFN0eWxlID09IE1lbW9yeTo6U2luZ2xl
V29yZER1bXApIHsKICAgICAgICAgaWYgKG1lbW9yeS5udW1CeXRlcyA9PSBzaXplb2YoaW50OF90
KSkgewogICAgICAgICAgICAgYXV0byBwID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihwdHIp
OwotICAgICAgICAgICAgZGF0YUxvZ0YoIiVwOjwweCUwMnggJWQ+IiwgcCwgKnAsICpwKTsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiVwOjwweCUwMnggJWQ+IiwgcCwgKnAsICpwKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAobWVtb3J5Lm51bUJ5dGVzID09
IHNpemVvZihpbnQxNl90KSkgewogICAgICAgICAgICAgYXV0byBwID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnQxNl90Kj4ocHRyKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIlcDo8MHglMDR4ICVkPiIs
IHAsICpwLCAqcCk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcDo8MHglMDR4ICVkPiIsIHAs
ICpwLCAqcCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1l
bW9yeS5udW1CeXRlcyA9PSBzaXplb2YoaW50MzJfdCkpIHsKICAgICAgICAgICAgIGF1dG8gcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHB0cik7Ci0gICAgICAgICAgICBkYXRhTG9nRigi
JXA6PDB4JTA4eCAlZD4iLCBwLCAqcCwgKnApOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXA6
PDB4JTA4eCAlZD4iLCBwLCAqcCwgKnApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIGlmIChtZW1vcnkubnVtQnl0ZXMgPT0gc2l6ZW9mKGludDY0X3QpKSB7CiAgICAg
ICAgICAgICBhdXRvIHAgPSByZWludGVycHJldF9jYXN0PGludDY0X3QqPihwdHIpOwotICAgICAg
ICAgICAgZGF0YUxvZ0YoIiVwOjwweCUwMTZsbHggJWxsZD4iLCBwLCAqcCwgKnApOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXA6PDB4JTAxNmxseCAlbGxkPiIsIHAsICpwLCAqcCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRWxzZSwgdW5rbm93biB3b3Jk
IHNpemUuIEZhbGwgdGhydSBhbmQgZHVtcCBpbiB0aGUgZ2VuZXJpYyB3YXkuCkBAIC0xNTgsNTgg
KzE3NywzMSBAQCB2b2lkIHByaW50TWVtb3J5KENQVVN0YXRlJiBjcHUsIGNvbnN0IE1lCiAgICAg
c2l6ZV90IG51bUJ5dGVzID0gbWVtb3J5Lm51bUJ5dGVzOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtQnl0ZXM7IGkrKykgewogICAgICAgICBpZiAoIShpICUgMTYpKQotICAgICAgICAg
ICAgZGF0YUxvZ0YoIiVwOiAiLCAmcHRyW2ldKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVw
OiAiLCAmcHRyW2ldKTsKICAgICAgICAgZWxzZSBpZiAoIShpICUgNCkpCi0gICAgICAgICAgICBk
YXRhTG9nKCIgIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIgIik7CiAKLSAgICAgICAgZGF0
YUxvZ0YoIiUwMngiLCBwdHJbaV0pOworICAgICAgICBvdXQucHJpbnRmKCIlMDJ4IiwgcHRyW2ld
KTsKIAogICAgICAgICBpZiAoaSAlIDE2ID09IDE1KQotICAgICAgICAgICAgZGF0YUxvZygiXG4i
KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9CiAgICAgaWYgKG51bUJ5dGVz
ICUgMTYgPCAxNSkKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KCJc
biIpOwogfQogCi12b2lkIE1hY3JvQXNzZW1ibGVyUHJpbnRlcjo6cHJpbnRDYWxsYmFjayhQcm9i
ZUNvbnRleHQqIGNvbnRleHQpCit2b2lkIHByaW50Q2FsbGJhY2soUHJvYmVDb250ZXh0KiBwcm9i
ZUNvbnRleHQpCiB7Ci0gICAgdHlwZWRlZiBQcmludEFyZyBBcmc7Ci0gICAgUHJpbnRBcmdzTGlz
dCYgYXJnc0xpc3QgPQotICAgICpyZWludGVycHJldF9jYXN0PFByaW50QXJnc0xpc3QqPihjb250
ZXh0LT5hcmcpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnc0xpc3Quc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgYXV0byYgYXJnID0gYXJnc0xpc3RbaV07Ci0gICAgICAgIHN3aXRjaCAo
YXJnLnR5cGUpIHsKLSAgICAgICAgY2FzZSBBcmc6OlR5cGU6OkFsbFJlZ2lzdGVyczoKLSAgICAg
ICAgICAgIHByaW50Q1BVKGNvbnRleHQtPmNwdSwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcmc6OlR5cGU6OlBDUmVnaXN0ZXI6Ci0gICAgICAgICAgICBwcmludFBDKGNv
bnRleHQtPmNwdSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcmc6OlR5cGU6
OlJlZ2lzdGVySUQ6Ci0gICAgICAgICAgICBwcmludFJlZ2lzdGVyKGNvbnRleHQtPmNwdSwgYXJn
LnUuZ3BSZWdpc3RlcklEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyZzo6
VHlwZTo6RlBSZWdpc3RlcklEOgotICAgICAgICAgICAgcHJpbnRSZWdpc3Rlcihjb250ZXh0LT5j
cHUsIGFyZy51LmZwUmVnaXN0ZXJJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcmc6OlR5cGU6Ok1lbW9yeToKLSAgICAgICAgICAgIHByaW50TWVtb3J5KGNvbnRleHQtPmNw
dSwgYXJnLnUubWVtb3J5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyZzo6
VHlwZTo6Q29uc3RDaGFyUHRyOgotICAgICAgICAgICAgZGF0YUxvZyhhcmcudS5jb25zdENoYXJQ
dHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJnOjpUeXBlOjpDb25zdFZv
aWRQdHI6Ci0gICAgICAgICAgICBkYXRhTG9nRigiJXAiLCBhcmcudS5jb25zdFZvaWRQdHIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJnOjpUeXBlOjpJbnRwdHJWYWx1ZToK
LSAgICAgICAgICAgIGRhdGFMb2coYXJnLnUuaW50cHRyVmFsdWUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJnOjpUeXBlOjpVaW50cHRyVmFsdWU6Ci0gICAgICAgICAgICBk
YXRhTG9nKGFyZy51LnVpbnRwdHJWYWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQorICAgIGF1dG8mIG91dCA9IFdURjo6ZGF0YUZpbGUoKTsKKyAgICBQcmludFJlY29yZExpc3Qm
IGxpc3QgPSAqcmVpbnRlcnByZXRfY2FzdDxQcmludFJlY29yZExpc3QqPihwcm9iZUNvbnRleHQt
PmFyZyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIGF1dG8mIHJlY29yZCA9IGxpc3RbaV07CisgICAgICAgIENvbnRleHQgY29udGV4dCgq
cHJvYmVDb250ZXh0LCByZWNvcmQuZGF0YSk7CisgICAgICAgIHJlY29yZC5wcmludGVyKG91dCwg
Y29udGV4dCk7CiAgICAgfQogfQogCit9IC8vIG5hbWVzcGFjZSBQcmludGVyCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShNQVNNX1BST0JFKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUHJpbnRl
ci5oCShyZXZpc2lvbiAyMTU2MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyUHJpbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAi
UHJpbnRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTQsMTkgKzU1LDIwIEBAIG5hbWVz
cGFjZSBKU0MgewogLy8gICAgICBqaXQucHJpbnQoIkhlbGxvIHdvcmxkXG4iKTsgLy8gRW1pdHMg
Y29kZSB0byBwcmludCB0aGUgc3RyaW5nLgogLy8KIC8vICAgICAgQ29kZUJsb2NrKiBjYiA9IC4u
LjsKLS8vICAgICAgaml0LnByaW50KGNiLCAiXG4iKTsgICAgICAgIC8vIEVtaXRzIGNvZGUgdG8g
cHJpbnQgdGhlIHBvaW50ZXIgdmFsdWUuCisvLyAgICAgIGppdC5wcmludChjYiwgIlxuIik7ICAg
ICAgICAgICAgIC8vIEVtaXRzIGNvZGUgdG8gcHJpbnQgdGhlIGNvZGVCbG9jayB2YWx1ZS4KKy8v
ICAgICAgaml0LnByaW50KFJhd1BvaW50ZXIoY2IpLCAiXG4iKTsgLy8gRW1pdHMgY29kZSB0byBw
cmludCB0aGUgcG9pbnRlciB2YWx1ZS4KIC8vCiAvLyAgICAgIFJlZ2lzdGVySUQgcmVnSUQgPSAu
Li47CiAvLyAgICAgIGppdC5wcmludChyZWdJRCwgIlxuIik7ICAgICAvLyBFbWl0cyBjb2RlIHRv
IHByaW50IHRoZSByZWdpc3RlciB2YWx1ZSAobm90IHRoZSBpZCkuCiAvLwogLy8gICAgICAvLyBF
bWl0cyBjb2RlIHRvIHByaW50IGFsbCByZWdpc3RlcnMuIFVubGlrZSBvdGhlciBpdGVtcywgdGhp
cyBwcmludHMKIC8vICAgICAgLy8gbXVsdGlwbGUgbGluZXMgYXMgZm9sbG93czoKLS8vICAgICAg
Ly8gICAgICBjcHUgewotLy8gICAgICAvLyAgICAgICAgICBlYXg6IDB4MTIzNDU2Nzg5Ci0vLyAg
ICAgIC8vICAgICAgICAgIGVieDogMHgwMDAwMDBhYmMKLS8vICAgICAgLy8gICAgICAgICAgLi4u
Ci0vLyAgICAgIC8vICAgICAgfQotLy8gICAgICBqaXQucHJpbnQoQWxsUmVnaXN0ZXJzKCkpOwor
Ly8gICAgICAvLyAgICAgY3B1IHsKKy8vICAgICAgLy8gICAgICAgICBlYXg6IDB4MTIzNDU2Nzg5
CisvLyAgICAgIC8vICAgICAgICAgZWJ4OiAweDAwMDAwMGFiYworLy8gICAgICAvLyAgICAgICAg
IC4uLgorLy8gICAgICAvLyAgICAgfQorLy8gICAgICBqaXQucHJpbnQoQWxsUmVnaXN0ZXJzKDQp
KTsgLy8gVGhlIDQgaGVyZSBpcyBmb3IgYW4gaW5kZW50YXRpb24gb2YgNCBjaGFyYWN0ZXJzLgog
Ly8KIC8vICAgICAgaml0LnByaW50KE1lbVdvcmQ8dWludDhfdD4ocmVnSUQpLCAiXG4iKTsgICAv
LyBFbWl0cyBjb2RlIHRvIHByaW50IGEgYnl0ZSBwb2ludGVkIHRvIGJ5IHRoZSByZWdpc3Rlci4K
IC8vICAgICAgaml0LnByaW50KE1lbVdvcmQ8dWludDMyX3Q+KHJlZ0lEKSwgIlxuIik7ICAvLyBF
bWl0cyBjb2RlIHRvIHByaW50IGEgMzItYml0IHdvcmQgcG9pbnRlZCB0byBieSB0aGUgcmVnaXN0
ZXIuCkBAIC04MSwxNSArODMsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyAgICAgIC8vIHRvIHBy
aW50IGFsbCB0aGUgaXRlbXMuCiAvLyAgICAgIGppdC5wcmludCgiY2I6IiwgY2IsICIgcmVnSUQ6
IiwgcmVnSUQsICIgY3B1OlxuIiwgQWxsUmVnaXN0ZXJzKCkpOwogLy8KLS8vICAgVGhlIHR5cGUg
b2YgdmFsdWVzIHRoYXQgY2FuIGJlIHByaW50ZWQgaXMgZW5jYXBzdWxhdGVkIGluIHRoZSBQcmlu
dEFyZyBzdHJ1Y3QgYmVsb3cuCisvLyAgIFRoZSB0eXBlIG9mIHZhbHVlcyB0aGF0IGNhbiBiZSBw
cmludGVkIGlzIGRldGVybWluZSBieSB0aGUgYXZhaWxhYmlsaXR5IG9mIGEKKy8vICAgc3BlY2lh
bGl6ZWQgUHJpbnRlciB0ZW1wbGF0ZSwgb3IgYSBzZXRQcmludGVyKCkgZnVuY3Rpb24gZm9yIHRo
ZSB2YWx1ZSB0eXBlLgogLy8KIC8vICAgTm90ZTogcHJpbnQoKSBkb2VzIG5vdCBhdXRvbWF0aWNh
bGx5IGluc2VydCBhICdcbicgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KIC8vICAgSWYgeW91IHdh
bnQgYSAnXG4nLCB5b3UnbGwgaGF2ZSB0byBhZGQgaXQgZXhwbGljaXRseSAoYXMgaW4gdGhlIGV4
YW1wbGVzIGFib3ZlKS4KIAogCi0vLyBUaGlzIGlzIGEgbWFya2VyIHR5cGUgb25seSB1c2VkIHdp
dGggTWFjcm9Bc3NlbWJsZXJQcmludGVyOjpwcmludCgpLgotLy8gU2VlIE1hY3JvQXNzZW1ibGVy
UHJpbnRlcjo6cHJpbnQoKSBiZWxvdyBmb3IgZGV0YWlscy4KLXN0cnVjdCBBbGxSZWdpc3RlcnMg
eyB9Oworc3RydWN0IEFsbFJlZ2lzdGVycyB7CisgICAgQWxsUmVnaXN0ZXJzKGludCBjaGFyc1Rv
SW5kZW50ID0gMCkKKyAgICAgICAgOiBjaGFyc1RvSW5kZW50KGNoYXJzVG9JbmRlbnQpCisgICAg
eyB9CisgICAgaW50IGNoYXJzVG9JbmRlbnQ7Cit9Owogc3RydWN0IFBDUmVnaXN0ZXIgeyB9Owog
CiBzdHJ1Y3QgTWVtb3J5IHsKQEAgLTE1NywxNTEgKzE2Myw4OCBAQCBzdHJ1Y3QgTWVtV29yZCA6
IHB1YmxpYyBNZW1vcnkgewogICAgIHsgfQogfTsKIAorbmFtZXNwYWNlIFByaW50ZXIgewogCi1j
bGFzcyBNYWNyb0Fzc2VtYmxlclByaW50ZXIgewotICAgIHVzaW5nIENQVVN0YXRlID0gTWFjcm9B
c3NlbWJsZXI6OkNQVVN0YXRlOwotICAgIHVzaW5nIFJlZ2lzdGVySUQgPSBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRDsKLSAgICB1c2luZyBGUFJlZ2lzdGVySUQgPSBNYWNyb0Fzc2VtYmxlcjo6
RlBSZWdpc3RlcklEOwotICAgIAotcHVibGljOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KLSAgICBzdGF0aWMgdm9pZCBwcmludChNYWNyb0Fzc2VtYmxlciogbWFzbSwgQXJn
dW1lbnRzLi4uIGFyZ3MpCi0gICAgewotICAgICAgICBhdXRvIGFyZ3NMaXN0ID0gc3RkOjptYWtl
X3VuaXF1ZTxQcmludEFyZ3NMaXN0PigpOwotICAgICAgICBhcHBlbmRQcmludEFyZyhhcmdzTGlz
dC5nZXQoKSwgYXJncy4uLik7Ci0gICAgICAgIG1hc20tPnByb2JlKHByaW50Q2FsbGJhY2ssIGFy
Z3NMaXN0LnJlbGVhc2UoKSk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgUHJp
bnRBcmcgeworLy8gQWRkIHNvbWUgc3BlY2lhbGl6ZWQgcHJpbnRlcnMuCiAKLSAgICAgICAgZW51
bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgICAgIEFsbFJlZ2lzdGVycywKLSAgICAgICAgICAgIFBD
UmVnaXN0ZXIsCi0gICAgICAgICAgICBSZWdpc3RlcklELAotICAgICAgICAgICAgRlBSZWdpc3Rl
cklELAotICAgICAgICAgICAgTWVtb3J5LAotICAgICAgICAgICAgQ29uc3RDaGFyUHRyLAotICAg
ICAgICAgICAgQ29uc3RWb2lkUHRyLAotICAgICAgICAgICAgSW50cHRyVmFsdWUsCi0gICAgICAg
ICAgICBVaW50cHRyVmFsdWUsCi0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBQcmludEFy
ZyhBbGxSZWdpc3RlcnMmKQotICAgICAgICAgICAgOiB0eXBlKFR5cGU6OkFsbFJlZ2lzdGVycykK
LSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBQcmludEFyZyhQQ1JlZ2lz
dGVyJikKLSAgICAgICAgICAgIDogdHlwZShUeXBlOjpQQ1JlZ2lzdGVyKQotICAgICAgICB7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFByaW50QXJnKFJlZ2lzdGVySUQgcmVnSUQpCi0g
ICAgICAgICAgICA6IHR5cGUoVHlwZTo6UmVnaXN0ZXJJRCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdS5ncFJlZ2lzdGVySUQgPSByZWdJRDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
UHJpbnRBcmcoRlBSZWdpc3RlcklEIHJlZ0lEKQotICAgICAgICAgICAgOiB0eXBlKFR5cGU6OkZQ
UmVnaXN0ZXJJRCkKLSAgICAgICAgewotICAgICAgICAgICAgdS5mcFJlZ2lzdGVySUQgPSByZWdJ
RDsKLSAgICAgICAgfQotCi0gICAgICAgIFByaW50QXJnKGNvbnN0IE1lbW9yeSYgbWVtb3J5KQot
ICAgICAgICAgICAgOiB0eXBlKFR5cGU6Ok1lbW9yeSkKLSAgICAgICAgewotICAgICAgICAgICAg
dS5tZW1vcnkgPSBtZW1vcnk7Ci0gICAgICAgIH0KLQotICAgICAgICBQcmludEFyZyhjb25zdCBj
aGFyKiBwdHIpCi0gICAgICAgICAgICA6IHR5cGUoVHlwZTo6Q29uc3RDaGFyUHRyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB1LmNvbnN0Q2hhclB0ciA9IHB0cjsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgUHJpbnRBcmcoY29uc3Qgdm9pZCogcHRyKQotICAgICAgICAgICAgOiB0eXBl
KFR5cGU6OkNvbnN0Vm9pZFB0cikKLSAgICAgICAgewotICAgICAgICAgICAgdS5jb25zdFZvaWRQ
dHIgPSBwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFByaW50QXJnKGludCB2YWx1
ZSkKLSAgICAgICAgICAgIDogdHlwZShUeXBlOjpJbnRwdHJWYWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgdS5pbnRwdHJWYWx1ZSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBQcmludEFyZyh1bnNpZ25lZCB2YWx1ZSkKLSAgICAgICAgICAgIDogdHlwZShUeXBlOjpV
aW50cHRyVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHUuaW50cHRyVmFsdWUgPSB2YWx1
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUHJpbnRBcmcoaW50cHRyX3QgdmFsdWUp
Ci0gICAgICAgICAgICA6IHR5cGUoVHlwZTo6SW50cHRyVmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHUuaW50cHRyVmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgUHJpbnRBcmcodWludHB0cl90IHZhbHVlKQotICAgICAgICAgICAgOiB0eXBlKFR5cGU6OlVp
bnRwdHJWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdS51aW50cHRyVmFsdWUgPSB2YWx1
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVHlwZSB0eXBlOwotICAgICAgICB1bmlv
biBWYWx1ZSB7Ci0gICAgICAgICAgICBWYWx1ZSgpIHsgfQotCi0gICAgICAgICAgICBSZWdpc3Rl
cklEIGdwUmVnaXN0ZXJJRDsKLSAgICAgICAgICAgIEZQUmVnaXN0ZXJJRCBmcFJlZ2lzdGVySUQ7
Ci0gICAgICAgICAgICBNZW1vcnkgbWVtb3J5OwotICAgICAgICAgICAgY29uc3QgY2hhciogY29u
c3RDaGFyUHRyOwotICAgICAgICAgICAgY29uc3Qgdm9pZCogY29uc3RWb2lkUHRyOwotICAgICAg
ICAgICAgaW50cHRyX3QgaW50cHRyVmFsdWU7Ci0gICAgICAgICAgICB1aW50cHRyX3QgdWludHB0
clZhbHVlOwotICAgICAgICB9IHU7Ci0gICAgfTsKK3ZvaWQgcHJpbnRBbGxSZWdpc3RlcnMoUHJp
bnRTdHJlYW0mLCBDb250ZXh0Jik7Cit2b2lkIHByaW50UENSZWdpc3RlcihQcmludFN0cmVhbSYs
IENvbnRleHQmKTsKK3ZvaWQgcHJpbnRSZWdpc3RlcklEKFByaW50U3RyZWFtJiwgQ29udGV4dCYp
Owordm9pZCBwcmludEZQUmVnaXN0ZXJJRChQcmludFN0cmVhbSYsIENvbnRleHQmKTsKK3ZvaWQg
cHJpbnRBZGRyZXNzKFByaW50U3RyZWFtJiwgQ29udGV4dCYpOwordm9pZCBwcmludE1lbW9yeShQ
cmludFN0cmVhbSYsIENvbnRleHQmKTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8QWxs
UmVnaXN0ZXJzPiA6IHB1YmxpYyBQcmludFJlY29yZCB7CisgICAgUHJpbnRlcihBbGxSZWdpc3Rl
cnMgYWxsUmVnaXN0ZXJzKQorICAgICAgICA6IFByaW50UmVjb3JkKHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oYWxsUmVnaXN0ZXJzLmNoYXJzVG9JbmRlbnQpLCBwcmludEFsbFJlZ2lzdGVycykKKyAg
ICB7IH0KK307CiAKLSAgICB0eXBlZGVmIFZlY3RvcjxQcmludEFyZz4gUHJpbnRBcmdzTGlzdDsK
LSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdEFyZywgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgotICAgIHN0YXRpYyB2b2lkIGFwcGVuZFByaW50QXJnKFByaW50QXJnc0xpc3QqIGFyZ3NM
aXN0LCBGaXJzdEFyZyYgZmlyc3RBcmcsIEFyZ3VtZW50cy4uLiBvdGhlckFyZ3MpCi0gICAgewot
ICAgICAgICBhcmdzTGlzdC0+YXBwZW5kKFByaW50QXJnKGZpcnN0QXJnKSk7Ci0gICAgICAgIGFw
cGVuZFByaW50QXJnKGFyZ3NMaXN0LCBvdGhlckFyZ3MuLi4pOwotICAgIH0KLSAgICAKLSAgICBz
dGF0aWMgdm9pZCBhcHBlbmRQcmludEFyZyhQcmludEFyZ3NMaXN0KikgeyB9Cit0ZW1wbGF0ZTw+
CitzdHJ1Y3QgUHJpbnRlcjxQQ1JlZ2lzdGVyPiA6IHB1YmxpYyBQcmludFJlY29yZCB7CisgICAg
UHJpbnRlcihQQ1JlZ2lzdGVyJikKKyAgICAgICAgOiBQcmludFJlY29yZChwcmludFBDUmVnaXN0
ZXIpCisgICAgeyB9Cit9OwogCi1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHByaW50Q2FsbGJh
Y2soUHJvYmVDb250ZXh0Kik7Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgUHJpbnRlcjxNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRD4gOiBwdWJsaWMgUHJpbnRSZWNvcmQgeworICAgIFByaW50ZXIoTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaWQpCisgICAgICAgIDogUHJpbnRSZWNvcmQoc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihpZCksIHByaW50UmVnaXN0ZXJJRCkKKyAgICB7IH0KIH07CiAKK3Rl
bXBsYXRlPD4KK3N0cnVjdCBQcmludGVyPE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+IDog
cHVibGljIFByaW50UmVjb3JkIHsKKyAgICBQcmludGVyKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lz
dGVySUQgaWQpCisgICAgICAgIDogUHJpbnRSZWNvcmQoc3RhdGljX2Nhc3Q8dWludHB0cl90Pihp
ZCksIHByaW50RlBSZWdpc3RlcklEKQorICAgIHsgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0
IFByaW50ZXI8TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3M+IDogcHVibGljIFByaW50UmVjb3JkIHsK
KyAgICBQcmludGVyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MpCisgICAgICAgIDog
UHJpbnRSZWNvcmQoRGF0YSgmYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpKSwgcHJpbnRBZGRyZXNz
KQorICAgIHsgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8TWVtb3J5PiA6IHB1
YmxpYyBQcmludFJlY29yZCB7CisgICAgUHJpbnRlcihNZW1vcnkgbWVtb3J5KQorICAgICAgICA6
IFByaW50UmVjb3JkKERhdGEoJm1lbW9yeSwgc2l6ZW9mKG1lbW9yeSkpLCBwcmludE1lbW9yeSkK
KyAgICB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+CitzdHJ1Y3QgUHJpbnRl
cjxNZW1Xb3JkPEludFR5cGU+PiA6IHB1YmxpYyBQcmludGVyPE1lbW9yeT4geworICAgIFByaW50
ZXIoTWVtV29yZDxJbnRUeXBlPiB3b3JkKQorICAgICAgICA6IFByaW50ZXI8TWVtb3J5Pih3b3Jk
KQorICAgIHsgfQorfTsKKwordm9pZCBwcmludENhbGxiYWNrKFByb2JlQ29udGV4dCopOworCit9
IC8vIG5hbWVzcGFjZSBQcmludGVyCisKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
LXZvaWQgTWFjcm9Bc3NlbWJsZXI6OnByaW50KEFyZ3VtZW50cy4uLiBhcmdzKQoraW5saW5lIHZv
aWQgTWFjcm9Bc3NlbWJsZXI6OnByaW50KEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKIHsKLSAg
ICBNYWNyb0Fzc2VtYmxlclByaW50ZXI6OnByaW50KHRoaXMsIGFyZ3MuLi4pOworICAgIGF1dG8g
cHJpbnRSZWNvcmRMaXN0ID0gUHJpbnRlcjo6bWFrZVByaW50UmVjb3JkTGlzdChzdGQ6OmZvcndh
cmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICBwcm9iZShQcmludGVyOjpwcmludENh
bGxiYWNrLCBwcmludFJlY29yZExpc3QpOwogfQogCi0KLS8vIFRoZXNlIHByaW50ZXJzIHdpbGwg
cHJpbnQgYSBibG9jayBvZiBpbmZvcm1hdGlvbi4gVGhhdCBibG9jayBtYXkgYmUKLS8vIGluZGVu
dGVkIHdpdGggdGhlIHNwZWNpZmllZCBpbmRlbnRhdGlvbi4KLXZvaWQgcHJpbnRDUFUoTWFjcm9B
c3NlbWJsZXI6OkNQVVN0YXRlJiwgaW50IGluZGVudGF0aW9uID0gMCk7Ci12b2lkIHByaW50Q1BV
UmVnaXN0ZXJzKE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZSYsIGludCBpbmRlbnRhdGlvbiA9IDAp
OwotCi0vLyBUaGVzZSBwcmludGVycyB3aWxsIHByaW50IHRoZSBzcGVjaWZpZWQgaW5mb3JtYXRp
b24gaW4gbGluZSBpbiB0aGUKLS8vIHByaW50IHN0cmVhbS4gSGVuY2UsIG5vIGluZGVudGF0aW9u
IHdpbGwgYmUgYXBwbGllZC4KLXZvaWQgcHJpbnRSZWdpc3RlcihNYWNyb0Fzc2VtYmxlcjo6Q1BV
U3RhdGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCk7Ci12b2lkIHByaW50UmVnaXN0ZXIo
TWFjcm9Bc3NlbWJsZXI6OkNQVVN0YXRlJiwgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCk7
Ci12b2lkIHByaW50TWVtb3J5KE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZSYsIGNvbnN0IE1lbW9y
eSYpOworaW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OnByaW50KFByaW50ZXI6OlByaW50UmVj
b3JkTGlzdCogcHJpbnRSZWNvcmRMaXN0KQoreworICAgIHByb2JlKFByaW50ZXI6OnByaW50Q2Fs
bGJhY2ssIHByaW50UmVjb3JkTGlzdCk7Cit9CiAKICNlbHNlIC8vIEVOQUJMRShNQVNNX1BST0JF
KQogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci12b2lkIE1hY3JvQXNzZW1ibGVy
OjpwcmludChBcmd1bWVudHMuLi4pIHsgfQoraW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBy
aW50KEFyZ3VtZW50cyYmLi4uKSB7IH0KKworaW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBy
aW50KFByaW50ZXI6OlByaW50UmVjb3JkTGlzdCopIHsgfQogCiAjZW5kaWYgLy8gRU5BQkxFKE1B
U01fUFJPQkUpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcmlu
dGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1ByaW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUHJpbnRlci5oIgorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBQcmludGVy
IHsKKwordm9pZCBwcmludENvbnN0Q2hhclN0cmluZyhQcmludFN0cmVhbSYgb3V0LCBDb250ZXh0
JiBjb250ZXh0KQoreworICAgIGNvbnN0IGNoYXIqIHN0ciA9IGNvbnRleHQuZGF0YS5hczxjb25z
dCBjaGFyKj4oKTsKKyAgICBvdXQucHJpbnQoc3RyKTsKK30KKwordm9pZCBwcmludEludHB0cihQ
cmludFN0cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQoreworICAgIG91dC5wcmludChjb250
ZXh0LmRhdGEuYXM8aW50cHRyX3Q+KCkpOworfQorCit2b2lkIHByaW50VWludHB0cihQcmludFN0
cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQoreworICAgIG91dC5wcmludChjb250ZXh0LmRh
dGEuYXM8dWludHB0cl90PigpKTsKK30KKwordm9pZCBwcmludFBvaW50ZXIoUHJpbnRTdHJlYW0m
IG91dCwgQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihjb250
ZXh0LmRhdGEuYXM8Y29uc3Qgdm9pZCo+KCkpKTsKK30KKwordm9pZCBzZXRQcmludGVyKFByaW50
UmVjb3JkJiByZWNvcmQsIENTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgLy8gRklYTUU6IEl0IHdv
dWxkIGJlIG5pY2UgaWYgd2UgY2FuIHJlbGVhc2UgdGhlIENTdHJpbmdCdWZmZXIgZnJvbSB0aGUg
Q1N0cmluZworICAgIC8vIGFuZCB0YWtlIG93bmVyc2hpcCBvZiBpdCBoZXJlIGluc3RlYWQgb2Yg
Y29weWluZyBpdCBhZ2Fpbi4KKyAgICByZWNvcmQuZGF0YS5wb2ludGVyID0gZmFzdFN0ckR1cChz
dHJpbmcuZGF0YSgpKTsKKyAgICByZWNvcmQucHJpbnRlciA9IHByaW50Q29uc3RDaGFyU3RyaW5n
OworfQorCit9IC8vIG5hbWVzcGFjZSBQcmludGVyCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRlci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgUHJvYmVDb250ZXh0OworCituYW1lc3Bh
Y2UgUHJpbnRlciB7CisKK3N0cnVjdCBDb250ZXh0OworCit1bmlvbiBEYXRhIHsKKyAgICBEYXRh
KCkgeyB9CisgICAgRGF0YSh1aW50cHRyX3QgdmFsdWUpCisgICAgICAgIDogdmFsdWUodmFsdWUp
CisgICAgeyB9CisgICAgRGF0YShjb25zdCB2b2lkKiBwb2ludGVyKQorICAgICAgICA6IHBvaW50
ZXIocG9pbnRlcikKKyAgICB7IH0KKyAgICBEYXRhKHZvaWQqIHNyYywgc2l6ZV90IHNpemUpCisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplIDw9IHNpemVvZihidWZmZXIpKTsKKyAg
ICAgICAgbWVtY3B5KGJ1ZmZlciwgc3JjLCBzaXplKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50
ZWdyYWw8VD46OnZhbHVlPjo6dHlwZT4KKyAgICBUIGFzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3BvaW50
ZXI8VD46OnZhbHVlPjo6dHlwZT4KKyAgICBjb25zdCBUIGFzKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQ+KHBvaW50ZXIpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8IXN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlICYmICFzdGQ6OmlzX3BvaW50ZXI8VD46OnZh
bHVlPjo6dHlwZT4KKyAgICBjb25zdCBUJiBhcygpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihUKSA8PSBzaXplb2YoYnVmZmVyKSwgInNpemUgaXMgbm90IHNhbmUi
KTsKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IFQqPigmYnVmZmVyKTsK
KyAgICB9CisKKyAgICB1aW50cHRyX3QgdmFsdWU7CisgICAgY29uc3Qgdm9pZCogcG9pbnRlcjsK
KyAgICB1aW50cHRyX3QgYnVmZmVyWzRdOworfTsKKworc3RydWN0IENvbnRleHQgeworICAgIENv
bnRleHQoUHJvYmVDb250ZXh0JiBwcm9iZUNvbnRleHQsIERhdGEmIGRhdGEpCisgICAgICAgIDog
cHJvYmVDb250ZXh0KHByb2JlQ29udGV4dCkKKyAgICAgICAgLCBkYXRhKGRhdGEpCisgICAgeyB9
CisKKyAgICBQcm9iZUNvbnRleHQmIHByb2JlQ29udGV4dDsKKyAgICBEYXRhJiBkYXRhOworfTsK
KwordHlwZWRlZiB2b2lkICgqQ2FsbGJhY2spKFByaW50U3RyZWFtJiwgQ29udGV4dCYpOworCitz
dHJ1Y3QgUHJpbnRSZWNvcmQgeworICAgIFByaW50UmVjb3JkKERhdGEgZGF0YSwgQ2FsbGJhY2sg
cHJpbnRlcikKKyAgICAgICAgOiBkYXRhKGRhdGEpCisgICAgICAgICwgcHJpbnRlcihwcmludGVy
KQorICAgIHsgfQorCisgICAgUHJpbnRSZWNvcmQoQ2FsbGJhY2sgcHJpbnRlcikKKyAgICAgICAg
OiBwcmludGVyKHByaW50ZXIpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFz
cz4gY2xhc3MgUHJpbnRlciwgdHlwZW5hbWUgVD4KKyAgICBQcmludFJlY29yZChjb25zdCBQcmlu
dGVyPFQ+JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mPFByaW50UmVjb3JkLCBQcmludGVyPFQ+Pjo6dmFsdWUsICJQcmludGVyIHNob3VsZCBleHRl
bmQgUHJpbnRSZWNvcmQiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoUHJpbnRSZWNv
cmQpID09IHNpemVvZihQcmludGVyPFQ+KSwgIlByaW50ZXIgc2hvdWxkIGJlIHRoZSBzYW1lIHNp
emUgYXMgUHJpbnRSZWNvcmQiKTsKKyAgICAgICAgZGF0YSA9IG90aGVyLmRhdGE7CisgICAgICAg
IHByaW50ZXIgPSBvdGhlci5wcmludGVyOworICAgIH0KKworICAgIERhdGEgZGF0YTsKKyAgICBD
YWxsYmFjayBwcmludGVyOworCitwcm90ZWN0ZWQ6CisgICAgUHJpbnRSZWNvcmQoKSB7IH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBQcmludGVyOworCit0eXBlZGVmIFZlY3Rv
cjxQcmludFJlY29yZD4gUHJpbnRSZWNvcmRMaXN0OworCitpbmxpbmUgdm9pZCBhcHBlbmRQcmlu
dGVyKFByaW50UmVjb3JkTGlzdCYpIHsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdCwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgoraW5saW5lIHZvaWQgYXBwZW5kUHJpbnRlcihQcmludFJlY29y
ZExpc3QmIHByaW50UmVjb3JkTGlzdCwgRmlyc3QgZmlyc3QsIEFyZ3VtZW50cyYmLi4uIG90aGVy
cykKK3sKKyAgICBwcmludFJlY29yZExpc3QuYXBwZW5kKFByaW50ZXI8Rmlyc3Q+KGZpcnN0KSk7
CisgICAgYXBwZW5kUHJpbnRlcihwcmludFJlY29yZExpc3QsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KG90aGVycykuLi4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Citp
bmxpbmUgUHJpbnRSZWNvcmRMaXN0KiBtYWtlUHJpbnRSZWNvcmRMaXN0KEFyZ3VtZW50cyYmLi4u
IGFyZ3VtZW50cykKK3sKKyAgICBhdXRvIHByaW50UmVjb3JkTGlzdCA9IG5ldyBQcmludFJlY29y
ZExpc3QoKTsKKyAgICBhcHBlbmRQcmludGVyKCpwcmludFJlY29yZExpc3QsIHN0ZDo6Zm9yd2Fy
ZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIHJldHVybiBwcmludFJlY29yZExpc3Q7
Cit9CisKKy8vIFNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHNwZWNpYWxpemluZyBwcmludGVy
cy4KKwordm9pZCBwcmludENvbnN0Q2hhclN0cmluZyhQcmludFN0cmVhbSYsIENvbnRleHQmKTsK
K3ZvaWQgcHJpbnRJbnRwdHIoUHJpbnRTdHJlYW0mLCBDb250ZXh0Jik7Cit2b2lkIHByaW50VWlu
dHB0cihQcmludFN0cmVhbSYsIENvbnRleHQmKTsKK3ZvaWQgcHJpbnRQb2ludGVyKFByaW50U3Ry
ZWFtJiwgQ29udGV4dCYpOworCit2b2lkIHNldFByaW50ZXIoUHJpbnRSZWNvcmQmLCBDU3RyaW5n
JiYpOworCisvLyBTcGVjaWFsaXplZCBwcmludGVycy4KKwordGVtcGxhdGU8Pgorc3RydWN0IFBy
aW50ZXI8Y29uc3QgY2hhcio+IDogcHVibGljIFByaW50UmVjb3JkIHsKKyAgICBQcmludGVyKGNv
bnN0IGNoYXIqIHN0cikKKyAgICAgICAgOiBQcmludFJlY29yZChzdHIsIHByaW50Q29uc3RDaGFy
U3RyaW5nKQorICAgIHsgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8Y2hhcio+
IDogcHVibGljIFByaW50ZXI8Y29uc3QgY2hhcio+IHsKKyAgICBQcmludGVyKGNoYXIqIHN0cikK
KyAgICAgICAgOiBQcmludGVyPGNvbnN0IGNoYXIqPihzdHIpCisgICAgeyB9Cit9OworCit0ZW1w
bGF0ZTw+CitzdHJ1Y3QgUHJpbnRlcjxSYXdQb2ludGVyPiA6IHB1YmxpYyBQcmludFJlY29yZCB7
CisgICAgUHJpbnRlcihSYXdQb2ludGVyIHJhd1BvaW50ZXIpCisgICAgICAgIDogUHJpbnRSZWNv
cmQocmF3UG9pbnRlci52YWx1ZSgpLCBwcmludFBvaW50ZXIpCisgICAgeyB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNfc2ln
bmVkPj4KK3ZvaWQgc2V0UHJpbnRlcihQcmludFJlY29yZCYgcmVjb3JkLCBUIHZhbHVlLCBpbnRw
dHJfdCA9IDApCit7CisgICAgcmVjb3JkLmRhdGEudmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KHZhbHVlKTsKKyAgICByZWNvcmQucHJpbnRlciA9IHByaW50SW50cHRyOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3Np
Z25lZD4+Cit2b2lkIHNldFByaW50ZXIoUHJpbnRSZWNvcmQmIHJlY29yZCwgVCB2YWx1ZSwgdWlu
dHB0cl90ID0gMCkKK3sKKyAgICByZWNvcmQuZGF0YS52YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4odmFsdWUpOworICAgIHJlY29yZC5wcmludGVyID0gcHJpbnRVaW50cHRyOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IFByaW50ZXIgOiBwdWJsaWMgUHJpbnRSZWNvcmQg
eworICAgIFByaW50ZXIoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldFByaW50ZXIoKnRoaXMs
IHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBQcmludGVyCisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHJldmlzaW9uIDIxNTYwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQWly
Q29kZS5oIgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUHJpbnRTcGVjaWFsLmgiCiAjaW5jbHVkZSAiQWlyU3Rh
Y2tTbG90LmgiCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNB
dG9taWNWYWx1ZS5oIgpAQCAtMTEyNyw2ICsxMTI4LDI4IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBBaXI6Ok9vcHM7CiAgICAgfQogCisjaWYgRU5BQkxFKE1BU01fUFJPQkUpCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgcHJpbnQoQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgVmFsdWUqIG9yaWdpbiA9IG1fdmFsdWU7Cisg
ICAgICAgIHByaW50KG9yaWdpbiwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4u
Lik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZv
aWQgcHJpbnQoVmFsdWUqIG9yaWdpbiwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsK
KyAgICAgICAgYXV0byBwcmludExpc3QgPSBQcmludGVyOjptYWtlUHJpbnRSZWNvcmRMaXN0KHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICBhdXRvIHByaW50
U3BlY2lhbCA9IHN0YXRpY19jYXN0PFByaW50U3BlY2lhbCo+KG1fY29kZS5hZGRTcGVjaWFsKHN0
ZDo6bWFrZV91bmlxdWU8UHJpbnRTcGVjaWFsPihwcmludExpc3QpKSk7CisgICAgICAgIEluc3Qg
aW5zdChQYXRjaCwgb3JpZ2luLCBBcmc6OnNwZWNpYWwocHJpbnRTcGVjaWFsKSk7CisgICAgICAg
IFByaW50ZXI6OmFwcGVuZEFpckFyZ3MoaW5zdCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJn
dW1lbnRzKS4uLik7CisgICAgICAgIGFwcGVuZChXVEZNb3ZlKGluc3QpKTsKKyAgICB9CisjZWxz
ZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIHByaW50KEFy
Z3VtZW50cyYmLi4uKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKKwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICB2b2lkIGFwcGVuZChBaXI6Ok9wY29k
ZSBvcGNvZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclByaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQcmludFNwZWNpYWwuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUHJpbnRTcGVjaWFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJQcmludFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisjaWYgRU5BQkxFKE1BU01f
UFJPQkUpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitQcmludFNwZWNpYWw6OlBy
aW50U3BlY2lhbChQcmludGVyOjpQcmludFJlY29yZExpc3QqIGxpc3QpCisgICAgOiBtX3ByaW50
UmVjb3JkTGlzdChsaXN0KQoreworfQorCitQcmludFNwZWNpYWw6On5QcmludFNwZWNpYWwoKQor
eworfQorCit2b2lkIFByaW50U3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVk
TGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKQoreworfQorCitib29sIFByaW50U3BlY2lh
bDo6aXNWYWxpZChJbnN0JikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcmludFNw
ZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCkKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUHJpbnRTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25z
dCBSZWdpc3RlclNldCYpCit7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBQcmludFNwZWNpYWw6
OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4
dCYpCit7CisgICAgc2l6ZV90IGN1cnJlbnRBcmcgPSAxOyAvLyBTa2lwIHRoZSBQcmludFNwZWNp
YWwgYXJnLgorICAgIGZvciAoYXV0byYgdGVybSA6ICptX3ByaW50UmVjb3JkTGlzdCkgeworICAg
ICAgICBpZiAodGVybS5wcmludGVyID09IFByaW50ZXI6OnByaW50QWlyQXJnKSB7CisgICAgICAg
ICAgICBjb25zdCBBcmcmIGFyZyA9IGluc3QuYXJnc1tjdXJyZW50QXJnKytdOworICAgICAgICAg
ICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAg
ICAgICAgICAgICAgIHRlcm0gPSBQcmludGVyOjpQcmludGVyPE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEPihhcmcuZ3ByKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBBcmc6OkFkZHI6CisgICAgICAgICAgICAgICAgdGVybSA9IFByaW50ZXI6OlByaW50ZXI8
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3M+KGFyZy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaml0LnByaW50KG1fcHJpbnRSZWNvcmRMaXN0KTsK
KyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK1JlZ2lzdGVyU2V0IFByaW50
U3BlY2lhbDo6ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoSW5zdCYpCit7CisgICAgcmV0dXJuIFJl
Z2lzdGVyU2V0KCk7Cit9CisKK1JlZ2lzdGVyU2V0IFByaW50U3BlY2lhbDo6ZXh0cmFDbG9iYmVy
ZWRSZWdzKEluc3QmKQoreworICAgIHJldHVybiBSZWdpc3RlclNldCgpOworfQorCit2b2lkIFBy
aW50U3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoIlByaW50Iik7Cit9CisKK3ZvaWQgUHJpbnRTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInByaW50IGZvciBkZWJ1Z2dp
bmcgbG9nZ2luZy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBCMzo6QWlyCisKK25hbWVzcGFj
ZSBQcmludGVyIHsKKworTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBwcmludEFpckFyZyhQ
cmludFN0cmVhbSYsIENvbnRleHQmKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBh
IHBsYWNlaG9sZGVyIHRvIGxldCBQcmludFNwZWNpYWw6OmdlbmVyYXRlKCkga25vdyB0aGF0Cisg
ICAgLy8gdGhlIFByaW50ZXIgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aCBvbmUgZm9yIGEgcmVn
aXN0ZXIsIGNvbnN0YW50LCBldGMuIEhlbmNlLAorICAgIC8vIHRoaXMgZnVuY3Rpb24gc2hvdWxk
IG5ldmVyIGJlIGNhbGxlZC4KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBQcmludGVyCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gRU5BQkxFKE1BU01fUFJPQkUpCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUHJpbnRTcGVjaWFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQcmludFNwZWNpYWwuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclByaW50U3BlY2lhbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorI2lmIEVOQUJMRShNQVNNX1BST0JFKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1
ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgUHJpbnRlciB7CisKK3R5cGVkZWYgVmVjdG9yPEIz
OjpBaXI6OkFyZz4gQXJnTGlzdDsKKworLy8gSXNTYW1lT3JSZWZlcmVuY2U6OnZhbHVlIGlzIHRy
dWUgaWYgVCBpcyB0aGUgc2FtZSB0eXBlIGFzIFUgb3IgVSYuIEVsc2UsIGl0IGlzIGZhbHNlLgor
ICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0YXRpYyBjb25zdGV4cHIg
YXV0byBJc1NhbWVPclJlZmVyZW5jZUhlbHBlcihpbnQpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19zYW1lPFQsIFU+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgVSY+Ojp2YWx1ZSwgc3Rk
Ojp0cnVlX3R5cGU+OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorc3RhdGlj
IGNvbnN0ZXhwciBzdGQ6OmZhbHNlX3R5cGUgSXNTYW1lT3JSZWZlcmVuY2VIZWxwZXIoLi4uKTsK
KwordGVtcGxhdGU8Y2xhc3MgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBJc1NhbWVPclJlZmVyZW5j
ZSA6IHB1YmxpYyBzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoSXNTYW1lT3JSZWZlcmVuY2VIZWxwZXI8
VCwgVT4oMCkpLCBzdGQ6OnRydWVfdHlwZT4geyB9OworCisgICAgCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHMsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxJ
c1NhbWVPclJlZmVyZW5jZTxULCBCMzo6QWlyOjpUbXA+Ojp2YWx1ZSB8fCBJc1NhbWVPclJlZmVy
ZW5jZTxULCBSZWc+Ojp2YWx1ZT4+CitpbmxpbmUgdm9pZCBhcHBlbmRBaXJBcmcoQjM6OkFpcjo6
SW5zdCYgaW5zdCwgVCYmIGFyZykKK3sKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKHN0ZDo6Zm9yd2Fy
ZDxUPihhcmcpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8IUlzU2FtZU9yUmVmZXJlbmNlPFQsIEIz
OjpBaXI6OlRtcD46OnZhbHVlICYmICFJc1NhbWVPclJlZmVyZW5jZTxULCBSZWc+Ojp2YWx1ZT4+
CitpbmxpbmUgdm9pZCBhcHBlbmRBaXJBcmcoQjM6OkFpcjo6SW5zdCYsIFQmJiwgaW50ID0gMCkg
eyB9CisKK2lubGluZSB2b2lkIGFwcGVuZEFpckFyZ3MoQjM6OkFpcjo6SW5zdCYpIHsgfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitpbmxpbmUgdm9pZCBh
cHBlbmRBaXJBcmdzKEIzOjpBaXI6Okluc3QmIGluc3QsIFQmJiB0LCBBcmd1bWVudHMmJi4uLiBv
dGhlcnMpCit7CisgICAgYXBwZW5kQWlyQXJnKGluc3QsIHN0ZDo6Zm9yd2FyZDxUPih0KSk7Cisg
ICAgYXBwZW5kQWlyQXJncyhpbnN0LCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihvdGhlcnMpLi4u
KTsKK30KKwordm9pZCBwcmludEFpckFyZyhQcmludFN0cmVhbSYsIENvbnRleHQmKTsKKworLy8g
UHJpbnRlcjxBcmcmPiBpcyBvbmx5IGEgcGxhY2UtaG9sZGVyIHdoaWNoIFByaW50U3BlY2lhbDo6
Z2VuZXJhdGUoKSB3aWxsIGxhdGVyCisvLyByZXBsYWNlIHdpdGggYSBQcmludGVyIGZvciBhIHJl
Z2lzdGVyLCBjb25zdGFudCwgZXRjLiBhcyBhcHByb3ByaWF0ZS4gCit0ZW1wbGF0ZTw+CitzdHJ1
Y3QgUHJpbnRlcjxCMzo6QWlyOjpUbXA+IDogcHVibGljIFByaW50UmVjb3JkIHsKKyAgICBQcmlu
dGVyKEIzOjpBaXI6OlRtcCYpCisgICAgICAgIDogUHJpbnRSZWNvcmQocHJpbnRBaXJBcmcpCisg
ICAgeyB9Cit9OworICAgIAordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8UmVnPiA6IHB1Ymxp
YyBQcmludFJlY29yZCB7CisgICAgUHJpbnRlcihSZWcmKQorICAgICAgICA6IFByaW50UmVjb3Jk
KHByaW50QWlyQXJnKQorICAgIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgUHJpbnRlcgorCitu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgUHJpbnRTcGVjaWFsIDogcHVi
bGljIFNwZWNpYWwgeworcHVibGljOgorICAgIFByaW50U3BlY2lhbChQcmludGVyOjpQcmludFJl
Y29yZExpc3QqKTsKKyAgICB+UHJpbnRTcGVjaWFsKCk7CisgICAgCisgICAgLy8gWW91IGNhbm5v
dCB1c2UgdGhpcyByZWdpc3RlciB0byBwYXNzIGFyZ3VtZW50cy4gSXQganVzdCBzbyBoYXBwZW5z
IHRoYXQgdGhpcyByZWdpc3RlciBpcyBub3QKKyAgICAvLyB1c2VkIGZvciBhcmd1bWVudHMgaW4g
dGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBCeSB0aGUgd2F5LCB0aGlzIGlzIHRoZSBvbmx5IHRo
aW5nIHRoYXQgY2F1c2VzCisgICAgLy8gdGhpcyBzcGVjaWFsIHRvIGJlIHNwZWNpZmljIHRvIEMg
Y2FsbHMuCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBzY3JhdGNoUmVnaXN0ZXIgPSBHUFJJbmZv
Ojpub25BcmdHUFIwOworICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhJbnN0
JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsK
KyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2so
SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcG9ydFVzZWRS
ZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29u
dGV4dCYpIG92ZXJyaWRlOworICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFybHlDbG9iYmVyZWRSZWdz
KEluc3QmKSBvdmVycmlkZTsKKyAgICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJlZ3MoSW5z
dCYpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3BlY2lh
bEFyZ09mZnNldCA9IDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVNwZWNpYWxBcmdz
ID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2FsbGVlQXJnT2Zmc2V0ID0gbnVtU3Bl
Y2lhbEFyZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bUNhbGxlZUFyZ3MgPSAxOwor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCByZXR1cm5HUEFyZ09mZnNldCA9IG51bVNwZWNpYWxB
cmdzICsgbnVtQ2FsbGVlQXJnczsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtUmV0dXJu
R1BBcmdzID0gMjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcmV0dXJuRlBBcmdPZmZzZXQg
PSBudW1TcGVjaWFsQXJncyArIG51bUNhbGxlZUFyZ3MgKyBudW1SZXR1cm5HUEFyZ3M7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVJldHVybkZQQXJncyA9IDE7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGFyZ0FyZ09mZnNldCA9CisgICAgbnVtU3BlY2lhbEFyZ3MgKyBudW1DYWxs
ZWVBcmdzICsgbnVtUmV0dXJuR1BBcmdzICsgbnVtUmV0dXJuRlBBcmdzOworICAgIAorICAgIFBy
aW50ZXI6OlByaW50UmVjb3JkTGlzdCogbV9wcmludFJlY29yZExpc3Q7Cit9OworCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIxNTYwNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEx
LDUgKzMxMTEsMjIgQEAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBDb2RlQmxvY2s6Omxpdgog
ICAgIH0KIH0KIAordm9pZCBzZXRQcmludGVyKFByaW50ZXI6OlByaW50UmVjb3JkJiByZWNvcmQs
IENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIFByaW50ZXI6OnNldFByaW50ZXIocmVjb3Jk
LCB0b0NTdHJpbmcoY29kZUJsb2NrKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCituYW1l
c3BhY2UgV1RGIHsKKyAgICAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBK
U0M6OkNvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChVTkxJS0VMWSghY29kZUJsb2Nr
KSkgeworICAgICAgICBvdXQucHJpbnQoIjxudWxsIGNvZGVCbG9jaz4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBvdXQucHJpbnQoKmNvZGVCbG9jayk7Cit9CisgICAgCit9IC8vIG5h
bWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDIxNTYwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUg
Ik1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHJpbnRlci5oIgogI2lu
Y2x1ZGUgIlByb2ZpbGVySmV0dGlzb25SZWFzb24uaCIKICNpbmNsdWRlICJQcm9ncmFtRXhlY3V0
YWJsZS5oIgogI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgpAQCAtMTA4Nyw0ICsxMDg4LDEz
IEBAIEpTT2JqZWN0KiBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXgKICNkZWZpbmUgQ09E
RUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssIHN1bW1hcnksIGRldGFpbHMpIFwKICAgICAoY29k
ZUJsb2NrLT52bSgpLT5sb2dFdmVudChjb2RlQmxvY2ssIHN1bW1hcnksIFsmXSAoKSB7IHJldHVy
biB0b0NTdHJpbmcgZGV0YWlsczsgfSkpCiAKKwordm9pZCBzZXRQcmludGVyKFByaW50ZXI6OlBy
aW50UmVjb3JkJiwgQ29kZUJsb2NrKik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3Bh
Y2UgV1RGIHsKKyAgICAKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6Q29kZUJsb2NrKik7CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjE1NjA2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDUs
MTEgKzYwNSw3IEBAIHZvaWQgVk06OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywKIHsK
ICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAgICAgZGF0YUxvZygiVGhyb3dpbmcg
ZXhjZXB0aW9uIGluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcihleGVjKSwgIiBmb3IgY29kZSBi
bG9jayAiKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jaykKLSAgICAgICAgICAgIGRhdGFMb2coKmNv
ZGVCbG9jaywgIlxuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRhdGFMb2coIjxudWxs
cHRyPlxuIik7CisgICAgICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiBpbiBjYWxsIGZy
YW1lICIsIFJhd1BvaW50ZXIoZXhlYyksICIgZm9yIGNvZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAi
XG4iKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307702</attachid>
            <date>2017-04-21 00:01:27 -0700</date>
            <delta_ts>2017-04-21 00:31:52 -0700</delta_ts>
            <desc>proposed patch: fix EWS complaint.</desc>
            <filename>bug-171101.patch</filename>
            <type>text/plain</type>
            <size>54796</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1NjA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBA
QAorMjAxNy0wNC0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3IgTUFTTSBwcm9iZSB0byBhbGxvdyBwcmludGluZyBvZiBjdXN0b20gdHlwZXMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzExMDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb3IgZXhhbXBs
ZSwgdGhpcyBhbGxvd3MgdXMgdG8gYWRkIE1BU00gcHJpbnRpbmcgb2YgQ29kZUJsb2NrKiBhbmQg
QWlyOjpBcmdzLgorCisgICAgICAgIEluIGdlbmVyYWwsIE1BU00gcHJpbnQgY2FuIGJlIHVzZWQg
bGlrZSBkYXRhTG9nLCBleGNlcHQgdGhhdCBpdCBnZW5lcmF0ZXMgSklUdGVkCisgICAgICAgIGNv
ZGUgZm9yIGRvaW5nIHRoZSBkYXRhTG9nZ2luZyBsYXRlciB3aGVuIHRoZSBKSVR0ZWQgY29kZSBy
dW5zLiAgTUFTTSBwcmludCBjYW4KKyAgICAgICAgcHJpbnQgYW55IHZhbHVlIHR5cGUgdGhhdCBh
IHNwZWNpYWxpemVkIFByaW50ZXIgdGVtcGxhdGUgb3IgYSBzZXRQcmludGVyKCkKKyAgICAgICAg
ZnVuY3Rpb24gaW1wbGVtZW50ZWQgZm9yIHRoYXQgdHlwZS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJpbnRl
cjo6cHJpbnRBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFBDUmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFJlZ2lzdGVySUQpOgorICAgICAg
ICAoSlNDOjpQcmludGVyOjpwcmludEZQUmVnaXN0ZXJJRCk6CisgICAgICAgIChKU0M6OlByaW50
ZXI6OnByaW50QWRkcmVzcyk6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6UHJpbnRlcjo6cHJpbnRDYWxsYmFjayk6CisgICAgICAgIChKU0M6OnBy
aW50SW5kZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cHJpbnRDUFUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpwcmludENQVVJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OnByaW50UEMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpwcmludFJlZ2lzdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6cHJpbnRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclByaW50ZXI6OnByaW50Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuaDoKKyAgICAgICAgKEpTQzo6QWxsUmVn
aXN0ZXJzOjpBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPEFs
bFJlZ2lzdGVycz46OlByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPFBD
UmVnaXN0ZXI+OjpQcmludGVyKToKKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD46OlByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVy
OjpQcmludGVyPE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+OjpQcmludGVyKToKKyAgICAg
ICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcz46OlByaW50
ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPE1lbW9yeT46OlByaW50ZXIpOgor
ICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPE1lbVdvcmQ8SW50VHlwZT4+OjpQcmludGVy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnByaW50KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJQcmludGVyOjpwcmludCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyUHJpbnRlcjo6UHJpbnRBcmc6OlByaW50QXJnKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJQcmludGVyOjphcHBlbmRQcmludEFyZyk6IERlbGV0ZWQu
CisgICAgICAgIC0gUmVmYWN0b3JlZCB0byBtb3ZlIHRoZSB1bmRlcmx5aW5nIFByaW50UmVjb3Jk
IChhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMpCisgICAgICAgICAgb3V0IHRvIFByaW50
ZXIuY3BwL2guCisgICAgICAgIC0gTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcC9oIG5vdyBvbmx5
IGFkZCBjdXN0b20gUHJpbnRlcnMgZm9yIE1BU00gdHlwZXMgbGlrZQorICAgICAgICAgIFJlZ2lz
dGVySUQgYW5kIE1lbW9yeS4gIEl0IGFsc28gZGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gb2YK
KyAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cHJpbnQoKS4KKworICAgICAgICAgIEFzIGJlZm9y
ZSwgSklUIGNvZGUgdGhhdCB3aXNoZXMgdG8gdXNlIE1hY3JvQXNzZW1ibGVyOjpwcmludCgpIG5l
ZWRzIHRvCisgICAgICAgICAgI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIi4KKwor
ICAgICAgICAtIEFsc28gYWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhbiBvcHRpb25hbCBp
bmRlbnRhdGlvbiAoaW4gbnVtYmVyIG9mIGNoYXJzKQorICAgICAgICAgIHdoZW4gTUFTTSBwcmlu
dGluZyBBbGxSZWdpc3RlcnMuICBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIEFsbFJlZ2lzdGVycyBw
cmludHMKKyAgICAgICAgICBhIGJsb2NrIG9mIGRhdGEgdW5saWtlIG90aGVyIHByaW50ZXJzIHdo
aWNoIHByaW50IGlubGluZS4KKworICAgICAgICAqIGFzc2VtYmxlci9QcmludGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50Q29uc3RDaGFyU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6UHJpbnRlcjo6cHJpbnRJbnRwdHIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpw
cmludFVpbnRwdHIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFBvaW50ZXIpOgorICAg
ICAgICAoSlNDOjpQcmludGVyOjpzZXRQcmludGVyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvUHJp
bnRlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6Q29udGV4dDo6Q29udGV4dCk6
CisgICAgICAgIChKU0M6OlByaW50ZXI6OlByaW50UmVjb3JkOjpQcmludFJlY29yZCk6CisgICAg
ICAgIChKU0M6OlByaW50ZXI6OmFwcGVuZFByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVy
OjptYWtlUHJpbnRSZWNvcmRMaXN0KToKKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxS
YXdQb2ludGVyPjo6UHJpbnRlcik6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnNldFByaW50ZXIp
OgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyOjpQcmludGVyKToKKyAgICAgICAgLSBE
YXRhIHN0cnVjdHVyZXMgZm9yIGNyZWF0aW5nIGEgbGlzdCBvZiBQcmludFJlY29yZHMuICBDbGFz
c2VzIHdoaWNoIHdpc2ggdG8KKyAgICAgICAgICBhZGQgY3VzdG9tIHN1cHBvcnQgZm9yIE1BU00g
cHJpbnRpbmcgY2FuICNpbmNsdWRlICJQcmludGVyLmgiIGFuZCBpbXBsZW1lbnQKKyAgICAgICAg
ICBlaXRoZXI6CisgICAgICAgICAgMS4gYSBzcGVjaWFsaXplZCBQcmludGVyIHRlbXBsYXRlLCBv
cgorICAgICAgICAgIDIuIGEgc2V0UHJpbnRlcigpIGZ1bmN0aW9uLgorCisgICAgICAgICAgU2Vl
IFByaW50ZXI8UmVnPiBhbmQgUHJpbnRlcjxCMzo6QWlyOjpUbXA+IGluIEFpclByaW50U3BlY2lh
bC5oIGZvciBleGFtcGxlcyBvZgorICAgICAgICAgICgxKS4gIFNlZSBDb2RlQmxvY2sncyBzZXRQ
cmludGVyKCkgZm9yIGFuIGV4YW1wbGUgb2YgKDIpLgorCisgICAgICAgICogYjMvQjNMb3dlclRv
QWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6cHJpbnQpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJQcmludFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpQcmludFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpQcmludFNwZWNpYWw6On5QcmludFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpQcmludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmlu
dFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6
OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpyZXBv
cnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlByaW50U3BlY2lhbDo6ZXh0cmFFYXJs
eUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6OmV4
dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlByaW50U3BlY2lhbDo6
ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6OmRlZXBEdW1w
SW1wbCk6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50QWlyQXJnKToKKyAgICAgICAgKiBi
My9haXIvQWlyUHJpbnRTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpQcmludGVyOjph
cHBlbmRBaXJBcmcpOgorICAgICAgICAoSlNDOjpQcmludGVyOjphcHBlbmRBaXJBcmdzKToKKyAg
ICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxCMzo6QWlyOjpUbXA+OjpQcmludGVyKToKKyAg
ICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxSZWc+OjpQcmludGVyKToKKyAgICAgICAgLSBB
ZGQgdGhlIHByaW50KCkgb3BlcmF0aW9uIGZvciB1c2UgaW4gTG93ZXJUb0Fpci4gIHByaW50KCkg
d2lsbCBlbWl0IGEKKyAgICAgICAgICBQcmludFNwZWNpYWwgdGhhdCB3aWxsIHVsdGltYXRlbHkg
ZW1pdCBhIE1BU00gcHJpbnQgdG8gcHJpbnQgd2hhdCB3ZSB3YW50LgorICAgICAgICAtIExvd2Vy
VG9BaXIncyBwcmludCgpIGFkZHMgdGhlIGFiaWxpdHkgdG8gcHJpbnQgQWlyOjpBcmdzLgorICAg
ICAgICAtIFVubGlrZSBpbiB0aGUgYmFzZWxpbmUgSklUIGFuZCB0aGUgREZHLCBMb3dlclRvQWly
J3MgcHJpbnQoKSBjYW4gcGVydHVyYiB0aGUKKyAgICAgICAgICB1c2FnZSBvZiByZWdpc3RlcnMu
ICBUaGlzIGlzIGJlY2F1c2UgUHJpbnRTcGVjaWFsIGlzIGEgcGF0Y2ggcG9pbnQsIGFuZCBpdAor
ICAgICAgICAgIHByZXZlbnRzIGNlcnRhaW4gb3B0aW1pemF0aW9ucy4gIElmIG5vdCB1c2VkIGNh
cmVmdWxseSwgYW4gYXR0ZW1wdCB0byBwcmludCgpCisgICAgICAgICAgYW4gQXJnIGJ5IHRha2lu
ZyBhIFRtcCwgY2FuIGZvcmNlIHRoZSBCMyBWYWx1ZSBpbnRvIGEgVG1wIGVhcmxpZXIgdGhhbiBp
dCB3b3VsZAorICAgICAgICAgIG90aGVyd2lzZSBkbyBzby4gIFNvLCB1c2UgTG93ZXJUb0Fpcidz
IHByaW50KCkgd2l0aCBjYXJlLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6c2V0UHJpbnRlcik6CisgICAgICAgIC0gTm93IHdlIGNhbiBNQVNNIHBy
aW50IENvZGVCbG9jayouCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAt
IE5vdyB3ZSBjYW4gZGF0YUxvZyBDb2RlQmxvY2sqIChpbmNsdWRpbmcgbnVsbCBDb2RlQmxvY2sg
cG9pbnRlcnMpLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisKKyAgICAgICAg
KiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OnRocm93RXhjZXB0aW9uKToKKyAg
ICAgICAgLSBVc2UgdGhlIG5ldyBhYmlsaXR5IHRvIGRhdGFMb2cgQ29kZUJsb2NrKi4gIE5vIG5l
ZWQgdG8gZG8gYW4gZXhwbGljaXQgbnVsbAorICAgICAgICAgIGNoZWNrIGJlZm9yZSBwcmludGlu
ZyBhbnltb3JlLgorCiAyMDE3LTA0LTIwICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlh
bmRleC5ydT4KIAogICAgICAgICBbY21ha2VdIERlZmluZSBGT1JXQVJESU5HX0hFQURFUlNfRElS
IGluIFdlYktpdEZTIGFuZCB1c2UgaXQgZXZlcnl3aGVyZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE1NjA2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5jcHAKICAgICBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcAogICAgIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAKKyAgICBhc3NlbWJsZXIvUHJpbnRlci5j
cHAKIAogICAgIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2Fu
LmNwcAogICAgIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAK
QEAgLTEwNSw2ICsxMDYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIzL2Fp
ci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCiAgICAgYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0
LmNwcAogICAgIGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAorICAgIGIzL2Fpci9BaXJQcmludFNw
ZWNpYWwuY3BwCiAgICAgYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmNwcAogICAgIGIzL2Fpci9BaXJS
ZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAogICAgIGIzL2Fpci9BaXJTaW1wbGlmeUNGRy5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTU2MDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjQ0NSw5ICsyNDQ1LDEzIEBACiAJCUZFNEQ1NUI4MUFFNzE2
Q0EwMDUyRTQ1OSAvKiBJdGVyYXRpb25TdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEQ1NUI3MUFFNzE2Q0EwMDUyRTQ1OSAvKiBJdGVyYXRp
b25TdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRTUwNjg2NTFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTUwNjg2NDFBRTI0
NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU1MDY4NjcxQUUyNUUyODAwMDlEQUI3IC8q
IERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmNwcCAqLzsgfTsKKwkJRkU1NjI4Q0QxRTk5NTEyRDAwQzQ5RTQ1IC8qIEFpclByaW50U3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTU2MjhDQjFFOTk1MTI0MDBDNDlFNDUgLyogQWlyUHJpbnRTcGVjaWFsLmNwcCAqLzsgfTsKKwkJ
RkU1NjI4Q0UxRTk5NTEzMjAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1NjI4Q0MxRTk5NTEyNDAwQzQ5
RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oICovOyB9OwogCQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVD
Q0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3Bw
ICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5MzJBNjE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU2MDI5RDkxRDZFMUU0RjAwMzAyMDREIC8qIEV4Y2Vw
dGlvbkV2ZW50TG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RkU2M0RENTQxRUE5QjYxRTAwMTAzQTY5IC8qIFByaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjNERDUzMUVBOUI2MEUwMDEwM0E2OSAvKiBQ
cmludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRkU2M0RENTYxRUE5QkM2NzAwMTAzQTY5IC8qIFByaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2M0RENTUxRUE5QkM1RDAwMTAzQTY5
IC8qIFByaW50ZXIuY3BwICovOyB9OwogCQlGRTY0OTEzNzFENzhGMDFEMDBBNjk0RDQgLyogRXhj
ZXB0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFNjQ5MTM2MUQ3OEYwMTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNjQ5MTM5MUQ3OEYz
QUYwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY0OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0
aW9uU2NvcGUuY3BwICovOyB9OwogCQlGRTY4QzYzNzFCOTBERTA0MDA0MkJDQjMgLyogTWFjcm9B
c3NlbWJsZXJQcmludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUw
NzEsOSArNTA3NSwxMyBAQAogCQlGRTRENTVCNzFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9u
U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvblN0YXR1
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUwNjg2NDFBRTI0NjM5MDAwOURB
QjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlZmVycmVkU291cmNlRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVtcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNTYyOENCMUU5OTUxMjQwMEM0OUU0NSAvKiBB
aXJQcmludFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QWlyUHJpbnRTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQcmludFNwZWNpYWwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTU2MjhDQzFFOTk1MTI0MDBDNDlFNDUgLyog
QWlyUHJpbnRTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclBy
aW50U3BlY2lhbC5oOyBwYXRoID0gYjMvYWlyL0FpclByaW50U3BlY2lhbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEEx
RUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Vk1FbnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjAyOUQ4MUQ2
RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkU2M0RENTMxRUE5QjYwRTAwMTAzQTY5IC8qIFByaW50ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRTYzREQ1NTFFQTlCQzVEMDAxMDNBNjkgLyogUHJpbnRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmludGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2NDkxMzYxRDc4RjAxMzAwQTY5NEQ0IC8qIEV4Y2Vw
dGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvblNj
b3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjQ5MTM4MUQ3OEYzQTMwMEE2
OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFeGNlcHRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFNjhDNjM1MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJQcmludGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NTIsNiArNTY2MCw4IEBACiAJ
CQkJMEYyQUM1NkQxRThEN0FGRjAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmggKi8s
CiAJCQkJMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovLAog
CQkJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8sCisJCQkJ
RkU1NjI4Q0IxRTk5NTEyNDAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5jcHAgKi8sCisJCQkJ
RkU1NjI4Q0MxRTk5NTEyNDAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oICovLAogCQkJCTBG
RjRCNEJBMUU4ODQ0OTUwMERCQkU4NiAvKiBBaXJSZWdMaXZlbmVzcy5jcHAgKi8sCiAJCQkJMEZG
NEI0QkIxRTg4NDQ5NTAwREJCRTg2IC8qIEFpclJlZ0xpdmVuZXNzLmggKi8sCiAJCQkJMEY0NTcw
M0ExQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwICovLApAQCAt
NzUyNiw2ICs3NTM2LDggQEAKIAkJCQk4NjAxNjFFMjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4NUE4RjVFMDAwMzBFRUUgLyog
TWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKIAkJCQk4NkM1NjhERjExQTIxM0VF
MDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oICovLAorCQkJCUZFNjNERDU1MUVBOUJDNUQwMDEw
M0E2OSAvKiBQcmludGVyLmNwcCAqLywKKwkJCQlGRTYzREQ1MzFFQTlCNjBFMDAxMDNBNjkgLyog
UHJpbnRlci5oICovLAogCQkJCTk2ODhDQjE0MEVEMTJCNEUwMDFENjQ5RiAvKiBYODZBc3NlbWJs
ZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gYXNzZW1ibGVyOwpAQCAtODI2NSw2ICs4Mjc3LDcg
QEAKIAkJCQkwRjZCOEFERDFDNEVGQUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjMzRkNGODFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU1NjI4Q0Ux
RTk5NTEzMjAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjIxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2ttYXBWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xs
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg1NDYsNiArODU1OSw3IEBACiAJCQkJMEYyMzVC
RUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4
aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2M0RENTQxRUE5QjYxRTAwMTAzQTY5
IC8qIFByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMw
RSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzky
QzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMTAzMTQsNiArMTAzMjgsNyBAQAogCQkJCTc5ODBDMTZDMUUz
QTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkZDQ0ZCMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFNjNERDU2MUVBOUJDNjcwMDEwM0E2OSAv
KiBQcmludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0
MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgw
RjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNjgyRkIyMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMTA1NDQsNiArMTA1NTksNyBAQAogCQkJCTE0NDBGODkyMEE1
MDhCMTAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZFNTYyOENEMUU5OTUxMkQwMEM0OUU0NSAvKiBBaXJQcmludFNw
ZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODAxQTgxODgwRDZBODAwMjZDMzlCIC8q
IEpTQ0J1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQxMTA3RUMzNzYwMDQy
N0E0OCAvKiBKU0NlbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlBQkIxN0QxRTVDQ0I1NzAw
NDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlz
aW9uIDIxNTYwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYOAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNl
IFByaW50ZXIgeworCitzdHJ1Y3QgUHJpbnRSZWNvcmQ7Cit0eXBlZGVmIFZlY3RvcjxQcmludFJl
Y29yZD4gUHJpbnRSZWNvcmRMaXN0OworCit9CisKIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVi
bGljIE1hY3JvQXNzZW1ibGVyQmFzZSB7CiBwdWJsaWM6CiAKQEAgLTE4MjAsNyArMTgyNyw5IEBA
IHB1YmxpYzoKICAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYgRU5BQkxFKE1BU01fUFJPQkUpLiBP
dGhlcndpc2UsIHByaW50KCkgaXMgYSBuby1vcC4KICAgICAvLyBTZWUgY29tbWVudHMgaW4gTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmggZm9yIGV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhpcy4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgdm9pZCBwcmludChBcmd1bWVu
dHMuLi4gYXJncyk7CisgICAgdm9pZCBwcmludChBcmd1bWVudHMmJi4uLiBhcmdzKTsKKworICAg
IHZvaWQgcHJpbnQoUHJpbnRlcjo6UHJpbnRSZWNvcmRMaXN0Kik7CiB9OwogCiAjaWYgRU5BQkxF
KE1BU01fUFJPQkUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyUHJpbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwCShyZXZpc2lvbiAyMTU2MDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUHJpbnRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI4ICszMSwyNSBAQAogI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIFByaW50ZXIgewogCiB1c2lu
ZyBDUFVTdGF0ZSA9IE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZTsKIHVzaW5nIFJlZ2lzdGVySUQg
PSBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRDsKIHVzaW5nIEZQUmVnaXN0ZXJJRCA9IE1hY3Jv
QXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ7CiAKLXN0YXRpYyB2b2lkIHByaW50SW5kZW50KGludCBp
bmRlbnRhdGlvbikKK3ZvaWQgcHJpbnRBbGxSZWdpc3RlcnMoUHJpbnRTdHJlYW0mIG91dCwgQ29u
dGV4dCYgY29udGV4dCkKIHsKLSAgICBmb3IgKDsgaW5kZW50YXRpb24gPiAwOyBpbmRlbnRhdGlv
bi0tKQotICAgICAgICBkYXRhTG9nKCIgICAgIik7Ci19CisgICAgYXV0byYgY3B1ID0gY29udGV4
dC5wcm9iZUNvbnRleHQuY3B1OworICAgIGludCBjaGFyc1RvSW5kZW50ID0gY29udGV4dC5kYXRh
LmFzPGludD4oKTsKIAotI2RlZmluZSBJTkRFTlQgcHJpbnRJbmRlbnQoaW5kZW50YXRpb24pCi0g
ICAgCi12b2lkIHByaW50Q1BVKENQVVN0YXRlJiBjcHUsIGludCBpbmRlbnRhdGlvbikKLXsKLSAg
ICBJTkRFTlQsIGRhdGFMb2coImNwdToge1xuIik7Ci0gICAgcHJpbnRDUFVSZWdpc3RlcnMoY3B1
LCBpbmRlbnRhdGlvbiArIDEpOwotICAgIElOREVOVCwgZGF0YUxvZygifVxuIik7Ci19CisgICAg
YXV0byBpbmRlbnQgPSBbJl0gKCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoYXJz
VG9JbmRlbnQ7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICIpOworICAgIH07CisjZGVm
aW5lIElOREVOVCBpbmRlbnQoKQorCisgICAgSU5ERU5ULCBvdXQucHJpbnQoImNwdToge1xuIik7
CiAKLXZvaWQgcHJpbnRDUFVSZWdpc3RlcnMoQ1BVU3RhdGUmIGNwdSwgaW50IGluZGVudGF0aW9u
KQotewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgI2RlZmluZSBJTlRQVFJfSEVYX1ZBTFVF
X0ZPUk1BVCAiMHglMDhseCIKICNlbHNlCkBAIC02MSw3ICs1OCw3IEBAIHZvaWQgcHJpbnRDUFVS
ZWdpc3RlcnMoQ1BVU3RhdGUmIGNwdSwgaW4KIAogICAgICNkZWZpbmUgUFJJTlRfR1BSRUdJU1RF
UihfdHlwZSwgX3JlZ05hbWUpIHsgXAogICAgICAgICBpbnRwdHJfdCB2YWx1ZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGNwdS5fcmVnTmFtZSk7IFwKLSAgICAgICAgSU5ERU5ULCBkYXRh
TG9nRigiJTZzOiAiIElOVFBUUl9IRVhfVkFMVUVfRk9STUFUICIgICVsZFxuIiwgI19yZWdOYW1l
LCB2YWx1ZSwgdmFsdWUpIDsgXAorICAgICAgICBJTkRFTlQsIG91dC5wcmludGYoIiAgICAlNnM6
ICIgSU5UUFRSX0hFWF9WQUxVRV9GT1JNQVQgIiAgJWxkXG4iLCAjX3JlZ05hbWUsIHZhbHVlLCB2
YWx1ZSkgOyBcCiAgICAgfQogICAgIEZPUl9FQUNIX0NQVV9HUFJFR0lTVEVSKFBSSU5UX0dQUkVH
SVNURVIpCiAgICAgRk9SX0VBQ0hfQ1BVX1NQRUNJQUxfUkVHSVNURVIoUFJJTlRfR1BSRUdJU1RF
UikKQEAgLTcxLDE0ICs2OCwxOSBAQCB2b2lkIHByaW50Q1BVUmVnaXN0ZXJzKENQVVN0YXRlJiBj
cHUsIGluCiAgICAgI2RlZmluZSBQUklOVF9GUFJFR0lTVEVSKF90eXBlLCBfcmVnTmFtZSkgeyBc
CiAgICAgICAgIHVpbnQ2NF90KiB1ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KCZjcHUu
X3JlZ05hbWUpOyBcCiAgICAgICAgIGRvdWJsZSogZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZG91Ymxl
Kj4oJmNwdS5fcmVnTmFtZSk7IFwKLSAgICAgICAgSU5ERU5ULCBkYXRhTG9nRigiJTZzOiAweCUw
MTZsbHggICUuMTNnXG4iLCAjX3JlZ05hbWUsICp1LCAqZCk7IFwKKyAgICAgICAgSU5ERU5ULCBv
dXQucHJpbnRmKCIgICAgJTZzOiAweCUwMTZsbHggICUuMTNnXG4iLCAjX3JlZ05hbWUsICp1LCAq
ZCk7IFwKICAgICB9CiAgICAgRk9SX0VBQ0hfQ1BVX0ZQUkVHSVNURVIoUFJJTlRfRlBSRUdJU1RF
UikKICAgICAjdW5kZWYgUFJJTlRfRlBSRUdJU1RFUgorCisgICAgSU5ERU5ULCBvdXQucHJpbnQo
In1cbiIpOworI3VuZGVmIElOREVOVAorCiB9CiAKLXN0YXRpYyB2b2lkIHByaW50UEMoQ1BVU3Rh
dGUmIGNwdSkKK3ZvaWQgcHJpbnRQQ1JlZ2lzdGVyKFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQm
IGNvbnRleHQpCiB7CisgICAgYXV0byBjcHUgPSBjb250ZXh0LnByb2JlQ29udGV4dC5jcHU7CiAg
ICAgdW5pb24gewogICAgICAgICB2b2lkKiB2b2lkUHRyOwogICAgICAgICBpbnRwdHJfdCBpbnRw
dHJWYWx1ZTsKQEAgLTkwLDM3ICs5Miw1NCBAQCBzdGF0aWMgdm9pZCBwcmludFBDKENQVVN0YXRl
JiBjcHUpCiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRlZCBDUFUiCiAjZW5kaWYKLSAgICBkYXRh
TG9nRigicGM6PCVwICVsZD4iLCB1LnZvaWRQdHIsIHUuaW50cHRyVmFsdWUpOworICAgIG91dC5w
cmludGYoInBjOjwlcCAlbGQ+IiwgdS52b2lkUHRyLCB1LmludHB0clZhbHVlKTsKIH0KIAotdm9p
ZCBwcmludFJlZ2lzdGVyKENQVVN0YXRlJiBjcHUsIFJlZ2lzdGVySUQgcmVnSUQpCit2b2lkIHBy
aW50UmVnaXN0ZXJJRChQcmludFN0cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQogeworICAg
IFJlZ2lzdGVySUQgcmVnSUQgPSBjb250ZXh0LmRhdGEuYXM8UmVnaXN0ZXJJRD4oKTsKICAgICBj
b25zdCBjaGFyKiBuYW1lID0gQ1BVU3RhdGU6Omdwck5hbWUocmVnSUQpOwogICAgIHVuaW9uIHsK
ICAgICAgICAgdm9pZCogdm9pZFB0cjsKICAgICAgICAgaW50cHRyX3QgaW50cHRyVmFsdWU7CiAg
ICAgfSB1OwotICAgIHUudm9pZFB0ciA9IGNwdS5ncHIocmVnSUQpOwotICAgIGRhdGFMb2dGKCIl
czo8JXAgJWxkPiIsIG5hbWUsIHUudm9pZFB0ciwgdS5pbnRwdHJWYWx1ZSk7CisgICAgdS52b2lk
UHRyID0gY29udGV4dC5wcm9iZUNvbnRleHQuZ3ByKHJlZ0lEKTsKKyAgICBvdXQucHJpbnRmKCIl
czo8JXAgJWxkPiIsIG5hbWUsIHUudm9pZFB0ciwgdS5pbnRwdHJWYWx1ZSk7CiB9CiAKLXZvaWQg
cHJpbnRSZWdpc3RlcihDUFVTdGF0ZSYgY3B1LCBGUFJlZ2lzdGVySUQgcmVnSUQpCit2b2lkIHBy
aW50RlBSZWdpc3RlcklEKFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQmIGNvbnRleHQpCiB7Cisg
ICAgRlBSZWdpc3RlcklEIHJlZ0lEID0gY29udGV4dC5kYXRhLmFzPEZQUmVnaXN0ZXJJRD4oKTsK
ICAgICBjb25zdCBjaGFyKiBuYW1lID0gQ1BVU3RhdGU6OmZwck5hbWUocmVnSUQpOwogICAgIHVu
aW9uIHsKICAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwogICAgICAgICB1aW50NjRfdCB1aW50
NjRWYWx1ZTsKICAgICB9IHU7Ci0gICAgdS5kb3VibGVWYWx1ZSA9IGNwdS5mcHIocmVnSUQpOwot
ICAgIGRhdGFMb2dGKCIlczo8MHglMDE2bGx4ICUuMTNnPiIsIG5hbWUsIHUudWludDY0VmFsdWUs
IHUuZG91YmxlVmFsdWUpOworICAgIHUuZG91YmxlVmFsdWUgPSBjb250ZXh0LnByb2JlQ29udGV4
dC5mcHIocmVnSUQpOworICAgIG91dC5wcmludGYoIiVzOjwweCUwMTZsbHggJS4xM2c+IiwgbmFt
ZSwgdS51aW50NjRWYWx1ZSwgdS5kb3VibGVWYWx1ZSk7Cit9CisKK3ZvaWQgcHJpbnRBZGRyZXNz
KFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQmIGNvbnRleHQpCit7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MgYWRkcmVzcyA9IGNvbnRleHQuZGF0YS5hczxNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcz4oKTsKKyAgICBSZWdpc3RlcklEIHJlZ0lEID0gYWRkcmVzcy5iYXNlOworICAgIGNvbnN0
IGNoYXIqIG5hbWUgPSBDUFVTdGF0ZTo6Z3ByTmFtZShyZWdJRCk7CisgICAgdW5pb24geworICAg
ICAgICB2b2lkKiB2b2lkUHRyOworICAgICAgICBpbnRwdHJfdCBpbnRwdHJWYWx1ZTsKKyAgICB9
IHU7CisgICAgdS52b2lkUHRyID0gY29udGV4dC5wcm9iZUNvbnRleHQuZ3ByKHJlZ0lEKTsKKyAg
ICBvdXQucHJpbnRmKCJBZGRyZXNze2Jhc2U6JXM6PCVwICVsZD4sIG9mZnNldDo8MHgleCAlZD4i
LCBuYW1lLCB1LnZvaWRQdHIsIHUuaW50cHRyVmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
Lm9mZnNldCk7CiB9CiAKLXZvaWQgcHJpbnRNZW1vcnkoQ1BVU3RhdGUmIGNwdSwgY29uc3QgTWVt
b3J5JiBtZW1vcnkpCit2b2lkIHByaW50TWVtb3J5KFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQm
IGNvbnRleHQpCiB7CisgICAgY29uc3QgTWVtb3J5JiBtZW1vcnkgPSBjb250ZXh0LmRhdGEuYXM8
TWVtb3J5PigpOworCiAgICAgdWludDhfdCogcHRyID0gbnVsbHB0cjsKICAgICBzd2l0Y2ggKG1l
bW9yeS5hZGRyZXNzVHlwZSkgewogICAgIGNhc2UgTWVtb3J5OjpBZGRyZXNzVHlwZTo6QWRkcmVz
czogewotICAgICAgICBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjcHUuZ3ByKG1l
bW9yeS51LmFkZHJlc3MuYmFzZSkpOworICAgICAgICBwdHIgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihjb250ZXh0LnByb2JlQ29udGV4dC5ncHIobWVtb3J5LnUuYWRkcmVzcy5iYXNlKSk7
CiAgICAgICAgIHB0ciArPSBtZW1vcnkudS5hZGRyZXNzLm9mZnNldDsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMTMzLDIyICsxNTIsMjIgQEAgdm9pZCBwcmludE1lbW9yeShDUFVTdGF0ZSYg
Y3B1LCBjb25zdCBNZQogICAgIGlmIChtZW1vcnkuZHVtcFN0eWxlID09IE1lbW9yeTo6U2luZ2xl
V29yZER1bXApIHsKICAgICAgICAgaWYgKG1lbW9yeS5udW1CeXRlcyA9PSBzaXplb2YoaW50OF90
KSkgewogICAgICAgICAgICAgYXV0byBwID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihwdHIp
OwotICAgICAgICAgICAgZGF0YUxvZ0YoIiVwOjwweCUwMnggJWQ+IiwgcCwgKnAsICpwKTsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiVwOjwweCUwMnggJWQ+IiwgcCwgKnAsICpwKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAobWVtb3J5Lm51bUJ5dGVzID09
IHNpemVvZihpbnQxNl90KSkgewogICAgICAgICAgICAgYXV0byBwID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnQxNl90Kj4ocHRyKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIlcDo8MHglMDR4ICVkPiIs
IHAsICpwLCAqcCk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcDo8MHglMDR4ICVkPiIsIHAs
ICpwLCAqcCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1l
bW9yeS5udW1CeXRlcyA9PSBzaXplb2YoaW50MzJfdCkpIHsKICAgICAgICAgICAgIGF1dG8gcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHB0cik7Ci0gICAgICAgICAgICBkYXRhTG9nRigi
JXA6PDB4JTA4eCAlZD4iLCBwLCAqcCwgKnApOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXA6
PDB4JTA4eCAlZD4iLCBwLCAqcCwgKnApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIGlmIChtZW1vcnkubnVtQnl0ZXMgPT0gc2l6ZW9mKGludDY0X3QpKSB7CiAgICAg
ICAgICAgICBhdXRvIHAgPSByZWludGVycHJldF9jYXN0PGludDY0X3QqPihwdHIpOwotICAgICAg
ICAgICAgZGF0YUxvZ0YoIiVwOjwweCUwMTZsbHggJWxsZD4iLCBwLCAqcCwgKnApOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXA6PDB4JTAxNmxseCAlbGxkPiIsIHAsICpwLCAqcCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRWxzZSwgdW5rbm93biB3b3Jk
IHNpemUuIEZhbGwgdGhydSBhbmQgZHVtcCBpbiB0aGUgZ2VuZXJpYyB3YXkuCkBAIC0xNTgsNTgg
KzE3NywzMSBAQCB2b2lkIHByaW50TWVtb3J5KENQVVN0YXRlJiBjcHUsIGNvbnN0IE1lCiAgICAg
c2l6ZV90IG51bUJ5dGVzID0gbWVtb3J5Lm51bUJ5dGVzOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtQnl0ZXM7IGkrKykgewogICAgICAgICBpZiAoIShpICUgMTYpKQotICAgICAgICAg
ICAgZGF0YUxvZ0YoIiVwOiAiLCAmcHRyW2ldKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVw
OiAiLCAmcHRyW2ldKTsKICAgICAgICAgZWxzZSBpZiAoIShpICUgNCkpCi0gICAgICAgICAgICBk
YXRhTG9nKCIgIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIgIik7CiAKLSAgICAgICAgZGF0
YUxvZ0YoIiUwMngiLCBwdHJbaV0pOworICAgICAgICBvdXQucHJpbnRmKCIlMDJ4IiwgcHRyW2ld
KTsKIAogICAgICAgICBpZiAoaSAlIDE2ID09IDE1KQotICAgICAgICAgICAgZGF0YUxvZygiXG4i
KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9CiAgICAgaWYgKG51bUJ5dGVz
ICUgMTYgPCAxNSkKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KCJc
biIpOwogfQogCi12b2lkIE1hY3JvQXNzZW1ibGVyUHJpbnRlcjo6cHJpbnRDYWxsYmFjayhQcm9i
ZUNvbnRleHQqIGNvbnRleHQpCit2b2lkIHByaW50Q2FsbGJhY2soUHJvYmVDb250ZXh0KiBwcm9i
ZUNvbnRleHQpCiB7Ci0gICAgdHlwZWRlZiBQcmludEFyZyBBcmc7Ci0gICAgUHJpbnRBcmdzTGlz
dCYgYXJnc0xpc3QgPQotICAgICpyZWludGVycHJldF9jYXN0PFByaW50QXJnc0xpc3QqPihjb250
ZXh0LT5hcmcpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnc0xpc3Quc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgYXV0byYgYXJnID0gYXJnc0xpc3RbaV07Ci0gICAgICAgIHN3aXRjaCAo
YXJnLnR5cGUpIHsKLSAgICAgICAgY2FzZSBBcmc6OlR5cGU6OkFsbFJlZ2lzdGVyczoKLSAgICAg
ICAgICAgIHByaW50Q1BVKGNvbnRleHQtPmNwdSwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcmc6OlR5cGU6OlBDUmVnaXN0ZXI6Ci0gICAgICAgICAgICBwcmludFBDKGNv
bnRleHQtPmNwdSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcmc6OlR5cGU6
OlJlZ2lzdGVySUQ6Ci0gICAgICAgICAgICBwcmludFJlZ2lzdGVyKGNvbnRleHQtPmNwdSwgYXJn
LnUuZ3BSZWdpc3RlcklEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyZzo6
VHlwZTo6RlBSZWdpc3RlcklEOgotICAgICAgICAgICAgcHJpbnRSZWdpc3Rlcihjb250ZXh0LT5j
cHUsIGFyZy51LmZwUmVnaXN0ZXJJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcmc6OlR5cGU6Ok1lbW9yeToKLSAgICAgICAgICAgIHByaW50TWVtb3J5KGNvbnRleHQtPmNw
dSwgYXJnLnUubWVtb3J5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyZzo6
VHlwZTo6Q29uc3RDaGFyUHRyOgotICAgICAgICAgICAgZGF0YUxvZyhhcmcudS5jb25zdENoYXJQ
dHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJnOjpUeXBlOjpDb25zdFZv
aWRQdHI6Ci0gICAgICAgICAgICBkYXRhTG9nRigiJXAiLCBhcmcudS5jb25zdFZvaWRQdHIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJnOjpUeXBlOjpJbnRwdHJWYWx1ZToK
LSAgICAgICAgICAgIGRhdGFMb2coYXJnLnUuaW50cHRyVmFsdWUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJnOjpUeXBlOjpVaW50cHRyVmFsdWU6Ci0gICAgICAgICAgICBk
YXRhTG9nKGFyZy51LnVpbnRwdHJWYWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQorICAgIGF1dG8mIG91dCA9IFdURjo6ZGF0YUZpbGUoKTsKKyAgICBQcmludFJlY29yZExpc3Qm
IGxpc3QgPSAqcmVpbnRlcnByZXRfY2FzdDxQcmludFJlY29yZExpc3QqPihwcm9iZUNvbnRleHQt
PmFyZyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIGF1dG8mIHJlY29yZCA9IGxpc3RbaV07CisgICAgICAgIENvbnRleHQgY29udGV4dCgq
cHJvYmVDb250ZXh0LCByZWNvcmQuZGF0YSk7CisgICAgICAgIHJlY29yZC5wcmludGVyKG91dCwg
Y29udGV4dCk7CiAgICAgfQogfQogCit9IC8vIG5hbWVzcGFjZSBQcmludGVyCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShNQVNNX1BST0JFKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUHJpbnRl
ci5oCShyZXZpc2lvbiAyMTU2MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyUHJpbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAi
UHJpbnRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTQsMTkgKzU1LDIwIEBAIG5hbWVz
cGFjZSBKU0MgewogLy8gICAgICBqaXQucHJpbnQoIkhlbGxvIHdvcmxkXG4iKTsgLy8gRW1pdHMg
Y29kZSB0byBwcmludCB0aGUgc3RyaW5nLgogLy8KIC8vICAgICAgQ29kZUJsb2NrKiBjYiA9IC4u
LjsKLS8vICAgICAgaml0LnByaW50KGNiLCAiXG4iKTsgICAgICAgIC8vIEVtaXRzIGNvZGUgdG8g
cHJpbnQgdGhlIHBvaW50ZXIgdmFsdWUuCisvLyAgICAgIGppdC5wcmludChjYiwgIlxuIik7ICAg
ICAgICAgICAgIC8vIEVtaXRzIGNvZGUgdG8gcHJpbnQgdGhlIGNvZGVCbG9jayB2YWx1ZS4KKy8v
ICAgICAgaml0LnByaW50KFJhd1BvaW50ZXIoY2IpLCAiXG4iKTsgLy8gRW1pdHMgY29kZSB0byBw
cmludCB0aGUgcG9pbnRlciB2YWx1ZS4KIC8vCiAvLyAgICAgIFJlZ2lzdGVySUQgcmVnSUQgPSAu
Li47CiAvLyAgICAgIGppdC5wcmludChyZWdJRCwgIlxuIik7ICAgICAvLyBFbWl0cyBjb2RlIHRv
IHByaW50IHRoZSByZWdpc3RlciB2YWx1ZSAobm90IHRoZSBpZCkuCiAvLwogLy8gICAgICAvLyBF
bWl0cyBjb2RlIHRvIHByaW50IGFsbCByZWdpc3RlcnMuIFVubGlrZSBvdGhlciBpdGVtcywgdGhp
cyBwcmludHMKIC8vICAgICAgLy8gbXVsdGlwbGUgbGluZXMgYXMgZm9sbG93czoKLS8vICAgICAg
Ly8gICAgICBjcHUgewotLy8gICAgICAvLyAgICAgICAgICBlYXg6IDB4MTIzNDU2Nzg5Ci0vLyAg
ICAgIC8vICAgICAgICAgIGVieDogMHgwMDAwMDBhYmMKLS8vICAgICAgLy8gICAgICAgICAgLi4u
Ci0vLyAgICAgIC8vICAgICAgfQotLy8gICAgICBqaXQucHJpbnQoQWxsUmVnaXN0ZXJzKCkpOwor
Ly8gICAgICAvLyAgICAgY3B1IHsKKy8vICAgICAgLy8gICAgICAgICBlYXg6IDB4MTIzNDU2Nzg5
CisvLyAgICAgIC8vICAgICAgICAgZWJ4OiAweDAwMDAwMGFiYworLy8gICAgICAvLyAgICAgICAg
IC4uLgorLy8gICAgICAvLyAgICAgfQorLy8gICAgICBqaXQucHJpbnQoQWxsUmVnaXN0ZXJzKDQp
KTsgLy8gVGhlIDQgaGVyZSBpcyBmb3IgYW4gaW5kZW50YXRpb24gb2YgNCBjaGFyYWN0ZXJzLgog
Ly8KIC8vICAgICAgaml0LnByaW50KE1lbVdvcmQ8dWludDhfdD4ocmVnSUQpLCAiXG4iKTsgICAv
LyBFbWl0cyBjb2RlIHRvIHByaW50IGEgYnl0ZSBwb2ludGVkIHRvIGJ5IHRoZSByZWdpc3Rlci4K
IC8vICAgICAgaml0LnByaW50KE1lbVdvcmQ8dWludDMyX3Q+KHJlZ0lEKSwgIlxuIik7ICAvLyBF
bWl0cyBjb2RlIHRvIHByaW50IGEgMzItYml0IHdvcmQgcG9pbnRlZCB0byBieSB0aGUgcmVnaXN0
ZXIuCkBAIC04MSwxNSArODMsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyAgICAgIC8vIHRvIHBy
aW50IGFsbCB0aGUgaXRlbXMuCiAvLyAgICAgIGppdC5wcmludCgiY2I6IiwgY2IsICIgcmVnSUQ6
IiwgcmVnSUQsICIgY3B1OlxuIiwgQWxsUmVnaXN0ZXJzKCkpOwogLy8KLS8vICAgVGhlIHR5cGUg
b2YgdmFsdWVzIHRoYXQgY2FuIGJlIHByaW50ZWQgaXMgZW5jYXBzdWxhdGVkIGluIHRoZSBQcmlu
dEFyZyBzdHJ1Y3QgYmVsb3cuCisvLyAgIFRoZSB0eXBlIG9mIHZhbHVlcyB0aGF0IGNhbiBiZSBw
cmludGVkIGlzIGRldGVybWluZSBieSB0aGUgYXZhaWxhYmlsaXR5IG9mIGEKKy8vICAgc3BlY2lh
bGl6ZWQgUHJpbnRlciB0ZW1wbGF0ZSwgb3IgYSBzZXRQcmludGVyKCkgZnVuY3Rpb24gZm9yIHRo
ZSB2YWx1ZSB0eXBlLgogLy8KIC8vICAgTm90ZTogcHJpbnQoKSBkb2VzIG5vdCBhdXRvbWF0aWNh
bGx5IGluc2VydCBhICdcbicgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KIC8vICAgSWYgeW91IHdh
bnQgYSAnXG4nLCB5b3UnbGwgaGF2ZSB0byBhZGQgaXQgZXhwbGljaXRseSAoYXMgaW4gdGhlIGV4
YW1wbGVzIGFib3ZlKS4KIAogCi0vLyBUaGlzIGlzIGEgbWFya2VyIHR5cGUgb25seSB1c2VkIHdp
dGggTWFjcm9Bc3NlbWJsZXJQcmludGVyOjpwcmludCgpLgotLy8gU2VlIE1hY3JvQXNzZW1ibGVy
UHJpbnRlcjo6cHJpbnQoKSBiZWxvdyBmb3IgZGV0YWlscy4KLXN0cnVjdCBBbGxSZWdpc3RlcnMg
eyB9Oworc3RydWN0IEFsbFJlZ2lzdGVycyB7CisgICAgQWxsUmVnaXN0ZXJzKGludCBjaGFyc1Rv
SW5kZW50ID0gMCkKKyAgICAgICAgOiBjaGFyc1RvSW5kZW50KGNoYXJzVG9JbmRlbnQpCisgICAg
eyB9CisgICAgaW50IGNoYXJzVG9JbmRlbnQ7Cit9Owogc3RydWN0IFBDUmVnaXN0ZXIgeyB9Owog
CiBzdHJ1Y3QgTWVtb3J5IHsKQEAgLTE1NywxNTEgKzE2Myw4OCBAQCBzdHJ1Y3QgTWVtV29yZCA6
IHB1YmxpYyBNZW1vcnkgewogICAgIHsgfQogfTsKIAorbmFtZXNwYWNlIFByaW50ZXIgewogCi1j
bGFzcyBNYWNyb0Fzc2VtYmxlclByaW50ZXIgewotICAgIHVzaW5nIENQVVN0YXRlID0gTWFjcm9B
c3NlbWJsZXI6OkNQVVN0YXRlOwotICAgIHVzaW5nIFJlZ2lzdGVySUQgPSBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRDsKLSAgICB1c2luZyBGUFJlZ2lzdGVySUQgPSBNYWNyb0Fzc2VtYmxlcjo6
RlBSZWdpc3RlcklEOwotICAgIAotcHVibGljOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KLSAgICBzdGF0aWMgdm9pZCBwcmludChNYWNyb0Fzc2VtYmxlciogbWFzbSwgQXJn
dW1lbnRzLi4uIGFyZ3MpCi0gICAgewotICAgICAgICBhdXRvIGFyZ3NMaXN0ID0gc3RkOjptYWtl
X3VuaXF1ZTxQcmludEFyZ3NMaXN0PigpOwotICAgICAgICBhcHBlbmRQcmludEFyZyhhcmdzTGlz
dC5nZXQoKSwgYXJncy4uLik7Ci0gICAgICAgIG1hc20tPnByb2JlKHByaW50Q2FsbGJhY2ssIGFy
Z3NMaXN0LnJlbGVhc2UoKSk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgUHJp
bnRBcmcgeworLy8gQWRkIHNvbWUgc3BlY2lhbGl6ZWQgcHJpbnRlcnMuCiAKLSAgICAgICAgZW51
bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgICAgIEFsbFJlZ2lzdGVycywKLSAgICAgICAgICAgIFBD
UmVnaXN0ZXIsCi0gICAgICAgICAgICBSZWdpc3RlcklELAotICAgICAgICAgICAgRlBSZWdpc3Rl
cklELAotICAgICAgICAgICAgTWVtb3J5LAotICAgICAgICAgICAgQ29uc3RDaGFyUHRyLAotICAg
ICAgICAgICAgQ29uc3RWb2lkUHRyLAotICAgICAgICAgICAgSW50cHRyVmFsdWUsCi0gICAgICAg
ICAgICBVaW50cHRyVmFsdWUsCi0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBQcmludEFy
ZyhBbGxSZWdpc3RlcnMmKQotICAgICAgICAgICAgOiB0eXBlKFR5cGU6OkFsbFJlZ2lzdGVycykK
LSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBQcmludEFyZyhQQ1JlZ2lz
dGVyJikKLSAgICAgICAgICAgIDogdHlwZShUeXBlOjpQQ1JlZ2lzdGVyKQotICAgICAgICB7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFByaW50QXJnKFJlZ2lzdGVySUQgcmVnSUQpCi0g
ICAgICAgICAgICA6IHR5cGUoVHlwZTo6UmVnaXN0ZXJJRCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdS5ncFJlZ2lzdGVySUQgPSByZWdJRDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
UHJpbnRBcmcoRlBSZWdpc3RlcklEIHJlZ0lEKQotICAgICAgICAgICAgOiB0eXBlKFR5cGU6OkZQ
UmVnaXN0ZXJJRCkKLSAgICAgICAgewotICAgICAgICAgICAgdS5mcFJlZ2lzdGVySUQgPSByZWdJ
RDsKLSAgICAgICAgfQotCi0gICAgICAgIFByaW50QXJnKGNvbnN0IE1lbW9yeSYgbWVtb3J5KQot
ICAgICAgICAgICAgOiB0eXBlKFR5cGU6Ok1lbW9yeSkKLSAgICAgICAgewotICAgICAgICAgICAg
dS5tZW1vcnkgPSBtZW1vcnk7Ci0gICAgICAgIH0KLQotICAgICAgICBQcmludEFyZyhjb25zdCBj
aGFyKiBwdHIpCi0gICAgICAgICAgICA6IHR5cGUoVHlwZTo6Q29uc3RDaGFyUHRyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB1LmNvbnN0Q2hhclB0ciA9IHB0cjsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgUHJpbnRBcmcoY29uc3Qgdm9pZCogcHRyKQotICAgICAgICAgICAgOiB0eXBl
KFR5cGU6OkNvbnN0Vm9pZFB0cikKLSAgICAgICAgewotICAgICAgICAgICAgdS5jb25zdFZvaWRQ
dHIgPSBwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFByaW50QXJnKGludCB2YWx1
ZSkKLSAgICAgICAgICAgIDogdHlwZShUeXBlOjpJbnRwdHJWYWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgdS5pbnRwdHJWYWx1ZSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBQcmludEFyZyh1bnNpZ25lZCB2YWx1ZSkKLSAgICAgICAgICAgIDogdHlwZShUeXBlOjpV
aW50cHRyVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHUuaW50cHRyVmFsdWUgPSB2YWx1
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUHJpbnRBcmcoaW50cHRyX3QgdmFsdWUp
Ci0gICAgICAgICAgICA6IHR5cGUoVHlwZTo6SW50cHRyVmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHUuaW50cHRyVmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgUHJpbnRBcmcodWludHB0cl90IHZhbHVlKQotICAgICAgICAgICAgOiB0eXBlKFR5cGU6OlVp
bnRwdHJWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdS51aW50cHRyVmFsdWUgPSB2YWx1
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVHlwZSB0eXBlOwotICAgICAgICB1bmlv
biBWYWx1ZSB7Ci0gICAgICAgICAgICBWYWx1ZSgpIHsgfQotCi0gICAgICAgICAgICBSZWdpc3Rl
cklEIGdwUmVnaXN0ZXJJRDsKLSAgICAgICAgICAgIEZQUmVnaXN0ZXJJRCBmcFJlZ2lzdGVySUQ7
Ci0gICAgICAgICAgICBNZW1vcnkgbWVtb3J5OwotICAgICAgICAgICAgY29uc3QgY2hhciogY29u
c3RDaGFyUHRyOwotICAgICAgICAgICAgY29uc3Qgdm9pZCogY29uc3RWb2lkUHRyOwotICAgICAg
ICAgICAgaW50cHRyX3QgaW50cHRyVmFsdWU7Ci0gICAgICAgICAgICB1aW50cHRyX3QgdWludHB0
clZhbHVlOwotICAgICAgICB9IHU7Ci0gICAgfTsKK3ZvaWQgcHJpbnRBbGxSZWdpc3RlcnMoUHJp
bnRTdHJlYW0mLCBDb250ZXh0Jik7Cit2b2lkIHByaW50UENSZWdpc3RlcihQcmludFN0cmVhbSYs
IENvbnRleHQmKTsKK3ZvaWQgcHJpbnRSZWdpc3RlcklEKFByaW50U3RyZWFtJiwgQ29udGV4dCYp
Owordm9pZCBwcmludEZQUmVnaXN0ZXJJRChQcmludFN0cmVhbSYsIENvbnRleHQmKTsKK3ZvaWQg
cHJpbnRBZGRyZXNzKFByaW50U3RyZWFtJiwgQ29udGV4dCYpOwordm9pZCBwcmludE1lbW9yeShQ
cmludFN0cmVhbSYsIENvbnRleHQmKTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8QWxs
UmVnaXN0ZXJzPiA6IHB1YmxpYyBQcmludFJlY29yZCB7CisgICAgUHJpbnRlcihBbGxSZWdpc3Rl
cnMgYWxsUmVnaXN0ZXJzKQorICAgICAgICA6IFByaW50UmVjb3JkKHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oYWxsUmVnaXN0ZXJzLmNoYXJzVG9JbmRlbnQpLCBwcmludEFsbFJlZ2lzdGVycykKKyAg
ICB7IH0KK307CiAKLSAgICB0eXBlZGVmIFZlY3RvcjxQcmludEFyZz4gUHJpbnRBcmdzTGlzdDsK
LSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdEFyZywgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgotICAgIHN0YXRpYyB2b2lkIGFwcGVuZFByaW50QXJnKFByaW50QXJnc0xpc3QqIGFyZ3NM
aXN0LCBGaXJzdEFyZyYgZmlyc3RBcmcsIEFyZ3VtZW50cy4uLiBvdGhlckFyZ3MpCi0gICAgewot
ICAgICAgICBhcmdzTGlzdC0+YXBwZW5kKFByaW50QXJnKGZpcnN0QXJnKSk7Ci0gICAgICAgIGFw
cGVuZFByaW50QXJnKGFyZ3NMaXN0LCBvdGhlckFyZ3MuLi4pOwotICAgIH0KLSAgICAKLSAgICBz
dGF0aWMgdm9pZCBhcHBlbmRQcmludEFyZyhQcmludEFyZ3NMaXN0KikgeyB9Cit0ZW1wbGF0ZTw+
CitzdHJ1Y3QgUHJpbnRlcjxQQ1JlZ2lzdGVyPiA6IHB1YmxpYyBQcmludFJlY29yZCB7CisgICAg
UHJpbnRlcihQQ1JlZ2lzdGVyJikKKyAgICAgICAgOiBQcmludFJlY29yZChwcmludFBDUmVnaXN0
ZXIpCisgICAgeyB9Cit9OwogCi1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHByaW50Q2FsbGJh
Y2soUHJvYmVDb250ZXh0Kik7Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgUHJpbnRlcjxNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRD4gOiBwdWJsaWMgUHJpbnRSZWNvcmQgeworICAgIFByaW50ZXIoTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaWQpCisgICAgICAgIDogUHJpbnRSZWNvcmQoc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihpZCksIHByaW50UmVnaXN0ZXJJRCkKKyAgICB7IH0KIH07CiAKK3Rl
bXBsYXRlPD4KK3N0cnVjdCBQcmludGVyPE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+IDog
cHVibGljIFByaW50UmVjb3JkIHsKKyAgICBQcmludGVyKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lz
dGVySUQgaWQpCisgICAgICAgIDogUHJpbnRSZWNvcmQoc3RhdGljX2Nhc3Q8dWludHB0cl90Pihp
ZCksIHByaW50RlBSZWdpc3RlcklEKQorICAgIHsgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0
IFByaW50ZXI8TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3M+IDogcHVibGljIFByaW50UmVjb3JkIHsK
KyAgICBQcmludGVyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MpCisgICAgICAgIDog
UHJpbnRSZWNvcmQoRGF0YSgmYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpKSwgcHJpbnRBZGRyZXNz
KQorICAgIHsgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8TWVtb3J5PiA6IHB1
YmxpYyBQcmludFJlY29yZCB7CisgICAgUHJpbnRlcihNZW1vcnkgbWVtb3J5KQorICAgICAgICA6
IFByaW50UmVjb3JkKERhdGEoJm1lbW9yeSwgc2l6ZW9mKG1lbW9yeSkpLCBwcmludE1lbW9yeSkK
KyAgICB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+CitzdHJ1Y3QgUHJpbnRl
cjxNZW1Xb3JkPEludFR5cGU+PiA6IHB1YmxpYyBQcmludGVyPE1lbW9yeT4geworICAgIFByaW50
ZXIoTWVtV29yZDxJbnRUeXBlPiB3b3JkKQorICAgICAgICA6IFByaW50ZXI8TWVtb3J5Pih3b3Jk
KQorICAgIHsgfQorfTsKKwordm9pZCBwcmludENhbGxiYWNrKFByb2JlQ29udGV4dCopOworCit9
IC8vIG5hbWVzcGFjZSBQcmludGVyCisKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
LXZvaWQgTWFjcm9Bc3NlbWJsZXI6OnByaW50KEFyZ3VtZW50cy4uLiBhcmdzKQoraW5saW5lIHZv
aWQgTWFjcm9Bc3NlbWJsZXI6OnByaW50KEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKIHsKLSAg
ICBNYWNyb0Fzc2VtYmxlclByaW50ZXI6OnByaW50KHRoaXMsIGFyZ3MuLi4pOworICAgIGF1dG8g
cHJpbnRSZWNvcmRMaXN0ID0gUHJpbnRlcjo6bWFrZVByaW50UmVjb3JkTGlzdChzdGQ6OmZvcndh
cmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICBwcm9iZShQcmludGVyOjpwcmludENh
bGxiYWNrLCBwcmludFJlY29yZExpc3QpOwogfQogCi0KLS8vIFRoZXNlIHByaW50ZXJzIHdpbGwg
cHJpbnQgYSBibG9jayBvZiBpbmZvcm1hdGlvbi4gVGhhdCBibG9jayBtYXkgYmUKLS8vIGluZGVu
dGVkIHdpdGggdGhlIHNwZWNpZmllZCBpbmRlbnRhdGlvbi4KLXZvaWQgcHJpbnRDUFUoTWFjcm9B
c3NlbWJsZXI6OkNQVVN0YXRlJiwgaW50IGluZGVudGF0aW9uID0gMCk7Ci12b2lkIHByaW50Q1BV
UmVnaXN0ZXJzKE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZSYsIGludCBpbmRlbnRhdGlvbiA9IDAp
OwotCi0vLyBUaGVzZSBwcmludGVycyB3aWxsIHByaW50IHRoZSBzcGVjaWZpZWQgaW5mb3JtYXRp
b24gaW4gbGluZSBpbiB0aGUKLS8vIHByaW50IHN0cmVhbS4gSGVuY2UsIG5vIGluZGVudGF0aW9u
IHdpbGwgYmUgYXBwbGllZC4KLXZvaWQgcHJpbnRSZWdpc3RlcihNYWNyb0Fzc2VtYmxlcjo6Q1BV
U3RhdGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCk7Ci12b2lkIHByaW50UmVnaXN0ZXIo
TWFjcm9Bc3NlbWJsZXI6OkNQVVN0YXRlJiwgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCk7
Ci12b2lkIHByaW50TWVtb3J5KE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZSYsIGNvbnN0IE1lbW9y
eSYpOworaW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OnByaW50KFByaW50ZXI6OlByaW50UmVj
b3JkTGlzdCogcHJpbnRSZWNvcmRMaXN0KQoreworICAgIHByb2JlKFByaW50ZXI6OnByaW50Q2Fs
bGJhY2ssIHByaW50UmVjb3JkTGlzdCk7Cit9CiAKICNlbHNlIC8vIEVOQUJMRShNQVNNX1BST0JF
KQogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci12b2lkIE1hY3JvQXNzZW1ibGVy
OjpwcmludChBcmd1bWVudHMuLi4pIHsgfQoraW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBy
aW50KEFyZ3VtZW50cyYmLi4uKSB7IH0KKworaW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBy
aW50KFByaW50ZXI6OlByaW50UmVjb3JkTGlzdCopIHsgfQogCiAjZW5kaWYgLy8gRU5BQkxFKE1B
U01fUFJPQkUpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcmlu
dGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1ByaW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUHJpbnRlci5oIgorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBQcmludGVy
IHsKKwordm9pZCBwcmludENvbnN0Q2hhclN0cmluZyhQcmludFN0cmVhbSYgb3V0LCBDb250ZXh0
JiBjb250ZXh0KQoreworICAgIGNvbnN0IGNoYXIqIHN0ciA9IGNvbnRleHQuZGF0YS5hczxjb25z
dCBjaGFyKj4oKTsKKyAgICBvdXQucHJpbnQoc3RyKTsKK30KKwordm9pZCBwcmludEludHB0cihQ
cmludFN0cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQoreworICAgIG91dC5wcmludChjb250
ZXh0LmRhdGEuYXM8aW50cHRyX3Q+KCkpOworfQorCit2b2lkIHByaW50VWludHB0cihQcmludFN0
cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQoreworICAgIG91dC5wcmludChjb250ZXh0LmRh
dGEuYXM8dWludHB0cl90PigpKTsKK30KKwordm9pZCBwcmludFBvaW50ZXIoUHJpbnRTdHJlYW0m
IG91dCwgQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihjb250
ZXh0LmRhdGEuYXM8Y29uc3Qgdm9pZCo+KCkpKTsKK30KKwordm9pZCBzZXRQcmludGVyKFByaW50
UmVjb3JkJiByZWNvcmQsIENTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgLy8gRklYTUU6IEl0IHdv
dWxkIGJlIG5pY2UgaWYgd2UgY2FuIHJlbGVhc2UgdGhlIENTdHJpbmdCdWZmZXIgZnJvbSB0aGUg
Q1N0cmluZworICAgIC8vIGFuZCB0YWtlIG93bmVyc2hpcCBvZiBpdCBoZXJlIGluc3RlYWQgb2Yg
Y29weWluZyBpdCBhZ2Fpbi4KKyAgICByZWNvcmQuZGF0YS5wb2ludGVyID0gZmFzdFN0ckR1cChz
dHJpbmcuZGF0YSgpKTsKKyAgICByZWNvcmQucHJpbnRlciA9IHByaW50Q29uc3RDaGFyU3RyaW5n
OworfQorCit9IC8vIG5hbWVzcGFjZSBQcmludGVyCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRlci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgUHJvYmVDb250ZXh0OworCituYW1lc3Bh
Y2UgUHJpbnRlciB7CisKK3N0cnVjdCBDb250ZXh0OworCit1bmlvbiBEYXRhIHsKKyAgICBEYXRh
KCkgeyB9CisgICAgRGF0YSh1aW50cHRyX3QgdmFsdWUpCisgICAgICAgIDogdmFsdWUodmFsdWUp
CisgICAgeyB9CisgICAgRGF0YShjb25zdCB2b2lkKiBwb2ludGVyKQorICAgICAgICA6IHBvaW50
ZXIocG9pbnRlcikKKyAgICB7IH0KKyAgICBEYXRhKHZvaWQqIHNyYywgc2l6ZV90IHNpemUpCisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplIDw9IHNpemVvZihidWZmZXIpKTsKKyAg
ICAgICAgbWVtY3B5KGJ1ZmZlciwgc3JjLCBzaXplKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50
ZWdyYWw8VD46OnZhbHVlPjo6dHlwZT4KKyAgICBUIGFzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3BvaW50
ZXI8VD46OnZhbHVlPjo6dHlwZT4KKyAgICBjb25zdCBUIGFzKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQ+KHBvaW50ZXIpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8IXN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlICYmICFzdGQ6OmlzX3BvaW50ZXI8VD46OnZh
bHVlPjo6dHlwZT4KKyAgICBjb25zdCBUJiBhcygpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihUKSA8PSBzaXplb2YoYnVmZmVyKSwgInNpemUgaXMgbm90IHNhbmUi
KTsKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IFQqPigmYnVmZmVyKTsK
KyAgICB9CisKKyAgICB1aW50cHRyX3QgdmFsdWU7CisgICAgY29uc3Qgdm9pZCogcG9pbnRlcjsK
KyAgICB1aW50cHRyX3QgYnVmZmVyWzRdOworfTsKKworc3RydWN0IENvbnRleHQgeworICAgIENv
bnRleHQoUHJvYmVDb250ZXh0JiBwcm9iZUNvbnRleHQsIERhdGEmIGRhdGEpCisgICAgICAgIDog
cHJvYmVDb250ZXh0KHByb2JlQ29udGV4dCkKKyAgICAgICAgLCBkYXRhKGRhdGEpCisgICAgeyB9
CisKKyAgICBQcm9iZUNvbnRleHQmIHByb2JlQ29udGV4dDsKKyAgICBEYXRhJiBkYXRhOworfTsK
KwordHlwZWRlZiB2b2lkICgqQ2FsbGJhY2spKFByaW50U3RyZWFtJiwgQ29udGV4dCYpOworCitz
dHJ1Y3QgUHJpbnRSZWNvcmQgeworICAgIFByaW50UmVjb3JkKERhdGEgZGF0YSwgQ2FsbGJhY2sg
cHJpbnRlcikKKyAgICAgICAgOiBkYXRhKGRhdGEpCisgICAgICAgICwgcHJpbnRlcihwcmludGVy
KQorICAgIHsgfQorCisgICAgUHJpbnRSZWNvcmQoQ2FsbGJhY2sgcHJpbnRlcikKKyAgICAgICAg
OiBwcmludGVyKHByaW50ZXIpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFz
cz4gY2xhc3MgUHJpbnRlciwgdHlwZW5hbWUgVD4KKyAgICBQcmludFJlY29yZChjb25zdCBQcmlu
dGVyPFQ+JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mPFByaW50UmVjb3JkLCBQcmludGVyPFQ+Pjo6dmFsdWUsICJQcmludGVyIHNob3VsZCBleHRl
bmQgUHJpbnRSZWNvcmQiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoUHJpbnRSZWNv
cmQpID09IHNpemVvZihQcmludGVyPFQ+KSwgIlByaW50ZXIgc2hvdWxkIGJlIHRoZSBzYW1lIHNp
emUgYXMgUHJpbnRSZWNvcmQiKTsKKyAgICAgICAgZGF0YSA9IG90aGVyLmRhdGE7CisgICAgICAg
IHByaW50ZXIgPSBvdGhlci5wcmludGVyOworICAgIH0KKworICAgIERhdGEgZGF0YTsKKyAgICBD
YWxsYmFjayBwcmludGVyOworCitwcm90ZWN0ZWQ6CisgICAgUHJpbnRSZWNvcmQoKSB7IH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBQcmludGVyOworCit0eXBlZGVmIFZlY3Rv
cjxQcmludFJlY29yZD4gUHJpbnRSZWNvcmRMaXN0OworCitpbmxpbmUgdm9pZCBhcHBlbmRQcmlu
dGVyKFByaW50UmVjb3JkTGlzdCYpIHsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdCwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgoraW5saW5lIHZvaWQgYXBwZW5kUHJpbnRlcihQcmludFJlY29y
ZExpc3QmIHByaW50UmVjb3JkTGlzdCwgRmlyc3QgZmlyc3QsIEFyZ3VtZW50cyYmLi4uIG90aGVy
cykKK3sKKyAgICBwcmludFJlY29yZExpc3QuYXBwZW5kKFByaW50ZXI8Rmlyc3Q+KGZpcnN0KSk7
CisgICAgYXBwZW5kUHJpbnRlcihwcmludFJlY29yZExpc3QsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KG90aGVycykuLi4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Citp
bmxpbmUgUHJpbnRSZWNvcmRMaXN0KiBtYWtlUHJpbnRSZWNvcmRMaXN0KEFyZ3VtZW50cyYmLi4u
IGFyZ3VtZW50cykKK3sKKyAgICBhdXRvIHByaW50UmVjb3JkTGlzdCA9IG5ldyBQcmludFJlY29y
ZExpc3QoKTsKKyAgICBhcHBlbmRQcmludGVyKCpwcmludFJlY29yZExpc3QsIHN0ZDo6Zm9yd2Fy
ZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIHJldHVybiBwcmludFJlY29yZExpc3Q7
Cit9CisKKy8vIFNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHNwZWNpYWxpemluZyBwcmludGVy
cy4KKwordm9pZCBwcmludENvbnN0Q2hhclN0cmluZyhQcmludFN0cmVhbSYsIENvbnRleHQmKTsK
K3ZvaWQgcHJpbnRJbnRwdHIoUHJpbnRTdHJlYW0mLCBDb250ZXh0Jik7Cit2b2lkIHByaW50VWlu
dHB0cihQcmludFN0cmVhbSYsIENvbnRleHQmKTsKK3ZvaWQgcHJpbnRQb2ludGVyKFByaW50U3Ry
ZWFtJiwgQ29udGV4dCYpOworCit2b2lkIHNldFByaW50ZXIoUHJpbnRSZWNvcmQmLCBDU3RyaW5n
JiYpOworCisvLyBTcGVjaWFsaXplZCBwcmludGVycy4KKwordGVtcGxhdGU8Pgorc3RydWN0IFBy
aW50ZXI8Y29uc3QgY2hhcio+IDogcHVibGljIFByaW50UmVjb3JkIHsKKyAgICBQcmludGVyKGNv
bnN0IGNoYXIqIHN0cikKKyAgICAgICAgOiBQcmludFJlY29yZChzdHIsIHByaW50Q29uc3RDaGFy
U3RyaW5nKQorICAgIHsgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8Y2hhcio+
IDogcHVibGljIFByaW50ZXI8Y29uc3QgY2hhcio+IHsKKyAgICBQcmludGVyKGNoYXIqIHN0cikK
KyAgICAgICAgOiBQcmludGVyPGNvbnN0IGNoYXIqPihzdHIpCisgICAgeyB9Cit9OworCit0ZW1w
bGF0ZTw+CitzdHJ1Y3QgUHJpbnRlcjxSYXdQb2ludGVyPiA6IHB1YmxpYyBQcmludFJlY29yZCB7
CisgICAgUHJpbnRlcihSYXdQb2ludGVyIHJhd1BvaW50ZXIpCisgICAgICAgIDogUHJpbnRSZWNv
cmQocmF3UG9pbnRlci52YWx1ZSgpLCBwcmludFBvaW50ZXIpCisgICAgeyB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNfc2ln
bmVkPj4KK3ZvaWQgc2V0UHJpbnRlcihQcmludFJlY29yZCYgcmVjb3JkLCBUIHZhbHVlLCBpbnRw
dHJfdCA9IDApCit7CisgICAgcmVjb3JkLmRhdGEudmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KHZhbHVlKTsKKyAgICByZWNvcmQucHJpbnRlciA9IHByaW50SW50cHRyOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3Np
Z25lZD4+Cit2b2lkIHNldFByaW50ZXIoUHJpbnRSZWNvcmQmIHJlY29yZCwgVCB2YWx1ZSwgdWlu
dHB0cl90ID0gMCkKK3sKKyAgICByZWNvcmQuZGF0YS52YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4odmFsdWUpOworICAgIHJlY29yZC5wcmludGVyID0gcHJpbnRVaW50cHRyOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IFByaW50ZXIgOiBwdWJsaWMgUHJpbnRSZWNvcmQg
eworICAgIFByaW50ZXIoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldFByaW50ZXIoKnRoaXMs
IHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBQcmludGVyCisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHJldmlzaW9uIDIxNTYwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQWly
Q29kZS5oIgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUHJpbnRTcGVjaWFsLmgiCiAjaW5jbHVkZSAiQWlyU3Rh
Y2tTbG90LmgiCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNB
dG9taWNWYWx1ZS5oIgpAQCAtMTEyNyw2ICsxMTI4LDI4IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBBaXI6Ok9vcHM7CiAgICAgfQogCisjaWYgRU5BQkxFKE1BU01fUFJPQkUpCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgcHJpbnQoQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgVmFsdWUqIG9yaWdpbiA9IG1fdmFsdWU7Cisg
ICAgICAgIHByaW50KG9yaWdpbiwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4u
Lik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZv
aWQgcHJpbnQoVmFsdWUqIG9yaWdpbiwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsK
KyAgICAgICAgYXV0byBwcmludExpc3QgPSBQcmludGVyOjptYWtlUHJpbnRSZWNvcmRMaXN0KHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICBhdXRvIHByaW50
U3BlY2lhbCA9IHN0YXRpY19jYXN0PFByaW50U3BlY2lhbCo+KG1fY29kZS5hZGRTcGVjaWFsKHN0
ZDo6bWFrZV91bmlxdWU8UHJpbnRTcGVjaWFsPihwcmludExpc3QpKSk7CisgICAgICAgIEluc3Qg
aW5zdChQYXRjaCwgb3JpZ2luLCBBcmc6OnNwZWNpYWwocHJpbnRTcGVjaWFsKSk7CisgICAgICAg
IFByaW50ZXI6OmFwcGVuZEFpckFyZ3MoaW5zdCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJn
dW1lbnRzKS4uLik7CisgICAgICAgIGFwcGVuZChXVEZNb3ZlKGluc3QpKTsKKyAgICB9CisjZWxz
ZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIHByaW50KEFy
Z3VtZW50cyYmLi4uKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKKwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICB2b2lkIGFwcGVuZChBaXI6Ok9wY29k
ZSBvcGNvZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclByaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQcmludFNwZWNpYWwuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUHJpbnRTcGVjaWFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJQcmludFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisjaWYgRU5BQkxFKE1BU01f
UFJPQkUpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitQcmludFNwZWNpYWw6OlBy
aW50U3BlY2lhbChQcmludGVyOjpQcmludFJlY29yZExpc3QqIGxpc3QpCisgICAgOiBtX3ByaW50
UmVjb3JkTGlzdChsaXN0KQoreworfQorCitQcmludFNwZWNpYWw6On5QcmludFNwZWNpYWwoKQor
eworfQorCit2b2lkIFByaW50U3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVk
TGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKQoreworfQorCitib29sIFByaW50U3BlY2lh
bDo6aXNWYWxpZChJbnN0JikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcmludFNw
ZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCkKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUHJpbnRTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25z
dCBSZWdpc3RlclNldCYpCit7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBQcmludFNwZWNpYWw6
OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4
dCYpCit7CisgICAgc2l6ZV90IGN1cnJlbnRBcmcgPSAxOyAvLyBTa2lwIHRoZSBQcmludFNwZWNp
YWwgYXJnLgorICAgIGZvciAoYXV0byYgdGVybSA6ICptX3ByaW50UmVjb3JkTGlzdCkgeworICAg
ICAgICBpZiAodGVybS5wcmludGVyID09IFByaW50ZXI6OnByaW50QWlyQXJnKSB7CisgICAgICAg
ICAgICBjb25zdCBBcmcmIGFyZyA9IGluc3QuYXJnc1tjdXJyZW50QXJnKytdOworICAgICAgICAg
ICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAg
ICAgICAgICAgICAgIHRlcm0gPSBQcmludGVyOjpQcmludGVyPE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEPihhcmcuZ3ByKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBBcmc6OkFkZHI6CisgICAgICAgICAgICAgICAgdGVybSA9IFByaW50ZXI6OlByaW50ZXI8
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3M+KGFyZy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaml0LnByaW50KG1fcHJpbnRSZWNvcmRMaXN0KTsK
KyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK1JlZ2lzdGVyU2V0IFByaW50
U3BlY2lhbDo6ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoSW5zdCYpCit7CisgICAgcmV0dXJuIFJl
Z2lzdGVyU2V0KCk7Cit9CisKK1JlZ2lzdGVyU2V0IFByaW50U3BlY2lhbDo6ZXh0cmFDbG9iYmVy
ZWRSZWdzKEluc3QmKQoreworICAgIHJldHVybiBSZWdpc3RlclNldCgpOworfQorCit2b2lkIFBy
aW50U3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoIlByaW50Iik7Cit9CisKK3ZvaWQgUHJpbnRTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInByaW50IGZvciBkZWJ1Z2dp
bmcgbG9nZ2luZy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBCMzo6QWlyCisKK25hbWVzcGFj
ZSBQcmludGVyIHsKKworTk9fUkVUVVJOIHZvaWQgcHJpbnRBaXJBcmcoUHJpbnRTdHJlYW0mLCBD
b250ZXh0JikKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBwbGFjZWhvbGRlciB0
byBsZXQgUHJpbnRTcGVjaWFsOjpnZW5lcmF0ZSgpIGtub3cgdGhhdAorICAgIC8vIHRoZSBQcmlu
dGVyIG5lZWRzIHRvIGJlIHJlcGxhY2VkIHdpdGggb25lIGZvciBhIHJlZ2lzdGVyLCBjb25zdGFu
dCwgZXRjLiBIZW5jZSwKKyAgICAvLyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBiZSBjYWxs
ZWQuCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgUHJpbnRlcgorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShNQVNN
X1BST0JFKQorI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclByaW50U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUHJpbnRTcGVjaWFsLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQcmludFNwZWNpYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKyNpZiBFTkFCTEUo
TUFTTV9QUk9CRSkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFs
LmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworbmFtZXNwYWNlIFByaW50ZXIgeworCit0eXBlZGVmIFZlY3RvcjxCMzo6QWlyOjpBcmc+IEFy
Z0xpc3Q7CisKKy8vIElzU2FtZU9yUmVmZXJlbmNlOjp2YWx1ZSBpcyB0cnVlIGlmIFQgaXMgdGhl
IHNhbWUgdHlwZSBhcyBVIG9yIFUmLiBFbHNlLCBpdCBpcyBmYWxzZS4KKyAgICAKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitzdGF0aWMgY29uc3RleHByIGF1dG8gSXNTYW1lT3JS
ZWZlcmVuY2VIZWxwZXIoaW50KSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxULCBV
Pjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIFUmPjo6dmFsdWUsIHN0ZDo6dHJ1ZV90eXBlPjsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0YXRpYyBjb25zdGV4cHIgc3Rk
OjpmYWxzZV90eXBlIElzU2FtZU9yUmVmZXJlbmNlSGVscGVyKC4uLik7CisKK3RlbXBsYXRlPGNs
YXNzIFQsIHR5cGVuYW1lIFU+CitzdHJ1Y3QgSXNTYW1lT3JSZWZlcmVuY2UgOiBwdWJsaWMgc3Rk
Ojppc19zYW1lPGRlY2x0eXBlKElzU2FtZU9yUmVmZXJlbmNlSGVscGVyPFQsIFU+KDApKSwgc3Rk
Ojp0cnVlX3R5cGU+IHsgfTsKKworICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8SXNTYW1lT3JSZWZlcmVu
Y2U8VCwgQjM6OkFpcjo6VG1wPjo6dmFsdWUgfHwgSXNTYW1lT3JSZWZlcmVuY2U8VCwgUmVnPjo6
dmFsdWU+PgoraW5saW5lIHZvaWQgYXBwZW5kQWlyQXJnKEIzOjpBaXI6Okluc3QmIGluc3QsIFQm
JiBhcmcpCit7CisgICAgaW5zdC5hcmdzLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4oYXJnKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cywgdHlwZW5hbWUg
PSBzdGQ6OmVuYWJsZV9pZl90PCFJc1NhbWVPclJlZmVyZW5jZTxULCBCMzo6QWlyOjpUbXA+Ojp2
YWx1ZSAmJiAhSXNTYW1lT3JSZWZlcmVuY2U8VCwgUmVnPjo6dmFsdWU+PgoraW5saW5lIHZvaWQg
YXBwZW5kQWlyQXJnKEIzOjpBaXI6Okluc3QmLCBUJiYsIGludCA9IDApIHsgfQorCitpbmxpbmUg
dm9pZCBhcHBlbmRBaXJBcmdzKEIzOjpBaXI6Okluc3QmKSB7IH0KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgoraW5saW5lIHZvaWQgYXBwZW5kQWlyQXJncyhC
Mzo6QWlyOjpJbnN0JiBpbnN0LCBUJiYgdCwgQXJndW1lbnRzJiYuLi4gb3RoZXJzKQoreworICAg
IGFwcGVuZEFpckFyZyhpbnN0LCBzdGQ6OmZvcndhcmQ8VD4odCkpOworICAgIGFwcGVuZEFpckFy
Z3MoaW5zdCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4ob3RoZXJzKS4uLik7Cit9CisKK3ZvaWQg
cHJpbnRBaXJBcmcoUHJpbnRTdHJlYW0mLCBDb250ZXh0Jik7CisKKy8vIFByaW50ZXI8QXJnJj4g
aXMgb25seSBhIHBsYWNlLWhvbGRlciB3aGljaCBQcmludFNwZWNpYWw6OmdlbmVyYXRlKCkgd2ls
bCBsYXRlcgorLy8gcmVwbGFjZSB3aXRoIGEgUHJpbnRlciBmb3IgYSByZWdpc3RlciwgY29uc3Rh
bnQsIGV0Yy4gYXMgYXBwcm9wcmlhdGUuIAordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8QjM6
OkFpcjo6VG1wPiA6IHB1YmxpYyBQcmludFJlY29yZCB7CisgICAgUHJpbnRlcihCMzo6QWlyOjpU
bXAmKQorICAgICAgICA6IFByaW50UmVjb3JkKHByaW50QWlyQXJnKQorICAgIHsgfQorfTsKKyAg
ICAKK3RlbXBsYXRlPD4KK3N0cnVjdCBQcmludGVyPFJlZz4gOiBwdWJsaWMgUHJpbnRSZWNvcmQg
eworICAgIFByaW50ZXIoUmVnJikKKyAgICAgICAgOiBQcmludFJlY29yZChwcmludEFpckFyZykK
KyAgICB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFByaW50ZXIKKworbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFByaW50U3BlY2lhbCA6IHB1YmxpYyBTcGVjaWFsIHsK
K3B1YmxpYzoKKyAgICBQcmludFNwZWNpYWwoUHJpbnRlcjo6UHJpbnRSZWNvcmRMaXN0Kik7Cisg
ICAgflByaW50U3BlY2lhbCgpOworICAgIAorICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVn
aXN0ZXIgdG8gcGFzcyBhcmd1bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVn
aXN0ZXIgaXMgbm90CisgICAgLy8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcg
Y29udmVudGlvbi4gQnkgdGhlIHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNl
cworICAgIC8vIHRoaXMgc3BlY2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsK
KyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3Bl
ZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1Zh
bGlkKEluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25l
ZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3Qm
LCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIENDYWxsSGVscGVyczo6SnVtcCBn
ZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlk
ZTsKKyAgICBSZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJp
ZGU7CisgICAgUmVnaXN0ZXJTZXQgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSBvdmVycmlkZTsK
KyAgICAKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICAK
K3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwZWNpYWxBcmdPZmZzZXQgPSAw
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1TcGVjaWFsQXJncyA9IDE7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNhbGxlZUFyZ09mZnNldCA9IG51bVNwZWNpYWxBcmdzOworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1DYWxsZWVBcmdzID0gMTsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgcmV0dXJuR1BBcmdPZmZzZXQgPSBudW1TcGVjaWFsQXJncyArIG51bUNhbGxl
ZUFyZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVJldHVybkdQQXJncyA9IDI7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJldHVybkZQQXJnT2Zmc2V0ID0gbnVtU3BlY2lhbEFy
Z3MgKyBudW1DYWxsZWVBcmdzICsgbnVtUmV0dXJuR1BBcmdzOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBudW1SZXR1cm5GUEFyZ3MgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBh
cmdBcmdPZmZzZXQgPQorICAgIG51bVNwZWNpYWxBcmdzICsgbnVtQ2FsbGVlQXJncyArIG51bVJl
dHVybkdQQXJncyArIG51bVJldHVybkZQQXJnczsKKyAgICAKKyAgICBQcmludGVyOjpQcmludFJl
Y29yZExpc3QqIG1fcHJpbnRSZWNvcmRMaXN0OworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAyMTU2MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExMSw1ICszMTExLDIyIEBA
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgQ29kZUJsb2NrOjpsaXYKICAgICB9CiB9CiAKK3Zv
aWQgc2V0UHJpbnRlcihQcmludGVyOjpQcmludFJlY29yZCYgcmVjb3JkLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKK3sKKyAgICBQcmludGVyOjpzZXRQcmludGVyKHJlY29yZCwgdG9DU3RyaW5nKGNv
ZGVCbG9jaykpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7Cisg
ICAgCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK3sKKyAgICBpZiAoVU5MSUtFTFkoIWNvZGVCbG9jaykpIHsKKyAgICAgICAg
b3V0LnByaW50KCI8bnVsbCBjb2RlQmxvY2s+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgb3V0LnByaW50KCpjb2RlQmxvY2spOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV1RGCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyMTU2MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIk9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlByaW50ZXIuaCIKICNpbmNsdWRlICJQcm9maWxl
ckpldHRpc29uUmVhc29uLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUV4ZWN1dGFibGUuaCIKICNpbmNs
dWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKQEAgLTEwODcsNCArMTA4OCwxMyBAQCBKU09iamVjdCog
U2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4CiAjZGVmaW5lIENPREVCTE9DS19MT0dfRVZF
TlQoY29kZUJsb2NrLCBzdW1tYXJ5LCBkZXRhaWxzKSBcCiAgICAgKGNvZGVCbG9jay0+dm0oKS0+
bG9nRXZlbnQoY29kZUJsb2NrLCBzdW1tYXJ5LCBbJl0gKCkgeyByZXR1cm4gdG9DU3RyaW5nIGRl
dGFpbHM7IH0pKQogCisKK3ZvaWQgc2V0UHJpbnRlcihQcmludGVyOjpQcmludFJlY29yZCYsIENv
ZGVCbG9jayopOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisgICAg
CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkNvZGVCbG9jayopOworCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIxNTYwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA1LDExICs2MDUsNyBAQCB2
b2lkIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsCiB7CiAgICAgaWYgKE9wdGlv
bnM6OmJyZWFrT25UaHJvdygpKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiBpbiBj
YWxsIGZyYW1lICIsIFJhd1BvaW50ZXIoZXhlYyksICIgZm9yIGNvZGUgYmxvY2sgIik7Ci0gICAg
ICAgIGlmIChjb2RlQmxvY2spCi0gICAgICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICJcbiIp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9nKCI8bnVsbHB0cj5cbiIpOworICAg
ICAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gaW4gY2FsbCBmcmFtZSAiLCBSYXdQb2lu
dGVyKGV4ZWMpLCAiIGZvciBjb2RlIGJsb2NrICIsIGNvZGVCbG9jaywgIlxuIik7CiAgICAgICAg
IENSQVNIKCk7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307704</attachid>
            <date>2017-04-21 00:31:52 -0700</date>
            <delta_ts>2017-04-21 12:10:01 -0700</delta_ts>
            <desc>proposed patch: fix 32-bit, and guess fix for Win.</desc>
            <filename>bug-171101.patch</filename>
            <type>text/plain</type>
            <size>54882</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1NjA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBA
QAorMjAxNy0wNC0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3IgTUFTTSBwcm9iZSB0byBhbGxvdyBwcmludGluZyBvZiBjdXN0b20gdHlwZXMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzExMDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb3IgZXhhbXBs
ZSwgdGhpcyBhbGxvd3MgdXMgdG8gYWRkIE1BU00gcHJpbnRpbmcgb2YgQ29kZUJsb2NrKiBhbmQg
QWlyOjpBcmdzLgorCisgICAgICAgIEluIGdlbmVyYWwsIE1BU00gcHJpbnQgY2FuIGJlIHVzZWQg
bGlrZSBkYXRhTG9nLCBleGNlcHQgdGhhdCBpdCBnZW5lcmF0ZXMgSklUdGVkCisgICAgICAgIGNv
ZGUgZm9yIGRvaW5nIHRoZSBkYXRhTG9nZ2luZyBsYXRlciB3aGVuIHRoZSBKSVR0ZWQgY29kZSBy
dW5zLiAgTUFTTSBwcmludCBjYW4KKyAgICAgICAgcHJpbnQgYW55IHZhbHVlIHR5cGUgdGhhdCBh
IHNwZWNpYWxpemVkIFByaW50ZXIgdGVtcGxhdGUgb3IgYSBzZXRQcmludGVyKCkKKyAgICAgICAg
ZnVuY3Rpb24gaW1wbGVtZW50ZWQgZm9yIHRoYXQgdHlwZS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJpbnRl
cjo6cHJpbnRBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFBDUmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFJlZ2lzdGVySUQpOgorICAgICAg
ICAoSlNDOjpQcmludGVyOjpwcmludEZQUmVnaXN0ZXJJRCk6CisgICAgICAgIChKU0M6OlByaW50
ZXI6OnByaW50QWRkcmVzcyk6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6UHJpbnRlcjo6cHJpbnRDYWxsYmFjayk6CisgICAgICAgIChKU0M6OnBy
aW50SW5kZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cHJpbnRDUFUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpwcmludENQVVJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OnByaW50UEMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpwcmludFJlZ2lzdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6cHJpbnRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclByaW50ZXI6OnByaW50Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuaDoKKyAgICAgICAgKEpTQzo6QWxsUmVn
aXN0ZXJzOjpBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPEFs
bFJlZ2lzdGVycz46OlByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPFBD
UmVnaXN0ZXI+OjpQcmludGVyKToKKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD46OlByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVy
OjpQcmludGVyPE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+OjpQcmludGVyKToKKyAgICAg
ICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcz46OlByaW50
ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPE1lbW9yeT46OlByaW50ZXIpOgor
ICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPE1lbVdvcmQ8SW50VHlwZT4+OjpQcmludGVy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnByaW50KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJQcmludGVyOjpwcmludCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyUHJpbnRlcjo6UHJpbnRBcmc6OlByaW50QXJnKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJQcmludGVyOjphcHBlbmRQcmludEFyZyk6IERlbGV0ZWQu
CisgICAgICAgIC0gUmVmYWN0b3JlZCB0byBtb3ZlIHRoZSB1bmRlcmx5aW5nIFByaW50UmVjb3Jk
IChhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMpCisgICAgICAgICAgb3V0IHRvIFByaW50
ZXIuY3BwL2guCisgICAgICAgIC0gTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcC9oIG5vdyBvbmx5
IGFkZCBjdXN0b20gUHJpbnRlcnMgZm9yIE1BU00gdHlwZXMgbGlrZQorICAgICAgICAgIFJlZ2lz
dGVySUQgYW5kIE1lbW9yeS4gIEl0IGFsc28gZGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gb2YK
KyAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cHJpbnQoKS4KKworICAgICAgICAgIEFzIGJlZm9y
ZSwgSklUIGNvZGUgdGhhdCB3aXNoZXMgdG8gdXNlIE1hY3JvQXNzZW1ibGVyOjpwcmludCgpIG5l
ZWRzIHRvCisgICAgICAgICAgI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIi4KKwor
ICAgICAgICAtIEFsc28gYWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhbiBvcHRpb25hbCBp
bmRlbnRhdGlvbiAoaW4gbnVtYmVyIG9mIGNoYXJzKQorICAgICAgICAgIHdoZW4gTUFTTSBwcmlu
dGluZyBBbGxSZWdpc3RlcnMuICBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIEFsbFJlZ2lzdGVycyBw
cmludHMKKyAgICAgICAgICBhIGJsb2NrIG9mIGRhdGEgdW5saWtlIG90aGVyIHByaW50ZXJzIHdo
aWNoIHByaW50IGlubGluZS4KKworICAgICAgICAqIGFzc2VtYmxlci9QcmludGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50Q29uc3RDaGFyU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6UHJpbnRlcjo6cHJpbnRJbnRwdHIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpw
cmludFVpbnRwdHIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFBvaW50ZXIpOgorICAg
ICAgICAoSlNDOjpQcmludGVyOjpzZXRQcmludGVyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvUHJp
bnRlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6Q29udGV4dDo6Q29udGV4dCk6
CisgICAgICAgIChKU0M6OlByaW50ZXI6OlByaW50UmVjb3JkOjpQcmludFJlY29yZCk6CisgICAg
ICAgIChKU0M6OlByaW50ZXI6OmFwcGVuZFByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVy
OjptYWtlUHJpbnRSZWNvcmRMaXN0KToKKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxS
YXdQb2ludGVyPjo6UHJpbnRlcik6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnNldFByaW50ZXIp
OgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyOjpQcmludGVyKToKKyAgICAgICAgLSBE
YXRhIHN0cnVjdHVyZXMgZm9yIGNyZWF0aW5nIGEgbGlzdCBvZiBQcmludFJlY29yZHMuICBDbGFz
c2VzIHdoaWNoIHdpc2ggdG8KKyAgICAgICAgICBhZGQgY3VzdG9tIHN1cHBvcnQgZm9yIE1BU00g
cHJpbnRpbmcgY2FuICNpbmNsdWRlICJQcmludGVyLmgiIGFuZCBpbXBsZW1lbnQKKyAgICAgICAg
ICBlaXRoZXI6CisgICAgICAgICAgMS4gYSBzcGVjaWFsaXplZCBQcmludGVyIHRlbXBsYXRlLCBv
cgorICAgICAgICAgIDIuIGEgc2V0UHJpbnRlcigpIGZ1bmN0aW9uLgorCisgICAgICAgICAgU2Vl
IFByaW50ZXI8UmVnPiBhbmQgUHJpbnRlcjxCMzo6QWlyOjpUbXA+IGluIEFpclByaW50U3BlY2lh
bC5oIGZvciBleGFtcGxlcyBvZgorICAgICAgICAgICgxKS4gIFNlZSBDb2RlQmxvY2sncyBzZXRQ
cmludGVyKCkgZm9yIGFuIGV4YW1wbGUgb2YgKDIpLgorCisgICAgICAgICogYjMvQjNMb3dlclRv
QWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6cHJpbnQpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJQcmludFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpQcmludFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpQcmludFNwZWNpYWw6On5QcmludFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpQcmludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmlu
dFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6
OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpyZXBv
cnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlByaW50U3BlY2lhbDo6ZXh0cmFFYXJs
eUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6OmV4
dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlByaW50U3BlY2lhbDo6
ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6OmRlZXBEdW1w
SW1wbCk6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50QWlyQXJnKToKKyAgICAgICAgKiBi
My9haXIvQWlyUHJpbnRTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpQcmludGVyOjph
cHBlbmRBaXJBcmcpOgorICAgICAgICAoSlNDOjpQcmludGVyOjphcHBlbmRBaXJBcmdzKToKKyAg
ICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxCMzo6QWlyOjpUbXA+OjpQcmludGVyKToKKyAg
ICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxSZWc+OjpQcmludGVyKToKKyAgICAgICAgLSBB
ZGQgdGhlIHByaW50KCkgb3BlcmF0aW9uIGZvciB1c2UgaW4gTG93ZXJUb0Fpci4gIHByaW50KCkg
d2lsbCBlbWl0IGEKKyAgICAgICAgICBQcmludFNwZWNpYWwgdGhhdCB3aWxsIHVsdGltYXRlbHkg
ZW1pdCBhIE1BU00gcHJpbnQgdG8gcHJpbnQgd2hhdCB3ZSB3YW50LgorICAgICAgICAtIExvd2Vy
VG9BaXIncyBwcmludCgpIGFkZHMgdGhlIGFiaWxpdHkgdG8gcHJpbnQgQWlyOjpBcmdzLgorICAg
ICAgICAtIFVubGlrZSBpbiB0aGUgYmFzZWxpbmUgSklUIGFuZCB0aGUgREZHLCBMb3dlclRvQWly
J3MgcHJpbnQoKSBjYW4gcGVydHVyYiB0aGUKKyAgICAgICAgICB1c2FnZSBvZiByZWdpc3RlcnMu
ICBUaGlzIGlzIGJlY2F1c2UgUHJpbnRTcGVjaWFsIGlzIGEgcGF0Y2ggcG9pbnQsIGFuZCBpdAor
ICAgICAgICAgIHByZXZlbnRzIGNlcnRhaW4gb3B0aW1pemF0aW9ucy4gIElmIG5vdCB1c2VkIGNh
cmVmdWxseSwgYW4gYXR0ZW1wdCB0byBwcmludCgpCisgICAgICAgICAgYW4gQXJnIGJ5IHRha2lu
ZyBhIFRtcCwgY2FuIGZvcmNlIHRoZSBCMyBWYWx1ZSBpbnRvIGEgVG1wIGVhcmxpZXIgdGhhbiBp
dCB3b3VsZAorICAgICAgICAgIG90aGVyd2lzZSBkbyBzby4gIFNvLCB1c2UgTG93ZXJUb0Fpcidz
IHByaW50KCkgd2l0aCBjYXJlLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6c2V0UHJpbnRlcik6CisgICAgICAgIC0gTm93IHdlIGNhbiBNQVNNIHBy
aW50IENvZGVCbG9jayouCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAt
IE5vdyB3ZSBjYW4gZGF0YUxvZyBDb2RlQmxvY2sqIChpbmNsdWRpbmcgbnVsbCBDb2RlQmxvY2sg
cG9pbnRlcnMpLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisKKyAgICAgICAg
KiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OnRocm93RXhjZXB0aW9uKToKKyAg
ICAgICAgLSBVc2UgdGhlIG5ldyBhYmlsaXR5IHRvIGRhdGFMb2cgQ29kZUJsb2NrKi4gIE5vIG5l
ZWQgdG8gZG8gYW4gZXhwbGljaXQgbnVsbAorICAgICAgICAgIGNoZWNrIGJlZm9yZSBwcmludGlu
ZyBhbnltb3JlLgorCiAyMDE3LTA0LTIwICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlh
bmRleC5ydT4KIAogICAgICAgICBbY21ha2VdIERlZmluZSBGT1JXQVJESU5HX0hFQURFUlNfRElS
IGluIFdlYktpdEZTIGFuZCB1c2UgaXQgZXZlcnl3aGVyZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE1NjA2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5jcHAKICAgICBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcAogICAgIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAKKyAgICBhc3NlbWJsZXIvUHJpbnRlci5j
cHAKIAogICAgIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2Fu
LmNwcAogICAgIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAK
QEAgLTEwNSw2ICsxMDYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIzL2Fp
ci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCiAgICAgYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0
LmNwcAogICAgIGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAorICAgIGIzL2Fpci9BaXJQcmludFNw
ZWNpYWwuY3BwCiAgICAgYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmNwcAogICAgIGIzL2Fpci9BaXJS
ZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAogICAgIGIzL2Fpci9BaXJTaW1wbGlmeUNGRy5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTU2MDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjQ0NSw5ICsyNDQ1LDEzIEBACiAJCUZFNEQ1NUI4MUFFNzE2
Q0EwMDUyRTQ1OSAvKiBJdGVyYXRpb25TdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEQ1NUI3MUFFNzE2Q0EwMDUyRTQ1OSAvKiBJdGVyYXRp
b25TdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRTUwNjg2NTFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTUwNjg2NDFBRTI0
NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU1MDY4NjcxQUUyNUUyODAwMDlEQUI3IC8q
IERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmNwcCAqLzsgfTsKKwkJRkU1NjI4Q0QxRTk5NTEyRDAwQzQ5RTQ1IC8qIEFpclByaW50U3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTU2MjhDQjFFOTk1MTI0MDBDNDlFNDUgLyogQWlyUHJpbnRTcGVjaWFsLmNwcCAqLzsgfTsKKwkJ
RkU1NjI4Q0UxRTk5NTEzMjAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1NjI4Q0MxRTk5NTEyNDAwQzQ5
RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oICovOyB9OwogCQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVD
Q0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3Bw
ICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5MzJBNjE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU2MDI5RDkxRDZFMUU0RjAwMzAyMDREIC8qIEV4Y2Vw
dGlvbkV2ZW50TG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RkU2M0RENTQxRUE5QjYxRTAwMTAzQTY5IC8qIFByaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjNERDUzMUVBOUI2MEUwMDEwM0E2OSAvKiBQ
cmludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRkU2M0RENTYxRUE5QkM2NzAwMTAzQTY5IC8qIFByaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2M0RENTUxRUE5QkM1RDAwMTAzQTY5
IC8qIFByaW50ZXIuY3BwICovOyB9OwogCQlGRTY0OTEzNzFENzhGMDFEMDBBNjk0RDQgLyogRXhj
ZXB0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFNjQ5MTM2MUQ3OEYwMTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNjQ5MTM5MUQ3OEYz
QUYwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY0OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0
aW9uU2NvcGUuY3BwICovOyB9OwogCQlGRTY4QzYzNzFCOTBERTA0MDA0MkJDQjMgLyogTWFjcm9B
c3NlbWJsZXJQcmludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUw
NzEsOSArNTA3NSwxMyBAQAogCQlGRTRENTVCNzFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9u
U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvblN0YXR1
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUwNjg2NDFBRTI0NjM5MDAwOURB
QjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlZmVycmVkU291cmNlRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVtcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNTYyOENCMUU5OTUxMjQwMEM0OUU0NSAvKiBB
aXJQcmludFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QWlyUHJpbnRTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQcmludFNwZWNpYWwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTU2MjhDQzFFOTk1MTI0MDBDNDlFNDUgLyog
QWlyUHJpbnRTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclBy
aW50U3BlY2lhbC5oOyBwYXRoID0gYjMvYWlyL0FpclByaW50U3BlY2lhbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEEx
RUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Vk1FbnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjAyOUQ4MUQ2
RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkU2M0RENTMxRUE5QjYwRTAwMTAzQTY5IC8qIFByaW50ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRTYzREQ1NTFFQTlCQzVEMDAxMDNBNjkgLyogUHJpbnRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmludGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2NDkxMzYxRDc4RjAxMzAwQTY5NEQ0IC8qIEV4Y2Vw
dGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvblNj
b3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjQ5MTM4MUQ3OEYzQTMwMEE2
OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFeGNlcHRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFNjhDNjM1MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJQcmludGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NTIsNiArNTY2MCw4IEBACiAJ
CQkJMEYyQUM1NkQxRThEN0FGRjAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmggKi8s
CiAJCQkJMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovLAog
CQkJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8sCisJCQkJ
RkU1NjI4Q0IxRTk5NTEyNDAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5jcHAgKi8sCisJCQkJ
RkU1NjI4Q0MxRTk5NTEyNDAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oICovLAogCQkJCTBG
RjRCNEJBMUU4ODQ0OTUwMERCQkU4NiAvKiBBaXJSZWdMaXZlbmVzcy5jcHAgKi8sCiAJCQkJMEZG
NEI0QkIxRTg4NDQ5NTAwREJCRTg2IC8qIEFpclJlZ0xpdmVuZXNzLmggKi8sCiAJCQkJMEY0NTcw
M0ExQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwICovLApAQCAt
NzUyNiw2ICs3NTM2LDggQEAKIAkJCQk4NjAxNjFFMjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uaCAqLywKIAkJCQk2NTg2MDE3NzE4NUE4RjVFMDAwMzBFRUUgLyog
TWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCAqLywKIAkJCQk4NkM1NjhERjExQTIxM0VF
MDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oICovLAorCQkJCUZFNjNERDU1MUVBOUJDNUQwMDEw
M0E2OSAvKiBQcmludGVyLmNwcCAqLywKKwkJCQlGRTYzREQ1MzFFQTlCNjBFMDAxMDNBNjkgLyog
UHJpbnRlci5oICovLAogCQkJCTk2ODhDQjE0MEVEMTJCNEUwMDFENjQ5RiAvKiBYODZBc3NlbWJs
ZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gYXNzZW1ibGVyOwpAQCAtODI2NSw2ICs4Mjc3LDcg
QEAKIAkJCQkwRjZCOEFERDFDNEVGQUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjMzRkNGODFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU1NjI4Q0Ux
RTk5NTEzMjAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjIxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2ttYXBWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xs
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg1NDYsNiArODU1OSw3IEBACiAJCQkJMEYyMzVC
RUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4
aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2M0RENTQxRUE5QjYxRTAwMTAzQTY5
IC8qIFByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMw
RSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzky
QzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMTAzMTQsNiArMTAzMjgsNyBAQAogCQkJCTc5ODBDMTZDMUUz
QTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkZDQ0ZCMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFNjNERDU2MUVBOUJDNjcwMDEwM0E2OSAv
KiBQcmludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0
MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgw
RjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNjgyRkIyMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMTA1NDQsNiArMTA1NTksNyBAQAogCQkJCTE0NDBGODkyMEE1
MDhCMTAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZFNTYyOENEMUU5OTUxMkQwMEM0OUU0NSAvKiBBaXJQcmludFNw
ZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODAxQTgxODgwRDZBODAwMjZDMzlCIC8q
IEpTQ0J1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQxMTA3RUMzNzYwMDQy
N0E0OCAvKiBKU0NlbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlBQkIxN0QxRTVDQ0I1NzAw
NDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlz
aW9uIDIxNTYwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYOAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNl
IFByaW50ZXIgeworCitzdHJ1Y3QgUHJpbnRSZWNvcmQ7Cit0eXBlZGVmIFZlY3RvcjxQcmludFJl
Y29yZD4gUHJpbnRSZWNvcmRMaXN0OworCit9CisKIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVi
bGljIE1hY3JvQXNzZW1ibGVyQmFzZSB7CiBwdWJsaWM6CiAKQEAgLTE4MjAsNyArMTgyNyw5IEBA
IHB1YmxpYzoKICAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYgRU5BQkxFKE1BU01fUFJPQkUpLiBP
dGhlcndpc2UsIHByaW50KCkgaXMgYSBuby1vcC4KICAgICAvLyBTZWUgY29tbWVudHMgaW4gTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmggZm9yIGV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhpcy4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgdm9pZCBwcmludChBcmd1bWVu
dHMuLi4gYXJncyk7CisgICAgdm9pZCBwcmludChBcmd1bWVudHMmJi4uLiBhcmdzKTsKKworICAg
IHZvaWQgcHJpbnQoUHJpbnRlcjo6UHJpbnRSZWNvcmRMaXN0Kik7CiB9OwogCiAjaWYgRU5BQkxF
KE1BU01fUFJPQkUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyUHJpbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwCShyZXZpc2lvbiAyMTU2MDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUHJpbnRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI4ICszMSwyNSBAQAogI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIFByaW50ZXIgewogCiB1c2lu
ZyBDUFVTdGF0ZSA9IE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZTsKIHVzaW5nIFJlZ2lzdGVySUQg
PSBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRDsKIHVzaW5nIEZQUmVnaXN0ZXJJRCA9IE1hY3Jv
QXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ7CiAKLXN0YXRpYyB2b2lkIHByaW50SW5kZW50KGludCBp
bmRlbnRhdGlvbikKK3ZvaWQgcHJpbnRBbGxSZWdpc3RlcnMoUHJpbnRTdHJlYW0mIG91dCwgQ29u
dGV4dCYgY29udGV4dCkKIHsKLSAgICBmb3IgKDsgaW5kZW50YXRpb24gPiAwOyBpbmRlbnRhdGlv
bi0tKQotICAgICAgICBkYXRhTG9nKCIgICAgIik7Ci19CisgICAgYXV0byYgY3B1ID0gY29udGV4
dC5wcm9iZUNvbnRleHQuY3B1OworICAgIGludCBjaGFyc1RvSW5kZW50ID0gY29udGV4dC5kYXRh
LmFzPGludD4oKTsKIAotI2RlZmluZSBJTkRFTlQgcHJpbnRJbmRlbnQoaW5kZW50YXRpb24pCi0g
ICAgCi12b2lkIHByaW50Q1BVKENQVVN0YXRlJiBjcHUsIGludCBpbmRlbnRhdGlvbikKLXsKLSAg
ICBJTkRFTlQsIGRhdGFMb2coImNwdToge1xuIik7Ci0gICAgcHJpbnRDUFVSZWdpc3RlcnMoY3B1
LCBpbmRlbnRhdGlvbiArIDEpOwotICAgIElOREVOVCwgZGF0YUxvZygifVxuIik7Ci19CisgICAg
YXV0byBpbmRlbnQgPSBbJl0gKCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoYXJz
VG9JbmRlbnQ7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICIpOworICAgIH07CisjZGVm
aW5lIElOREVOVCBpbmRlbnQoKQorCisgICAgSU5ERU5ULCBvdXQucHJpbnQoImNwdToge1xuIik7
CiAKLXZvaWQgcHJpbnRDUFVSZWdpc3RlcnMoQ1BVU3RhdGUmIGNwdSwgaW50IGluZGVudGF0aW9u
KQotewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgI2RlZmluZSBJTlRQVFJfSEVYX1ZBTFVF
X0ZPUk1BVCAiMHglMDhseCIKICNlbHNlCkBAIC02MSw3ICs1OCw3IEBAIHZvaWQgcHJpbnRDUFVS
ZWdpc3RlcnMoQ1BVU3RhdGUmIGNwdSwgaW4KIAogICAgICNkZWZpbmUgUFJJTlRfR1BSRUdJU1RF
UihfdHlwZSwgX3JlZ05hbWUpIHsgXAogICAgICAgICBpbnRwdHJfdCB2YWx1ZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGNwdS5fcmVnTmFtZSk7IFwKLSAgICAgICAgSU5ERU5ULCBkYXRh
TG9nRigiJTZzOiAiIElOVFBUUl9IRVhfVkFMVUVfRk9STUFUICIgICVsZFxuIiwgI19yZWdOYW1l
LCB2YWx1ZSwgdmFsdWUpIDsgXAorICAgICAgICBJTkRFTlQsIG91dC5wcmludGYoIiAgICAlNnM6
ICIgSU5UUFRSX0hFWF9WQUxVRV9GT1JNQVQgIiAgJWxkXG4iLCAjX3JlZ05hbWUsIHZhbHVlLCB2
YWx1ZSkgOyBcCiAgICAgfQogICAgIEZPUl9FQUNIX0NQVV9HUFJFR0lTVEVSKFBSSU5UX0dQUkVH
SVNURVIpCiAgICAgRk9SX0VBQ0hfQ1BVX1NQRUNJQUxfUkVHSVNURVIoUFJJTlRfR1BSRUdJU1RF
UikKQEAgLTcxLDE0ICs2OCwxOSBAQCB2b2lkIHByaW50Q1BVUmVnaXN0ZXJzKENQVVN0YXRlJiBj
cHUsIGluCiAgICAgI2RlZmluZSBQUklOVF9GUFJFR0lTVEVSKF90eXBlLCBfcmVnTmFtZSkgeyBc
CiAgICAgICAgIHVpbnQ2NF90KiB1ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KCZjcHUu
X3JlZ05hbWUpOyBcCiAgICAgICAgIGRvdWJsZSogZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZG91Ymxl
Kj4oJmNwdS5fcmVnTmFtZSk7IFwKLSAgICAgICAgSU5ERU5ULCBkYXRhTG9nRigiJTZzOiAweCUw
MTZsbHggICUuMTNnXG4iLCAjX3JlZ05hbWUsICp1LCAqZCk7IFwKKyAgICAgICAgSU5ERU5ULCBv
dXQucHJpbnRmKCIgICAgJTZzOiAweCUwMTZsbHggICUuMTNnXG4iLCAjX3JlZ05hbWUsICp1LCAq
ZCk7IFwKICAgICB9CiAgICAgRk9SX0VBQ0hfQ1BVX0ZQUkVHSVNURVIoUFJJTlRfRlBSRUdJU1RF
UikKICAgICAjdW5kZWYgUFJJTlRfRlBSRUdJU1RFUgorCisgICAgSU5ERU5ULCBvdXQucHJpbnQo
In1cbiIpOworI3VuZGVmIElOREVOVAorCiB9CiAKLXN0YXRpYyB2b2lkIHByaW50UEMoQ1BVU3Rh
dGUmIGNwdSkKK3ZvaWQgcHJpbnRQQ1JlZ2lzdGVyKFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQm
IGNvbnRleHQpCiB7CisgICAgYXV0byBjcHUgPSBjb250ZXh0LnByb2JlQ29udGV4dC5jcHU7CiAg
ICAgdW5pb24gewogICAgICAgICB2b2lkKiB2b2lkUHRyOwogICAgICAgICBpbnRwdHJfdCBpbnRw
dHJWYWx1ZTsKQEAgLTkwLDM3ICs5Miw1NCBAQCBzdGF0aWMgdm9pZCBwcmludFBDKENQVVN0YXRl
JiBjcHUpCiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRlZCBDUFUiCiAjZW5kaWYKLSAgICBkYXRh
TG9nRigicGM6PCVwICVsZD4iLCB1LnZvaWRQdHIsIHUuaW50cHRyVmFsdWUpOworICAgIG91dC5w
cmludGYoInBjOjwlcCAlbGQ+IiwgdS52b2lkUHRyLCB1LmludHB0clZhbHVlKTsKIH0KIAotdm9p
ZCBwcmludFJlZ2lzdGVyKENQVVN0YXRlJiBjcHUsIFJlZ2lzdGVySUQgcmVnSUQpCit2b2lkIHBy
aW50UmVnaXN0ZXJJRChQcmludFN0cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQogeworICAg
IFJlZ2lzdGVySUQgcmVnSUQgPSBjb250ZXh0LmRhdGEuYXM8UmVnaXN0ZXJJRD4oKTsKICAgICBj
b25zdCBjaGFyKiBuYW1lID0gQ1BVU3RhdGU6Omdwck5hbWUocmVnSUQpOwogICAgIHVuaW9uIHsK
ICAgICAgICAgdm9pZCogdm9pZFB0cjsKICAgICAgICAgaW50cHRyX3QgaW50cHRyVmFsdWU7CiAg
ICAgfSB1OwotICAgIHUudm9pZFB0ciA9IGNwdS5ncHIocmVnSUQpOwotICAgIGRhdGFMb2dGKCIl
czo8JXAgJWxkPiIsIG5hbWUsIHUudm9pZFB0ciwgdS5pbnRwdHJWYWx1ZSk7CisgICAgdS52b2lk
UHRyID0gY29udGV4dC5wcm9iZUNvbnRleHQuZ3ByKHJlZ0lEKTsKKyAgICBvdXQucHJpbnRmKCIl
czo8JXAgJWxkPiIsIG5hbWUsIHUudm9pZFB0ciwgdS5pbnRwdHJWYWx1ZSk7CiB9CiAKLXZvaWQg
cHJpbnRSZWdpc3RlcihDUFVTdGF0ZSYgY3B1LCBGUFJlZ2lzdGVySUQgcmVnSUQpCit2b2lkIHBy
aW50RlBSZWdpc3RlcklEKFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQmIGNvbnRleHQpCiB7Cisg
ICAgRlBSZWdpc3RlcklEIHJlZ0lEID0gY29udGV4dC5kYXRhLmFzPEZQUmVnaXN0ZXJJRD4oKTsK
ICAgICBjb25zdCBjaGFyKiBuYW1lID0gQ1BVU3RhdGU6OmZwck5hbWUocmVnSUQpOwogICAgIHVu
aW9uIHsKICAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwogICAgICAgICB1aW50NjRfdCB1aW50
NjRWYWx1ZTsKICAgICB9IHU7Ci0gICAgdS5kb3VibGVWYWx1ZSA9IGNwdS5mcHIocmVnSUQpOwot
ICAgIGRhdGFMb2dGKCIlczo8MHglMDE2bGx4ICUuMTNnPiIsIG5hbWUsIHUudWludDY0VmFsdWUs
IHUuZG91YmxlVmFsdWUpOworICAgIHUuZG91YmxlVmFsdWUgPSBjb250ZXh0LnByb2JlQ29udGV4
dC5mcHIocmVnSUQpOworICAgIG91dC5wcmludGYoIiVzOjwweCUwMTZsbHggJS4xM2c+IiwgbmFt
ZSwgdS51aW50NjRWYWx1ZSwgdS5kb3VibGVWYWx1ZSk7Cit9CisKK3ZvaWQgcHJpbnRBZGRyZXNz
KFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQmIGNvbnRleHQpCit7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MgYWRkcmVzcyA9IGNvbnRleHQuZGF0YS5hczxNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcz4oKTsKKyAgICBSZWdpc3RlcklEIHJlZ0lEID0gYWRkcmVzcy5iYXNlOworICAgIGNvbnN0
IGNoYXIqIG5hbWUgPSBDUFVTdGF0ZTo6Z3ByTmFtZShyZWdJRCk7CisgICAgdW5pb24geworICAg
ICAgICB2b2lkKiB2b2lkUHRyOworICAgICAgICBpbnRwdHJfdCBpbnRwdHJWYWx1ZTsKKyAgICB9
IHU7CisgICAgdS52b2lkUHRyID0gY29udGV4dC5wcm9iZUNvbnRleHQuZ3ByKHJlZ0lEKTsKKyAg
ICBvdXQucHJpbnRmKCJBZGRyZXNze2Jhc2U6JXM6PCVwICVsZD4sIG9mZnNldDo8MHgleCAlZD4i
LCBuYW1lLCB1LnZvaWRQdHIsIHUuaW50cHRyVmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
Lm9mZnNldCk7CiB9CiAKLXZvaWQgcHJpbnRNZW1vcnkoQ1BVU3RhdGUmIGNwdSwgY29uc3QgTWVt
b3J5JiBtZW1vcnkpCit2b2lkIHByaW50TWVtb3J5KFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQm
IGNvbnRleHQpCiB7CisgICAgY29uc3QgTWVtb3J5JiBtZW1vcnkgPSBjb250ZXh0LmRhdGEuYXM8
TWVtb3J5PigpOworCiAgICAgdWludDhfdCogcHRyID0gbnVsbHB0cjsKICAgICBzd2l0Y2ggKG1l
bW9yeS5hZGRyZXNzVHlwZSkgewogICAgIGNhc2UgTWVtb3J5OjpBZGRyZXNzVHlwZTo6QWRkcmVz
czogewotICAgICAgICBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjcHUuZ3ByKG1l
bW9yeS51LmFkZHJlc3MuYmFzZSkpOworICAgICAgICBwdHIgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihjb250ZXh0LnByb2JlQ29udGV4dC5ncHIobWVtb3J5LnUuYWRkcmVzcy5iYXNlKSk7
CiAgICAgICAgIHB0ciArPSBtZW1vcnkudS5hZGRyZXNzLm9mZnNldDsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMTMzLDIyICsxNTIsMjIgQEAgdm9pZCBwcmludE1lbW9yeShDUFVTdGF0ZSYg
Y3B1LCBjb25zdCBNZQogICAgIGlmIChtZW1vcnkuZHVtcFN0eWxlID09IE1lbW9yeTo6U2luZ2xl
V29yZER1bXApIHsKICAgICAgICAgaWYgKG1lbW9yeS5udW1CeXRlcyA9PSBzaXplb2YoaW50OF90
KSkgewogICAgICAgICAgICAgYXV0byBwID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihwdHIp
OwotICAgICAgICAgICAgZGF0YUxvZ0YoIiVwOjwweCUwMnggJWQ+IiwgcCwgKnAsICpwKTsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiVwOjwweCUwMnggJWQ+IiwgcCwgKnAsICpwKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAobWVtb3J5Lm51bUJ5dGVzID09
IHNpemVvZihpbnQxNl90KSkgewogICAgICAgICAgICAgYXV0byBwID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnQxNl90Kj4ocHRyKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIlcDo8MHglMDR4ICVkPiIs
IHAsICpwLCAqcCk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcDo8MHglMDR4ICVkPiIsIHAs
ICpwLCAqcCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1l
bW9yeS5udW1CeXRlcyA9PSBzaXplb2YoaW50MzJfdCkpIHsKICAgICAgICAgICAgIGF1dG8gcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHB0cik7Ci0gICAgICAgICAgICBkYXRhTG9nRigi
JXA6PDB4JTA4eCAlZD4iLCBwLCAqcCwgKnApOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXA6
PDB4JTA4eCAlZD4iLCBwLCAqcCwgKnApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIGlmIChtZW1vcnkubnVtQnl0ZXMgPT0gc2l6ZW9mKGludDY0X3QpKSB7CiAgICAg
ICAgICAgICBhdXRvIHAgPSByZWludGVycHJldF9jYXN0PGludDY0X3QqPihwdHIpOwotICAgICAg
ICAgICAgZGF0YUxvZ0YoIiVwOjwweCUwMTZsbHggJWxsZD4iLCBwLCAqcCwgKnApOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXA6PDB4JTAxNmxseCAlbGxkPiIsIHAsICpwLCAqcCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRWxzZSwgdW5rbm93biB3b3Jk
IHNpemUuIEZhbGwgdGhydSBhbmQgZHVtcCBpbiB0aGUgZ2VuZXJpYyB3YXkuCkBAIC0xNTgsNTgg
KzE3NywzMSBAQCB2b2lkIHByaW50TWVtb3J5KENQVVN0YXRlJiBjcHUsIGNvbnN0IE1lCiAgICAg
c2l6ZV90IG51bUJ5dGVzID0gbWVtb3J5Lm51bUJ5dGVzOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtQnl0ZXM7IGkrKykgewogICAgICAgICBpZiAoIShpICUgMTYpKQotICAgICAgICAg
ICAgZGF0YUxvZ0YoIiVwOiAiLCAmcHRyW2ldKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVw
OiAiLCAmcHRyW2ldKTsKICAgICAgICAgZWxzZSBpZiAoIShpICUgNCkpCi0gICAgICAgICAgICBk
YXRhTG9nKCIgIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIgIik7CiAKLSAgICAgICAgZGF0
YUxvZ0YoIiUwMngiLCBwdHJbaV0pOworICAgICAgICBvdXQucHJpbnRmKCIlMDJ4IiwgcHRyW2ld
KTsKIAogICAgICAgICBpZiAoaSAlIDE2ID09IDE1KQotICAgICAgICAgICAgZGF0YUxvZygiXG4i
KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9CiAgICAgaWYgKG51bUJ5dGVz
ICUgMTYgPCAxNSkKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KCJc
biIpOwogfQogCi12b2lkIE1hY3JvQXNzZW1ibGVyUHJpbnRlcjo6cHJpbnRDYWxsYmFjayhQcm9i
ZUNvbnRleHQqIGNvbnRleHQpCit2b2lkIHByaW50Q2FsbGJhY2soUHJvYmVDb250ZXh0KiBwcm9i
ZUNvbnRleHQpCiB7Ci0gICAgdHlwZWRlZiBQcmludEFyZyBBcmc7Ci0gICAgUHJpbnRBcmdzTGlz
dCYgYXJnc0xpc3QgPQotICAgICpyZWludGVycHJldF9jYXN0PFByaW50QXJnc0xpc3QqPihjb250
ZXh0LT5hcmcpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnc0xpc3Quc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgYXV0byYgYXJnID0gYXJnc0xpc3RbaV07Ci0gICAgICAgIHN3aXRjaCAo
YXJnLnR5cGUpIHsKLSAgICAgICAgY2FzZSBBcmc6OlR5cGU6OkFsbFJlZ2lzdGVyczoKLSAgICAg
ICAgICAgIHByaW50Q1BVKGNvbnRleHQtPmNwdSwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcmc6OlR5cGU6OlBDUmVnaXN0ZXI6Ci0gICAgICAgICAgICBwcmludFBDKGNv
bnRleHQtPmNwdSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcmc6OlR5cGU6
OlJlZ2lzdGVySUQ6Ci0gICAgICAgICAgICBwcmludFJlZ2lzdGVyKGNvbnRleHQtPmNwdSwgYXJn
LnUuZ3BSZWdpc3RlcklEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyZzo6
VHlwZTo6RlBSZWdpc3RlcklEOgotICAgICAgICAgICAgcHJpbnRSZWdpc3Rlcihjb250ZXh0LT5j
cHUsIGFyZy51LmZwUmVnaXN0ZXJJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcmc6OlR5cGU6Ok1lbW9yeToKLSAgICAgICAgICAgIHByaW50TWVtb3J5KGNvbnRleHQtPmNw
dSwgYXJnLnUubWVtb3J5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyZzo6
VHlwZTo6Q29uc3RDaGFyUHRyOgotICAgICAgICAgICAgZGF0YUxvZyhhcmcudS5jb25zdENoYXJQ
dHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJnOjpUeXBlOjpDb25zdFZv
aWRQdHI6Ci0gICAgICAgICAgICBkYXRhTG9nRigiJXAiLCBhcmcudS5jb25zdFZvaWRQdHIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJnOjpUeXBlOjpJbnRwdHJWYWx1ZToK
LSAgICAgICAgICAgIGRhdGFMb2coYXJnLnUuaW50cHRyVmFsdWUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJnOjpUeXBlOjpVaW50cHRyVmFsdWU6Ci0gICAgICAgICAgICBk
YXRhTG9nKGFyZy51LnVpbnRwdHJWYWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQorICAgIGF1dG8mIG91dCA9IFdURjo6ZGF0YUZpbGUoKTsKKyAgICBQcmludFJlY29yZExpc3Qm
IGxpc3QgPSAqcmVpbnRlcnByZXRfY2FzdDxQcmludFJlY29yZExpc3QqPihwcm9iZUNvbnRleHQt
PmFyZyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIGF1dG8mIHJlY29yZCA9IGxpc3RbaV07CisgICAgICAgIENvbnRleHQgY29udGV4dCgq
cHJvYmVDb250ZXh0LCByZWNvcmQuZGF0YSk7CisgICAgICAgIHJlY29yZC5wcmludGVyKG91dCwg
Y29udGV4dCk7CiAgICAgfQogfQogCit9IC8vIG5hbWVzcGFjZSBQcmludGVyCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShNQVNNX1BST0JFKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUHJpbnRl
ci5oCShyZXZpc2lvbiAyMTU2MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyUHJpbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAi
UHJpbnRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTQsMTkgKzU1LDIwIEBAIG5hbWVz
cGFjZSBKU0MgewogLy8gICAgICBqaXQucHJpbnQoIkhlbGxvIHdvcmxkXG4iKTsgLy8gRW1pdHMg
Y29kZSB0byBwcmludCB0aGUgc3RyaW5nLgogLy8KIC8vICAgICAgQ29kZUJsb2NrKiBjYiA9IC4u
LjsKLS8vICAgICAgaml0LnByaW50KGNiLCAiXG4iKTsgICAgICAgIC8vIEVtaXRzIGNvZGUgdG8g
cHJpbnQgdGhlIHBvaW50ZXIgdmFsdWUuCisvLyAgICAgIGppdC5wcmludChjYiwgIlxuIik7ICAg
ICAgICAgICAgIC8vIEVtaXRzIGNvZGUgdG8gcHJpbnQgdGhlIGNvZGVCbG9jayB2YWx1ZS4KKy8v
ICAgICAgaml0LnByaW50KFJhd1BvaW50ZXIoY2IpLCAiXG4iKTsgLy8gRW1pdHMgY29kZSB0byBw
cmludCB0aGUgcG9pbnRlciB2YWx1ZS4KIC8vCiAvLyAgICAgIFJlZ2lzdGVySUQgcmVnSUQgPSAu
Li47CiAvLyAgICAgIGppdC5wcmludChyZWdJRCwgIlxuIik7ICAgICAvLyBFbWl0cyBjb2RlIHRv
IHByaW50IHRoZSByZWdpc3RlciB2YWx1ZSAobm90IHRoZSBpZCkuCiAvLwogLy8gICAgICAvLyBF
bWl0cyBjb2RlIHRvIHByaW50IGFsbCByZWdpc3RlcnMuIFVubGlrZSBvdGhlciBpdGVtcywgdGhp
cyBwcmludHMKIC8vICAgICAgLy8gbXVsdGlwbGUgbGluZXMgYXMgZm9sbG93czoKLS8vICAgICAg
Ly8gICAgICBjcHUgewotLy8gICAgICAvLyAgICAgICAgICBlYXg6IDB4MTIzNDU2Nzg5Ci0vLyAg
ICAgIC8vICAgICAgICAgIGVieDogMHgwMDAwMDBhYmMKLS8vICAgICAgLy8gICAgICAgICAgLi4u
Ci0vLyAgICAgIC8vICAgICAgfQotLy8gICAgICBqaXQucHJpbnQoQWxsUmVnaXN0ZXJzKCkpOwor
Ly8gICAgICAvLyAgICAgY3B1IHsKKy8vICAgICAgLy8gICAgICAgICBlYXg6IDB4MTIzNDU2Nzg5
CisvLyAgICAgIC8vICAgICAgICAgZWJ4OiAweDAwMDAwMGFiYworLy8gICAgICAvLyAgICAgICAg
IC4uLgorLy8gICAgICAvLyAgICAgfQorLy8gICAgICBqaXQucHJpbnQoQWxsUmVnaXN0ZXJzKDQp
KTsgLy8gVGhlIDQgaGVyZSBpcyBmb3IgYW4gaW5kZW50YXRpb24gb2YgNCBjaGFyYWN0ZXJzLgog
Ly8KIC8vICAgICAgaml0LnByaW50KE1lbVdvcmQ8dWludDhfdD4ocmVnSUQpLCAiXG4iKTsgICAv
LyBFbWl0cyBjb2RlIHRvIHByaW50IGEgYnl0ZSBwb2ludGVkIHRvIGJ5IHRoZSByZWdpc3Rlci4K
IC8vICAgICAgaml0LnByaW50KE1lbVdvcmQ8dWludDMyX3Q+KHJlZ0lEKSwgIlxuIik7ICAvLyBF
bWl0cyBjb2RlIHRvIHByaW50IGEgMzItYml0IHdvcmQgcG9pbnRlZCB0byBieSB0aGUgcmVnaXN0
ZXIuCkBAIC04MSwxNSArODMsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyAgICAgIC8vIHRvIHBy
aW50IGFsbCB0aGUgaXRlbXMuCiAvLyAgICAgIGppdC5wcmludCgiY2I6IiwgY2IsICIgcmVnSUQ6
IiwgcmVnSUQsICIgY3B1OlxuIiwgQWxsUmVnaXN0ZXJzKCkpOwogLy8KLS8vICAgVGhlIHR5cGUg
b2YgdmFsdWVzIHRoYXQgY2FuIGJlIHByaW50ZWQgaXMgZW5jYXBzdWxhdGVkIGluIHRoZSBQcmlu
dEFyZyBzdHJ1Y3QgYmVsb3cuCisvLyAgIFRoZSB0eXBlIG9mIHZhbHVlcyB0aGF0IGNhbiBiZSBw
cmludGVkIGlzIGRldGVybWluZSBieSB0aGUgYXZhaWxhYmlsaXR5IG9mIGEKKy8vICAgc3BlY2lh
bGl6ZWQgUHJpbnRlciB0ZW1wbGF0ZSwgb3IgYSBzZXRQcmludGVyKCkgZnVuY3Rpb24gZm9yIHRo
ZSB2YWx1ZSB0eXBlLgogLy8KIC8vICAgTm90ZTogcHJpbnQoKSBkb2VzIG5vdCBhdXRvbWF0aWNh
bGx5IGluc2VydCBhICdcbicgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KIC8vICAgSWYgeW91IHdh
bnQgYSAnXG4nLCB5b3UnbGwgaGF2ZSB0byBhZGQgaXQgZXhwbGljaXRseSAoYXMgaW4gdGhlIGV4
YW1wbGVzIGFib3ZlKS4KIAogCi0vLyBUaGlzIGlzIGEgbWFya2VyIHR5cGUgb25seSB1c2VkIHdp
dGggTWFjcm9Bc3NlbWJsZXJQcmludGVyOjpwcmludCgpLgotLy8gU2VlIE1hY3JvQXNzZW1ibGVy
UHJpbnRlcjo6cHJpbnQoKSBiZWxvdyBmb3IgZGV0YWlscy4KLXN0cnVjdCBBbGxSZWdpc3RlcnMg
eyB9Oworc3RydWN0IEFsbFJlZ2lzdGVycyB7CisgICAgQWxsUmVnaXN0ZXJzKGludCBjaGFyc1Rv
SW5kZW50ID0gMCkKKyAgICAgICAgOiBjaGFyc1RvSW5kZW50KGNoYXJzVG9JbmRlbnQpCisgICAg
eyB9CisgICAgaW50IGNoYXJzVG9JbmRlbnQ7Cit9Owogc3RydWN0IFBDUmVnaXN0ZXIgeyB9Owog
CiBzdHJ1Y3QgTWVtb3J5IHsKQEAgLTE1NywxNTEgKzE2Myw4OCBAQCBzdHJ1Y3QgTWVtV29yZCA6
IHB1YmxpYyBNZW1vcnkgewogICAgIHsgfQogfTsKIAorbmFtZXNwYWNlIFByaW50ZXIgewogCi1j
bGFzcyBNYWNyb0Fzc2VtYmxlclByaW50ZXIgewotICAgIHVzaW5nIENQVVN0YXRlID0gTWFjcm9B
c3NlbWJsZXI6OkNQVVN0YXRlOwotICAgIHVzaW5nIFJlZ2lzdGVySUQgPSBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRDsKLSAgICB1c2luZyBGUFJlZ2lzdGVySUQgPSBNYWNyb0Fzc2VtYmxlcjo6
RlBSZWdpc3RlcklEOwotICAgIAotcHVibGljOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KLSAgICBzdGF0aWMgdm9pZCBwcmludChNYWNyb0Fzc2VtYmxlciogbWFzbSwgQXJn
dW1lbnRzLi4uIGFyZ3MpCi0gICAgewotICAgICAgICBhdXRvIGFyZ3NMaXN0ID0gc3RkOjptYWtl
X3VuaXF1ZTxQcmludEFyZ3NMaXN0PigpOwotICAgICAgICBhcHBlbmRQcmludEFyZyhhcmdzTGlz
dC5nZXQoKSwgYXJncy4uLik7Ci0gICAgICAgIG1hc20tPnByb2JlKHByaW50Q2FsbGJhY2ssIGFy
Z3NMaXN0LnJlbGVhc2UoKSk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgUHJp
bnRBcmcgeworLy8gQWRkIHNvbWUgc3BlY2lhbGl6ZWQgcHJpbnRlcnMuCiAKLSAgICAgICAgZW51
bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgICAgIEFsbFJlZ2lzdGVycywKLSAgICAgICAgICAgIFBD
UmVnaXN0ZXIsCi0gICAgICAgICAgICBSZWdpc3RlcklELAotICAgICAgICAgICAgRlBSZWdpc3Rl
cklELAotICAgICAgICAgICAgTWVtb3J5LAotICAgICAgICAgICAgQ29uc3RDaGFyUHRyLAotICAg
ICAgICAgICAgQ29uc3RWb2lkUHRyLAotICAgICAgICAgICAgSW50cHRyVmFsdWUsCi0gICAgICAg
ICAgICBVaW50cHRyVmFsdWUsCi0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBQcmludEFy
ZyhBbGxSZWdpc3RlcnMmKQotICAgICAgICAgICAgOiB0eXBlKFR5cGU6OkFsbFJlZ2lzdGVycykK
LSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBQcmludEFyZyhQQ1JlZ2lz
dGVyJikKLSAgICAgICAgICAgIDogdHlwZShUeXBlOjpQQ1JlZ2lzdGVyKQotICAgICAgICB7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFByaW50QXJnKFJlZ2lzdGVySUQgcmVnSUQpCi0g
ICAgICAgICAgICA6IHR5cGUoVHlwZTo6UmVnaXN0ZXJJRCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdS5ncFJlZ2lzdGVySUQgPSByZWdJRDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
UHJpbnRBcmcoRlBSZWdpc3RlcklEIHJlZ0lEKQotICAgICAgICAgICAgOiB0eXBlKFR5cGU6OkZQ
UmVnaXN0ZXJJRCkKLSAgICAgICAgewotICAgICAgICAgICAgdS5mcFJlZ2lzdGVySUQgPSByZWdJ
RDsKLSAgICAgICAgfQotCi0gICAgICAgIFByaW50QXJnKGNvbnN0IE1lbW9yeSYgbWVtb3J5KQot
ICAgICAgICAgICAgOiB0eXBlKFR5cGU6Ok1lbW9yeSkKLSAgICAgICAgewotICAgICAgICAgICAg
dS5tZW1vcnkgPSBtZW1vcnk7Ci0gICAgICAgIH0KLQotICAgICAgICBQcmludEFyZyhjb25zdCBj
aGFyKiBwdHIpCi0gICAgICAgICAgICA6IHR5cGUoVHlwZTo6Q29uc3RDaGFyUHRyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB1LmNvbnN0Q2hhclB0ciA9IHB0cjsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgUHJpbnRBcmcoY29uc3Qgdm9pZCogcHRyKQotICAgICAgICAgICAgOiB0eXBl
KFR5cGU6OkNvbnN0Vm9pZFB0cikKLSAgICAgICAgewotICAgICAgICAgICAgdS5jb25zdFZvaWRQ
dHIgPSBwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFByaW50QXJnKGludCB2YWx1
ZSkKLSAgICAgICAgICAgIDogdHlwZShUeXBlOjpJbnRwdHJWYWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgdS5pbnRwdHJWYWx1ZSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBQcmludEFyZyh1bnNpZ25lZCB2YWx1ZSkKLSAgICAgICAgICAgIDogdHlwZShUeXBlOjpV
aW50cHRyVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHUuaW50cHRyVmFsdWUgPSB2YWx1
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUHJpbnRBcmcoaW50cHRyX3QgdmFsdWUp
Ci0gICAgICAgICAgICA6IHR5cGUoVHlwZTo6SW50cHRyVmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHUuaW50cHRyVmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgUHJpbnRBcmcodWludHB0cl90IHZhbHVlKQotICAgICAgICAgICAgOiB0eXBlKFR5cGU6OlVp
bnRwdHJWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdS51aW50cHRyVmFsdWUgPSB2YWx1
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVHlwZSB0eXBlOwotICAgICAgICB1bmlv
biBWYWx1ZSB7Ci0gICAgICAgICAgICBWYWx1ZSgpIHsgfQotCi0gICAgICAgICAgICBSZWdpc3Rl
cklEIGdwUmVnaXN0ZXJJRDsKLSAgICAgICAgICAgIEZQUmVnaXN0ZXJJRCBmcFJlZ2lzdGVySUQ7
Ci0gICAgICAgICAgICBNZW1vcnkgbWVtb3J5OwotICAgICAgICAgICAgY29uc3QgY2hhciogY29u
c3RDaGFyUHRyOwotICAgICAgICAgICAgY29uc3Qgdm9pZCogY29uc3RWb2lkUHRyOwotICAgICAg
ICAgICAgaW50cHRyX3QgaW50cHRyVmFsdWU7Ci0gICAgICAgICAgICB1aW50cHRyX3QgdWludHB0
clZhbHVlOwotICAgICAgICB9IHU7Ci0gICAgfTsKK3ZvaWQgcHJpbnRBbGxSZWdpc3RlcnMoUHJp
bnRTdHJlYW0mLCBDb250ZXh0Jik7Cit2b2lkIHByaW50UENSZWdpc3RlcihQcmludFN0cmVhbSYs
IENvbnRleHQmKTsKK3ZvaWQgcHJpbnRSZWdpc3RlcklEKFByaW50U3RyZWFtJiwgQ29udGV4dCYp
Owordm9pZCBwcmludEZQUmVnaXN0ZXJJRChQcmludFN0cmVhbSYsIENvbnRleHQmKTsKK3ZvaWQg
cHJpbnRBZGRyZXNzKFByaW50U3RyZWFtJiwgQ29udGV4dCYpOwordm9pZCBwcmludE1lbW9yeShQ
cmludFN0cmVhbSYsIENvbnRleHQmKTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8QWxs
UmVnaXN0ZXJzPiA6IHB1YmxpYyBQcmludFJlY29yZCB7CisgICAgUHJpbnRlcihBbGxSZWdpc3Rl
cnMgYWxsUmVnaXN0ZXJzKQorICAgICAgICA6IFByaW50UmVjb3JkKHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oYWxsUmVnaXN0ZXJzLmNoYXJzVG9JbmRlbnQpLCBwcmludEFsbFJlZ2lzdGVycykKKyAg
ICB7IH0KK307CiAKLSAgICB0eXBlZGVmIFZlY3RvcjxQcmludEFyZz4gUHJpbnRBcmdzTGlzdDsK
LSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdEFyZywgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgotICAgIHN0YXRpYyB2b2lkIGFwcGVuZFByaW50QXJnKFByaW50QXJnc0xpc3QqIGFyZ3NM
aXN0LCBGaXJzdEFyZyYgZmlyc3RBcmcsIEFyZ3VtZW50cy4uLiBvdGhlckFyZ3MpCi0gICAgewot
ICAgICAgICBhcmdzTGlzdC0+YXBwZW5kKFByaW50QXJnKGZpcnN0QXJnKSk7Ci0gICAgICAgIGFw
cGVuZFByaW50QXJnKGFyZ3NMaXN0LCBvdGhlckFyZ3MuLi4pOwotICAgIH0KLSAgICAKLSAgICBz
dGF0aWMgdm9pZCBhcHBlbmRQcmludEFyZyhQcmludEFyZ3NMaXN0KikgeyB9Cit0ZW1wbGF0ZTw+
CitzdHJ1Y3QgUHJpbnRlcjxQQ1JlZ2lzdGVyPiA6IHB1YmxpYyBQcmludFJlY29yZCB7CisgICAg
UHJpbnRlcihQQ1JlZ2lzdGVyJikKKyAgICAgICAgOiBQcmludFJlY29yZChwcmludFBDUmVnaXN0
ZXIpCisgICAgeyB9Cit9OwogCi1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHByaW50Q2FsbGJh
Y2soUHJvYmVDb250ZXh0Kik7Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgUHJpbnRlcjxNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRD4gOiBwdWJsaWMgUHJpbnRSZWNvcmQgeworICAgIFByaW50ZXIoTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaWQpCisgICAgICAgIDogUHJpbnRSZWNvcmQoc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihpZCksIHByaW50UmVnaXN0ZXJJRCkKKyAgICB7IH0KIH07CiAKK3Rl
bXBsYXRlPD4KK3N0cnVjdCBQcmludGVyPE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+IDog
cHVibGljIFByaW50UmVjb3JkIHsKKyAgICBQcmludGVyKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lz
dGVySUQgaWQpCisgICAgICAgIDogUHJpbnRSZWNvcmQoc3RhdGljX2Nhc3Q8dWludHB0cl90Pihp
ZCksIHByaW50RlBSZWdpc3RlcklEKQorICAgIHsgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0
IFByaW50ZXI8TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3M+IDogcHVibGljIFByaW50UmVjb3JkIHsK
KyAgICBQcmludGVyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MpCisgICAgICAgIDog
UHJpbnRSZWNvcmQoRGF0YSgmYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpKSwgcHJpbnRBZGRyZXNz
KQorICAgIHsgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8TWVtb3J5PiA6IHB1
YmxpYyBQcmludFJlY29yZCB7CisgICAgUHJpbnRlcihNZW1vcnkgbWVtb3J5KQorICAgICAgICA6
IFByaW50UmVjb3JkKERhdGEoJm1lbW9yeSwgc2l6ZW9mKG1lbW9yeSkpLCBwcmludE1lbW9yeSkK
KyAgICB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+CitzdHJ1Y3QgUHJpbnRl
cjxNZW1Xb3JkPEludFR5cGU+PiA6IHB1YmxpYyBQcmludGVyPE1lbW9yeT4geworICAgIFByaW50
ZXIoTWVtV29yZDxJbnRUeXBlPiB3b3JkKQorICAgICAgICA6IFByaW50ZXI8TWVtb3J5Pih3b3Jk
KQorICAgIHsgfQorfTsKKwordm9pZCBwcmludENhbGxiYWNrKFByb2JlQ29udGV4dCopOworCit9
IC8vIG5hbWVzcGFjZSBQcmludGVyCisKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
LXZvaWQgTWFjcm9Bc3NlbWJsZXI6OnByaW50KEFyZ3VtZW50cy4uLiBhcmdzKQoraW5saW5lIHZv
aWQgTWFjcm9Bc3NlbWJsZXI6OnByaW50KEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKIHsKLSAg
ICBNYWNyb0Fzc2VtYmxlclByaW50ZXI6OnByaW50KHRoaXMsIGFyZ3MuLi4pOworICAgIGF1dG8g
cHJpbnRSZWNvcmRMaXN0ID0gUHJpbnRlcjo6bWFrZVByaW50UmVjb3JkTGlzdChzdGQ6OmZvcndh
cmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICBwcm9iZShQcmludGVyOjpwcmludENh
bGxiYWNrLCBwcmludFJlY29yZExpc3QpOwogfQogCi0KLS8vIFRoZXNlIHByaW50ZXJzIHdpbGwg
cHJpbnQgYSBibG9jayBvZiBpbmZvcm1hdGlvbi4gVGhhdCBibG9jayBtYXkgYmUKLS8vIGluZGVu
dGVkIHdpdGggdGhlIHNwZWNpZmllZCBpbmRlbnRhdGlvbi4KLXZvaWQgcHJpbnRDUFUoTWFjcm9B
c3NlbWJsZXI6OkNQVVN0YXRlJiwgaW50IGluZGVudGF0aW9uID0gMCk7Ci12b2lkIHByaW50Q1BV
UmVnaXN0ZXJzKE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZSYsIGludCBpbmRlbnRhdGlvbiA9IDAp
OwotCi0vLyBUaGVzZSBwcmludGVycyB3aWxsIHByaW50IHRoZSBzcGVjaWZpZWQgaW5mb3JtYXRp
b24gaW4gbGluZSBpbiB0aGUKLS8vIHByaW50IHN0cmVhbS4gSGVuY2UsIG5vIGluZGVudGF0aW9u
IHdpbGwgYmUgYXBwbGllZC4KLXZvaWQgcHJpbnRSZWdpc3RlcihNYWNyb0Fzc2VtYmxlcjo6Q1BV
U3RhdGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCk7Ci12b2lkIHByaW50UmVnaXN0ZXIo
TWFjcm9Bc3NlbWJsZXI6OkNQVVN0YXRlJiwgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCk7
Ci12b2lkIHByaW50TWVtb3J5KE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZSYsIGNvbnN0IE1lbW9y
eSYpOworaW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OnByaW50KFByaW50ZXI6OlByaW50UmVj
b3JkTGlzdCogcHJpbnRSZWNvcmRMaXN0KQoreworICAgIHByb2JlKFByaW50ZXI6OnByaW50Q2Fs
bGJhY2ssIHByaW50UmVjb3JkTGlzdCk7Cit9CiAKICNlbHNlIC8vIEVOQUJMRShNQVNNX1BST0JF
KQogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci12b2lkIE1hY3JvQXNzZW1ibGVy
OjpwcmludChBcmd1bWVudHMuLi4pIHsgfQoraW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBy
aW50KEFyZ3VtZW50cyYmLi4uKSB7IH0KKworaW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBy
aW50KFByaW50ZXI6OlByaW50UmVjb3JkTGlzdCopIHsgfQogCiAjZW5kaWYgLy8gRU5BQkxFKE1B
U01fUFJPQkUpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcmlu
dGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1ByaW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUHJpbnRlci5oIgorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBQcmludGVy
IHsKKwordm9pZCBwcmludENvbnN0Q2hhclN0cmluZyhQcmludFN0cmVhbSYgb3V0LCBDb250ZXh0
JiBjb250ZXh0KQoreworICAgIGNvbnN0IGNoYXIqIHN0ciA9IGNvbnRleHQuZGF0YS5hczxjb25z
dCBjaGFyKj4oKTsKKyAgICBvdXQucHJpbnQoc3RyKTsKK30KKwordm9pZCBwcmludEludHB0cihQ
cmludFN0cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQoreworICAgIG91dC5wcmludChjb250
ZXh0LmRhdGEuYXM8aW50cHRyX3Q+KCkpOworfQorCit2b2lkIHByaW50VWludHB0cihQcmludFN0
cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQoreworICAgIG91dC5wcmludChjb250ZXh0LmRh
dGEuYXM8dWludHB0cl90PigpKTsKK30KKwordm9pZCBwcmludFBvaW50ZXIoUHJpbnRTdHJlYW0m
IG91dCwgQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihjb250
ZXh0LmRhdGEuYXM8Y29uc3Qgdm9pZCo+KCkpKTsKK30KKwordm9pZCBzZXRQcmludGVyKFByaW50
UmVjb3JkJiByZWNvcmQsIENTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgLy8gRklYTUU6IEl0IHdv
dWxkIGJlIG5pY2UgaWYgd2UgY2FuIHJlbGVhc2UgdGhlIENTdHJpbmdCdWZmZXIgZnJvbSB0aGUg
Q1N0cmluZworICAgIC8vIGFuZCB0YWtlIG93bmVyc2hpcCBvZiBpdCBoZXJlIGluc3RlYWQgb2Yg
Y29weWluZyBpdCBhZ2Fpbi4KKyAgICByZWNvcmQuZGF0YS5wb2ludGVyID0gZmFzdFN0ckR1cChz
dHJpbmcuZGF0YSgpKTsKKyAgICByZWNvcmQucHJpbnRlciA9IHByaW50Q29uc3RDaGFyU3RyaW5n
OworfQorCit9IC8vIG5hbWVzcGFjZSBQcmludGVyCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRlci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgUHJvYmVDb250ZXh0OworCituYW1lc3Bh
Y2UgUHJpbnRlciB7CisKK3N0cnVjdCBDb250ZXh0OworCit1bmlvbiBEYXRhIHsKKyAgICBEYXRh
KCkgeyB9CisgICAgRGF0YSh1aW50cHRyX3QgdmFsdWUpCisgICAgICAgIDogdmFsdWUodmFsdWUp
CisgICAgeyB9CisgICAgRGF0YShjb25zdCB2b2lkKiBwb2ludGVyKQorICAgICAgICA6IHBvaW50
ZXIocG9pbnRlcikKKyAgICB7IH0KKyAgICBEYXRhKHZvaWQqIHNyYywgc2l6ZV90IHNpemUpCisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplIDw9IHNpemVvZihidWZmZXIpKTsKKyAg
ICAgICAgbWVtY3B5KGJ1ZmZlciwgc3JjLCBzaXplKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50
ZWdyYWw8VD46OnZhbHVlPjo6dHlwZT4KKyAgICBUIGFzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3BvaW50
ZXI8VD46OnZhbHVlPjo6dHlwZT4KKyAgICBjb25zdCBUIGFzKGludCA9IDApIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUPihwb2ludGVyKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPCFzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19wb2ludGVy
PFQ+Ojp2YWx1ZT46OnR5cGU+CisgICAgY29uc3QgVCYgYXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gc2l6ZW9mKGJ1ZmZlciksICJzaXplIGlzIG5v
dCBzYW5lIik7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oJmJ1
ZmZlcik7CisgICAgfQorCisgICAgdWludHB0cl90IHZhbHVlOworICAgIGNvbnN0IHZvaWQqIHBv
aW50ZXI7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICB1aW50cHRyX3QgYnVmZmVyWzRdOworI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB1aW50cHRyX3QgYnVmZmVyWzZdOworI2VuZGlmCit9
OworCitzdHJ1Y3QgQ29udGV4dCB7CisgICAgQ29udGV4dChQcm9iZUNvbnRleHQmIHByb2JlQ29u
dGV4dCwgRGF0YSYgZGF0YSkKKyAgICAgICAgOiBwcm9iZUNvbnRleHQocHJvYmVDb250ZXh0KQor
ICAgICAgICAsIGRhdGEoZGF0YSkKKyAgICB7IH0KKworICAgIFByb2JlQ29udGV4dCYgcHJvYmVD
b250ZXh0OworICAgIERhdGEmIGRhdGE7Cit9OworCit0eXBlZGVmIHZvaWQgKCpDYWxsYmFjayko
UHJpbnRTdHJlYW0mLCBDb250ZXh0Jik7CisKK3N0cnVjdCBQcmludFJlY29yZCB7CisgICAgUHJp
bnRSZWNvcmQoRGF0YSBkYXRhLCBDYWxsYmFjayBwcmludGVyKQorICAgICAgICA6IGRhdGEoZGF0
YSkKKyAgICAgICAgLCBwcmludGVyKHByaW50ZXIpCisgICAgeyB9CisKKyAgICBQcmludFJlY29y
ZChDYWxsYmFjayBwcmludGVyKQorICAgICAgICA6IHByaW50ZXIocHJpbnRlcikKKyAgICB7IH0K
KworICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBQcmludGVyLCB0eXBlbmFtZSBU
PgorICAgIFByaW50UmVjb3JkKGNvbnN0IFByaW50ZXI8VD4mIG90aGVyKQorICAgIHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Y8UHJpbnRSZWNvcmQsIFByaW50ZXI8VD4+
Ojp2YWx1ZSwgIlByaW50ZXIgc2hvdWxkIGV4dGVuZCBQcmludFJlY29yZCIpOworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihQcmludFJlY29yZCkgPT0gc2l6ZW9mKFByaW50ZXI8VD4pLCAi
UHJpbnRlciBzaG91bGQgYmUgdGhlIHNhbWUgc2l6ZSBhcyBQcmludFJlY29yZCIpOworICAgICAg
ICBkYXRhID0gb3RoZXIuZGF0YTsKKyAgICAgICAgcHJpbnRlciA9IG90aGVyLnByaW50ZXI7Cisg
ICAgfQorCisgICAgRGF0YSBkYXRhOworICAgIENhbGxiYWNrIHByaW50ZXI7CisKK3Byb3RlY3Rl
ZDoKKyAgICBQcmludFJlY29yZCgpIHsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IFByaW50ZXI7CisKK3R5cGVkZWYgVmVjdG9yPFByaW50UmVjb3JkPiBQcmludFJlY29yZExp
c3Q7CisKK2lubGluZSB2b2lkIGFwcGVuZFByaW50ZXIoUHJpbnRSZWNvcmRMaXN0JikgeyB9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZpcnN0LCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitpbmxpbmUg
dm9pZCBhcHBlbmRQcmludGVyKFByaW50UmVjb3JkTGlzdCYgcHJpbnRSZWNvcmRMaXN0LCBGaXJz
dCBmaXJzdCwgQXJndW1lbnRzJiYuLi4gb3RoZXJzKQoreworICAgIHByaW50UmVjb3JkTGlzdC5h
cHBlbmQoUHJpbnRlcjxGaXJzdD4oZmlyc3QpKTsKKyAgICBhcHBlbmRQcmludGVyKHByaW50UmVj
b3JkTGlzdCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4ob3RoZXJzKS4uLik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK2lubGluZSBQcmludFJlY29yZExpc3QqIG1ha2VQ
cmludFJlY29yZExpc3QoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQoreworICAgIGF1dG8gcHJp
bnRSZWNvcmRMaXN0ID0gbmV3IFByaW50UmVjb3JkTGlzdCgpOworICAgIGFwcGVuZFByaW50ZXIo
KnByaW50UmVjb3JkTGlzdCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7
CisgICAgcmV0dXJuIHByaW50UmVjb3JkTGlzdDsKK30KKworLy8gU29tZSB1dGlsaXR5IGZ1bmN0
aW9ucyBmb3Igc3BlY2lhbGl6aW5nIHByaW50ZXJzLgorCit2b2lkIHByaW50Q29uc3RDaGFyU3Ry
aW5nKFByaW50U3RyZWFtJiwgQ29udGV4dCYpOwordm9pZCBwcmludEludHB0cihQcmludFN0cmVh
bSYsIENvbnRleHQmKTsKK3ZvaWQgcHJpbnRVaW50cHRyKFByaW50U3RyZWFtJiwgQ29udGV4dCYp
Owordm9pZCBwcmludFBvaW50ZXIoUHJpbnRTdHJlYW0mLCBDb250ZXh0Jik7CisKK3ZvaWQgc2V0
UHJpbnRlcihQcmludFJlY29yZCYsIENTdHJpbmcmJik7CisKKy8vIFNwZWNpYWxpemVkIHByaW50
ZXJzLgorCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgUHJpbnRlcjxjb25zdCBjaGFyKj4gOiBwdWJsaWMg
UHJpbnRSZWNvcmQgeworICAgIFByaW50ZXIoY29uc3QgY2hhciogc3RyKQorICAgICAgICA6IFBy
aW50UmVjb3JkKHN0ciwgcHJpbnRDb25zdENoYXJTdHJpbmcpCisgICAgeyB9Cit9OworCit0ZW1w
bGF0ZTw+CitzdHJ1Y3QgUHJpbnRlcjxjaGFyKj4gOiBwdWJsaWMgUHJpbnRlcjxjb25zdCBjaGFy
Kj4geworICAgIFByaW50ZXIoY2hhciogc3RyKQorICAgICAgICA6IFByaW50ZXI8Y29uc3QgY2hh
cio+KHN0cikKKyAgICB7IH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBQcmludGVyPFJhd1Bv
aW50ZXI+IDogcHVibGljIFByaW50UmVjb3JkIHsKKyAgICBQcmludGVyKFJhd1BvaW50ZXIgcmF3
UG9pbnRlcikKKyAgICAgICAgOiBQcmludFJlY29yZChyYXdQb2ludGVyLnZhbHVlKCksIHByaW50
UG9pbnRlcikKKyAgICB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJiBz
dGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19zaWduZWQ+Pgordm9pZCBzZXRQcmludGVyKFByaW50
UmVjb3JkJiByZWNvcmQsIFQgdmFsdWUsIGludHB0cl90ID0gMCkKK3sKKyAgICByZWNvcmQuZGF0
YS52YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpOworICAgIHJlY29yZC5wcmlu
dGVyID0gcHJpbnRJbnRwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJiAh
c3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNfc2lnbmVkPj4KK3ZvaWQgc2V0UHJpbnRlcihQcmlu
dFJlY29yZCYgcmVjb3JkLCBUIHZhbHVlLCB1aW50cHRyX3QgPSAwKQoreworICAgIHJlY29yZC5k
YXRhLnZhbHVlID0gc3RhdGljX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSk7CisgICAgcmVjb3JkLnBy
aW50ZXIgPSBwcmludFVpbnRwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
UHJpbnRlciA6IHB1YmxpYyBQcmludFJlY29yZCB7CisgICAgUHJpbnRlcihUIHZhbHVlKQorICAg
IHsKKyAgICAgICAgc2V0UHJpbnRlcigqdGhpcywgdmFsdWUpOworICAgIH0KK307CisKK30gLy8g
bmFtZXNwYWNlIFByaW50ZXIKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE1NjA2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0
aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJQcmlu
dFNwZWNpYWwuaCIKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJCM0FyZ3Vt
ZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0F0b21pY1ZhbHVlLmgiCkBAIC0xMTI3LDYgKzEx
MjgsMjggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIEFpcjo6T29wczsKICAgICB9CiAKKyNp
ZiBFTkFCTEUoTUFTTV9QUk9CRSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgdm9pZCBwcmludChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAg
ICBWYWx1ZSogb3JpZ2luID0gbV92YWx1ZTsKKyAgICAgICAgcHJpbnQob3JpZ2luLCBzdGQ6OmZv
cndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBwcmludChWYWx1ZSogb3JpZ2luLCBBcmd1
bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBhdXRvIHByaW50TGlzdCA9IFBy
aW50ZXI6Om1ha2VQcmludFJlY29yZExpc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1l
bnRzKS4uLik7CisgICAgICAgIGF1dG8gcHJpbnRTcGVjaWFsID0gc3RhdGljX2Nhc3Q8UHJpbnRT
cGVjaWFsKj4obV9jb2RlLmFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxQcmludFNwZWNpYWw+
KHByaW50TGlzdCkpKTsKKyAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBvcmlnaW4sIEFyZzo6c3Bl
Y2lhbChwcmludFNwZWNpYWwpKTsKKyAgICAgICAgUHJpbnRlcjo6YXBwZW5kQWlyQXJncyhpbnN0
LCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAgYXBwZW5k
KFdURk1vdmUoaW5zdCkpOworICAgIH0KKyNlbHNlCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIHZvaWQgcHJpbnQoQXJndW1lbnRzJiYuLi4pIHsgfQorI2VuZGlmIC8v
IEVOQUJMRShNQVNNX1BST0JFKQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgogICAgIHZvaWQgYXBwZW5kKEFpcjo6T3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJn
dW1lbnRzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUHJp
bnRTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclByaW50U3BlY2lhbC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJQcmludFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclByaW50U3BlY2lhbC5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKyNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKKworI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyUHJpbnRlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK1ByaW50U3BlY2lhbDo6UHJpbnRTcGVjaWFsKFByaW50ZXI6OlByaW50UmVj
b3JkTGlzdCogbGlzdCkKKyAgICA6IG1fcHJpbnRSZWNvcmRMaXN0KGxpc3QpCit7Cit9CisKK1By
aW50U3BlY2lhbDo6flByaW50U3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgUHJpbnRTcGVjaWFsOjpm
b3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNr
PiYpCit7Cit9CisKK2Jvb2wgUHJpbnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmKQoreworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByaW50U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYsIHVu
c2lnbmVkKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQcmludFNwZWNpYWw6OnJl
cG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikKK3sKK30KKworQ0Nh
bGxIZWxwZXJzOjpKdW1wIFByaW50U3BlY2lhbDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBzaXplX3QgY3VycmVudEFy
ZyA9IDE7IC8vIFNraXAgdGhlIFByaW50U3BlY2lhbCBhcmcuCisgICAgZm9yIChhdXRvJiB0ZXJt
IDogKm1fcHJpbnRSZWNvcmRMaXN0KSB7CisgICAgICAgIGlmICh0ZXJtLnByaW50ZXIgPT0gUHJp
bnRlcjo6cHJpbnRBaXJBcmcpIHsKKyAgICAgICAgICAgIGNvbnN0IEFyZyYgYXJnID0gaW5zdC5h
cmdzW2N1cnJlbnRBcmcrK107CisgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgICAgICAgICAgdGVybSA9IFByaW50ZXI6
OlByaW50ZXI8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGFyZy5ncHIoKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgICAg
ICAgICB0ZXJtID0gUHJpbnRlcjo6UHJpbnRlcjxNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcz4oYXJn
LmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBq
aXQucHJpbnQobV9wcmludFJlY29yZExpc3QpOworICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1
bXAoKTsKK30KKworUmVnaXN0ZXJTZXQgUHJpbnRTcGVjaWFsOjpleHRyYUVhcmx5Q2xvYmJlcmVk
UmVncyhJbnN0JikKK3sKKyAgICByZXR1cm4gUmVnaXN0ZXJTZXQoKTsKK30KKworUmVnaXN0ZXJT
ZXQgUHJpbnRTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpCit7CisgICAgcmV0dXJu
IFJlZ2lzdGVyU2V0KCk7Cit9CisKK3ZvaWQgUHJpbnRTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiUHJpbnQiKTsKK30KKwordm9pZCBQ
cmludFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgicHJpbnQgZm9yIGRlYnVnZ2luZyBsb2dnaW5nLiIpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEIzOjpBaXIKKworbmFtZXNwYWNlIFByaW50ZXIgeworCitOT19SRVRVUk4gdm9p
ZCBwcmludEFpckFyZyhQcmludFN0cmVhbSYsIENvbnRleHQmKQoreworICAgIC8vIFRoaXMgZnVu
Y3Rpb24gaXMgb25seSBhIHBsYWNlaG9sZGVyIHRvIGxldCBQcmludFNwZWNpYWw6OmdlbmVyYXRl
KCkga25vdyB0aGF0CisgICAgLy8gdGhlIFByaW50ZXIgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0
aCBvbmUgZm9yIGEgcmVnaXN0ZXIsIGNvbnN0YW50LCBldGMuIEhlbmNlLAorICAgIC8vIHRoaXMg
ZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBQcmludGVyCisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUHJpbnRTcGVjaWFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQcmludFNw
ZWNpYWwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clByaW50U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorI2lmIEVOQUJMRShNQVNNX1BST0JFKQorCisjaW5jbHVkZSAiQWly
SW5zdC5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
clByaW50ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgUHJpbnRlciB7CisKK3R5
cGVkZWYgVmVjdG9yPEIzOjpBaXI6OkFyZz4gQXJnTGlzdDsKKworLy8gSXNTYW1lT3JSZWZlcmVu
Y2U6OnZhbHVlIGlzIHRydWUgaWYgVCBpcyB0aGUgc2FtZSB0eXBlIGFzIFUgb3IgVSYuIEVsc2Us
IGl0IGlzIGZhbHNlLgorICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0
YXRpYyBjb25zdGV4cHIgYXV0byBJc1NhbWVPclJlZmVyZW5jZUhlbHBlcihpbnQpIC0+IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIFU+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwg
VSY+Ojp2YWx1ZSwgc3RkOjp0cnVlX3R5cGU+OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPgorc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmZhbHNlX3R5cGUgSXNTYW1lT3JSZWZlcmVu
Y2VIZWxwZXIoLi4uKTsKKwordGVtcGxhdGU8Y2xhc3MgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBJ
c1NhbWVPclJlZmVyZW5jZSA6IHB1YmxpYyBzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoSXNTYW1lT3JS
ZWZlcmVuY2VIZWxwZXI8VCwgVT4oMCkpLCBzdGQ6OnRydWVfdHlwZT4geyB9OworCisgICAgCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHMsIHR5cGVuYW1lID0gc3Rk
OjplbmFibGVfaWZfdDxJc1NhbWVPclJlZmVyZW5jZTxULCBCMzo6QWlyOjpUbXA+Ojp2YWx1ZSB8
fCBJc1NhbWVPclJlZmVyZW5jZTxULCBSZWc+Ojp2YWx1ZT4+CitpbmxpbmUgdm9pZCBhcHBlbmRB
aXJBcmcoQjM6OkFpcjo6SW5zdCYgaW5zdCwgVCYmIGFyZykKK3sKKyAgICBpbnN0LmFyZ3MuYXBw
ZW5kKHN0ZDo6Zm9yd2FyZDxUPihhcmcpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8IUlzU2FtZU9y
UmVmZXJlbmNlPFQsIEIzOjpBaXI6OlRtcD46OnZhbHVlICYmICFJc1NhbWVPclJlZmVyZW5jZTxU
LCBSZWc+Ojp2YWx1ZT4+CitpbmxpbmUgdm9pZCBhcHBlbmRBaXJBcmcoQjM6OkFpcjo6SW5zdCYs
IFQmJiwgaW50ID0gMCkgeyB9CisKK2lubGluZSB2b2lkIGFwcGVuZEFpckFyZ3MoQjM6OkFpcjo6
SW5zdCYpIHsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CitpbmxpbmUgdm9pZCBhcHBlbmRBaXJBcmdzKEIzOjpBaXI6Okluc3QmIGluc3QsIFQmJiB0LCBB
cmd1bWVudHMmJi4uLiBvdGhlcnMpCit7CisgICAgYXBwZW5kQWlyQXJnKGluc3QsIHN0ZDo6Zm9y
d2FyZDxUPih0KSk7CisgICAgYXBwZW5kQWlyQXJncyhpbnN0LCBzdGQ6OmZvcndhcmQ8QXJndW1l
bnRzPihvdGhlcnMpLi4uKTsKK30KKwordm9pZCBwcmludEFpckFyZyhQcmludFN0cmVhbSYsIENv
bnRleHQmKTsKKworLy8gUHJpbnRlcjxBcmcmPiBpcyBvbmx5IGEgcGxhY2UtaG9sZGVyIHdoaWNo
IFByaW50U3BlY2lhbDo6Z2VuZXJhdGUoKSB3aWxsIGxhdGVyCisvLyByZXBsYWNlIHdpdGggYSBQ
cmludGVyIGZvciBhIHJlZ2lzdGVyLCBjb25zdGFudCwgZXRjLiBhcyBhcHByb3ByaWF0ZS4gCit0
ZW1wbGF0ZTw+CitzdHJ1Y3QgUHJpbnRlcjxCMzo6QWlyOjpUbXA+IDogcHVibGljIFByaW50UmVj
b3JkIHsKKyAgICBQcmludGVyKEIzOjpBaXI6OlRtcCYpCisgICAgICAgIDogUHJpbnRSZWNvcmQo
cHJpbnRBaXJBcmcpCisgICAgeyB9Cit9OworICAgIAordGVtcGxhdGU8Pgorc3RydWN0IFByaW50
ZXI8UmVnPiA6IHB1YmxpYyBQcmludFJlY29yZCB7CisgICAgUHJpbnRlcihSZWcmKQorICAgICAg
ICA6IFByaW50UmVjb3JkKHByaW50QWlyQXJnKQorICAgIHsgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgUHJpbnRlcgorCituYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgUHJp
bnRTcGVjaWFsIDogcHVibGljIFNwZWNpYWwgeworcHVibGljOgorICAgIFByaW50U3BlY2lhbChQ
cmludGVyOjpQcmludFJlY29yZExpc3QqKTsKKyAgICB+UHJpbnRTcGVjaWFsKCk7CisgICAgCisg
ICAgLy8gWW91IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBwYXNzIGFyZ3VtZW50cy4gSXQg
anVzdCBzbyBoYXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBub3QKKyAgICAvLyB1c2VkIGZv
ciBhcmd1bWVudHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBCeSB0aGUgd2F5LCB0aGlz
IGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAgLy8gdGhpcyBzcGVjaWFsIHRvIGJl
IHNwZWNpZmljIHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBzY3JhdGNoUmVn
aXN0ZXIgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQg
Zm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFj
az4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJv
b2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2
b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJp
ZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMm
LCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFy
bHlDbG9iYmVyZWRSZWdzKEluc3QmKSBvdmVycmlkZTsKKyAgICBSZWdpc3RlclNldCBleHRyYUNs
b2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZHVtcEltcGwoUHJp
bnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgc3BlY2lhbEFyZ09mZnNldCA9IDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bVNwZWNpYWxBcmdzID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2FsbGVlQXJn
T2Zmc2V0ID0gbnVtU3BlY2lhbEFyZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bUNh
bGxlZUFyZ3MgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCByZXR1cm5HUEFyZ09mZnNl
dCA9IG51bVNwZWNpYWxBcmdzICsgbnVtQ2FsbGVlQXJnczsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbnVtUmV0dXJuR1BBcmdzID0gMjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcmV0
dXJuRlBBcmdPZmZzZXQgPSBudW1TcGVjaWFsQXJncyArIG51bUNhbGxlZUFyZ3MgKyBudW1SZXR1
cm5HUEFyZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVJldHVybkZQQXJncyA9IDE7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFyZ0FyZ09mZnNldCA9CisgICAgbnVtU3BlY2lh
bEFyZ3MgKyBudW1DYWxsZWVBcmdzICsgbnVtUmV0dXJuR1BBcmdzICsgbnVtUmV0dXJuRlBBcmdz
OworICAgIAorICAgIFByaW50ZXI6OlByaW50UmVjb3JkTGlzdCogbV9wcmludFJlY29yZExpc3Q7
Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUFTTV9QUk9CRSkKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIxNTYwNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTExLDUgKzMxMTEsMjIgQEAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBD
b2RlQmxvY2s6OmxpdgogICAgIH0KIH0KIAordm9pZCBzZXRQcmludGVyKFByaW50ZXI6OlByaW50
UmVjb3JkJiByZWNvcmQsIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIFByaW50ZXI6OnNl
dFByaW50ZXIocmVjb3JkLCB0b0NTdHJpbmcoY29kZUJsb2NrKSk7Cit9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKyAgICAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBKU0M6OkNvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChVTkxJ
S0VMWSghY29kZUJsb2NrKSkgeworICAgICAgICBvdXQucHJpbnQoIjxudWxsIGNvZGVCbG9jaz4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBvdXQucHJpbnQoKmNvZGVCbG9jayk7Cit9
CisgICAgCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIxNTYwNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAs
NyBAQAogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAi
UHJpbnRlci5oIgogI2luY2x1ZGUgIlByb2ZpbGVySmV0dGlzb25SZWFzb24uaCIKICNpbmNsdWRl
ICJQcm9ncmFtRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgpAQCAt
MTA4Nyw0ICsxMDg4LDEzIEBAIEpTT2JqZWN0KiBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9y
RXgKICNkZWZpbmUgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssIHN1bW1hcnksIGRldGFp
bHMpIFwKICAgICAoY29kZUJsb2NrLT52bSgpLT5sb2dFdmVudChjb2RlQmxvY2ssIHN1bW1hcnks
IFsmXSAoKSB7IHJldHVybiB0b0NTdHJpbmcgZGV0YWlsczsgfSkpCiAKKwordm9pZCBzZXRQcmlu
dGVyKFByaW50ZXI6OlByaW50UmVjb3JkJiwgQ29kZUJsb2NrKik7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQworCituYW1lc3BhY2UgV1RGIHsKKyAgICAKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6Q29kZUJsb2NrKik7CisKK30gLy8gbmFtZXNw
YWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24g
MjE1NjA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MDUsMTEgKzYwNSw3IEBAIHZvaWQgVk06OnRocm93RXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywKIHsKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAgICAgZGF0
YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uIGluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcihleGVj
KSwgIiBmb3IgY29kZSBibG9jayAiKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jaykKLSAgICAgICAg
ICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIlxuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGRhdGFMb2coIjxudWxscHRyPlxuIik7CisgICAgICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2Vw
dGlvbiBpbiBjYWxsIGZyYW1lICIsIFJhd1BvaW50ZXIoZXhlYyksICIgZm9yIGNvZGUgYmxvY2sg
IiwgY29kZUJsb2NrLCAiXG4iKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307769</attachid>
            <date>2017-04-21 12:10:01 -0700</date>
            <delta_ts>2017-04-21 13:50:58 -0700</delta_ts>
            <desc>updated patch w/ JF&apos;s feedback applied.</desc>
            <filename>bug-171101.patch</filename>
            <type>text/plain</type>
            <size>56971</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1NjIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBA
QAorMjAxNy0wNC0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3IgTUFTTSBwcm9iZSB0byBhbGxvdyBwcmludGluZyBvZiBjdXN0b20gdHlwZXMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzExMDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb3IgZXhhbXBs
ZSwgdGhpcyBhbGxvd3MgdXMgdG8gYWRkIE1BU00gcHJpbnRpbmcgb2YgQ29kZUJsb2NrKiBhbmQg
QWlyOjpBcmdzLgorCisgICAgICAgIEluIGdlbmVyYWwsIE1BU00gcHJpbnQgY2FuIGJlIHVzZWQg
bGlrZSBkYXRhTG9nLCBleGNlcHQgdGhhdCBpdCBnZW5lcmF0ZXMgSklUdGVkCisgICAgICAgIGNv
ZGUgZm9yIGRvaW5nIHRoZSBkYXRhTG9nZ2luZyBsYXRlciB3aGVuIHRoZSBKSVR0ZWQgY29kZSBy
dW5zLiAgTUFTTSBwcmludCBjYW4KKyAgICAgICAgcHJpbnQgYW55IHZhbHVlIHR5cGUgdGhhdCBh
IHNwZWNpYWxpemVkIFByaW50ZXIgdGVtcGxhdGUgb3IgYSBzZXRQcmludGVyKCkKKyAgICAgICAg
ZnVuY3Rpb24gaW1wbGVtZW50ZWQgZm9yIHRoYXQgdHlwZS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJpbnRl
cjo6cHJpbnRBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFBDUmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFJlZ2lzdGVySUQpOgorICAgICAg
ICAoSlNDOjpQcmludGVyOjpwcmludEZQUmVnaXN0ZXJJRCk6CisgICAgICAgIChKU0M6OlByaW50
ZXI6OnByaW50QWRkcmVzcyk6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6UHJpbnRlcjo6cHJpbnRDYWxsYmFjayk6CisgICAgICAgIChKU0M6OnBy
aW50SW5kZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cHJpbnRDUFUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpwcmludENQVVJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OnByaW50UEMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpwcmludFJlZ2lzdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6cHJpbnRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclByaW50ZXI6OnByaW50Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuaDoKKyAgICAgICAgKEpTQzo6QWxsUmVn
aXN0ZXJzOjpBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPEFs
bFJlZ2lzdGVycz46OlByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPFBD
UmVnaXN0ZXI+OjpQcmludGVyKToKKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD46OlByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVy
OjpQcmludGVyPE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+OjpQcmludGVyKToKKyAgICAg
ICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcz46OlByaW50
ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPE1lbW9yeT46OlByaW50ZXIpOgor
ICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyPE1lbVdvcmQ8SW50VHlwZT4+OjpQcmludGVy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnByaW50KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJQcmludGVyOjpwcmludCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyUHJpbnRlcjo6UHJpbnRBcmc6OlByaW50QXJnKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJQcmludGVyOjphcHBlbmRQcmludEFyZyk6IERlbGV0ZWQu
CisgICAgICAgIC0gUmVmYWN0b3JlZCB0byBtb3ZlIHRoZSB1bmRlcmx5aW5nIFByaW50UmVjb3Jk
IChhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMpCisgICAgICAgICAgb3V0IHRvIFByaW50
ZXIuY3BwL2guCisgICAgICAgIC0gTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcC9oIG5vdyBvbmx5
IGFkZCBjdXN0b20gUHJpbnRlcnMgZm9yIE1BU00gdHlwZXMgbGlrZQorICAgICAgICAgIFJlZ2lz
dGVySUQgYW5kIE1lbW9yeS4gIEl0IGFsc28gZGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gb2YK
KyAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cHJpbnQoKS4KKworICAgICAgICAgIEFzIGJlZm9y
ZSwgSklUIGNvZGUgdGhhdCB3aXNoZXMgdG8gdXNlIE1hY3JvQXNzZW1ibGVyOjpwcmludCgpIG5l
ZWRzIHRvCisgICAgICAgICAgI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIi4KKwor
ICAgICAgICAtIEFsc28gYWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhbiBvcHRpb25hbCBp
bmRlbnRhdGlvbiAoaW4gbnVtYmVyIG9mIGNoYXJzKQorICAgICAgICAgIHdoZW4gTUFTTSBwcmlu
dGluZyBBbGxSZWdpc3RlcnMuICBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIEFsbFJlZ2lzdGVycyBw
cmludHMKKyAgICAgICAgICBhIGJsb2NrIG9mIGRhdGEgdW5saWtlIG90aGVyIHByaW50ZXJzIHdo
aWNoIHByaW50IGlubGluZS4KKworICAgICAgICAqIGFzc2VtYmxlci9QcmludGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50Q29uc3RDaGFyU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6UHJpbnRlcjo6cHJpbnRJbnRwdHIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpw
cmludFVpbnRwdHIpOgorICAgICAgICAoSlNDOjpQcmludGVyOjpwcmludFBvaW50ZXIpOgorICAg
ICAgICAoSlNDOjpQcmludGVyOjpzZXRQcmludGVyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvUHJp
bnRlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6Q29udGV4dDo6Q29udGV4dCk6
CisgICAgICAgIChKU0M6OlByaW50ZXI6OlByaW50UmVjb3JkOjpQcmludFJlY29yZCk6CisgICAg
ICAgIChKU0M6OlByaW50ZXI6OmFwcGVuZFByaW50ZXIpOgorICAgICAgICAoSlNDOjpQcmludGVy
OjptYWtlUHJpbnRSZWNvcmRMaXN0KToKKyAgICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxS
YXdQb2ludGVyPjo6UHJpbnRlcik6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnNldFByaW50ZXIp
OgorICAgICAgICAoSlNDOjpQcmludGVyOjpQcmludGVyOjpQcmludGVyKToKKyAgICAgICAgLSBE
YXRhIHN0cnVjdHVyZXMgZm9yIGNyZWF0aW5nIGEgbGlzdCBvZiBQcmludFJlY29yZHMuICBDbGFz
c2VzIHdoaWNoIHdpc2ggdG8KKyAgICAgICAgICBhZGQgY3VzdG9tIHN1cHBvcnQgZm9yIE1BU00g
cHJpbnRpbmcgY2FuICNpbmNsdWRlICJQcmludGVyLmgiIGFuZCBpbXBsZW1lbnQKKyAgICAgICAg
ICBlaXRoZXI6CisgICAgICAgICAgMS4gYSBzcGVjaWFsaXplZCBQcmludGVyIHRlbXBsYXRlLCBv
cgorICAgICAgICAgIDIuIGEgc2V0UHJpbnRlcigpIGZ1bmN0aW9uLgorCisgICAgICAgICAgU2Vl
IFByaW50ZXI8UmVnPiBhbmQgUHJpbnRlcjxCMzo6QWlyOjpUbXA+IGluIEFpclByaW50U3BlY2lh
bC5oIGZvciBleGFtcGxlcyBvZgorICAgICAgICAgICgxKS4gIFNlZSBDb2RlQmxvY2sncyBzZXRQ
cmludGVyKCkgZm9yIGFuIGV4YW1wbGUgb2YgKDIpLgorCisgICAgICAgICogYjMvQjNMb3dlclRv
QWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6cHJpbnQpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJQcmludFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpQcmludFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpQcmludFNwZWNpYWw6On5QcmludFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpQcmludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmlu
dFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6
OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpyZXBv
cnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UHJpbnRTcGVjaWFsOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlByaW50U3BlY2lhbDo6ZXh0cmFFYXJs
eUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6OmV4
dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlByaW50U3BlY2lhbDo6
ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQcmludFNwZWNpYWw6OmRlZXBEdW1w
SW1wbCk6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnByaW50QWlyQXJnKToKKyAgICAgICAgKiBi
My9haXIvQWlyUHJpbnRTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpQcmludGVyOjph
cHBlbmRBaXJBcmcpOgorICAgICAgICAoSlNDOjpQcmludGVyOjphcHBlbmRBaXJBcmdzKToKKyAg
ICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxCMzo6QWlyOjpUbXA+OjpQcmludGVyKToKKyAg
ICAgICAgKEpTQzo6UHJpbnRlcjo6UHJpbnRlcjxSZWc+OjpQcmludGVyKToKKyAgICAgICAgLSBB
ZGQgdGhlIHByaW50KCkgb3BlcmF0aW9uIGZvciB1c2UgaW4gTG93ZXJUb0Fpci4gIHByaW50KCkg
d2lsbCBlbWl0IGEKKyAgICAgICAgICBQcmludFNwZWNpYWwgdGhhdCB3aWxsIHVsdGltYXRlbHkg
ZW1pdCBhIE1BU00gcHJpbnQgdG8gcHJpbnQgd2hhdCB3ZSB3YW50LgorICAgICAgICAtIExvd2Vy
VG9BaXIncyBwcmludCgpIGFkZHMgdGhlIGFiaWxpdHkgdG8gcHJpbnQgQWlyOjpBcmdzLgorICAg
ICAgICAtIFVubGlrZSBpbiB0aGUgYmFzZWxpbmUgSklUIGFuZCB0aGUgREZHLCBMb3dlclRvQWly
J3MgcHJpbnQoKSBjYW4gcGVydHVyYiB0aGUKKyAgICAgICAgICB1c2FnZSBvZiByZWdpc3RlcnMu
ICBUaGlzIGlzIGJlY2F1c2UgUHJpbnRTcGVjaWFsIGlzIGEgcGF0Y2ggcG9pbnQsIGFuZCBpdAor
ICAgICAgICAgIHByZXZlbnRzIGNlcnRhaW4gb3B0aW1pemF0aW9ucy4gIElmIG5vdCB1c2VkIGNh
cmVmdWxseSwgYW4gYXR0ZW1wdCB0byBwcmludCgpCisgICAgICAgICAgYW4gQXJnIGJ5IHRha2lu
ZyBhIFRtcCwgY2FuIGZvcmNlIHRoZSBCMyBWYWx1ZSBpbnRvIGEgVG1wIGVhcmxpZXIgdGhhbiBp
dCB3b3VsZAorICAgICAgICAgIG90aGVyd2lzZSBkbyBzby4gIFNvLCB1c2UgTG93ZXJUb0Fpcidz
IHByaW50KCkgd2l0aCBjYXJlLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6c2V0UHJpbnRlcik6CisgICAgICAgIC0gTm93IHdlIGNhbiBNQVNNIHBy
aW50IENvZGVCbG9jayouCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAt
IE5vdyB3ZSBjYW4gZGF0YUxvZyBDb2RlQmxvY2sqIChpbmNsdWRpbmcgbnVsbCBDb2RlQmxvY2sg
cG9pbnRlcnMpLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisKKyAgICAgICAg
KiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OnRocm93RXhjZXB0aW9uKToKKyAg
ICAgICAgLSBVc2UgdGhlIG5ldyBhYmlsaXR5IHRvIGRhdGFMb2cgQ29kZUJsb2NrKi4gIE5vIG5l
ZWQgdG8gZG8gYW4gZXhwbGljaXQgbnVsbAorICAgICAgICAgIGNoZWNrIGJlZm9yZSBwcmludGlu
ZyBhbnltb3JlLgorCiAyMDE3LTA0LTIxICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCBDbG9vcCBidWlsZC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNTYyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiAr
NzIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckNvZGVSZWYuY3BwCiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUHJpbnRlci5j
cHAKICAgICBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwCisgICAgYXNzZW1i
bGVyL1ByaW50ZXIuY3BwCiAKICAgICBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFj
a0J5TGluZWFyU2Nhbi5jcHAKICAgICBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBo
Q29sb3JpbmcuY3BwCkBAIC0xMDUsNiArMTA2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBiMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNlLmNwcAogICAgIGIzL2Fpci9BaXJQaGFz
ZUluc2VydGlvblNldC5jcHAKICAgICBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHAKKyAgICBiMy9h
aXIvQWlyUHJpbnRTcGVjaWFsLmNwcAogICAgIGIzL2Fpci9BaXJSZWdMaXZlbmVzcy5jcHAKICAg
ICBiMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAKICAgICBiMy9haXIvQWlyU2ltcGxp
ZnlDRkcuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE1
NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0NDUsOSArMjQ0NSwxMyBAQAogCQlG
RTRENTVCODFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRENTVCNzFBRTcxNkNBMDA1MkU0
NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkU1MDY4NjUxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVycmVkU291
cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU1MDY4NjQxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNTA2ODY3MUFFMjVF
MjgwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1MDY4NjYxQUUyNUUyODAwMDlEQUI3IC8qIERl
ZmVycmVkU291cmNlRHVtcC5jcHAgKi87IH07CisJCUZFNTYyOENEMUU5OTUxMkQwMEM0OUU0NSAv
KiBBaXJQcmludFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU1NjI4Q0IxRTk5NTEyNDAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5j
cHAgKi87IH07CisJCUZFNTYyOENFMUU5OTUxMzIwMEM0OUU0NSAvKiBBaXJQcmludFNwZWNpYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTYyOEND
MUU5OTUxMjQwMEM0OUU0NSAvKiBBaXJQcmludFNwZWNpYWwuaCAqLzsgfTsKIAkJRkU1OTMyQTcx
ODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1F
bnRyeVNjb3BlLmNwcCAqLzsgfTsKIAkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50
cnlTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNjAyOUQ5MUQ2RTFFNEYwMDMw
MjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTYwMjlEODFENkUxRTMzMDAzMDIwNEQgLyogRXhjZXB0
aW9uRXZlbnRMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFNjNERDU0MUVBOUI2MUUwMDEwM0E2OSAvKiBQcmludGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTYzREQ1MzFFQTlCNjBF
MDAxMDNBNjkgLyogUHJpbnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZFNjNERDU2MUVBOUJDNjcwMDEwM0E2OSAvKiBQcmludGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjNERDU1MUVB
OUJDNUQwMDEwM0E2OSAvKiBQcmludGVyLmNwcCAqLzsgfTsKIAkJRkU2NDkxMzcxRDc4RjAxRDAw
QTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTY0OTEzNjFENzhGMDEzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2Nv
cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RTY0OTEzOTFENzhGM0FGMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2NDkxMzgxRDc4RjNBMzAwQTY5
NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmNwcCAqLzsgfTsKIAkJRkU2OEM2MzcxQjkwREUwNDAwNDJC
Q0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2OEM2MzYxQjkwREREOTAwNDJCQ0IzIC8qIE1hY3JvQXNz
ZW1ibGVyUHJpbnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC01MDcxLDkgKzUwNzUsMTMgQEAKIAkJRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5
IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
dGVyYXRpb25TdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU1MDY4NjQx
QUUyNDYzOTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEZWZlcnJlZFNvdXJjZUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkU1MDY4NjYxQUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVt
cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWZlcnJlZFNvdXJj
ZUR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTU2MjhDQjFFOTk1MTI0
MDBDNDlFNDUgLyogQWlyUHJpbnRTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEFpclByaW50U3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyUHJpbnRT
cGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU1NjI4Q0MxRTk5NTEy
NDAwQzQ5RTQ1IC8qIEFpclByaW50U3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJQcmludFNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJQcmludFNwZWNpYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU1OTMyQTUxODNDNUEyNjAwQTFFQ0ND
IC8qIFZNRW50cnlTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBWTUVudHJ5U2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJB
NjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZNRW50cnlTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTYwMjlEODFENkUxRTMzMDAzMDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb25FdmVudExvY2F0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjNERDUzMUVBOUI2MEUwMDEwM0E2OSAv
KiBQcmludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW50ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2M0RENTUxRUE5QkM1RDAwMTAzQTY5IC8q
IFByaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjQ5MTM2MUQ3OEYwMTMwMEE2
OTRENCAvKiBFeGNlcHRpb25TY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFeGNlcHRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTY0OTEz
ODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQ
cmludGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyUHJpbnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NjUyLDYg
KzU2NjAsOCBAQAogCQkJCTBGMkFDNTZEMUU4RDdBRkYwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2Vy
dGlvblNldC5oICovLAogCQkJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNj
b3BlLmNwcCAqLywKIAkJCQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5oICovLAorCQkJCUZFNTYyOENCMUU5OTUxMjQwMEM0OUU0NSAvKiBBaXJQcmludFNwZWNpYWwu
Y3BwICovLAorCQkJCUZFNTYyOENDMUU5OTUxMjQwMEM0OUU0NSAvKiBBaXJQcmludFNwZWNpYWwu
aCAqLywKIAkJCQkwRkY0QjRCQTFFODg0NDk1MDBEQkJFODYgLyogQWlyUmVnTGl2ZW5lc3MuY3Bw
ICovLAogCQkJCTBGRjRCNEJCMUU4ODQ0OTUwMERCQkU4NiAvKiBBaXJSZWdMaXZlbmVzcy5oICov
LAogCQkJCTBGNDU3MDNBMUJFNDVGMEEwMDYyQTYyOSAvKiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJz
LmNwcCAqLywKQEAgLTc1MjYsNiArNzUzNiw4IEBACiAJCQkJODYwMTYxRTIwRjNBODNDMTAwRjg0
NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8sCiAJCQkJNjU4NjAxNzcxODVBOEY1
RTAwMDMwRUVFIC8qIE1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJODZD
NTY4REYxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCAqLywKKwkJCQlGRTYzREQ1
NTFFQTlCQzVEMDAxMDNBNjkgLyogUHJpbnRlci5jcHAgKi8sCisJCQkJRkU2M0RENTMxRUE5QjYw
RTAwMTAzQTY5IC8qIFByaW50ZXIuaCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OUYg
LyogWDg2QXNzZW1ibGVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGFzc2VtYmxlcjsKQEAgLTgy
NjUsNiArODI3Nyw3IEBACiAJCQkJMEY2QjhBREQxQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2Fs
Y3VsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzM0ZDRjgxQzEzNkUyNTAwMzIzRjY3IC8q
IEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUz
MTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFNTYyOENFMUU5OTUxMzIwMEM0OUU0NSAvKiBBaXJQcmludFNwZWNpYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMzM4REYyMUJFOTNBRDEwMDEzQzg4RiAvKiBCM1N0YWNrbWFwVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNr
U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTQ2LDYgKzg1NTksNyBA
QAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21w
aWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0
MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNjNERDU0MUVB
OUI2MUUwMDEwM0E2OSAvKiBQcmludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3
MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzE0LDYgKzEwMzI4LDcgQEAKIAkJ
CQk3OTgwQzE2QzFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGQjE4QTYwMDcwMDAxQTI3RjggLyogREZHU2Fm
ZXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REQyMTMyOERGODIwMDJCMkFENyAv
KiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTYzREQ1NjFFQTlC
QzY3MDAxMDNBNjkgLyogUHJpbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxRjE0
MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY4MkZCMjE5QkNCMzY0MDBGQTNCQUQgLyogREZHU1NB
Q2FsY3VsYXRvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNTQ0LDYgKzEwNTU5LDcgQEAKIAkJ
CQkxNDQwRjg5MjBBNTA4QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0QUJERjYwMEE0MzdGRUYwMEVDQ0EwMSAvKiBKU0NhbGxiYWNrT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1N0NGNDU4MTlCRjY2NjIwMDRBQ0JGMiAvKiBK
U0NhbGxlZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTU2MjhDRDFFOTk1MTJEMDBDNDlFNDUg
LyogQWlyUHJpbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4MTg4MEQ2
QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlE
MTEwN0VDMzc2MDA0MjdBNDggLyogSlNDZWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5QUJC
MTdEMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCShyZXZpc2lvbiAyMTU2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDEzIEBAIG5h
bWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDgKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK25hbWVzcGFjZSBQcmludGVyIHsKKworc3RydWN0IFByaW50UmVjb3JkOwordHlwZWRlZiBW
ZWN0b3I8UHJpbnRSZWNvcmQ+IFByaW50UmVjb3JkTGlzdDsKKworfQorCiBjbGFzcyBNYWNyb0Fz
c2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlckJhc2UgewogcHVibGljOgogCkBAIC0xODIw
LDcgKzE4MjcsOSBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBvbmx5IHdvcmtzIGlmIEVOQUJMRShN
QVNNX1BST0JFKS4gT3RoZXJ3aXNlLCBwcmludCgpIGlzIGEgbm8tb3AuCiAgICAgLy8gU2VlIGNv
bW1lbnRzIGluIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIGZvciBleGFtcGxlcyBvZiBob3cgdG8g
dXNlIHRoaXMuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIHZvaWQg
cHJpbnQoQXJndW1lbnRzLi4uIGFyZ3MpOworICAgIHZvaWQgcHJpbnQoQXJndW1lbnRzJiYuLi4g
YXJncyk7CisKKyAgICB2b2lkIHByaW50KFByaW50ZXI6OlByaW50UmVjb3JkTGlzdCopOwogfTsK
IAogI2lmIEVOQUJMRShNQVNNX1BST0JFKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcAkocmV2aXNp
b24gMjE1NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlclByaW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyOCArMzEsMjUgQEAKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBQcmlu
dGVyIHsKIAogdXNpbmcgQ1BVU3RhdGUgPSBNYWNyb0Fzc2VtYmxlcjo6Q1BVU3RhdGU7CiB1c2lu
ZyBSZWdpc3RlcklEID0gTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ7CiB1c2luZyBGUFJlZ2lz
dGVySUQgPSBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEOwogCi1zdGF0aWMgdm9pZCBwcmlu
dEluZGVudChpbnQgaW5kZW50YXRpb24pCit2b2lkIHByaW50QWxsUmVnaXN0ZXJzKFByaW50U3Ry
ZWFtJiBvdXQsIENvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgZm9yICg7IGluZGVudGF0aW9uID4g
MDsgaW5kZW50YXRpb24tLSkKLSAgICAgICAgZGF0YUxvZygiICAgICIpOwotfQorICAgIGF1dG8m
IGNwdSA9IGNvbnRleHQucHJvYmVDb250ZXh0LmNwdTsKKyAgICB1bnNpZ25lZCBjaGFyc1RvSW5k
ZW50ID0gY29udGV4dC5kYXRhLmFzPHVuc2lnbmVkPigpOwogCi0jZGVmaW5lIElOREVOVCBwcmlu
dEluZGVudChpbmRlbnRhdGlvbikKLSAgICAKLXZvaWQgcHJpbnRDUFUoQ1BVU3RhdGUmIGNwdSwg
aW50IGluZGVudGF0aW9uKQotewotICAgIElOREVOVCwgZGF0YUxvZygiY3B1OiB7XG4iKTsKLSAg
ICBwcmludENQVVJlZ2lzdGVycyhjcHUsIGluZGVudGF0aW9uICsgMSk7Ci0gICAgSU5ERU5ULCBk
YXRhTG9nKCJ9XG4iKTsKLX0KKyAgICBhdXRvIGluZGVudCA9IFsmXSAoKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGFyc1RvSW5kZW50OyArK2kpCisgICAgICAgICAgICBv
dXQucHJpbnQoIiAiKTsKKyAgICB9OworI2RlZmluZSBJTkRFTlQgaW5kZW50KCkKKworICAgIElO
REVOVCwgb3V0LnByaW50KCJjcHU6IHtcbiIpOwogCi12b2lkIHByaW50Q1BVUmVnaXN0ZXJzKENQ
VVN0YXRlJiBjcHUsIGludCBpbmRlbnRhdGlvbikKLXsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgICNkZWZpbmUgSU5UUFRSX0hFWF9WQUxVRV9GT1JNQVQgIjB4JTA4bHgiCiAjZWxzZQpAQCAt
NjEsNyArNTgsNyBAQCB2b2lkIHByaW50Q1BVUmVnaXN0ZXJzKENQVVN0YXRlJiBjcHUsIGluCiAK
ICAgICAjZGVmaW5lIFBSSU5UX0dQUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSB7IFwKICAgICAg
ICAgaW50cHRyX3QgdmFsdWUgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihjcHUuX3JlZ05h
bWUpOyBcCi0gICAgICAgIElOREVOVCwgZGF0YUxvZ0YoIiU2czogIiBJTlRQVFJfSEVYX1ZBTFVF
X0ZPUk1BVCAiICAlbGRcbiIsICNfcmVnTmFtZSwgdmFsdWUsIHZhbHVlKSA7IFwKKyAgICAgICAg
SU5ERU5ULCBvdXQucHJpbnRmKCIgICAgJTZzOiAiIElOVFBUUl9IRVhfVkFMVUVfRk9STUFUICIg
ICVsZFxuIiwgI19yZWdOYW1lLCB2YWx1ZSwgdmFsdWUpIDsgXAogICAgIH0KICAgICBGT1JfRUFD
SF9DUFVfR1BSRUdJU1RFUihQUklOVF9HUFJFR0lTVEVSKQogICAgIEZPUl9FQUNIX0NQVV9TUEVD
SUFMX1JFR0lTVEVSKFBSSU5UX0dQUkVHSVNURVIpCkBAIC03MSw1NiArNjgsNjMgQEAgdm9pZCBw
cmludENQVVJlZ2lzdGVycyhDUFVTdGF0ZSYgY3B1LCBpbgogICAgICNkZWZpbmUgUFJJTlRfRlBS
RUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAogICAgICAgICB1aW50NjRfdCogdSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDY0X3QqPigmY3B1Ll9yZWdOYW1lKTsgXAogICAgICAgICBkb3VibGUq
IGQgPSByZWludGVycHJldF9jYXN0PGRvdWJsZSo+KCZjcHUuX3JlZ05hbWUpOyBcCi0gICAgICAg
IElOREVOVCwgZGF0YUxvZ0YoIiU2czogMHglMDE2bGx4ICAlLjEzZ1xuIiwgI19yZWdOYW1lLCAq
dSwgKmQpOyBcCisgICAgICAgIElOREVOVCwgb3V0LnByaW50ZigiICAgICU2czogMHglMDE2bGx4
ICAlLjEzZ1xuIiwgI19yZWdOYW1lLCAqdSwgKmQpOyBcCiAgICAgfQogICAgIEZPUl9FQUNIX0NQ
VV9GUFJFR0lTVEVSKFBSSU5UX0ZQUkVHSVNURVIpCiAgICAgI3VuZGVmIFBSSU5UX0ZQUkVHSVNU
RVIKKworICAgIElOREVOVCwgb3V0LnByaW50KCJ9XG4iKTsKKyN1bmRlZiBJTkRFTlQKKwogfQog
Ci1zdGF0aWMgdm9pZCBwcmludFBDKENQVVN0YXRlJiBjcHUpCit2b2lkIHByaW50UENSZWdpc3Rl
cihQcmludFN0cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQogewotICAgIHVuaW9uIHsKLSAg
ICAgICAgdm9pZCogdm9pZFB0cjsKLSAgICAgICAgaW50cHRyX3QgaW50cHRyVmFsdWU7Ci0gICAg
fSB1OworICAgIGF1dG8gY3B1ID0gY29udGV4dC5wcm9iZUNvbnRleHQuY3B1OworICAgIHZvaWQq
IHZhbHVlOwogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCi0gICAgdS52b2lkUHRyID0gY3B1
LmVpcDsKKyAgICB2YWx1ZSA9IGNwdS5laXA7CiAjZWxpZiBDUFUoQVJNX1RSQURJVElPTkFMKSB8
fCBDUFUoQVJNX1RIVU1CMikgfHwgQ1BVKEFSTTY0KQotICAgIHUudm9pZFB0ciA9IGNwdS5wYzsK
KyAgICB2YWx1ZSA9IGNwdS5wYzsKICNlbHNlCiAjZXJyb3IgIlVuc3VwcG9ydGVkIENQVSIKICNl
bmRpZgotICAgIGRhdGFMb2dGKCJwYzo8JXAgJWxkPiIsIHUudm9pZFB0ciwgdS5pbnRwdHJWYWx1
ZSk7CisgICAgb3V0LnByaW50ZigicGM6PCVwICVsZD4iLCB2YWx1ZSwgYml0d2lzZV9jYXN0PGlu
dHB0cl90Pih2YWx1ZSkpOwogfQogCi12b2lkIHByaW50UmVnaXN0ZXIoQ1BVU3RhdGUmIGNwdSwg
UmVnaXN0ZXJJRCByZWdJRCkKK3ZvaWQgcHJpbnRSZWdpc3RlcklEKFByaW50U3RyZWFtJiBvdXQs
IENvbnRleHQmIGNvbnRleHQpCiB7CisgICAgUmVnaXN0ZXJJRCByZWdJRCA9IGNvbnRleHQuZGF0
YS5hczxSZWdpc3RlcklEPigpOwogICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBDUFVTdGF0ZTo6Z3By
TmFtZShyZWdJRCk7Ci0gICAgdW5pb24gewotICAgICAgICB2b2lkKiB2b2lkUHRyOwotICAgICAg
ICBpbnRwdHJfdCBpbnRwdHJWYWx1ZTsKLSAgICB9IHU7Ci0gICAgdS52b2lkUHRyID0gY3B1Lmdw
cihyZWdJRCk7Ci0gICAgZGF0YUxvZ0YoIiVzOjwlcCAlbGQ+IiwgbmFtZSwgdS52b2lkUHRyLCB1
LmludHB0clZhbHVlKTsKKyAgICB2b2lkKiB2YWx1ZSA9IGNvbnRleHQucHJvYmVDb250ZXh0Lmdw
cihyZWdJRCk7CisgICAgb3V0LnByaW50ZigiJXM6PCVwICVsZD4iLCBuYW1lLCB2YWx1ZSwgYml0
d2lzZV9jYXN0PGludHB0cl90Pih2YWx1ZSkpOwogfQogCi12b2lkIHByaW50UmVnaXN0ZXIoQ1BV
U3RhdGUmIGNwdSwgRlBSZWdpc3RlcklEIHJlZ0lEKQordm9pZCBwcmludEZQUmVnaXN0ZXJJRChQ
cmludFN0cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQogeworICAgIEZQUmVnaXN0ZXJJRCBy
ZWdJRCA9IGNvbnRleHQuZGF0YS5hczxGUFJlZ2lzdGVySUQ+KCk7CiAgICAgY29uc3QgY2hhciog
bmFtZSA9IENQVVN0YXRlOjpmcHJOYW1lKHJlZ0lEKTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGRv
dWJsZSBkb3VibGVWYWx1ZTsKLSAgICAgICAgdWludDY0X3QgdWludDY0VmFsdWU7Ci0gICAgfSB1
OwotICAgIHUuZG91YmxlVmFsdWUgPSBjcHUuZnByKHJlZ0lEKTsKLSAgICBkYXRhTG9nRigiJXM6
PDB4JTAxNmxseCAlLjEzZz4iLCBuYW1lLCB1LnVpbnQ2NFZhbHVlLCB1LmRvdWJsZVZhbHVlKTsK
KyAgICBkb3VibGUgdmFsdWUgPSBjb250ZXh0LnByb2JlQ29udGV4dC5mcHIocmVnSUQpOworICAg
IG91dC5wcmludGYoIiVzOjwweCUwMTZsbHggJS4xM2c+IiwgbmFtZSwgYml0d2lzZV9jYXN0PHVp
bnQ2NF90Pih2YWx1ZSksIHZhbHVlKTsKIH0KIAotdm9pZCBwcmludE1lbW9yeShDUFVTdGF0ZSYg
Y3B1LCBjb25zdCBNZW1vcnkmIG1lbW9yeSkKK3ZvaWQgcHJpbnRBZGRyZXNzKFByaW50U3RyZWFt
JiBvdXQsIENvbnRleHQmIGNvbnRleHQpCiB7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mg
YWRkcmVzcyA9IGNvbnRleHQuZGF0YS5hczxNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcz4oKTsKKyAg
ICBSZWdpc3RlcklEIHJlZ0lEID0gYWRkcmVzcy5iYXNlOworICAgIGNvbnN0IGNoYXIqIG5hbWUg
PSBDUFVTdGF0ZTo6Z3ByTmFtZShyZWdJRCk7CisgICAgdm9pZCogdmFsdWUgPSBjb250ZXh0LnBy
b2JlQ29udGV4dC5ncHIocmVnSUQpOworICAgIG91dC5wcmludGYoIkFkZHJlc3N7YmFzZTolczo8
JXAgJWxkPiwgb2Zmc2V0OjwweCV4ICVkPiIsIG5hbWUsIHZhbHVlLCBiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mub2Zmc2V0KTsKK30KKwordm9p
ZCBwcmludE1lbW9yeShQcmludFN0cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQoreworICAg
IGNvbnN0IE1lbW9yeSYgbWVtb3J5ID0gY29udGV4dC5kYXRhLmFzPE1lbW9yeT4oKTsKKwogICAg
IHVpbnQ4X3QqIHB0ciA9IG51bGxwdHI7CiAgICAgc3dpdGNoIChtZW1vcnkuYWRkcmVzc1R5cGUp
IHsKICAgICBjYXNlIE1lbW9yeTo6QWRkcmVzc1R5cGU6OkFkZHJlc3M6IHsKLSAgICAgICAgcHRy
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY3B1LmdwcihtZW1vcnkudS5hZGRyZXNzLmJh
c2UpKTsKKyAgICAgICAgcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY29udGV4dC5w
cm9iZUNvbnRleHQuZ3ByKG1lbW9yeS51LmFkZHJlc3MuYmFzZSkpOwogICAgICAgICBwdHIgKz0g
bWVtb3J5LnUuYWRkcmVzcy5vZmZzZXQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEzMywy
MiArMTM3LDIyIEBAIHZvaWQgcHJpbnRNZW1vcnkoQ1BVU3RhdGUmIGNwdSwgY29uc3QgTWUKICAg
ICBpZiAobWVtb3J5LmR1bXBTdHlsZSA9PSBNZW1vcnk6OlNpbmdsZVdvcmREdW1wKSB7CiAgICAg
ICAgIGlmIChtZW1vcnkubnVtQnl0ZXMgPT0gc2l6ZW9mKGludDhfdCkpIHsKICAgICAgICAgICAg
IGF1dG8gcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4ocHRyKTsKLSAgICAgICAgICAgIGRh
dGFMb2dGKCIlcDo8MHglMDJ4ICVkPiIsIHAsICpwLCAqcCk7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCIlcDo8MHglMDJ4ICVkPiIsIHAsICpwLCAqcCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKG1lbW9yeS5udW1CeXRlcyA9PSBzaXplb2YoaW50MTZfdCkp
IHsKICAgICAgICAgICAgIGF1dG8gcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MTZfdCo+KHB0cik7
Ci0gICAgICAgICAgICBkYXRhTG9nRigiJXA6PDB4JTA0eCAlZD4iLCBwLCAqcCwgKnApOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXA6PDB4JTA0eCAlZD4iLCBwLCAqcCwgKnApOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChtZW1vcnkubnVtQnl0ZXMgPT0g
c2l6ZW9mKGludDMyX3QpKSB7CiAgICAgICAgICAgICBhdXRvIHAgPSByZWludGVycHJldF9jYXN0
PGludDMyX3QqPihwdHIpOwotICAgICAgICAgICAgZGF0YUxvZ0YoIiVwOjwweCUwOHggJWQ+Iiwg
cCwgKnAsICpwKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVwOjwweCUwOHggJWQ+IiwgcCwg
KnAsICpwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAobWVt
b3J5Lm51bUJ5dGVzID09IHNpemVvZihpbnQ2NF90KSkgewogICAgICAgICAgICAgYXV0byBwID0g
cmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Kj4ocHRyKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIl
cDo8MHglMDE2bGx4ICVsbGQ+IiwgcCwgKnAsICpwKTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiVwOjwweCUwMTZsbHggJWxsZD4iLCBwLCAqcCwgKnApOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIC8vIEVsc2UsIHVua25vd24gd29yZCBzaXplLiBGYWxsIHRocnUg
YW5kIGR1bXAgaW4gdGhlIGdlbmVyaWMgd2F5LgpAQCAtMTU4LDU4ICsxNjIsMzEgQEAgdm9pZCBw
cmludE1lbW9yeShDUFVTdGF0ZSYgY3B1LCBjb25zdCBNZQogICAgIHNpemVfdCBudW1CeXRlcyA9
IG1lbW9yeS5udW1CeXRlczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUJ5dGVzOyBp
KyspIHsKICAgICAgICAgaWYgKCEoaSAlIDE2KSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIlcDog
IiwgJnB0cltpXSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcDogIiwgJnB0cltpXSk7CiAg
ICAgICAgIGVsc2UgaWYgKCEoaSAlIDQpKQotICAgICAgICAgICAgZGF0YUxvZygiICIpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiICIpOwogCi0gICAgICAgIGRhdGFMb2dGKCIlMDJ4IiwgcHRy
W2ldKTsKKyAgICAgICAgb3V0LnByaW50ZigiJTAyeCIsIHB0cltpXSk7CiAKICAgICAgICAgaWYg
KGkgJSAxNiA9PSAxNSkKLSAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgICAgICBv
dXQucHJpbnQoIlxuIik7CiAgICAgfQogICAgIGlmIChudW1CeXRlcyAlIDE2IDwgMTUpCi0gICAg
ICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKIH0KIAotdm9pZCBN
YWNyb0Fzc2VtYmxlclByaW50ZXI6OnByaW50Q2FsbGJhY2soUHJvYmVDb250ZXh0KiBjb250ZXh0
KQordm9pZCBwcmludENhbGxiYWNrKFByb2JlQ29udGV4dCogcHJvYmVDb250ZXh0KQogewotICAg
IHR5cGVkZWYgUHJpbnRBcmcgQXJnOwotICAgIFByaW50QXJnc0xpc3QmIGFyZ3NMaXN0ID0KLSAg
ICAqcmVpbnRlcnByZXRfY2FzdDxQcmludEFyZ3NMaXN0Kj4oY29udGV4dC0+YXJnKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3NMaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGF1
dG8mIGFyZyA9IGFyZ3NMaXN0W2ldOwotICAgICAgICBzd2l0Y2ggKGFyZy50eXBlKSB7Ci0gICAg
ICAgIGNhc2UgQXJnOjpUeXBlOjpBbGxSZWdpc3RlcnM6Ci0gICAgICAgICAgICBwcmludENQVShj
b250ZXh0LT5jcHUsIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJnOjpU
eXBlOjpQQ1JlZ2lzdGVyOgotICAgICAgICAgICAgcHJpbnRQQyhjb250ZXh0LT5jcHUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJnOjpUeXBlOjpSZWdpc3RlcklEOgotICAg
ICAgICAgICAgcHJpbnRSZWdpc3Rlcihjb250ZXh0LT5jcHUsIGFyZy51LmdwUmVnaXN0ZXJJRCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcmc6OlR5cGU6OkZQUmVnaXN0ZXJJ
RDoKLSAgICAgICAgICAgIHByaW50UmVnaXN0ZXIoY29udGV4dC0+Y3B1LCBhcmcudS5mcFJlZ2lz
dGVySUQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJnOjpUeXBlOjpNZW1v
cnk6Ci0gICAgICAgICAgICBwcmludE1lbW9yeShjb250ZXh0LT5jcHUsIGFyZy51Lm1lbW9yeSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcmc6OlR5cGU6OkNvbnN0Q2hhclB0
cjoKLSAgICAgICAgICAgIGRhdGFMb2coYXJnLnUuY29uc3RDaGFyUHRyKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFyZzo6VHlwZTo6Q29uc3RWb2lkUHRyOgotICAgICAgICAg
ICAgZGF0YUxvZ0YoIiVwIiwgYXJnLnUuY29uc3RWb2lkUHRyKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFyZzo6VHlwZTo6SW50cHRyVmFsdWU6Ci0gICAgICAgICAgICBkYXRh
TG9nKGFyZy51LmludHB0clZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFyZzo6VHlwZTo6VWludHB0clZhbHVlOgotICAgICAgICAgICAgZGF0YUxvZyhhcmcudS51aW50
cHRyVmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBhdXRvJiBvdXQg
PSBXVEY6OmRhdGFGaWxlKCk7CisgICAgUHJpbnRSZWNvcmRMaXN0JiBsaXN0ID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8UHJpbnRSZWNvcmRMaXN0Kj4ocHJvYmVDb250ZXh0LT5hcmcpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICBhdXRvJiByZWNv
cmQgPSBsaXN0W2ldOworICAgICAgICBDb250ZXh0IGNvbnRleHQoKnByb2JlQ29udGV4dCwgcmVj
b3JkLmRhdGEpOworICAgICAgICByZWNvcmQucHJpbnRlcihvdXQsIGNvbnRleHQpOwogICAgIH0K
IH0KIAorfSAvLyBuYW1lc3BhY2UgUHJpbnRlcgogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuaAkocmV2aXNpb24gMjE1
NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclBy
aW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlByaW50ZXIuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTU0LDE5ICs1NSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vICAg
ICAgaml0LnByaW50KCJIZWxsbyB3b3JsZFxuIik7IC8vIEVtaXRzIGNvZGUgdG8gcHJpbnQgdGhl
IHN0cmluZy4KIC8vCiAvLyAgICAgIENvZGVCbG9jayogY2IgPSAuLi47Ci0vLyAgICAgIGppdC5w
cmludChjYiwgIlxuIik7ICAgICAgICAvLyBFbWl0cyBjb2RlIHRvIHByaW50IHRoZSBwb2ludGVy
IHZhbHVlLgorLy8gICAgICBqaXQucHJpbnQoY2IsICJcbiIpOyAgICAgICAgICAgICAvLyBFbWl0
cyBjb2RlIHRvIHByaW50IHRoZSBjb2RlQmxvY2sgdmFsdWUuCisvLyAgICAgIGppdC5wcmludChS
YXdQb2ludGVyKGNiKSwgIlxuIik7IC8vIEVtaXRzIGNvZGUgdG8gcHJpbnQgdGhlIHBvaW50ZXIg
dmFsdWUuCiAvLwogLy8gICAgICBSZWdpc3RlcklEIHJlZ0lEID0gLi4uOwogLy8gICAgICBqaXQu
cHJpbnQocmVnSUQsICJcbiIpOyAgICAgLy8gRW1pdHMgY29kZSB0byBwcmludCB0aGUgcmVnaXN0
ZXIgdmFsdWUgKG5vdCB0aGUgaWQpLgogLy8KIC8vICAgICAgLy8gRW1pdHMgY29kZSB0byBwcmlu
dCBhbGwgcmVnaXN0ZXJzLiBVbmxpa2Ugb3RoZXIgaXRlbXMsIHRoaXMgcHJpbnRzCiAvLyAgICAg
IC8vIG11bHRpcGxlIGxpbmVzIGFzIGZvbGxvd3M6Ci0vLyAgICAgIC8vICAgICAgY3B1IHsKLS8v
ICAgICAgLy8gICAgICAgICAgZWF4OiAweDEyMzQ1Njc4OQotLy8gICAgICAvLyAgICAgICAgICBl
Yng6IDB4MDAwMDAwYWJjCi0vLyAgICAgIC8vICAgICAgICAgIC4uLgotLy8gICAgICAvLyAgICAg
IH0KLS8vICAgICAgaml0LnByaW50KEFsbFJlZ2lzdGVycygpKTsKKy8vICAgICAgLy8gICAgIGNw
dSB7CisvLyAgICAgIC8vICAgICAgICAgZWF4OiAweDEyMzQ1Njc4OQorLy8gICAgICAvLyAgICAg
ICAgIGVieDogMHgwMDAwMDBhYmMKKy8vICAgICAgLy8gICAgICAgICAuLi4KKy8vICAgICAgLy8g
ICAgIH0KKy8vICAgICAgdW5zaWduZWQgaW5kZW50YXRpb24gPSA0OworLy8gICAgICBqaXQucHJp
bnQoQWxsUmVnaXN0ZXJzKGluZGVudGF0aW9uKSk7CiAvLwogLy8gICAgICBqaXQucHJpbnQoTWVt
V29yZDx1aW50OF90PihyZWdJRCksICJcbiIpOyAgIC8vIEVtaXRzIGNvZGUgdG8gcHJpbnQgYSBi
eXRlIHBvaW50ZWQgdG8gYnkgdGhlIHJlZ2lzdGVyLgogLy8gICAgICBqaXQucHJpbnQoTWVtV29y
ZDx1aW50MzJfdD4ocmVnSUQpLCAiXG4iKTsgIC8vIEVtaXRzIGNvZGUgdG8gcHJpbnQgYSAzMi1i
aXQgd29yZCBwb2ludGVkIHRvIGJ5IHRoZSByZWdpc3Rlci4KQEAgLTgxLDE1ICs4NCwxOSBAQCBu
YW1lc3BhY2UgSlNDIHsKIC8vICAgICAgLy8gdG8gcHJpbnQgYWxsIHRoZSBpdGVtcy4KIC8vICAg
ICAgaml0LnByaW50KCJjYjoiLCBjYiwgIiByZWdJRDoiLCByZWdJRCwgIiBjcHU6XG4iLCBBbGxS
ZWdpc3RlcnMoKSk7CiAvLwotLy8gICBUaGUgdHlwZSBvZiB2YWx1ZXMgdGhhdCBjYW4gYmUgcHJp
bnRlZCBpcyBlbmNhcHN1bGF0ZWQgaW4gdGhlIFByaW50QXJnIHN0cnVjdCBiZWxvdy4KKy8vICAg
VGhlIHR5cGUgb2YgdmFsdWVzIHRoYXQgY2FuIGJlIHByaW50ZWQgaXMgZGV0ZXJtaW5lIGJ5IHRo
ZSBhdmFpbGFiaWxpdHkgb2YgYQorLy8gICBzcGVjaWFsaXplZCBQcmludGVyIHRlbXBsYXRlLCBv
ciBhIHNldFByaW50ZXIoKSBmdW5jdGlvbiBmb3IgdGhlIHZhbHVlIHR5cGUuCiAvLwogLy8gICBO
b3RlOiBwcmludCgpIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgaW5zZXJ0IGEgJ1xuJyBhdCB0aGUg
ZW5kIG9mIHRoZSBsaW5lLgogLy8gICBJZiB5b3Ugd2FudCBhICdcbicsIHlvdSdsbCBoYXZlIHRv
IGFkZCBpdCBleHBsaWNpdGx5IChhcyBpbiB0aGUgZXhhbXBsZXMgYWJvdmUpLgogCiAKLS8vIFRo
aXMgaXMgYSBtYXJrZXIgdHlwZSBvbmx5IHVzZWQgd2l0aCBNYWNyb0Fzc2VtYmxlclByaW50ZXI6
OnByaW50KCkuCi0vLyBTZWUgTWFjcm9Bc3NlbWJsZXJQcmludGVyOjpwcmludCgpIGJlbG93IGZv
ciBkZXRhaWxzLgotc3RydWN0IEFsbFJlZ2lzdGVycyB7IH07CitzdHJ1Y3QgQWxsUmVnaXN0ZXJz
IHsKKyAgICBleHBsaWNpdCBBbGxSZWdpc3RlcnModW5zaWduZWQgY2hhcnNUb0luZGVudCA9IDAp
CisgICAgICAgIDogY2hhcnNUb0luZGVudChjaGFyc1RvSW5kZW50KQorICAgIHsgfQorICAgIHVu
c2lnbmVkIGNoYXJzVG9JbmRlbnQ7Cit9Owogc3RydWN0IFBDUmVnaXN0ZXIgeyB9OwogCiBzdHJ1
Y3QgTWVtb3J5IHsKQEAgLTEwNyw3ICsxMTQsNyBAQCBzdHJ1Y3QgTWVtb3J5IHsKICAgICAgICAg
R2VuZXJpY0R1bXAsCiAgICAgfTsKIAotICAgIE1lbW9yeShSZWdpc3RlcklEJiByZWcsIHNpemVf
dCBieXRlcywgRHVtcFN0eWxlIHN0eWxlID0gR2VuZXJpY0R1bXApCisgICAgZXhwbGljaXQgTWVt
b3J5KFJlZ2lzdGVySUQmIHJlZywgc2l6ZV90IGJ5dGVzLCBEdW1wU3R5bGUgc3R5bGUgPSBHZW5l
cmljRHVtcCkKICAgICAgICAgOiBhZGRyZXNzVHlwZShBZGRyZXNzVHlwZTo6QWRkcmVzcykKICAg
ICAgICAgLCBkdW1wU3R5bGUoc3R5bGUpCiAgICAgICAgICwgbnVtQnl0ZXMoYnl0ZXMpCkBAIC0x
MTUsNyArMTIyLDcgQEAgc3RydWN0IE1lbW9yeSB7CiAgICAgICAgIHUuYWRkcmVzcyA9IEFkZHJl
c3MocmVnLCAwKTsKICAgICB9CiAKLSAgICBNZW1vcnkoY29uc3QgQWRkcmVzcyYgYWRkcmVzcywg
c2l6ZV90IGJ5dGVzLCBEdW1wU3R5bGUgc3R5bGUgPSBHZW5lcmljRHVtcCkKKyAgICBleHBsaWNp
dCBNZW1vcnkoY29uc3QgQWRkcmVzcyYgYWRkcmVzcywgc2l6ZV90IGJ5dGVzLCBEdW1wU3R5bGUg
c3R5bGUgPSBHZW5lcmljRHVtcCkKICAgICAgICAgOiBhZGRyZXNzVHlwZShBZGRyZXNzVHlwZTo6
QWRkcmVzcykKICAgICAgICAgLCBkdW1wU3R5bGUoc3R5bGUpCiAgICAgICAgICwgbnVtQnl0ZXMo
Ynl0ZXMpCkBAIC0xMjMsNyArMTMwLDcgQEAgc3RydWN0IE1lbW9yeSB7CiAgICAgICAgIHUuYWRk
cmVzcyA9IGFkZHJlc3M7CiAgICAgfQogCi0gICAgTWVtb3J5KGNvbnN0IEFic29sdXRlQWRkcmVz
cyYgYWRkcmVzcywgc2l6ZV90IGJ5dGVzLCBEdW1wU3R5bGUgc3R5bGUgPSBHZW5lcmljRHVtcCkK
KyAgICBleHBsaWNpdCBNZW1vcnkoY29uc3QgQWJzb2x1dGVBZGRyZXNzJiBhZGRyZXNzLCBzaXpl
X3QgYnl0ZXMsIER1bXBTdHlsZSBzdHlsZSA9IEdlbmVyaWNEdW1wKQogICAgICAgICA6IGFkZHJl
c3NUeXBlKEFkZHJlc3NUeXBlOjpBYnNvbHV0ZUFkZHJlc3MpCiAgICAgICAgICwgZHVtcFN0eWxl
KHN0eWxlKQogICAgICAgICAsIG51bUJ5dGVzKGJ5dGVzKQpAQCAtMTQ0LDE2NCArMTUxLDEwMSBA
QCBzdHJ1Y3QgTWVtb3J5IHsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+CiBzdHJ1Y3Qg
TWVtV29yZCA6IHB1YmxpYyBNZW1vcnkgewotICAgIE1lbVdvcmQoUmVnaXN0ZXJJRCYgcmVnKQor
ICAgIGV4cGxpY2l0IE1lbVdvcmQoUmVnaXN0ZXJJRCYgcmVnKQogICAgICAgICA6IE1lbW9yeShy
ZWcsIHNpemVvZihJbnRUeXBlKSwgTWVtb3J5OjpTaW5nbGVXb3JkRHVtcCkKICAgICB7IH0KIAot
ICAgIE1lbVdvcmQoY29uc3QgQWRkcmVzcyYgYWRkcmVzcykKKyAgICBleHBsaWNpdCBNZW1Xb3Jk
KGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpCiAgICAgICAgIDogTWVtb3J5KGFkZHJlc3MsIHNpemVv
ZihJbnRUeXBlKSwgTWVtb3J5OjpTaW5nbGVXb3JkRHVtcCkKICAgICB7IH0KIAotICAgIE1lbVdv
cmQoY29uc3QgQWJzb2x1dGVBZGRyZXNzJiBhZGRyZXNzKQorICAgIGV4cGxpY2l0IE1lbVdvcmQo
Y29uc3QgQWJzb2x1dGVBZGRyZXNzJiBhZGRyZXNzKQogICAgICAgICA6IE1lbW9yeShhZGRyZXNz
LCBzaXplb2YoSW50VHlwZSksIE1lbW9yeTo6U2luZ2xlV29yZER1bXApCiAgICAgeyB9CiB9Owog
CituYW1lc3BhY2UgUHJpbnRlciB7CiAKLWNsYXNzIE1hY3JvQXNzZW1ibGVyUHJpbnRlciB7Ci0g
ICAgdXNpbmcgQ1BVU3RhdGUgPSBNYWNyb0Fzc2VtYmxlcjo6Q1BVU3RhdGU7Ci0gICAgdXNpbmcg
UmVnaXN0ZXJJRCA9IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEOwotICAgIHVzaW5nIEZQUmVn
aXN0ZXJJRCA9IE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ7Ci0gICAgCi1wdWJsaWM6Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIHN0YXRpYyB2b2lkIHByaW50
KE1hY3JvQXNzZW1ibGVyKiBtYXNtLCBBcmd1bWVudHMuLi4gYXJncykKLSAgICB7Ci0gICAgICAg
IGF1dG8gYXJnc0xpc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPFByaW50QXJnc0xpc3Q+KCk7Ci0gICAg
ICAgIGFwcGVuZFByaW50QXJnKGFyZ3NMaXN0LmdldCgpLCBhcmdzLi4uKTsKLSAgICAgICAgbWFz
bS0+cHJvYmUocHJpbnRDYWxsYmFjaywgYXJnc0xpc3QucmVsZWFzZSgpKTsKLSAgICB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIHN0cnVjdCBQcmludEFyZyB7CisvLyBBZGQgc29tZSBzcGVjaWFsaXpl
ZCBwcmludGVycy4KIAotICAgICAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICAgICAgQWxs
UmVnaXN0ZXJzLAotICAgICAgICAgICAgUENSZWdpc3RlciwKLSAgICAgICAgICAgIFJlZ2lzdGVy
SUQsCi0gICAgICAgICAgICBGUFJlZ2lzdGVySUQsCi0gICAgICAgICAgICBNZW1vcnksCi0gICAg
ICAgICAgICBDb25zdENoYXJQdHIsCi0gICAgICAgICAgICBDb25zdFZvaWRQdHIsCi0gICAgICAg
ICAgICBJbnRwdHJWYWx1ZSwKLSAgICAgICAgICAgIFVpbnRwdHJWYWx1ZSwKLSAgICAgICAgfTsK
LSAgICAgICAgCi0gICAgICAgIFByaW50QXJnKEFsbFJlZ2lzdGVycyYpCi0gICAgICAgICAgICA6
IHR5cGUoVHlwZTo6QWxsUmVnaXN0ZXJzKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIFByaW50QXJnKFBDUmVnaXN0ZXImKQotICAgICAgICAgICAgOiB0eXBlKFR5cGU6
OlBDUmVnaXN0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUHJp
bnRBcmcoUmVnaXN0ZXJJRCByZWdJRCkKLSAgICAgICAgICAgIDogdHlwZShUeXBlOjpSZWdpc3Rl
cklEKQotICAgICAgICB7Ci0gICAgICAgICAgICB1LmdwUmVnaXN0ZXJJRCA9IHJlZ0lEOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBQcmludEFyZyhGUFJlZ2lzdGVySUQgcmVnSUQpCi0g
ICAgICAgICAgICA6IHR5cGUoVHlwZTo6RlBSZWdpc3RlcklEKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1LmZwUmVnaXN0ZXJJRCA9IHJlZ0lEOwotICAgICAgICB9Ci0KLSAgICAgICAgUHJpbnRB
cmcoY29uc3QgTWVtb3J5JiBtZW1vcnkpCi0gICAgICAgICAgICA6IHR5cGUoVHlwZTo6TWVtb3J5
KQotICAgICAgICB7Ci0gICAgICAgICAgICB1Lm1lbW9yeSA9IG1lbW9yeTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFByaW50QXJnKGNvbnN0IGNoYXIqIHB0cikKLSAgICAgICAgICAgIDogdHlwZShU
eXBlOjpDb25zdENoYXJQdHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHUuY29uc3RDaGFyUHRy
ID0gcHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBQcmludEFyZyhjb25zdCB2b2lk
KiBwdHIpCi0gICAgICAgICAgICA6IHR5cGUoVHlwZTo6Q29uc3RWb2lkUHRyKQotICAgICAgICB7
Ci0gICAgICAgICAgICB1LmNvbnN0Vm9pZFB0ciA9IHB0cjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgUHJpbnRBcmcoaW50IHZhbHVlKQotICAgICAgICAgICAgOiB0eXBlKFR5cGU6Oklu
dHB0clZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICB1LmludHB0clZhbHVlID0gdmFsdWU7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFByaW50QXJnKHVuc2lnbmVkIHZhbHVlKQot
ICAgICAgICAgICAgOiB0eXBlKFR5cGU6OlVpbnRwdHJWYWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgdS5pbnRwdHJWYWx1ZSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBQcmludEFyZyhpbnRwdHJfdCB2YWx1ZSkKLSAgICAgICAgICAgIDogdHlwZShUeXBlOjpJbnRw
dHJWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdS5pbnRwdHJWYWx1ZSA9IHZhbHVlOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBQcmludEFyZyh1aW50cHRyX3QgdmFsdWUpCi0g
ICAgICAgICAgICA6IHR5cGUoVHlwZTo6VWludHB0clZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1LnVpbnRwdHJWYWx1ZSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBUeXBlIHR5cGU7Ci0gICAgICAgIHVuaW9uIFZhbHVlIHsKLSAgICAgICAgICAgIFZhbHVlKCkg
eyB9Ci0KLSAgICAgICAgICAgIFJlZ2lzdGVySUQgZ3BSZWdpc3RlcklEOwotICAgICAgICAgICAg
RlBSZWdpc3RlcklEIGZwUmVnaXN0ZXJJRDsKLSAgICAgICAgICAgIE1lbW9yeSBtZW1vcnk7Ci0g
ICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdENoYXJQdHI7Ci0gICAgICAgICAgICBjb25zdCB2
b2lkKiBjb25zdFZvaWRQdHI7Ci0gICAgICAgICAgICBpbnRwdHJfdCBpbnRwdHJWYWx1ZTsKLSAg
ICAgICAgICAgIHVpbnRwdHJfdCB1aW50cHRyVmFsdWU7Ci0gICAgICAgIH0gdTsKLSAgICB9Owor
dm9pZCBwcmludEFsbFJlZ2lzdGVycyhQcmludFN0cmVhbSYsIENvbnRleHQmKTsKK3ZvaWQgcHJp
bnRQQ1JlZ2lzdGVyKFByaW50U3RyZWFtJiwgQ29udGV4dCYpOwordm9pZCBwcmludFJlZ2lzdGVy
SUQoUHJpbnRTdHJlYW0mLCBDb250ZXh0Jik7Cit2b2lkIHByaW50RlBSZWdpc3RlcklEKFByaW50
U3RyZWFtJiwgQ29udGV4dCYpOwordm9pZCBwcmludEFkZHJlc3MoUHJpbnRTdHJlYW0mLCBDb250
ZXh0Jik7Cit2b2lkIHByaW50TWVtb3J5KFByaW50U3RyZWFtJiwgQ29udGV4dCYpOworCit0ZW1w
bGF0ZTw+CitzdHJ1Y3QgUHJpbnRlcjxBbGxSZWdpc3RlcnM+IDogcHVibGljIFByaW50UmVjb3Jk
IHsKKyAgICBQcmludGVyKEFsbFJlZ2lzdGVycyBhbGxSZWdpc3RlcnMpCisgICAgICAgIDogUHJp
bnRSZWNvcmQoc3RhdGljX2Nhc3Q8dWludHB0cl90PihhbGxSZWdpc3RlcnMuY2hhcnNUb0luZGVu
dCksIHByaW50QWxsUmVnaXN0ZXJzKQorICAgIHsgfQorfTsKIAotICAgIHR5cGVkZWYgVmVjdG9y
PFByaW50QXJnPiBQcmludEFyZ3NMaXN0OwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZp
cnN0QXJnLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgc3RhdGljIHZvaWQgYXBwZW5kUHJp
bnRBcmcoUHJpbnRBcmdzTGlzdCogYXJnc0xpc3QsIEZpcnN0QXJnJiBmaXJzdEFyZywgQXJndW1l
bnRzLi4uIG90aGVyQXJncykKLSAgICB7Ci0gICAgICAgIGFyZ3NMaXN0LT5hcHBlbmQoUHJpbnRB
cmcoZmlyc3RBcmcpKTsKLSAgICAgICAgYXBwZW5kUHJpbnRBcmcoYXJnc0xpc3QsIG90aGVyQXJn
cy4uLik7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIGFwcGVuZFByaW50QXJnKFByaW50
QXJnc0xpc3QqKSB7IH0KK3RlbXBsYXRlPD4KK3N0cnVjdCBQcmludGVyPFBDUmVnaXN0ZXI+IDog
cHVibGljIFByaW50UmVjb3JkIHsKKyAgICBQcmludGVyKFBDUmVnaXN0ZXImKQorICAgICAgICA6
IFByaW50UmVjb3JkKHByaW50UENSZWdpc3RlcikKKyAgICB7IH0KK307CiAKLXByaXZhdGU6Ci0g
ICAgc3RhdGljIHZvaWQgcHJpbnRDYWxsYmFjayhQcm9iZUNvbnRleHQqKTsKK3RlbXBsYXRlPD4K
K3N0cnVjdCBQcmludGVyPE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPiA6IHB1YmxpYyBQcmlu
dFJlY29yZCB7CisgICAgUHJpbnRlcihNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpZCkKKyAg
ICAgICAgOiBQcmludFJlY29yZChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGlkKSwgcHJpbnRSZWdp
c3RlcklEKQorICAgIHsgfQogfTsKIAordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8TWFjcm9B
c3NlbWJsZXI6OkZQUmVnaXN0ZXJJRD4gOiBwdWJsaWMgUHJpbnRSZWNvcmQgeworICAgIFByaW50
ZXIoTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBpZCkKKyAgICAgICAgOiBQcmludFJlY29y
ZChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGlkKSwgcHJpbnRGUFJlZ2lzdGVySUQpCisgICAgeyB9
Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgUHJpbnRlcjxNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cz4gOiBwdWJsaWMgUHJpbnRSZWNvcmQgeworICAgIFByaW50ZXIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MgYWRkcmVzcykKKyAgICAgICAgOiBQcmludFJlY29yZChEYXRhKCZhZGRyZXNzLCBzaXpl
b2YoYWRkcmVzcykpLCBwcmludEFkZHJlc3MpCisgICAgeyB9Cit9OworCit0ZW1wbGF0ZTw+Citz
dHJ1Y3QgUHJpbnRlcjxNZW1vcnk+IDogcHVibGljIFByaW50UmVjb3JkIHsKKyAgICBQcmludGVy
KE1lbW9yeSBtZW1vcnkpCisgICAgICAgIDogUHJpbnRSZWNvcmQoRGF0YSgmbWVtb3J5LCBzaXpl
b2YobWVtb3J5KSksIHByaW50TWVtb3J5KQorICAgIHsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgSW50VHlwZT4KK3N0cnVjdCBQcmludGVyPE1lbVdvcmQ8SW50VHlwZT4+IDogcHVibGljIFBy
aW50ZXI8TWVtb3J5PiB7CisgICAgUHJpbnRlcihNZW1Xb3JkPEludFR5cGU+IHdvcmQpCisgICAg
ICAgIDogUHJpbnRlcjxNZW1vcnk+KHdvcmQpCisgICAgeyB9Cit9OworCit2b2lkIHByaW50Q2Fs
bGJhY2soUHJvYmVDb250ZXh0Kik7CisKK30gLy8gbmFtZXNwYWNlIFByaW50ZXIKKwogdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHJpbnQoQXJn
dW1lbnRzLi4uIGFyZ3MpCitpbmxpbmUgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHJpbnQoQXJndW1l
bnRzJiYuLi4gYXJndW1lbnRzKQogewotICAgIE1hY3JvQXNzZW1ibGVyUHJpbnRlcjo6cHJpbnQo
dGhpcywgYXJncy4uLik7CisgICAgYXV0byBwcmludFJlY29yZExpc3QgPSBQcmludGVyOjptYWtl
UHJpbnRSZWNvcmRMaXN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOwor
ICAgIHByb2JlKFByaW50ZXI6OnByaW50Q2FsbGJhY2ssIHByaW50UmVjb3JkTGlzdCk7CiB9CiAK
LQotLy8gVGhlc2UgcHJpbnRlcnMgd2lsbCBwcmludCBhIGJsb2NrIG9mIGluZm9ybWF0aW9uLiBU
aGF0IGJsb2NrIG1heSBiZQotLy8gaW5kZW50ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGluZGVudGF0
aW9uLgotdm9pZCBwcmludENQVShNYWNyb0Fzc2VtYmxlcjo6Q1BVU3RhdGUmLCBpbnQgaW5kZW50
YXRpb24gPSAwKTsKLXZvaWQgcHJpbnRDUFVSZWdpc3RlcnMoTWFjcm9Bc3NlbWJsZXI6OkNQVVN0
YXRlJiwgaW50IGluZGVudGF0aW9uID0gMCk7Ci0KLS8vIFRoZXNlIHByaW50ZXJzIHdpbGwgcHJp
bnQgdGhlIHNwZWNpZmllZCBpbmZvcm1hdGlvbiBpbiBsaW5lIGluIHRoZQotLy8gcHJpbnQgc3Ry
ZWFtLiBIZW5jZSwgbm8gaW5kZW50YXRpb24gd2lsbCBiZSBhcHBsaWVkLgotdm9pZCBwcmludFJl
Z2lzdGVyKE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEKTsKLXZvaWQgcHJpbnRSZWdpc3RlcihNYWNyb0Fzc2VtYmxlcjo6Q1BVU3RhdGUmLCBNYWNy
b0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEKTsKLXZvaWQgcHJpbnRNZW1vcnkoTWFjcm9Bc3NlbWJs
ZXI6OkNQVVN0YXRlJiwgY29uc3QgTWVtb3J5Jik7CitpbmxpbmUgdm9pZCBNYWNyb0Fzc2VtYmxl
cjo6cHJpbnQoUHJpbnRlcjo6UHJpbnRSZWNvcmRMaXN0KiBwcmludFJlY29yZExpc3QpCit7Cisg
ICAgcHJvYmUoUHJpbnRlcjo6cHJpbnRDYWxsYmFjaywgcHJpbnRSZWNvcmRMaXN0KTsKK30KIAog
I2Vsc2UgLy8gRU5BQkxFKE1BU01fUFJPQkUpCiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KLXZvaWQgTWFjcm9Bc3NlbWJsZXI6OnByaW50KEFyZ3VtZW50cy4uLikgeyB9Citpbmxp
bmUgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHJpbnQoQXJndW1lbnRzJiYuLi4pIHsgfQorCitpbmxp
bmUgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHJpbnQoUHJpbnRlcjo6UHJpbnRSZWNvcmRMaXN0Kikg
eyB9CiAKICNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9QcmludGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1ByaW50ZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJpbnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcmludGVyLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworbmFtZXNwYWNlIFByaW50ZXIgeworCit2b2lkIHByaW50Q29uc3RDaGFyU3RyaW5n
KFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQmIGNvbnRleHQpCit7CisgICAgY29uc3QgY2hhciog
c3RyID0gY29udGV4dC5kYXRhLmFzPGNvbnN0IGNoYXIqPigpOworICAgIG91dC5wcmludChzdHIp
OworfQorCit2b2lkIHByaW50SW50cHRyKFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQmIGNvbnRl
eHQpCit7CisgICAgb3V0LnByaW50KGNvbnRleHQuZGF0YS5hczxpbnRwdHJfdD4oKSk7Cit9CisK
K3ZvaWQgcHJpbnRVaW50cHRyKFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQmIGNvbnRleHQpCit7
CisgICAgb3V0LnByaW50KGNvbnRleHQuZGF0YS5hczx1aW50cHRyX3Q+KCkpOworfQorCit2b2lk
IHByaW50UG9pbnRlcihQcmludFN0cmVhbSYgb3V0LCBDb250ZXh0JiBjb250ZXh0KQoreworICAg
IG91dC5wcmludChSYXdQb2ludGVyKGNvbnRleHQuZGF0YS5hczxjb25zdCB2b2lkKj4oKSkpOwor
fQorCit2b2lkIHNldFByaW50ZXIoUHJpbnRSZWNvcmQmIHJlY29yZCwgQ1N0cmluZyYmIHN0cmlu
ZykKK3sKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjYW4gcmVsZWFzZSB0
aGUgQ1N0cmluZ0J1ZmZlciBmcm9tIHRoZSBDU3RyaW5nCisgICAgLy8gYW5kIHRha2Ugb3duZXJz
aGlwIG9mIGl0IGhlcmUgaW5zdGVhZCBvZiBjb3B5aW5nIGl0IGFnYWluLgorICAgIHJlY29yZC5k
YXRhLnBvaW50ZXIgPSBmYXN0U3RyRHVwKHN0cmluZy5kYXRhKCkpOworICAgIHJlY29yZC5wcmlu
dGVyID0gcHJpbnRDb25zdENoYXJTdHJpbmc7Cit9CisKK30gLy8gbmFtZXNwYWNlIFByaW50ZXIK
K30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9QcmludGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9QcmludGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9QcmludGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVh
bS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVj
dCBQcm9iZUNvbnRleHQ7CisKK25hbWVzcGFjZSBQcmludGVyIHsKKworc3RydWN0IENvbnRleHQ7
CisKK3VuaW9uIERhdGEgeworICAgIERhdGEoKQorICAgIHsKKyAgICAgICAgY29uc3QgaW50cHRy
X3QgdW5pbml0aWFsaXplZCA9IDB4ZGVhZGIwZDA7CisgICAgICAgIG1lbWNweSgmYnVmZmVyLCAm
dW5pbml0aWFsaXplZCwgc2l6ZW9mKHVuaW5pdGlhbGl6ZWQpKTsKKyAgICB9CisgICAgRGF0YSh1
aW50cHRyX3QgdmFsdWUpCisgICAgICAgIDogRGF0YSgmdmFsdWUsIHNpemVvZih2YWx1ZSkpCisg
ICAgeyB9CisgICAgRGF0YShjb25zdCB2b2lkKiBwb2ludGVyKQorICAgICAgICA6IERhdGEoJnBv
aW50ZXIsIHNpemVvZihwb2ludGVyKSkKKyAgICB7IH0KKyAgICBEYXRhKHZvaWQqIHNyYywgc2l6
ZV90IHNpemUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplIDw9IHNpemVvZihi
dWZmZXIpKTsKKyAgICAgICAgbWVtY3B5KCZidWZmZXIsIHNyYywgc2l6ZSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZT46OnR5cGU+CisgICAgVCBhcygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odmFsdWUpOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19wb2ludGVyPFQ+Ojp2YWx1ZT46OnR5cGU+CisgICAgY29uc3QgVCBhcyhpbnQgPSAw
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVD4o
cG9pbnRlcik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgIXN0
ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWU+Ojp0eXBlPgorICAgIGNvbnN0IFQmIGFzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IHNpemVvZihidWZmZXIp
LCAic2l6ZSBpcyBub3Qgc2FuZSIpOworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVCo+KCZidWZmZXIpOworICAgIH0KKworICAgIHVpbnRwdHJfdCB2YWx1ZTsKKyAgICBj
b25zdCB2b2lkKiBwb2ludGVyOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgdWludHB0cl90IGJ1
ZmZlcls0XTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgdWludHB0cl90IGJ1ZmZlcls2
XTsKKyNlbmRpZgorfTsKKworc3RydWN0IENvbnRleHQgeworICAgIENvbnRleHQoUHJvYmVDb250
ZXh0JiBwcm9iZUNvbnRleHQsIERhdGEmIGRhdGEpCisgICAgICAgIDogcHJvYmVDb250ZXh0KHBy
b2JlQ29udGV4dCkKKyAgICAgICAgLCBkYXRhKGRhdGEpCisgICAgeyB9CisKKyAgICBQcm9iZUNv
bnRleHQmIHByb2JlQ29udGV4dDsKKyAgICBEYXRhJiBkYXRhOworfTsKKwordHlwZWRlZiB2b2lk
ICgqQ2FsbGJhY2spKFByaW50U3RyZWFtJiwgQ29udGV4dCYpOworCitzdHJ1Y3QgUHJpbnRSZWNv
cmQgeworICAgIFByaW50UmVjb3JkKERhdGEgZGF0YSwgQ2FsbGJhY2sgcHJpbnRlcikKKyAgICAg
ICAgOiBkYXRhKGRhdGEpCisgICAgICAgICwgcHJpbnRlcihwcmludGVyKQorICAgIHsgfQorCisg
ICAgUHJpbnRSZWNvcmQoQ2FsbGJhY2sgcHJpbnRlcikKKyAgICAgICAgOiBwcmludGVyKHByaW50
ZXIpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgUHJpbnRl
ciwgdHlwZW5hbWUgVD4KKyAgICBQcmludFJlY29yZChjb25zdCBQcmludGVyPFQ+JiBvdGhlcikK
KyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPFByaW50UmVjb3Jk
LCBQcmludGVyPFQ+Pjo6dmFsdWUsICJQcmludGVyIHNob3VsZCBleHRlbmQgUHJpbnRSZWNvcmQi
KTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoUHJpbnRSZWNvcmQpID09IHNpemVvZihQ
cmludGVyPFQ+KSwgIlByaW50ZXIgc2hvdWxkIGJlIHRoZSBzYW1lIHNpemUgYXMgUHJpbnRSZWNv
cmQiKTsKKyAgICAgICAgZGF0YSA9IG90aGVyLmRhdGE7CisgICAgICAgIHByaW50ZXIgPSBvdGhl
ci5wcmludGVyOworICAgIH0KKworICAgIERhdGEgZGF0YTsKKyAgICBDYWxsYmFjayBwcmludGVy
OworCitwcm90ZWN0ZWQ6CisgICAgUHJpbnRSZWNvcmQoKSB7IH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBQcmludGVyOworCit0eXBlZGVmIFZlY3RvcjxQcmludFJlY29yZD4g
UHJpbnRSZWNvcmRMaXN0OworCitpbmxpbmUgdm9pZCBhcHBlbmRQcmludGVyKFByaW50UmVjb3Jk
TGlzdCYpIHsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdCwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgoraW5saW5lIHZvaWQgYXBwZW5kUHJpbnRlcihQcmludFJlY29yZExpc3QmIHByaW50UmVj
b3JkTGlzdCwgRmlyc3QgZmlyc3QsIEFyZ3VtZW50cyYmLi4uIG90aGVycykKK3sKKyAgICBwcmlu
dFJlY29yZExpc3QuYXBwZW5kKFByaW50ZXI8Rmlyc3Q+KGZpcnN0KSk7CisgICAgYXBwZW5kUHJp
bnRlcihwcmludFJlY29yZExpc3QsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KG90aGVycykuLi4p
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitpbmxpbmUgUHJpbnRSZWNv
cmRMaXN0KiBtYWtlUHJpbnRSZWNvcmRMaXN0KEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKK3sK
KyAgICAvLyBGSVhNRTogdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaW50ZW50aW9uYWxseSBs
ZWFrcyB0aGUgUHJpbnRSZWNvcmRMaXN0LgorICAgIC8vIFdlIG1heSB3YW50IHRvIGZpeCB0aGlz
IGluIHRoZSBmdXR1cmUgaWYgd2Ugd2FudCB0byB1c2UgdGhlIHByaW50IG1lY2hhbmlzbQorICAg
IC8vIGluIHRlc3RzIHRoYXQgbWF5IGNvbXBpbGUgYSBsb3Qgb2YgcHJpbnRzLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzExMjMKKyAgICBhdXRvIHBy
aW50UmVjb3JkTGlzdCA9IG5ldyBQcmludFJlY29yZExpc3QoKTsKKyAgICBhcHBlbmRQcmludGVy
KCpwcmludFJlY29yZExpc3QsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4p
OworICAgIHJldHVybiBwcmludFJlY29yZExpc3Q7Cit9CisKKy8vIFNvbWUgdXRpbGl0eSBmdW5j
dGlvbnMgZm9yIHNwZWNpYWxpemluZyBwcmludGVycy4KKwordm9pZCBwcmludENvbnN0Q2hhclN0
cmluZyhQcmludFN0cmVhbSYsIENvbnRleHQmKTsKK3ZvaWQgcHJpbnRJbnRwdHIoUHJpbnRTdHJl
YW0mLCBDb250ZXh0Jik7Cit2b2lkIHByaW50VWludHB0cihQcmludFN0cmVhbSYsIENvbnRleHQm
KTsKK3ZvaWQgcHJpbnRQb2ludGVyKFByaW50U3RyZWFtJiwgQ29udGV4dCYpOworCit2b2lkIHNl
dFByaW50ZXIoUHJpbnRSZWNvcmQmLCBDU3RyaW5nJiYpOworCisvLyBTcGVjaWFsaXplZCBwcmlu
dGVycy4KKwordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8Y29uc3QgY2hhcio+IDogcHVibGlj
IFByaW50UmVjb3JkIHsKKyAgICBQcmludGVyKGNvbnN0IGNoYXIqIHN0cikKKyAgICAgICAgOiBQ
cmludFJlY29yZChzdHIsIHByaW50Q29uc3RDaGFyU3RyaW5nKQorICAgIHsgfQorfTsKKwordGVt
cGxhdGU8Pgorc3RydWN0IFByaW50ZXI8Y2hhcio+IDogcHVibGljIFByaW50ZXI8Y29uc3QgY2hh
cio+IHsKKyAgICBQcmludGVyKGNoYXIqIHN0cikKKyAgICAgICAgOiBQcmludGVyPGNvbnN0IGNo
YXIqPihzdHIpCisgICAgeyB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgUHJpbnRlcjxSYXdQ
b2ludGVyPiA6IHB1YmxpYyBQcmludFJlY29yZCB7CisgICAgUHJpbnRlcihSYXdQb2ludGVyIHJh
d1BvaW50ZXIpCisgICAgICAgIDogUHJpbnRSZWNvcmQocmF3UG9pbnRlci52YWx1ZSgpLCBwcmlu
dFBvaW50ZXIpCisgICAgeyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYg
c3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNfc2lnbmVkPj4KK3ZvaWQgc2V0UHJpbnRlcihQcmlu
dFJlY29yZCYgcmVjb3JkLCBUIHZhbHVlLCBpbnRwdHJfdCA9IDApCit7CisgICAgcmVjb3JkLmRh
dGEudmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKKyAgICByZWNvcmQucHJp
bnRlciA9IHByaW50SW50cHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYg
IXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3NpZ25lZD4+Cit2b2lkIHNldFByaW50ZXIoUHJp
bnRSZWNvcmQmIHJlY29yZCwgVCB2YWx1ZSwgdWludHB0cl90ID0gMCkKK3sKKyAgICByZWNvcmQu
ZGF0YS52YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpOworICAgIHJlY29yZC5w
cmludGVyID0gcHJpbnRVaW50cHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0
IFByaW50ZXIgOiBwdWJsaWMgUHJpbnRSZWNvcmQgeworICAgIFByaW50ZXIoVCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHNldFByaW50ZXIoKnRoaXMsIHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBQcmludGVyCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxNTYyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc2Vy
dGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUHJp
bnRTcGVjaWFsLmgiCiAjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNBcmd1
bWVudFJlZ1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNBdG9taWNWYWx1ZS5oIgpAQCAtMTEyNyw2ICsx
MTI4LDI4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBBaXI6Ok9vcHM7CiAgICAgfQogCisj
aWYgRU5BQkxFKE1BU01fUFJPQkUpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgIHZvaWQgcHJpbnQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAg
ICAgVmFsdWUqIG9yaWdpbiA9IG1fdmFsdWU7CisgICAgICAgIHByaW50KG9yaWdpbiwgc3RkOjpm
b3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgcHJpbnQoVmFsdWUqIG9yaWdpbiwgQXJn
dW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgYXV0byBwcmludExpc3QgPSBQ
cmludGVyOjptYWtlUHJpbnRSZWNvcmRMaXN0KGFyZ3VtZW50cy4uLik7CisgICAgICAgIGF1dG8g
cHJpbnRTcGVjaWFsID0gc3RhdGljX2Nhc3Q8UHJpbnRTcGVjaWFsKj4obV9jb2RlLmFkZFNwZWNp
YWwoc3RkOjptYWtlX3VuaXF1ZTxQcmludFNwZWNpYWw+KHByaW50TGlzdCkpKTsKKyAgICAgICAg
SW5zdCBpbnN0KFBhdGNoLCBvcmlnaW4sIEFyZzo6c3BlY2lhbChwcmludFNwZWNpYWwpKTsKKyAg
ICAgICAgUHJpbnRlcjo6YXBwZW5kQWlyQXJncyhpbnN0LCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRz
Pihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAgYXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgIH0K
KyNlbHNlCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgcHJp
bnQoQXJndW1lbnRzJiYuLi4pIHsgfQorI2VuZGlmIC8vIEVOQUJMRShNQVNNX1BST0JFKQorCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIHZvaWQgYXBwZW5kKEFpcjo6
T3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUHJpbnRTcGVjaWFsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclByaW50U3BlY2lhbC5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQcmludFNwZWNp
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpclByaW50U3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKyNpZiBFTkFCTEUo
TUFTTV9QUk9CRSkKKworI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK1ByaW50U3BlY2lh
bDo6UHJpbnRTcGVjaWFsKFByaW50ZXI6OlByaW50UmVjb3JkTGlzdCogbGlzdCkKKyAgICA6IG1f
cHJpbnRSZWNvcmRMaXN0KGxpc3QpCit7Cit9CisKK1ByaW50U3BlY2lhbDo6flByaW50U3BlY2lh
bCgpCit7Cit9CisKK3ZvaWQgUHJpbnRTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmLCBjb25zdCBT
Y29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpCit7Cit9CisKK2Jvb2wgUHJpbnRT
cGVjaWFsOjppc1ZhbGlkKEluc3QmKQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
aW50U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkKQoreworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBQcmludFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYs
IGNvbnN0IFJlZ2lzdGVyU2V0JikKK3sKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIFByaW50U3Bl
Y2lhbDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25D
b250ZXh0JikKK3sKKyAgICBzaXplX3QgY3VycmVudEFyZyA9IDE7IC8vIFNraXAgdGhlIFByaW50
U3BlY2lhbCBhcmcuCisgICAgZm9yIChhdXRvJiB0ZXJtIDogKm1fcHJpbnRSZWNvcmRMaXN0KSB7
CisgICAgICAgIGlmICh0ZXJtLnByaW50ZXIgPT0gUHJpbnRlcjo6cHJpbnRBaXJBcmcpIHsKKyAg
ICAgICAgICAgIGNvbnN0IEFyZyYgYXJnID0gaW5zdC5hcmdzW2N1cnJlbnRBcmcrK107CisgICAg
ICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJnOjpUbXA6
CisgICAgICAgICAgICAgICAgdGVybSA9IFByaW50ZXI6OlByaW50ZXI8TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQ+KGFyZy5ncHIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgICAgICAgICB0ZXJtID0gUHJpbnRlcjo6UHJp
bnRlcjxNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcz4oYXJnLmFzQWRkcmVzcygpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBqaXQucHJpbnQobV9wcmludFJlY29yZExp
c3QpOworICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworUmVnaXN0ZXJTZXQg
UHJpbnRTcGVjaWFsOjpleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhJbnN0JikKK3sKKyAgICByZXR1
cm4gUmVnaXN0ZXJTZXQoKTsKK30KKworUmVnaXN0ZXJTZXQgUHJpbnRTcGVjaWFsOjpleHRyYUNs
b2JiZXJlZFJlZ3MoSW5zdCYpCit7CisgICAgcmV0dXJuIFJlZ2lzdGVyU2V0KCk7Cit9CisKK3Zv
aWQgUHJpbnRTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiUHJpbnQiKTsKK30KKwordm9pZCBQcmludFNwZWNpYWw6OmRlZXBEdW1wSW1w
bChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgicHJpbnQgZm9yIGRl
YnVnZ2luZyBsb2dnaW5nLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEIzOjpBaXIKKworbmFt
ZXNwYWNlIFByaW50ZXIgeworCitOT19SRVRVUk4gdm9pZCBwcmludEFpckFyZyhQcmludFN0cmVh
bSYsIENvbnRleHQmKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIHBsYWNlaG9s
ZGVyIHRvIGxldCBQcmludFNwZWNpYWw6OmdlbmVyYXRlKCkga25vdyB0aGF0CisgICAgLy8gdGhl
IFByaW50ZXIgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aCBvbmUgZm9yIGEgcmVnaXN0ZXIsIGNv
bnN0YW50LCBldGMuIEhlbmNlLAorICAgIC8vIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJl
IGNhbGxlZC4KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBQcmludGVyCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KE1BU01fUFJPQkUpCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUHJpbnRTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQcmludFNwZWNpYWwuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclByaW50U3BlY2lhbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorI2lmIEVO
QUJMRShNQVNNX1BST0JFKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpclNw
ZWNpYWwuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7CituYW1lc3BhY2UgUHJpbnRlciB7CisKK3R5cGVkZWYgVmVjdG9yPEIzOjpBaXI6OkFy
Zz4gQXJnTGlzdDsKKworLy8gSXNTYW1lT3JSZWZlcmVuY2U6OnZhbHVlIGlzIHRydWUgaWYgVCBp
cyB0aGUgc2FtZSB0eXBlIGFzIFUgb3IgVSYuIEVsc2UsIGl0IGlzIGZhbHNlLgorICAgIAordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0YXRpYyBjb25zdGV4cHIgYXV0byBJc1Nh
bWVPclJlZmVyZW5jZUhlbHBlcihpbnQpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1l
PFQsIFU+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgVSY+Ojp2YWx1ZSwgc3RkOjp0cnVlX3R5
cGU+OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorc3RhdGljIGNvbnN0ZXhw
ciBzdGQ6OmZhbHNlX3R5cGUgSXNTYW1lT3JSZWZlcmVuY2VIZWxwZXIoLi4uKTsKKwordGVtcGxh
dGU8Y2xhc3MgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBJc1NhbWVPclJlZmVyZW5jZSA6IHB1Ymxp
YyBzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoSXNTYW1lT3JSZWZlcmVuY2VIZWxwZXI8VCwgVT4oMCkp
LCBzdGQ6OnRydWVfdHlwZT4geyB9OworCisgICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZS4uLiBBcmd1bWVudHMsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxJc1NhbWVPclJl
ZmVyZW5jZTxULCBCMzo6QWlyOjpUbXA+Ojp2YWx1ZSB8fCBJc1NhbWVPclJlZmVyZW5jZTxULCBS
ZWc+Ojp2YWx1ZT4+CitpbmxpbmUgdm9pZCBhcHBlbmRBaXJBcmcoQjM6OkFpcjo6SW5zdCYgaW5z
dCwgVCYmIGFyZykKK3sKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxUPihhcmcp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzLCB0eXBl
bmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8IUlzU2FtZU9yUmVmZXJlbmNlPFQsIEIzOjpBaXI6OlRt
cD46OnZhbHVlICYmICFJc1NhbWVPclJlZmVyZW5jZTxULCBSZWc+Ojp2YWx1ZT4+CitpbmxpbmUg
dm9pZCBhcHBlbmRBaXJBcmcoQjM6OkFpcjo6SW5zdCYsIFQmJiwgaW50ID0gMCkgeyB9CisKK2lu
bGluZSB2b2lkIGFwcGVuZEFpckFyZ3MoQjM6OkFpcjo6SW5zdCYpIHsgfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitpbmxpbmUgdm9pZCBhcHBlbmRBaXJB
cmdzKEIzOjpBaXI6Okluc3QmIGluc3QsIFQmJiB0LCBBcmd1bWVudHMmJi4uLiBvdGhlcnMpCit7
CisgICAgYXBwZW5kQWlyQXJnKGluc3QsIHN0ZDo6Zm9yd2FyZDxUPih0KSk7CisgICAgYXBwZW5k
QWlyQXJncyhpbnN0LCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihvdGhlcnMpLi4uKTsKK30KKwor
dm9pZCBwcmludEFpckFyZyhQcmludFN0cmVhbSYsIENvbnRleHQmKTsKKworLy8gUHJpbnRlcjxB
cmcmPiBpcyBvbmx5IGEgcGxhY2UtaG9sZGVyIHdoaWNoIFByaW50U3BlY2lhbDo6Z2VuZXJhdGUo
KSB3aWxsIGxhdGVyCisvLyByZXBsYWNlIHdpdGggYSBQcmludGVyIGZvciBhIHJlZ2lzdGVyLCBj
b25zdGFudCwgZXRjLiBhcyBhcHByb3ByaWF0ZS4gCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgUHJpbnRl
cjxCMzo6QWlyOjpUbXA+IDogcHVibGljIFByaW50UmVjb3JkIHsKKyAgICBQcmludGVyKEIzOjpB
aXI6OlRtcCYpCisgICAgICAgIDogUHJpbnRSZWNvcmQocHJpbnRBaXJBcmcpCisgICAgeyB9Cit9
OworICAgIAordGVtcGxhdGU8Pgorc3RydWN0IFByaW50ZXI8UmVnPiA6IHB1YmxpYyBQcmludFJl
Y29yZCB7CisgICAgUHJpbnRlcihSZWcmKQorICAgICAgICA6IFByaW50UmVjb3JkKHByaW50QWly
QXJnKQorICAgIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgUHJpbnRlcgorCituYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgUHJpbnRTcGVjaWFsIDogcHVibGljIFNwZWNp
YWwgeworcHVibGljOgorICAgIFByaW50U3BlY2lhbChQcmludGVyOjpQcmludFJlY29yZExpc3Qq
KTsKKyAgICB+UHJpbnRTcGVjaWFsKCk7CisgICAgCisgICAgLy8gWW91IGNhbm5vdCB1c2UgdGhp
cyByZWdpc3RlciB0byBwYXNzIGFyZ3VtZW50cy4gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQgdGhp
cyByZWdpc3RlciBpcyBub3QKKyAgICAvLyB1c2VkIGZvciBhcmd1bWVudHMgaW4gdGhlIEMgY2Fs
bGluZyBjb252ZW50aW9uLiBCeSB0aGUgd2F5LCB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQg
Y2F1c2VzCisgICAgLy8gdGhpcyBzcGVjaWFsIHRvIGJlIHNwZWNpZmljIHRvIEMgY2FsbHMuCisg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBzY3JhdGNoUmVnaXN0ZXIgPSBHUFJJbmZvOjpub25BcmdH
UFIwOworICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3Qg
U2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29s
IGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVu
c2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMo
SW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92
ZXJyaWRlOworICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKEluc3QmKSBv
dmVycmlkZTsKKyAgICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJy
aWRlOworICAgIAorICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3BlY2lhbEFyZ09mZnNl
dCA9IDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVNwZWNpYWxBcmdzID0gMTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2FsbGVlQXJnT2Zmc2V0ID0gbnVtU3BlY2lhbEFyZ3M7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bUNhbGxlZUFyZ3MgPSAxOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCByZXR1cm5HUEFyZ09mZnNldCA9IG51bVNwZWNpYWxBcmdzICsgbnVt
Q2FsbGVlQXJnczsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtUmV0dXJuR1BBcmdzID0g
MjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcmV0dXJuRlBBcmdPZmZzZXQgPSBudW1TcGVj
aWFsQXJncyArIG51bUNhbGxlZUFyZ3MgKyBudW1SZXR1cm5HUEFyZ3M7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG51bVJldHVybkZQQXJncyA9IDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBhcmdBcmdPZmZzZXQgPQorICAgIG51bVNwZWNpYWxBcmdzICsgbnVtQ2FsbGVlQXJn
cyArIG51bVJldHVybkdQQXJncyArIG51bVJldHVybkZQQXJnczsKKyAgICAKKyAgICBQcmludGVy
OjpQcmludFJlY29yZExpc3QqIG1fcHJpbnRSZWNvcmRMaXN0OworfTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMTU2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExMSw1ICsz
MTExLDIyIEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgQ29kZUJsb2NrOjpsaXYKICAgICB9
CiB9CiAKK3ZvaWQgc2V0UHJpbnRlcihQcmludGVyOjpQcmludFJlY29yZCYgcmVjb3JkLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBQcmludGVyOjpzZXRQcmludGVyKHJlY29yZCwgdG9D
U3RyaW5nKGNvZGVCbG9jaykpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNl
IFdURiB7CisgICAgCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAoVU5MSUtFTFkoIWNvZGVCbG9jaykpIHsK
KyAgICAgICAgb3V0LnByaW50KCI8bnVsbCBjb2RlQmxvY2s+Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgb3V0LnByaW50KCpjb2RlQmxvY2spOworfQorICAgIAorfSAvLyBuYW1lc3Bh
Y2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiAyMTU2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIk9iamVjdEFsbG9jYXRpb25Qcm9maWxl
LmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlByaW50ZXIuaCIKICNpbmNsdWRl
ICJQcm9maWxlckpldHRpc29uUmVhc29uLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUV4ZWN1dGFibGUu
aCIKICNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKQEAgLTEwODcsNCArMTA4OCwxMyBAQCBK
U09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4CiAjZGVmaW5lIENPREVCTE9D
S19MT0dfRVZFTlQoY29kZUJsb2NrLCBzdW1tYXJ5LCBkZXRhaWxzKSBcCiAgICAgKGNvZGVCbG9j
ay0+dm0oKS0+bG9nRXZlbnQoY29kZUJsb2NrLCBzdW1tYXJ5LCBbJl0gKCkgeyByZXR1cm4gdG9D
U3RyaW5nIGRldGFpbHM7IH0pKQogCisKK3ZvaWQgc2V0UHJpbnRlcihQcmludGVyOjpQcmludFJl
Y29yZCYsIENvZGVCbG9jayopOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdU
RiB7CisgICAgCitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkNvZGVCbG9jayopOworCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIxNTYyMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA1LDExICs2
MDUsNyBAQCB2b2lkIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsCiB7CiAgICAg
aWYgKE9wdGlvbnM6OmJyZWFrT25UaHJvdygpKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2Vw
dGlvbiBpbiBjYWxsIGZyYW1lICIsIFJhd1BvaW50ZXIoZXhlYyksICIgZm9yIGNvZGUgYmxvY2sg
Iik7Ci0gICAgICAgIGlmIChjb2RlQmxvY2spCi0gICAgICAgICAgICBkYXRhTG9nKCpjb2RlQmxv
Y2ssICJcbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9nKCI8bnVsbHB0cj5c
biIpOworICAgICAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gaW4gY2FsbCBmcmFtZSAi
LCBSYXdQb2ludGVyKGV4ZWMpLCAiIGZvciBjb2RlIGJsb2NrICIsIGNvZGVCbG9jaywgIlxuIik7
CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQogCg==
</data>
<flag name="review"
          id="328999"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
      

    </bug>

</bugzilla>