<?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>90924</bug_id>
          
          <creation_ts>2012-07-10 17:32:05 -0700</creation_ts>
          <short_desc>DFG should have fast virtual calls</short_desc>
          <delta_ts>2012-07-11 22:39:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>91049</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>666197</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-10 17:32:05 -0700</bug_when>
    <thetext>Currently they involve C++ function calls.  Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666198</commentid>
    <comment_count>1</comment_count>
      <attachid>151561</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-10 17:35:25 -0700</bug_when>
    <thetext>Created attachment 151561
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666310</commentid>
    <comment_count>2</comment_count>
      <attachid>151587</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-10 21:22:38 -0700</bug_when>
    <thetext>Created attachment 151587
it made some virtual calls

But it&apos;s still probably broken.

Haven&apos;t written the same code for 32-bit yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666342</commentid>
    <comment_count>3</comment_count>
      <attachid>151596</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-10 22:04:44 -0700</bug_when>
    <thetext>Created attachment 151596
starting to run bigger programs

Still occasionally crashing though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666354</commentid>
    <comment_count>4</comment_count>
      <attachid>151599</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-10 22:29:08 -0700</bug_when>
    <thetext>Created attachment 151599
might work

This appears to run SunSpider, V8, and Kraken.  Now on to real programs.

32-bit still not implemented.  Will put up on EWS anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666454</commentid>
    <comment_count>5</comment_count>
      <attachid>151621</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 00:34:34 -0700</bug_when>
    <thetext>Created attachment 151621
the patch

64-bit works and produces the expected speed-up.  Working on 32-bit now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666466</commentid>
    <comment_count>6</comment_count>
      <attachid>151621</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-11 00:48:08 -0700</bug_when>
    <thetext>Comment on attachment 151621
the patch

Attachment 151621 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13166714</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666471</commentid>
    <comment_count>7</comment_count>
      <attachid>151628</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 00:51:39 -0700</bug_when>
    <thetext>Created attachment 151628
the patch

Implemented 32-bit.  Should be ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666487</commentid>
    <comment_count>8</comment_count>
      <attachid>151636</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 01:05:38 -0700</bug_when>
    <thetext>Created attachment 151636
the patch

Found and fixed an issue in 32-bit register shuffling for conveying the callee to the virtual call thunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666496</commentid>
    <comment_count>9</comment_count>
      <attachid>151636</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-07-11 01:15:10 -0700</bug_when>
    <thetext>Comment on attachment 151636
the patch

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

Please revert JSFunction.h &amp; define up the value (1&lt;&lt;29)-1.  Other comments optional.

&gt; Source/JavaScriptCore/bytecode/CodeOrigin.h:51
&gt; +        : bytecodeIndex((1 &lt;&lt; 29) - 1)

You should really define up a constant for this value, &amp; comment why it is this value.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1029
&gt; +    if (calleeTagGPR == GPRInfo::nonArgGPR0) {

Do we not have a helper for this kind of shuffling? - if not, we probably really should...

&gt; Source/JavaScriptCore/dfg/DFGThunks.cpp:109
&gt; +    // need to remove it and drop it on the floor, since we don&apos;t care about it.

Is it possible to write a test case for this? - when would the C code throw, an unexpected OOM? - that could be tricky to test for if so... :-/

&gt; Source/JavaScriptCore/runtime/JSFunction.h:157
&gt; +        

PLease revert this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666500</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 01:20:35 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 151636 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151636&amp;action=review
&gt; 
&gt; Please revert JSFunction.h &amp; define up the value (1&lt;&lt;29)-1.  Other comments optional.

Will do.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeOrigin.h:51
&gt; &gt; +        : bytecodeIndex((1 &lt;&lt; 29) - 1)
&gt; 
&gt; You should really define up a constant for this value, &amp; comment why it is this value.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1029
&gt; &gt; +    if (calleeTagGPR == GPRInfo::nonArgGPR0) {
&gt; 
&gt; Do we not have a helper for this kind of shuffling? - if not, we probably really should...

We sort of do, setupTwoStubArgs.  But it&apos;s defined conditionally.

I&apos;ll create a helper called shuffleTwoRegisters(GPRReg source1, GPRReg source2, GPRReg target1, GPRReg target2) and have setupTwoStubArgs() call it.  I&apos;ll also remove the template argument passing, since the method is going to be inlined anyway.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGThunks.cpp:109
&gt; &gt; +    // need to remove it and drop it on the floor, since we don&apos;t care about it.
&gt; 
&gt; Is it possible to write a test case for this? - when would the C code throw, an unexpected OOM? - that could be tricky to test for if so... :-/

I think we already have tests for this.  Like, try to call something that isn&apos;t callable - that&apos;ll trip it.

I&apos;ll add a test if there isn&apos;t one already.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSFunction.h:157
&gt; &gt; +        
&gt; 
&gt; PLease revert this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666501</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 01:22:43 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 151636 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151636&amp;action=review
&gt; &gt; 
&gt; &gt; Please revert JSFunction.h &amp; define up the value (1&lt;&lt;29)-1.  Other comments optional.
&gt; 
&gt; Will do.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/bytecode/CodeOrigin.h:51
&gt; &gt; &gt; +        : bytecodeIndex((1 &lt;&lt; 29) - 1)
&gt; &gt; 
&gt; &gt; You should really define up a constant for this value, &amp; comment why it is this value.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1029
&gt; &gt; &gt; +    if (calleeTagGPR == GPRInfo::nonArgGPR0) {
&gt; &gt; 
&gt; &gt; Do we not have a helper for this kind of shuffling? - if not, we probably really should...
&gt; 
&gt; We sort of do, setupTwoStubArgs.  But it&apos;s defined conditionally.
&gt; 
&gt; I&apos;ll create a helper called shuffleTwoRegisters(GPRReg source1, GPRReg source2, GPRReg target1, GPRReg target2) and have setupTwoStubArgs() call it.  I&apos;ll also remove the template argument passing, since the method is going to be inlined anyway.

Actually - I&apos;ll save that for another patch.  I realized just after typing this that this would make the patch rather large.  I will save this for later.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGThunks.cpp:109
&gt; &gt; &gt; +    // need to remove it and drop it on the floor, since we don&apos;t care about it.
&gt; &gt; 
&gt; &gt; Is it possible to write a test case for this? - when would the C code throw, an unexpected OOM? - that could be tricky to test for if so... :-/
&gt; 
&gt; I think we already have tests for this.  Like, try to call something that isn&apos;t callable - that&apos;ll trip it.
&gt; 
&gt; I&apos;ll add a test if there isn&apos;t one already.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/JSFunction.h:157
&gt; &gt; &gt; +        
&gt; &gt; 
&gt; &gt; PLease revert this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666515</commentid>
    <comment_count>12</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-07-11 01:38:38 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Actually - I&apos;ll save that for another patch.  I realized just after typing this that this would make the patch rather large.  I will save this for later.

*nod, sounds like a good plan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667229</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 17:12:38 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/122392</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151561</attachid>
            <date>2012-07-10 17:35:25 -0700</date>
            <delta_ts>2012-07-10 21:22:38 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>virtualcall_patch_1.diff</filename>
            <type>text/plain</type>
            <size>24542</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBA
CisyMDEyLTA3LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGZhc3QgdmlydHVhbCBjYWxscworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5MjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MhCisKKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OnVubGluayk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOgorICAg
ICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6QXNzZW1ibHlIZWxwZXJzKToKKyAgICAg
ICAgKiBkZmcvREZHQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q0NhbGxIZWxw
ZXJzOjpDQ2FsbEhlbHBlcnMpOgorICAgICAgICAqIGRmZy9ERkdHUFJJbmZvLmg6CisgICAgICAg
IChHUFJJbmZvKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuaDoKKyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6cHJlcGFyZUZvckV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRGYXN0RXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
ZGZnTGlua0Zvcik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZn
L0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmxpbmtGb3JUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZH
Ojp2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OnZpcnR1YWxD
YWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OnZpcnR1YWxDb25zdHJ1Y3RU
aHVua0dlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAoREZH
KToKKwogMjAxMi0wNy0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJFR1JFU1NJT04ocjEyMjE2Nik6IEl0IG1hZGUgMTcwIHRlc3RzIGNyYXNoIG9uIDMyIGJp
dCBwbGF0Zm9ybXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIK
IAogI2lmIEVOQUJMRShKSVQpCkBAIC0zOCw3ICszOSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1
bmxpbmsoSlNHbG9iYWxEYXRhJiAKICAgICAKICAgICBpZiAoaXNERkcpIHsKICNpZiBFTkFCTEUo
REZHX0pJVCkKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChj
YWxsUmV0dXJuTG9jYXRpb24pLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyBERkc6Om9wZXJhdGlv
bkxpbmtDb25zdHJ1Y3QgOiBERkc6Om9wZXJhdGlvbkxpbmtDYWxsKTsKKyAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsUmV0dXJuTG9jYXRpb24pLCBjYWxs
VHlwZSA9PSBDb25zdHJ1Y3QgPyBnbG9iYWxEYXRhLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRo
dW5rR2VuZXJhdG9yKSA6IGdsb2JhbERhdGEuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKSk7CiAjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShy
ZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTMgQEAgcHVibGljOgogICAg
IEFzc2VtYmx5SGVscGVycyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29k
ZUJsb2NrKQogICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1f
Y29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAgICAgLCBtX2Jhc2VsaW5lQ29kZUJsb2NrKGNvZGVC
bG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpCisgICAgICAgICwgbV9iYXNlbGluZUNvZGVCbG9jayhj
b2RlQmxvY2sgPyBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpIDogMCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJs
b2NrKTsKLSAgICAgICAgQVNTRVJUKCFtX2Jhc2VsaW5lQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKLSAgICAgICAgQVNTRVJUKG1fYmFzZWxpbmVDb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBK
SVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAg
ICAgICAgQVNTRVJUKG1fYmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICAgICAgQVNTRVJUKCFt
X2Jhc2VsaW5lQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCht
X2Jhc2VsaW5lQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyBy
ZXR1cm4gbV9jb2RlQmxvY2s7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIENDYWxsSGVscGVycyA6
IHB1YmxpYyBBc3NlbWJseUhlbHBlcnMgewogcHVibGljOgotICAgIENDYWxsSGVscGVycyhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIENDYWxsSGVs
cGVycyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrID0gMCkK
ICAgICAgICAgOiBBc3NlbWJseUhlbHBlcnMoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQogICAgIHsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNp
b24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3Myw2ICsyNzMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
IEdQUlJlZyBhcmd1bWVudEdQUjEgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBz
dGF0aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjAgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVn
VDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjEgPSBYODZSZWdpc3RlcnM6OmVi
eDsgLy8gcmVnVDMKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjIgPSBYODZSZWdp
c3RlcnM6OmVzaTsgLy8gcmVnVDQKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVl
R1BSID0gWDg2UmVnaXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyByZXR1cm5WYWx1ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6
ZWN4OwpAQCAtMzQ0LDYgKzM0NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IGFyZ3VtZW50R1BSNSA9IFg4NlJlZ2lzdGVyczo6cjk7ICAvLyByZWdUNwogICAgIHN0YXRpYyBj
b25zdCBHUFJSZWcgbm9uQXJnR1BSMCA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJnR1BSMSA9IFg4NlJlZ2lzdGVyczo6ZWJ4OyAvLyBy
ZWdUMworICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJnR1BSMiA9IFg4NlJlZ2lzdGVyczo6
cjEwOyAvLyByZWdUOAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBY
ODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVy
blZhbHVlR1BSMiA9IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2UmVnaXN0ZXJzOjplc2k7CkBA
IC00MTYsNiArNDE4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1l
bnRHUFIzID0gQVJNUmVnaXN0ZXJzOjpyMzsgLy8gRklYTUUhCiAgICAgc3RhdGljIGNvbnN0IEdQ
UlJlZyBub25BcmdHUFIwID0gQVJNUmVnaXN0ZXJzOjpyNDsgLy8gcmVnVDMKICAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIG5vbkFyZ0dQUjEgPSBBUk1SZWdpc3RlcnM6OnI4OyAvLyByZWdUNAorICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJnR1BSMiA9IEFSTVJlZ2lzdGVyczo6cjk7IC8vIHJl
Z1Q1CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IEFSTVJlZ2lzdGVy
czo6cjA7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIg
PSBBUk1SZWdpc3RlcnM6OnIxOyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSID0gQVJNUmVnaXN0ZXJzOjpyMjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMjIwNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg5LDYgKzE4OSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNh
bGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanNDYWxsc1tpXS5tX2Nh
bGxUeXBlOwogICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKKyAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsLCBtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoaW5m
by5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA/IGxpbmtDb25zdHJ1Y3RUaHVu
a0dlbmVyYXRvciA6IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKTsKICAgICAgICAgaW5mby5jYWxs
UmV0dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
bV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7CiAgICAg
ICAgIGluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9q
c0NhbGxzW2ldLm1fZmFzdENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksMTggKzI3OSwy
MyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGZ1bmN0
aW9uQ2FsbCwgZnVuY3Rpb24pKTsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICB9
CisgICAgCisgICAgdm9pZCBwcmVwYXJlRm9yRXhjZXB0aW9uQ2hlY2soKQorICAgIHsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIobV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKSwgR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICB2b2lkIGFkZEV4
Y2VwdGlvbkNoZWNrKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENh
bGxCZWdpblRva2VuIHRva2VuKQogICAgIHsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIobV9l
eGNlcHRpb25DaGVja3Muc2l6ZSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
KTsKKyAgICAgICAgcHJlcGFyZUZvckV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZW1pdEV4
Y2VwdGlvbkNoZWNrKCksIGNvZGVPcmlnaW4sIHRva2VuKSk7CiAgICAgfQogICAgIAogICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGggYSBmYXN0IGV4Y2VwdGlvbiBjaGVj
ayB0aGF0IHRlc3RzIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KICAgICB2b2lkIGFkZEZh
c3RFeGNlcHRpb25DaGVjayhDYWxsIGZ1bmN0aW9uQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsQmVnaW5Ub2tlbiB0b2tlbikKICAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUik7CisgICAgICAgIHByZXBhcmVGb3JFeGNlcHRpb25DaGVjaygpOwogICAgICAgICBKdW1w
IGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVj
b3JkKGZ1bmN0aW9uQ2FsbCwgZXhjZXB0aW9uQ2hlY2ssIGNvZGVPcmlnaW4sIHRva2VuKSk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjIsMTQgKzg2MiwxNCBAQCBzdGF0aWMgdm9p
ZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICBleGVjQ2FsbGVlLT5z
ZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICBnbG9iYWxEYXRhLT5ob3N0
Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlv
bihleGVjQ2FsbGVlKSk7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQot
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxE
YXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7
CiAKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlKTsKICAgICAgICAgfQogICAgIAogICAgICAgICBBU1NFUlQoY2FsbFR5cGUg
PT0gQ2FsbFR5cGVOb25lKTsKICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9
IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSk7Ci0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpOwpAQCAtODg0LDE3ICs4ODQsMTcgQEAgc3RhdGljIHZvaWQqIGhhbmRs
ZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZQogICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNP
YmplY3QoY2FsbGVlKSk7CiAgICAgICAgIGdsb2JhbERhdGEtPmhvc3RDYWxsUmV0dXJuVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxl
ZSkpOwogICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogCiAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKICAgICB9CiAgICAg
CiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpOwogICAgIGV4
ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihl
eGVjLCBjYWxsZWUpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBnbG9iYWxEYXRhLT5nZXRD
VElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiB9CiAKLWlu
bGluZSB2b2lkKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitpbmxpbmUgdm9p
ZCogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgp
OwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CkBA
IC05MTgsNyArOTE4LDcgQEAgaW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2Fs
bAogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVG
b3IoZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9y
KSB7CiAgICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVy
biBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcik7CiAgICAgICAgIH0KICAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3Ioa2luZCk7CiAgICAgICAgIGlmIChleGVjQ2FsbGVl
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCkBAIC05MjYsNyArOTI2LDcgQEAgaW5saW5lIHZvaWQq
IGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBj
b2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFk
ZHJlc3NGb3JDYWxsKCk7CiAgICAgfQotICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0g
ZXhlYy0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlu
a0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CiAgICAgaWYgKCFjYWxsTGlua0luZm8uc2Vl
bk9uY2UoKSkKICAgICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKICAgICBlbHNlCkBAIC05
MzQsMTYgKzkzNCwxNCBAQCBpbmxpbmUgdm9pZCogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxs
CiAgICAgcmV0dXJuIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KIAotUF9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShvcGVyYXRpb25MaW5rQ2FsbCk7Ci12b2lk
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmsoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewotICAg
IHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIHJldHVybkFkZHJlc3MsIENvZGVGb3JDYWxsKTsK
KyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLVBfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0Uob3BlcmF0aW9uTGlua0NvbnN0cnVj
dCk7Ci12b2lkKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKK3ZvaWQqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUpCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgcmV0dXJu
QWRkcmVzcywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxl
ZSwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKIGlubGluZSB2b2lkKiB2aXJ0dWFsRm9yKEV4ZWNT
dGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtOTY1LDcg
Kzk2Myw3IEBAIGlubGluZSB2b2lkKiB2aXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXhlY0MKICAgICAg
ICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGV4ZWND
YWxsZWUsIGZ1bmN0aW9uLT5zY29wZSgpLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAg
ICAgICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXJyb3I7Ci0gICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5nZXRDVElTdHVi
KHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgcmV0dXJuIGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVj
a0ZvcihraW5kKS5leGVjdXRhYmxlQWRkcmVzcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDksNiArOTA5
LDcgQEAgdm9pZCBkZmdCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYwogdm9pZCBkZmdM
aW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVC
bG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgQ29k
ZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2so
KTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBjYWxsZXJDb2RlQmxvY2stPmdsb2Jh
bERhdGEoKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29k
ZUJsb2NrKTsKICAgICAKQEAgLTkyMSwxMSArOTIyLDExIEBAIHZvaWQgZGZnTGlua0ZvcihFeGVj
U3RhdGUqIGV4ZWMsIENhbGxMaW4KICAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21p
bmdDYWxsKCZjYWxsTGlua0luZm8pOwogICAgIAogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxs
KSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG9wZXJhdGlvblZpcnR1YWxDYWxsKTsKKyAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uKSwgZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5r
R2VuZXJhdG9yKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKGtpbmQgPT0g
Q29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9u
Q2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0aW9uVmlydHVhbENv
bnN0cnVjdCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxs
TGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKSwgZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0
dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpKTsKIH0KIAogdm9pZCBkZmdSZXNldEdldEJ5SUQo
UmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTgsMTQgKzk5OCwx
NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAgICAgSklUQ29t
cGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwogICAgIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoOwogCi0gICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7Ci0gICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9P
RkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVzdWx0R1BSKTsKLSAgICBtX2pp
dC5zdG9yZVB0cihyZXN1bHRHUFIsIGNhbGxGcmFtZVNsb3QoUmVnaXN0ZXJGaWxlOjpTY29wZUNo
YWluKSk7CisgICAgQ2FsbEJlZ2luVG9rZW4gdG9rZW4gPSBtX2ppdC5iZWdpbkNhbGwoKTsKIAog
ICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKICAgICAKKyAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKKyAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09G
RlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRHUFIpOworICAgIG1faml0
LnN0b3JlUHRyKHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KiBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKTsKKwogICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
biA9IGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luOwotICAgIENhbGxCZWdpblRva2VuIHRv
a2VuID0gbV9qaXQuYmVnaW5DYWxsKCk7CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwg
PSBtX2ppdC5uZWFyQ2FsbCgpOwogICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGwsIGNvZGVP
cmlnaW4sIHRva2VuKTsKICAgICAKQEAgLTEwMTMsMTQgKzEwMTQsMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1f
aml0KTsKICAgICAKLSAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICB0b2tlbiA9IG1f
aml0LmJlZ2luQ2FsbCgpOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQu
YXBwZW5kQ2FsbChzbG93Q2FsbEZ1bmN0aW9uKTsKLSAgICBtX2ppdC5hZGRGYXN0RXhjZXB0aW9u
Q2hlY2soc2xvd0NhbGwsIGNvZGVPcmlnaW4sIHRva2VuKTsKLSAgICBtX2ppdC5hZGRQdHIoVHJ1
c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgdG9rZW4gPSBt
X2ppdC5iZWdpbkNhbGwoKTsKLSAgICBKSVRDb21waWxlcjo6Q2FsbCB0aGVDYWxsID0gbV9qaXQu
Y2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbCh0aGVD
YWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CisgICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUklu
Zm86Om5vbkFyZ0dQUjApOworICAgIG1faml0LnByZXBhcmVGb3JFeGNlcHRpb25DaGVjaygpOwor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKKyAgICBt
X2ppdC5ub3RpZnlDYWxsKHNsb3dDYWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CiAgICAgCiAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUaHVua3MuY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lm
IEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVk
ZSAiREZHRlBSSW5mby5oIgogI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKICNpbmNsdWRlICJERkdP
U1JFeGl0Q29tcGlsZXIuaCIKQEAgLTgyLDYgKzgzLDE2NCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiREZHIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiKSk7CiB9CiAKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSk7
CisgICAgCisgICAgLy8gV2Ugd2lsbCBqdW1wIHRvIGhlcmUgaWYgdGhlIEpJVCBjb2RlIHRoaW5r
cyBpdCdzIG1ha2luZyBhIGNhbGwsIGJ1dCB0aGUKKyAgICAvLyBsaW5raW5nIGhlbHBlciAoQysr
IGNvZGUpIGRlY2lkZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluc3RlYWQuIFdlIHdpbGwKKyAg
ICAvLyBoYXZlIHNhdmVkIHRoZSBjYWxsUmV0dXJuSW5kZXggaW4gdGhlIGZpcnN0IGFyZ3VtZW50
cyBvZiBKSVRTdGFja0ZyYW1lLgorICAgIC8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuIGFkZHJlc3Mg
d2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgc28gd2UKKyAgICAvLyBuZWVkIHRv
IHJlbW92ZSBpdCBhbmQgZHJvcCBpdCBvbiB0aGUgZmxvb3IsIHNpbmNlIHdlIGRvbid0IGNhcmUg
YWJvdXQgaXQuCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZv
Ojpub25QcmVzZXJlZE5vblJldHVybkdQUik7CisgICAgaml0LnBlZWsoR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworICAgIGppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobG9va3VwRXhj
ZXB0aW9uSGFuZGxlciksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vbkFyZ0dQUjApOworICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7
CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJE
RkcgdGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAorICAgIENDYWxsSGVscGVycyYgaml0LCBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIFBfREZHT3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikKK3sKKyAg
ICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjIp
OworICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdp
c3RlcikpICogUmVnaXN0ZXJGaWxlOjpSZXR1cm5BZGRyZXNzKSk7CisgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsK
KyAgICBqaXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNL
RlJBTUVfQVJHU19JTkRFWCk7CisgICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Cisg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNsb3dQYXRoRnVuY3Rpb24p
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIw
KTsKKyAgICAKKyAgICAvLyBUaGlzIHNsb3cgY2FsbCB3aWxsIHJldHVybiB0aGUgYWRkcmVzcyBv
ZiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAvLyAxKSBFeGNlcHRpb24gdGhyb3dpbmcgdGh1
bmsuCisgICAgLy8gMikgSG9zdCBjYWxsIHJldHVybiB2YWx1ZSByZXR1cm5lciB0aGluZ3kuCisg
ICAgLy8gMykgVGhlIGZ1bmN0aW9uIHRvIGNhbGwuCisgICAgaml0LmxvYWRQdHIoCisgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0
ZXIpKSAqIFJlZ2lzdGVyRmlsZTo6UmV0dXJuQWRkcmVzcyksCisgICAgICAgIEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKEdQUklOZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0Lmp1
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtGb3JUaHVua0dlbmVyYXRvcigKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICAvLyBUaGUgcmV0dXJuIGFk
ZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhl
bmNlCisgICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hp
bGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsCisgICAgLy8gdG8gcGVyZm9ybSBsaW5raW5n
IGFuZCBsYXp5IGNvbXBpbGF0aW9uIGlmIG5lY2Vzc2FyeS4gV2UgZXhwZWN0IHRoZSBjYWxsZWUK
KyAgICAvLyB0byBiZSBpbiBub25BcmdHUFIwL25vbkFyZ0dQUjEgKHBheWxvYWQvdGFnKSwgdGhl
IGNhbGwgZnJhbWUgdG8gaGF2ZSBhbHJlYWR5CisgICAgLy8gYmVlbiBhZGp1c3RlZCwgbm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSIGhvbGRzIHRoZSBleGNlcHRpb24gaGFuZGxlciBpbmRleCwKKyAg
ICAvLyBhbmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFpbGFibGUgZm9yIHVzZS4gV2Ug
dXNlIEpJVFN0YWNrRnJhbWU6OmFyZ3MKKyAgICAvLyB0byBzYXZlIGltcG9ydGFudCBpbmZvcm1h
dGlvbiBhY3Jvc3MgY2FsbHMuCisgICAgCisgICAgQ0NhbGxIZWxwZXJzIGppdChnbG9iYWxEYXRh
KTsKKyAgICAKKyAgICBzbG93UGF0aEZvcihqaXQsIGdsb2JhbERhdGEsIGtpbmQgPT0gQ29kZUZv
ckNhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOworICAg
IAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIHBhdGNoQnVmZmVy
LAorICAgICAgICAoIkRGRyBsaW5rICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZv
ckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7Cisg
ICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ2FsbCk7
Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5l
cmF0b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK3N0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKAorICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIC8vIFRo
ZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2ssIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVy
LiBXZSB3aWxsIGhlbmNlCisgICAgLy8ganVtcCB0byB0aGUgY2FsbGVlLCBvciBzYXZlIHRoZSBy
ZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZQorICAgIC8vIG1ha2UgYSBD
KysgZnVuY3Rpb24gY2FsbCB0byB0aGUgYXBwcm9wcmlhdGUgREZHIG9wZXJhdGlvbi4KKworICAg
IC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGZvciBlbGltaW5hdGluZyB0aGVzZSBj
aGVja3MuIEluIG1hbnkgY2FzZXMsCisgICAgLy8gdGhlIERGRyBrbm93cyB0aGF0IHRoZSB2YWx1
ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3IgZGVmaW5pdGVseSBhIGZ1bmN0aW9uLgorICAgIAor
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CisKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaFRlc3RQdHIoCisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAg
ICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LCBHUFJJbmZvOjpub25BcmdHUFIxLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyNlbmRpZgorICAgIHNsb3dDYXNlLmFwcGVuZCgK
KyAgICAgICAgaml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mobm9uQXJnR1BSMCwgSlNDZWxs
OjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoJkpTRnVuY3Rpb246OnNfaW5mbykpKTsKKyAgICAKKyAgICAvLyBOb3cgd2Uga25vdyB3
ZSBoYXZlIGEgSlNGdW5jdGlvbi4KKyAgICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT0JK
RUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLAorICAgICAgICBHUFJJbmZv
Ojpub25BcmdHUFIyKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2gz
MigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGVzc1RoYW4sCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwK
KyAgICAgICAgICAgICAgICBraW5kID09IENvZGVGb3JDYWxsID8KKyAgICAgICAgICAgICAgICBP
QkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX251bVBhcmFtZXRlcnNGb3JDYWxs
KSA6CisgICAgICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwg
bV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigwKSkpOworICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2
ZSBhIENvZGVCbG9jay4KKyAgICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwKKyAgICAgICAg
ICAgIGtpbmQgPT0gQ29kZUZvckNhbGwgPworICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEZ1
bmN0aW9uRXhlY3V0YWJsZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKSA6CisgICAg
ICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2ppdENvZGVGb3JD
b25zdHJ1Y3RXaXRoQXJpdHlDaGVjaykpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAg
CisgICAgLy8gTWFrZSBhIHRhaWwgY2FsbC4gVGhpcyB3aWxsIHJldHVybiBiYWNrIHRvIERGRyBj
b2RlLgorICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QwKTsKKworICAgIHNsb3dDYXNlLmxpbmso
JmppdCk7CisgICAgCisgICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nLCBzbyByZXZl
cnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgorICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgZ2xv
YmFsRGF0YSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvblZpcnR1YWxDYWxsIDogb3Bl
cmF0aW9uVmlydHVhbENvbnN0cnVjdCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERSgKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiREZHIHZpcnR1YWwgJXMg
c2xvdyBwYXRoIHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1
Y3QiKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvclRo
dW5rR2VuZXJhdG9yKGdsb2JhbERhdGEsIENvZGVGb3JDYWxsKTsKK30KKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCit7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcihnbG9iYWxE
YXRhLCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGh1bmtzLmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE0IEBAIG5hbWVzcGFj
ZSBERkcgewogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqKTsKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151587</attachid>
            <date>2012-07-10 21:22:38 -0700</date>
            <delta_ts>2012-07-10 22:04:44 -0700</delta_ts>
            <desc>it made some virtual calls</desc>
            <filename>virtualcall_patch_2.diff</filename>
            <type>text/plain</type>
            <size>39313</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMjkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBA
CisyMDEyLTA3LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGZhc3QgdmlydHVhbCBjYWxscworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5MjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MhCisKKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OnVubGluayk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6CisgICAg
ICAgIChDYWxsTGlua0luZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAg
ICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNvZGVP
cmlnaW46OmlzU2V0KToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpBc3NlbWJseUhlbHBlcnMpOgorICAgICAg
ICAqIGRmZy9ERkdDQ2FsbEhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDQ2FsbEhlbHBl
cnM6OkNDYWxsSGVscGVycyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAq
IGRmZy9ERkdHUFJJbmZvLmg6CisgICAgICAgIChHUFJJbmZvKToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsQmVnaW5U
b2tlbjo6Q2FsbEJlZ2luVG9rZW4pOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxCZWdpblRva2Vu
Ojp+Q2FsbEJlZ2luVG9rZW4pOgorICAgICAgICAoQ2FsbEJlZ2luVG9rZW4pOgorICAgICAgICAo
SlNDOjpERkc6OkNhbGxCZWdpblRva2VuOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxC
ZWdpblRva2VuOjpyZWdpc3RlcldpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q2FsbEJlZ2luVG9rZW46OmNvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxF
eGNlcHRpb25SZWNvcmQ6OkNhbGxFeGNlcHRpb25SZWNvcmQpOgorICAgICAgICAoQ2FsbEV4Y2Vw
dGlvblJlY29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmN1cnJlbnRDb2Rl
T3JpZ2luSW5kZXgpOgorICAgICAgICAoSklUQ29tcGlsZXIpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvbXBpbGVyOjpiZWdpbkNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6cHJlcGFyZUZv
ckV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkRXhj
ZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRGYXN0RXhj
ZXB0aW9uQ2hlY2spOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnTGlua0Zvcik6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OnRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OnNsb3dQYXRoRm9yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpsaW5rRm9yVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OmxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OmxpbmtDb25zdHJ1Y3RUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6dmlydHVhbEZvclRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjp2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjp2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAq
IGRmZy9ERkdUaHVua3MuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogaml0L0pJVC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmxpbmtGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoRXhl
Y3V0YWJsZUJhc2UpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRD
b2RlRm9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mTnVtUGFyYW1l
dGVyc0Zvcik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0Z1
bmN0aW9uKToKKwogMjAxMi0wNy0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04ocjEyMjE2Nik6IEl0IG1hZGUgMTcwIHRlc3RzIGNyYXNoIG9u
IDMyIGJpdCBwbGF0Zm9ybXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogCiAjaW5jbHVkZSAiREZHT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZm
ZXIuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC0zOCwxMiArMzksMTIgQEAgdm9pZCBDYWxsTGlu
a0luZm86OnVubGluayhKU0dsb2JhbERhdGEmIAogICAgIAogICAgIGlmIChpc0RGRykgewogI2lm
IEVOQUJMRShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRp
b25DYWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IERGRzo6
b3BlcmF0aW9uTGlua0NvbnN0cnVjdCA6IERGRzo6b3BlcmF0aW9uTGlua0NhbGwpOworICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIChjYWxsVHlwZSA9PSBD
b25zdHJ1Y3QgPyBnbG9iYWxEYXRhLmdldENUSVN0dWIoREZHOjpsaW5rQ29uc3RydWN0VGh1bmtH
ZW5lcmF0b3IpIDogZ2xvYmFsRGF0YS5nZXRDVElTdHViKERGRzo6bGlua0NhbGxUaHVua0dlbmVy
YXRvcikpLmNvZGUoKSk7CiAjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNl
bmRpZgogICAgIH0gZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRp
b25OZWFyQ2FsbChjYWxsUmV0dXJuTG9jYXRpb24pLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyBn
bG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluaygpIDogZ2xvYmFsRGF0
YS5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGxMaW5rKCkpOworICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2Jh
bERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkgOiBnbG9iYWxEYXRhLmpp
dFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7CiAgICAgaGFzU2VlblNob3VsZFJlcGF0Y2gg
PSBmYWxzZTsKICAgICBjYWxsZWUuY2xlYXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdT
ZW4KICAgICAgICAgICAgIHJlbW92ZSgpOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGNhbGxSZXR1cm5Mb2NhdGlvbjsgLy8gaXQncyBhIG5lYXIgY2FsbCBpbiB0aGUgb2xkIEpJVCwg
b3IgYSBub3JtYWwgY2FsbCBpbiBERkcKKyAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsUmV0
dXJuTG9jYXRpb247CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsK
ICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXI7CiAgICAgSklUV3JpdGVCYXJy
aWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWU7CiAgICAgCiAgICAgQ29kZU9yaWdpbigpCi0gICAgICAgIDogYnl0ZWNvZGVJbmRleChz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgICAgIDogYnl0ZWNvZGVJ
bmRleCgoMSA8PCAyOSkgLSAxKQogICAgICAgICAsIHZhbHVlUHJvZmlsZU9mZnNldCgwKQogICAg
ICAgICAsIGlubGluZUNhbGxGcmFtZSgwKQogICAgIHsKQEAgLTYzLDcgKzYzLDcgQEAgc3RydWN0
IENvZGVPcmlnaW4gewogICAgICAgICBBU1NFUlQodmFsdWVQcm9maWxlT2Zmc2V0IDwgKDF1IDw8
IDMpKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGJ5dGVj
b2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOyB9CisgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGJ5dGVjb2RlSW5kZXggIT0gKDEgPDwgMjkpIC0g
MTsgfQogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXhGb3JWYWx1ZVByb2ZpbGUoKSBj
b25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3Nl
bWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTIgKzQ2LDEz
IEBAIHB1YmxpYzoKICAgICBBc3NlbWJseUhlbHBlcnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0
YSkKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgICAgICwgbV9iYXNlbGlu
ZUNvZGVCbG9jayhjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKQorICAgICAgICAsIG1fYmFz
ZWxpbmVDb2RlQmxvY2soY29kZUJsb2NrID8gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSA6
IDApCiAgICAgewotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQo
bV9iYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVCghbV9iYXNlbGluZUNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5n
ZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICBpZiAobV9jb2Rl
QmxvY2spIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghbV9iYXNlbGluZUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAg
ICAgICAgICBBU1NFUlQobV9iYXNlbGluZUNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENv
ZGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFz
cyBDQ2FsbEhlbHBlcnMgOiBwdWJsaWMgQXNzZW1ibHlIZWxwZXJzIHsKIHB1YmxpYzoKLSAgICBD
Q2FsbEhlbHBlcnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKKyAgICBDQ2FsbEhlbHBlcnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IDApCiAgICAgICAgIDogQXNzZW1ibHlIZWxwZXJzKGdsb2JhbERhdGEsIGNv
ZGVCbG9jaykKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIERGR19F
TkFCTEUoREZHX0ZFQVRVUkUpIChkZWZpbmVkIERGR19FTkFCTEVfIyNERkdfRkVBVFVSRSAmJiBE
RkdfRU5BQkxFXyMjREZHX0ZFQVRVUkUpCiAKIC8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9y
bWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFw
aHMuCi0jZGVmaW5lIERGR19FTkFCTEVfREVCVUdfVkVSQk9TRSAwCisjZGVmaW5lIERGR19FTkFC
TEVfREVCVUdfVkVSQk9TRSAxCiAvLyBFbWl0IGR1bXBzIGR1cmluZyBwcm9wYWdhdGlvbiwgaW4g
YWRkaXRpb24gdG8ganVzdCBhZnRlci4KICNkZWZpbmUgREZHX0VOQUJMRV9ERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFIDAKIC8vIEVtaXQgbG9nZ2luZyBmb3IgT1NSIGV4aXQgdmFsdWUgcmVjb3Zl
cmllcyBhdCBldmVyeSBub2RlLCBub3QganVzdCBub2RlcyB0aGF0CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw2ICsy
NzMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjEgPSBY
ODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFy
Z0dQUjAgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIG5vbkFyZ0dQUjEgPSBYODZSZWdpc3RlcnM6OmVieDsgLy8gcmVnVDMKKyAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIG5vbkFyZ0dQUjIgPSBYODZSZWdpc3RlcnM6OmVzaTsgLy8gcmVnVDQKICAg
ICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVnaXN0ZXJzOjplYXg7
IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBYODZS
ZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNl
cnZlZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6ZWN4OwpAQCAtMzQ0LDYgKzM0NSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50R1BSNSA9IFg4NlJlZ2lz
dGVyczo6cjk7ICAvLyByZWdUNwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJnR1BSMCA9
IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9u
QXJnR1BSMSA9IFg4NlJlZ2lzdGVyczo6ZWJ4OyAvLyByZWdUMworICAgIHN0YXRpYyBjb25zdCBH
UFJSZWcgbm9uQXJnR1BSMiA9IFg4NlJlZ2lzdGVyczo6cjEwOyAvLyByZWdUOAogICAgIHN0YXRp
YyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVn
VDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IFg4NlJlZ2lzdGVy
czo6ZWR4OyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSID0gWDg2UmVnaXN0ZXJzOjplc2k7CkBAIC00MTYsNiArNDE4LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1lbnRHUFIzID0gQVJNUmVnaXN0ZXJzOjpy
MzsgLy8gRklYTUUhCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25BcmdHUFIwID0gQVJNUmVn
aXN0ZXJzOjpyNDsgLy8gcmVnVDMKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjEg
PSBBUk1SZWdpc3RlcnM6OnI4OyAvLyByZWdUNAorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9u
QXJnR1BSMiA9IEFSTVJlZ2lzdGVyczo6cjk7IC8vIHJlZ1Q1CiAgICAgc3RhdGljIGNvbnN0IEdQ
UlJlZyByZXR1cm5WYWx1ZUdQUiA9IEFSTVJlZ2lzdGVyczo6cjA7IC8vIHJlZ1QwCiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBBUk1SZWdpc3RlcnM6OnIxOyAvLyBy
ZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0g
QVJNUmVnaXN0ZXJzOjpyMjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw2
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgdW5z
aWduZWQgcmV0dXJuQWRkcmVzc09mZnNldCA9IGxpbmtCdWZmZXIucmV0dXJuQWRkcmVzc09mZnNl
dChtX2V4Y2VwdGlvbkNoZWNrc1tpXS5tX2NhbGwpOwogICAgICAgICBjb2RlT3JpZ2luc1tpXS5j
b2RlT3JpZ2luID0gcmVjb3JkLm1fY29kZU9yaWdpbjsKICAgICAgICAgY29kZU9yaWdpbnNbaV0u
Y2FsbFJldHVybk9mZnNldCA9IHJldHVybkFkZHJlc3NPZmZzZXQ7Ci0gICAgICAgIHJlY29yZC5t
X3Rva2VuLmFzc2VydENvZGVPcmlnaW5JbmRleChpKTsKICAgICB9CiAgICAgCiAgICAgbV9jb2Rl
QmxvY2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJvcGVydHlBY2Nlc3Nlcy5z
aXplKCkpOwpAQCAtMTg5LDcgKzE4OCw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNh
bGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanNDYWxsc1tpXS5tX2Nh
bGxUeXBlOwogICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKLSAgICAgICAgaW5mby5jYWxsUmV0
dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9q
c0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fanNDYWxs
c1tpXS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cigobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKGlu
Zm8uY2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBsaW5rQ29uc3RydWN0VGh1
bmtHZW5lcmF0b3IgOiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKKyAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCk7CiAgICAgICAgIGlu
Zm8uaG90UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fanNDYWxsc1tpXS5tX3Rh
cmdldFRvQ2hlY2spOwogICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsKG1fanNDYWxsc1tpXS5tX2Zhc3RDYWxsKTsKICAgICB9CkBAIC0yODAs
NyArMjgwLDggQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAg
IG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAg
cG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBK
SVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7CiAKLSAgICBDYWxsQmVn
aW5Ub2tlbiB0b2tlbiA9IGJlZ2luQ2FsbCgpOworICAgIENhbGxCZWdpblRva2VuIHRva2VuOwor
ICAgIGJlZ2luQ2FsbChDb2RlT3JpZ2luKDApLCB0b2tlbik7CiAgICAgQ2FsbCBjYWxsUmVnaXN0
ZXJGaWxlQ2hlY2sgPSBjYWxsKCk7CiAgICAgbm90aWZ5Q2FsbChjYWxsUmVnaXN0ZXJGaWxlQ2hl
Y2ssIENvZGVPcmlnaW4oMCksIHRva2VuKTsKICAgICBqdW1wKGZyb21SZWdpc3RlckZpbGVDaGVj
ayk7CkBAIC0yOTcsNyArMjk4LDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9u
KEpJVENvZAogICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsIFRydXN0
ZWRJbW0zMihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGZyb21Bcml0eUNo
ZWNrLCB0aGlzKTsKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOwogICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9P
RkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikp
OwotICAgIHRva2VuID0gYmVnaW5DYWxsKCk7CisgICAgYmVnaW5DYWxsKENvZGVPcmlnaW4oMCks
IHRva2VuKTsKICAgICBDYWxsIGNhbGxBcml0eUNoZWNrID0gY2FsbCgpOwogICAgIG5vdGlmeUNh
bGwoY2FsbEFyaXR5Q2hlY2ssIENvZGVPcmlnaW4oMCksIHRva2VuKTsKICAgICBtb3ZlKEdQUklu
Zm86OnJlZ1QwLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDI4ICs3Niw1NSBAQCBjbGFzcyBDYWxsQmVnaW5Ub2tlbiB7CiBwdWJsaWM6CiAgICAg
Q2FsbEJlZ2luVG9rZW4oKQogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBtX2NvZGVP
cmlnaW5JbmRleChVSU5UX01BWCkKKyAgICAgICAgOiBtX3JlZ2lzdGVyZWQoZmFsc2UpCisgICAg
ICAgICwgbV9leGNlcHRpb25DaGVja0luZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKICNlbmRpZgogICAgIHsKICAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgQ2FsbEJl
Z2luVG9rZW4odW5zaWduZWQgY29kZU9yaWdpbkluZGV4KQorICAgIH5DYWxsQmVnaW5Ub2tlbigp
CisgICAgeworICAgICAgICBBU1NFUlQobV9yZWdpc3RlcmVkIHx8ICFtX2NvZGVPcmlnaW4uaXNT
ZXQoKSk7CisgICAgICAgIEFTU0VSVChtX2NvZGVPcmlnaW4uaXNTZXQoKSA9PSAobV9leGNlcHRp
b25DaGVja0luZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVk
IGluZGV4KQorICAgIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9jb2RlT3Jp
Z2luSW5kZXgoY29kZU9yaWdpbkluZGV4KQorICAgICAgICBBU1NFUlQobV9yZWdpc3RlcmVkIHx8
ICFtX2NvZGVPcmlnaW4uaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChtX2NvZGVPcmlnaW4uaXNT
ZXQoKSA9PSAobV9leGNlcHRpb25DaGVja0luZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkpOworICAgICAgICBtX2NvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOworICAg
ICAgICBtX3JlZ2lzdGVyZWQgPSBmYWxzZTsKKyAgICAgICAgbV9leGNlcHRpb25DaGVja0luZGV4
ID0gaW5kZXg7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oY29kZU9yaWdpbik7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CiAjZW5kaWYKLSAgICB7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTShjb2RlT3JpZ2luSW5kZXgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFzc2VydENvZGVP
cmlnaW5JbmRleCh1bnNpZ25lZCBjb2RlT3JpZ2luSW5kZXgpIGNvbnN0CisgICAgdm9pZCByZWdp
c3RlcldpdGhFeGNlcHRpb25DaGVjayhDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIGlu
ZGV4KQogICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjb2RlT3JpZ2luSW5kZXgsIGNvZGVP
cmlnaW5JbmRleCA8IFVJTlRfTUFYKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjb2RlT3JpZ2lu
SW5kZXgsIGNvZGVPcmlnaW5JbmRleCA9PSBtX2NvZGVPcmlnaW5JbmRleCk7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgICAgICBBU1NFUlQobV9jb2RlT3JpZ2luID09IGNvZGVPcmlnaW4pOwor
ICAgICAgICBpZiAobV9yZWdpc3RlcmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBB
U1NFUlQobV9leGNlcHRpb25DaGVja0luZGV4ID09IGluZGV4KTsKKyAgICAgICAgbV9yZWdpc3Rl
cmVkID0gdHJ1ZTsKKyNlbmRpZgogICAgIH0KIAorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBj
b25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2NvZGVPcmlnaW47CisgICAgfQorI2VuZGlmCisgICAgCiBwcml2YXRlOgogI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCBtX2NvZGVPcmlnaW5JbmRleDsKKyAgICBDb2RlT3Jp
Z2luIG1fY29kZU9yaWdpbjsKKyAgICBib29sIG1fcmVnaXN0ZXJlZDsKKyAgICB1bnNpZ25lZCBt
X2V4Y2VwdGlvbkNoZWNrSW5kZXg7CiAjZW5kaWYKIH07CiAKQEAgLTEwNywyNSArMTM0LDIyIEBA
IHByaXZhdGU6CiAvLyBDYWxscyB0aGF0IG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbiBhbHNvIHJl
Y29yZCB0aGUgSnVtcCB0YWtlbiBvbiBleGNlcHRpb24KIC8vICh1bnNldCBpZiBub3QgcHJlc2Vu
dCkgYW5kIGNvZGUgb3JpZ2luIHVzZWQgdG8gcmVjb3ZlciBoYW5kbGVyL3NvdXJjZSBpbmZvLgog
c3RydWN0IENhbGxFeGNlcHRpb25SZWNvcmQgewotICAgIENhbGxFeGNlcHRpb25SZWNvcmQoTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5U
b2tlbiB0b2tlbikKKyAgICBDYWxsRXhjZXB0aW9uUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAg
ICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKLSAgICAgICAgLCBtX3Rva2VuKHRva2Vu
KQogICAgIHsKICAgICB9CiAKLSAgICBDYWxsRXhjZXB0aW9uUmVjb3JkKE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkNoZWNrLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuIHRva2VuKQorICAgIENhbGxFeGNlcHRpb25S
ZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhj
ZXB0aW9uQ2hlY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgOiBtX2NhbGwoY2Fs
bCkKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNoZWNrKGV4Y2VwdGlvbkNoZWNrKQogICAgICAgICAs
IG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQotICAgICAgICAsIG1fdG9rZW4odG9rZW4pCiAgICAg
ewogICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBtX2V4Y2VwdGlvbkNoZWNrOwogICAgIENvZGVPcmlnaW4gbV9jb2RlT3Jp
Z2luOwotICAgIENhbGxCZWdpblRva2VuIG1fdG9rZW47CiB9OwogCiBzdHJ1Y3QgUHJvcGVydHlB
Y2Nlc3NSZWNvcmQgewpAQCAtMjU3LDE5ICsyODEsMjcgQEAgcHVibGljOgogICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKICAg
ICB9CiAgICAgCi0gICAgLy8gR2V0IGEgdG9rZW4gZm9yIGJlZ2lubmluZyBhIGNhbGwsIGFuZCBz
ZXQgdGhlIGN1cnJlbnQgY29kZSBvcmlnaW4gaW5kZXggaW4KLSAgICAvLyB0aGUgY2FsbCBmcmFt
ZS4KLSAgICBDYWxsQmVnaW5Ub2tlbiBiZWdpbkNhbGwoKQorICAgIHVuc2lnbmVkIGN1cnJlbnRD
b2RlT3JpZ2luSW5kZXgoKSBjb25zdAogICAgIHsKLSAgICAgICAgdW5zaWduZWQgY29kZU9yaWdp
bkluZGV4ID0gbV9jdXJyZW50Q29kZU9yaWdpbkluZGV4Kys7Ci0gICAgICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGNvZGVPcmlnaW5JbmRleCksIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgcmV0dXJuIENh
bGxCZWdpblRva2VuKGNvZGVPcmlnaW5JbmRleCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRD
b2RlT3JpZ2luSW5kZXg7CisgICAgfQorICAgIAorICAgIC8vIEdldCBhIHRva2VuIGZvciBiZWdp
bm5pbmcgYSBjYWxsLCBhbmQgc2V0IHRoZSBjdXJyZW50IGNvZGUgb3JpZ2luIGluZGV4IGluCisg
ICAgLy8gdGhlIGNhbGwgZnJhbWUuIEZvciBlYWNoIGJlZ2luQ2FsbCgpIHRoZXJlIG11c3QgYmUg
YXQgbGVhc3Qgb25lIGV4Y2VwdGlvbgorICAgIC8vIGNoZWNrLCBhbmQgYWxsIG9mIHRoZSBleGNl
cHRpb24gY2hlY2tzIG11c3QgaGF2ZSB0aGUgc2FtZSBDb2RlT3JpZ2luIGFzIHRoZQorICAgIC8v
IGJlZ2luQ2FsbCgpLgorICAgIHZvaWQgYmVnaW5DYWxsKENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Q2FsbEJlZ2luVG9rZW4mIHRva2VuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBt
X2V4Y2VwdGlvbkNoZWNrcy5zaXplKCk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGlu
ZGV4KSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oUmVnaXN0ZXJGaWxlOjpB
cmd1bWVudENvdW50KSkpOworICAgICAgICB0b2tlbi5zZXQoY29kZU9yaWdpbiwgaW5kZXgpOwog
ICAgIH0KIAogICAgIC8vIE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJl
cXVpcmUgbGlua2luZy4KLSAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBmdW5jdGlvbkNhbGwsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4gdG9rZW4pCisgICAgdm9pZCBub3Rp
ZnlDYWxsKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdp
blRva2VuJiB0b2tlbikKICAgICB7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChD
YWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgY29kZU9yaWdpbiwgdG9rZW4pKTsKKyAg
ICAgICAgdG9rZW4ucmVnaXN0ZXJXaXRoRXhjZXB0aW9uQ2hlY2soY29kZU9yaWdpbiwgbV9leGNl
cHRpb25DaGVja3Muc2l6ZSgpKTsKKyAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKENh
bGxFeGNlcHRpb25SZWNvcmQoZnVuY3Rpb25DYWxsLCBjb2RlT3JpZ2luKSk7CiAgICAgfQogCiAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCkBAIC0yNzksMjAgKzMxMSwyNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbHMuYXBw
ZW5kKENhbGxMaW5rUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24pKTsKICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICB9CisgICAgCisgICAgdm9pZCBwcmVwYXJlRm9yRXhjZXB0
aW9uQ2hlY2soKQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIobV9leGNlcHRpb25D
aGVja3Muc2l6ZSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICB9
CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGFuIGV4Y2VwdGlv
biBjaGVjay4KLSAgICB2b2lkIGFkZEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVuY3Rpb25DYWxsLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuIHRva2VuKQorICAgIHZvaWQgYWRk
RXhjZXB0aW9uQ2hlY2soQ2FsbCBmdW5jdGlvbkNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Q2FsbEJlZ2luVG9rZW4mIHRva2VuKQogICAgIHsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
bV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKLSAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKENhbGxFeGNlcHRpb25SZWNv
cmQoZnVuY3Rpb25DYWxsLCBlbWl0RXhjZXB0aW9uQ2hlY2soKSwgY29kZU9yaWdpbiwgdG9rZW4p
KTsKKyAgICAgICAgcHJlcGFyZUZvckV4Y2VwdGlvbkNoZWNrKCk7CisgICAgICAgIHRva2VuLnJl
Z2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNrKGNvZGVPcmlnaW4sIG1fZXhjZXB0aW9uQ2hlY2tzLnNp
emUoKSk7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVj
b3JkKGZ1bmN0aW9uQ2FsbCwgZW1pdEV4Y2VwdGlvbkNoZWNrKCksIGNvZGVPcmlnaW4pKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhIGZh
c3QgZXhjZXB0aW9uIGNoZWNrIHRoYXQgdGVzdHMgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJv
LgotICAgIHZvaWQgYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVuY3Rpb25DYWxsLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuIHRva2VuKQorICAgIHZvaWQgYWRkRmFz
dEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxCZWdpblRva2VuJiB0b2tlbikKICAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUik7CisgICAgICAgIHByZXBhcmVGb3JFeGNlcHRpb25DaGVjaygpOwogICAgICAgICBKdW1w
IGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVj
b3JkKGZ1bmN0aW9uQ2FsbCwgZXhjZXB0aW9uQ2hlY2ssIGNvZGVPcmlnaW4sIHRva2VuKSk7Cisg
ICAgICAgIHRva2VuLnJlZ2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNrKGNvZGVPcmlnaW4sIG1fZXhj
ZXB0aW9uQ2hlY2tzLnNpemUoKSk7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChD
YWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZXhjZXB0aW9uQ2hlY2ssIGNvZGVPcmln
aW4pKTsKICAgICB9CiAgICAgCiAgICAgLy8gSGVscGVyIG1ldGhvZHMgdG8gZ2V0IHByZWRpY3Rp
b25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZHUmVwYXRjaC5o
IgorI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUu
aCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpA
QCAtODYyLDE0ICs4NjMsMTQgQEAgc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0
ZSogZQogICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkp
OwogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwogICAgICAgICAg
ICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OwogCiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENh
bGxSZXR1cm5WYWx1ZSk7CiAgICAgICAgIH0KICAgICAKICAgICAgICAgQVNTRVJUKGNhbGxUeXBl
ID09IENhbGxUeXBlTm9uZSk7CiAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24g
PSBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihleGVjLCBjYWxsZWUpOwotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAg
ICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKQEAgLTg4NCwxNyAr
ODg1LDE3IEBAIHN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGUKICAgICAg
ICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICBnbG9i
YWxEYXRhLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERh
dGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgaWYgKGdsb2JhbERhdGEt
PmV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEtPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAogICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIAog
ICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVOb25lKTsKICAgICBleGVj
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhl
YywgY2FsbGVlKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJ
U3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOwogfQogCi1pbmxpbmUgdm9pZCogbGlua0ZvcihFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQoraW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0g
ZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtOTE4LDcgKzkxOSw3IEBAIGlubGluZSB2b2lkKiBs
aW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGwKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwg
a2luZCk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+ZXhj
ZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOwogICAgICAgICB9CiAgICAgICAgIGNvZGVCbG9jayA9ICZmdW5jdGlvbkV4ZWN1dGFibGUt
PmdlbmVyYXRlZEJ5dGVjb2RlRm9yKGtpbmQpOwogICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpKQpAQCAtOTI2LDcgKzkyNyw3IEBAIGlubGluZSB2b2lkKiBsaW5r
Rm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGwKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZVB0
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS5hZGRyZXNz
Rm9yQ2FsbCgpOwogICAgIH0KLSAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZv
KGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwogICAgIGlmICghY2FsbExpbmtJbmZvLnNlZW5PbmNl
KCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby5zZXRTZWVuKCk7CiAgICAgZWxzZQpAQCAtOTM0LDE2
ICs5MzUsMTQgQEAgaW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAg
IHJldHVybiBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKLVBfRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0Uob3BlcmF0aW9uTGlua0NhbGwpOwotdm9pZCogREZH
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQordm9pZCogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7Ci0gICAg
cmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgcmV0dXJuQWRkcmVzcywgQ29kZUZvckNhbGwpOwor
ICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKIH0KIAotUF9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShvcGVyYXRpb25MaW5rQ29uc3RydWN0
KTsKLXZvaWQqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFdpdGhSZXR1cm5B
ZGRyZXNzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQordm9pZCogREZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSkKIHsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCByZXR1cm5B
ZGRyZXNzLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVl
LCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAogaW5saW5lIHZvaWQqIHZpcnR1YWxGb3IoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC05NjUsNyAr
OTY0LDcgQEAgaW5saW5lIHZvaWQqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQwogICAgICAg
ICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoZXhlY0Nh
bGxlZSwgZnVuY3Rpb24tPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAg
ICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsKLSAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmdldENUSVN0dWIo
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9u
IDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVy
cy5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiREZHVGh1bmtz
LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCkBAIC05MDksNiArOTEwLDcgQEAgdm9p
ZCBkZmdCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYwogdm9pZCBkZmdMaW5rRm9yKEV4
ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2Fs
bGVlQ29kZUJsb2NrLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgQ29kZUJsb2NrKiBj
YWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKKyAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBjYWxsZXJDb2RlQmxvY2stPmdsb2JhbERhdGEoKTsK
ICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsK
ICAgICAKQEAgLTkyMSwxMSArOTIzLDExIEBAIHZvaWQgZGZnTGlua0ZvcihFeGVjU3RhdGUqIGV4
ZWMsIENhbGxMaW4KICAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKCZj
YWxsTGlua0luZm8pOwogICAgIAogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiksIG9wZXJhdGlvblZpcnR1YWxDYWxsKTsKKyAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0
YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiksIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOworICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiksIEZ1bmN0aW9uUHRyKGdsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENvbnN0
cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogfQogCiB2
b2lkIGRmZ1Jlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk5OCwxNCArOTk4LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUmIG5vZGUKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CiAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7CiAKKyAgICBDYWxsQmVnaW5Ub2tlbiB0b2tl
bjsKKyAgICBtX2ppdC5iZWdpbkNhbGwobm9kZS5jb2RlT3JpZ2luLCB0b2tlbik7CisgICAgCisg
ICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgIAogICAgIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOwogICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSksIHJlc3VsdEdQUik7Ci0gICAgbV9qaXQu
c3RvcmVQdHIocmVzdWx0R1BSLCBjYWxsRnJhbWVTbG90KFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFp
bikpOworICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKTsKIAotICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAg
ICAKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9y
aWdpbjsKLSAgICBDYWxsQmVnaW5Ub2tlbiB0b2tlbiA9IG1faml0LmJlZ2luQ2FsbCgpOwogICAg
IEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKICAgICBtX2pp
dC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CiAgICAgCkBAIC0xMDEz
LDE0ICsxMDE1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUK
ICAgICAKICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAgbV9qaXQuYWRkUHRy
KFRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7Ci0gICAgdG9rZW4gPSBtX2ppdC5iZWdpbkNhbGwoKTsKLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0LmFwcGVuZENhbGwoc2xvd0NhbGxGdW5jdGlvbik7
Ci0gICAgbV9qaXQuYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKHNsb3dDYWxsLCBjb2RlT3JpZ2luLCB0
b2tlbik7Ci0gICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+
bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOwotICAgIHRva2VuID0gbV9qaXQuYmVnaW5DYWxsKCk7Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgdGhlQ2FsbCA9IG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwotICAgIG1faml0Lm5vdGlmeUNhbGwodGhlQ2FsbCwgY29kZU9yaWdpbiwgdG9rZW4pOworICAg
IG1faml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBtX2ppdC5w
cmVwYXJlRm9yRXhjZXB0aW9uQ2hlY2soKTsKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2Fs
bCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgbV9qaXQubm90aWZ5Q2FsbChzbG93Q2FsbCwgY29k
ZU9yaWdpbiwgdG9rZW4pOwogICAgIAogICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzM4LDcgKzE3MzgsOCBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7CiAgICAgICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiA9IGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luOwotICAgICAgICBDYWxs
QmVnaW5Ub2tlbiB0b2tlbiA9IG1faml0LmJlZ2luQ2FsbCgpOworICAgICAgICBDYWxsQmVnaW5U
b2tlbiB0b2tlbjsKKyAgICAgICAgbV9qaXQuYmVnaW5DYWxsKGNvZGVPcmlnaW4sIHRva2VuKTsK
ICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwoZnVuY3Rp
b24pOwogICAgICAgICBtX2ppdC5hZGRFeGNlcHRpb25DaGVjayhjYWxsLCBjb2RlT3JpZ2luLCB0
b2tlbik7CiAgICAgICAgIHJldHVybiBjYWxsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVGh1bmtzLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVycy5oIgogI2lu
Y2x1ZGUgIkRGR0ZQUkluZm8uaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCiAjaW5jbHVkZSAi
REZHT1NSRXhpdENvbXBpbGVyLmgiCkBAIC04Miw2ICs4MywxNTggQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCAoIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIikpOwogfQogCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KGdsb2JhbERh
dGEpOworICAgIAorICAgIC8vIFdlIHdpbGwganVtcCB0byBoZXJlIGlmIHRoZSBKSVQgY29kZSB0
aGlua3MgaXQncyBtYWtpbmcgYSBjYWxsLCBidXQgdGhlCisgICAgLy8gbGlua2luZyBoZWxwZXIg
KEMrKyBjb2RlKSBkZWNpZGVkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLiBXZSB3aWxs
CisgICAgLy8gaGF2ZSBzYXZlZCB0aGUgY2FsbFJldHVybkluZGV4IGluIHRoZSBmaXJzdCBhcmd1
bWVudHMgb2YgSklUU3RhY2tGcmFtZS4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIHJldHVybiBhZGRy
ZXNzIHdpbGwgYmUgb24gdGhlIHN0YWNrIGF0IHRoaXMgcG9pbnQsIHNvIHdlCisgICAgLy8gbmVl
ZCB0byByZW1vdmUgaXQgYW5kIGRyb3AgaXQgb24gdGhlIGZsb29yLCBzaW5jZSB3ZSBkb24ndCBj
YXJlIGFib3V0IGl0LgorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQucGVlayhHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0Lmp1bXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkRGRyB0aHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNs
b3cgcGF0aCB0aHVuayIpKTsKK30KKworc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCisgICAgQ0Nh
bGxIZWxwZXJzJiBqaXQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUF9ERkdPcGVyYXRpb25f
RSBzbG93UGF0aEZ1bmN0aW9uKQoreworICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgaml0LnN0b3JlUHRyKAorICAgICAgICBH
UFJJbmZvOjpub25BcmdHUFIyLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAg
ICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlJldHVyblBD
KSk7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFs
RGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBqaXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisgICAgaml0LnNldHVwQXJn
dW1lbnRzRXhlY1N0YXRlKCk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc2xvd1BhdGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAKKyAgICAv
LyBUaGlzIHNsb3cgY2FsbCB3aWxsIHJldHVybiB0aGUgYWRkcmVzcyBvZiBvbmUgb2YgdGhlIGZv
bGxvd2luZzoKKyAgICAvLyAxKSBFeGNlcHRpb24gdGhyb3dpbmcgdGh1bmsuCisgICAgLy8gMikg
SG9zdCBjYWxsIHJldHVybiB2YWx1ZSByZXR1cm5lciB0aGluZ3kuCisgICAgLy8gMykgVGhlIGZ1
bmN0aW9uIHRvIGNhbGwuCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIFJlZ2lzdGVy
RmlsZTo6UmV0dXJuUEMpLAorICAgICAgICBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIpOworICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKK30KKworc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtH
ZW5lcmF0b3IoCisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCit7CisgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFj
ayBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQorICAgIC8vIHNhdmUgdGhl
IHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlIG1ha2UgYSBDKysgZnVu
Y3Rpb24gY2FsbAorICAgIC8vIHRvIHBlcmZvcm0gbGlua2luZyBhbmQgbGF6eSBjb21waWxhdGlv
biBpZiBuZWNlc3NhcnkuIFdlIGV4cGVjdCB0aGUgY2FsbGVlCisgICAgLy8gdG8gYmUgaW4gbm9u
QXJnR1BSMC9ub25BcmdHUFIxIChwYXlsb2FkL3RhZyksIHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUg
YWxyZWFkeQorICAgIC8vIGJlZW4gYWRqdXN0ZWQsIG5vblByZXNlcnZlZE5vblJldHVybkdQUiBo
b2xkcyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaW5kZXgsCisgICAgLy8gYW5kIGFsbCBvdGhlciBy
ZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxlIGZvciB1c2UuIFdlIHVzZSBKSVRTdGFja0ZyYW1lOjph
cmdzCisgICAgLy8gdG8gc2F2ZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWNyb3NzIGNhbGxzLgor
ICAgIAorICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSk7CisgICAgCisgICAgc2xvd1Bh
dGhGb3Ioaml0LCBnbG9iYWxEYXRhLCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uTGlu
a0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcgbGlu
ayAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNv
bnN0cnVjdCIpKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBsaW5rRm9yVGh1
bmtHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNhbGwpOworfQorCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKGdsb2JhbERhdGEsIENv
ZGVGb3JDb25zdHJ1Y3QpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1
YWxGb3JUaHVua0dlbmVyYXRvcigKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMg
b24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQorICAg
IC8vIGp1bXAgdG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhl
IGNhbGwgZnJhbWUgd2hpbGUgd2UKKyAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8g
dGhlIGFwcHJvcHJpYXRlIERGRyBvcGVyYXRpb24uCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0KGds
b2JhbERhdGEpOworICAgIAorICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CisK
KyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGhhdmUgYSBzdG9yeSBmb3IgZWxpbWluYXRpbmcgdGhl
c2UgY2hlY2tzLiBJbiBtYW55IGNhc2VzLAorICAgIC8vIHRoZSBERkcga25vd3MgdGhhdCB0aGUg
dmFsdWUgaXMgZGVmaW5pdGVseSBhIGNlbGwsIG9yIGRlZmluaXRlbHkgYSBmdW5jdGlvbi4KKyAg
ICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0
LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICBz
bG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpub25BcmdHUFIxLAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyNlbmRpZgor
ICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaFB0cigKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJkpTRnVuY3Rpb246OnNfaW5mbykp
KTsKKyAgICAKKyAgICAvLyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KKyAgICAK
KyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKKyAgICAgICAg
R1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFy
Z0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAor
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAKKyAgICAv
LyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBDb2RlQmxvY2suCisgICAgCisgICAgaml0Lmxv
YWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIy
LCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlRm9yKGtpbmQpKSwKKyAgICAgICAgR1BS
SW5mbzo6cmVnVDApOworICAgIAorICAgIC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2lsbCBy
ZXR1cm4gYmFjayB0byBERkcgY29kZS4KKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMCk7CisK
KyAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAgIAorICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25v
dyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KKyAgICAKKyAgICBz
bG93UGF0aEZvcihqaXQsIGdsb2JhbERhdGEsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRp
b25WaXJ0dWFsQ2FsbCA6IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOworICAgIAorICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAg
ICAoIkRGRyB2aXJ0dWFsICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwg
PyAiY2FsbCIgOiAiY29uc3RydWN0IikpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmly
dHVhbENhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7CisgICAg
cmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ2FsbCk7
Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1
bmtHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2
ICs0MCwxNCBAQCBuYW1lc3BhY2UgREZHIHsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CiAKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1
YWxDYWxsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM5LDcgKzczOSw3
IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAg
aW5mby5jYWxsVHlwZSA9IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2Fs
bFR5cGU7CiAgICAgICAgIGluZm8uYnl0ZWNvZGVJbmRleCA9IG1fY2FsbFN0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm9baV0uYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJu
TG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGwobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRp
b24pKTsKKyAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGwobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxs
UmV0dXJuTG9jYXRpb24pOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2YobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRo
QmVnaW4pOwogICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhP
dGhlcik7CiAgICAgfQpAQCAtODAyLDEyICs4MDIsMTIgQEAgdm9pZCBKSVQ6OmxpbmtGb3IoSlNG
dW5jdGlvbiogY2FsbGVlLCBDbwogCiAgICAgLy8gUGF0Y2ggdGhlIHNsb3cgcGF0Y2ggc28gd2Ug
ZG8gbm90IGNvbnRpbnVlIHRvIHRyeSB0byBsaW5rLgogICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxs
KGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMt
PmN0aVZpcnR1YWxDYWxsKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlu
a0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1
YWxDYWxsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJUKGtpbmQgPT0g
Q29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9u
TmVhckNhbGwoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24pLCBnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdCgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+aml0U3R1YnMt
PmN0aVZpcnR1YWxDb25zdHJ1Y3QoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTIy
MDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzYsNiArMTc2LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgICAgIHJldHVybiBpbnRyaW5zaWMoKTsKICAgICAgICAgICAgIHJldHVybiBOb0ludHJpbnNp
YzsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkpJVENvZGVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDYWxsKTsKKyAgICAg
ICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk51bVBhcmFtZXRlcnNGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX251bVBhcmFtZXRlcnNGb3JD
YWxsKTsKKyAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAg
ICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9udW1QYXJh
bWV0ZXJzRm9yQ29uc3RydWN0KTsKKyAgICAgICAgfQogI2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZp
c2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7Ci0KKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151596</attachid>
            <date>2012-07-10 22:04:44 -0700</date>
            <delta_ts>2012-07-10 22:29:08 -0700</delta_ts>
            <desc>starting to run bigger programs</desc>
            <filename>virtualcall_patch_3.diff</filename>
            <type>text/plain</type>
            <size>40638</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMjk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDEyLTA3LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGZhc3QgdmlydHVhbCBjYWxscworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5MjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MhCisKKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OnVubGluayk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6CisgICAg
ICAgIChDYWxsTGlua0luZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAg
ICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNvZGVP
cmlnaW46OmlzU2V0KToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpBc3NlbWJseUhlbHBlcnMpOgorICAgICAg
ICAqIGRmZy9ERkdDQ2FsbEhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDQ2FsbEhlbHBl
cnM6OkNDYWxsSGVscGVycyk6CisgICAgICAgICogZGZnL0RGR0dQUkluZm8uaDoKKyAgICAgICAg
KEdQUkluZm8pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgor
ICAgICAgICAoSlNDOjpERkc6OkNhbGxCZWdpblRva2VuOjpDYWxsQmVnaW5Ub2tlbik6CisgICAg
ICAgIChKU0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46On5DYWxsQmVnaW5Ub2tlbik6CisgICAgICAg
IChDYWxsQmVnaW5Ub2tlbik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46OnNl
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46OnJlZ2lzdGVyV2l0aEV4Y2Vw
dGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsQmVnaW5Ub2tlbjo6Y29kZU9yaWdp
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEV4Y2VwdGlvblJlY29yZDo6Q2FsbEV4Y2VwdGlv
blJlY29yZCk6CisgICAgICAgIChDYWxsRXhjZXB0aW9uUmVjb3JkKToKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6Y3VycmVudENvZGVPcmlnaW5JbmRleCk6CisgICAgICAgIChKSVRD
b21waWxlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmJlZ2luQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpwcmVwYXJlRm9yRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmFkZEZhc3RFeGNlcHRpb25DaGVjayk6CisgICAgICAgICogZGZn
L0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpkZmdMaW5rRm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICog
ZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmxpbmtGb3JUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkRGRzo6bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
REZHOjp2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OnZpcnR1
YWxDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OnZpcnR1YWxDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAo
REZHKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Zvcik6CisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChFeGVjdXRhYmxlQmFzZSk6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVGb3IpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQmFzZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTRnVuY3Rpb24pOgorCiAyMDEyLTA3LTEwICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTIyMTY2
KTogSXQgbWFkZSAxNzAgdGVzdHMgY3Jhc2ggb24gMzIgYml0IHBsYXRmb3JtcwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlz
aW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ2FsbExp
bmtJbmZvLmgiCiAKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiREZHVGh1
bmtzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAg
LTM4LDEyICszOSwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKEpTR2xvYmFsRGF0YSYg
CiAgICAgCiAgICAgaWYgKGlzREZHKSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbFJldHVybkxvY2F0aW9uKSwg
Y2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gREZHOjpvcGVyYXRpb25MaW5rQ29uc3RydWN0IDogREZH
OjpvcGVyYXRpb25MaW5rQ2FsbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgKGNhbGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2JhbERhdGEuZ2V0Q1RJ
U3R1YihERkc6OmxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikgOiBnbG9iYWxEYXRhLmdldENU
SVN0dWIoREZHOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKICNlbHNlCiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAgICAgfSBlbHNlCi0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxSZXR1cm5Mb2NhdGlv
biksIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1
YWxDb25zdHJ1Y3RMaW5rKCkgOiBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExp
bmsoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwg
Y2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gZ2xvYmFsRGF0YS5qaXRTdHVicy0+Y3RpVmlydHVhbENv
bnN0cnVjdExpbmsoKSA6IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygp
KTsKICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwogICAgIGNhbGxlZS5jbGVhcigp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5m
by5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgc3RydWN0IENh
bGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAgICAgcmVtb3ZlKCk7CiAg
ICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uOyAvLyBpdCdz
IGEgbmVhciBjYWxsIGluIHRoZSBvbGQgSklULCBvciBhIG5vcm1hbCBjYWxsIGluIERGRworICAg
IENvZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhv
dFBhdGhPdGhlcjsKICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lv
biAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKICAgICAKICAgICBDb2RlT3JpZ2lu
KCkKLSAgICAgICAgOiBieXRlY29kZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSkKKyAgICAgICAgOiBieXRlY29kZUluZGV4KCgxIDw8IDI5KSAtIDEpCiAgICAgICAg
ICwgdmFsdWVQcm9maWxlT2Zmc2V0KDApCiAgICAgICAgICwgaW5saW5lQ2FsbEZyYW1lKDApCiAg
ICAgewpAQCAtNjMsNyArNjMsNyBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgICAgIEFTU0VS
VCh2YWx1ZVByb2ZpbGVPZmZzZXQgPCAoMXUgPDwgMykpOwogICAgIH0KICAgICAKLSAgICBib29s
IGlzU2V0KCkgY29uc3QgeyByZXR1cm4gYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCk7IH0KKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4g
Ynl0ZWNvZGVJbmRleCAhPSAoMSA8PCAyOSkgLSAxOyB9CiAgICAgCiAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxMjIw
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTMgQEAgcHVibGljOgogICAgIEFzc2VtYmx5SGVs
cGVycyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQogICAg
ICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKLSAgICAgICAgLCBtX2Jhc2VsaW5lQ29kZUJsb2NrKGNvZGVCbG9jay0+YmFzZWxp
bmVWZXJzaW9uKCkpCisgICAgICAgICwgbV9iYXNlbGluZUNvZGVCbG9jayhjb2RlQmxvY2sgPyBj
b2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpIDogMCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2NvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgQVNTRVJUKCFtX2Jhc2VsaW5lQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAg
QVNTRVJUKG1fYmFzZWxpbmVDb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CisgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICAgICAgQVNTRVJU
KG1fYmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICAgICAgQVNTRVJUKCFtX2Jhc2VsaW5lQ29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29k
ZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICB9
CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2Rl
QmxvY2s7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBl
cnMuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
Q2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIENDYWxsSGVscGVycyA6IHB1YmxpYyBBc3Nl
bWJseUhlbHBlcnMgewogcHVibGljOgotICAgIENDYWxsSGVscGVycyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIENDYWxsSGVscGVycyhKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrID0gMCkKICAgICAgICAgOiBB
c3NlbWJseUhlbHBlcnMoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQogICAgIHsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gMTIyMDUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3Myw2ICsyNzMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1
bWVudEdQUjEgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIG5vbkFyZ0dQUjAgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjEgPSBYODZSZWdpc3RlcnM6OmVieDsgLy8gcmVnVDMK
KyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjIgPSBYODZSZWdpc3RlcnM6OmVzaTsg
Ly8gcmVnVDQKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVn
aXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1
ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6ZWN4OwpAQCAtMzQ0
LDYgKzM0NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50R1BS
NSA9IFg4NlJlZ2lzdGVyczo6cjk7ICAvLyByZWdUNwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcg
bm9uQXJnR1BSMCA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgbm9uQXJnR1BSMSA9IFg4NlJlZ2lzdGVyczo6ZWJ4OyAvLyByZWdUMworICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJnR1BSMiA9IFg4NlJlZ2lzdGVyczo6cjEwOyAvLyByZWdU
OAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6
OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9
IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2UmVnaXN0ZXJzOjplc2k7CkBAIC00MTYsNiArNDE4
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1lbnRHUFIzID0gQVJN
UmVnaXN0ZXJzOjpyMzsgLy8gRklYTUUhCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25BcmdH
UFIwID0gQVJNUmVnaXN0ZXJzOjpyNDsgLy8gcmVnVDMKICAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IG5vbkFyZ0dQUjEgPSBBUk1SZWdpc3RlcnM6OnI4OyAvLyByZWdUNAorICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgbm9uQXJnR1BSMiA9IEFSTVJlZ2lzdGVyczo6cjk7IC8vIHJlZ1Q1CiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IEFSTVJlZ2lzdGVyczo6cjA7IC8vIHJl
Z1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBBUk1SZWdpc3Rl
cnM6OnIxOyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSID0gQVJNUmVnaXN0ZXJzOjpyMjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUzLDcgKzE1Myw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICAgICAgdW5zaWduZWQgcmV0dXJuQWRkcmVzc09mZnNldCA9IGxpbmtCdWZmZXIucmV0dXJu
QWRkcmVzc09mZnNldChtX2V4Y2VwdGlvbkNoZWNrc1tpXS5tX2NhbGwpOwogICAgICAgICBjb2Rl
T3JpZ2luc1tpXS5jb2RlT3JpZ2luID0gcmVjb3JkLm1fY29kZU9yaWdpbjsKICAgICAgICAgY29k
ZU9yaWdpbnNbaV0uY2FsbFJldHVybk9mZnNldCA9IHJldHVybkFkZHJlc3NPZmZzZXQ7Ci0gICAg
ICAgIHJlY29yZC5tX3Rva2VuLmFzc2VydENvZGVPcmlnaW5JbmRleChpKTsKICAgICB9CiAgICAg
CiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJvcGVy
dHlBY2Nlc3Nlcy5zaXplKCkpOwpAQCAtMTg5LDcgKzE4OCw4IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9j
b2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanND
YWxsc1tpXS5tX2NhbGxUeXBlOwogICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKLSAgICAgICAg
aW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKKyAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cigobV9nbG9iYWxEYXRhLT5n
ZXRDVElTdHViKGluZm8uY2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBsaW5r
Q29uc3RydWN0VGh1bmtHZW5lcmF0b3IgOiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCk7
CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fanND
YWxsc1tpXS5tX3RhcmdldFRvQ2hlY2spOwogICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanNDYWxsc1tpXS5tX2Zhc3RDYWxsKTsKICAg
ICB9CkBAIC0yODAsNyArMjgwLDggQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9u
KEpJVENvZAogICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CiAgICAgcG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNF
VE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7CiAK
LSAgICBDYWxsQmVnaW5Ub2tlbiB0b2tlbiA9IGJlZ2luQ2FsbCgpOworICAgIENhbGxCZWdpblRv
a2VuIHRva2VuOworICAgIGJlZ2luQ2FsbChDb2RlT3JpZ2luKDApLCB0b2tlbik7CiAgICAgQ2Fs
bCBjYWxsUmVnaXN0ZXJGaWxlQ2hlY2sgPSBjYWxsKCk7CiAgICAgbm90aWZ5Q2FsbChjYWxsUmVn
aXN0ZXJGaWxlQ2hlY2ssIENvZGVPcmlnaW4oMCksIHRva2VuKTsKICAgICBqdW1wKGZyb21SZWdp
c3RlckZpbGVDaGVjayk7CkBAIC0yOTcsNyArMjk4LDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29t
cGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6
cmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1Rv
KGZyb21Bcml0eUNoZWNrLCB0aGlzKTsKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNp
emVvZih2b2lkKikpOwotICAgIHRva2VuID0gYmVnaW5DYWxsKCk7CisgICAgYmVnaW5DYWxsKENv
ZGVPcmlnaW4oMCksIHRva2VuKTsKICAgICBDYWxsIGNhbGxBcml0eUNoZWNrID0gY2FsbCgpOwog
ICAgIG5vdGlmeUNhbGwoY2FsbEFyaXR5Q2hlY2ssIENvZGVPcmlnaW4oMCksIHRva2VuKTsKICAg
ICBtb3ZlKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAx
MjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDI4ICs3Niw1NSBAQCBjbGFzcyBDYWxsQmVnaW5Ub2tlbiB7CiBw
dWJsaWM6CiAgICAgQ2FsbEJlZ2luVG9rZW4oKQogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAg
ICAgOiBtX2NvZGVPcmlnaW5JbmRleChVSU5UX01BWCkKKyAgICAgICAgOiBtX3JlZ2lzdGVyZWQo
ZmFsc2UpCisgICAgICAgICwgbV9leGNlcHRpb25DaGVja0luZGV4KHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKICNlbmRpZgogICAgIHsKICAgICB9CiAgICAgCi0gICAgZXhw
bGljaXQgQ2FsbEJlZ2luVG9rZW4odW5zaWduZWQgY29kZU9yaWdpbkluZGV4KQorICAgIH5DYWxs
QmVnaW5Ub2tlbigpCisgICAgeworICAgICAgICBBU1NFUlQobV9yZWdpc3RlcmVkIHx8ICFtX2Nv
ZGVPcmlnaW4uaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChtX2NvZGVPcmlnaW4uaXNTZXQoKSA9
PSAobV9leGNlcHRpb25DaGVja0luZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIHVuc2lnbmVkIGluZGV4KQorICAgIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAg
IDogbV9jb2RlT3JpZ2luSW5kZXgoY29kZU9yaWdpbkluZGV4KQorICAgICAgICBBU1NFUlQobV9y
ZWdpc3RlcmVkIHx8ICFtX2NvZGVPcmlnaW4uaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChtX2Nv
ZGVPcmlnaW4uaXNTZXQoKSA9PSAobV9leGNlcHRpb25DaGVja0luZGV4ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpOworICAgICAgICBtX2NvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luOworICAgICAgICBtX3JlZ2lzdGVyZWQgPSBmYWxzZTsKKyAgICAgICAgbV9leGNlcHRp
b25DaGVja0luZGV4ID0gaW5kZXg7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oY29kZU9y
aWdpbik7CisgICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CiAjZW5kaWYKLSAgICB7Ci0gICAg
ICAgIFVOVVNFRF9QQVJBTShjb2RlT3JpZ2luSW5kZXgpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGFzc2VydENvZGVPcmlnaW5JbmRleCh1bnNpZ25lZCBjb2RlT3JpZ2luSW5kZXgpIGNvbnN0Cisg
ICAgdm9pZCByZWdpc3RlcldpdGhFeGNlcHRpb25DaGVjayhDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjb2RlT3JpZ2lu
SW5kZXgsIGNvZGVPcmlnaW5JbmRleCA8IFVJTlRfTUFYKTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChjb2RlT3JpZ2luSW5kZXgsIGNvZGVPcmlnaW5JbmRleCA9PSBtX2NvZGVPcmlnaW5JbmRleCk7
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBBU1NFUlQobV9jb2RlT3JpZ2luID09IGNv
ZGVPcmlnaW4pOworICAgICAgICBpZiAobV9yZWdpc3RlcmVkKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBBU1NFUlQobV9leGNlcHRpb25DaGVja0luZGV4ID09IGluZGV4KTsKKyAgICAg
ICAgbV9yZWdpc3RlcmVkID0gdHJ1ZTsKKyNlbmRpZgogICAgIH0KIAorI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2NvZGVPcmlnaW47CisgICAgfQorI2VuZGlmCisgICAgCiBwcml2YXRl
OgogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCBtX2NvZGVPcmlnaW5JbmRleDsK
KyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICBib29sIG1fcmVnaXN0ZXJlZDsKKyAg
ICB1bnNpZ25lZCBtX2V4Y2VwdGlvbkNoZWNrSW5kZXg7CiAjZW5kaWYKIH07CiAKQEAgLTEwNywy
NSArMTM0LDIyIEBAIHByaXZhdGU6CiAvLyBDYWxscyB0aGF0IG1pZ2h0IHRocm93IGFuIGV4Y2Vw
dGlvbiBhbHNvIHJlY29yZCB0aGUgSnVtcCB0YWtlbiBvbiBleGNlcHRpb24KIC8vICh1bnNldCBp
ZiBub3QgcHJlc2VudCkgYW5kIGNvZGUgb3JpZ2luIHVzZWQgdG8gcmVjb3ZlciBoYW5kbGVyL3Nv
dXJjZSBpbmZvLgogc3RydWN0IENhbGxFeGNlcHRpb25SZWNvcmQgewotICAgIENhbGxFeGNlcHRp
b25SZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsQmVnaW5Ub2tlbiB0b2tlbikKKyAgICBDYWxsRXhjZXB0aW9uUmVjb3JkKE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgOiBtX2Nh
bGwoY2FsbCkKICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKLSAgICAgICAgLCBt
X3Rva2VuKHRva2VuKQogICAgIHsKICAgICB9CiAKLSAgICBDYWxsRXhjZXB0aW9uUmVjb3JkKE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkNo
ZWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuIHRva2VuKQorICAgIENh
bGxFeGNlcHRpb25SZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAg
OiBtX2NhbGwoY2FsbCkKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNoZWNrKGV4Y2VwdGlvbkNoZWNr
KQogICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQotICAgICAgICAsIG1fdG9rZW4o
dG9rZW4pCiAgICAgewogICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2V4Y2VwdGlvbkNoZWNrOwogICAgIENvZGVPcmln
aW4gbV9jb2RlT3JpZ2luOwotICAgIENhbGxCZWdpblRva2VuIG1fdG9rZW47CiB9OwogCiBzdHJ1
Y3QgUHJvcGVydHlBY2Nlc3NSZWNvcmQgewpAQCAtMjU3LDE5ICsyODEsMjcgQEAgcHVibGljOgog
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBv
aW50cygpKTsKICAgICB9CiAgICAgCi0gICAgLy8gR2V0IGEgdG9rZW4gZm9yIGJlZ2lubmluZyBh
IGNhbGwsIGFuZCBzZXQgdGhlIGN1cnJlbnQgY29kZSBvcmlnaW4gaW5kZXggaW4KLSAgICAvLyB0
aGUgY2FsbCBmcmFtZS4KLSAgICBDYWxsQmVnaW5Ub2tlbiBiZWdpbkNhbGwoKQorICAgIHVuc2ln
bmVkIGN1cnJlbnRDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogICAgIHsKLSAgICAgICAgdW5zaWdu
ZWQgY29kZU9yaWdpbkluZGV4ID0gbV9jdXJyZW50Q29kZU9yaWdpbkluZGV4Kys7Ci0gICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNvZGVPcmlnaW5JbmRleCksIHRhZ0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAg
ICAgcmV0dXJuIENhbGxCZWdpblRva2VuKGNvZGVPcmlnaW5JbmRleCk7CisgICAgICAgIHJldHVy
biBtX2N1cnJlbnRDb2RlT3JpZ2luSW5kZXg7CisgICAgfQorICAgIAorICAgIC8vIEdldCBhIHRv
a2VuIGZvciBiZWdpbm5pbmcgYSBjYWxsLCBhbmQgc2V0IHRoZSBjdXJyZW50IGNvZGUgb3JpZ2lu
IGluZGV4IGluCisgICAgLy8gdGhlIGNhbGwgZnJhbWUuIEZvciBlYWNoIGJlZ2luQ2FsbCgpIHRo
ZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGV4Y2VwdGlvbgorICAgIC8vIGNoZWNrLCBhbmQgYWxs
IG9mIHRoZSBleGNlcHRpb24gY2hlY2tzIG11c3QgaGF2ZSB0aGUgc2FtZSBDb2RlT3JpZ2luIGFz
IHRoZQorICAgIC8vIGJlZ2luQ2FsbCgpLgorICAgIHZvaWQgYmVnaW5DYWxsKENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4mIHRva2VuKQorICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgaW5kZXggPSBtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCk7CisgICAgICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGluZGV4KSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oUmVn
aXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICB0b2tlbi5zZXQoY29kZU9yaWdp
biwgaW5kZXgpOwogICAgIH0KIAogICAgIC8vIE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0
IGRvZXMgbm90IHJlcXVpcmUgbGlua2luZy4KLSAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBmdW5j
dGlvbkNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4gdG9rZW4pCisg
ICAgdm9pZCBub3RpZnlDYWxsKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxCZWdpblRva2VuJiB0b2tlbikKICAgICB7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgY29kZU9yaWdpbiwg
dG9rZW4pKTsKKyAgICAgICAgdG9rZW4ucmVnaXN0ZXJXaXRoRXhjZXB0aW9uQ2hlY2soY29kZU9y
aWdpbiwgbV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKTsKKyAgICAgICAgbV9leGNlcHRpb25DaGVj
a3MuYXBwZW5kKENhbGxFeGNlcHRpb25SZWNvcmQoZnVuY3Rpb25DYWxsLCBjb2RlT3JpZ2luKSk7
CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBh
biBleGNlcHRpb24gY2hlY2suCkBAIC0yNzksMjAgKzMxMSwyNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24pKTsK
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICB9CisgICAgCisgICAgdm9pZCBwcmVw
YXJlRm9yRXhjZXB0aW9uQ2hlY2soKQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
bV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKKyAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRo
IGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAgICB2b2lkIGFkZEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVu
Y3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuIHRva2VuKQor
ICAgIHZvaWQgYWRkRXhjZXB0aW9uQ2hlY2soQ2FsbCBmdW5jdGlvbkNhbGwsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4mIHRva2VuKQogICAgIHsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIobV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKSwgR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSKTsKLSAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKENhbGxF
eGNlcHRpb25SZWNvcmQoZnVuY3Rpb25DYWxsLCBlbWl0RXhjZXB0aW9uQ2hlY2soKSwgY29kZU9y
aWdpbiwgdG9rZW4pKTsKKyAgICAgICAgcHJlcGFyZUZvckV4Y2VwdGlvbkNoZWNrKCk7CisgICAg
ICAgIHRva2VuLnJlZ2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNrKGNvZGVPcmlnaW4sIG1fZXhjZXB0
aW9uQ2hlY2tzLnNpemUoKSk7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxs
RXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZW1pdEV4Y2VwdGlvbkNoZWNrKCksIGNvZGVP
cmlnaW4pKTsKICAgICB9CiAgICAgCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29k
ZSwgd2l0aCBhIGZhc3QgZXhjZXB0aW9uIGNoZWNrIHRoYXQgdGVzdHMgaWYgdGhlIHJldHVybiB2
YWx1ZSBpcyB6ZXJvLgotICAgIHZvaWQgYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVuY3Rp
b25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuIHRva2VuKQorICAg
IHZvaWQgYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuJiB0b2tlbikKICAgICB7Ci0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSksIEdQUkluZm86Om5vblByZXNl
cnZlZE5vblJldHVybkdQUik7CisgICAgICAgIHByZXBhcmVGb3JFeGNlcHRpb25DaGVjaygpOwog
ICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxs
RXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZXhjZXB0aW9uQ2hlY2ssIGNvZGVPcmlnaW4s
IHRva2VuKSk7CisgICAgICAgIHRva2VuLnJlZ2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNrKGNvZGVP
cmlnaW4sIG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSk7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZXhjZXB0aW9uQ2hl
Y2ssIGNvZGVPcmlnaW4pKTsKICAgICB9CiAgICAgCiAgICAgLy8gSGVscGVyIG1ldGhvZHMgdG8g
Z2V0IHByZWRpY3Rpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAi
REZHUmVwYXRjaC5oIgorI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkhvc3RDYWxs
UmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgpAQCAtODQ5LDcgKzg1MCw2IEBAIHN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2Fs
bChFeGVjU3RhdGUqIGUKIAogICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlQ2hhaW4oZXhlYy0+c2Nv
cGVDaGFpbigpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7Ci0gICAgZXhlY0Nh
bGxlZS0+Y2xlYXJSZXR1cm5QQygpOwogCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsK
ICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC04NjIsMTQgKzg2MiwxNCBAQCBzdGF0aWMg
dm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICBleGVjQ2FsbGVl
LT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICBnbG9iYWxEYXRhLT5o
b3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5j
dGlvbihleGVjQ2FsbGVlKSk7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9u
KQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKICAgICAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKICAgICAgICAgfQog
ICAgIAogICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKICAgICAgICAg
ZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4
ZWMsIGNhbGxlZSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0
YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpOwpAQCAtODg0LDE3ICs4ODQsMTcgQEAgc3RhdGljIHZvaWQqIGhhbmRs
ZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZQogICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNP
YmplY3QoY2FsbGVlKSk7CiAgICAgICAgIGdsb2JhbERhdGEtPmhvc3RDYWxsUmV0dXJuVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxl
ZSkpOwogICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOwogCiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0g
Q29uc3RydWN0VHlwZU5vbmUpOwogICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBj
cmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpOwotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKLWlubGlu
ZSB2b2lkKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitpbmxpbmUgdm9pZCog
bGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwog
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC05
MTgsNyArOTE4LDcgQEAgaW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAog
ICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3Io
ZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7
CiAgICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93
RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBn
bG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgIH0KICAgICAgICAgY29k
ZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3Ioa2luZCk7
CiAgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwg
c3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCkBAIC05MjYs
NyArOTI2LDcgQEAgaW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5l
cmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgfQotICAgIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5m
byhyZXR1cm5BZGRyZXNzKTsKKyAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CiAg
ICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKICAgICAgICAgY2FsbExpbmtJbmZvLnNl
dFNlZW4oKTsKICAgICBlbHNlCkBAIC05MzQsMTYgKzkzNCwxNCBAQCBpbmxpbmUgdm9pZCogbGlu
a0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsCiAgICAgcmV0dXJuIGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKIH0KIAotUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShv
cGVyYXRpb25MaW5rQ2FsbCk7Ci12b2lkKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxs
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCit2b2lkKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4
ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBy
ZXR1cm5BZGRyZXNzLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxl
ZSwgQ29kZUZvckNhbGwpOwogfQogCi1QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FKG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwotdm9pZCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ29uc3RydWN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewotICAgIHJldHVy
biBsaW5rRm9yKGV4ZWNDYWxsZWUsIHJldHVybkFkZHJlc3MsIENvZGVGb3JDb25zdHJ1Y3QpOwor
ICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCiBp
bmxpbmUgdm9pZCogdmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKQEAgLTk2NSw3ICs5NjMsNyBAQCBpbmxpbmUgdm9pZCogdmlydHVh
bEZvcihFeGVjU3RhdGUqIGV4ZWNDCiAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+Y29tcGlsZUZvcihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+c2NvcGUoKSwga2lu
ZCk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgp
LmV4Y2VwdGlvbiA9IGVycm9yOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBy
ZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tG
b3Ioa2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiREZHQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRp
dmVKSVQuaCIKKyNpbmNsdWRlICJERkdUaHVua3MuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExp
c3QuaCIKQEAgLTkwOSw2ICs5MTAsNyBAQCB2b2lkIGRmZ0J1aWxkUHV0QnlJZExpc3QoRXhlY1N0
YXRlKiBleGVjCiB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNh
bGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKIHsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxl
ckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IGNh
bGxlckNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAgIApAQCAtOTIxLDExICs5MjMsMTEgQEAg
dm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbgogICAgICAgICBjYWxsZWVD
b2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoJmNhbGxMaW5rSW5mbyk7CiAgICAgCiAgICAgaWYg
KGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29k
ZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0aW9u
VmlydHVhbENhbGwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29k
ZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0aW9u
VmlydHVhbENvbnN0cnVjdCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9u
Q2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKSwgRnVuY3Rpb25QdHIoZ2xvYmFs
RGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CiB9CiAKIHZvaWQgZGZnUmVzZXRHZXRCeUlEKFJlcGF0Y2hC
dWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTk4LDE0ICs5OTgsMTYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgIEpJVENvbXBpbGVyOjpE
YXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aDsKIAorICAgIENhbGxCZWdpblRva2VuIHRva2VuOworICAgIG1faml0LmJlZ2luQ2FsbChub2Rl
LmNvZGVPcmlnaW4sIHRva2VuKTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMy
KG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rl
cikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCiAgICAgc2xvd1BhdGggPSBt
X2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVH
UFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpKSk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hh
aW4pKSwgcmVzdWx0R1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRHUFIsIGNhbGxGcmFt
ZVNsb3QoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7CisgICAgbV9qaXQuc3RvcmVQdHIocmVz
dWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbikpOwogCi0gICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihtX2ppdC5j
b2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIAogICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
biA9IGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luOwotICAgIENhbGxCZWdpblRva2VuIHRv
a2VuID0gbV9qaXQuYmVnaW5DYWxsKCk7CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwg
PSBtX2ppdC5uZWFyQ2FsbCgpOwogICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGwsIGNvZGVP
cmlnaW4sIHRva2VuKTsKICAgICAKQEAgLTEwMTMsMTQgKzEwMTUsMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1f
aml0KTsKICAgICAKLSAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICB0b2tlbiA9IG1f
aml0LmJlZ2luQ2FsbCgpOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQu
YXBwZW5kQ2FsbChzbG93Q2FsbEZ1bmN0aW9uKTsKLSAgICBtX2ppdC5hZGRGYXN0RXhjZXB0aW9u
Q2hlY2soc2xvd0NhbGwsIGNvZGVPcmlnaW4sIHRva2VuKTsKLSAgICBtX2ppdC5hZGRQdHIoVHJ1
c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgdG9rZW4gPSBt
X2ppdC5iZWdpbkNhbGwoKTsKLSAgICBKSVRDb21waWxlcjo6Q2FsbCB0aGVDYWxsID0gbV9qaXQu
Y2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbCh0aGVD
YWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CisgICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUklu
Zm86Om5vbkFyZ0dQUjApOworICAgIG1faml0LnByZXBhcmVGb3JFeGNlcHRpb25DaGVjaygpOwor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKKyAgICBt
X2ppdC5ub3RpZnlDYWxsKHNsb3dDYWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CiAgICAgCiAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
MzgsNyArMTczOCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHByZXBhcmVGb3JFeHRlcm5h
bENhbGwoKTsKICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYXQobV9jb21waWxlSW5k
ZXgpLmNvZGVPcmlnaW47Ci0gICAgICAgIENhbGxCZWdpblRva2VuIHRva2VuID0gbV9qaXQuYmVn
aW5DYWxsKCk7CisgICAgICAgIENhbGxCZWdpblRva2VuIHRva2VuOworICAgICAgICBtX2ppdC5i
ZWdpbkNhbGwoY29kZU9yaWdpbiwgdG9rZW4pOwogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsID0gbV9qaXQuYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIG1faml0LmFkZEV4Y2Vw
dGlvbkNoZWNrKGNhbGwsIGNvZGVPcmlnaW4sIHRva2VuKTsKICAgICAgICAgcmV0dXJuIGNhbGw7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAx
MjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5j
bHVkZSAiREZHQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHRlBSSW5mby5oIgogI2luY2x1
ZGUgIkRGR0dQUkluZm8uaCIKICNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXIuaCIKQEAgLTgy
LDYgKzgzLDIwOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIE9TUiBleGl0IGdlbmVy
YXRpb24gdGh1bmsiKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorewor
ICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSk7CisgICAgCisgICAgLy8gV2Ugd2lsbCBq
dW1wIHRvIGhlcmUgaWYgdGhlIEpJVCBjb2RlIHRoaW5rcyBpdCdzIG1ha2luZyBhIGNhbGwsIGJ1
dCB0aGUKKyAgICAvLyBsaW5raW5nIGhlbHBlciAoQysrIGNvZGUpIGRlY2lkZWQgdG8gdGhyb3cg
YW4gZXhjZXB0aW9uIGluc3RlYWQuIFdlIHdpbGwKKyAgICAvLyBoYXZlIHNhdmVkIHRoZSBjYWxs
UmV0dXJuSW5kZXggaW4gdGhlIGZpcnN0IGFyZ3VtZW50cyBvZiBKSVRTdGFja0ZyYW1lLgorICAg
IC8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQg
dGhpcyBwb2ludCwgc28gd2UKKyAgICAvLyBuZWVkIHRvIHJlbW92ZSBpdCBhbmQgZHJvcCBpdCBv
biB0aGUgZmxvb3IsIHNpbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQgaXQuCisgICAgaml0LnByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIpOworICAgIGppdC5wZWVrKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklU
U1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4obG9va3VwRXhjZXB0
aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlzTm9uWmVybyA9IGppdC5icmFuY2hUZXN0UHRyKEND
YWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0LmJyZWFr
cG9pbnQoKTsKKyAgICBpc05vblplcm8ubGluaygmaml0KTsKKyNlbmRpZgorICAgIGppdC5jYWxs
KEdQUkluZm86Om5vbkFyZ0dQUjApOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBpc05vblpl
cm8gPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMik7CisgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICBpc05vblplcm8ubGlu
aygmaml0KTsKKyNlbmRpZgorICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7
CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJE
RkcgdGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAorICAgIENDYWxsSGVscGVycyYgaml0LCBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIFBfREZHT3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikKK3sKKyAg
ICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjIp
OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNOb25aZXJv
ID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpub25B
cmdHUFIyKTsKKyAgICBqaXQuYnJlYWtwb2ludCgpOworICAgIGlzTm9uWmVyby5saW5rKCZqaXQp
OworI2VuZGlmCisgICAgaml0LnN0b3JlUHRyKAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIy
LAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlJldHVyblBDKSk7CisgICAgaml0LnN0b3Jl
UHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1l
KTsKKyAgICBqaXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNU
QUNLRlJBTUVfQVJHU19JTkRFWCk7CisgICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7
CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2
b2lkKj4oc2xvd1BhdGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgaXNOb25aZXJvID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxw
ZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuYnJlYWtwb2ludCgp
OworICAgIGlzTm9uWmVyby5saW5rKCZqaXQpOworI2VuZGlmCisgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgCisgICAgLy8gVGhpcyBzbG93IGNhbGwgd2lsbCByZXR1cm4g
dGhlIGFkZHJlc3Mgb2Ygb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gMSkgRXhjZXB0aW9u
IHRocm93aW5nIHRodW5rLgorICAgIC8vIDIpIEhvc3QgY2FsbCByZXR1cm4gdmFsdWUgcmV0dXJu
ZXIgdGhpbmd5LgorICAgIC8vIDMpIFRoZSBmdW5jdGlvbiB0byBjYWxsLgorICAgIGppdC5sb2Fk
UHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlJldHVyblBDKSwKKyAgICAgICAgR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQuc3RvcmVQdHIoCisgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogUmVnaXN0
ZXJGaWxlOjpSZXR1cm5QQykpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBpc05vblplcm8g
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICBpc05vblpl
cm8ubGluaygmaml0KTsKKyNlbmRpZgorICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICBpc05vblplcm8gPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6
Ok5vblplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBqaXQuYnJlYWtwb2ludCgp
OworICAgIGlzTm9uWmVyby5saW5rKCZqaXQpOworI2VuZGlmCisgICAgaml0Lmp1bXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtGb3JUaHVua0dlbmVyYXRvcigKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMg
b24gdGhlIHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCisgICAg
Ly8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UgbWFr
ZSBhIEMrKyBmdW5jdGlvbiBjYWxsCisgICAgLy8gdG8gcGVyZm9ybSBsaW5raW5nIGFuZCBsYXp5
IGNvbXBpbGF0aW9uIGlmIG5lY2Vzc2FyeS4gV2UgZXhwZWN0IHRoZSBjYWxsZWUKKyAgICAvLyB0
byBiZSBpbiBub25BcmdHUFIwL25vbkFyZ0dQUjEgKHBheWxvYWQvdGFnKSwgdGhlIGNhbGwgZnJh
bWUgdG8gaGF2ZSBhbHJlYWR5CisgICAgLy8gYmVlbiBhZGp1c3RlZCwgbm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSIGhvbGRzIHRoZSBleGNlcHRpb24gaGFuZGxlciBpbmRleCwKKyAgICAvLyBhbmQg
YWxsIG90aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFpbGFibGUgZm9yIHVzZS4gV2UgdXNlIEpJVFN0
YWNrRnJhbWU6OmFyZ3MKKyAgICAvLyB0byBzYXZlIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhY3Jv
c3MgY2FsbHMuCisgICAgCisgICAgQ0NhbGxIZWxwZXJzIGppdChnbG9iYWxEYXRhKTsKKyAgICAK
KyAgICBzbG93UGF0aEZvcihqaXQsIGdsb2JhbERhdGEsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBv
cGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOworICAgIAorICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAg
ICAoIkRGRyBsaW5rICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAi
Y2FsbCIgOiAiY29uc3RydWN0IikpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nh
bGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJu
IGxpbmtGb3JUaHVua0dlbmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ2FsbCk7Cit9CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3IoZ2xv
YmFsRGF0YSwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKAorICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIC8vIFRoZSByZXR1cm4g
YWRkcmVzcyBpcyBvbiB0aGUgc3RhY2ssIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxs
IGhlbmNlCisgICAgLy8ganVtcCB0byB0aGUgY2FsbGVlLCBvciBzYXZlIHRoZSByZXR1cm4gYWRk
cmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZQorICAgIC8vIG1ha2UgYSBDKysgZnVuY3Rp
b24gY2FsbCB0byB0aGUgYXBwcm9wcmlhdGUgREZHIG9wZXJhdGlvbi4KKworICAgIENDYWxsSGVs
cGVycyBqaXQoZ2xvYmFsRGF0YSk7CisgICAgCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93Q2FzZTsKKworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGZvciBlbGlt
aW5hdGluZyB0aGVzZSBjaGVja3MuIEluIG1hbnkgY2FzZXMsCisgICAgLy8gdGhlIERGRyBrbm93
cyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3IgZGVmaW5pdGVseSBhIGZ1
bmN0aW9uLgorICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2xvd0Nhc2UuYXBwZW5kKAor
ICAgICAgICBqaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9u
WmVybywgR1BSSW5mbzo6bm9uQXJnR1BSMCwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Cisj
ZWxzZQorICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86Om5vbkFyZ0dQUjEsCisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkp
OworI2VuZGlmCisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJhbmNoUHRyKAor
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNl
dCgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmSlNGdW5jdGlv
bjo6c19pbmZvKSkpOworICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHdlIGhhdmUgYSBKU0Z1bmN0
aW9uLgorICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkp
LAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisg
ICAgICAgIGppdC5icmFuY2gzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGVzc1RoYW4s
CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgR1BS
SW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mTnVtUGFyYW1ldGVyc0Zv
cihraW5kKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwor
ICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIENvZGVCbG9jaywgYW5kIHdl
J3JlIGNvbW1pdHRlZCB0byBtYWtpbmcgYSBmYXN0CisgICAgLy8gY2FsbC4KKyAgICAKKyAgICBq
aXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFy
Z0dQUjAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKKyAgICAgICAgR1BSSW5m
bzo6bm9uQXJnR1BSMSk7CisgICAgaml0LnN0b3JlUHRyKAorICAgICAgICBHUFJJbmZvOjpub25B
cmdHUFIxLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKTsKKyAgICAK
KyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVGb3Ioa2luZCkpLAor
ICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgLy8gTWFrZSBhIHRhaWwgY2FsbC4g
VGhpcyB3aWxsIHJldHVybiBiYWNrIHRvIERGRyBjb2RlLgorI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNOb25aZXJvID0gaml0LmJyYW5jaFRlc3RQdHIoQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmJyZWFrcG9pbnQo
KTsKKyAgICBpc05vblplcm8ubGluaygmaml0KTsKKyNlbmRpZgorICAgIGppdC5qdW1wKEdQUklu
Zm86OnJlZ1QwKTsKKworICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAgCisgICAgLy8gSGVy
ZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRo
LgorICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgZ2xvYmFsRGF0YSwga2luZCA9PSBDb2RlRm9y
Q2FsbCA/IG9wZXJhdGlvblZpcnR1YWxDYWxsIDogb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdCk7
CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKKyAgICAgICAgcGF0Y2hC
dWZmZXIsCisgICAgICAgICgiREZHIHZpcnR1YWwgJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9
PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7Cit9CisKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKGdsb2JhbERhdGEs
IENvZGVGb3JDYWxsKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJu
IHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ29uc3RydWN0KTsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHJldmlzaW9uIDEy
MjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDYgKzQwLDE0IEBAIG5hbWVzcGFjZSBERkcgewogCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsK
IAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKik7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTIyMDUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MzksNyArNzM5LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1
bgogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZv
KGkpOwogICAgICAgICBpbmZvLmNhbGxUeXBlID0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0
aW9uSW5mb1tpXS5jYWxsVHlwZTsKICAgICAgICAgaW5mby5ieXRlY29kZUluZGV4ID0gbV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ieXRlY29kZUluZGV4OwotICAgICAgICBp
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNh
bGxSZXR1cm5Mb2NhdGlvbikpOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2lu
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm9baV0uaG90UGF0aE90aGVyKTsKICAgICB9CkBAIC04MDIsMTIgKzgwMiwxMiBAQCB2b2lkIEpJ
VDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvCiAKICAgICAvLyBQYXRjaCB0aGUgc2xv
dyBwYXRjaCBzbyB3ZSBkbyBub3QgY29udGludWUgdG8gdHJ5IHRvIGxpbmsuCiAgICAgaWYgKGtp
bmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxv
Y2F0aW9uTmVhckNhbGwoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24pLCBnbG9iYWxE
YXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGwoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpVmlydHVhbENhbGwoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBB
U1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiks
IGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0KCkpOworICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxE
YXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdCgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw2ICsxNzYsMjIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpYygpOwogICAgICAgICAgICAgcmV0
dXJuIE5vSW50cmluc2ljOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mSklUQ29kZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZv
ckNhbGwpOworICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Cisg
ICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAg
ICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1fbnVt
UGFyYW1ldGVyc0ZvckNhbGwpOworICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCk7CisgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVC
YXNlLCBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QpOworICAgICAgICB9CiAjZW5kaWYKIAog
ICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQorICAgICAgICAKICAgICBwcml2YXRlOgog
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151599</attachid>
            <date>2012-07-10 22:29:08 -0700</date>
            <delta_ts>2012-07-11 00:34:34 -0700</delta_ts>
            <desc>might work</desc>
            <filename>virtualcall_patch_4.diff</filename>
            <type>text/plain</type>
            <size>40194</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMjk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDEyLTA3LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGZhc3QgdmlydHVhbCBjYWxscworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5MjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MhCisKKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OnVubGluayk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6CisgICAg
ICAgIChDYWxsTGlua0luZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAg
ICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNvZGVP
cmlnaW46OmlzU2V0KToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpBc3NlbWJseUhlbHBlcnMpOgorICAgICAg
ICAqIGRmZy9ERkdDQ2FsbEhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDQ2FsbEhlbHBl
cnM6OkNDYWxsSGVscGVycyk6CisgICAgICAgICogZGZnL0RGR0dQUkluZm8uaDoKKyAgICAgICAg
KEdQUkluZm8pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgor
ICAgICAgICAoSlNDOjpERkc6OkNhbGxCZWdpblRva2VuOjpDYWxsQmVnaW5Ub2tlbik6CisgICAg
ICAgIChKU0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46On5DYWxsQmVnaW5Ub2tlbik6CisgICAgICAg
IChDYWxsQmVnaW5Ub2tlbik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46OnNl
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46OnJlZ2lzdGVyV2l0aEV4Y2Vw
dGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsQmVnaW5Ub2tlbjo6Y29kZU9yaWdp
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEV4Y2VwdGlvblJlY29yZDo6Q2FsbEV4Y2VwdGlv
blJlY29yZCk6CisgICAgICAgIChDYWxsRXhjZXB0aW9uUmVjb3JkKToKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6Y3VycmVudENvZGVPcmlnaW5JbmRleCk6CisgICAgICAgIChKSVRD
b21waWxlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmJlZ2luQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpwcmVwYXJlRm9yRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmFkZEZhc3RFeGNlcHRpb25DaGVjayk6CisgICAgICAgICogZGZn
L0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpkZmdMaW5rRm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICog
ZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmxpbmtGb3JUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkRGRzo6bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
REZHOjp2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OnZpcnR1
YWxDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OnZpcnR1YWxDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAo
REZHKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Zvcik6CisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChFeGVjdXRhYmxlQmFzZSk6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVGb3IpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQmFzZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTRnVuY3Rpb24pOgorCiAyMDEyLTA3LTEwICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTIyMTY2
KTogSXQgbWFkZSAxNzAgdGVzdHMgY3Jhc2ggb24gMzIgYml0IHBsYXRmb3JtcwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlz
aW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ2FsbExp
bmtJbmZvLmgiCiAKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiREZHVGh1
bmtzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAg
LTM4LDEyICszOSwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKEpTR2xvYmFsRGF0YSYg
CiAgICAgCiAgICAgaWYgKGlzREZHKSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbFJldHVybkxvY2F0aW9uKSwg
Y2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gREZHOjpvcGVyYXRpb25MaW5rQ29uc3RydWN0IDogREZH
OjpvcGVyYXRpb25MaW5rQ2FsbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgKGNhbGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2JhbERhdGEuZ2V0Q1RJ
U3R1YihERkc6OmxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikgOiBnbG9iYWxEYXRhLmdldENU
SVN0dWIoREZHOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKICNlbHNlCiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAgICAgfSBlbHNlCi0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxSZXR1cm5Mb2NhdGlv
biksIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1
YWxDb25zdHJ1Y3RMaW5rKCkgOiBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExp
bmsoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwg
Y2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gZ2xvYmFsRGF0YS5qaXRTdHVicy0+Y3RpVmlydHVhbENv
bnN0cnVjdExpbmsoKSA6IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygp
KTsKICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwogICAgIGNhbGxlZS5jbGVhcigp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5m
by5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgc3RydWN0IENh
bGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAgICAgcmVtb3ZlKCk7CiAg
ICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uOyAvLyBpdCdz
IGEgbmVhciBjYWxsIGluIHRoZSBvbGQgSklULCBvciBhIG5vcm1hbCBjYWxsIGluIERGRworICAg
IENvZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhv
dFBhdGhPdGhlcjsKICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lv
biAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKICAgICAKICAgICBDb2RlT3JpZ2lu
KCkKLSAgICAgICAgOiBieXRlY29kZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSkKKyAgICAgICAgOiBieXRlY29kZUluZGV4KCgxIDw8IDI5KSAtIDEpCiAgICAgICAg
ICwgdmFsdWVQcm9maWxlT2Zmc2V0KDApCiAgICAgICAgICwgaW5saW5lQ2FsbEZyYW1lKDApCiAg
ICAgewpAQCAtNjMsNyArNjMsNyBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgICAgIEFTU0VS
VCh2YWx1ZVByb2ZpbGVPZmZzZXQgPCAoMXUgPDwgMykpOwogICAgIH0KICAgICAKLSAgICBib29s
IGlzU2V0KCkgY29uc3QgeyByZXR1cm4gYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCk7IH0KKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4g
Ynl0ZWNvZGVJbmRleCAhPSAoMSA8PCAyOSkgLSAxOyB9CiAgICAgCiAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxMjIw
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTMgQEAgcHVibGljOgogICAgIEFzc2VtYmx5SGVs
cGVycyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQogICAg
ICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKLSAgICAgICAgLCBtX2Jhc2VsaW5lQ29kZUJsb2NrKGNvZGVCbG9jay0+YmFzZWxp
bmVWZXJzaW9uKCkpCisgICAgICAgICwgbV9iYXNlbGluZUNvZGVCbG9jayhjb2RlQmxvY2sgPyBj
b2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpIDogMCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2NvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgQVNTRVJUKCFtX2Jhc2VsaW5lQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAg
QVNTRVJUKG1fYmFzZWxpbmVDb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CisgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICAgICAgQVNTRVJU
KG1fYmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICAgICAgQVNTRVJUKCFtX2Jhc2VsaW5lQ29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29k
ZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICB9
CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2Rl
QmxvY2s7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBl
cnMuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
Q2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIENDYWxsSGVscGVycyA6IHB1YmxpYyBBc3Nl
bWJseUhlbHBlcnMgewogcHVibGljOgotICAgIENDYWxsSGVscGVycyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIENDYWxsSGVscGVycyhKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrID0gMCkKICAgICAgICAgOiBB
c3NlbWJseUhlbHBlcnMoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQogICAgIHsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gMTIyMDUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3Myw2ICsyNzMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1
bWVudEdQUjEgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIG5vbkFyZ0dQUjAgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjEgPSBYODZSZWdpc3RlcnM6OmVieDsgLy8gcmVnVDMK
KyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjIgPSBYODZSZWdpc3RlcnM6OmVzaTsg
Ly8gcmVnVDQKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVn
aXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1
ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6ZWN4OwpAQCAtMzQ0
LDYgKzM0NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50R1BS
NSA9IFg4NlJlZ2lzdGVyczo6cjk7ICAvLyByZWdUNwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcg
bm9uQXJnR1BSMCA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgbm9uQXJnR1BSMSA9IFg4NlJlZ2lzdGVyczo6ZWJ4OyAvLyByZWdUMworICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJnR1BSMiA9IFg4NlJlZ2lzdGVyczo6cjEwOyAvLyByZWdU
OAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6
OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9
IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2UmVnaXN0ZXJzOjplc2k7CkBAIC00MTYsNiArNDE4
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1lbnRHUFIzID0gQVJN
UmVnaXN0ZXJzOjpyMzsgLy8gRklYTUUhCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25BcmdH
UFIwID0gQVJNUmVnaXN0ZXJzOjpyNDsgLy8gcmVnVDMKICAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IG5vbkFyZ0dQUjEgPSBBUk1SZWdpc3RlcnM6OnI4OyAvLyByZWdUNAorICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgbm9uQXJnR1BSMiA9IEFSTVJlZ2lzdGVyczo6cjk7IC8vIHJlZ1Q1CiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IEFSTVJlZ2lzdGVyczo6cjA7IC8vIHJl
Z1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBBUk1SZWdpc3Rl
cnM6OnIxOyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSID0gQVJNUmVnaXN0ZXJzOjpyMjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUzLDcgKzE1Myw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICAgICAgdW5zaWduZWQgcmV0dXJuQWRkcmVzc09mZnNldCA9IGxpbmtCdWZmZXIucmV0dXJu
QWRkcmVzc09mZnNldChtX2V4Y2VwdGlvbkNoZWNrc1tpXS5tX2NhbGwpOwogICAgICAgICBjb2Rl
T3JpZ2luc1tpXS5jb2RlT3JpZ2luID0gcmVjb3JkLm1fY29kZU9yaWdpbjsKICAgICAgICAgY29k
ZU9yaWdpbnNbaV0uY2FsbFJldHVybk9mZnNldCA9IHJldHVybkFkZHJlc3NPZmZzZXQ7Ci0gICAg
ICAgIHJlY29yZC5tX3Rva2VuLmFzc2VydENvZGVPcmlnaW5JbmRleChpKTsKICAgICB9CiAgICAg
CiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJvcGVy
dHlBY2Nlc3Nlcy5zaXplKCkpOwpAQCAtMTg5LDcgKzE4OCw4IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9j
b2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanND
YWxsc1tpXS5tX2NhbGxUeXBlOwogICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKLSAgICAgICAg
aW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKKyAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cigobV9nbG9iYWxEYXRhLT5n
ZXRDVElTdHViKGluZm8uY2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBsaW5r
Q29uc3RydWN0VGh1bmtHZW5lcmF0b3IgOiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCk7
CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fanND
YWxsc1tpXS5tX3RhcmdldFRvQ2hlY2spOwogICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanNDYWxsc1tpXS5tX2Zhc3RDYWxsKTsKICAg
ICB9CkBAIC0yODAsNyArMjgwLDggQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9u
KEpJVENvZAogICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CiAgICAgcG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNF
VE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7CiAK
LSAgICBDYWxsQmVnaW5Ub2tlbiB0b2tlbiA9IGJlZ2luQ2FsbCgpOworICAgIENhbGxCZWdpblRv
a2VuIHRva2VuOworICAgIGJlZ2luQ2FsbChDb2RlT3JpZ2luKDApLCB0b2tlbik7CiAgICAgQ2Fs
bCBjYWxsUmVnaXN0ZXJGaWxlQ2hlY2sgPSBjYWxsKCk7CiAgICAgbm90aWZ5Q2FsbChjYWxsUmVn
aXN0ZXJGaWxlQ2hlY2ssIENvZGVPcmlnaW4oMCksIHRva2VuKTsKICAgICBqdW1wKGZyb21SZWdp
c3RlckZpbGVDaGVjayk7CkBAIC0yOTcsNyArMjk4LDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29t
cGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6
cmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1Rv
KGZyb21Bcml0eUNoZWNrLCB0aGlzKTsKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNp
emVvZih2b2lkKikpOwotICAgIHRva2VuID0gYmVnaW5DYWxsKCk7CisgICAgYmVnaW5DYWxsKENv
ZGVPcmlnaW4oMCksIHRva2VuKTsKICAgICBDYWxsIGNhbGxBcml0eUNoZWNrID0gY2FsbCgpOwog
ICAgIG5vdGlmeUNhbGwoY2FsbEFyaXR5Q2hlY2ssIENvZGVPcmlnaW4oMCksIHRva2VuKTsKICAg
ICBtb3ZlKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAx
MjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDI4ICs3Niw1NSBAQCBjbGFzcyBDYWxsQmVnaW5Ub2tlbiB7CiBw
dWJsaWM6CiAgICAgQ2FsbEJlZ2luVG9rZW4oKQogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAg
ICAgOiBtX2NvZGVPcmlnaW5JbmRleChVSU5UX01BWCkKKyAgICAgICAgOiBtX3JlZ2lzdGVyZWQo
ZmFsc2UpCisgICAgICAgICwgbV9leGNlcHRpb25DaGVja0luZGV4KHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKICNlbmRpZgogICAgIHsKICAgICB9CiAgICAgCi0gICAgZXhw
bGljaXQgQ2FsbEJlZ2luVG9rZW4odW5zaWduZWQgY29kZU9yaWdpbkluZGV4KQorICAgIH5DYWxs
QmVnaW5Ub2tlbigpCisgICAgeworICAgICAgICBBU1NFUlQobV9yZWdpc3RlcmVkIHx8ICFtX2Nv
ZGVPcmlnaW4uaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChtX2NvZGVPcmlnaW4uaXNTZXQoKSA9
PSAobV9leGNlcHRpb25DaGVja0luZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIHVuc2lnbmVkIGluZGV4KQorICAgIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAg
IDogbV9jb2RlT3JpZ2luSW5kZXgoY29kZU9yaWdpbkluZGV4KQorICAgICAgICBBU1NFUlQobV9y
ZWdpc3RlcmVkIHx8ICFtX2NvZGVPcmlnaW4uaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChtX2Nv
ZGVPcmlnaW4uaXNTZXQoKSA9PSAobV9leGNlcHRpb25DaGVja0luZGV4ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpOworICAgICAgICBtX2NvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luOworICAgICAgICBtX3JlZ2lzdGVyZWQgPSBmYWxzZTsKKyAgICAgICAgbV9leGNlcHRp
b25DaGVja0luZGV4ID0gaW5kZXg7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oY29kZU9y
aWdpbik7CisgICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CiAjZW5kaWYKLSAgICB7Ci0gICAg
ICAgIFVOVVNFRF9QQVJBTShjb2RlT3JpZ2luSW5kZXgpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGFzc2VydENvZGVPcmlnaW5JbmRleCh1bnNpZ25lZCBjb2RlT3JpZ2luSW5kZXgpIGNvbnN0Cisg
ICAgdm9pZCByZWdpc3RlcldpdGhFeGNlcHRpb25DaGVjayhDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjb2RlT3JpZ2lu
SW5kZXgsIGNvZGVPcmlnaW5JbmRleCA8IFVJTlRfTUFYKTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChjb2RlT3JpZ2luSW5kZXgsIGNvZGVPcmlnaW5JbmRleCA9PSBtX2NvZGVPcmlnaW5JbmRleCk7
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBBU1NFUlQobV9jb2RlT3JpZ2luID09IGNv
ZGVPcmlnaW4pOworICAgICAgICBpZiAobV9yZWdpc3RlcmVkKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBBU1NFUlQobV9leGNlcHRpb25DaGVja0luZGV4ID09IGluZGV4KTsKKyAgICAg
ICAgbV9yZWdpc3RlcmVkID0gdHJ1ZTsKKyNlbmRpZgogICAgIH0KIAorI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2NvZGVPcmlnaW47CisgICAgfQorI2VuZGlmCisgICAgCiBwcml2YXRl
OgogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCBtX2NvZGVPcmlnaW5JbmRleDsK
KyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICBib29sIG1fcmVnaXN0ZXJlZDsKKyAg
ICB1bnNpZ25lZCBtX2V4Y2VwdGlvbkNoZWNrSW5kZXg7CiAjZW5kaWYKIH07CiAKQEAgLTEwNywy
NSArMTM0LDIyIEBAIHByaXZhdGU6CiAvLyBDYWxscyB0aGF0IG1pZ2h0IHRocm93IGFuIGV4Y2Vw
dGlvbiBhbHNvIHJlY29yZCB0aGUgSnVtcCB0YWtlbiBvbiBleGNlcHRpb24KIC8vICh1bnNldCBp
ZiBub3QgcHJlc2VudCkgYW5kIGNvZGUgb3JpZ2luIHVzZWQgdG8gcmVjb3ZlciBoYW5kbGVyL3Nv
dXJjZSBpbmZvLgogc3RydWN0IENhbGxFeGNlcHRpb25SZWNvcmQgewotICAgIENhbGxFeGNlcHRp
b25SZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsQmVnaW5Ub2tlbiB0b2tlbikKKyAgICBDYWxsRXhjZXB0aW9uUmVjb3JkKE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgOiBtX2Nh
bGwoY2FsbCkKICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKLSAgICAgICAgLCBt
X3Rva2VuKHRva2VuKQogICAgIHsKICAgICB9CiAKLSAgICBDYWxsRXhjZXB0aW9uUmVjb3JkKE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkNo
ZWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuIHRva2VuKQorICAgIENh
bGxFeGNlcHRpb25SZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAg
OiBtX2NhbGwoY2FsbCkKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNoZWNrKGV4Y2VwdGlvbkNoZWNr
KQogICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQotICAgICAgICAsIG1fdG9rZW4o
dG9rZW4pCiAgICAgewogICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2V4Y2VwdGlvbkNoZWNrOwogICAgIENvZGVPcmln
aW4gbV9jb2RlT3JpZ2luOwotICAgIENhbGxCZWdpblRva2VuIG1fdG9rZW47CiB9OwogCiBzdHJ1
Y3QgUHJvcGVydHlBY2Nlc3NSZWNvcmQgewpAQCAtMjU3LDE5ICsyODEsMjcgQEAgcHVibGljOgog
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBv
aW50cygpKTsKICAgICB9CiAgICAgCi0gICAgLy8gR2V0IGEgdG9rZW4gZm9yIGJlZ2lubmluZyBh
IGNhbGwsIGFuZCBzZXQgdGhlIGN1cnJlbnQgY29kZSBvcmlnaW4gaW5kZXggaW4KLSAgICAvLyB0
aGUgY2FsbCBmcmFtZS4KLSAgICBDYWxsQmVnaW5Ub2tlbiBiZWdpbkNhbGwoKQorICAgIHVuc2ln
bmVkIGN1cnJlbnRDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogICAgIHsKLSAgICAgICAgdW5zaWdu
ZWQgY29kZU9yaWdpbkluZGV4ID0gbV9jdXJyZW50Q29kZU9yaWdpbkluZGV4Kys7Ci0gICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNvZGVPcmlnaW5JbmRleCksIHRhZ0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAg
ICAgcmV0dXJuIENhbGxCZWdpblRva2VuKGNvZGVPcmlnaW5JbmRleCk7CisgICAgICAgIHJldHVy
biBtX2N1cnJlbnRDb2RlT3JpZ2luSW5kZXg7CisgICAgfQorICAgIAorICAgIC8vIEdldCBhIHRv
a2VuIGZvciBiZWdpbm5pbmcgYSBjYWxsLCBhbmQgc2V0IHRoZSBjdXJyZW50IGNvZGUgb3JpZ2lu
IGluZGV4IGluCisgICAgLy8gdGhlIGNhbGwgZnJhbWUuIEZvciBlYWNoIGJlZ2luQ2FsbCgpIHRo
ZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGV4Y2VwdGlvbgorICAgIC8vIGNoZWNrLCBhbmQgYWxs
IG9mIHRoZSBleGNlcHRpb24gY2hlY2tzIG11c3QgaGF2ZSB0aGUgc2FtZSBDb2RlT3JpZ2luIGFz
IHRoZQorICAgIC8vIGJlZ2luQ2FsbCgpLgorICAgIHZvaWQgYmVnaW5DYWxsKENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4mIHRva2VuKQorICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgaW5kZXggPSBtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCk7CisgICAgICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGluZGV4KSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oUmVn
aXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICB0b2tlbi5zZXQoY29kZU9yaWdp
biwgaW5kZXgpOwogICAgIH0KIAogICAgIC8vIE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0
IGRvZXMgbm90IHJlcXVpcmUgbGlua2luZy4KLSAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBmdW5j
dGlvbkNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4gdG9rZW4pCisg
ICAgdm9pZCBub3RpZnlDYWxsKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxCZWdpblRva2VuJiB0b2tlbikKICAgICB7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgY29kZU9yaWdpbiwg
dG9rZW4pKTsKKyAgICAgICAgdG9rZW4ucmVnaXN0ZXJXaXRoRXhjZXB0aW9uQ2hlY2soY29kZU9y
aWdpbiwgbV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKTsKKyAgICAgICAgbV9leGNlcHRpb25DaGVj
a3MuYXBwZW5kKENhbGxFeGNlcHRpb25SZWNvcmQoZnVuY3Rpb25DYWxsLCBjb2RlT3JpZ2luKSk7
CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBh
biBleGNlcHRpb24gY2hlY2suCkBAIC0yNzksMjAgKzMxMSwyNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24pKTsK
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICB9CisgICAgCisgICAgdm9pZCBwcmVw
YXJlRm9yRXhjZXB0aW9uQ2hlY2soKQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
bV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKKyAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRo
IGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAgICB2b2lkIGFkZEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVu
Y3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuIHRva2VuKQor
ICAgIHZvaWQgYWRkRXhjZXB0aW9uQ2hlY2soQ2FsbCBmdW5jdGlvbkNhbGwsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4mIHRva2VuKQogICAgIHsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIobV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKSwgR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSKTsKLSAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKENhbGxF
eGNlcHRpb25SZWNvcmQoZnVuY3Rpb25DYWxsLCBlbWl0RXhjZXB0aW9uQ2hlY2soKSwgY29kZU9y
aWdpbiwgdG9rZW4pKTsKKyAgICAgICAgcHJlcGFyZUZvckV4Y2VwdGlvbkNoZWNrKCk7CisgICAg
ICAgIHRva2VuLnJlZ2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNrKGNvZGVPcmlnaW4sIG1fZXhjZXB0
aW9uQ2hlY2tzLnNpemUoKSk7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxs
RXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZW1pdEV4Y2VwdGlvbkNoZWNrKCksIGNvZGVP
cmlnaW4pKTsKICAgICB9CiAgICAgCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29k
ZSwgd2l0aCBhIGZhc3QgZXhjZXB0aW9uIGNoZWNrIHRoYXQgdGVzdHMgaWYgdGhlIHJldHVybiB2
YWx1ZSBpcyB6ZXJvLgotICAgIHZvaWQgYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVuY3Rp
b25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuIHRva2VuKQorICAg
IHZvaWQgYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuJiB0b2tlbikKICAgICB7Ci0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSksIEdQUkluZm86Om5vblByZXNl
cnZlZE5vblJldHVybkdQUik7CisgICAgICAgIHByZXBhcmVGb3JFeGNlcHRpb25DaGVjaygpOwog
ICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxs
RXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZXhjZXB0aW9uQ2hlY2ssIGNvZGVPcmlnaW4s
IHRva2VuKSk7CisgICAgICAgIHRva2VuLnJlZ2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNrKGNvZGVP
cmlnaW4sIG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSk7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZXhjZXB0aW9uQ2hl
Y2ssIGNvZGVPcmlnaW4pKTsKICAgICB9CiAgICAgCiAgICAgLy8gSGVscGVyIG1ldGhvZHMgdG8g
Z2V0IHByZWRpY3Rpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAi
REZHUmVwYXRjaC5oIgorI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkhvc3RDYWxs
UmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgpAQCAtODQ5LDcgKzg1MCw2IEBAIHN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2Fs
bChFeGVjU3RhdGUqIGUKIAogICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlQ2hhaW4oZXhlYy0+c2Nv
cGVDaGFpbigpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7Ci0gICAgZXhlY0Nh
bGxlZS0+Y2xlYXJSZXR1cm5QQygpOwogCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsK
ICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC04NjIsMTQgKzg2MiwxNCBAQCBzdGF0aWMg
dm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICBleGVjQ2FsbGVl
LT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICBnbG9iYWxEYXRhLT5o
b3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5j
dGlvbihleGVjQ2FsbGVlKSk7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9u
KQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKICAgICAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKICAgICAgICAgfQog
ICAgIAogICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKICAgICAgICAg
ZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4
ZWMsIGNhbGxlZSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0
YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpOwpAQCAtODg0LDE3ICs4ODQsMTcgQEAgc3RhdGljIHZvaWQqIGhhbmRs
ZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZQogICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNP
YmplY3QoY2FsbGVlKSk7CiAgICAgICAgIGdsb2JhbERhdGEtPmhvc3RDYWxsUmV0dXJuVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxl
ZSkpOwogICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOwogCiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0g
Q29uc3RydWN0VHlwZU5vbmUpOwogICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBj
cmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpOwotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKLWlubGlu
ZSB2b2lkKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitpbmxpbmUgdm9pZCog
bGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwog
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC05
MTgsNyArOTE4LDcgQEAgaW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAog
ICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3Io
ZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7
CiAgICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93
RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBn
bG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgIH0KICAgICAgICAgY29k
ZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3Ioa2luZCk7
CiAgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwg
c3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCkBAIC05MjYs
NyArOTI2LDcgQEAgaW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5l
cmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgfQotICAgIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5m
byhyZXR1cm5BZGRyZXNzKTsKKyAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CiAg
ICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKICAgICAgICAgY2FsbExpbmtJbmZvLnNl
dFNlZW4oKTsKICAgICBlbHNlCkBAIC05MzQsMTYgKzkzNCwxNCBAQCBpbmxpbmUgdm9pZCogbGlu
a0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsCiAgICAgcmV0dXJuIGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKIH0KIAotUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShv
cGVyYXRpb25MaW5rQ2FsbCk7Ci12b2lkKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxs
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCit2b2lkKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4
ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBy
ZXR1cm5BZGRyZXNzLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxl
ZSwgQ29kZUZvckNhbGwpOwogfQogCi1QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FKG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwotdm9pZCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ29uc3RydWN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewotICAgIHJldHVy
biBsaW5rRm9yKGV4ZWNDYWxsZWUsIHJldHVybkFkZHJlc3MsIENvZGVGb3JDb25zdHJ1Y3QpOwor
ICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCiBp
bmxpbmUgdm9pZCogdmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKQEAgLTk2NSw3ICs5NjMsNyBAQCBpbmxpbmUgdm9pZCogdmlydHVh
bEZvcihFeGVjU3RhdGUqIGV4ZWNDCiAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+Y29tcGlsZUZvcihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+c2NvcGUoKSwga2lu
ZCk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgp
LmV4Y2VwdGlvbiA9IGVycm9yOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBy
ZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tG
b3Ioa2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiREZHQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRp
dmVKSVQuaCIKKyNpbmNsdWRlICJERkdUaHVua3MuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExp
c3QuaCIKQEAgLTkwOSw2ICs5MTAsNyBAQCB2b2lkIGRmZ0J1aWxkUHV0QnlJZExpc3QoRXhlY1N0
YXRlKiBleGVjCiB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNh
bGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKIHsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxl
ckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IGNh
bGxlckNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAgIApAQCAtOTIxLDExICs5MjMsMTEgQEAg
dm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbgogICAgICAgICBjYWxsZWVD
b2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoJmNhbGxMaW5rSW5mbyk7CiAgICAgCiAgICAgaWYg
KGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29k
ZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0aW9u
VmlydHVhbENhbGwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29k
ZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0aW9u
VmlydHVhbENvbnN0cnVjdCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3Ry
dWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKIHZvaWQgZGZnUmVzZXRHZXRCeUlEKFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTk4LDE0ICs5OTgsMTYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgIEpJVENvbXBp
bGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKICAgICBKSVRDb21waWxlcjo6SnVtcCBz
bG93UGF0aDsKIAorICAgIENhbGxCZWdpblRva2VuIHRva2VuOworICAgIG1faml0LmJlZ2luQ2Fs
bChub2RlLmNvZGVPcmlnaW4sIHRva2VuKTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoVHJ1c3Rl
ZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihS
ZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCiAgICAgc2xvd1Bh
dGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBj
YWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Nj
b3BlQ2hhaW4pKSwgcmVzdWx0R1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRHUFIsIGNh
bGxGcmFtZVNsb3QoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7CisgICAgbV9qaXQuc3RvcmVQ
dHIocmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIFJlZ2lz
dGVyRmlsZTo6U2NvcGVDaGFpbikpOwogCi0gICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMiht
X2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIAogICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiA9IGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luOwotICAgIENhbGxCZWdpblRv
a2VuIHRva2VuID0gbV9qaXQuYmVnaW5DYWxsKCk7CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFz
dENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwogICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGws
IGNvZGVPcmlnaW4sIHRva2VuKTsKICAgICAKQEAgLTEwMTMsMTQgKzEwMTUsMTAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgIAogICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKICAgICAKLSAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmNv
ZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICB0b2tl
biA9IG1faml0LmJlZ2luQ2FsbCgpOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0g
bV9qaXQuYXBwZW5kQ2FsbChzbG93Q2FsbEZ1bmN0aW9uKTsKLSAgICBtX2ppdC5hZGRGYXN0RXhj
ZXB0aW9uQ2hlY2soc2xvd0NhbGwsIGNvZGVPcmlnaW4sIHRva2VuKTsKLSAgICBtX2ppdC5hZGRQ
dHIoVHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAq
IHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgdG9r
ZW4gPSBtX2ppdC5iZWdpbkNhbGwoKTsKLSAgICBKSVRDb21waWxlcjo6Q2FsbCB0aGVDYWxsID0g
bV9qaXQuY2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgbV9qaXQubm90aWZ5Q2Fs
bCh0aGVDYWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CisgICAgbV9qaXQubW92ZShjYWxsZWVHUFIs
IEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIG1faml0LnByZXBhcmVGb3JFeGNlcHRpb25DaGVj
aygpOworICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsK
KyAgICBtX2ppdC5ub3RpZnlDYWxsKHNsb3dDYWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CiAgICAg
CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MzgsNyArMTczOCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHByZXBhcmVGb3JF
eHRlcm5hbENhbGwoKTsKICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYXQobV9jb21w
aWxlSW5kZXgpLmNvZGVPcmlnaW47Ci0gICAgICAgIENhbGxCZWdpblRva2VuIHRva2VuID0gbV9q
aXQuYmVnaW5DYWxsKCk7CisgICAgICAgIENhbGxCZWdpblRva2VuIHRva2VuOworICAgICAgICBt
X2ppdC5iZWdpbkNhbGwoY29kZU9yaWdpbiwgdG9rZW4pOwogICAgICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIG1faml0LmFk
ZEV4Y2VwdGlvbkNoZWNrKGNhbGwsIGNvZGVPcmlnaW4sIHRva2VuKTsKICAgICAgICAgcmV0dXJu
IGNhbGw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZp
c2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQog
CisjaW5jbHVkZSAiREZHQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHRlBSSW5mby5oIgog
I2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKICNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXIuaCIK
QEAgLTgyLDYgKzgzLDE5NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRp
b25UCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIE9TUiBleGl0
IGdlbmVyYXRpb24gdGh1bmsiKSk7CiB9CiAKK2lubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRh
dGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIpCit7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgIENDYWxsSGVscGVyczo6SnVtcCBpc05vblplcm8gPSBqaXQuYnJhbmNo
VGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHBvaW50ZXJHUFIpOworICAgIGppdC5icmVh
a3BvaW50KCk7CisgICAgaXNOb25aZXJvLmxpbmsoJmppdCk7CisgICAgaml0LnB1c2gocG9pbnRl
ckdQUik7CisgICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBvaW50ZXJHUFIpOworICAgIGppdC5w
b3AocG9pbnRlckdQUik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShqaXQpOworICAgIFVOVVNF
RF9QQVJBTShwb2ludGVyR1BSKTsKKyNlbmRpZgorfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KGdsb2JhbERhdGEpOworICAgIAorICAg
IC8vIFdlIHdpbGwganVtcCB0byBoZXJlIGlmIHRoZSBKSVQgY29kZSB0aGlua3MgaXQncyBtYWtp
bmcgYSBjYWxsLCBidXQgdGhlCisgICAgLy8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2RlKSBkZWNp
ZGVkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLiBXZSB3aWxsCisgICAgLy8gaGF2ZSBz
YXZlZCB0aGUgY2FsbFJldHVybkluZGV4IGluIHRoZSBmaXJzdCBhcmd1bWVudHMgb2YgSklUU3Rh
Y2tGcmFtZS4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgb24g
dGhlIHN0YWNrIGF0IHRoaXMgcG9pbnQsIHNvIHdlCisgICAgLy8gbmVlZCB0byByZW1vdmUgaXQg
YW5kIGRyb3AgaXQgb24gdGhlIGZsb29yLCBzaW5jZSB3ZSBkb24ndCBjYXJlIGFib3V0IGl0Lgor
ICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQucGVlayhHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisgICAgaml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+
KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1p
dFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0LmNh
bGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEs
ICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsICgiREZHIHRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIikp
OworfQorCitzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCwg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQX0RGR09wZXJhdGlvbl9FIHNsb3dQYXRoRnVuY3Rp
b24pCit7CisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpu
b25BcmdHUFIyKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25B
cmdHUFIyKTsKKyAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIs
CisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpKSAqIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpKTsKKyAgICBqaXQuc3RvcmVQ
dHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUp
OworICAgIGppdC5wb2tlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RB
Q0tGUkFNRV9BUkdTX0lOREVYKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsK
KyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZv
aWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQ
b2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5jYWxs
KEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIAorICAgIC8vIFRoaXMgc2xvdyBjYWxsIHdpbGwg
cmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgIC8vIDEpIEV4
Y2VwdGlvbiB0aHJvd2luZyB0aHVuay4KKyAgICAvLyAyKSBIb3N0IGNhbGwgcmV0dXJuIHZhbHVl
IHJldHVybmVyIHRoaW5neS4KKyAgICAvLyAzKSBUaGUgZnVuY3Rpb24gdG8gY2FsbC4KKyAgICBq
aXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyksCisgICAg
ICAgIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3JlUHRy
KAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksCisgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAq
IFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0
LCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5yZXN0b3JlUmV0
dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIp
OworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cit9CisKK3N0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvclRodW5rR2VuZXJhdG9yKAorICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIC8v
IFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgb3IgaW4gdGhlIGxpbmsgcmVnaXN0
ZXIuIFdlIHdpbGwgaGVuY2UKKyAgICAvLyBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUg
Y2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwKKyAgICAvLyB0byBw
ZXJmb3JtIGxpbmtpbmcgYW5kIGxhenkgY29tcGlsYXRpb24gaWYgbmVjZXNzYXJ5LiBXZSBleHBl
Y3QgdGhlIGNhbGxlZQorICAgIC8vIHRvIGJlIGluIG5vbkFyZ0dQUjAvbm9uQXJnR1BSMSAocGF5
bG9hZC90YWcpLCB0aGUgY2FsbCBmcmFtZSB0byBoYXZlIGFscmVhZHkKKyAgICAvLyBiZWVuIGFk
anVzdGVkLCBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgaG9sZHMgdGhlIGV4Y2VwdGlvbiBoYW5k
bGVyIGluZGV4LAorICAgIC8vIGFuZCBhbGwgb3RoZXIgcmVnaXN0ZXJzIHRvIGJlIGF2YWlsYWJs
ZSBmb3IgdXNlLiBXZSB1c2UgSklUU3RhY2tGcmFtZTo6YXJncworICAgIC8vIHRvIHNhdmUgaW1w
b3J0YW50IGluZm9ybWF0aW9uIGFjcm9zcyBjYWxscy4KKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMg
aml0KGdsb2JhbERhdGEpOworICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgZ2xvYmFsRGF0YSwg
a2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0Nv
bnN0cnVjdCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwg
JmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKKyAgICAg
ICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiREZHIGxpbmsgJXMgc2xvdyBwYXRoIHRodW5rIiwg
a2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7Cit9CisKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKGdsb2JhbERhdGEs
IENvZGVGb3JDYWxsKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGxp
bmtGb3JUaHVua0dlbmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKwor
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoCisg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
Cit7CisgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjaywgb3IgaW4gdGhl
IGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKKyAgICAvLyBqdW1wIHRvIHRoZSBjYWxsZWUs
IG9yIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlCisg
ICAgLy8gbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsIHRvIHRoZSBhcHByb3ByaWF0ZSBERkcgb3Bl
cmF0aW9uLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdChnbG9iYWxEYXRhKTsKKyAgICAKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOworCisgICAgLy8gRklYTUU6IHdlIHNob3Vs
ZCBoYXZlIGEgc3RvcnkgZm9yIGVsaW1pbmF0aW5nIHRoZXNlIGNoZWNrcy4gSW4gbWFueSBjYXNl
cywKKyAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRlbHkgYSBj
ZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24uCisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2hUZXN0UHRyKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpKTsKKyNlbHNlCisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAg
ICBqaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwg
R1BSSW5mbzo6bm9uQXJnR1BSMSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisjZW5kaWYKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisg
ICAgICAgIGppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKCZKU0Z1bmN0aW9uOjpzX2luZm8pKSk7CisgICAgCisgICAgLy8gTm93IHdl
IGtub3cgd2UgaGF2ZSBhIEpTRnVuY3Rpb24uCisgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIpOwor
ICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cygKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6
b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKGtpbmQpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgCisgICAgLy8gTm93IHdlIGtub3cgdGhhdCB3ZSBo
YXZlIGEgQ29kZUJsb2NrLCBhbmQgd2UncmUgY29tbWl0dGVkIHRvIG1ha2luZyBhIGZhc3QKKyAg
ICAvLyBjYWxsLgorICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNo
YWluKCkpLAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICBqaXQuc3RvcmVQdHIo
CisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbikpOworICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNl
dE9mSklUQ29kZUZvcihraW5kKSksCisgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAg
ICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gREZHIGNvZGUu
CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDApOworICAgIGpp
dC5qdW1wKEdQUkluZm86OnJlZ1QwKTsKKworICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAg
CisgICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1
bGwgc2xvdyBwYXRoLgorICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgZ2xvYmFsRGF0YSwga2lu
ZCA9PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvblZpcnR1YWxDYWxsIDogb3BlcmF0aW9uVmlydHVh
bENvbnN0cnVjdCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0
YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKKyAg
ICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiREZHIHZpcnR1YWwgJXMgc2xvdyBwYXRoIHRo
dW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7Cit9CisK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9y
KGdsb2JhbERhdGEsIENvZGVGb3JDYWxsKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7
CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9y
Q29uc3RydWN0KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJ
KHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE0IEBAIG5hbWVzcGFjZSBERkcgewogCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqKTsKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKik7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MzksNyArNzM5LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxl
KENvZGVQdHIqIGZ1bgogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+
Y2FsbExpbmtJbmZvKGkpOwogICAgICAgICBpbmZvLmNhbGxUeXBlID0gbV9jYWxsU3RydWN0dXJl
U3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsVHlwZTsKICAgICAgICAgaW5mby5ieXRlY29kZUlu
ZGV4ID0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ieXRlY29kZUluZGV4
OwotICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbikpOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVT
dHViQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7CiAgICAgICAgIGluZm8u
aG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAgICAgIGluZm8uaG90UGF0aE90
aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsKICAgICB9CkBAIC04MDIsMTIgKzgwMiwx
MiBAQCB2b2lkIEpJVDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvCiAKICAgICAvLyBQ
YXRjaCB0aGUgc2xvdyBwYXRjaCBzbyB3ZSBkbyBub3QgY29udGludWUgdG8gdHJ5IHRvIGxpbmsu
CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24pLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGwoKSk7CisgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGwoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsTGlua0luZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbiksIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0KCkp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdCgpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw2ICsxNzYsMjIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpYygpOwogICAg
ICAgICAgICAgcmV0dXJuIE5vSW50cmluc2ljOwogICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29kZUZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxs
KQorICAgICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2Us
IG1faml0Q29kZUZvckNhbGwpOworICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCk7CisgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVC
YXNlLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVG
b3JDYWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJs
ZUJhc2UsIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpOworICAgICAgICAgICAgQVNTRVJUKGtpbmQg
PT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEV4ZWN1dGFibGVCYXNlLCBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QpOworICAgICAgICB9
CiAjZW5kaWYKIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1
NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQorICAgICAgICAKICAg
ICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
ICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151621</attachid>
            <date>2012-07-11 00:34:34 -0700</date>
            <delta_ts>2012-07-11 00:51:39 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>virtualcall_patch_5.diff</filename>
            <type>text/plain</type>
            <size>40892</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMjk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDEyLTA3LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGZhc3QgdmlydHVhbCBjYWxscworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5MjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudHMgdmlydHVhbCBjYWxs
IHN1cHBvcnQgaW4gdGhlIHN0eWxlIG9mIHRoZSBvbGQgSklULCB3aXRoIHRoZQorICAgICAgICBj
YXZlYXQgdGhhdCB3ZSBzdGlsbCB1c2UgdGhlIHNhbWUgc2xvdyBwYXRoIGZvciBib3RoIEludGVy
bmFsRnVuY3Rpb24KKyAgICAgICAgY2FsbHMgYW5kIEpTRnVuY3Rpb24gY2FsbHMuIEFsc28gcmF0
aW9uYWxpemVkIHRoZSB3YXkgdGhhdCBvdXIKKyAgICAgICAgQ29kZU9yaWdpbiBpbmRpY2VzIHRp
ZSBpbnRvIGV4Y2VwdGlvbiBjaGVja3MgKHByZXZpb3VzbHkgaXQgd2FzIGEKKyAgICAgICAgc3Ry
YW5nZSBvbmUtdG8tb25lIG1hcHBpbmcgd2l0aCBmYWlybHkgbGltaXRlZCBhc3NlcnRpb25zOyBu
b3cgaXQncyBhCisgICAgICAgIG9uZS10by1tYW55IG1hcHBpbmcgZm9yIENvZGVPcmlnaW5zIHRv
IGV4Y2VwdGlvbiBjaGVja3MsIHJlc3BlY3RpdmVseSkuCisgICAgICAgIEZpbmFsbHksIEkgdG9v
ayB0aGUgb3Bwb3J0dW5pdHkgdG8gY2xlYW4gdXAKKyAgICAgICAgQ2FsbExpbmtJbmZvOjpjYWxs
UmV0dXJuTG9jYXRpb24sIHdoaWNoIHByZXZpb3VzbHkgd2FzIGVpdGhlciBhIENhbGwgb3IKKyAg
ICAgICAgYSBOZWFyQ2FsbC4gTm93IGl0J3MganVzdCBhIE5lYXJDYWxsLgorICAgICAgICAKKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OnVubGluayk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6CisgICAg
ICAgIChDYWxsTGlua0luZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAg
ICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNvZGVP
cmlnaW46OmlzU2V0KToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpBc3NlbWJseUhlbHBlcnMpOgorICAgICAg
ICAqIGRmZy9ERkdDQ2FsbEhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDQ2FsbEhlbHBl
cnM6OkNDYWxsSGVscGVycyk6CisgICAgICAgICogZGZnL0RGR0dQUkluZm8uaDoKKyAgICAgICAg
KEdQUkluZm8pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgor
ICAgICAgICAoSlNDOjpERkc6OkNhbGxCZWdpblRva2VuOjpDYWxsQmVnaW5Ub2tlbik6CisgICAg
ICAgIChKU0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46On5DYWxsQmVnaW5Ub2tlbik6CisgICAgICAg
IChDYWxsQmVnaW5Ub2tlbik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46OnNl
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46OnJlZ2lzdGVyV2l0aEV4Y2Vw
dGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsQmVnaW5Ub2tlbjo6Y29kZU9yaWdp
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEV4Y2VwdGlvblJlY29yZDo6Q2FsbEV4Y2VwdGlv
blJlY29yZCk6CisgICAgICAgIChDYWxsRXhjZXB0aW9uUmVjb3JkKToKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6Y3VycmVudENvZGVPcmlnaW5JbmRleCk6CisgICAgICAgIChKSVRD
b21waWxlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmJlZ2luQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpwcmVwYXJlRm9yRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmFkZEZhc3RFeGNlcHRpb25DaGVjayk6CisgICAgICAgICogZGZn
L0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpkZmdMaW5rRm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICog
ZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmxpbmtGb3JUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkRGRzo6bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
REZHOjp2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OnZpcnR1
YWxDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OnZpcnR1YWxDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAo
REZHKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Zvcik6CisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChFeGVjdXRhYmxlQmFzZSk6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVGb3IpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQmFzZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTRnVuY3Rpb24pOgorCiAyMDEyLTA3LTEwICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTIyMTY2
KTogSXQgbWFkZSAxNzAgdGVzdHMgY3Jhc2ggb24gMzIgYml0IHBsYXRmb3JtcwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlz
aW9uIDEyMjI5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ2FsbExp
bmtJbmZvLmgiCiAKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiREZHVGh1
bmtzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAg
LTM4LDEyICszOSwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKEpTR2xvYmFsRGF0YSYg
CiAgICAgCiAgICAgaWYgKGlzREZHKSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbFJldHVybkxvY2F0aW9uKSwg
Y2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gREZHOjpvcGVyYXRpb25MaW5rQ29uc3RydWN0IDogREZH
OjpvcGVyYXRpb25MaW5rQ2FsbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgKGNhbGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2JhbERhdGEuZ2V0Q1RJ
U3R1YihERkc6OmxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikgOiBnbG9iYWxEYXRhLmdldENU
SVN0dWIoREZHOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKICNlbHNlCiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAgICAgfSBlbHNlCi0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxSZXR1cm5Mb2NhdGlv
biksIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1
YWxDb25zdHJ1Y3RMaW5rKCkgOiBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExp
bmsoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwg
Y2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gZ2xvYmFsRGF0YS5qaXRTdHVicy0+Y3RpVmlydHVhbENv
bnN0cnVjdExpbmsoKSA6IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygp
KTsKICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwogICAgIGNhbGxlZS5jbGVhcigp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5m
by5oCShyZXZpc2lvbiAxMjIyOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgc3RydWN0IENh
bGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAgICAgcmVtb3ZlKCk7CiAg
ICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uOyAvLyBpdCdz
IGEgbmVhciBjYWxsIGluIHRoZSBvbGQgSklULCBvciBhIG5vcm1hbCBjYWxsIGluIERGRworICAg
IENvZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhv
dFBhdGhPdGhlcjsKICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lv
biAxMjIyOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKICAgICAKICAgICBDb2RlT3JpZ2lu
KCkKLSAgICAgICAgOiBieXRlY29kZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSkKKyAgICAgICAgOiBieXRlY29kZUluZGV4KCgxIDw8IDI5KSAtIDEpCiAgICAgICAg
ICwgdmFsdWVQcm9maWxlT2Zmc2V0KDApCiAgICAgICAgICwgaW5saW5lQ2FsbEZyYW1lKDApCiAg
ICAgewpAQCAtNjMsNyArNjMsNyBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgICAgIEFTU0VS
VCh2YWx1ZVByb2ZpbGVPZmZzZXQgPCAoMXUgPDwgMykpOwogICAgIH0KICAgICAKLSAgICBib29s
IGlzU2V0KCkgY29uc3QgeyByZXR1cm4gYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCk7IH0KKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4g
Ynl0ZWNvZGVJbmRleCAhPSAoMSA8PCAyOSkgLSAxOyB9CiAgICAgCiAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxMjIy
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTMgQEAgcHVibGljOgogICAgIEFzc2VtYmx5SGVs
cGVycyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQogICAg
ICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKLSAgICAgICAgLCBtX2Jhc2VsaW5lQ29kZUJsb2NrKGNvZGVCbG9jay0+YmFzZWxp
bmVWZXJzaW9uKCkpCisgICAgICAgICwgbV9iYXNlbGluZUNvZGVCbG9jayhjb2RlQmxvY2sgPyBj
b2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpIDogMCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2NvZGVCbG9jayk7Ci0gICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgQVNTRVJUKCFtX2Jhc2VsaW5lQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAg
QVNTRVJUKG1fYmFzZWxpbmVDb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CisgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICAgICAgQVNTRVJU
KG1fYmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICAgICAgQVNTRVJUKCFtX2Jhc2VsaW5lQ29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29k
ZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICB9
CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2Rl
QmxvY2s7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBl
cnMuaAkocmV2aXNpb24gMTIyMjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
Q2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIENDYWxsSGVscGVycyA6IHB1YmxpYyBBc3Nl
bWJseUhlbHBlcnMgewogcHVibGljOgotICAgIENDYWxsSGVscGVycyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIENDYWxsSGVscGVycyhKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrID0gMCkKICAgICAgICAgOiBB
c3NlbWJseUhlbHBlcnMoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQogICAgIHsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gMTIyMjk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3Myw2ICsyNzMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1
bWVudEdQUjEgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIG5vbkFyZ0dQUjAgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjEgPSBYODZSZWdpc3RlcnM6OmVieDsgLy8gcmVnVDMK
KyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjIgPSBYODZSZWdpc3RlcnM6OmVzaTsg
Ly8gcmVnVDQKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVn
aXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1
ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6ZWN4OwpAQCAtMzQ0
LDYgKzM0NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50R1BS
NSA9IFg4NlJlZ2lzdGVyczo6cjk7ICAvLyByZWdUNwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcg
bm9uQXJnR1BSMCA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgbm9uQXJnR1BSMSA9IFg4NlJlZ2lzdGVyczo6ZWJ4OyAvLyByZWdUMworICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJnR1BSMiA9IFg4NlJlZ2lzdGVyczo6cjEwOyAvLyByZWdU
OAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6
OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9
IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2UmVnaXN0ZXJzOjplc2k7CkBAIC00MTYsNiArNDE4
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1lbnRHUFIzID0gQVJN
UmVnaXN0ZXJzOjpyMzsgLy8gRklYTUUhCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25BcmdH
UFIwID0gQVJNUmVnaXN0ZXJzOjpyNDsgLy8gcmVnVDMKICAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IG5vbkFyZ0dQUjEgPSBBUk1SZWdpc3RlcnM6OnI4OyAvLyByZWdUNAorICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgbm9uQXJnR1BSMiA9IEFSTVJlZ2lzdGVyczo6cjk7IC8vIHJlZ1Q1CiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IEFSTVJlZ2lzdGVyczo6cjA7IC8vIHJl
Z1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBBUk1SZWdpc3Rl
cnM6OnIxOyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSID0gQVJNUmVnaXN0ZXJzOjpyMjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMjIyOTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUzLDcgKzE1Myw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICAgICAgdW5zaWduZWQgcmV0dXJuQWRkcmVzc09mZnNldCA9IGxpbmtCdWZmZXIucmV0dXJu
QWRkcmVzc09mZnNldChtX2V4Y2VwdGlvbkNoZWNrc1tpXS5tX2NhbGwpOwogICAgICAgICBjb2Rl
T3JpZ2luc1tpXS5jb2RlT3JpZ2luID0gcmVjb3JkLm1fY29kZU9yaWdpbjsKICAgICAgICAgY29k
ZU9yaWdpbnNbaV0uY2FsbFJldHVybk9mZnNldCA9IHJldHVybkFkZHJlc3NPZmZzZXQ7Ci0gICAg
ICAgIHJlY29yZC5tX3Rva2VuLmFzc2VydENvZGVPcmlnaW5JbmRleChpKTsKICAgICB9CiAgICAg
CiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJvcGVy
dHlBY2Nlc3Nlcy5zaXplKCkpOwpAQCAtMTg5LDcgKzE4OCw4IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9j
b2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanND
YWxsc1tpXS5tX2NhbGxUeXBlOwogICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKLSAgICAgICAg
aW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKKyAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cigobV9nbG9iYWxEYXRhLT5n
ZXRDVElTdHViKGluZm8uY2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBsaW5r
Q29uc3RydWN0VGh1bmtHZW5lcmF0b3IgOiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCk7
CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fanND
YWxsc1tpXS5tX3RhcmdldFRvQ2hlY2spOwogICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanNDYWxsc1tpXS5tX2Zhc3RDYWxsKTsKICAg
ICB9CkBAIC0yODAsNyArMjgwLDggQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9u
KEpJVENvZAogICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CiAgICAgcG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNF
VE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7CiAK
LSAgICBDYWxsQmVnaW5Ub2tlbiB0b2tlbiA9IGJlZ2luQ2FsbCgpOworICAgIENhbGxCZWdpblRv
a2VuIHRva2VuOworICAgIGJlZ2luQ2FsbChDb2RlT3JpZ2luKDApLCB0b2tlbik7CiAgICAgQ2Fs
bCBjYWxsUmVnaXN0ZXJGaWxlQ2hlY2sgPSBjYWxsKCk7CiAgICAgbm90aWZ5Q2FsbChjYWxsUmVn
aXN0ZXJGaWxlQ2hlY2ssIENvZGVPcmlnaW4oMCksIHRva2VuKTsKICAgICBqdW1wKGZyb21SZWdp
c3RlckZpbGVDaGVjayk7CkBAIC0yOTcsNyArMjk4LDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29t
cGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6
cmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1Rv
KGZyb21Bcml0eUNoZWNrLCB0aGlzKTsKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNp
emVvZih2b2lkKikpOwotICAgIHRva2VuID0gYmVnaW5DYWxsKCk7CisgICAgYmVnaW5DYWxsKENv
ZGVPcmlnaW4oMCksIHRva2VuKTsKICAgICBDYWxsIGNhbGxBcml0eUNoZWNrID0gY2FsbCgpOwog
ICAgIG5vdGlmeUNhbGwoY2FsbEFyaXR5Q2hlY2ssIENvZGVPcmlnaW4oMCksIHRva2VuKTsKICAg
ICBtb3ZlKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAx
MjIyOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDI4ICs3Niw1OCBAQCBjbGFzcyBDYWxsQmVnaW5Ub2tlbiB7CiBw
dWJsaWM6CiAgICAgQ2FsbEJlZ2luVG9rZW4oKQogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAg
ICAgOiBtX2NvZGVPcmlnaW5JbmRleChVSU5UX01BWCkKKyAgICAgICAgOiBtX3JlZ2lzdGVyZWQo
ZmFsc2UpCisgICAgICAgICwgbV9leGNlcHRpb25DaGVja0luZGV4KHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKICNlbmRpZgogICAgIHsKICAgICB9CiAgICAgCi0gICAgZXhw
bGljaXQgQ2FsbEJlZ2luVG9rZW4odW5zaWduZWQgY29kZU9yaWdpbkluZGV4KQorICAgIH5DYWxs
QmVnaW5Ub2tlbigpCisgICAgeworICAgICAgICBBU1NFUlQobV9yZWdpc3RlcmVkIHx8ICFtX2Nv
ZGVPcmlnaW4uaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChtX2NvZGVPcmlnaW4uaXNTZXQoKSA9
PSAobV9leGNlcHRpb25DaGVja0luZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIHVuc2lnbmVkIGluZGV4KQorICAgIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAg
IDogbV9jb2RlT3JpZ2luSW5kZXgoY29kZU9yaWdpbkluZGV4KQorICAgICAgICBBU1NFUlQobV9y
ZWdpc3RlcmVkIHx8ICFtX2NvZGVPcmlnaW4uaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChtX2Nv
ZGVPcmlnaW4uaXNTZXQoKSA9PSAobV9leGNlcHRpb25DaGVja0luZGV4ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpOworICAgICAgICBtX2NvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luOworICAgICAgICBtX3JlZ2lzdGVyZWQgPSBmYWxzZTsKKyAgICAgICAgbV9leGNlcHRp
b25DaGVja0luZGV4ID0gaW5kZXg7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oY29kZU9y
aWdpbik7CisgICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CiAjZW5kaWYKLSAgICB7Ci0gICAg
ICAgIFVOVVNFRF9QQVJBTShjb2RlT3JpZ2luSW5kZXgpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGFzc2VydENvZGVPcmlnaW5JbmRleCh1bnNpZ25lZCBjb2RlT3JpZ2luSW5kZXgpIGNvbnN0Cisg
ICAgdm9pZCByZWdpc3RlcldpdGhFeGNlcHRpb25DaGVjayhDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjb2RlT3JpZ2lu
SW5kZXgsIGNvZGVPcmlnaW5JbmRleCA8IFVJTlRfTUFYKTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChjb2RlT3JpZ2luSW5kZXgsIGNvZGVPcmlnaW5JbmRleCA9PSBtX2NvZGVPcmlnaW5JbmRleCk7
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBBU1NFUlQobV9jb2RlT3JpZ2luID09IGNv
ZGVPcmlnaW4pOworICAgICAgICBpZiAobV9yZWdpc3RlcmVkKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBBU1NFUlQobV9leGNlcHRpb25DaGVja0luZGV4ID09IGluZGV4KTsKKyAgICAg
ICAgbV9yZWdpc3RlcmVkID0gdHJ1ZTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShjb2Rl
T3JpZ2luKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyNlbmRpZgogICAgIH0KIAor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVPcmlnaW47CisgICAgfQorI2VuZGlm
CisgICAgCiBwcml2YXRlOgogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCBtX2Nv
ZGVPcmlnaW5JbmRleDsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICBib29sIG1f
cmVnaXN0ZXJlZDsKKyAgICB1bnNpZ25lZCBtX2V4Y2VwdGlvbkNoZWNrSW5kZXg7CiAjZW5kaWYK
IH07CiAKQEAgLTEwNywyNSArMTM3LDIyIEBAIHByaXZhdGU6CiAvLyBDYWxscyB0aGF0IG1pZ2h0
IHRocm93IGFuIGV4Y2VwdGlvbiBhbHNvIHJlY29yZCB0aGUgSnVtcCB0YWtlbiBvbiBleGNlcHRp
b24KIC8vICh1bnNldCBpZiBub3QgcHJlc2VudCkgYW5kIGNvZGUgb3JpZ2luIHVzZWQgdG8gcmVj
b3ZlciBoYW5kbGVyL3NvdXJjZSBpbmZvLgogc3RydWN0IENhbGxFeGNlcHRpb25SZWNvcmQgewot
ICAgIENhbGxFeGNlcHRpb25SZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5Ub2tlbiB0b2tlbikKKyAgICBDYWxsRXhjZXB0aW9u
UmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikK
ICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdp
bikKLSAgICAgICAgLCBtX3Rva2VuKHRva2VuKQogICAgIHsKICAgICB9CiAKLSAgICBDYWxsRXhj
ZXB0aW9uUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGV4Y2VwdGlvbkNoZWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2Vu
IHRva2VuKQorICAgIENhbGxFeGNlcHRpb25SZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ssIENvZGVPcmlnaW4gY29kZU9y
aWdpbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNoZWNr
KGV4Y2VwdGlvbkNoZWNrKQogICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQotICAg
ICAgICAsIG1fdG9rZW4odG9rZW4pCiAgICAgewogICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIG1fY2FsbDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2V4Y2VwdGlvbkNoZWNr
OwogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwotICAgIENhbGxCZWdpblRva2VuIG1fdG9r
ZW47CiB9OwogCiBzdHJ1Y3QgUHJvcGVydHlBY2Nlc3NSZWNvcmQgewpAQCAtMjU3LDE5ICsyODQs
MjcgQEAgcHVibGljOgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVs
SWdub3JpbmdXYXRjaHBvaW50cygpKTsKICAgICB9CiAgICAgCi0gICAgLy8gR2V0IGEgdG9rZW4g
Zm9yIGJlZ2lubmluZyBhIGNhbGwsIGFuZCBzZXQgdGhlIGN1cnJlbnQgY29kZSBvcmlnaW4gaW5k
ZXggaW4KLSAgICAvLyB0aGUgY2FsbCBmcmFtZS4KLSAgICBDYWxsQmVnaW5Ub2tlbiBiZWdpbkNh
bGwoKQorICAgIHVuc2lnbmVkIGN1cnJlbnRDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogICAgIHsK
LSAgICAgICAgdW5zaWduZWQgY29kZU9yaWdpbkluZGV4ID0gbV9jdXJyZW50Q29kZU9yaWdpbklu
ZGV4Kys7Ci0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNvZGVPcmlnaW5JbmRleCksIHRh
Z0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRD
b3VudCkpKTsKLSAgICAgICAgcmV0dXJuIENhbGxCZWdpblRva2VuKGNvZGVPcmlnaW5JbmRleCk7
CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRDb2RlT3JpZ2luSW5kZXg7CisgICAgfQorICAgIAor
ICAgIC8vIEdldCBhIHRva2VuIGZvciBiZWdpbm5pbmcgYSBjYWxsLCBhbmQgc2V0IHRoZSBjdXJy
ZW50IGNvZGUgb3JpZ2luIGluZGV4IGluCisgICAgLy8gdGhlIGNhbGwgZnJhbWUuIEZvciBlYWNo
IGJlZ2luQ2FsbCgpIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGV4Y2VwdGlvbgorICAgIC8v
IGNoZWNrLCBhbmQgYWxsIG9mIHRoZSBleGNlcHRpb24gY2hlY2tzIG11c3QgaGF2ZSB0aGUgc2Ft
ZSBDb2RlT3JpZ2luIGFzIHRoZQorICAgIC8vIGJlZ2luQ2FsbCgpLgorICAgIHZvaWQgYmVnaW5D
YWxsKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4mIHRva2VuKQorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCk7CisgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGluZGV4KSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4oUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICB0b2tl
bi5zZXQoY29kZU9yaWdpbiwgaW5kZXgpOwogICAgIH0KIAogICAgIC8vIE5vdGlmeSB0aGUgSklU
IG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbGlua2luZy4KLSAgICB2b2lkIG5vdGlm
eUNhbGwoQ2FsbCBmdW5jdGlvbkNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbEJlZ2lu
VG9rZW4gdG9rZW4pCisgICAgdm9pZCBub3RpZnlDYWxsKENhbGwgZnVuY3Rpb25DYWxsLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuJiB0b2tlbikKICAgICB7Ci0gICAgICAg
IG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2Fs
bCwgY29kZU9yaWdpbiwgdG9rZW4pKTsKKyAgICAgICAgdG9rZW4ucmVnaXN0ZXJXaXRoRXhjZXB0
aW9uQ2hlY2soY29kZU9yaWdpbiwgbV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKTsKKyAgICAgICAg
bV9leGNlcHRpb25DaGVja3MuYXBwZW5kKENhbGxFeGNlcHRpb25SZWNvcmQoZnVuY3Rpb25DYWxs
LCBjb2RlT3JpZ2luKSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQg
Y29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCkBAIC0yNzksMjAgKzMxNCwyNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGZ1bmN0aW9uQ2Fs
bCwgZnVuY3Rpb24pKTsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICB9CisgICAg
CisgICAgdm9pZCBwcmVwYXJlRm9yRXhjZXB0aW9uQ2hlY2soKQorICAgIHsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIobV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKSwgR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9t
IEpJVCBjb2RlLCB3aXRoIGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAgICB2b2lkIGFkZEV4Y2VwdGlv
bkNoZWNrKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdp
blRva2VuIHRva2VuKQorICAgIHZvaWQgYWRkRXhjZXB0aW9uQ2hlY2soQ2FsbCBmdW5jdGlvbkNh
bGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4mIHRva2VuKQogICAgIHsK
LSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIobV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKSwgR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICAgICAgbV9leGNlcHRpb25DaGVj
a3MuYXBwZW5kKENhbGxFeGNlcHRpb25SZWNvcmQoZnVuY3Rpb25DYWxsLCBlbWl0RXhjZXB0aW9u
Q2hlY2soKSwgY29kZU9yaWdpbiwgdG9rZW4pKTsKKyAgICAgICAgcHJlcGFyZUZvckV4Y2VwdGlv
bkNoZWNrKCk7CisgICAgICAgIHRva2VuLnJlZ2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNrKGNvZGVP
cmlnaW4sIG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSk7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZW1pdEV4Y2VwdGlv
bkNoZWNrKCksIGNvZGVPcmlnaW4pKTsKICAgICB9CiAgICAgCiAgICAgLy8gQWRkIGEgY2FsbCBv
dXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhIGZhc3QgZXhjZXB0aW9uIGNoZWNrIHRoYXQgdGVzdHMg
aWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgotICAgIHZvaWQgYWRkRmFzdEV4Y2VwdGlvbkNo
ZWNrKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRv
a2VuIHRva2VuKQorICAgIHZvaWQgYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVuY3Rpb25D
YWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuJiB0b2tlbikKICAgICB7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSksIEdQ
UkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgICAgIHByZXBhcmVGb3JFeGNl
cHRpb25DaGVjaygpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0
cihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZXhjZXB0aW9uQ2hl
Y2ssIGNvZGVPcmlnaW4sIHRva2VuKSk7CisgICAgICAgIHRva2VuLnJlZ2lzdGVyV2l0aEV4Y2Vw
dGlvbkNoZWNrKGNvZGVPcmlnaW4sIG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSk7CisgICAgICAg
IG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2Fs
bCwgZXhjZXB0aW9uQ2hlY2ssIGNvZGVPcmlnaW4pKTsKICAgICB9CiAgICAgCiAgICAgLy8gSGVs
cGVyIG1ldGhvZHMgdG8gZ2V0IHByZWRpY3Rpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyMjI5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdPU1JFeGl0
LmgiCiAjaW5jbHVkZSAiREZHUmVwYXRjaC5oIgorI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2lu
Y2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIK
ICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtODQ5LDcgKzg1MCw2IEBAIHN0YXRpYyB2b2lk
KiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGUKIAogICAgIGV4ZWNDYWxsZWUtPnNldFNjb3Bl
Q2hhaW4oZXhlYy0+c2NvcGVDaGFpbigpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2so
MCk7Ci0gICAgZXhlY0NhbGxlZS0+Y2xlYXJSZXR1cm5QQygpOwogCiAgICAgaWYgKGtpbmQgPT0g
Q29kZUZvckNhbGwpIHsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC04NjIsMTQgKzg2
MiwxNCBAQCBzdGF0aWMgdm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAgICAg
ICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAg
ICBnbG9iYWxEYXRhLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxE
YXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CiAgICAgICAgICAgICBpZiAoZ2xvYmFs
RGF0YS0+ZXhjZXB0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
ICAgIHJldHVybiBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKICAgICAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVl
KTsKICAgICAgICAgfQogICAgIAogICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVO
b25lKTsKICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFG
dW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAogICAgIEFT
U0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwpAQCAtODg0LDE3ICs4ODQsMTcgQEAgc3Rh
dGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZQogICAgICAgICBleGVjQ2FsbGVl
LT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgIGdsb2JhbERhdGEtPmhvc3RD
YWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVu
Y3Rpb24oZXhlY0NhbGxlZSkpOwogICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQot
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwogCiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZv
aWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGNv
bnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpOwogICAgIGV4ZWMtPmdsb2JhbERhdGEo
KS5leGNlcHRpb24gPSBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpOwot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiB9CiAKLWlubGluZSB2b2lkKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CitpbmxpbmUgdm9pZCogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7CkBAIC05MTgsNyArOTE4LDcgQEAgaW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0
YXRlKiBleGVjQ2FsbAogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFi
bGUtPmNvbXBpbGVGb3IoZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKICAgICAg
ICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVh
dGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAg
IH0KICAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0
ZWNvZGVGb3Ioa2luZCk7CiAgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSkpCkBAIC05MjYsNyArOTI2LDcgQEAgaW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRl
KiBleGVjQ2FsbAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7CiAg
ICAgfQotICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCkt
PmdldENhbGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+
cmV0dXJuUEMoKSk7CiAgICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKICAgICAgICAg
Y2FsbExpbmtJbmZvLnNldFNlZW4oKTsKICAgICBlbHNlCkBAIC05MzQsMTYgKzkzNCwxNCBAQCBp
bmxpbmUgdm9pZCogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsCiAgICAgcmV0dXJuIGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KIAotUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRShvcGVyYXRpb25MaW5rQ2FsbCk7Ci12b2lkKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkxpbmtDYWxsV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKLSAgICByZXR1cm4gbGlua0Zv
cihleGVjQ2FsbGVlLCByZXR1cm5BZGRyZXNzLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIGxp
bmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOwogfQogCi1QX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FKG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwotdm9pZCogREZH
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
KQogewotICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIHJldHVybkFkZHJlc3MsIENvZGVG
b3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25z
dHJ1Y3QpOwogfQogCiBpbmxpbmUgdm9pZCogdmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWNDYWxs
ZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTk2NSw3ICs5NjMsNyBAQCBpbmxp
bmUgdm9pZCogdmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWNDCiAgICAgICAgIEpTT2JqZWN0KiBl
cnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvcihleGVjQ2FsbGVlLCBmdW5jdGlv
bi0+c2NvcGUoKSwga2luZCk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgZXhl
Yy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGVycm9yOwotICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwog
ICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
V2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTIyMjk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVk
ZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKKyNpbmNsdWRlICJERkdUaHVua3MuaCIKICNpbmNsdWRl
ICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtOTE2LDYgKzkxNyw3IEBAIHZvaWQgZGZnQnVpbGRQdXRC
eUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMKIHZvaWQgZGZnTGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywg
SlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2Nr
ID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gY2FsbGVyQ29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7CiAgICAgCiAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CiAgICAgCkBAIC05Mjgs
MTEgKzkzMCwxMSBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGluCiAg
ICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbCgmY2FsbExpbmtJbmZvKTsK
ICAgICAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24pLCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGdsb2JhbERhdGEtPmdldENUSVN0dWIo
dmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24pLCBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElTdHVi
KHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKIH0KIAogdm9pZCBkZmdS
ZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMjIyOTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OTgsMTQgKzk5OCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2Rl
CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwogICAgIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoOwogCisgICAgQ2FsbEJlZ2luVG9rZW4gdG9rZW47CisgICAg
bV9qaXQuYmVnaW5DYWxsKG5vZGUuY29kZU9yaWdpbiwgdG9rZW4pOworICAgIAorICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICAKICAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpT
RnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRHUFIpOwotICAgIG1faml0LnN0b3JlUHRy
KHJlc3VsdEdQUiwgY2FsbEZyYW1lU2xvdChSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKTsKKyAg
ICBtX2ppdC5zdG9yZVB0cihyZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdp
c3RlcikpICogUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7CiAKLSAgICBtX2ppdC5hZGRQdHIo
VHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNp
emVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgCiAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW47Ci0g
ICAgQ2FsbEJlZ2luVG9rZW4gdG9rZW4gPSBtX2ppdC5iZWdpbkNhbGwoKTsKICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAgICAgbV9qaXQubm90aWZ5
Q2FsbChmYXN0Q2FsbCwgY29kZU9yaWdpbiwgdG9rZW4pOwogICAgIApAQCAtMTAxMywxNCArMTAx
NSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAgICAgCiAg
ICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgIAotICAgIG1faml0LmFkZFB0cihUcnVzdGVk
SW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJl
Z2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgIHRva2VuID0gbV9qaXQuYmVnaW5DYWxsKCk7Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKHNsb3dDYWxsRnVuY3Rpb24pOwotICAgIG1f
aml0LmFkZEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbCwgY29kZU9yaWdpbiwgdG9rZW4pOwot
ICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKLSAgICB0b2tlbiA9IG1faml0LmJlZ2luQ2FsbCgpOwotICAgIEpJVENvbXBpbGVyOjpD
YWxsIHRoZUNhbGwgPSBtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICBt
X2ppdC5ub3RpZnlDYWxsKHRoZUNhbGwsIGNvZGVPcmlnaW4sIHRva2VuKTsKKyAgICBtX2ppdC5t
b3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgbV9qaXQucHJlcGFyZUZv
ckV4Y2VwdGlvbkNoZWNrKCk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2pp
dC5uZWFyQ2FsbCgpOworICAgIG1faml0Lm5vdGlmeUNhbGwoc2xvd0NhbGwsIGNvZGVPcmlnaW4s
IHRva2VuKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEy
MjI5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTczOCw3ICsxNzM4LDggQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcHJlcGFyZUZvckV4dGVybmFsQ2FsbCgpOwogICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbjsKLSAgICAgICAgQ2FsbEJlZ2luVG9r
ZW4gdG9rZW4gPSBtX2ppdC5iZWdpbkNhbGwoKTsKKyAgICAgICAgQ2FsbEJlZ2luVG9rZW4gdG9r
ZW47CisgICAgICAgIG1faml0LmJlZ2luQ2FsbChjb2RlT3JpZ2luLCB0b2tlbik7CiAgICAgICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAg
ICAgICAgbV9qaXQuYWRkRXhjZXB0aW9uQ2hlY2soY2FsbCwgY29kZU9yaWdpbiwgdG9rZW4pOwog
ICAgICAgICByZXR1cm4gY2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5jcHAJKHJldmlzaW9uIDEyMjI5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJE
RkdGUFJJbmZvLmgiCiAjaW5jbHVkZSAiREZHR1BSSW5mby5oIgogI2luY2x1ZGUgIkRGR09TUkV4
aXRDb21waWxlci5oIgpAQCAtODIsNiArODMsMTk1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBv
c3JFeGl0R2VuZXJhdGlvblQKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
KCJERkcgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpKTsKIH0KIAoraW5saW5lIHZvaWQgZW1p
dFBvaW50ZXJWYWxpZGF0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcG9pbnRlckdQUikK
K3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlzTm9uWmVy
byA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgcG9pbnRlckdQUik7
CisgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICBpc05vblplcm8ubGluaygmaml0KTsKKyAgICBq
aXQucHVzaChwb2ludGVyR1BSKTsKKyAgICBqaXQubG9hZDgocG9pbnRlckdQUiwgcG9pbnRlckdQ
Uik7CisgICAgaml0LnBvcChwb2ludGVyR1BSKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGpp
dCk7CisgICAgVU5VU0VEX1BBUkFNKHBvaW50ZXJHUFIpOworI2VuZGlmCit9CisKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0
YSk7CisgICAgCisgICAgLy8gV2Ugd2lsbCBqdW1wIHRvIGhlcmUgaWYgdGhlIEpJVCBjb2RlIHRo
aW5rcyBpdCdzIG1ha2luZyBhIGNhbGwsIGJ1dCB0aGUKKyAgICAvLyBsaW5raW5nIGhlbHBlciAo
QysrIGNvZGUpIGRlY2lkZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluc3RlYWQuIFdlIHdpbGwK
KyAgICAvLyBoYXZlIHNhdmVkIHRoZSBjYWxsUmV0dXJuSW5kZXggaW4gdGhlIGZpcnN0IGFyZ3Vt
ZW50cyBvZiBKSVRTdGFja0ZyYW1lLgorICAgIC8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuIGFkZHJl
c3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgc28gd2UKKyAgICAvLyBuZWVk
IHRvIHJlbW92ZSBpdCBhbmQgZHJvcCBpdCBvbiB0aGUgZmxvb3IsIHNpbmNlIHdlIGRvbid0IGNh
cmUgYWJvdXQgaXQuCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJ
bmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5wZWVrKEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKKyAgICBq
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUik7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdp
c2VfY2FzdDx2b2lkKj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZh
bGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgIGppdC5qdW1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcgdGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93
IHBhdGggdGh1bmsiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAorICAgIENDYWxs
SGVscGVycyYgaml0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFBfREZHT3BlcmF0aW9uX0Ug
c2xvd1BhdGhGdW5jdGlvbikKK3sKKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQs
IEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgR1BSSW5m
bzo6bm9uQXJnR1BSMiwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAg
ICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQykpOwor
ICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJmdsb2JhbERhdGEt
PnRvcENhbGxGcmFtZSk7CisgICAgaml0LnBva2UoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworICAgIGppdC5zZXR1cEFyZ3VtZW50
c0V4ZWNTdGF0ZSgpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgCisgICAgLy8gVGhpcyBz
bG93IGNhbGwgd2lsbCByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb25lIG9mIHRoZSBmb2xsb3dpbmc6
CisgICAgLy8gMSkgRXhjZXB0aW9uIHRocm93aW5nIHRodW5rLgorICAgIC8vIDIpIEhvc3QgY2Fs
bCByZXR1cm4gdmFsdWUgcmV0dXJuZXIgdGhpbmd5LgorICAgIC8vIDMpIFRoZSBmdW5jdGlvbiB0
byBjYWxsLgorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
CisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlJl
dHVyblBDKSwKKyAgICAgICAgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAg
ICBqaXQuc3RvcmVQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpICogUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQykpOworICAgIGVtaXRQb2ludGVy
VmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAg
aml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNlcnZl
ZE5vblJldHVybkdQUik7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
K30KKworc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Io
CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCit7CisgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0
aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQorICAgIC8vIHNhdmUgdGhlIHJldHVybiBh
ZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2Fs
bAorICAgIC8vIHRvIHBlcmZvcm0gbGlua2luZyBhbmQgbGF6eSBjb21waWxhdGlvbiBpZiBuZWNl
c3NhcnkuIFdlIGV4cGVjdCB0aGUgY2FsbGVlCisgICAgLy8gdG8gYmUgaW4gbm9uQXJnR1BSMC9u
b25BcmdHUFIxIChwYXlsb2FkL3RhZyksIHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUgYWxyZWFkeQor
ICAgIC8vIGJlZW4gYWRqdXN0ZWQsIG5vblByZXNlcnZlZE5vblJldHVybkdQUiBob2xkcyB0aGUg
ZXhjZXB0aW9uIGhhbmRsZXIgaW5kZXgsCisgICAgLy8gYW5kIGFsbCBvdGhlciByZWdpc3RlcnMg
dG8gYmUgYXZhaWxhYmxlIGZvciB1c2UuIFdlIHVzZSBKSVRTdGFja0ZyYW1lOjphcmdzCisgICAg
Ly8gdG8gc2F2ZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWNyb3NzIGNhbGxzLgorICAgIAorICAg
IENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSk7CisgICAgCisgICAgc2xvd1BhdGhGb3Ioaml0
LCBnbG9iYWxEYXRhLCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uTGlua0NhbGwgOiBv
cGVyYXRpb25MaW5rQ29uc3RydWN0KTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcgbGluayAlcyBzbG93
IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIp
KTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0
b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNhbGwpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3sK
KyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKGdsb2JhbERhdGEsIENvZGVGb3JDb25z
dHJ1Y3QpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVu
a0dlbmVyYXRvcigKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKK3sKKyAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0
YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQorICAgIC8vIGp1bXAg
dG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJh
bWUgd2hpbGUgd2UKKyAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJv
cHJpYXRlIERGRyBvcGVyYXRpb24uCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0KGdsb2JhbERhdGEp
OworICAgIAorICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CisKKyAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIGhhdmUgYSBzdG9yeSBmb3IgZWxpbWluYXRpbmcgdGhlc2UgY2hlY2tz
LiBJbiBtYW55IGNhc2VzLAorICAgIC8vIHRoZSBERkcga25vd3MgdGhhdCB0aGUgdmFsdWUgaXMg
ZGVmaW5pdGVseSBhIGNlbGwsIG9yIGRlZmluaXRlbHkgYSBmdW5jdGlvbi4KKyAgICAKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaFRl
c3RQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5vbkFy
Z0dQUjAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICBzbG93Q2FzZS5h
cHBlbmQoCisgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpub25BcmdHUFIxLAorICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyNlbmRpZgorICAgIHNsb3dD
YXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJkpTRnVuY3Rpb246OnNfaW5mbykpKTsKKyAgICAK
KyAgICAvLyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KKyAgICAKKyAgICBqaXQu
bG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgR1BSSW5mbzo6
bm9uQXJnR1BSMik7CisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4
ZWN1dGFibGVCYXNlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAKKyAgICAvLyBOb3cgd2Ug
a25vdyB0aGF0IHdlIGhhdmUgYSBDb2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFr
aW5nIGEgZmFzdAorICAgIC8vIGNhbGwuCisgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZlNjb3BlQ2hhaW4oKSksCisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEpOworICAg
IGppdC5zdG9yZVB0cigKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSwKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3Rlcikp
ICogUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7CisgICAgCisgICAgaml0LmxvYWRQdHIoCisg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRh
YmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlRm9yKGtpbmQpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVn
VDApOworICAgIAorICAgIC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2lsbCByZXR1cm4gYmFj
ayB0byBERkcgY29kZS4KKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDApOworCisgICAgc2xvd0Nhc2UubGlu
aygmaml0KTsKKyAgICAKKyAgICAvLyBIZXJlIHdlIGRvbid0IGtub3cgYW55dGhpbmcsIHNvIHJl
dmVydCB0byB0aGUgZnVsbCBzbG93IHBhdGguCisgICAgCisgICAgc2xvd1BhdGhGb3Ioaml0LCBn
bG9iYWxEYXRhLCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uVmlydHVhbENhbGwgOiBv
cGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcgdmlydHVhbCAl
cyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0
cnVjdCIpKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9y
VGh1bmtHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNhbGwpOworfQorCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKGdsb2Jh
bERhdGEsIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuaAkocmV2aXNpb24gMTIyMjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTQgQEAgbmFtZXNw
YWNlIERGRyB7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5r
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCShyZXZpc2lvbiAxMjIyOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczOSw3ICs3MzksNyBAQCBKSVRDb2RlIEpJVDo6
cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9
IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CiAgICAgICAgIGluZm8uY2FsbFR5cGUgPSBt
X2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxUeXBlOwogICAgICAgICBp
bmZvLmJ5dGVjb2RlSW5kZXggPSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ld
LmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gQ29kZUxv
Y2F0aW9uTGFiZWwocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVybkxvY2F0aW9uKSk7CisgICAgICAgIGlu
Zm8uY2FsbFJldHVybkxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1f
Y2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVybkxvY2F0aW9uKTsK
ICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aEJlZ2luKTsKICAgICAgICAg
aW5mby5ob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoT3RoZXIpOwogICAgIH0KQEAg
LTgwMiwxMiArODAyLDEyIEBAIHZvaWQgSklUOjpsaW5rRm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwg
Q28KIAogICAgIC8vIFBhdGNoIHRoZSBzbG93IHBhdGNoIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0
byB0cnkgdG8gbGluay4KICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsTGlua0luZm8tPmNh
bGxSZXR1cm5Mb2NhdGlvbiksIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbCgp
KTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24sIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbCgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxMaW5r
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1
YWxDb25zdHJ1Y3QoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24sIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3Ry
dWN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDEyMjI5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDYgKzE3NiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICByZXR1cm4gaW50
cmluc2ljKCk7CiAgICAgICAgICAgICByZXR1cm4gTm9JbnRyaW5zaWM7CiAgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb2RlRm9yKENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihF
eGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbCk7CisgICAgICAgICAgICBBU1NFUlQoa2lu
ZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9y
KENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGtpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihFeGVjdXRhYmxlQmFzZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCk7CisgICAgICAgICAg
ICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVj
dCk7CisgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTIyMjk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTQsNyArMTU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29s
IGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAKICAg
ICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwot
CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAgICAgICAgIAo=
</data>
<flag name="commit-queue"
          id="160134"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151628</attachid>
            <date>2012-07-11 00:51:39 -0700</date>
            <delta_ts>2012-07-11 01:05:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>virtualcall_patch_6.diff</filename>
            <type>text/plain</type>
            <size>46583</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMzA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBA
CisyMDEyLTA3LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGZhc3QgdmlydHVhbCBjYWxscworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5MjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudHMgdmlydHVhbCBjYWxs
IHN1cHBvcnQgaW4gdGhlIHN0eWxlIG9mIHRoZSBvbGQgSklULCB3aXRoIHRoZQorICAgICAgICBj
YXZlYXQgdGhhdCB3ZSBzdGlsbCB1c2UgdGhlIHNhbWUgc2xvdyBwYXRoIGZvciBib3RoIEludGVy
bmFsRnVuY3Rpb24KKyAgICAgICAgY2FsbHMgYW5kIEpTRnVuY3Rpb24gY2FsbHMuIEFsc28gcmF0
aW9uYWxpemVkIHRoZSB3YXkgdGhhdCBvdXIKKyAgICAgICAgQ29kZU9yaWdpbiBpbmRpY2VzIHRp
ZSBpbnRvIGV4Y2VwdGlvbiBjaGVja3MgKHByZXZpb3VzbHkgaXQgd2FzIGEKKyAgICAgICAgc3Ry
YW5nZSBvbmUtdG8tb25lIG1hcHBpbmcgd2l0aCBmYWlybHkgbGltaXRlZCBhc3NlcnRpb25zOyBu
b3cgaXQncyBhCisgICAgICAgIG9uZS10by1tYW55IG1hcHBpbmcgZm9yIENvZGVPcmlnaW5zIHRv
IGV4Y2VwdGlvbiBjaGVja3MsIHJlc3BlY3RpdmVseSkuCisgICAgICAgIEkgYWxzbyB0b29rIHRo
ZSBvcHBvcnR1bml0eSB0byBjbGVhbiB1cAorICAgICAgICBDYWxsTGlua0luZm86OmNhbGxSZXR1
cm5Mb2NhdGlvbiwgd2hpY2ggcHJldmlvdXNseSB3YXMgZWl0aGVyIGEgQ2FsbCBvcgorICAgICAg
ICBhIE5lYXJDYWxsLiBOb3cgaXQncyBqdXN0IGEgTmVhckNhbGwuIEFzIHdlbGwsIGV4Y2VwdGlv
bnMgZHVyaW5nIHNsb3cKKyAgICAgICAgcGF0aCBjYWxsIHJlc29sdXRpb24gYXJlIG5vdyBoYW5k
bGVkIGJ5IHJldHVybmluZyBhbiBleGNlcHRpb24gdGhyb3dpbmcKKyAgICAgICAgdGh1bmsgcmF0
aGVyIHRoYW4gcmV0dXJuaW5nIG51bGwuIEFuZCBmaW5hbGx5LCBJIG1hZGUgYSBmZXcgdGhpbmdz
CisgICAgICAgIHB1YmxpYyB0aGF0IHdlcmUgcHJldmlvdXNseSBwcml2YXRlLXdpdGgtbG90cy1v
Zi1mcmllbmRzLCBiZWNhdXNlIEkKKyAgICAgICAgdHJ1bHkgZGVzcGlzZSB0aGUgdGhvdWdodCBv
ZiBsaXN0aW5nIGVhY2ggdGh1bmsgZ2VuZXJhdGluZyBmdW5jdGlvbiBhcworICAgICAgICBhIGZy
aWVuZCBvZiBKU1ZhbHVlIGFuZCBmcmllbmRzLgorICAgICAgICAKKyAgICAgICAgKiBieXRlY29k
ZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnVubGluayk6
CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6CisgICAgICAgIChDYWxsTGlua0lu
Zm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29k
ZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmlzU2V0KToK
KyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QXNzZW1ibHlIZWxwZXJzOjpBc3NlbWJseUhlbHBlcnMpOgorICAgICAgICAqIGRmZy9ERkdDQ2Fs
bEhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDQ2FsbEhlbHBlcnM6OkNDYWxsSGVscGVy
cyk6CisgICAgICAgICogZGZnL0RGR0dQUkluZm8uaDoKKyAgICAgICAgKEdQUkluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVu
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkNhbGxCZWdpblRva2VuOjpDYWxsQmVnaW5Ub2tlbik6CisgICAgICAgIChKU0M6OkRGRzo6
Q2FsbEJlZ2luVG9rZW46On5DYWxsQmVnaW5Ub2tlbik6CisgICAgICAgIChDYWxsQmVnaW5Ub2tl
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46OnNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46OnJlZ2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDYWxsQmVnaW5Ub2tlbjo6Y29kZU9yaWdpbik6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbEV4Y2VwdGlvblJlY29yZDo6Q2FsbEV4Y2VwdGlvblJlY29yZCk6CisgICAg
ICAgIChDYWxsRXhjZXB0aW9uUmVjb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxl
cjo6Y3VycmVudENvZGVPcmlnaW5JbmRleCk6CisgICAgICAgIChKSVRDb21waWxlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmJlZ2luQ2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpwcmVwYXJlRm9yRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjphZGRFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmFkZEZhc3RFeGNlcHRpb25DaGVjayk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
ZmdMaW5rRm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpzbG93UGF0aEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0ZvclRodW5rR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpERkc6OnZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6
dmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6dmlydHVhbENv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9yKToKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEV4ZWN1dGFibGVCYXNlKToKKyAgICAgICAg
KEpTQzo6RXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZUZvcik6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3IpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAgICogcnVu
dGltZS9KU1ZhbHVlLmg6CisgICAgICAgIChKU1ZhbHVlKToKKwogMjAxMi0wNy0xMCAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEyMjE2Nik6
IEl0IG1hZGUgMTcwIHRlc3RzIGNyYXNoIG9uIDMyIGJpdCBwbGF0Zm9ybXMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lv
biAxMjIyOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNhbGxMaW5r
SW5mby5oIgogCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRGR1RodW5r
cy5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC0z
OCwxMiArMzksMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhKU0dsb2JhbERhdGEmIAog
ICAgIAogICAgIGlmIChpc0RGRykgewogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGNh
bGxUeXBlID09IENvbnN0cnVjdCA/IERGRzo6b3BlcmF0aW9uTGlua0NvbnN0cnVjdCA6IERGRzo6
b3BlcmF0aW9uTGlua0NhbGwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0
dXJuTG9jYXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyBnbG9iYWxEYXRhLmdldENUSVN0
dWIoREZHOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpIDogZ2xvYmFsRGF0YS5nZXRDVElT
dHViKERGRzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKSk7CiAjZWxzZQogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogICAgIH0gZWxzZQotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsUmV0dXJuTG9jYXRpb24p
LCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFs
Q29uc3RydWN0TGluaygpIDogZ2xvYmFsRGF0YS5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGxMaW5r
KCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNh
bGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDb25z
dHJ1Y3RMaW5rKCkgOiBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7
CiAgICAgaGFzU2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKICAgICBjYWxsZWUuY2xlYXIoKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
aAkocmV2aXNpb24gMTIyMjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBDYWxs
TGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICAgICAgICAgIHJlbW92ZSgpOwogICAg
IH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbjsgLy8gaXQncyBh
IG5lYXIgY2FsbCBpbiB0aGUgb2xkIEpJVCwgb3IgYSBub3JtYWwgY2FsbCBpbiBERkcKKyAgICBD
b2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CiAgICAgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQ
YXRoT3RoZXI7CiAgICAgSklUV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24g
MTIyMjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7CiAgICAgCiAgICAgQ29kZU9yaWdpbigp
Ci0gICAgICAgIDogYnl0ZWNvZGVJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCkpCisgICAgICAgIDogYnl0ZWNvZGVJbmRleCgoMSA8PCAyOSkgLSAxKQogICAgICAgICAs
IHZhbHVlUHJvZmlsZU9mZnNldCgwKQogICAgICAgICAsIGlubGluZUNhbGxGcmFtZSgwKQogICAg
IHsKQEAgLTYzLDcgKzYzLDcgQEAgc3RydWN0IENvZGVPcmlnaW4gewogICAgICAgICBBU1NFUlQo
dmFsdWVQcm9maWxlT2Zmc2V0IDwgKDF1IDw8IDMpKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBp
c1NldCgpIGNvbnN0IHsgcmV0dXJuIGJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpOyB9CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGJ5
dGVjb2RlSW5kZXggIT0gKDEgPDwgMjkpIC0gMTsgfQogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXhGb3JWYWx1ZVByb2ZpbGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTIyMjk2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsMTIgKzQ2LDEzIEBAIHB1YmxpYzoKICAgICBBc3NlbWJseUhlbHBl
cnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAg
ICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCi0gICAgICAgICwgbV9iYXNlbGluZUNvZGVCbG9jayhjb2RlQmxvY2stPmJhc2VsaW5l
VmVyc2lvbigpKQorICAgICAgICAsIG1fYmFzZWxpbmVDb2RlQmxvY2soY29kZUJsb2NrID8gY29k
ZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSA6IDApCiAgICAgewotICAgICAgICBBU1NFUlQobV9j
b2RlQmxvY2spOwotICAgICAgICBBU1NFUlQobV9iYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAg
IEFTU0VSVCghbV9iYXNlbGluZUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgIEFT
U0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOworICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsKKyAgICAgICAgICAgIEFTU0VSVCht
X2Jhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9iYXNlbGluZUNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9iYXNlbGluZUNvZGVC
bG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgfQog
ICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJs
b2NrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJz
LmgJKHJldmlzaW9uIDEyMjI5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0Nh
bGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBDQ2FsbEhlbHBlcnMgOiBwdWJsaWMgQXNzZW1i
bHlIZWxwZXJzIHsKIHB1YmxpYzoKLSAgICBDQ2FsbEhlbHBlcnMoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBDQ2FsbEhlbHBlcnMoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDApCiAgICAgICAgIDogQXNz
ZW1ibHlIZWxwZXJzKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICB7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgJKHJldmlzaW9uIDEyMjI5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzMsNiArMjczLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1l
bnRHUFIxID0gWDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQ
UlJlZyBub25BcmdHUFIwID0gWDg2UmVnaXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyBub25BcmdHUFIxID0gWDg2UmVnaXN0ZXJzOjplYng7IC8vIHJlZ1QzCisg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25BcmdHUFIyID0gWDg2UmVnaXN0ZXJzOjplc2k7IC8v
IHJlZ1Q0CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lz
dGVyczo6ZWF4OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVH
UFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3RlcnM6OmVjeDsKQEAgLTM0NCw2
ICszNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjUg
PSBYODZSZWdpc3RlcnM6OnI5OyAgLy8gcmVnVDcKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5v
bkFyZ0dQUjAgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIG5vbkFyZ0dQUjEgPSBYODZSZWdpc3RlcnM6OmVieDsgLy8gcmVnVDMKKyAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjIgPSBYODZSZWdpc3RlcnM6OnIxMDsgLy8gcmVnVDgK
ICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVnaXN0ZXJzOjpl
YXg7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBY
ODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblBy
ZXNlcnZlZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6ZXNpOwpAQCAtNDE2LDYgKzQxOCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50R1BSMyA9IEFSTVJl
Z2lzdGVyczo6cjM7IC8vIEZJWE1FIQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJnR1BS
MCA9IEFSTVJlZ2lzdGVyczo6cjQ7IC8vIHJlZ1QzCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBu
b25BcmdHUFIxID0gQVJNUmVnaXN0ZXJzOjpyODsgLy8gcmVnVDQKKyAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIG5vbkFyZ0dQUjIgPSBBUk1SZWdpc3RlcnM6OnI5OyAvLyByZWdUNQogICAgIHN0YXRp
YyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBBUk1SZWdpc3RlcnM6OnIwOyAvLyByZWdU
MAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gQVJNUmVnaXN0ZXJz
OjpyMTsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJl
dHVybkdQUiA9IEFSTVJlZ2lzdGVyczo6cjI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTIyMjk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
Myw3ICsxNTMsNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAg
ICAgICAgIHVuc2lnbmVkIHJldHVybkFkZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFk
ZHJlc3NPZmZzZXQobV9leGNlcHRpb25DaGVja3NbaV0ubV9jYWxsKTsKICAgICAgICAgY29kZU9y
aWdpbnNbaV0uY29kZU9yaWdpbiA9IHJlY29yZC5tX2NvZGVPcmlnaW47CiAgICAgICAgIGNvZGVP
cmlnaW5zW2ldLmNhbGxSZXR1cm5PZmZzZXQgPSByZXR1cm5BZGRyZXNzT2Zmc2V0OwotICAgICAg
ICByZWNvcmQubV90b2tlbi5hc3NlcnRDb2RlT3JpZ2luSW5kZXgoaSk7CiAgICAgfQogICAgIAog
ICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcyhtX3Byb3BlcnR5
QWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTE4OSw3ICsxODgsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29k
ZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CiAgICAgICAgIGluZm8uY2FsbFR5cGUgPSBtX2pzQ2Fs
bHNbaV0ubV9jYWxsVHlwZTsKICAgICAgICAgaW5mby5pc0RGRyA9IHRydWU7Ci0gICAgICAgIGlu
Zm8uY2FsbFJldHVybkxvY2F0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsKSk7CisgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIoKG1fZ2xvYmFsRGF0YS0+Z2V0
Q1RJU3R1YihpbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gbGlua0Nv
bnN0cnVjdFRodW5rR2VuZXJhdG9yIDogbGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpOwog
ICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2Fs
bHNbaV0ubV90YXJnZXRUb0NoZWNrKTsKICAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9mYXN0Q2FsbCk7CiAgICAg
fQpAQCAtMjgwLDcgKzI4MCw4IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihK
SVRDb2QKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRP
RihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwogCi0g
ICAgQ2FsbEJlZ2luVG9rZW4gdG9rZW4gPSBiZWdpbkNhbGwoKTsKKyAgICBDYWxsQmVnaW5Ub2tl
biB0b2tlbjsKKyAgICBiZWdpbkNhbGwoQ29kZU9yaWdpbigwKSwgdG9rZW4pOwogICAgIENhbGwg
Y2FsbFJlZ2lzdGVyRmlsZUNoZWNrID0gY2FsbCgpOwogICAgIG5vdGlmeUNhbGwoY2FsbFJlZ2lz
dGVyRmlsZUNoZWNrLCBDb2RlT3JpZ2luKDApLCB0b2tlbik7CiAgICAganVtcChmcm9tUmVnaXN0
ZXJGaWxlQ2hlY2spOwpAQCAtMjk3LDcgKzI5OCw3IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBp
bGVGdW5jdGlvbihKSVRDb2QKICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJl
Z1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhm
cm9tQXJpdHlDaGVjaywgdGhpcyk7CiAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBwb2tlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXpl
b2Yodm9pZCopKTsKLSAgICB0b2tlbiA9IGJlZ2luQ2FsbCgpOworICAgIGJlZ2luQ2FsbChDb2Rl
T3JpZ2luKDApLCB0b2tlbik7CiAgICAgQ2FsbCBjYWxsQXJpdHlDaGVjayA9IGNhbGwoKTsKICAg
ICBub3RpZnlDYWxsKGNhbGxBcml0eUNoZWNrLCBDb2RlT3JpZ2luKDApLCB0b2tlbik7CiAgICAg
bW92ZShHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTIy
Mjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NiwyOCArNzYsNTggQEAgY2xhc3MgQ2FsbEJlZ2luVG9rZW4gewogcHVi
bGljOgogICAgIENhbGxCZWdpblRva2VuKCkKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAg
IDogbV9jb2RlT3JpZ2luSW5kZXgoVUlOVF9NQVgpCisgICAgICAgIDogbV9yZWdpc3RlcmVkKGZh
bHNlKQorICAgICAgICAsIG1fZXhjZXB0aW9uQ2hlY2tJbmRleChzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpCiAjZW5kaWYKICAgICB7CiAgICAgfQogICAgIAotICAgIGV4cGxp
Y2l0IENhbGxCZWdpblRva2VuKHVuc2lnbmVkIGNvZGVPcmlnaW5JbmRleCkKKyAgICB+Q2FsbEJl
Z2luVG9rZW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZCB8fCAhbV9jb2Rl
T3JpZ2luLmlzU2V0KCkpOworICAgICAgICBBU1NFUlQobV9jb2RlT3JpZ2luLmlzU2V0KCkgPT0g
KG1fZXhjZXB0aW9uQ2hlY2tJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCB1bnNpZ25lZCBpbmRleCkKKyAgICB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICA6
IG1fY29kZU9yaWdpbkluZGV4KGNvZGVPcmlnaW5JbmRleCkKKyAgICAgICAgQVNTRVJUKG1fcmVn
aXN0ZXJlZCB8fCAhbV9jb2RlT3JpZ2luLmlzU2V0KCkpOworICAgICAgICBBU1NFUlQobV9jb2Rl
T3JpZ2luLmlzU2V0KCkgPT0gKG1fZXhjZXB0aW9uQ2hlY2tJbmRleCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpKTsKKyAgICAgICAgbV9jb2RlT3JpZ2luID0gY29kZU9y
aWdpbjsKKyAgICAgICAgbV9yZWdpc3RlcmVkID0gZmFsc2U7CisgICAgICAgIG1fZXhjZXB0aW9u
Q2hlY2tJbmRleCA9IGluZGV4OworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvZGVPcmln
aW4pOworICAgICAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwogI2VuZGlmCi0gICAgewotICAgICAg
ICBVTlVTRURfUEFSQU0oY29kZU9yaWdpbkluZGV4KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBh
c3NlcnRDb2RlT3JpZ2luSW5kZXgodW5zaWduZWQgY29kZU9yaWdpbkluZGV4KSBjb25zdAorICAg
IHZvaWQgcmVnaXN0ZXJXaXRoRXhjZXB0aW9uQ2hlY2soQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1
bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY29kZU9yaWdpbklu
ZGV4LCBjb2RlT3JpZ2luSW5kZXggPCBVSU5UX01BWCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
Y29kZU9yaWdpbkluZGV4LCBjb2RlT3JpZ2luSW5kZXggPT0gbV9jb2RlT3JpZ2luSW5kZXgpOwor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgQVNTRVJUKG1fY29kZU9yaWdpbiA9PSBjb2Rl
T3JpZ2luKTsKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJlZCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgQVNTRVJUKG1fZXhjZXB0aW9uQ2hlY2tJbmRleCA9PSBpbmRleCk7CisgICAgICAg
IG1fcmVnaXN0ZXJlZCA9IHRydWU7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oY29kZU9y
aWdpbik7CisgICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisjZW5kaWYKICAgICB9CiAKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlT3JpZ2luOworICAgIH0KKyNlbmRpZgor
ICAgIAogcHJpdmF0ZToKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgdW5zaWduZWQgbV9jb2Rl
T3JpZ2luSW5kZXg7CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgYm9vbCBtX3Jl
Z2lzdGVyZWQ7CisgICAgdW5zaWduZWQgbV9leGNlcHRpb25DaGVja0luZGV4OwogI2VuZGlmCiB9
OwogCkBAIC0xMDcsMjUgKzEzNywyMiBAQCBwcml2YXRlOgogLy8gQ2FsbHMgdGhhdCBtaWdodCB0
aHJvdyBhbiBleGNlcHRpb24gYWxzbyByZWNvcmQgdGhlIEp1bXAgdGFrZW4gb24gZXhjZXB0aW9u
CiAvLyAodW5zZXQgaWYgbm90IHByZXNlbnQpIGFuZCBjb2RlIG9yaWdpbiB1c2VkIHRvIHJlY292
ZXIgaGFuZGxlci9zb3VyY2UgaW5mby4KIHN0cnVjdCBDYWxsRXhjZXB0aW9uUmVjb3JkIHsKLSAg
ICBDYWxsRXhjZXB0aW9uUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4gdG9rZW4pCisgICAgQ2FsbEV4Y2VwdGlvblJl
Y29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAg
ICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4p
Ci0gICAgICAgICwgbV90b2tlbih0b2tlbikKICAgICB7CiAgICAgfQogCi0gICAgQ2FsbEV4Y2Vw
dGlvblJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBleGNlcHRpb25DaGVjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5Ub2tlbiB0
b2tlbikKKyAgICBDYWxsRXhjZXB0aW9uUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGws
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkNoZWNrLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAgICwgbV9leGNlcHRpb25DaGVjayhl
eGNlcHRpb25DaGVjaykKICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKLSAgICAg
ICAgLCBtX3Rva2VuKHRva2VuKQogICAgIHsKICAgICB9CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBtX2NhbGw7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9leGNlcHRpb25DaGVjazsK
ICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKLSAgICBDYWxsQmVnaW5Ub2tlbiBtX3Rva2Vu
OwogfTsKIAogc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKQEAgLTI1NywxOSArMjg0LDI3
IEBAIHB1YmxpYzoKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbEln
bm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAotICAgIC8vIEdldCBhIHRva2VuIGZv
ciBiZWdpbm5pbmcgYSBjYWxsLCBhbmQgc2V0IHRoZSBjdXJyZW50IGNvZGUgb3JpZ2luIGluZGV4
IGluCi0gICAgLy8gdGhlIGNhbGwgZnJhbWUuCi0gICAgQ2FsbEJlZ2luVG9rZW4gYmVnaW5DYWxs
KCkKKyAgICB1bnNpZ25lZCBjdXJyZW50Q29kZU9yaWdpbkluZGV4KCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHVuc2lnbmVkIGNvZGVPcmlnaW5JbmRleCA9IG1fY3VycmVudENvZGVPcmlnaW5JbmRl
eCsrOwotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjb2RlT3JpZ2luSW5kZXgpLCB0YWdG
b3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291
bnQpKSk7Ci0gICAgICAgIHJldHVybiBDYWxsQmVnaW5Ub2tlbihjb2RlT3JpZ2luSW5kZXgpOwor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50Q29kZU9yaWdpbkluZGV4OworICAgIH0KKyAgICAKKyAg
ICAvLyBHZXQgYSB0b2tlbiBmb3IgYmVnaW5uaW5nIGEgY2FsbCwgYW5kIHNldCB0aGUgY3VycmVu
dCBjb2RlIG9yaWdpbiBpbmRleCBpbgorICAgIC8vIHRoZSBjYWxsIGZyYW1lLiBGb3IgZWFjaCBi
ZWdpbkNhbGwoKSB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBleGNlcHRpb24KKyAgICAvLyBj
aGVjaywgYW5kIGFsbCBvZiB0aGUgZXhjZXB0aW9uIGNoZWNrcyBtdXN0IGhhdmUgdGhlIHNhbWUg
Q29kZU9yaWdpbiBhcyB0aGUKKyAgICAvLyBiZWdpbkNhbGwoKS4KKyAgICB2b2lkIGJlZ2luQ2Fs
bChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuJiB0b2tlbikKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbV9leGNlcHRpb25DaGVja3Muc2l6ZSgpOworICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpbmRleCksIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgdG9rZW4u
c2V0KGNvZGVPcmlnaW4sIGluZGV4KTsKICAgICB9CiAKICAgICAvLyBOb3RpZnkgdGhlIEpJVCBv
ZiBhIGNhbGwgdGhhdCBkb2VzIG5vdCByZXF1aXJlIGxpbmtpbmcuCi0gICAgdm9pZCBub3RpZnlD
YWxsKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRv
a2VuIHRva2VuKQorICAgIHZvaWQgbm90aWZ5Q2FsbChDYWxsIGZ1bmN0aW9uQ2FsbCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5Ub2tlbiYgdG9rZW4pCiAgICAgewotICAgICAgICBt
X2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoQ2FsbEV4Y2VwdGlvblJlY29yZChmdW5jdGlvbkNhbGws
IGNvZGVPcmlnaW4sIHRva2VuKSk7CisgICAgICAgIHRva2VuLnJlZ2lzdGVyV2l0aEV4Y2VwdGlv
bkNoZWNrKGNvZGVPcmlnaW4sIG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSk7CisgICAgICAgIG1f
ZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwg
Y29kZU9yaWdpbikpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNv
ZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpAQCAtMjc5LDIwICszMTQsMjcgQEAgcHVi
bGljOgogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChmdW5jdGlvbkNhbGws
IGZ1bmN0aW9uKSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgfQorICAgIAor
ICAgIHZvaWQgcHJlcGFyZUZvckV4Y2VwdGlvbkNoZWNrKCkKKyAgICB7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSksIEdQUkluZm86Om5vblByZXNl
cnZlZE5vblJldHVybkdQUik7CisgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBK
SVQgY29kZSwgd2l0aCBhbiBleGNlcHRpb24gY2hlY2suCi0gICAgdm9pZCBhZGRFeGNlcHRpb25D
aGVjayhDYWxsIGZ1bmN0aW9uQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5U
b2tlbiB0b2tlbikKKyAgICB2b2lkIGFkZEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVuY3Rpb25DYWxs
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuJiB0b2tlbikKICAgICB7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSksIEdQUklu
Zm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tz
LmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZW1pdEV4Y2VwdGlvbkNo
ZWNrKCksIGNvZGVPcmlnaW4sIHRva2VuKSk7CisgICAgICAgIHByZXBhcmVGb3JFeGNlcHRpb25D
aGVjaygpOworICAgICAgICB0b2tlbi5yZWdpc3RlcldpdGhFeGNlcHRpb25DaGVjayhjb2RlT3Jp
Z2luLCBtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCkpOworICAgICAgICBtX2V4Y2VwdGlvbkNoZWNr
cy5hcHBlbmQoQ2FsbEV4Y2VwdGlvblJlY29yZChmdW5jdGlvbkNhbGwsIGVtaXRFeGNlcHRpb25D
aGVjaygpLCBjb2RlT3JpZ2luKSk7CiAgICAgfQogICAgIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0
IGZyb20gSklUIGNvZGUsIHdpdGggYSBmYXN0IGV4Y2VwdGlvbiBjaGVjayB0aGF0IHRlc3RzIGlm
IHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KLSAgICB2b2lkIGFkZEZhc3RFeGNlcHRpb25DaGVj
ayhDYWxsIGZ1bmN0aW9uQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5Ub2tl
biB0b2tlbikKKyAgICB2b2lkIGFkZEZhc3RFeGNlcHRpb25DaGVjayhDYWxsIGZ1bmN0aW9uQ2Fs
bCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5Ub2tlbiYgdG9rZW4pCiAgICAgewot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCkpLCBHUFJJ
bmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgICAgICBwcmVwYXJlRm9yRXhjZXB0
aW9uQ2hlY2soKTsKICAgICAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGJyYW5jaFRlc3RQdHIo
WmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBtX2V4Y2VwdGlvbkNoZWNr
cy5hcHBlbmQoQ2FsbEV4Y2VwdGlvblJlY29yZChmdW5jdGlvbkNhbGwsIGV4Y2VwdGlvbkNoZWNr
LCBjb2RlT3JpZ2luLCB0b2tlbikpOworICAgICAgICB0b2tlbi5yZWdpc3RlcldpdGhFeGNlcHRp
b25DaGVjayhjb2RlT3JpZ2luLCBtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCkpOworICAgICAgICBt
X2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoQ2FsbEV4Y2VwdGlvblJlY29yZChmdW5jdGlvbkNhbGws
IGV4Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgfQogICAgIAogICAgIC8vIEhlbHBl
ciBtZXRob2RzIHRvIGdldCBwcmVkaWN0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjIyOTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5o
IgogI2luY2x1ZGUgIkRGR1JlcGF0Y2guaCIKKyNpbmNsdWRlICJERkdUaHVua3MuaCIKICNpbmNs
dWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTg0OSw3ICs4NTAsNiBAQCBzdGF0aWMgdm9pZCog
aGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAKICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNo
YWluKGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDAp
OwotICAgIGV4ZWNDYWxsZWUtPmNsZWFyUmV0dXJuUEMoKTsKIAogICAgIGlmIChraW5kID09IENv
ZGVGb3JDYWxsKSB7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtODYyLDE0ICs4NjIs
MTQgQEAgc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZQogICAgICAgICAg
ICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICAgICAg
Z2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0
YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwogICAgICAgICAgICAgaWYgKGdsb2JhbERh
dGEtPmV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogCiAgICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSk7
CiAgICAgICAgIH0KICAgICAKICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSk7CiAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVOb3RBRnVu
Y3Rpb25FcnJvcihleGVjLCBjYWxsZWUpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIGdsb2JhbERhdGEtPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKICAgICBBU1NF
UlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKQEAgLTg4NCwxNyArODg0LDE3IEBAIHN0YXRp
YyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGUKICAgICAgICAgZXhlY0NhbGxlZS0+
c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICBnbG9iYWxEYXRhLT5ob3N0Q2Fs
bFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKIAogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChjb25z
dHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVOb25lKTsKICAgICBleGVjLT5nbG9iYWxEYXRhKCku
ZXhjZXB0aW9uID0gY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKTsKLSAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OwogfQogCi1pbmxpbmUgdm9pZCogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQor
aW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2Fs
bGVyRnJhbWUoKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOwpAQCAtOTE4LDcgKzkxOCw3IEBAIGlubGluZSB2b2lkKiBsaW5rRm9yKEV4ZWNTdGF0
ZSogZXhlY0NhbGwKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxl
LT5jb21waWxlRm9yKGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCk7CiAgICAgICAg
IGlmIChlcnJvcikgewogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRl
U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICB9
CiAgICAgICAgIGNvZGVCbG9jayA9ICZmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVj
b2RlRm9yKGtpbmQpOwogICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpKQpAQCAtOTI2LDcgKzkyNiw3IEBAIGlubGluZSB2b2lkKiBsaW5rRm9yKEV4ZWNTdGF0ZSog
ZXhlY0NhbGwKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS5hZGRyZXNzRm9yQ2FsbCgpOwogICAg
IH0KLSAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5n
ZXRDYWxsTGlua0luZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJl
dHVyblBDKCkpOwogICAgIGlmICghY2FsbExpbmtJbmZvLnNlZW5PbmNlKCkpCiAgICAgICAgIGNh
bGxMaW5rSW5mby5zZXRTZWVuKCk7CiAgICAgZWxzZQpAQCAtOTM0LDE2ICs5MzQsMTQgQEAgaW5s
aW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAgIHJldHVybiBjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKLVBfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0Uob3BlcmF0aW9uTGlua0NhbGwpOwotdm9pZCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ2FsbFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQordm9pZCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3Io
ZXhlY0NhbGxlZSwgcmV0dXJuQWRkcmVzcywgQ29kZUZvckNhbGwpOworICAgIHJldHVybiBsaW5r
Rm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKIH0KIAotUF9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRShvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKLXZvaWQqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQordm9pZCogREZH
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkK
IHsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCByZXR1cm5BZGRyZXNzLCBDb2RlRm9y
Q29uc3RydWN0KTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3Ry
dWN0KTsKIH0KIAogaW5saW5lIHZvaWQqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC05NjUsNyArOTYzLDcgQEAgaW5saW5l
IHZvaWQqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQwogICAgICAgICBKU09iamVjdCogZXJy
b3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoZXhlY0NhbGxlZSwgZnVuY3Rpb24t
PnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGV4ZWMt
Pmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsKLSAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdp
dGhBcml0eUNoZWNrRm9yKGtpbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEyMjI5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVycy5oIgogI2luY2x1ZGUg
IkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiREZHVGh1bmtzLmgiCiAjaW5jbHVkZSAi
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1
ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTkxNiw2ICs5MTcsNyBAQCB2b2lkIGRmZ0J1aWxkUHV0QnlJ
ZExpc3QoRXhlY1N0YXRlKiBleGVjCiB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpT
RnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9
IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9IGNhbGxlckNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpOwogICAgIAogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAgIApAQCAtOTI4LDEx
ICs5MzAsMTEgQEAgdm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbgogICAg
ICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoJmNhbGxMaW5rSW5mbyk7CiAg
ICAgCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
KSwgb3BlcmF0aW9uVmlydHVhbENhbGwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHZp
cnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
KSwgb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Y2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2
aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKIHZvaWQgZGZnUmVz
ZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTIyMjk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwNywxNiArMTAwNywxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlJiBub2RlCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwog
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAorICAgIENhbGxCZWdpblRva2Vu
IHRva2VuOworICAgIG1faml0LmJlZ2luQ2FsbChub2RlLmNvZGVPcmlnaW4sIHRva2VuKTsKKyAg
ICAKKyAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251
bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7CisgICAgCiAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQ
YXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZVBheWxvYWRHUFIsIHRhcmdldFRv
Q2hlY2spKTsKICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBjYWxsZWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSkpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlUGF5
bG9hZEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1
bHRQYXlsb2FkR1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRQYXlsb2FkR1BSLCBjYWxs
RnJhbWVQYXlsb2FkU2xvdChSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKTsKLSAgICBtX2ppdC5z
dG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIGNh
bGxGcmFtZVRhZ1Nsb3QoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7Ci0KLSAgICBtX2ppdC5h
ZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVy
cyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAg
bV9qaXQuc3RvcmVQdHIocmVzdWx0UGF5bG9hZEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4gKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgbV9qaXQuc3Rv
cmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFp
biArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OwogCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVP
cmlnaW47Ci0gICAgQ2FsbEJlZ2luVG9rZW4gdG9rZW4gPSBtX2ppdC5iZWdpbkNhbGwoKTsKICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAgICAgbV9q
aXQubm90aWZ5Q2FsbChmYXN0Q2FsbCwgY29kZU9yaWdpbiwgdG9rZW4pOwogCkBAIC0xMDI0LDE1
ICsxMDI2LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKIAog
ICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKIAotICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1t
MzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lz
dGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwotICAgIG1faml0LnBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICB0b2tlbiA9IG1f
aml0LmJlZ2luQ2FsbCgpOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQu
YXBwZW5kQ2FsbChzbG93Q2FsbEZ1bmN0aW9uKTsKLSAgICBtX2ppdC5hZGRGYXN0RXhjZXB0aW9u
Q2hlY2soc2xvd0NhbGwsIGNvZGVPcmlnaW4sIHRva2VuKTsKLSAgICBtX2ppdC5hZGRQdHIoVHJ1
c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgdG9rZW4gPSBt
X2ppdC5iZWdpbkNhbGwoKTsKLSAgICBKSVRDb21waWxlcjo6Q2FsbCB0aGVDYWxsID0gbV9qaXQu
Y2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbCh0aGVD
YWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CisgICAgbV9qaXQubW92ZShjYWxsZWVQYXlsb2FkR1BS
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBtX2ppdC5tb3ZlKGNhbGxlZVRhZ0dQUiwgR1BS
SW5mbzo6bm9uQXJnR1BSMSk7CisgICAgbV9qaXQucHJlcGFyZUZvckV4Y2VwdGlvbkNoZWNrKCk7
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAg
IG1faml0Lm5vdGlmeUNhbGwoc2xvd0NhbGwsIGNvZGVPcmlnaW4sIHRva2VuKTsKIAogICAgIGRv
bmUubGluaygmbV9qaXQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyMjI5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk5OCwxNCArOTk4LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUm
IG5vZGUKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CiAgICAg
SklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7CiAKKyAgICBDYWxsQmVnaW5Ub2tlbiB0b2tlbjsK
KyAgICBtX2ppdC5iZWdpbkNhbGwobm9kZS5jb2RlT3JpZ2luLCB0b2tlbik7CisgICAgCisgICAg
bV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OworICAgIAogICAgIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOwogICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSksIHJlc3VsdEdQUik7Ci0gICAgbV9qaXQuc3Rv
cmVQdHIocmVzdWx0R1BSLCBjYWxsRnJhbWVTbG90KFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikp
OworICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKTsKIAotICAgIG1faml0LmFk
ZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAK
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdp
bjsKLSAgICBDYWxsQmVnaW5Ub2tlbiB0b2tlbiA9IG1faml0LmJlZ2luQ2FsbCgpOwogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKICAgICBtX2ppdC5u
b3RpZnlDYWxsKGZhc3RDYWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CiAgICAgCkBAIC0xMDEzLDE0
ICsxMDE1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAg
ICAKICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAgbV9qaXQuYWRkUHRyKFRy
dXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7Ci0gICAgdG9rZW4gPSBtX2ppdC5iZWdpbkNhbGwoKTsKLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0LmFwcGVuZENhbGwoc2xvd0NhbGxGdW5jdGlvbik7Ci0g
ICAgbV9qaXQuYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKHNsb3dDYWxsLCBjb2RlT3JpZ2luLCB0b2tl
bik7Ci0gICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwotICAgIHRva2VuID0gbV9qaXQuYmVnaW5DYWxsKCk7Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgdGhlQ2FsbCA9IG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwot
ICAgIG1faml0Lm5vdGlmeUNhbGwodGhlQ2FsbCwgY29kZU9yaWdpbiwgdG9rZW4pOworICAgIG1f
aml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBtX2ppdC5wcmVw
YXJlRm9yRXhjZXB0aW9uQ2hlY2soKTsKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9
IG1faml0Lm5lYXJDYWxsKCk7CisgICAgbV9qaXQubm90aWZ5Q2FsbChzbG93Q2FsbCwgY29kZU9y
aWdpbiwgdG9rZW4pOwogICAgIAogICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTIyMjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzM4LDcgKzE3MzgsOCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7CiAgICAgICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiA9IGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luOwotICAgICAgICBDYWxsQmVn
aW5Ub2tlbiB0b2tlbiA9IG1faml0LmJlZ2luQ2FsbCgpOworICAgICAgICBDYWxsQmVnaW5Ub2tl
biB0b2tlbjsKKyAgICAgICAgbV9qaXQuYmVnaW5DYWxsKGNvZGVPcmlnaW4sIHRva2VuKTsKICAg
ICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24p
OwogICAgICAgICBtX2ppdC5hZGRFeGNlcHRpb25DaGVjayhjYWxsLCBjb2RlT3JpZ2luLCB0b2tl
bik7CiAgICAgICAgIHJldHVybiBjYWxsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGh1bmtzLmNwcAkocmV2aXNpb24gMTIyMjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVycy5oIgogI2luY2x1
ZGUgIkRGR0ZQUkluZm8uaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCiAjaW5jbHVkZSAiREZH
T1NSRXhpdENvbXBpbGVyLmgiCkBAIC04Miw2ICs4MywyMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIikpOwogfQogCitpbmxpbmUgdm9p
ZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwb2ludGVy
R1BSKQoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNO
b25aZXJvID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBwb2ludGVy
R1BSKTsKKyAgICBqaXQuYnJlYWtwb2ludCgpOworICAgIGlzTm9uWmVyby5saW5rKCZqaXQpOwor
ICAgIGppdC5wdXNoKHBvaW50ZXJHUFIpOworICAgIGppdC5sb2FkOChwb2ludGVyR1BSLCBwb2lu
dGVyR1BSKTsKKyAgICBqaXQucG9wKHBvaW50ZXJHUFIpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oaml0KTsKKyAgICBVTlVTRURfUEFSQU0ocG9pbnRlckdQUik7CisjZW5kaWYKK30KKworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdChnbG9i
YWxEYXRhKTsKKyAgICAKKyAgICAvLyBXZSB3aWxsIGp1bXAgdG8gaGVyZSBpZiB0aGUgSklUIGNv
ZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEgY2FsbCwgYnV0IHRoZQorICAgIC8vIGxpbmtpbmcgaGVs
cGVyIChDKysgY29kZSkgZGVjaWRlZCB0byB0aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4gV2Ug
d2lsbAorICAgIC8vIGhhdmUgc2F2ZWQgdGhlIGNhbGxSZXR1cm5JbmRleCBpbiB0aGUgZmlyc3Qg
YXJndW1lbnRzIG9mIEpJVFN0YWNrRnJhbWUuCisgICAgLy8gTm90ZSB0aGF0IHRoZSByZXR1cm4g
YWRkcmVzcyB3aWxsIGJlIG9uIHRoZSBzdGFjayBhdCB0aGlzIHBvaW50LCBzbyB3ZQorICAgIC8v
IG5lZWQgdG8gcmVtb3ZlIGl0IGFuZCBkcm9wIGl0IG9uIHRoZSBmbG9vciwgc2luY2Ugd2UgZG9u
J3QgY2FyZSBhYm91dCBpdC4KKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxs
KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnBlZWsoR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOwor
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Yml0d2lzZV9jYXN0PHZvaWQqPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFy
Z0dQUjApOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgaml0Lmp1
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkRGRyB0aHJvdyBleGNlcHRpb24gZnJvbSBjYWxs
IHNsb3cgcGF0aCB0aHVuayIpKTsKK30KKworc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCisgICAg
Q0NhbGxIZWxwZXJzJiBqaXQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUF9ERkdPcGVyYXRp
b25fRSBzbG93UGF0aEZ1bmN0aW9uKQoreworICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9u
KGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgaml0LnN0b3JlUHRyKAorICAgICAgICBH
UFJJbmZvOjpub25BcmdHUFIyLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAg
ICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlJldHVyblBD
KSk7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFs
RGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBqaXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisgICAgaml0LnNldHVwQXJn
dW1lbnRzRXhlY1N0YXRlKCk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc2xvd1BhdGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAKKyAgICAvLyBU
aGlzIHNsb3cgY2FsbCB3aWxsIHJldHVybiB0aGUgYWRkcmVzcyBvZiBvbmUgb2YgdGhlIGZvbGxv
d2luZzoKKyAgICAvLyAxKSBFeGNlcHRpb24gdGhyb3dpbmcgdGh1bmsuCisgICAgLy8gMikgSG9z
dCBjYWxsIHJldHVybiB2YWx1ZSByZXR1cm5lciB0aGluZ3kuCisgICAgLy8gMykgVGhlIGZ1bmN0
aW9uIHRvIGNhbGwuCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIFJlZ2lzdGVyRmls
ZTo6UmV0dXJuUEMpLAorICAgICAgICBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIp
OworICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KDApLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlJldHVyblBDKSk7CisgICAgZW1pdFBv
aW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsK
KyAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVua0dlbmVy
YXRvcigKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKK3sKKyAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9y
IGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCisgICAgLy8gc2F2ZSB0aGUgcmV0
dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlv
biBjYWxsCisgICAgLy8gdG8gcGVyZm9ybSBsaW5raW5nIGFuZCBsYXp5IGNvbXBpbGF0aW9uIGlm
IG5lY2Vzc2FyeS4gV2UgZXhwZWN0IHRoZSBjYWxsZWUKKyAgICAvLyB0byBiZSBpbiBub25BcmdH
UFIwL25vbkFyZ0dQUjEgKHBheWxvYWQvdGFnKSwgdGhlIGNhbGwgZnJhbWUgdG8gaGF2ZSBhbHJl
YWR5CisgICAgLy8gYmVlbiBhZGp1c3RlZCwgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSIGhvbGRz
IHRoZSBleGNlcHRpb24gaGFuZGxlciBpbmRleCwKKyAgICAvLyBhbmQgYWxsIG90aGVyIHJlZ2lz
dGVycyB0byBiZSBhdmFpbGFibGUgZm9yIHVzZS4gV2UgdXNlIEpJVFN0YWNrRnJhbWU6OmFyZ3MK
KyAgICAvLyB0byBzYXZlIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhY3Jvc3MgY2FsbHMuCisgICAg
CisgICAgQ0NhbGxIZWxwZXJzIGppdChnbG9iYWxEYXRhKTsKKyAgICAKKyAgICBzbG93UGF0aEZv
cihqaXQsIGdsb2JhbERhdGEsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25MaW5rQ2Fs
bCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkRGRyBsaW5rICVz
IHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3Ry
dWN0IikpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dl
bmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ2FsbCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQoreworICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgQ29kZUZv
ckNvbnN0cnVjdCk7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZv
clRodW5rR2VuZXJhdG9yKAorICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQoreworICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0
aGUgc3RhY2ssIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCisgICAgLy8g
anVtcCB0byB0aGUgY2FsbGVlLCBvciBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2Fs
bCBmcmFtZSB3aGlsZSB3ZQorICAgIC8vIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbCB0byB0aGUg
YXBwcm9wcmlhdGUgREZHIG9wZXJhdGlvbi4KKworICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFs
RGF0YSk7CisgICAgCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKworICAg
IC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGZvciBlbGltaW5hdGluZyB0aGVzZSBj
aGVja3MuIEluIG1hbnkgY2FzZXMsCisgICAgLy8gdGhlIERGRyBrbm93cyB0aGF0IHRoZSB2YWx1
ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3IgZGVmaW5pdGVseSBhIGZ1bmN0aW9uLgorICAgIAor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJh
bmNoVGVzdFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6
bm9uQXJnR1BSMCwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisjZWxzZQorICAgIHNsb3dD
YXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6bm9uQXJnR1BSMSwKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisjZW5kaWYKKyAgICBzbG93
Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZKU0Z1bmN0aW9uOjpzX2luZm8pKSk7CisgICAg
CisgICAgLy8gTm93IHdlIGtub3cgd2UgaGF2ZSBhIEpTRnVuY3Rpb24uCisgICAgCisgICAgaml0
LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdH
UFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCisgICAgICAgIEdQUkluZm86
Om5vbkFyZ0dQUjIpOworICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaDMy
KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLCBF
eGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKGtpbmQpKSwKKyAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgCisgICAgLy8gTm93IHdl
IGtub3cgdGhhdCB3ZSBoYXZlIGEgQ29kZUJsb2NrLCBhbmQgd2UncmUgY29tbWl0dGVkIHRvIG1h
a2luZyBhIGZhc3QKKyAgICAvLyBjYWxsLgorICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgR1BSSW5mbzo6bm9u
QXJnR1BSMSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihSZWdpc3RlcikpICogUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7CisjZWxz
ZQorICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSwKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdp
c3RlcikpICogUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluICsKKyAgICAgICAgICAgIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICBq
aXQuc3RvcmUzMigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiArCisgICAg
ICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpKTsKKyNlbmRpZgorICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9m
SklUQ29kZUZvcihraW5kKSksCisgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICAv
LyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gREZHIGNvZGUuCisg
ICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDApOworICAgIGppdC5q
dW1wKEdQUkluZm86OnJlZ1QwKTsKKworICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAgCisg
ICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwg
c2xvdyBwYXRoLgorICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgZ2xvYmFsRGF0YSwga2luZCA9
PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvblZpcnR1YWxDYWxsIDogb3BlcmF0aW9uVmlydHVhbENv
bnN0cnVjdCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwg
JmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKKyAgICAg
ICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiREZHIHZpcnR1YWwgJXMgc2xvdyBwYXRoIHRodW5r
Iiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7Cit9CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKGds
b2JhbERhdGEsIENvZGVGb3JDYWxsKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1
YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7Cisg
ICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ29u
c3RydWN0KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHJl
dmlzaW9uIDEyMjI5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE0IEBAIG5hbWVzcGFjZSBERkcgewogCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqKTsKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKik7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMTIyMjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MzksNyArNzM5LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENv
ZGVQdHIqIGZ1bgogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2Fs
bExpbmtJbmZvKGkpOwogICAgICAgICBpbmZvLmNhbGxUeXBlID0gbV9jYWxsU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsVHlwZTsKICAgICAgICAgaW5mby5ieXRlY29kZUluZGV4
ID0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ieXRlY29kZUluZGV4Owot
ICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbikpOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7CiAgICAgICAgIGluZm8uaG90
UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2NhbGxTdHJ1Y3R1cmVTdHViQ29t
cGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVy
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21w
aWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsKICAgICB9CkBAIC04MDIsMTIgKzgwMiwxMiBA
QCB2b2lkIEpJVDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvCiAKICAgICAvLyBQYXRj
aCB0aGUgc2xvdyBwYXRjaCBzbyB3ZSBkbyBub3QgY29udGludWUgdG8gdHJ5IHRvIGxpbmsuCiAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24p
LCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGwoKSk7CisgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxE
YXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGwoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbiksIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0KCkpOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9u
LCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCShyZXZpc2lvbiAxMjIyOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw2ICsxNzYsMjIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpYygpOwogICAgICAg
ICAgICAgcmV0dXJuIE5vSW50cmluc2ljOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29kZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQor
ICAgICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1f
aml0Q29kZUZvckNhbGwpOworICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0
cnVjdCk7CisgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNl
LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJh
c2UsIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpOworICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0g
Q29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4
ZWN1dGFibGVCYXNlLCBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QpOworICAgICAgICB9CiAj
ZW5kaWYKIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDEyMjI5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQorICAgICAgICAKICAgICBw
cml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHJldmlz
aW9uIDEyMjI5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIExMSW50OjpEYXRhOwogCiAgICAgcHVibGljOgorI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgICAgIGVudW0geyBJbnQzMlRhZyA9ICAgICAgICAweGZmZmZmZmZmIH07
CisgICAgICAgIGVudW0geyBCb29sZWFuVGFnID0gICAgICAweGZmZmZmZmZlIH07CisgICAgICAg
IGVudW0geyBOdWxsVGFnID0gICAgICAgICAweGZmZmZmZmZkIH07CisgICAgICAgIGVudW0geyBV
bmRlZmluZWRUYWcgPSAgICAweGZmZmZmZmZjIH07CisgICAgICAgIGVudW0geyBDZWxsVGFnID0g
ICAgICAgICAweGZmZmZmZmZiIH07CisgICAgICAgIGVudW0geyBFbXB0eVZhbHVlVGFnID0gICAw
eGZmZmZmZmZhIH07CisgICAgICAgIGVudW0geyBEZWxldGVkVmFsdWVUYWcgPSAweGZmZmZmZmY5
IH07CisKKyAgICAgICAgZW51bSB7IExvd2VzdFRhZyA9ICBEZWxldGVkVmFsdWVUYWcgfTsKKyNl
bmRpZgorCiAgICAgICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBlbmNvZGUoSlNWYWx1ZSk7CiAg
ICAgICAgIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFbmNvZGVkSlNWYWx1ZSk7CiAKQEAgLTI3OCwx
NiArMjkwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAqIGNlbGwsIGludGVnZXIgYW5k
IGJvb2wgdmFsdWVzIHRoZSBsb3dlciAzMiBiaXRzICh0aGUgJ3BheWxvYWQnKSBjb250YWluIHRo
ZSBwb2ludGVyCiAgICAgICAgICAqIGludGVnZXIgb3IgYm9vbGVhbiB2YWx1ZTsgaW4gdGhlIGNh
c2Ugb2YgYWxsIG90aGVyIHRhZ3MgdGhlIHBheWxvYWQgaXMgMC4KICAgICAgICAgICovCi0gICAg
ICAgIGVudW0geyBJbnQzMlRhZyA9ICAgICAgICAweGZmZmZmZmZmIH07Ci0gICAgICAgIGVudW0g
eyBCb29sZWFuVGFnID0gICAgICAweGZmZmZmZmZlIH07Ci0gICAgICAgIGVudW0geyBOdWxsVGFn
ID0gICAgICAgICAweGZmZmZmZmZkIH07Ci0gICAgICAgIGVudW0geyBVbmRlZmluZWRUYWcgPSAg
ICAweGZmZmZmZmZjIH07Ci0gICAgICAgIGVudW0geyBDZWxsVGFnID0gICAgICAgICAweGZmZmZm
ZmZiIH07Ci0gICAgICAgIGVudW0geyBFbXB0eVZhbHVlVGFnID0gICAweGZmZmZmZmZhIH07Ci0g
ICAgICAgIGVudW0geyBEZWxldGVkVmFsdWVUYWcgPSAweGZmZmZmZmY5IH07Ci0KLSAgICAgICAg
ZW51bSB7IExvd2VzdFRhZyA9ICBEZWxldGVkVmFsdWVUYWcgfTsKLQogICAgICAgICB1aW50MzJf
dCB0YWcoKSBjb25zdDsKICAgICAgICAgaW50MzJfdCBwYXlsb2FkKCkgY29uc3Q7CiAjZWxpZiBV
U0UoSlNWQUxVRTY0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151636</attachid>
            <date>2012-07-11 01:05:38 -0700</date>
            <delta_ts>2012-07-11 01:15:10 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>virtualcall_patch_7.diff</filename>
            <type>text/plain</type>
            <size>46932</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMzA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBA
CisyMDEyLTA3LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGZhc3QgdmlydHVhbCBjYWxscworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5MjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudHMgdmlydHVhbCBjYWxs
IHN1cHBvcnQgaW4gdGhlIHN0eWxlIG9mIHRoZSBvbGQgSklULCB3aXRoIHRoZQorICAgICAgICBj
YXZlYXQgdGhhdCB3ZSBzdGlsbCB1c2UgdGhlIHNhbWUgc2xvdyBwYXRoIGZvciBib3RoIEludGVy
bmFsRnVuY3Rpb24KKyAgICAgICAgY2FsbHMgYW5kIEpTRnVuY3Rpb24gY2FsbHMuIEFsc28gcmF0
aW9uYWxpemVkIHRoZSB3YXkgdGhhdCBvdXIKKyAgICAgICAgQ29kZU9yaWdpbiBpbmRpY2VzIHRp
ZSBpbnRvIGV4Y2VwdGlvbiBjaGVja3MgKHByZXZpb3VzbHkgaXQgd2FzIGEKKyAgICAgICAgc3Ry
YW5nZSBvbmUtdG8tb25lIG1hcHBpbmcgd2l0aCBmYWlybHkgbGltaXRlZCBhc3NlcnRpb25zOyBu
b3cgaXQncyBhCisgICAgICAgIG9uZS10by1tYW55IG1hcHBpbmcgZm9yIENvZGVPcmlnaW5zIHRv
IGV4Y2VwdGlvbiBjaGVja3MsIHJlc3BlY3RpdmVseSkuCisgICAgICAgIEkgYWxzbyB0b29rIHRo
ZSBvcHBvcnR1bml0eSB0byBjbGVhbiB1cAorICAgICAgICBDYWxsTGlua0luZm86OmNhbGxSZXR1
cm5Mb2NhdGlvbiwgd2hpY2ggcHJldmlvdXNseSB3YXMgZWl0aGVyIGEgQ2FsbCBvcgorICAgICAg
ICBhIE5lYXJDYWxsLiBOb3cgaXQncyBqdXN0IGEgTmVhckNhbGwuIEFzIHdlbGwsIGV4Y2VwdGlv
bnMgZHVyaW5nIHNsb3cKKyAgICAgICAgcGF0aCBjYWxsIHJlc29sdXRpb24gYXJlIG5vdyBoYW5k
bGVkIGJ5IHJldHVybmluZyBhbiBleGNlcHRpb24gdGhyb3dpbmcKKyAgICAgICAgdGh1bmsgcmF0
aGVyIHRoYW4gcmV0dXJuaW5nIG51bGwuIEFuZCBmaW5hbGx5LCBJIG1hZGUgYSBmZXcgdGhpbmdz
CisgICAgICAgIHB1YmxpYyB0aGF0IHdlcmUgcHJldmlvdXNseSBwcml2YXRlLXdpdGgtbG90cy1v
Zi1mcmllbmRzLCBiZWNhdXNlIEkKKyAgICAgICAgdHJ1bHkgZGVzcGlzZSB0aGUgdGhvdWdodCBv
ZiBsaXN0aW5nIGVhY2ggdGh1bmsgZ2VuZXJhdGluZyBmdW5jdGlvbiBhcworICAgICAgICBhIGZy
aWVuZCBvZiBKU1ZhbHVlIGFuZCBmcmllbmRzLgorICAgICAgICAKKyAgICAgICAgKiBieXRlY29k
ZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnVubGluayk6
CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6CisgICAgICAgIChDYWxsTGlua0lu
Zm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29k
ZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmlzU2V0KToK
KyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QXNzZW1ibHlIZWxwZXJzOjpBc3NlbWJseUhlbHBlcnMpOgorICAgICAgICAqIGRmZy9ERkdDQ2Fs
bEhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDQ2FsbEhlbHBlcnM6OkNDYWxsSGVscGVy
cyk6CisgICAgICAgICogZGZnL0RGR0dQUkluZm8uaDoKKyAgICAgICAgKEdQUkluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVu
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkNhbGxCZWdpblRva2VuOjpDYWxsQmVnaW5Ub2tlbik6CisgICAgICAgIChKU0M6OkRGRzo6
Q2FsbEJlZ2luVG9rZW46On5DYWxsQmVnaW5Ub2tlbik6CisgICAgICAgIChDYWxsQmVnaW5Ub2tl
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46OnNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbEJlZ2luVG9rZW46OnJlZ2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDYWxsQmVnaW5Ub2tlbjo6Y29kZU9yaWdpbik6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbEV4Y2VwdGlvblJlY29yZDo6Q2FsbEV4Y2VwdGlvblJlY29yZCk6CisgICAg
ICAgIChDYWxsRXhjZXB0aW9uUmVjb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxl
cjo6Y3VycmVudENvZGVPcmlnaW5JbmRleCk6CisgICAgICAgIChKSVRDb21waWxlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmJlZ2luQ2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpwcmVwYXJlRm9yRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjphZGRFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmFkZEZhc3RFeGNlcHRpb25DaGVjayk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
ZmdMaW5rRm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpzbG93UGF0aEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0ZvclRodW5rR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpERkc6OnZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6
dmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6dmlydHVhbENv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9yKToKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEV4ZWN1dGFibGVCYXNlKToKKyAgICAgICAg
KEpTQzo6RXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZUZvcik6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3IpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAgICogcnVu
dGltZS9KU1ZhbHVlLmg6CisgICAgICAgIChKU1ZhbHVlKToKKwogMjAxMi0wNy0xMCAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEyMjE2Nik6
IEl0IG1hZGUgMTcwIHRlc3RzIGNyYXNoIG9uIDMyIGJpdCBwbGF0Zm9ybXMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lv
biAxMjIyOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNhbGxMaW5r
SW5mby5oIgogCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRGR1RodW5r
cy5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC0z
OCwxMiArMzksMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhKU0dsb2JhbERhdGEmIAog
ICAgIAogICAgIGlmIChpc0RGRykgewogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGNh
bGxUeXBlID09IENvbnN0cnVjdCA/IERGRzo6b3BlcmF0aW9uTGlua0NvbnN0cnVjdCA6IERGRzo6
b3BlcmF0aW9uTGlua0NhbGwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0
dXJuTG9jYXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyBnbG9iYWxEYXRhLmdldENUSVN0
dWIoREZHOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpIDogZ2xvYmFsRGF0YS5nZXRDVElT
dHViKERGRzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKSk7CiAjZWxzZQogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogICAgIH0gZWxzZQotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsUmV0dXJuTG9jYXRpb24p
LCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFs
Q29uc3RydWN0TGluaygpIDogZ2xvYmFsRGF0YS5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGxMaW5r
KCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNh
bGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDb25z
dHJ1Y3RMaW5rKCkgOiBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7
CiAgICAgaGFzU2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKICAgICBjYWxsZWUuY2xlYXIoKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
aAkocmV2aXNpb24gMTIyMjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBDYWxs
TGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICAgICAgICAgIHJlbW92ZSgpOwogICAg
IH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbjsgLy8gaXQncyBh
IG5lYXIgY2FsbCBpbiB0aGUgb2xkIEpJVCwgb3IgYSBub3JtYWwgY2FsbCBpbiBERkcKKyAgICBD
b2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CiAgICAgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQ
YXRoT3RoZXI7CiAgICAgSklUV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24g
MTIyMjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7CiAgICAgCiAgICAgQ29kZU9yaWdpbigp
Ci0gICAgICAgIDogYnl0ZWNvZGVJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCkpCisgICAgICAgIDogYnl0ZWNvZGVJbmRleCgoMSA8PCAyOSkgLSAxKQogICAgICAgICAs
IHZhbHVlUHJvZmlsZU9mZnNldCgwKQogICAgICAgICAsIGlubGluZUNhbGxGcmFtZSgwKQogICAg
IHsKQEAgLTYzLDcgKzYzLDcgQEAgc3RydWN0IENvZGVPcmlnaW4gewogICAgICAgICBBU1NFUlQo
dmFsdWVQcm9maWxlT2Zmc2V0IDwgKDF1IDw8IDMpKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBp
c1NldCgpIGNvbnN0IHsgcmV0dXJuIGJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpOyB9CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGJ5
dGVjb2RlSW5kZXggIT0gKDEgPDwgMjkpIC0gMTsgfQogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXhGb3JWYWx1ZVByb2ZpbGUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTIyMjk2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsMTIgKzQ2LDEzIEBAIHB1YmxpYzoKICAgICBBc3NlbWJseUhlbHBl
cnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAg
ICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCi0gICAgICAgICwgbV9iYXNlbGluZUNvZGVCbG9jayhjb2RlQmxvY2stPmJhc2VsaW5l
VmVyc2lvbigpKQorICAgICAgICAsIG1fYmFzZWxpbmVDb2RlQmxvY2soY29kZUJsb2NrID8gY29k
ZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSA6IDApCiAgICAgewotICAgICAgICBBU1NFUlQobV9j
b2RlQmxvY2spOwotICAgICAgICBBU1NFUlQobV9iYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAg
IEFTU0VSVCghbV9iYXNlbGluZUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgIEFT
U0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOworICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsKKyAgICAgICAgICAgIEFTU0VSVCht
X2Jhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9iYXNlbGluZUNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9iYXNlbGluZUNvZGVC
bG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgfQog
ICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJs
b2NrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJz
LmgJKHJldmlzaW9uIDEyMjI5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0Nh
bGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBDQ2FsbEhlbHBlcnMgOiBwdWJsaWMgQXNzZW1i
bHlIZWxwZXJzIHsKIHB1YmxpYzoKLSAgICBDQ2FsbEhlbHBlcnMoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBDQ2FsbEhlbHBlcnMoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDApCiAgICAgICAgIDogQXNz
ZW1ibHlIZWxwZXJzKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICB7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgJKHJldmlzaW9uIDEyMjI5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzMsNiArMjczLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1l
bnRHUFIxID0gWDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQ
UlJlZyBub25BcmdHUFIwID0gWDg2UmVnaXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyBub25BcmdHUFIxID0gWDg2UmVnaXN0ZXJzOjplYng7IC8vIHJlZ1QzCisg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25BcmdHUFIyID0gWDg2UmVnaXN0ZXJzOjplc2k7IC8v
IHJlZ1Q0CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lz
dGVyczo6ZWF4OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVH
UFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3RlcnM6OmVjeDsKQEAgLTM0NCw2
ICszNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjUg
PSBYODZSZWdpc3RlcnM6OnI5OyAgLy8gcmVnVDcKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5v
bkFyZ0dQUjAgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIG5vbkFyZ0dQUjEgPSBYODZSZWdpc3RlcnM6OmVieDsgLy8gcmVnVDMKKyAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjIgPSBYODZSZWdpc3RlcnM6OnIxMDsgLy8gcmVnVDgK
ICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVnaXN0ZXJzOjpl
YXg7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBY
ODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblBy
ZXNlcnZlZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6ZXNpOwpAQCAtNDE2LDYgKzQxOCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50R1BSMyA9IEFSTVJl
Z2lzdGVyczo6cjM7IC8vIEZJWE1FIQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJnR1BS
MCA9IEFSTVJlZ2lzdGVyczo6cjQ7IC8vIHJlZ1QzCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBu
b25BcmdHUFIxID0gQVJNUmVnaXN0ZXJzOjpyODsgLy8gcmVnVDQKKyAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIG5vbkFyZ0dQUjIgPSBBUk1SZWdpc3RlcnM6OnI5OyAvLyByZWdUNQogICAgIHN0YXRp
YyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBBUk1SZWdpc3RlcnM6OnIwOyAvLyByZWdU
MAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gQVJNUmVnaXN0ZXJz
OjpyMTsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJl
dHVybkdQUiA9IEFSTVJlZ2lzdGVyczo6cjI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTIyMjk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
Myw3ICsxNTMsNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAg
ICAgICAgIHVuc2lnbmVkIHJldHVybkFkZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFk
ZHJlc3NPZmZzZXQobV9leGNlcHRpb25DaGVja3NbaV0ubV9jYWxsKTsKICAgICAgICAgY29kZU9y
aWdpbnNbaV0uY29kZU9yaWdpbiA9IHJlY29yZC5tX2NvZGVPcmlnaW47CiAgICAgICAgIGNvZGVP
cmlnaW5zW2ldLmNhbGxSZXR1cm5PZmZzZXQgPSByZXR1cm5BZGRyZXNzT2Zmc2V0OwotICAgICAg
ICByZWNvcmQubV90b2tlbi5hc3NlcnRDb2RlT3JpZ2luSW5kZXgoaSk7CiAgICAgfQogICAgIAog
ICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcyhtX3Byb3BlcnR5
QWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTE4OSw3ICsxODgsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29k
ZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CiAgICAgICAgIGluZm8uY2FsbFR5cGUgPSBtX2pzQ2Fs
bHNbaV0ubV9jYWxsVHlwZTsKICAgICAgICAgaW5mby5pc0RGRyA9IHRydWU7Ci0gICAgICAgIGlu
Zm8uY2FsbFJldHVybkxvY2F0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsKSk7CisgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIoKG1fZ2xvYmFsRGF0YS0+Z2V0
Q1RJU3R1YihpbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gbGlua0Nv
bnN0cnVjdFRodW5rR2VuZXJhdG9yIDogbGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpOwog
ICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2Fs
bHNbaV0ubV90YXJnZXRUb0NoZWNrKTsKICAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9mYXN0Q2FsbCk7CiAgICAg
fQpAQCAtMjgwLDcgKzI4MCw4IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihK
SVRDb2QKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRP
RihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwogCi0g
ICAgQ2FsbEJlZ2luVG9rZW4gdG9rZW4gPSBiZWdpbkNhbGwoKTsKKyAgICBDYWxsQmVnaW5Ub2tl
biB0b2tlbjsKKyAgICBiZWdpbkNhbGwoQ29kZU9yaWdpbigwKSwgdG9rZW4pOwogICAgIENhbGwg
Y2FsbFJlZ2lzdGVyRmlsZUNoZWNrID0gY2FsbCgpOwogICAgIG5vdGlmeUNhbGwoY2FsbFJlZ2lz
dGVyRmlsZUNoZWNrLCBDb2RlT3JpZ2luKDApLCB0b2tlbik7CiAgICAganVtcChmcm9tUmVnaXN0
ZXJGaWxlQ2hlY2spOwpAQCAtMjk3LDcgKzI5OCw3IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBp
bGVGdW5jdGlvbihKSVRDb2QKICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJl
Z1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhm
cm9tQXJpdHlDaGVjaywgdGhpcyk7CiAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBwb2tlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXpl
b2Yodm9pZCopKTsKLSAgICB0b2tlbiA9IGJlZ2luQ2FsbCgpOworICAgIGJlZ2luQ2FsbChDb2Rl
T3JpZ2luKDApLCB0b2tlbik7CiAgICAgQ2FsbCBjYWxsQXJpdHlDaGVjayA9IGNhbGwoKTsKICAg
ICBub3RpZnlDYWxsKGNhbGxBcml0eUNoZWNrLCBDb2RlT3JpZ2luKDApLCB0b2tlbik7CiAgICAg
bW92ZShHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTIy
Mjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NiwyOCArNzYsNTggQEAgY2xhc3MgQ2FsbEJlZ2luVG9rZW4gewogcHVi
bGljOgogICAgIENhbGxCZWdpblRva2VuKCkKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAg
IDogbV9jb2RlT3JpZ2luSW5kZXgoVUlOVF9NQVgpCisgICAgICAgIDogbV9yZWdpc3RlcmVkKGZh
bHNlKQorICAgICAgICAsIG1fZXhjZXB0aW9uQ2hlY2tJbmRleChzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpCiAjZW5kaWYKICAgICB7CiAgICAgfQogICAgIAotICAgIGV4cGxp
Y2l0IENhbGxCZWdpblRva2VuKHVuc2lnbmVkIGNvZGVPcmlnaW5JbmRleCkKKyAgICB+Q2FsbEJl
Z2luVG9rZW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZCB8fCAhbV9jb2Rl
T3JpZ2luLmlzU2V0KCkpOworICAgICAgICBBU1NFUlQobV9jb2RlT3JpZ2luLmlzU2V0KCkgPT0g
KG1fZXhjZXB0aW9uQ2hlY2tJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCB1bnNpZ25lZCBpbmRleCkKKyAgICB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICA6
IG1fY29kZU9yaWdpbkluZGV4KGNvZGVPcmlnaW5JbmRleCkKKyAgICAgICAgQVNTRVJUKG1fcmVn
aXN0ZXJlZCB8fCAhbV9jb2RlT3JpZ2luLmlzU2V0KCkpOworICAgICAgICBBU1NFUlQobV9jb2Rl
T3JpZ2luLmlzU2V0KCkgPT0gKG1fZXhjZXB0aW9uQ2hlY2tJbmRleCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpKTsKKyAgICAgICAgbV9jb2RlT3JpZ2luID0gY29kZU9y
aWdpbjsKKyAgICAgICAgbV9yZWdpc3RlcmVkID0gZmFsc2U7CisgICAgICAgIG1fZXhjZXB0aW9u
Q2hlY2tJbmRleCA9IGluZGV4OworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvZGVPcmln
aW4pOworICAgICAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwogI2VuZGlmCi0gICAgewotICAgICAg
ICBVTlVTRURfUEFSQU0oY29kZU9yaWdpbkluZGV4KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBh
c3NlcnRDb2RlT3JpZ2luSW5kZXgodW5zaWduZWQgY29kZU9yaWdpbkluZGV4KSBjb25zdAorICAg
IHZvaWQgcmVnaXN0ZXJXaXRoRXhjZXB0aW9uQ2hlY2soQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1
bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY29kZU9yaWdpbklu
ZGV4LCBjb2RlT3JpZ2luSW5kZXggPCBVSU5UX01BWCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
Y29kZU9yaWdpbkluZGV4LCBjb2RlT3JpZ2luSW5kZXggPT0gbV9jb2RlT3JpZ2luSW5kZXgpOwor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgQVNTRVJUKG1fY29kZU9yaWdpbiA9PSBjb2Rl
T3JpZ2luKTsKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJlZCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgQVNTRVJUKG1fZXhjZXB0aW9uQ2hlY2tJbmRleCA9PSBpbmRleCk7CisgICAgICAg
IG1fcmVnaXN0ZXJlZCA9IHRydWU7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oY29kZU9y
aWdpbik7CisgICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisjZW5kaWYKICAgICB9CiAKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlT3JpZ2luOworICAgIH0KKyNlbmRpZgor
ICAgIAogcHJpdmF0ZToKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgdW5zaWduZWQgbV9jb2Rl
T3JpZ2luSW5kZXg7CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgYm9vbCBtX3Jl
Z2lzdGVyZWQ7CisgICAgdW5zaWduZWQgbV9leGNlcHRpb25DaGVja0luZGV4OwogI2VuZGlmCiB9
OwogCkBAIC0xMDcsMjUgKzEzNywyMiBAQCBwcml2YXRlOgogLy8gQ2FsbHMgdGhhdCBtaWdodCB0
aHJvdyBhbiBleGNlcHRpb24gYWxzbyByZWNvcmQgdGhlIEp1bXAgdGFrZW4gb24gZXhjZXB0aW9u
CiAvLyAodW5zZXQgaWYgbm90IHByZXNlbnQpIGFuZCBjb2RlIG9yaWdpbiB1c2VkIHRvIHJlY292
ZXIgaGFuZGxlci9zb3VyY2UgaW5mby4KIHN0cnVjdCBDYWxsRXhjZXB0aW9uUmVjb3JkIHsKLSAg
ICBDYWxsRXhjZXB0aW9uUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4gdG9rZW4pCisgICAgQ2FsbEV4Y2VwdGlvblJl
Y29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAg
ICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4p
Ci0gICAgICAgICwgbV90b2tlbih0b2tlbikKICAgICB7CiAgICAgfQogCi0gICAgQ2FsbEV4Y2Vw
dGlvblJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBleGNlcHRpb25DaGVjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5Ub2tlbiB0
b2tlbikKKyAgICBDYWxsRXhjZXB0aW9uUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGws
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkNoZWNrLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAgICwgbV9leGNlcHRpb25DaGVjayhl
eGNlcHRpb25DaGVjaykKICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKLSAgICAg
ICAgLCBtX3Rva2VuKHRva2VuKQogICAgIHsKICAgICB9CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBtX2NhbGw7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9leGNlcHRpb25DaGVjazsK
ICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKLSAgICBDYWxsQmVnaW5Ub2tlbiBtX3Rva2Vu
OwogfTsKIAogc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKQEAgLTI1NywxOSArMjg0LDI3
IEBAIHB1YmxpYzoKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbEln
bm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAotICAgIC8vIEdldCBhIHRva2VuIGZv
ciBiZWdpbm5pbmcgYSBjYWxsLCBhbmQgc2V0IHRoZSBjdXJyZW50IGNvZGUgb3JpZ2luIGluZGV4
IGluCi0gICAgLy8gdGhlIGNhbGwgZnJhbWUuCi0gICAgQ2FsbEJlZ2luVG9rZW4gYmVnaW5DYWxs
KCkKKyAgICB1bnNpZ25lZCBjdXJyZW50Q29kZU9yaWdpbkluZGV4KCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHVuc2lnbmVkIGNvZGVPcmlnaW5JbmRleCA9IG1fY3VycmVudENvZGVPcmlnaW5JbmRl
eCsrOwotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjb2RlT3JpZ2luSW5kZXgpLCB0YWdG
b3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291
bnQpKSk7Ci0gICAgICAgIHJldHVybiBDYWxsQmVnaW5Ub2tlbihjb2RlT3JpZ2luSW5kZXgpOwor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50Q29kZU9yaWdpbkluZGV4OworICAgIH0KKyAgICAKKyAg
ICAvLyBHZXQgYSB0b2tlbiBmb3IgYmVnaW5uaW5nIGEgY2FsbCwgYW5kIHNldCB0aGUgY3VycmVu
dCBjb2RlIG9yaWdpbiBpbmRleCBpbgorICAgIC8vIHRoZSBjYWxsIGZyYW1lLiBGb3IgZWFjaCBi
ZWdpbkNhbGwoKSB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBleGNlcHRpb24KKyAgICAvLyBj
aGVjaywgYW5kIGFsbCBvZiB0aGUgZXhjZXB0aW9uIGNoZWNrcyBtdXN0IGhhdmUgdGhlIHNhbWUg
Q29kZU9yaWdpbiBhcyB0aGUKKyAgICAvLyBiZWdpbkNhbGwoKS4KKyAgICB2b2lkIGJlZ2luQ2Fs
bChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuJiB0b2tlbikKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbV9leGNlcHRpb25DaGVja3Muc2l6ZSgpOworICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpbmRleCksIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgdG9rZW4u
c2V0KGNvZGVPcmlnaW4sIGluZGV4KTsKICAgICB9CiAKICAgICAvLyBOb3RpZnkgdGhlIEpJVCBv
ZiBhIGNhbGwgdGhhdCBkb2VzIG5vdCByZXF1aXJlIGxpbmtpbmcuCi0gICAgdm9pZCBub3RpZnlD
YWxsKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRv
a2VuIHRva2VuKQorICAgIHZvaWQgbm90aWZ5Q2FsbChDYWxsIGZ1bmN0aW9uQ2FsbCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5Ub2tlbiYgdG9rZW4pCiAgICAgewotICAgICAgICBt
X2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoQ2FsbEV4Y2VwdGlvblJlY29yZChmdW5jdGlvbkNhbGws
IGNvZGVPcmlnaW4sIHRva2VuKSk7CisgICAgICAgIHRva2VuLnJlZ2lzdGVyV2l0aEV4Y2VwdGlv
bkNoZWNrKGNvZGVPcmlnaW4sIG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSk7CisgICAgICAgIG1f
ZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwg
Y29kZU9yaWdpbikpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNv
ZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpAQCAtMjc5LDIwICszMTQsMjcgQEAgcHVi
bGljOgogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChmdW5jdGlvbkNhbGws
IGZ1bmN0aW9uKSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgfQorICAgIAor
ICAgIHZvaWQgcHJlcGFyZUZvckV4Y2VwdGlvbkNoZWNrKCkKKyAgICB7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSksIEdQUkluZm86Om5vblByZXNl
cnZlZE5vblJldHVybkdQUik7CisgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBK
SVQgY29kZSwgd2l0aCBhbiBleGNlcHRpb24gY2hlY2suCi0gICAgdm9pZCBhZGRFeGNlcHRpb25D
aGVjayhDYWxsIGZ1bmN0aW9uQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5U
b2tlbiB0b2tlbikKKyAgICB2b2lkIGFkZEV4Y2VwdGlvbkNoZWNrKENhbGwgZnVuY3Rpb25DYWxs
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuJiB0b2tlbikKICAgICB7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSksIEdQUklu
Zm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tz
LmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZW1pdEV4Y2VwdGlvbkNo
ZWNrKCksIGNvZGVPcmlnaW4sIHRva2VuKSk7CisgICAgICAgIHByZXBhcmVGb3JFeGNlcHRpb25D
aGVjaygpOworICAgICAgICB0b2tlbi5yZWdpc3RlcldpdGhFeGNlcHRpb25DaGVjayhjb2RlT3Jp
Z2luLCBtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCkpOworICAgICAgICBtX2V4Y2VwdGlvbkNoZWNr
cy5hcHBlbmQoQ2FsbEV4Y2VwdGlvblJlY29yZChmdW5jdGlvbkNhbGwsIGVtaXRFeGNlcHRpb25D
aGVjaygpLCBjb2RlT3JpZ2luKSk7CiAgICAgfQogICAgIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0
IGZyb20gSklUIGNvZGUsIHdpdGggYSBmYXN0IGV4Y2VwdGlvbiBjaGVjayB0aGF0IHRlc3RzIGlm
IHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KLSAgICB2b2lkIGFkZEZhc3RFeGNlcHRpb25DaGVj
ayhDYWxsIGZ1bmN0aW9uQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5Ub2tl
biB0b2tlbikKKyAgICB2b2lkIGFkZEZhc3RFeGNlcHRpb25DaGVjayhDYWxsIGZ1bmN0aW9uQ2Fs
bCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5Ub2tlbiYgdG9rZW4pCiAgICAgewot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCkpLCBHUFJJ
bmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgICAgICBwcmVwYXJlRm9yRXhjZXB0
aW9uQ2hlY2soKTsKICAgICAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGJyYW5jaFRlc3RQdHIo
WmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBtX2V4Y2VwdGlvbkNoZWNr
cy5hcHBlbmQoQ2FsbEV4Y2VwdGlvblJlY29yZChmdW5jdGlvbkNhbGwsIGV4Y2VwdGlvbkNoZWNr
LCBjb2RlT3JpZ2luLCB0b2tlbikpOworICAgICAgICB0b2tlbi5yZWdpc3RlcldpdGhFeGNlcHRp
b25DaGVjayhjb2RlT3JpZ2luLCBtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCkpOworICAgICAgICBt
X2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoQ2FsbEV4Y2VwdGlvblJlY29yZChmdW5jdGlvbkNhbGws
IGV4Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgfQogICAgIAogICAgIC8vIEhlbHBl
ciBtZXRob2RzIHRvIGdldCBwcmVkaWN0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjIyOTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5o
IgogI2luY2x1ZGUgIkRGR1JlcGF0Y2guaCIKKyNpbmNsdWRlICJERkdUaHVua3MuaCIKICNpbmNs
dWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTg0OSw3ICs4NTAsNiBAQCBzdGF0aWMgdm9pZCog
aGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAKICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNo
YWluKGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDAp
OwotICAgIGV4ZWNDYWxsZWUtPmNsZWFyUmV0dXJuUEMoKTsKIAogICAgIGlmIChraW5kID09IENv
ZGVGb3JDYWxsKSB7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtODYyLDE0ICs4NjIs
MTQgQEAgc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZQogICAgICAgICAg
ICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICAgICAg
Z2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0
YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwogICAgICAgICAgICAgaWYgKGdsb2JhbERh
dGEtPmV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogCiAgICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSk7
CiAgICAgICAgIH0KICAgICAKICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSk7CiAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVOb3RBRnVu
Y3Rpb25FcnJvcihleGVjLCBjYWxsZWUpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIGdsb2JhbERhdGEtPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKICAgICBBU1NF
UlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKQEAgLTg4NCwxNyArODg0LDE3IEBAIHN0YXRp
YyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGUKICAgICAgICAgZXhlY0NhbGxlZS0+
c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICBnbG9iYWxEYXRhLT5ob3N0Q2Fs
bFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKIAogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChjb25z
dHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVOb25lKTsKICAgICBleGVjLT5nbG9iYWxEYXRhKCku
ZXhjZXB0aW9uID0gY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKTsKLSAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OwogfQogCi1pbmxpbmUgdm9pZCogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQor
aW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2Fs
bGVyRnJhbWUoKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOwpAQCAtOTE4LDcgKzkxOCw3IEBAIGlubGluZSB2b2lkKiBsaW5rRm9yKEV4ZWNTdGF0
ZSogZXhlY0NhbGwKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxl
LT5jb21waWxlRm9yKGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCk7CiAgICAgICAg
IGlmIChlcnJvcikgewogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRl
U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICB9
CiAgICAgICAgIGNvZGVCbG9jayA9ICZmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVj
b2RlRm9yKGtpbmQpOwogICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpKQpAQCAtOTI2LDcgKzkyNiw3IEBAIGlubGluZSB2b2lkKiBsaW5rRm9yKEV4ZWNTdGF0ZSog
ZXhlY0NhbGwKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS5hZGRyZXNzRm9yQ2FsbCgpOwogICAg
IH0KLSAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5n
ZXRDYWxsTGlua0luZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJl
dHVyblBDKCkpOwogICAgIGlmICghY2FsbExpbmtJbmZvLnNlZW5PbmNlKCkpCiAgICAgICAgIGNh
bGxMaW5rSW5mby5zZXRTZWVuKCk7CiAgICAgZWxzZQpAQCAtOTM0LDE2ICs5MzQsMTQgQEAgaW5s
aW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAgIHJldHVybiBjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKLVBfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0Uob3BlcmF0aW9uTGlua0NhbGwpOwotdm9pZCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ2FsbFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQordm9pZCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3Io
ZXhlY0NhbGxlZSwgcmV0dXJuQWRkcmVzcywgQ29kZUZvckNhbGwpOworICAgIHJldHVybiBsaW5r
Rm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKIH0KIAotUF9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRShvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKLXZvaWQqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQordm9pZCogREZH
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkK
IHsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCByZXR1cm5BZGRyZXNzLCBDb2RlRm9y
Q29uc3RydWN0KTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3Ry
dWN0KTsKIH0KIAogaW5saW5lIHZvaWQqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC05NjUsNyArOTYzLDcgQEAgaW5saW5l
IHZvaWQqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQwogICAgICAgICBKU09iamVjdCogZXJy
b3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoZXhlY0NhbGxlZSwgZnVuY3Rpb24t
PnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGV4ZWMt
Pmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsKLSAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdp
dGhBcml0eUNoZWNrRm9yKGtpbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEyMjI5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVycy5oIgogI2luY2x1ZGUg
IkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiREZHVGh1bmtzLmgiCiAjaW5jbHVkZSAi
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1
ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTkxNiw2ICs5MTcsNyBAQCB2b2lkIGRmZ0J1aWxkUHV0QnlJ
ZExpc3QoRXhlY1N0YXRlKiBleGVjCiB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpT
RnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9
IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9IGNhbGxlckNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpOwogICAgIAogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAgIApAQCAtOTI4LDEx
ICs5MzAsMTEgQEAgdm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbgogICAg
ICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoJmNhbGxMaW5rSW5mbyk7CiAg
ICAgCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
KSwgb3BlcmF0aW9uVmlydHVhbENhbGwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHZp
cnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
KSwgb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Y2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2
aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKIHZvaWQgZGZnUmVz
ZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTIyMjk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwNywxNiArMTAwNywxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlJiBub2RlCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwog
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAorICAgIENhbGxCZWdpblRva2Vu
IHRva2VuOworICAgIG1faml0LmJlZ2luQ2FsbChub2RlLmNvZGVPcmlnaW4sIHRva2VuKTsKKyAg
ICAKKyAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251
bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7CisgICAgCiAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQ
YXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZVBheWxvYWRHUFIsIHRhcmdldFRv
Q2hlY2spKTsKICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBjYWxsZWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSkpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlUGF5
bG9hZEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1
bHRQYXlsb2FkR1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRQYXlsb2FkR1BSLCBjYWxs
RnJhbWVQYXlsb2FkU2xvdChSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKTsKLSAgICBtX2ppdC5z
dG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIGNh
bGxGcmFtZVRhZ1Nsb3QoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7Ci0KLSAgICBtX2ppdC5h
ZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVy
cyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAg
bV9qaXQuc3RvcmVQdHIocmVzdWx0UGF5bG9hZEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4gKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgbV9qaXQuc3Rv
cmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFp
biArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OwogCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVP
cmlnaW47Ci0gICAgQ2FsbEJlZ2luVG9rZW4gdG9rZW4gPSBtX2ppdC5iZWdpbkNhbGwoKTsKICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAgICAgbV9q
aXQubm90aWZ5Q2FsbChmYXN0Q2FsbCwgY29kZU9yaWdpbiwgdG9rZW4pOwogCkBAIC0xMDI0LDE1
ICsxMDI2LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKIAog
ICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKIAotICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1t
MzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lz
dGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwotICAgIG1faml0LnBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICB0b2tlbiA9IG1f
aml0LmJlZ2luQ2FsbCgpOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQu
YXBwZW5kQ2FsbChzbG93Q2FsbEZ1bmN0aW9uKTsKLSAgICBtX2ppdC5hZGRGYXN0RXhjZXB0aW9u
Q2hlY2soc2xvd0NhbGwsIGNvZGVPcmlnaW4sIHRva2VuKTsKLSAgICBtX2ppdC5hZGRQdHIoVHJ1
c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgdG9rZW4gPSBt
X2ppdC5iZWdpbkNhbGwoKTsKLSAgICBKSVRDb21waWxlcjo6Q2FsbCB0aGVDYWxsID0gbV9qaXQu
Y2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbCh0aGVD
YWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CisgICAgaWYgKGNhbGxlZVRhZ0dQUiA9PSBHUFJJbmZv
Ojpub25BcmdHUFIwKSB7CisgICAgICAgIGlmIChjYWxsZWVQYXlsb2FkR1BSID09IEdQUkluZm86
Om5vbkFyZ0dQUjEpCisgICAgICAgICAgICBtX2ppdC5zd2FwKEdQUkluZm86Om5vbkFyZ0dQUjEs
IEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUoY2FsbGVlVGFnR1BSLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoY2FsbGVlUGF5bG9hZEdQUiwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBtX2ppdC5tb3ZlKGNhbGxlZVBheWxvYWRHUFIsIEdQ
UkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBtX2ppdC5tb3ZlKGNhbGxlZVRhZ0dQUiwgR1BS
SW5mbzo6bm9uQXJnR1BSMSk7CisgICAgfQorICAgIG1faml0LnByZXBhcmVGb3JFeGNlcHRpb25D
aGVjaygpOworICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwo
KTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKHNsb3dDYWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CiAK
ICAgICBkb25lLmxpbmsoJm1faml0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMjIyOTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OTgsMTQgKzk5OCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlJiBub2RlCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNr
OwogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOwogCisgICAgQ2FsbEJlZ2luVG9rZW4g
dG9rZW47CisgICAgbV9qaXQuYmVnaW5DYWxsKG5vZGUuY29kZU9yaWdpbiwgdG9rZW4pOworICAg
IAorICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVt
Q2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKKyAgICAKICAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNU
X09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRHUFIpOwotICAgIG1f
aml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgY2FsbEZyYW1lU2xvdChSZWdpc3RlckZpbGU6OlNjb3Bl
Q2hhaW4pKTsKKyAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihSZWdpc3RlcikpICogUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7CiAKLSAgICBt
X2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJl
Z2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
Ci0gICAgCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYXQobV9jb21waWxlSW5kZXgpLmNv
ZGVPcmlnaW47Ci0gICAgQ2FsbEJlZ2luVG9rZW4gdG9rZW4gPSBtX2ppdC5iZWdpbkNhbGwoKTsK
ICAgICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAgICAg
bV9qaXQubm90aWZ5Q2FsbChmYXN0Q2FsbCwgY29kZU9yaWdpbiwgdG9rZW4pOwogICAgIApAQCAt
MTAxMywxNCArMTAxNSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBu
b2RlCiAgICAgCiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgIAotICAgIG1faml0LmFk
ZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwotICAgIHRva2VuID0gbV9qaXQuYmVnaW5DYWxsKCk7Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKHNsb3dDYWxsRnVuY3Rp
b24pOwotICAgIG1faml0LmFkZEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbCwgY29kZU9yaWdp
biwgdG9rZW4pOwotICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICB0b2tlbiA9IG1faml0LmJlZ2luQ2FsbCgpOwotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIHRoZUNhbGwgPSBtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKHRoZUNhbGwsIGNvZGVPcmlnaW4sIHRva2VuKTsK
KyAgICBtX2ppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgbV9q
aXQucHJlcGFyZUZvckV4Y2VwdGlvbkNoZWNrKCk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xv
d0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIG1faml0Lm5vdGlmeUNhbGwoc2xvd0NhbGws
IGNvZGVPcmlnaW4sIHRva2VuKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHJldmlzaW9uIDEyMjI5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTczOCw3ICsxNzM4LDggQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcHJlcGFyZUZvckV4dGVybmFsQ2FsbCgpOwogICAgICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4gPSBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbjsKLSAgICAgICAg
Q2FsbEJlZ2luVG9rZW4gdG9rZW4gPSBtX2ppdC5iZWdpbkNhbGwoKTsKKyAgICAgICAgQ2FsbEJl
Z2luVG9rZW4gdG9rZW47CisgICAgICAgIG1faml0LmJlZ2luQ2FsbChjb2RlT3JpZ2luLCB0b2tl
bik7CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKGZ1
bmN0aW9uKTsKICAgICAgICAgbV9qaXQuYWRkRXhjZXB0aW9uQ2hlY2soY2FsbCwgY29kZU9yaWdp
biwgdG9rZW4pOwogICAgICAgICByZXR1cm4gY2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5jcHAJKHJldmlzaW9uIDEyMjI5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIK
ICNpbmNsdWRlICJERkdGUFJJbmZvLmgiCiAjaW5jbHVkZSAiREZHR1BSSW5mby5oIgogI2luY2x1
ZGUgIkRGR09TUkV4aXRDb21waWxlci5oIgpAQCAtODIsNiArODMsMjEwIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgKCJERkcgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpKTsKIH0KIAoraW5s
aW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
cG9pbnRlckdQUikKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGlzTm9uWmVybyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywg
cG9pbnRlckdQUik7CisgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICBpc05vblplcm8ubGluaygm
aml0KTsKKyAgICBqaXQucHVzaChwb2ludGVyR1BSKTsKKyAgICBqaXQubG9hZDgocG9pbnRlckdQ
UiwgcG9pbnRlckdQUik7CisgICAgaml0LnBvcChwb2ludGVyR1BSKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGppdCk7CisgICAgVU5VU0VEX1BBUkFNKHBvaW50ZXJHUFIpOworI2VuZGlmCit9
CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIENDYWxsSGVscGVycyBq
aXQoZ2xvYmFsRGF0YSk7CisgICAgCisgICAgLy8gV2Ugd2lsbCBqdW1wIHRvIGhlcmUgaWYgdGhl
IEpJVCBjb2RlIHRoaW5rcyBpdCdzIG1ha2luZyBhIGNhbGwsIGJ1dCB0aGUKKyAgICAvLyBsaW5r
aW5nIGhlbHBlciAoQysrIGNvZGUpIGRlY2lkZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluc3Rl
YWQuIFdlIHdpbGwKKyAgICAvLyBoYXZlIHNhdmVkIHRoZSBjYWxsUmV0dXJuSW5kZXggaW4gdGhl
IGZpcnN0IGFyZ3VtZW50cyBvZiBKSVRTdGFja0ZyYW1lLgorICAgIC8vIE5vdGUgdGhhdCB0aGUg
cmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgc28gd2UK
KyAgICAvLyBuZWVkIHRvIHJlbW92ZSBpdCBhbmQgZHJvcCBpdCBvbiB0aGUgZmxvb3IsIHNpbmNl
IHdlIGRvbid0IGNhcmUgYWJvdXQgaXQuCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0Fm
dGVyQ2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5wZWVr
KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lO
REVYKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBl
bWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAg
IGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgCisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcgdGhyb3cgZXhjZXB0aW9uIGZy
b20gY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNsb3dQYXRoRm9y
KAorICAgIENDYWxsSGVscGVycyYgaml0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFBfREZH
T3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikKK3sKKyAgICBqaXQucHJlc2VydmVSZXR1cm5B
ZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIGppdC5zdG9yZVB0cigKKyAg
ICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogUmVnaXN0ZXJGaWxlOjpS
ZXR1cm5QQykpOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
Jmdsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7CisgICAgaml0LnBva2UoR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworICAgIGppdC5z
ZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgCisg
ICAgLy8gVGhpcyBzbG93IGNhbGwgd2lsbCByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb25lIG9mIHRo
ZSBmb2xsb3dpbmc6CisgICAgLy8gMSkgRXhjZXB0aW9uIHRocm93aW5nIHRodW5rLgorICAgIC8v
IDIpIEhvc3QgY2FsbCByZXR1cm4gdmFsdWUgcmV0dXJuZXIgdGhpbmd5LgorICAgIC8vIDMpIFRo
ZSBmdW5jdGlvbiB0byBjYWxsLgorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBSZWdp
c3RlckZpbGU6OlJldHVyblBDKSwKKyAgICAgICAgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSKTsKKyAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigwKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQykpOworICAg
IGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUik7CisgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86
Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGpp
dCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKK30KKworc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1
bmtHZW5lcmF0b3IoCisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCit7CisgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBz
dGFjayBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQorICAgIC8vIHNhdmUg
dGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlIG1ha2UgYSBDKysg
ZnVuY3Rpb24gY2FsbAorICAgIC8vIHRvIHBlcmZvcm0gbGlua2luZyBhbmQgbGF6eSBjb21waWxh
dGlvbiBpZiBuZWNlc3NhcnkuIFdlIGV4cGVjdCB0aGUgY2FsbGVlCisgICAgLy8gdG8gYmUgaW4g
bm9uQXJnR1BSMC9ub25BcmdHUFIxIChwYXlsb2FkL3RhZyksIHRoZSBjYWxsIGZyYW1lIHRvIGhh
dmUgYWxyZWFkeQorICAgIC8vIGJlZW4gYWRqdXN0ZWQsIG5vblByZXNlcnZlZE5vblJldHVybkdQ
UiBob2xkcyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaW5kZXgsCisgICAgLy8gYW5kIGFsbCBvdGhl
ciByZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxlIGZvciB1c2UuIFdlIHVzZSBKSVRTdGFja0ZyYW1l
OjphcmdzCisgICAgLy8gdG8gc2F2ZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWNyb3NzIGNhbGxz
LgorICAgIAorICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSk7CisgICAgCisgICAgc2xv
d1BhdGhGb3Ioaml0LCBnbG9iYWxEYXRhLCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9u
TGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKKyAgICAKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcg
bGluayAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDog
ImNvbnN0cnVjdCIpKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBsaW5rRm9y
VGh1bmtHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNhbGwpOworfQorCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKGdsb2JhbERhdGEs
IENvZGVGb3JDb25zdHJ1Y3QpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxGb3JUaHVua0dlbmVyYXRvcigKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3Mg
aXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQor
ICAgIC8vIGp1bXAgdG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8g
dGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UKKyAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwg
dG8gdGhlIGFwcHJvcHJpYXRlIERGRyBvcGVyYXRpb24uCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0
KGdsb2JhbERhdGEpOworICAgIAorICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7
CisKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGhhdmUgYSBzdG9yeSBmb3IgZWxpbWluYXRpbmcg
dGhlc2UgY2hlY2tzLiBJbiBtYW55IGNhc2VzLAorICAgIC8vIHRoZSBERkcga25vd3MgdGhhdCB0
aGUgdmFsdWUgaXMgZGVmaW5pdGVseSBhIGNlbGwsIG9yIGRlZmluaXRlbHkgYSBmdW5jdGlvbi4K
KyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAg
aml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQ
UkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAg
ICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2gzMigKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86Om5vbkFyZ0dQUjEsCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworI2VuZGlmCisg
ICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmSlNGdW5jdGlvbjo6c19pbmZvKSkp
OworICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHdlIGhhdmUgYSBKU0Z1bmN0aW9uLgorICAgIAor
ICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAorICAgICAgICBH
UFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5i
cmFuY2gzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGVzc1RoYW4sCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6bm9uQXJn
R1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihraW5kKSksCisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgIAorICAgIC8v
IE5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIENvZGVCbG9jaywgYW5kIHdlJ3JlIGNvbW1pdHRl
ZCB0byBtYWtpbmcgYSBmYXN0CisgICAgLy8gY2FsbC4KKyAgICAKKyAgICBqaXQubG9hZFB0cigK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTRnVu
Y3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BS
MSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgIEdQUklu
Zm86Om5vbkFyZ0dQUjEsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAg
ICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikp
OworI2Vsc2UKKyAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEs
CisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpKSAqIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiArCisgICAgICAgICAgICBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7
CisgICAgaml0LnN0b3JlMzIoCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAg
ICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4g
KworICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKSk7CisjZW5kaWYKKyAgICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpv
ZmZzZXRPZkpJVENvZGVGb3Ioa2luZCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAg
CisgICAgLy8gTWFrZSBhIHRhaWwgY2FsbC4gVGhpcyB3aWxsIHJldHVybiBiYWNrIHRvIERGRyBj
b2RlLgorICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMCk7CisKKyAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwor
ICAgIAorICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRo
ZSBmdWxsIHNsb3cgcGF0aC4KKyAgICAKKyAgICBzbG93UGF0aEZvcihqaXQsIGdsb2JhbERhdGEs
IGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0dWFsQ2FsbCA6IG9wZXJhdGlvblZp
cnR1YWxDb25zdHJ1Y3QpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2Jh
bERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
CisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkRGRyB2aXJ0dWFsICVzIHNsb3cgcGF0
aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOwor
fQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVy
YXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ2FsbCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgQ29k
ZUZvckNvbnN0cnVjdCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
aHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5oCShyZXZpc2lvbiAxMjIyOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNCBAQCBuYW1lc3BhY2UgREZHIHsK
IAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKik7CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsK
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSopOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDEyMjI5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzM5LDcgKzczOSw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29t
cGlsZShDb2RlUHRyKiBmdW4KICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxv
Y2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fY2FsbFN0cnVj
dHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFR5cGU7CiAgICAgICAgIGluZm8uYnl0ZWNv
ZGVJbmRleCA9IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uYnl0ZWNvZGVJ
bmRleDsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJl
bChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pKTsKKyAgICAgICAgaW5mby5jYWxsUmV0
dXJuTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9jYWxsU3RydWN0
dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwogICAgICAgICBp
bmZvLmhvdFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9jYWxsU3RydWN0dXJl
U3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4pOwogICAgICAgICBpbmZvLmhvdFBh
dGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVT
dHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhPdGhlcik7CiAgICAgfQpAQCAtODAyLDEyICs4
MDIsMTIgQEAgdm9pZCBKSVQ6OmxpbmtGb3IoSlNGdW5jdGlvbiogY2FsbGVlLCBDbwogCiAgICAg
Ly8gUGF0Y2ggdGhlIHNsb3cgcGF0Y2ggc28gd2UgZG8gbm90IGNvbnRpbnVlIHRvIHRyeSB0byBs
aW5rLgogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uKSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsKCkpOworICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwg
Z2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoY2FsbExpbmtJbmZvLT5jYWxs
UmV0dXJuTG9jYXRpb24pLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVj
dCgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbiwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3QoKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTIyMjk2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNiArMTc2LDIy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIHJldHVybiBpbnRyaW5zaWMoKTsK
ICAgICAgICAgICAgIHJldHVybiBOb0ludHJpbnNpYzsKICAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENvZGVGb3IoQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9y
Q2FsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVC
YXNlLCBtX2ppdENvZGVGb3JDYWxsKTsKKyAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRh
YmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3IoQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBD
b2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1
dGFibGVCYXNlLCBtX251bVBhcmFtZXRlcnNGb3JDYWxsKTsKKyAgICAgICAgICAgIEFTU0VSVChr
aW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihFeGVjdXRhYmxlQmFzZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KTsKKyAgICAg
ICAgfQogI2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxMjIyOTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3
ICsxNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKIAogICAgICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KKyAgICAgICAg
CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5o
CShyZXZpc2lvbiAxMjIyOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsMTggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludDo6RGF0YTsKIAogICAgIHB1YmxpYzoKKyNpZiBV
U0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBlbnVtIHsgSW50MzJUYWcgPSAgICAgICAgMHhmZmZm
ZmZmZiB9OworICAgICAgICBlbnVtIHsgQm9vbGVhblRhZyA9ICAgICAgMHhmZmZmZmZmZSB9Owor
ICAgICAgICBlbnVtIHsgTnVsbFRhZyA9ICAgICAgICAgMHhmZmZmZmZmZCB9OworICAgICAgICBl
bnVtIHsgVW5kZWZpbmVkVGFnID0gICAgMHhmZmZmZmZmYyB9OworICAgICAgICBlbnVtIHsgQ2Vs
bFRhZyA9ICAgICAgICAgMHhmZmZmZmZmYiB9OworICAgICAgICBlbnVtIHsgRW1wdHlWYWx1ZVRh
ZyA9ICAgMHhmZmZmZmZmYSB9OworICAgICAgICBlbnVtIHsgRGVsZXRlZFZhbHVlVGFnID0gMHhm
ZmZmZmZmOSB9OworCisgICAgICAgIGVudW0geyBMb3dlc3RUYWcgPSAgRGVsZXRlZFZhbHVlVGFn
IH07CisjZW5kaWYKKwogICAgICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgZW5jb2RlKEpTVmFs
dWUpOwogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBkZWNvZGUoRW5jb2RlZEpTVmFsdWUpOwogCkBA
IC0yNzgsMTYgKzI5MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgKiBjZWxsLCBpbnRl
Z2VyIGFuZCBib29sIHZhbHVlcyB0aGUgbG93ZXIgMzIgYml0cyAodGhlICdwYXlsb2FkJykgY29u
dGFpbiB0aGUgcG9pbnRlcgogICAgICAgICAgKiBpbnRlZ2VyIG9yIGJvb2xlYW4gdmFsdWU7IGlu
IHRoZSBjYXNlIG9mIGFsbCBvdGhlciB0YWdzIHRoZSBwYXlsb2FkIGlzIDAuCiAgICAgICAgICAq
LwotICAgICAgICBlbnVtIHsgSW50MzJUYWcgPSAgICAgICAgMHhmZmZmZmZmZiB9OwotICAgICAg
ICBlbnVtIHsgQm9vbGVhblRhZyA9ICAgICAgMHhmZmZmZmZmZSB9OwotICAgICAgICBlbnVtIHsg
TnVsbFRhZyA9ICAgICAgICAgMHhmZmZmZmZmZCB9OwotICAgICAgICBlbnVtIHsgVW5kZWZpbmVk
VGFnID0gICAgMHhmZmZmZmZmYyB9OwotICAgICAgICBlbnVtIHsgQ2VsbFRhZyA9ICAgICAgICAg
MHhmZmZmZmZmYiB9OwotICAgICAgICBlbnVtIHsgRW1wdHlWYWx1ZVRhZyA9ICAgMHhmZmZmZmZm
YSB9OwotICAgICAgICBlbnVtIHsgRGVsZXRlZFZhbHVlVGFnID0gMHhmZmZmZmZmOSB9OwotCi0g
ICAgICAgIGVudW0geyBMb3dlc3RUYWcgPSAgRGVsZXRlZFZhbHVlVGFnIH07Ci0KICAgICAgICAg
dWludDMyX3QgdGFnKCkgY29uc3Q7CiAgICAgICAgIGludDMyX3QgcGF5bG9hZCgpIGNvbnN0Owog
I2VsaWYgVVNFKEpTVkFMVUU2NCkK
</data>
<flag name="review"
          id="160145"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>