<?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>15950</bug_id>
          
          <creation_ts>2007-11-12 02:29:35 -0800</creation_ts>
          <short_desc>Add evaluateToInt32 and evaluateToUInt32 methods to ExpressionNode subclasses</short_desc>
          <delta_ts>2007-11-13 00:17:13 -0800</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>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>15963</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>60970</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-12 02:29:35 -0800</bug_when>
    <thetext>Add evaluateToInt32 and evaluateToUInt32 methods to ExpressionNode subclasses

Hum... Unfortunately this isn&apos;t yet a speedup, but I think I still have some nodes which are missing the necessary overrides to take advantage of this opportunity (and to avoid the double-virtual call default implementation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60971</commentid>
    <comment_count>1</comment_count>
      <attachid>17199</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-12 02:30:07 -0800</bug_when>
    <thetext>Created attachment 17199
first attempt (sunspider says this is a 0.5% slowdown)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61023</commentid>
    <comment_count>2</comment_count>
      <attachid>17212</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-12 14:06:37 -0800</bug_when>
    <thetext>Created attachment 17212
better fix (still 0.1% regression overall, large speedup for math, slowdown for few tests)

I&apos;m not quite sure where to go next with this patch, w/o going off in a totally different direction to make it a speedup.  Shark &quot;compare&quot; seems to report that the extra time on the regressed tests is spent in LocalVarAccessNode::evaluateToInt32, but that time should just be moved from the callsites where the callers no longer have to call toInt32().  Maybe the compiler has more trouble with the toInt calls in such a small function since it can&apos;t reorder the instructions to avoid stalls.  That&apos;s a totally unfounded guess however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61027</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-12 15:05:08 -0800</bug_when>
    <thetext>Huzzah!  It&apos;s now 0.3% faster overall after ggaren&apos;s suggestion of optimizing ImmediateNumberNode
Sadly although it improves some tests dramatically, it worsens others.
It&apos;s not clear to me how to pick up the slack on the slower tests yet.  The slower tests seem to have less to gain from type inferencing, thus they don&apos;t call the faster evaluateTo* calls, and instead to up the evaluate() recursion tree.  I believe part of the slowdown from any of these evaluateTo* tests is caused by unnecessary flipping back and forth between the type specific recursive call trees (if you can really term it that).  The worse cases of each of those is when ExpressionNode::evaluateTo* default implementations are called, but I believe I have removed all of the important instances of those (at least none are appearing in the sample).  Those are slow due to turning one virtual call into two (thus doubling the stack impact), again, I think all such instances are gone, but I&apos;m about to add some ASSERTS to check.

TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           0.3% faster     4421.6ms +/- 0.1%   4406.2ms +/- 0.1%     significant

=============================================================================

  3d:                  -                502.8ms +/- 0.3%    503.0ms +/- 0.2% 
    cube:              ??               166.0ms +/- 0.5%    167.0ms +/- 0.5%     not conclusive: might be 0.6% *slower*
    morph:             0.7% faster      163.2ms +/- 0.3%    162.0ms +/- 0.9%     significant
    raytrace:          ??               173.6ms +/- 0.4%    174.0ms +/- 0.0%     not conclusive: might be 0.2% *slower*

  access:              1.3% *slower*    708.6ms +/- 0.1%    717.6ms +/- 0.3%     significant
    binary-trees:      0.7% *slower*    108.2ms +/- 0.5%    109.0ms +/- 0.8%     significant
    fannkuch:          3.7% *slower*    336.2ms +/- 0.2%    348.8ms +/- 0.2%     significant
    nbody:             2.0% faster      185.6ms +/- 0.4%    181.8ms +/- 0.3%     significant
    nsieve:            0.8% faster       78.6ms +/- 0.9%     78.0ms +/- 0.0%     significant

  bitops:              3.4% faster      644.4ms +/- 0.2%    622.6ms +/- 0.3%     significant
    3bit-bits-in-byte: 5.5% faster      122.6ms +/- 1.4%    115.8ms +/- 0.9%     significant
    bits-in-byte:      1.7% faster      160.2ms +/- 0.3%    157.4ms +/- 0.4%     significant
    bitwise-and:       0.7% faster      214.0ms +/- 0.0%    212.6ms +/- 0.3%     significant
    nsieve-bits:       7.3% faster      147.6ms +/- 0.5%    136.8ms +/- 0.8%     significant

  controlflow:         ??               155.6ms +/- 0.4%    156.4ms +/- 0.4%     not conclusive: might be 0.5% *slower*
    recursive:         ??               155.6ms +/- 0.4%    156.4ms +/- 0.4%     not conclusive: might be 0.5% *slower*

  crypto:              5.1% faster      364.2ms +/- 0.3%    345.6ms +/- 0.6%     significant
    aes:               -                 97.8ms +/- 0.6%     97.8ms +/- 0.6% 
    md5:               7.0% faster      134.0ms +/- 1.1%    124.6ms +/- 1.1%     significant
    sha1:              6.9% faster      132.4ms +/- 0.8%    123.2ms +/- 0.8%     significant

  date:                0.7% *slower*    362.2ms +/- 0.4%    364.6ms +/- 0.3%     significant
    format-tofte:      ??               160.8ms +/- 0.6%    161.8ms +/- 0.3%     not conclusive: might be 0.6% *slower*
    format-xparb:      0.7% *slower*    201.4ms +/- 0.6%    202.8ms +/- 0.7%     significant

  math:                1.8% *slower*    514.4ms +/- 0.1%    523.8ms +/- 0.3%     significant
    cordic:            4.8% *slower*    214.8ms +/- 0.5%    225.2ms +/- 0.5%     significant
    partial-sums:      1.1% faster      176.6ms +/- 0.4%    174.6ms +/- 0.4%     significant
    spectral-norm:     0.8% *slower*    123.0ms +/- 0.0%    124.0ms +/- 0.7%     significant

  regexp:              ??               297.4ms +/- 0.5%    298.6ms +/- 0.8%     not conclusive: might be 0.4% *slower*
    dna:               ??               297.4ms +/- 0.5%    298.6ms +/- 0.8%     not conclusive: might be 0.4% *slower*

  string:              ??               872.0ms +/- 0.3%    874.0ms +/- 0.1%     not conclusive: might be 0.2% *slower*
    base64:            1.3% *slower*    121.4ms +/- 0.6%    123.0ms +/- 0.0%     significant
    fasta:             1.5% *slower*    208.6ms +/- 0.3%    211.8ms +/- 0.5%     significant
    tagcloud:          ??               198.0ms +/- 0.9%    199.4ms +/- 0.7%     not conclusive: might be 0.7% *slower*
    unpack-code:       1.8% faster      204.4ms +/- 0.3%    200.8ms +/- 0.3%     significant
    validate-input:    -                139.6ms +/- 0.8%    139.0ms +/- 1.3% 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61028</commentid>
    <comment_count>4</comment_count>
      <attachid>17214</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-12 15:12:42 -0800</bug_when>
    <thetext>Created attachment 17214
better fix (0.3% improvement on SunSpider)

This could actually go up for review... but I think I&apos;m gonna look at making it a little faster yet first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61050</commentid>
    <comment_count>5</comment_count>
      <attachid>17220</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-12 22:32:48 -0800</bug_when>
    <thetext>Created attachment 17220
better fix (1.4% speedup according to SunSpider)

Possibly still some fat to be trimmed here, but this is good enough to get reviewed.  My machine is really noisy tonight for some reason (maybe we&apos;re just too fast), but this is at least 1.4% faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61063</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-13 00:17:13 -0800</bug_when>
    <thetext>r27747</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17199</attachid>
            <date>2007-11-12 02:30:07 -0800</date>
            <delta_ts>2007-11-12 14:06:37 -0800</delta_ts>
            <desc>first attempt (sunspider says this is a 0.5% slowdown)</desc>
            <filename>first.patch</filename>
            <type>text/plain</type>
            <size>46742</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwIGIv
SmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAppbmRleCBjODhmNDAyLi4xZGJjY2NhIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L2tqcy9ub2Rlcy5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAjZGVmaW5l
IEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUiBcCiAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
eyBcCiAgICAgaGFuZGxlRXhjZXB0aW9uKGV4ZWMpOyBcCi0gICAgcmV0dXJuIDAuMDsgXAorICAg
IHJldHVybiAwOyBcCiAgIH0KIAogI2RlZmluZSBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOIFwK
QEAgLTIxMyw3ICsyMTMsNiBAQCBkb3VibGUgRXhwcmVzc2lvbk5vZGU6OmV2YWx1YXRlVG9OdW1i
ZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbHVhdGUoZXhl
Yyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgLy8gTm8gbmVlZCB0byBjaGVj
ayBleGNlcHRpb24gYWZ0ZXIgdG9OdW1iZXIsIGNhbGxlciB3aWxsIGRvIHNvIHJpZ2h0IGFmdGVy
IGV2YWx1YXRlVG9OdW1iZXIoKSBjYWxsCiAgICAgcmV0dXJuIHZhbHVlLT50b051bWJlcihleGVj
KTsKIH0KIApAQCAtMjI0LDYgKzIyMywyMCBAQCBib29sIEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0
ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIHZhbHVlLT50b0Jvb2xlYW4o
ZXhlYyk7CiB9CiAKK2ludDMyX3QgRXhwcmVzc2lvbk5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdmFsdWUgPSBldmFsdWF0ZShleGVjKTsKKyAg
ICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdmFsdWUtPnRvSW50MzIoZXhl
Yyk7Cit9CisKK3VpbnQzMl90IEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IGV2YWx1YXRlKGV4ZWMpOworICAg
IEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2YWx1ZS0+dG9VSW50MzIoZXhl
Yyk7Cit9CisKIHN0YXRpYyB2b2lkIHN1YnN0aXR1dGUoVVN0cmluZyAmc3RyaW5nLCBjb25zdCBV
U3RyaW5nICZzdWJzdHJpbmcpIEtKU19GQVNUX0NBTEw7CiBzdGF0aWMgdm9pZCBzdWJzdGl0dXRl
KFVTdHJpbmcgJnN0cmluZywgY29uc3QgVVN0cmluZyAmc3Vic3RyaW5nKQogewpAQCAtNDExLDYg
KzQyNCwxNiBAQCBib29sIE51bWJlck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSop
CiAgICAgcmV0dXJuIG1fZG91YmxlIDwgMC4wIHx8IG1fZG91YmxlID4gMC4wOyAvLyBmYWxzZSBm
b3IgTmFOIGFzIHdlbGwgYXMgMAogfQogCitpbnQzMl90IE51bWJlck5vZGU6OmV2YWx1YXRlVG9J
bnQzMihFeGVjU3RhdGUqKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKG1fZG91Ymxl
KTsKK30KKwordWludDMyX3QgTnVtYmVyTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUq
KQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihtX2RvdWJsZSk7Cit9CisKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbW1lZGlhdGVOdW1iZXJOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEpTVmFsdWUqIEltbWVkaWF0ZU51bWJlck5v
ZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSopCkBAIC00NTgsNyArNDgxLDcgQEAgSlNWYWx1ZSAqVGhp
c05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIC8vIEVDTUEgMTEuMS4yICYgMTAuMS40Ci1KU1ZhbHVlICpSZXNvbHZlTm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogUmVzb2x2ZU5vZGU6OmlubGluZUV2YWx1YXRl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgLy8gQ2hlY2sgZm9yIG1pc3NlZCBvcHRpbWl6YXRpb24g
b3Bwb3J0dW5pdHkuCiAgIEFTU0VSVCghY2FuU2tpcExvb2t1cChleGVjLCBpZGVudCkpOwpAQCAt
NDgzLDYgKzUwNiwzOSBAQCBKU1ZhbHVlICpSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
ICpleGVjKQogICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50
KTsKIH0KIAorSlNWYWx1ZSogUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7Cit9CisKK2RvdWJsZSBSZXNvbHZl
Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSog
diA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgor
ICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKK30KKworYm9vbCBSZXNvbHZlTm9kZTo6ZXZh
bHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxp
bmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCisgICAgcmV0
dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKK30KKworaW50MzJfdCBSZXNvbHZlTm9kZTo6ZXZhbHVh
dGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZh
bHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYt
PnRvSW50MzIoZXhlYyk7Cit9CisKK3VpbnQzMl90IFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvVUlu
dDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUo
ZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRvVUlu
dDMyKGV4ZWMpOworfQorCiB2b2lkIFJlc29sdmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gZnVuY3Rpb25Cb2R5LT5zeW1ib2xUYWJsZSgp
LmdldChpZGVudC51c3RyaW5nKCkucmVwKCkpOwpAQCAtNTEyLDYgKzU2OCwxNiBAQCBib29sIExv
Y2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogICAg
IHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKS0+dG9Cb29sZWFuKGV4ZWMpOwogfQogCitpbnQz
Ml90IExvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvSW50MzIoZXhlYyk7Cit9CisK
K3VpbnQzMl90IExvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b1VJbnQzMihleGVj
KTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVsZW1lbnROb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBFbGVtZW50Tm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQpAQCAtNjc5LDE0ICs3NDUsNDYgQEAgdm9pZCBEb3RBY2Nl
c3Nvck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xh
cmF0aW9uU3RhY2sKIH0KIAogLy8gRUNNQSAxMS4yLjFiCi1KU1ZhbHVlICpEb3RBY2Nlc3Nvck5v
ZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK0pTVmFsdWUqIERvdEFjY2Vzc29yTm9kZTo6
aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVlICp2ID0gZXhwci0+
ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIHJldHVybiB2LT50
b09iamVjdChleGVjKS0+Z2V0KGV4ZWMsIGlkZW50KTsKKyAgICBKU1ZhbHVlKiB2ID0gZXhwci0+
ZXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKKyAgICByZXR1cm4g
di0+dG9PYmplY3QoZXhlYyktPmdldChleGVjLCBpZGVudCk7Cit9CiAKK0pTVmFsdWUqIERvdEFj
Y2Vzc29yTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxp
bmVFdmFsdWF0ZShleGVjKTsKIH0KIAorZG91YmxlIERvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVU
b051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1
YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50
b051bWJlcihleGVjKTsKK30KKworYm9vbCBEb3RBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUo
ZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgorICAgIHJldHVybiB2LT50b0Jv
b2xlYW4oZXhlYyk7Cit9CisKK2ludDMyX3QgRG90QWNjZXNzb3JOb2RlOjpldmFsdWF0ZVRvSW50
MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShl
eGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdi0+dG9JbnQz
MihleGVjKTsKK30KKwordWludDMyX3QgRG90QWNjZXNzb3JOb2RlOjpldmFsdWF0ZVRvVUludDMy
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhl
Yyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRvVUludDMy
KGV4ZWMpOworfSAgICAKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFyZ3Vt
ZW50TGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBBcmd1bWVu
dExpc3ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNs
YXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCkBAIC03OTAsNyArODg4LDcgQEAg
dm9pZCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5j
dGlvbkJvZHlOb2RlKiBmdW5jdGlvbkIKIH0KIAogLy8gRUNNQSAxMS4yLjMKLUpTVmFsdWUgKkZ1
bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitKU1ZhbHVl
KiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVj
KQogewogICAvLyBDaGVjayBmb3IgbWlzc2VkIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eS4KICAg
QVNTRVJUKCFjYW5Ta2lwTG9va3VwKGV4ZWMsIGlkZW50KSk7CkBAIC04MTAsMTUgKzkwOCwxMyBA
QCBKU1ZhbHVlICpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKQogICAgICAgSlNWYWx1ZSAqdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgaWRlbnQp
OwogICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgICAgICAgCi0gICAgICBpZiAoIXYt
PmlzT2JqZWN0KCkpIHsKKyAgICAgIGlmICghdi0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNz
aW9uICVzKSBpcyBub3Qgb2JqZWN0LiIsIHYsIGlkZW50KTsKLSAgICAgIH0KICAgICAgIAogICAg
ICAgSlNPYmplY3QgKmZ1bmMgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpOwogICAgICAgCi0g
ICAgICBpZiAoIWZ1bmMtPmltcGxlbWVudHNDYWxsKCkpIHsKKyAgICAgIGlmICghZnVuYy0+aW1w
bGVtZW50c0NhbGwoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
LCAiT2JqZWN0ICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgZG9lcyBub3QgYWxsb3cgY2Fs
bHMuIiwgdiwgaWRlbnQpOwotICAgICAgfQogICAgICAgCiAgICAgICBMaXN0IGFyZ0xpc3Q7CiAg
ICAgICBhcmdzLT5ldmFsdWF0ZUxpc3QoZXhlYywgYXJnTGlzdCk7CkBAIC04NDIsNyArOTM4LDQw
IEBAIEpTVmFsdWUgKkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpCiAgIHJldHVybiB0aHJvd1VuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQp
OwogfQogCi1KU1ZhbHVlKiBMb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZShF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpOworfQor
Citkb3VibGUgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAg
ICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7
Cit9CisKK2Jvb2wgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7
CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgorICAgIHJldHVybiB2LT50b0Jvb2xlYW4o
ZXhlYyk7Cit9CisKK2ludDMyX3QgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1YXRlVG9J
bnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRl
KGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b0lu
dDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVh
dGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2
YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2
LT50b1VJbnQzMihleGVjKTsKK30KKworSlNWYWx1ZSogTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2Rl
OjppbmxpbmVFdmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PEFjdGl2YXRpb25JbXAqPihleGVjLT52YXJpYWJsZU9iamVjdCgpKS0+aXNBY3RpdmF0aW9u
KCkpOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4oZXhlYy0+dmFyaWFi
bGVPYmplY3QoKSkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKQEAgLTg2Myw2ICs5OTIs
MzkgQEAgSlNWYWx1ZSogTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgcmV0dXJuIGZ1bmMtPmNhbGwoZXhlYywgZXhlYy0+ZHluYW1pY0ludGVy
cHJldGVyKCktPmdsb2JhbE9iamVjdCgpLCBhcmdMaXN0KTsKIH0KIAorSlNWYWx1ZSogTG9jYWxW
YXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpOworfQorCitkb3VibGUgTG9jYWxWYXJGdW5jdGlvbkNh
bGxOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVl
KiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVS
CisgICAgcmV0dXJuIHYtPnRvTnVtYmVyKGV4ZWMpOworfQorCitib29sIExvY2FsVmFyRnVuY3Rp
b25DYWxsTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpT
VmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05C
T09MRUFOCisgICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKK30KKworaW50MzJfdCBMb2Nh
bFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VY
Q0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b0ludDMyKGV4ZWMpOworfQorCit1aW50MzJf
dCBMb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNf
Q0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdi0+dG9VSW50MzIoZXhlYyk7Cit9CisK
IHZvaWQgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykK
IHsKICAgICBub2RlU3RhY2suYXBwZW5kKGFyZ3MuZ2V0KCkpOwpAQCAtOTM5LDcgKzExMDEsNyBA
QCB2b2lkIEZ1bmN0aW9uQ2FsbERvdE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rp
b25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uUwogfQogCiAvLyBFQ01BIDExLjIuMwotSlNWYWx1ZSAq
RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSog
RnVuY3Rpb25DYWxsRG90Tm9kZTo6aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewog
ICBKU1ZhbHVlICpiYXNlVmFsID0gYmFzZS0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VY
Q0VQVElPTlZBTFVFCkBAIC05NjksNiArMTEzMSwzOSBAQCBKU1ZhbHVlICpGdW5jdGlvbkNhbGxE
b3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiAgIHJldHVybiBmdW5jLT5jYWxsKGV4
ZWMsIHRoaXNPYmosIGFyZ0xpc3QpOwogfQogCitKU1ZhbHVlKiBGdW5jdGlvbkNhbGxEb3ROb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRl
KGV4ZWMpOworfQorCitkb3VibGUgRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZXZhbHVhdGVUb051bWJl
cihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4
ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b051bWJl
cihleGVjKTsKK30KKworYm9vbCBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZVRvQm9vbGVh
bihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4
ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KKyAgICByZXR1cm4gdi0+dG9Cb29s
ZWFuKGV4ZWMpOworfQorCitpbnQzMl90IEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmV2YWx1YXRlVG9J
bnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRl
KGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b0lu
dDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZVRv
VUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVh
dGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRv
VUludDMyKGV4ZWMpOworfQorCiAvLyBFQ01BIDExLjMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFBvc3RmaXhSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC0xMzQ3LDcgKzE1NDIsNyBAQCBzdGF0aWMgSlNWYWx1ZSAqdHlwZVN0cmlu
Z0ZvclZhbHVlKEpTVmFsdWUgKnYpCiAgICAgICAgICAgICAvLyBSZXR1cm4gInVuZGVmaW5lZCIg
Zm9yIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZAogICAgICAgICAgICAgLy8gYXMgbnVs
bCB3aGVuIGRvaW5nIGNvbXBhcmlzb25zLgogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4odiktPm1hc3F1ZXJhZGVBc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBqc1N0cmluZygidW5kZWZpbmVkIik7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKCJ1bmRlZmluZWQiKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4odiktPmltcGxlbWVudHNDYWxsKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKCJmdW5jdGlvbiIpOwogICAgICAgICB9CkBAIC0xNjM2LDEyICsxODMx
LDMxIEBAIHZvaWQgVW5hcnlQbHVzTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlv
bkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6CiB9CiAKIC8vIEVDTUEgMTEuNC42Ci1KU1Zh
bHVlICpVbmFyeVBsdXNOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitKU1ZhbHVlKiBV
bmFyeVBsdXNOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFsdWUgKnYg
PSBleHByLT5ldmFsdWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKKyAgICBK
U1ZhbHVlICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9O
VkFMVUUKKyAgICByZXR1cm4gdi0+dG9KU051bWJlcihleGVjKTsKK30KIAotICByZXR1cm4gdi0+
dG9KU051bWJlcihleGVjKTsKK2Jvb2wgVW5hcnlQbHVzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4o
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBleHByLT5ldmFsdWF0ZVRvQm9vbGVhbihl
eGVjKTsKK30KKworZG91YmxlIFVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBleHByLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwor
fQorCitpbnQzMl90IFVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGV4cHItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKK30KKwordWlu
dDMyX3QgVW5hcnlQbHVzTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGV4cHItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKIH0KIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5lZ2F0ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KQEAgLTE2NzIsMTEgKzE4ODYsMzQgQEAgdm9pZCBCaXR3aXNlTm90Tm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25T
dGFja3MKIH0KIAogLy8gRUNNQSAxMS40LjgKLUpTVmFsdWUgKkJpdHdpc2VOb3ROb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitpbnQzMl90IEJpdHdpc2VOb3ROb2RlOjppbmxpbmVFdmFs
dWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVlICp2ID0gZXhwci0+ZXZh
bHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIHJldHVybiBqc051bWJl
cih+di0+dG9JbnQzMihleGVjKSk7CisgICAgcmV0dXJuIH5leHByLT5ldmFsdWF0ZVRvSW50MzIo
ZXhlYyk7Cit9CisKK0pTVmFsdWUqIEJpdHdpc2VOb3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIGpzTnVtYmVyKGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVj
KSk7Cit9CisKK2RvdWJsZSBCaXR3aXNlTm90Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKK30K
KworYm9vbCBCaXR3aXNlTm90Tm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK2ludDMy
X3QgQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKK30KKwordWludDMyX3QgQml0
d2lzZU5vdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBMb2dpY2FsTm90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC0xNzI3LDYgKzE5NjQsMTYgQEAgZG91YmxlIE11bHROb2RlOjpldmFsdWF0ZVRv
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb051bWJl
cihleGVjKTsKIH0KIAoraW50MzJfdCBNdWx0Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRv
TnVtYmVyKGV4ZWMpKTsKK30KKwordWludDMyX3QgTXVsdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVF
dmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKK30KKwogdm9pZCBEaXZOb2RlOjpvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNr
JiBub2RlU3RhY2spCiB7CiAgICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMS5nZXQoKSk7CkBAIC0x
NzU1LDYgKzIwMDIsMTYgQEAgZG91YmxlIERpdk5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0
YXRlKiBleGVjKQogICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogfQog
CitpbnQzMl90IERpdk5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7
Cit9CisKK3VpbnQzMl90IERpdk5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KGV4ZWMpKTsKK30KKwogdm9pZCBNb2ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7
CiAgICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMS5nZXQoKSk7CkBAIC0xNzgzLDYgKzIwNDAsMjEg
QEAgZG91YmxlIE1vZE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogICAg
IHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogfQogCitib29sIE1vZE5vZGU6
OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5l
RXZhbHVhdGVUb051bWJlcihleGVjKTsKK30KKworaW50MzJfdCBNb2ROb2RlOjpldmFsdWF0ZVRv
SW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlu
bGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOworfQorCit1aW50MzJfdCBNb2ROb2RlOjpldmFs
dWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9V
SW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9CisKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBBZGRpdGl2ZSBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgSlNWYWx1ZSogdGhyb3dPdXRPZk1lbW9yeUVycm9y
KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE4OTgsNyArMjE3MCw3IEBAIEpTVmFsdWUgKkFkZE5vZGU6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKICAgcmV0dXJuIGFkZChleGVjLCB2MSwgdjIpOwog
fQogCi1kb3VibGUgQWRkTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCitk
b3VibGUgQWRkTm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgSlNWYWx1ZSAqdjEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNL
RVhDRVBUSU9OTlVNQkVSCkBAIC0xOTA5LDYgKzIxODEsMjEgQEAgZG91YmxlIEFkZE5vZGU6OmV2
YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBhZGRUb051bWJlcihl
eGVjLCB2MSwgdjIpOwogfQogCitkb3VibGUgQWRkTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7
Cit9CisKK2ludDMyX3QgQWRkTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpKTsKK30KKwordWludDMyX3QgQWRkTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OnRvVUludDMyKGlubGluZUV2YWx1YXRlVG9O
dW1iZXIoZXhlYykpOworfQorCiB2b2lkIFN1Yk5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKIHsKICAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsKQEAgLTE5MzcsNiArMjIy
NCwxNiBAQCBkb3VibGUgU3ViTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiB9CiAKK2ludDMyX3Qg
U3ViTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
SlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKK30KKwordWlu
dDMyX3QgU3ViTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIEpTVmFsdWU6OnRvVUludDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOwor
fSAgICAKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNoaWZ0IE5vZGVzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIExlZnRTaGlmdE5vZGU6
Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKQEAgLTE5NDYsMTYgKzIyNDMsMzIgQEAgdm9pZCBM
ZWZ0U2hpZnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczoKIH0KIAogLy8gRUNNQSAxMS43LjEKLUpTVmFsdWUgKkxlZnRTaGlm
dE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK2ludDMyX3QgTGVmdFNoaWZ0Tm9kZTo6
aW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSAqdjEg
PSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIEpT
VmFsdWUgKnYyID0gdGVybTItPmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05W
QUxVRQotICB1bnNpZ25lZCBpbnQgaTIgPSB2Mi0+dG9VSW50MzIoZXhlYyk7Ci0gIGkyICY9IDB4
MWY7CisgICAgaW50IGkxID0gdGVybTEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBLSlNf
Q0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICB1bnNpZ25lZCBpbnQgaTIgPSB0ZXJtMi0+ZXZhbHVh
dGVUb1VJbnQzMihleGVjKSAmIDB4MWY7CisgICAgcmV0dXJuIChpMSA8PCBpMik7Cit9CisKK0pT
VmFsdWUqIExlZnRTaGlmdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBy
ZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpKTsKK30KKworZG91Ymxl
IExlZnRTaGlmdE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK2ludDMyX3QgTGVmdFNo
aWZ0Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
aW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQogCi0gIHJldHVybiBqc051bWJlcih2MS0+
dG9JbnQzMihleGVjKSA8PCBpMik7Cit1aW50MzJfdCBMZWZ0U2hpZnROb2RlOjpldmFsdWF0ZVRv
VUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0lu
dDMyKGV4ZWMpOwogfQogCiB2b2lkIFJpZ2h0U2hpZnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2Rl
U3RhY2spCkBAIC0xOTY1LDE2ICsyMjc4LDMyIEBAIHZvaWQgUmlnaHRTaGlmdE5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzCiB9
CiAKIC8vIEVDTUEgMTEuNy4yCi1KU1ZhbHVlICpSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlICpleGVjKQoraW50MzJfdCBSaWdodFNoaWZ0Tm9kZTo6aW5saW5lRXZhbHVhdGVUb0lu
dDMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSAqdjEgPSB0ZXJtMS0+ZXZhbHVhdGUo
ZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIEpTVmFsdWUgKnYyID0gdGVybTIt
PmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICB1bnNpZ25lZCBp
bnQgaTIgPSB2Mi0+dG9VSW50MzIoZXhlYyk7Ci0gIGkyICY9IDB4MWY7CisgICAgaW50IGkxID0g
dGVybTEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1C
RVIKKyAgICB1bnNpZ25lZCBpbnQgaTIgPSB0ZXJtMi0+ZXZhbHVhdGVUb1VJbnQzMihleGVjKSAm
IDB4MWY7CisgICAgcmV0dXJuIChpMSA+PiBpMik7Cit9CisKK0pTVmFsdWUqIFJpZ2h0U2hpZnRO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGpzTnVtYmVyKGlu
bGluZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7Cit9CisKK2RvdWJsZSBSaWdodFNoaWZ0Tm9kZTo6
ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlVG9JbnQzMihleGVjKTsKK30KKworaW50MzJfdCBSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVh
dGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVU
b0ludDMyKGV4ZWMpOworfQogCi0gIHJldHVybiBqc051bWJlcih2MS0+dG9JbnQzMihleGVjKSA+
PiBpMik7Cit1aW50MzJfdCBSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKIH0K
IAogdm9pZCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1
bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2sp
CkBAIC0xOTg0LDE2ICsyMzEzLDMyIEBAIHZvaWQgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpCiB9CiAKIC8v
IEVDTUEgMTEuNy4zCi1KU1ZhbHVlICpVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZShF
eGVjU3RhdGUgKmV4ZWMpCit1aW50MzJfdCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjppbmxpbmVF
dmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSAqdjEgPSB0ZXJt
MS0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIEpTVmFsdWUg
KnYyID0gdGVybTItPmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQot
ICB1bnNpZ25lZCBpbnQgaTIgPSB2Mi0+dG9VSW50MzIoZXhlYyk7Ci0gIGkyICY9IDB4MWY7Cisg
ICAgaW50IGkxID0gdGVybTEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBLSlNfQ0hFQ0tF
WENFUFRJT05OVU1CRVIKKyAgICB1bnNpZ25lZCBpbnQgaTIgPSB0ZXJtMi0+ZXZhbHVhdGVUb1VJ
bnQzMihleGVjKSAmIDB4MWY7CisgICAgcmV0dXJuIChpMSA+PiBpMik7Cit9CiAKLSAgcmV0dXJu
IGpzTnVtYmVyKHYxLT50b1VJbnQzMihleGVjKSA+PiBpMik7CitKU1ZhbHVlKiBVbnNpZ25lZFJp
Z2h0U2hpZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGpz
TnVtYmVyKGlubGluZUV2YWx1YXRlVG9VSW50MzIoZXhlYykpOworfQorCitkb3VibGUgVW5zaWdu
ZWRSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9VSW50MzIoZXhlYyk7Cit9CisKK2ludDMyX3QgVW5z
aWduZWRSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb1VJbnQzMihleGVjKTsKK30KKwordWludDMyX3Qg
VW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9VSW50MzIoZXhlYyk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWxhdGlvbmFsIE5vZGVzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzMjksMTQgKzI2NzQsNDIgQEAgdm9pZCBCaXRBbmRO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm8KIH0KIAogLy8gRUNNQSAxMS4xMAotSlNWYWx1ZSAqQml0QW5kTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogQml0QW5kTm9kZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlKiBleGVjKQogeyAgICAKLSAgSlNWYWx1ZSAqdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIEpTVmFsdWUgKnYyID0gZXhwcjItPmV2
YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAKLSAgcmV0dXJuIGpz
TnVtYmVyRnJvbUFuZChleGVjLCB2MSwgdjIpOworICAgIEpTVmFsdWUgKnYxID0gZXhwcjEtPmV2
YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCisgICAgSlNWYWx1ZSAq
djIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUK
KworICAgIHJldHVybiBqc051bWJlckZyb21BbmQoZXhlYywgdjEsIHYyKTsKK30KKworaW50MzJf
dCBCaXRBbmROb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIGludDMyX3QgaTEgPSBleHByMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOworICAgIEtKU19D
SEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIGludDMyX3QgaTIgPSBleHByMi0+ZXZhbHVhdGVUb0lu
dDMyKGV4ZWMpOworICAgIHJldHVybiAoaTEgJiBpMik7Cit9CisKK2RvdWJsZSBCaXRBbmROb2Rl
OjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5l
RXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCitib29sIEJpdEFuZE5vZGU6OmV2YWx1YXRlVG9C
b29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0lu
dDMyKGV4ZWMpOworfQorCitpbnQzMl90IEJpdEFuZE5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsK
K30KKwordWludDMyX3QgQml0QW5kTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKIH0KIAogdm9p
ZCBCaXRYT3JOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCkBAIC0yMzQ1LDE0ICsyNzE4
LDM3IEBAIHZvaWQgQml0WE9yTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJv
ZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vCiAgICAgbm9kZVN0YWNrLmFwcGVuZChleHBy
MS5nZXQoKSk7CiB9CiAKLUpTVmFsdWUgKkJpdFhPck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYykKK2ludDMyX3QgQml0WE9yTm9kZTo6aW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSAqdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtK
U19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIEpTVmFsdWUgKnYyID0gZXhwcjItPmV2YWx1YXRlKGV4
ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAKLSAgcmV0dXJuIGpzTnVtYmVyKHYx
LT50b0ludDMyKGV4ZWMpIF4gdjItPnRvSW50MzIoZXhlYykpOworICAgIGludCBpMSA9IGV4cHIx
LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisg
ICAgaW50IGkyID0gZXhwcjItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICByZXR1cm4gKGkx
IF4gaTIpOworfQorCitKU1ZhbHVlKiBCaXRYT3JOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGpzTnVtYmVyKGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7
Cit9CisKK2RvdWJsZSBCaXRYT3JOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCitib29s
IEJpdFhPck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBy
ZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCitpbnQzMl90IEJpdFhPck5v
ZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGlu
ZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKK30KKwordWludDMyX3QgQml0WE9yTm9kZTo6ZXZhbHVh
dGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRl
VG9JbnQzMihleGVjKTsKIH0KIAogdm9pZCBCaXRPck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nl
c3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVT
dGFjaykKQEAgLTIzNjEsMTQgKzI3NTcsMzcgQEAgdm9pZCBCaXRPck5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2QKICAg
ICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdldCgpKTsKIH0KIAotSlNWYWx1ZSAqQml0T3JOb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitpbnQzMl90IEJpdE9yTm9kZTo6aW5saW5lRXZh
bHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSAqdjEgPSBleHByMS0+
ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIEpTVmFsdWUgKnYy
ID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAK
LSAgcmV0dXJuIGpzTnVtYmVyKHYxLT50b0ludDMyKGV4ZWMpIHwgdjItPnRvSW50MzIoZXhlYykp
OworICAgIGludCBpMSA9IGV4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgS0pTX0NI
RUNLRVhDRVBUSU9OTlVNQkVSCisgICAgaW50IGkyID0gZXhwcjItPmV2YWx1YXRlVG9JbnQzMihl
eGVjKTsKKyAgICByZXR1cm4gKGkxIHwgaTIpOworfQorCitKU1ZhbHVlKiBCaXRPck5vZGU6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZh
bHVhdGVUb0ludDMyKGV4ZWMpKTsKK30KKworZG91YmxlIEJpdE9yTm9kZTo6ZXZhbHVhdGVUb051
bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQz
MihleGVjKTsKK30KKworYm9vbCBCaXRPck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQor
CitpbnQzMl90IEJpdE9yTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBC
aXRPck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBCaW5hcnkgTG9naWNhbCBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC0yNDQ2LDYgKzI4NjUsMjcgQEAgYm9vbCBDb25kaXRpb25hbE5vZGU6OmV2YWx1
YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gYiA/IGV4cHIxLT5ldmFs
dWF0ZVRvQm9vbGVhbihleGVjKSA6IGV4cHIyLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKIH0K
IAorZG91YmxlIENvbmRpdGlvbmFsTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgYm9vbCBiID0gbG9naWNhbC0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Cisg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIGIgPyBleHByMS0+ZXZhbHVh
dGVUb051bWJlcihleGVjKSA6IGV4cHIyLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOworfQorCitp
bnQzMl90IENvbmRpdGlvbmFsTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBib29sIGIgPSBsb2dpY2FsLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAgICBL
SlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gYiA/IGV4cHIxLT5ldmFsdWF0ZVRv
SW50MzIoZXhlYykgOiBleHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCit1aW50MzJf
dCBDb25kaXRpb25hbE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIGJvb2wgYiA9IGxvZ2ljYWwtPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworICAgIEtKU19D
SEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiBiID8gZXhwcjEtPmV2YWx1YXRlVG9VSW50
MzIoZXhlYykgOiBleHByMi0+ZXZhbHVhdGVUb1VJbnQzMihleGVjKTsKK30KKwogLy8gRUNNQSAx
MS4xMwogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiB2YWx1ZUZvclJlYWRNb2RpZnlB
c3NpZ25tZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogY3VycmVudCwgRXhwcmVzc2lvbk5v
ZGUqIHJpZ2h0LCBPcGVyYXRvciBvcGVyKSBLSlNfRkFTVF9DQUxMOwpAQCAtMjQ3MCwzMiArMjkx
MCwzMiBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiB2YWx1ZUZvclJlYWRNb2RpZnlB
c3NpZ25tZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIGJyZWFrOwogICBjYXNlIE9wTFNo
aWZ0OgogICAgIGkxID0gY3VycmVudC0+dG9JbnQzMihleGVjKTsKLSAgICBpMiA9IHJpZ2h0LT5l
dmFsdWF0ZShleGVjKS0+dG9JbnQzMihleGVjKTsKKyAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRv
SW50MzIoZXhlYyk7CiAgICAgdiA9IGpzTnVtYmVyKGkxIDw8IGkyKTsKICAgICBicmVhazsKICAg
Y2FzZSBPcFJTaGlmdDoKICAgICBpMSA9IGN1cnJlbnQtPnRvSW50MzIoZXhlYyk7Ci0gICAgaTIg
PSByaWdodC0+ZXZhbHVhdGUoZXhlYyktPnRvSW50MzIoZXhlYyk7CisgICAgaTIgPSByaWdodC0+
ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIHYgPSBqc051bWJlcihpMSA+PiBpMik7CiAgICAg
YnJlYWs7CiAgIGNhc2UgT3BVUlNoaWZ0OgogICAgIHVpID0gY3VycmVudC0+dG9VSW50MzIoZXhl
Yyk7Ci0gICAgaTIgPSByaWdodC0+ZXZhbHVhdGUoZXhlYyktPnRvSW50MzIoZXhlYyk7CisgICAg
aTIgPSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIHYgPSBqc051bWJlcih1aSA+
PiBpMik7CiAgICAgYnJlYWs7CiAgIGNhc2UgT3BBbmRFcToKICAgICBpMSA9IGN1cnJlbnQtPnRv
SW50MzIoZXhlYyk7Ci0gICAgaTIgPSByaWdodC0+ZXZhbHVhdGUoZXhlYyktPnRvSW50MzIoZXhl
Yyk7CisgICAgaTIgPSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIHYgPSBqc051
bWJlcihpMSAmIGkyKTsKICAgICBicmVhazsKICAgY2FzZSBPcFhPckVxOgogICAgIGkxID0gY3Vy
cmVudC0+dG9JbnQzMihleGVjKTsKLSAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZShleGVjKS0+dG9J
bnQzMihleGVjKTsKKyAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiAgICAg
diA9IGpzTnVtYmVyKGkxIF4gaTIpOwogICAgIGJyZWFrOwogICBjYXNlIE9wT3JFcToKICAgICBp
MSA9IGN1cnJlbnQtPnRvSW50MzIoZXhlYyk7Ci0gICAgaTIgPSByaWdodC0+ZXZhbHVhdGUoZXhl
YyktPnRvSW50MzIoZXhlYyk7CisgICAgaTIgPSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMp
OwogICAgIHYgPSBqc051bWJlcihpMSB8IGkyKTsKICAgICBicmVhazsKICAgY2FzZSBPcE1vZEVx
OiB7CkBAIC0yNzg0LDkgKzMyMjQsMjkgQEAgdm9pZCBBc3NpZ25FeHByTm9kZTo6b3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3MKIH0KIAog
Ly8gRUNNQSAxMi4yCi1KU1ZhbHVlICpBc3NpZ25FeHByTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
ICpleGVjKQorSlNWYWx1ZSogQXNzaWduRXhwck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gZXhwci0+ZXZhbHVhdGUoZXhlYyk7Cit9CisKK2Jvb2wgQXNzaWdu
RXhwck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gZXhwci0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Cit9CisKK2RvdWJsZSBBc3NpZ25FeHBy
Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGV4
cHItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Cit9CisKK2ludDMyX3QgQXNzaWduRXhwck5vZGU6
OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGV4cHItPmV2
YWx1YXRlVG9JbnQzMihleGVjKTsKK30KKwordWludDMyX3QgQXNzaWduRXhwck5vZGU6OmV2YWx1
YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICByZXR1cm4gZXhwci0+ZXZhbHVhdGUo
ZXhlYyk7CisgICAgcmV0dXJuIGV4cHItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKIH0KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZhckRlY2xOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI4MjYsNyArMzI4Niw3IEBAIHZvaWQgVmFyRGVjbE5v
ZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYgc3RhY2tzKQogdm9pZCBWYXJE
ZWNsTm9kZTo6aGFuZGxlU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY29wZUNoYWlu
JiBjaGFpbiwgSlNWYWx1ZSogdmFsKQogewogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0g
Y2hhaW4uYmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7
ICAgICAgICAKKyAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7CiAgICAg
CiAgICAgLy8gd2UgbXVzdCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWlu
CiAgICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tq
cy9ub2Rlcy5oIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKaW5kZXggYmRlZDM5MC4uODY4
YzI3NSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKKysrIGIvSmF2YVNj
cmlwdENvcmUva2pzL25vZGVzLmgKQEAgLTE3NSw2ICsxNzUsOCBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTCA9IDA7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1i
ZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2
YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgICB2aXJ0dWFs
IHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAKICAgICAgICAgLy8gVXNlZCB0byBvcHRpbWl6ZSB0aG9zZSBub2RlcyB0aGF0IGRv
IGV4dHJhIHdvcmsgd2hlbiByZXR1cm5pbmcgYSByZXN1bHQsIGV2ZW4gaWYgdGhlIHJlc3VsdCBo
YXMgbm8gc2VtYW50aWMgcmVsZXZhbmNlCkBAIC0yMjksNiArMjMxLDggQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRv
VUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogCkBAIC0y
OTksNiArMzAzLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKIAogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jv
b2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFs
dWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQz
Ml90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1
YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY1ByaW1hcnk7IH0KIApAQCAtMzA3LDYgKzMxNSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuIGlkZW50OyB9CiAKICAgcHJvdGVjdGVkOgorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7CiAgICAgSWRlbnRpZmllciBpZGVudDsKICAgICBz
aXplX3QgaW5kZXg7IC8vIFVzZWQgYnkgTG9jYWxWYXJBY2Nlc3NOb2RlLgogICB9OwpAQCAtMzIz
LDYgKzMzMiw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0
ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2
YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBp
bnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZp
cnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVhdGUo
RXhlY1N0YXRlKik7CiAgIH07CkBAIC00NDAsNiArNDUxLDEwIEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgIERvdEFjY2Vzc29yTm9kZShFeHByZXNzaW9uTm9kZSogZSwgY29uc3QgSWRlbnRpZmllciYg
cykgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSksIGlkZW50KHMpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBib29sIGV2YWx1
YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBkb3Vi
bGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1
YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAg
ICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNNZW1iZXI7IH0KIApAQCAtNDQ5LDYgKzQ2NCw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9DQUxM
IHsgcmV0dXJuIGlkZW50OyB9CiAKICAgcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUqIGlubGluZUV2YWx1YXRlKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gZXhwcjsKICAgICBJZGVudGlmaWVyIGlkZW50OwogICB9OwpAQCAtNTI4LDEwICs1NDQsMTUg
QEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4o
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVU
b0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBl
dmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ2FsbDsgfQog
CiAgIHByb3RlY3RlZDoKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGluZUV2YWx1YXRl
KEV4ZWNTdGF0ZSopOwogICAgIElkZW50aWZpZXIgaWRlbnQ7CiAgICAgUmVmUHRyPEFyZ3VtZW50
c05vZGU+IGFyZ3M7CiAgICAgc2l6ZV90IGluZGV4OyAvLyBVc2VkIGJ5IExvY2FsVmFyRnVuY3Rp
b25DYWxsTm9kZS4KQEAgLTU0Nyw2ICs1NjgsMTIgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgfQog
CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OworICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUlu
dDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgIHByaXZhdGU6CisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShFeGVjU3RhdGUqKTsKICAgfTsKIAogICBjbGFz
cyBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBAIC01
NjcsOSArNTk0LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUo
RXhwcmVzc2lvbk5vZGUqIGIsIGNvbnN0IElkZW50aWZpZXImIGksIEFyZ3VtZW50c05vZGUqIGEp
IEtKU19GQVNUX0NBTEwgOiBiYXNlKGIpLCBpZGVudChpKSwgYXJncyhhKSB7fQogICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBib29s
IGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAg
IHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9Ci0gIHByb3RlY3RlZDoKKyAgcHJpdmF0ZToKKyAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGluZUV2YWx1YXRlKEV4ZWNTdGF0ZSopOwogICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gYmFzZTsKICAgICBJZGVudGlmaWVyIGlkZW50OwogICAgIFJl
ZlB0cjxBcmd1bWVudHNOb2RlPiBhcmdzOwpAQCAtOTczLDYgKzEwMDUsMTAgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgVW5hcnlQbHVzTm9kZShFeHByZXNzaW9uTm9kZSogZSkgS0pTX0ZBU1RfQ0FM
TCA6IGV4cHIoZSkge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMy
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0
ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KICAgcHJp
dmF0ZToKQEAgLTk5Niw5ICsxMDMyLDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEJpdHdpc2VO
b3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7fQogICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAg
IHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OworICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogICBwcml2YXRlOgorICAgIEFMV0FZU19J
TkxJTkUgaW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKik7CiAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwogICB9OwogCkBAIC0xMDIwLDYgKzEwNjEsOCBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50
MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZh
bHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICB2
aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNdWx0aXBs
aWNpdGF2ZTsgfQogICBwcml2YXRlOgpAQCAtMTAzNCw2ICsxMDc3LDggQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJv
ZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAg
ICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50
MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTXVsdGlwbGljaXRhdmU7IH0K
ICAgcHJpdmF0ZToKQEAgLTEwNDgsNiArMTA5Myw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
dmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERl
Y2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmly
dHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwor
ICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CisgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTXVsdGlwbGljaXRhdmU7IH0KICAg
cHJpdmF0ZToKQEAgLTEwNjIsOSArMTExMCwxMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1Zh
bHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgZG91
YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0
dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjQWRkaXRpdmU7IH0KICAgcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIGRv
dWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gdGVybTE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMjsKICAg
fTsKQEAgLTEwNzUsNiArMTEyNiw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgdmlydHVhbCB2
b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9u
U3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBkb3Vi
bGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgdmly
dHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwor
ICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9CiAgIHByaXZhdGU6CkBAIC0xMDg5LDkgKzEx
NDIsMTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICA6IHRlcm0xKHQxKSwgdGVybTIodDIpIHt9
CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9k
ZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2
aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyByZXR1cm4gUHJlY1NoaWZ0OyB9CiAgIHByaXZhdGU6CisgICAgQUxXQVlTX0lO
TElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKTsKICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0xOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVy
bTI7CiAgIH07CkBAIC0xMTAyLDkgKzExNTksMTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICA6
IHRlcm0xKHQxKSwgdGVybTIodDIpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2sm
KSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9J
bnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZh
bHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1NoaWZ0OyB9CiAg
IHByaXZhdGU6CisgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQz
MihFeGVjU3RhdGUqKTsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0xOwogICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7CiAgIH07CkBAIC0xMTE1LDkgKzExNzYsMTMgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICA6IHRlcm0xKHQxKSwgdGVybTIodDIpIHt9CiAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xh
cmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRv
dWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmly
dHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwor
ICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyByZXR1cm4gUHJlY1NoaWZ0OyB9CiAgIHByaXZhdGU6CisgICAgQUxXQVlTX0lOTElORSB1aW50
MzJfdCBpbmxpbmVFdmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gdGVybTE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMjsKICAg
fTsKQEAgLTEyNjgsOSArMTMzMywxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIGV4cHIxKGUx
KSwgZXhwcjIoZTIpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQz
MihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVh
dGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0JpdHdpc2VBbmQ7IH0K
ICAgcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0lu
dDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CiAgICAg
UmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKQEAgLTEyODEsOSArMTM1MSwxNCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CiAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xh
cmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRv
dWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmly
dHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0JpdHdpc2VPcjsgfQogICBwcml2YXRlOgorICAgIEFMV0FZU19J
TkxJTkUgaW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKik7CiAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4
cHIyOwogICB9OwpAQCAtMTI5NCw5ICsxMzY5LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ZXhwcjEoZTEpLCBleHByMihlMikge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYp
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xl
YW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVh
dGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJf
dCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQml0d2lz
ZVhvcjsgfQogICBwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVFdmFs
dWF0ZVRvSW50MzIoRXhlY1N0YXRlKik7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHBy
MTsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOwogICB9OwpAQCAtMTMxNCw2ICsx
Mzk0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTG9naWNhbEFuZDsgfQogICBwcml2YXRlOgor
ICAgICAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNT
dGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CiAgICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKQEAgLTEzMjgsNiArMTQwOSw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyByZXR1cm4gUHJlY0xvZ2ljYWxPcjsgfQogICBwcml2YXRlOgorICAgICAgICBBTFdBWVNfSU5M
SU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHBy
MjsKICAgfTsKQEAgLTEzNDIsNiArMTQyNCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29s
IGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAg
IHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IHsgcmV0dXJuIFByZWNDb25kaXRpb25hbDsgfQogICBwcml2YXRlOgpAQCAtMTUxNyw2ICsx
NjAyLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEFzc2lnbkV4cHJOb2RlKEV4cHJlc3Npb25O
b2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9C
b29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBkb3VibGUgZXZh
bHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50
MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0
dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tq
cy92YWx1ZS5jcHAKaW5kZXggYzBkMDgzMC4uYjg1NGEyOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUva2pzL3ZhbHVlLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuY3BwCkBA
IC03MiwxMSArNzIsMTAgQEAgZG91YmxlIEpTVmFsdWU6OnRvSW50ZWdlclByZXNlcnZlTmFOKEV4
ZWNTdGF0ZSAqZXhlYykgY29uc3QKICAgICByZXR1cm4gdHJ1bmModG9OdW1iZXIoZXhlYykpOwog
fQogCi1pbnQzMl90IEpTVmFsdWU6OnRvSW50MzJTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIGJv
b2wmIG9rKSBjb25zdAoraW50MzJfdCBKU1ZhbHVlOjp0b0ludDMyU2xvd0Nhc2UoZG91YmxlIGQs
IGJvb2wmIG9rKQogewogICAgIG9rID0gdHJ1ZTsKIAotICAgIGRvdWJsZSBkID0gdG9OdW1iZXIo
ZXhlYyk7CiAgICAgaWYgKGQgPj0gLUQzMiAvIDIgJiYgZCA8IEQzMiAvIDIpCiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihkKTsKIApAQCAtOTMsMTEgKzkyLDE1IEBAIGludDMy
X3QgSlNWYWx1ZTo6dG9JbnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2spIGNv
bnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KGQzMik7CiB9CiAKLXVpbnQzMl90
IEpTVmFsdWU6OnRvVUludDMyU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykgY29u
c3QKK2ludDMyX3QgSlNWYWx1ZTo6dG9JbnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgYm9v
bCYgb2spIGNvbnN0Cit7CisgICAgcmV0dXJuIEpTVmFsdWU6OnRvSW50MzJTbG93Q2FzZSh0b051
bWJlcihleGVjKSwgb2spOworfQorCit1aW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQzMlNsb3dDYXNl
KGRvdWJsZSBkLCBib29sJiBvaykKIHsKICAgICBvayA9IHRydWU7CiAKLSAgICBkb3VibGUgZCA9
IHRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChkID49IDAuMCAmJiBkIDwgRDMyKQogICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGQpOwogCkBAIC0xMTIsNiArMTE1LDExIEBAIHVp
bnQzMl90IEpTVmFsdWU6OnRvVUludDMyU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBib29sJiBv
aykgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGQzMik7CiB9CiAKK3Vp
bnQzMl90IEpTVmFsdWU6OnRvVUludDMyU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBib29sJiBv
aykgY29uc3QKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzJTbG93Q2FzZSh0b051bWJl
cihleGVjKSwgb2spOworfQorCiBmbG9hdCBKU1ZhbHVlOjp0b0Zsb2F0KEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvTnVtYmVyKGV4ZWMp
KTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oIGIvSmF2YVNjcmlwdENv
cmUva2pzL3ZhbHVlLmgKaW5kZXggN2Q2NGYzNi4uY2RhNmYxOCAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUva2pzL3ZhbHVlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgKQEAg
LTk3LDYgKzk3LDEwIEBAIHB1YmxpYzoKICAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUq
KSBjb25zdDsKICAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUqLCBib29sJiBvaykgY29u
c3Q7CiAKKyAgICAvLyBUaGVzZSBhcmUgaWRlbnRpY2FsIGxvZ2ljIHRvIGFib3ZlLCBhbmQgZmFz
dGVyIHRoYW4ganNOdW1iZXIobnVtYmVyKS0+dG9JbnQzMihleGVjKQorICAgIHN0YXRpYyBpbnQz
Ml90IHRvSW50MzIoZG91YmxlKTsKKyAgICBzdGF0aWMgaW50MzJfdCB0b1VJbnQzMihkb3VibGUp
OworCiAgICAgLy8gRmxvYXRpbmcgcG9pbnQgY29udmVyc2lvbnMuCiAgICAgZmxvYXQgdG9GbG9h
dChFeGVjU3RhdGUqKSBjb25zdDsKIApAQCAtMTA1LDYgKzEwOSw5IEBAIHB1YmxpYzoKICAgICBi
b29sIG1hcmtlZCgpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIHN0YXRpYyBpbnQzMl90IHRvSW50
MzJTbG93Q2FzZShkb3VibGUsIGJvb2wmIG9rKTsKKyAgICBzdGF0aWMgdWludDMyX3QgdG9VSW50
MzJTbG93Q2FzZShkb3VibGUsIGJvb2wmIG9rKTsKKwogICAgIGludDMyX3QgdG9JbnQzMlNsb3dD
YXNlKEV4ZWNTdGF0ZSosIGJvb2wmIG9rKSBjb25zdDsKICAgICB1aW50MzJfdCB0b1VJbnQzMlNs
b3dDYXNlKEV4ZWNTdGF0ZSosIGJvb2wmIG9rKSBjb25zdDsKIApAQCAtMjg4LDE2ICsyOTUsMTYg
QEAgaW5saW5lIHZvaWQgSlNDZWxsOjptYXJrKCkKICAgICByZXR1cm4gQ29sbGVjdG9yOjptYXJr
Q2VsbCh0aGlzKTsKIH0KIAotaW5saW5lIEpTQ2VsbCAqSlNWYWx1ZTo6YXNDZWxsKCkKK0FMV0FZ
U19JTkxJTkUgSlNDZWxsKiBKU1ZhbHVlOjphc0NlbGwoKQogewogICAgIEFTU0VSVCghSlNJbW1l
ZGlhdGU6OmlzSW1tZWRpYXRlKHRoaXMpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNDZWxs
ICo+KHRoaXMpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NlbGwqPih0aGlzKTsKIH0KIAot
aW5saW5lIGNvbnN0IEpTQ2VsbCAqSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKK0FMV0FZU19JTkxJ
TkUgY29uc3QgSlNDZWxsKiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAogewogICAgIEFTU0VSVCgh
SlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHRoaXMpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgSlNDZWxsICo+KHRoaXMpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU0Nl
bGwqPih0aGlzKTsKIH0KIAogaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVbmRlZmluZWQoKSBjb25z
dApAQCAtNDcyLDYgKzQ3OSwyNCBAQCBpbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6dG9VSW50MzIo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKGV4ZWMs
IG9rKTsKIH0KIAoraW5saW5lIGludDMyX3QgSlNWYWx1ZTo6dG9JbnQzMihkb3VibGUgdmFsKQor
eworICAgIGlmICghKHZhbCA+PSAtMjE0NzQ4MzY0OC4wICYmIHZhbCA8IDIxNDc0ODM2NDguMCkp
IHsKKyAgICAgICAgYm9vbCBpZ25vcmVkOworICAgICAgICByZXR1cm4gdG9JbnQzMlNsb3dDYXNl
KHZhbCwgaWdub3JlZCk7CisgICAgfQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih2
YWwpOworfQorCitpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQzMihkb3VibGUgdmFsKQor
eworICAgIGlmICghKHZhbCA+PSAwLjAgJiYgdmFsIDwgNDI5NDk2NzI5Ni4wKSkgeworICAgICAg
ICBib29sIGlnbm9yZWQ7CisgICAgICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKHZhbCwgaWdu
b3JlZCk7CisgICAgfQorICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsKTsKK30K
KwogaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6dG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMsIGJvb2wm
IG9rKSBjb25zdAogewogICAgIGludDMyX3QgaTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggZmZkZjkzYy4uNWEwZWRlYiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzOTczLDYgKzEzOTczLDcgQEAKIAkJMDg2
N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0g
UEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjEx
MDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJD
b3JlIiAqLzsKKwkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNT
Y2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNo
LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17212</attachid>
            <date>2007-11-12 14:06:37 -0800</date>
            <delta_ts>2007-11-12 15:12:42 -0800</delta_ts>
            <desc>better fix (still 0.1% regression overall, large speedup for math, slowdown for few tests)</desc>
            <filename>eval.patch</filename>
            <type>text/plain</type>
            <size>53532</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAgYi9KYXZhU2NyaXB0Q29y
ZS9ranMvbm9kZXMuY3BwCmluZGV4IGU5ZjBkOTEuLmUyZmEwODEgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNw
cApAQCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICNkZWZpbmUgS0pTX0NIRUNLRVhD
RVBUSU9OTlVNQkVSIFwKICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7IFwKICAgICBoYW5k
bGVFeGNlcHRpb24oZXhlYyk7IFwKLSAgICByZXR1cm4gMC4wOyBcCisgICAgcmV0dXJuIDA7IFwK
ICAgfQogCiAjZGVmaW5lIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4gXApAQCAtMjI3LDcgKzIy
Nyw2IEBAIGRvdWJsZSBFeHByZXNzaW9uTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSogdmFsdWUgPSBldmFsdWF0ZShleGVjKTsKICAgICBLSlNf
Q0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGV4Y2VwdGlvbiBh
ZnRlciB0b051bWJlciwgY2FsbGVyIHdpbGwgZG8gc28gcmlnaHQgYWZ0ZXIgZXZhbHVhdGVUb051
bWJlcigpIGNhbGwKICAgICByZXR1cm4gdmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogfQogCkBAIC0y
MzgsNiArMjM3LDIwIEBAIGJvb2wgRXhwcmVzc2lvbk5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4
ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gdmFsdWUtPnRvQm9vbGVhbihleGVjKTsKIH0KIAor
aW50MzJfdCBFeHByZXNzaW9uTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IGV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VY
Q0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2YWx1ZS0+dG9JbnQzMihleGVjKTsKK30KKwordWlu
dDMyX3QgRXhwcmVzc2lvbk5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhD
RVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHZhbHVlLT50b1VJbnQzMihleGVjKTsKK30KKwogc3Rh
dGljIHZvaWQgc3Vic3RpdHV0ZShVU3RyaW5nICZzdHJpbmcsIGNvbnN0IFVTdHJpbmcgJnN1YnN0
cmluZykgS0pTX0ZBU1RfQ0FMTDsKIHN0YXRpYyB2b2lkIHN1YnN0aXR1dGUoVVN0cmluZyAmc3Ry
aW5nLCBjb25zdCBVU3RyaW5nICZzdWJzdHJpbmcpCiB7CkBAIC00MjUsNiArNDM4LDE2IEBAIGJv
b2wgTnVtYmVyTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikKICAgICByZXR1cm4g
bV9kb3VibGUgPCAwLjAgfHwgbV9kb3VibGUgPiAwLjA7IC8vIGZhbHNlIGZvciBOYU4gYXMgd2Vs
bCBhcyAwCiB9CiAKK2ludDMyX3QgTnVtYmVyTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0
ZSopCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OnRvSW50MzIobV9kb3VibGUpOworfQorCit1aW50
MzJfdCBOdW1iZXJOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopCit7CisgICAgcmV0
dXJuIEpTVmFsdWU6OnRvVUludDMyKG1fZG91YmxlKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEltbWVkaWF0ZU51bWJlck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogSlNWYWx1ZSogSW1tZWRpYXRlTnVtYmVyTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlKikKQEAgLTQ2Nyw3ICs0OTAsNyBAQCBKU1ZhbHVlICpUaGlzTm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlICpleGVjKQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJl
c29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQSAx
MS4xLjIgJiAxMC4xLjQKLUpTVmFsdWUgKlJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpCitKU1ZhbHVlKiBSZXNvbHZlTm9kZTo6aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKiBl
eGVjKQogewogICAvLyBDaGVjayBmb3IgbWlzc2VkIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eS4K
ICAgQVNTRVJUKCFjYW5Ta2lwTG9va3VwKGV4ZWMsIGlkZW50KSk7CkBAIC00OTIsNiArNTE1LDM5
IEBAIEpTVmFsdWUgKlJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiAgIHJl
dHVybiB0aHJvd1VuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpOwogfQogCitKU1Zh
bHVlKiBSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBpbmxpbmVFdmFsdWF0ZShleGVjKTsKK30KKworZG91YmxlIFJlc29sdmVOb2RlOjpldmFsdWF0
ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZh
bHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYt
PnRvTnVtYmVyKGV4ZWMpOworfQorCitib29sIFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvQm9vbGVh
bihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4
ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KKyAgICByZXR1cm4gdi0+dG9Cb29s
ZWFuKGV4ZWMpOworfQorCitpbnQzMl90IFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsK
KyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdi0+dG9JbnQzMihleGVj
KTsKK30KKwordWludDMyX3QgUmVzb2x2ZU5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBL
SlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdi0+dG9VSW50MzIoZXhlYyk7Cit9
CisKIHZvaWQgUmVzb2x2ZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5
Tm9kZSogZnVuY3Rpb25Cb2R5LCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikKIHsKICAg
ICBzaXplX3QgaW5kZXggPSBmdW5jdGlvbkJvZHktPnN5bWJvbFRhYmxlKCkuZ2V0KGlkZW50LnVz
dHJpbmcoKS5yZXAoKSk7CkBAIC01MjEsNiArNTc3LDE2IEBAIGJvb2wgTG9jYWxWYXJBY2Nlc3NO
b2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGlubGlu
ZUV2YWx1YXRlKGV4ZWMpLT50b0Jvb2xlYW4oZXhlYyk7CiB9CiAKK2ludDMyX3QgTG9jYWxWYXJB
Y2Nlc3NOb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBpbmxpbmVFdmFsdWF0ZShleGVjKS0+dG9JbnQzMihleGVjKTsKK30KKwordWludDMyX3QgTG9j
YWxWYXJBY2Nlc3NOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvVUludDMyKGV4ZWMpOworfQorCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRWxlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIEVsZW1lbnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBu
b2RlU3RhY2spCkBAIC02NzIsMTQgKzczOCwzMiBAQCBKU1ZhbHVlKiBCcmFja2V0QWNjZXNzb3JO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAKIGRvdWJsZSBCcmFja2V0QWNjZXNzb3JO
b2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gaW5s
aW5lRXZhbHVhdGUoZXhlYyktPnRvTnVtYmVyKGV4ZWMpOworICAgIEpTVmFsdWUqIHYgPSBpbmxp
bmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1
cm4gdi0+dG9OdW1iZXIoZXhlYyk7CiB9CiAKIGJvb2wgQnJhY2tldEFjY2Vzc29yTm9kZTo6ZXZh
bHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBpbmxpbmVFdmFs
dWF0ZShleGVjKS0+dG9Cb29sZWFuKGV4ZWMpOworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFs
dWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCisgICAgcmV0dXJuIHYt
PnRvQm9vbGVhbihleGVjKTsKK30KKworaW50MzJfdCBCcmFja2V0QWNjZXNzb3JOb2RlOjpldmFs
dWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVF
dmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4g
di0+dG9JbnQzMihleGVjKTsKIH0KIAordWludDMyX3QgQnJhY2tldEFjY2Vzc29yTm9kZTo6ZXZh
bHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGlu
ZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVy
biB2LT50b1VJbnQzMihleGVjKTsKK30gICAgCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBEb3RBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogdm9pZCBEb3RBY2Nlc3Nvck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKQEAgLTY4
OCwxNCArNzcyLDQ2IEBAIHZvaWQgRG90QWNjZXNzb3JOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrCiB9CiAKIC8vIEVDTUEgMTEu
Mi4xYgotSlNWYWx1ZSAqRG90QWNjZXNzb3JOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMp
CitKU1ZhbHVlKiBEb3RBY2Nlc3Nvck5vZGU6OmlubGluZUV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgSlNWYWx1ZSAqdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tF
WENFUFRJT05WQUxVRQotICByZXR1cm4gdi0+dG9PYmplY3QoZXhlYyktPmdldChleGVjLCBpZGVu
dCk7CisgICAgSlNWYWx1ZSogdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVD
S0VYQ0VQVElPTlZBTFVFCisgICAgcmV0dXJuIHYtPnRvT2JqZWN0KGV4ZWMpLT5nZXQoZXhlYywg
aWRlbnQpOworfQogCitKU1ZhbHVlKiBEb3RBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7CiB9CiAKK2RvdWJs
ZSBEb3RBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENF
UFRJT05OVU1CRVIKKyAgICByZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7Cit9CisKK2Jvb2wgRG90
QWNjZXNzb3JOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
SlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElP
TkJPT0xFQU4KKyAgICByZXR1cm4gdi0+dG9Cb29sZWFuKGV4ZWMpOworfQorCitpbnQzMl90IERv
dEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBK
U1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCisgICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7Cit9CisKK3VpbnQzMl90IERvdEFj
Y2Vzc29yTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNW
YWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5V
TUJFUgorICAgIHJldHVybiB2LT50b1VJbnQzMihleGVjKTsKK30gICAgCisKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBcmd1bWVudExpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIHZvaWQgQXJndW1lbnRMaXN0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9k
ZVN0YWNrKQpAQCAtNzM1LDkgKzg1MSw5IEBAIHZvaWQgTmV3RXhwck5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOCiAKIC8v
IEVDTUEgMTEuMi4yCiAKLUpTVmFsdWUgKk5ld0V4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpCitKU1ZhbHVlKiBOZXdFeHByTm9kZTo6aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKiBl
eGVjKQogewotICBKU1ZhbHVlICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgIEpTVmFsdWUq
IHYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKIAog
ICBMaXN0IGFyZ0xpc3Q7CkBAIC03NDYsMTggKzg2Miw0OSBAQCBKU1ZhbHVlICpOZXdFeHByTm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
CiAgIH0KIAotICBpZiAoIXYtPmlzT2JqZWN0KCkpIHsKKyAgaWYgKCF2LT5pc09iamVjdCgpKQog
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQg
b2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IGFuIG9iamVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCBu
ZXcuIiwgdiwgZXhwci5nZXQoKSk7Ci0gIH0KIAogICBKU09iamVjdCAqY29uc3RyID0gc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPih2KTsKLSAgaWYgKCFjb25zdHItPmltcGxlbWVudHNDb25zdHJ1Y3Qo
KSkgeworICBpZiAoIWNvbnN0ci0+aW1wbGVtZW50c0NvbnN0cnVjdCgpKQogICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lv
biAlcykgaXMgbm90IGEgY29uc3RydWN0b3IuIENhbm5vdCBiZSB1c2VkIHdpdGggbmV3LiIsIHYs
IGV4cHIuZ2V0KCkpOwotICB9CiAKICAgcmV0dXJuIGNvbnN0ci0+Y29uc3RydWN0KGV4ZWMsIGFy
Z0xpc3QpOwogfQogCitKU1ZhbHVlKiBOZXdFeHByTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKK30KKworZG91YmxlIE5l
d0V4cHJOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1Zh
bHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVN
QkVSCisgICAgcmV0dXJuIHYtPnRvTnVtYmVyKGV4ZWMpOworfQorCitib29sIE5ld0V4cHJOb2Rl
OjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9
IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KKyAg
ICByZXR1cm4gdi0+dG9Cb29sZWFuKGV4ZWMpOworfQorCitpbnQzMl90IE5ld0V4cHJOb2RlOjpl
dmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxp
bmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1
cm4gdi0+dG9JbnQzMihleGVjKTsKK30KKwordWludDMyX3QgTmV3RXhwck5vZGU6OmV2YWx1YXRl
VG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFs
dWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdi0+
dG9VSW50MzIoZXhlYyk7Cit9ICAgIAorCiB2b2lkIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewogICAgIG5vZGVTdGFjay5hcHBlbmQoYXJncy5nZXQo
KSk7CkBAIC03OTksNyArOTQ2LDcgQEAgdm9pZCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkIKIH0KIAogLy8g
RUNNQSAxMS4yLjMKLUpTVmFsdWUgKkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZShF
eGVjU3RhdGUgKmV4ZWMpCitKU1ZhbHVlKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6aW5saW5l
RXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAvLyBDaGVjayBmb3IgbWlzc2VkIG9wdGlt
aXphdGlvbiBvcHBvcnR1bml0eS4KICAgQVNTRVJUKCFjYW5Ta2lwTG9va3VwKGV4ZWMsIGlkZW50
KSk7CkBAIC04MTksMTUgKzk2NiwxMyBAQCBKU1ZhbHVlICpGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogICAgICAgSlNWYWx1ZSAqdiA9IHNsb3QuZ2V0
VmFsdWUoZXhlYywgYmFzZSwgaWRlbnQpOwogICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUK
ICAgICAgICAgCi0gICAgICBpZiAoIXYtPmlzT2JqZWN0KCkpIHsKKyAgICAgIGlmICghdi0+aXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFs
dWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3Qgb2JqZWN0LiIsIHYsIGlkZW50
KTsKLSAgICAgIH0KICAgICAgIAogICAgICAgSlNPYmplY3QgKmZ1bmMgPSBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KHYpOwogICAgICAgCi0gICAgICBpZiAoIWZ1bmMtPmltcGxlbWVudHNDYWxsKCkp
IHsKKyAgICAgIGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiT2JqZWN0ICVzIChyZXN1bHQgb2YgZXhwcmVzc2lv
biAlcykgZG9lcyBub3QgYWxsb3cgY2FsbHMuIiwgdiwgaWRlbnQpOwotICAgICAgfQogICAgICAg
CiAgICAgICBMaXN0IGFyZ0xpc3Q7CiAgICAgICBhcmdzLT5ldmFsdWF0ZUxpc3QoZXhlYywgYXJn
TGlzdCk7CkBAIC04NTEsNyArOTk2LDQwIEBAIEpTVmFsdWUgKkZ1bmN0aW9uQ2FsbFJlc29sdmVO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiAgIHJldHVybiB0aHJvd1VuZGVmaW5lZFZh
cmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpOwogfQogCi1KU1ZhbHVlKiBMb2NhbFZhckZ1bmN0aW9u
Q2FsbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUqIEZ1bmN0aW9uQ2Fs
bFJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlu
bGluZUV2YWx1YXRlKGV4ZWMpOworfQorCitkb3VibGUgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6
OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBp
bmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICBy
ZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7Cit9CisKK2Jvb2wgRnVuY3Rpb25DYWxsUmVzb2x2ZU5v
ZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2
ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgor
ICAgIHJldHVybiB2LT50b0Jvb2xlYW4oZXhlYyk7Cit9CisKK2ludDMyX3QgRnVuY3Rpb25DYWxs
UmVzb2x2ZU5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNW
YWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5V
TUJFUgorICAgIHJldHVybiB2LT50b0ludDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBGdW5jdGlv
bkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQ
VElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b1VJbnQzMihleGVjKTsKK30KKworSlNWYWx1ZSog
TG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjppbmxpbmVFdmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihleGVjLT52YXJpYWJs
ZU9iamVjdCgpKS0+aXNBY3RpdmF0aW9uKCkpOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxBY3Rp
dmF0aW9uSW1wKj4oZXhlYy0+dmFyaWFibGVPYmplY3QoKSkgPT0gZXhlYy0+c2NvcGVDaGFpbigp
LnRvcCgpKTsKQEAgLTg3Miw2ICsxMDUwLDM5IEBAIEpTVmFsdWUqIExvY2FsVmFyRnVuY3Rpb25D
YWxsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBmdW5jLT5jYWxs
KGV4ZWMsIGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKSwgYXJnTGlz
dCk7CiB9CiAKK0pTVmFsdWUqIExvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKK30KKwor
ZG91YmxlIExvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAg
IEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsK
K30KKworYm9vbCBMb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7
CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgorICAgIHJldHVybiB2LT50b0Jvb2xlYW4o
ZXhlYyk7Cit9CisKK2ludDMyX3QgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZVRv
SW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0
ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdi0+dG9J
bnQzMihleGVjKTsKK30KKwordWludDMyX3QgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFs
dWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5l
RXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJu
IHYtPnRvVUludDMyKGV4ZWMpOworfQorCiB2b2lkIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7CiAgICAgbm9kZVN0YWNrLmFwcGVuZChhcmdzLmdl
dCgpKTsKQEAgLTk0OCw3ICsxMTU5LDcgQEAgdm9pZCBGdW5jdGlvbkNhbGxEb3ROb2RlOjpvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblMKIH0KIAog
Ly8gRUNNQSAxMS4yLjMKLUpTVmFsdWUgKkZ1bmN0aW9uQ2FsbERvdE5vZGU6OmV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZXhlYykKK0pTVmFsdWUqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmlubGluZUV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgSlNWYWx1ZSAqYmFzZVZhbCA9IGJhc2UtPmV2YWx1
YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQpAQCAtOTc4LDYgKzExODksMzkg
QEAgSlNWYWx1ZSAqRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KQogICByZXR1cm4gZnVuYy0+Y2FsbChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKIH0KIAorSlNW
YWx1ZSogRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKK30KKworZG91YmxlIEZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFs
dWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1C
RVIKKyAgICByZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7Cit9CisKK2Jvb2wgRnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFs
dWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09M
RUFOCisgICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKK30KKworaW50MzJfdCBGdW5jdGlv
bkNhbGxEb3ROb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpT
VmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05O
VU1CRVIKKyAgICByZXR1cm4gdi0+dG9JbnQzMihleGVjKTsKK30KKwordWludDMyX3QgRnVuY3Rp
b25DYWxsRG90Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
SlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElP
Tk5VTUJFUgorICAgIHJldHVybiB2LT50b1VJbnQzMihleGVjKTsKK30KKwogLy8gRUNNQSAxMS4z
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4UmVzb2x2ZU5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA5Miw2ICsxMzM2LDM3IEBA
IEpTVmFsdWUqIFBvc3REZWNMb2NhbFZhck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICByZXR1cm4gdjsKIH0KIAorZG91YmxlIFBvc3REZWNMb2NhbFZhck5vZGU6OmlubGluZUV2
YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDxBY3RpdmF0aW9uSW1wKj4oZXhlYy0+dmFyaWFibGVPYmplY3QoKSktPmlzQWN0aXZhdGlvbigp
KTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcCo+KGV4ZWMtPnZhcmlhYmxl
T2JqZWN0KCkpID09IGV4ZWMtPnNjb3BlQ2hhaW4oKS50b3AoKSk7CisgICAgCisgICAgSlNWYWx1
ZSoqIHNsb3QgPSAmZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWU7CisgICAgZG91
YmxlIG4gPSAoKnNsb3QpLT50b051bWJlcihleGVjKTsKKyAgICAqc2xvdCA9IGpzTnVtYmVyKG4g
LSAxKTsKKyAgICByZXR1cm4gbjsKK30KKworZG91YmxlIFBvc3REZWNMb2NhbFZhck5vZGU6OmV2
YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFs
dWF0ZVRvTnVtYmVyKGV4ZWMpOworfQorCitib29sIFBvc3REZWNMb2NhbFZhck5vZGU6OmV2YWx1
YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVh
dGVUb051bWJlcihleGVjKTsKK30KKworaW50MzJfdCBQb3N0RGVjTG9jYWxWYXJOb2RlOjpldmFs
dWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b0lu
dDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOworfQorCit1aW50MzJfdCBQb3N0RGVj
TG9jYWxWYXJOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9
CisKIHZvaWQgUG9zdERlY0xvY2FsVmFyTm9kZTo6b3B0aW1pemVGb3JVbm5lY2Vzc2FyeVJlc3Vs
dCgpCiB7CiAgICAgbmV3ICh0aGlzKSBQcmVEZWNMb2NhbFZhck5vZGUobV9pbmRleCk7CkBAIC0x
MzU2LDcgKzE2MzEsNyBAQCBzdGF0aWMgSlNWYWx1ZSAqdHlwZVN0cmluZ0ZvclZhbHVlKEpTVmFs
dWUgKnYpCiAgICAgICAgICAgICAvLyBSZXR1cm4gInVuZGVmaW5lZCIgZm9yIG9iamVjdHMgdGhh
dCBzaG91bGQgYmUgdHJlYXRlZAogICAgICAgICAgICAgLy8gYXMgbnVsbCB3aGVuIGRvaW5nIGNv
bXBhcmlzb25zLgogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiktPm1h
c3F1ZXJhZGVBc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZygi
dW5kZWZpbmVkIik7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KCJ1bmRlZmluZWQiKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4odiktPmltcGxlbWVudHNDYWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KCJmdW5jdGlvbiIpOwogICAgICAgICB9CkBAIC0xNjQ3LDEwICsxOTIyLDI5IEBAIHZvaWQgVW5h
cnlQbHVzTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVj
bGFyYXRpb25TdGFja3M6CiAvLyBFQ01BIDExLjQuNgogSlNWYWx1ZSogVW5hcnlQbHVzTm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVlICp2ID0gbV9leHByLT5ldmFs
dWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKKyAgICBKU1ZhbHVlICp2ID0g
bV9leHByLT5ldmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQorICAg
IHJldHVybiB2LT50b0pTTnVtYmVyKGV4ZWMpOworfQorCitib29sIFVuYXJ5UGx1c05vZGU6OmV2
YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gbV9leHByLT5l
dmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKK30KKworZG91YmxlIFVuYXJ5UGx1c05vZGU6OmV2YWx1
YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBtX2V4cHItPmV2YWx1
YXRlVG9OdW1iZXIoZXhlYyk7Cit9CiAKLSAgcmV0dXJuIHYtPnRvSlNOdW1iZXIoZXhlYyk7Citp
bnQzMl90IFVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIG1fZXhwci0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCit1aW50MzJf
dCBVbmFyeVBsdXNOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gbV9leHByLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiB9CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOZWdhdGVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC0xNjgxLDExICsxOTc1LDM0IEBAIHZvaWQgQml0d2lzZU5vdE5vZGU6
Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3Rh
Y2tzCiB9CiAKIC8vIEVDTUEgMTEuNC44Ci1KU1ZhbHVlICpCaXR3aXNlTm90Tm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlICpleGVjKQoraW50MzJfdCBCaXR3aXNlTm90Tm9kZTo6aW5saW5lRXZhbHVh
dGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSAqdiA9IGV4cHItPmV2YWx1
YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICByZXR1cm4ganNOdW1iZXIo
fnYtPnRvSW50MzIoZXhlYykpOworICAgIHJldHVybiB+ZXhwci0+ZXZhbHVhdGVUb0ludDMyKGV4
ZWMpOworfQorCitKU1ZhbHVlKiBCaXR3aXNlTm90Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykp
OworfQorCitkb3VibGUgQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisK
K2Jvb2wgQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCitpbnQzMl90
IEJpdHdpc2VOb3ROb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK3VpbnQzMl90IEJpdHdp
c2VOb3ROb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gTG9naWNhbE5vdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQpAQCAtMTczMyw2ICsyMDUwLDIxIEBAIGRvdWJsZSBNdWx0Tm9kZTo6ZXZhbHVhdGVUb051
bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIo
ZXhlYyk7CiB9CiAKK2Jvb2wgTXVsdE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKTsKK30KKwor
aW50MzJfdCBNdWx0Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsK
K30KKwordWludDMyX3QgTXVsdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KGV4ZWMpKTsKK30KKwogdm9pZCBEaXZOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7
CiAgICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMS5nZXQoKSk7CkBAIC0xNzU4LDYgKzIwOTAsMTYg
QEAgZG91YmxlIERpdk5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogICAg
IHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogfQogCitpbnQzMl90IERpdk5v
ZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFs
dWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9CisKK3VpbnQzMl90
IERpdk5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKK30KKwog
dm9pZCBNb2ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7CiAgICAgbm9kZVN0YWNr
LmFwcGVuZCh0ZXJtMS5nZXQoKSk7CkBAIC0xNzgzLDYgKzIxMjUsMjEgQEAgZG91YmxlIE1vZE5v
ZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBpbmxpbmVF
dmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogfQogCitib29sIE1vZE5vZGU6OmV2YWx1YXRlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb051bWJl
cihleGVjKTsKK30KKworaW50MzJfdCBNb2ROb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlubGluZUV2YWx1YXRlVG9O
dW1iZXIoZXhlYykpOworfQorCit1aW50MzJfdCBNb2ROb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZh
bHVhdGVUb051bWJlcihleGVjKSk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBBZGRpdGl2ZSBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBzdGF0aWMgSlNWYWx1ZSogdGhyb3dPdXRPZk1lbW9yeUVycm9yKEV4ZWNTdGF0ZSogZXhl
YykKQEAgLTE4OTgsNyArMjI1NSw3IEBAIEpTVmFsdWUqIEFkZE5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSogZXhlYykKICAgcmV0dXJuIGFkZChleGVjLCB2MSwgdjIpOwogfQogCi1kb3VibGUgQWRk
Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCitkb3VibGUgQWRkTm9kZTo6
aW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSog
djEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVS
CkBAIC0xOTA5LDYgKzIyNjYsMjEgQEAgZG91YmxlIEFkZE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIo
RXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBhZGRUb051bWJlcihleGVjLCB2MSwgdjIpOwog
fQogCitkb3VibGUgQWRkTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Cit9CisKK2ludDMyX3Qg
QWRkTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
SlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKK30KKwordWlu
dDMyX3QgQWRkTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIEpTVmFsdWU6OnRvVUludDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOwor
fSAgICAKKwogZG91YmxlIEFkZE51bWJlcnNOb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBkb3VibGUgbjEgPSB0ZXJtMS0+ZXZhbHVhdGVUb051bWJl
cihleGVjKTsKQEAgLTE5MjcsNiArMjI5OSwxNiBAQCBkb3VibGUgQWRkTnVtYmVyc05vZGU6OmV2
YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBpbmxpbmVFdmFsdWF0
ZVRvTnVtYmVyKGV4ZWMpOwogfQogCitpbnQzMl90IEFkZE51bWJlcnNOb2RlOjpldmFsdWF0ZVRv
SW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlu
bGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOworfQorCit1aW50MzJfdCBBZGROdW1iZXJzTm9k
ZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFs
dWU6OnRvVUludDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOworfQorCiBKU1ZhbHVl
KiBBZGRTdHJpbmdzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFs
dWUqIHYxID0gdGVybTEtPmV2YWx1YXRlKGV4ZWMpOwpAQCAtMTk4Nyw2ICsyMzY5LDE2IEBAIGRv
dWJsZSBTdWJOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1
cm4gaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKTsKIH0KIAoraW50MzJfdCBTdWJOb2RlOjpl
dmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0
b0ludDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOworfQorCit1aW50MzJfdCBTdWJO
b2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNW
YWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9ICAgIAorCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2hpZnQgTm9kZXMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgTGVmdFNoaWZ0Tm9kZTo6b3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYgbm9kZVN0YWNrKQpAQCAtMTk5NiwxNiArMjM4OCwzMiBAQCB2b2lkIExlZnRTaGlmdE5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9u
U3RhY2tzOgogfQogCiAvLyBFQ01BIDExLjcuMQotSlNWYWx1ZSAqTGVmdFNoaWZ0Tm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQoraW50MzJfdCBMZWZ0U2hpZnROb2RlOjppbmxpbmVFdmFs
dWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVlICp2MSA9IHRlcm0xLT5l
dmFsdWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgSlNWYWx1ZSAqdjIg
PSB0ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIHVu
c2lnbmVkIGludCBpMiA9IHYyLT50b1VJbnQzMihleGVjKTsKLSAgaTIgJj0gMHgxZjsKKyAgICBp
bnQgaTEgPSB0ZXJtMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQ
VElPTk5VTUJFUgorICAgIHVuc2lnbmVkIGludCBpMiA9IHRlcm0yLT5ldmFsdWF0ZVRvVUludDMy
KGV4ZWMpICYgMHgxZjsKKyAgICByZXR1cm4gKGkxIDw8IGkyKTsKK30KIAotICByZXR1cm4ganNO
dW1iZXIodjEtPnRvSW50MzIoZXhlYykgPDwgaTIpOworSlNWYWx1ZSogTGVmdFNoaWZ0Tm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBqc051bWJlcihpbmxpbmVF
dmFsdWF0ZVRvSW50MzIoZXhlYykpOworfQorCitkb3VibGUgTGVmdFNoaWZ0Tm9kZTo6ZXZhbHVh
dGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRl
VG9JbnQzMihleGVjKTsKK30KKworaW50MzJfdCBMZWZ0U2hpZnROb2RlOjpldmFsdWF0ZVRvSW50
MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIo
ZXhlYyk7Cit9CisKK3VpbnQzMl90IExlZnRTaGlmdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7
CiB9CiAKIHZvaWQgUmlnaHRTaGlmdE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rp
b25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKQEAg
LTIwMTUsMTYgKzI0MjMsMzIgQEAgdm9pZCBSaWdodFNoaWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3MKIH0KIAogLy8gRUNN
QSAxMS43LjIKLUpTVmFsdWUgKlJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4
ZWMpCitpbnQzMl90IFJpZ2h0U2hpZnROb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0
YXRlKiBleGVjKQogewotICBKU1ZhbHVlICp2MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVjKTsKLSAg
S0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgSlNWYWx1ZSAqdjIgPSB0ZXJtMi0+ZXZhbHVhdGUo
ZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIHVuc2lnbmVkIGludCBpMiA9IHYy
LT50b1VJbnQzMihleGVjKTsKLSAgaTIgJj0gMHgxZjsKKyAgICBpbnQgaTEgPSB0ZXJtMS0+ZXZh
bHVhdGVUb0ludDMyKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHVu
c2lnbmVkIGludCBpMiA9IHRlcm0yLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKKyAg
ICByZXR1cm4gKGkxID4+IGkyKTsKK30KIAotICByZXR1cm4ganNOdW1iZXIodjEtPnRvSW50MzIo
ZXhlYykgPj4gaTIpOworSlNWYWx1ZSogUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4
ZWMpKTsKK30KKworZG91YmxlIFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwor
fQorCitpbnQzMl90IFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK3Vp
bnQzMl90IFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogfQogCiB2b2lkIFVu
c2lnbmVkUmlnaHRTaGlmdE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5
Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKQEAgLTIwMzQs
MTYgKzI0NTgsMzIgQEAgdm9pZCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGkKIH0KIAogLy8gRUNNQSAxMS43
LjMKLUpTVmFsdWUgKlVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYykKK3VpbnQzMl90IFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmlubGluZUV2YWx1YXRlVG9V
SW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVlICp2MSA9IHRlcm0xLT5ldmFsdWF0
ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgSlNWYWx1ZSAqdjIgPSB0ZXJt
Mi0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIHVuc2lnbmVk
IGludCBpMiA9IHYyLT50b1VJbnQzMihleGVjKTsKLSAgaTIgJj0gMHgxZjsKKyAgICB1bnNpZ25l
ZCBpbnQgaTEgPSB0ZXJtMS0+ZXZhbHVhdGVUb1VJbnQzMihleGVjKTsKKyAgICBLSlNfQ0hFQ0tF
WENFUFRJT05OVU1CRVIKKyAgICB1bnNpZ25lZCBpbnQgaTIgPSB0ZXJtMi0+ZXZhbHVhdGVUb1VJ
bnQzMihleGVjKSAmIDB4MWY7CisgICAgcmV0dXJuIChpMSA+PiBpMik7Cit9CiAKLSAgcmV0dXJu
IGpzTnVtYmVyKHYxLT50b1VJbnQzMihleGVjKSA+PiBpMik7CitKU1ZhbHVlKiBVbnNpZ25lZFJp
Z2h0U2hpZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGpz
TnVtYmVyKGlubGluZUV2YWx1YXRlVG9VSW50MzIoZXhlYykpOworfQorCitkb3VibGUgVW5zaWdu
ZWRSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9VSW50MzIoZXhlYyk7Cit9CisKK2ludDMyX3QgVW5z
aWduZWRSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb1VJbnQzMihleGVjKTsKK30KKwordWludDMyX3Qg
VW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9VSW50MzIoZXhlYyk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWxhdGlvbmFsIE5vZGVzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzOTksMTQgKzI4MzksNDIgQEAgdm9pZCBCaXRBbmRO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm8KIH0KIAogLy8gRUNNQSAxMS4xMAotSlNWYWx1ZSAqQml0QW5kTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogQml0QW5kTm9kZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlKiBleGVjKQogeyAgICAKLSAgSlNWYWx1ZSAqdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIEpTVmFsdWUgKnYyID0gZXhwcjItPmV2
YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAKLSAgcmV0dXJuIGpz
TnVtYmVyRnJvbUFuZChleGVjLCB2MSwgdjIpOworICAgIEpTVmFsdWUgKnYxID0gZXhwcjEtPmV2
YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCisgICAgSlNWYWx1ZSAq
djIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUK
KworICAgIHJldHVybiBqc051bWJlckZyb21BbmQoZXhlYywgdjEsIHYyKTsKK30KKworaW50MzJf
dCBCaXRBbmROb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIGludDMyX3QgaTEgPSBleHByMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOworICAgIEtKU19D
SEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIGludDMyX3QgaTIgPSBleHByMi0+ZXZhbHVhdGVUb0lu
dDMyKGV4ZWMpOworICAgIHJldHVybiAoaTEgJiBpMik7Cit9CisKK2RvdWJsZSBCaXRBbmROb2Rl
OjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5l
RXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCitib29sIEJpdEFuZE5vZGU6OmV2YWx1YXRlVG9C
b29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0lu
dDMyKGV4ZWMpOworfQorCitpbnQzMl90IEJpdEFuZE5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsK
K30KKwordWludDMyX3QgQml0QW5kTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKIH0KIAogdm9p
ZCBCaXRYT3JOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCkBAIC0yNDE1LDE0ICsyODgz
LDM3IEBAIHZvaWQgQml0WE9yTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJv
ZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vCiAgICAgbm9kZVN0YWNrLmFwcGVuZChleHBy
MS5nZXQoKSk7CiB9CiAKLUpTVmFsdWUgKkJpdFhPck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYykKK2ludDMyX3QgQml0WE9yTm9kZTo6aW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSAqdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtK
U19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIEpTVmFsdWUgKnYyID0gZXhwcjItPmV2YWx1YXRlKGV4
ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAKLSAgcmV0dXJuIGpzTnVtYmVyKHYx
LT50b0ludDMyKGV4ZWMpIF4gdjItPnRvSW50MzIoZXhlYykpOworICAgIGludCBpMSA9IGV4cHIx
LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisg
ICAgaW50IGkyID0gZXhwcjItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICByZXR1cm4gKGkx
IF4gaTIpOworfQorCitKU1ZhbHVlKiBCaXRYT3JOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGpzTnVtYmVyKGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7
Cit9CisKK2RvdWJsZSBCaXRYT3JOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCitib29s
IEJpdFhPck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBy
ZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCitpbnQzMl90IEJpdFhPck5v
ZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGlu
ZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKK30KKwordWludDMyX3QgQml0WE9yTm9kZTo6ZXZhbHVh
dGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRl
VG9JbnQzMihleGVjKTsKIH0KIAogdm9pZCBCaXRPck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nl
c3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVT
dGFjaykKQEAgLTI0MzEsMTQgKzI5MjIsMzcgQEAgdm9pZCBCaXRPck5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2QKICAg
ICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdldCgpKTsKIH0KIAotSlNWYWx1ZSAqQml0T3JOb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitpbnQzMl90IEJpdE9yTm9kZTo6aW5saW5lRXZh
bHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSAqdjEgPSBleHByMS0+
ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIEpTVmFsdWUgKnYy
ID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAK
LSAgcmV0dXJuIGpzTnVtYmVyKHYxLT50b0ludDMyKGV4ZWMpIHwgdjItPnRvSW50MzIoZXhlYykp
OworICAgIGludCBpMSA9IGV4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgS0pTX0NI
RUNLRVhDRVBUSU9OTlVNQkVSCisgICAgaW50IGkyID0gZXhwcjItPmV2YWx1YXRlVG9JbnQzMihl
eGVjKTsKKyAgICByZXR1cm4gKGkxIHwgaTIpOworfQorCitKU1ZhbHVlKiBCaXRPck5vZGU6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZh
bHVhdGVUb0ludDMyKGV4ZWMpKTsKK30KKworZG91YmxlIEJpdE9yTm9kZTo6ZXZhbHVhdGVUb051
bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQz
MihleGVjKTsKK30KKworYm9vbCBCaXRPck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQor
CitpbnQzMl90IEJpdE9yTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBC
aXRPck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBCaW5hcnkgTG9naWNhbCBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC0yNTE2LDYgKzMwMzAsMjcgQEAgYm9vbCBDb25kaXRpb25hbE5vZGU6OmV2YWx1
YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gYiA/IGV4cHIxLT5ldmFs
dWF0ZVRvQm9vbGVhbihleGVjKSA6IGV4cHIyLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKIH0K
IAorZG91YmxlIENvbmRpdGlvbmFsTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgYm9vbCBiID0gbG9naWNhbC0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Cisg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIGIgPyBleHByMS0+ZXZhbHVh
dGVUb051bWJlcihleGVjKSA6IGV4cHIyLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOworfQorCitp
bnQzMl90IENvbmRpdGlvbmFsTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBib29sIGIgPSBsb2dpY2FsLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAgICBL
SlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gYiA/IGV4cHIxLT5ldmFsdWF0ZVRv
SW50MzIoZXhlYykgOiBleHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCit1aW50MzJf
dCBDb25kaXRpb25hbE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIGJvb2wgYiA9IGxvZ2ljYWwtPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworICAgIEtKU19D
SEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiBiID8gZXhwcjEtPmV2YWx1YXRlVG9VSW50
MzIoZXhlYykgOiBleHByMi0+ZXZhbHVhdGVUb1VJbnQzMihleGVjKTsKK30KKwogLy8gRUNNQSAx
MS4xMwogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiB2YWx1ZUZvclJlYWRNb2RpZnlB
c3NpZ25tZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogY3VycmVudCwgRXhwcmVzc2lvbk5v
ZGUqIHJpZ2h0LCBPcGVyYXRvciBvcGVyKSBLSlNfRkFTVF9DQUxMOwpAQCAtMjU0MCwzMiArMzA3
NSwzMiBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiB2YWx1ZUZvclJlYWRNb2RpZnlB
c3NpZ25tZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIGJyZWFrOwogICBjYXNlIE9wTFNo
aWZ0OgogICAgIGkxID0gY3VycmVudC0+dG9JbnQzMihleGVjKTsKLSAgICBpMiA9IHJpZ2h0LT5l
dmFsdWF0ZShleGVjKS0+dG9JbnQzMihleGVjKTsKKyAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRv
SW50MzIoZXhlYyk7CiAgICAgdiA9IGpzTnVtYmVyKGkxIDw8IGkyKTsKICAgICBicmVhazsKICAg
Y2FzZSBPcFJTaGlmdDoKICAgICBpMSA9IGN1cnJlbnQtPnRvSW50MzIoZXhlYyk7Ci0gICAgaTIg
PSByaWdodC0+ZXZhbHVhdGUoZXhlYyktPnRvSW50MzIoZXhlYyk7CisgICAgaTIgPSByaWdodC0+
ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIHYgPSBqc051bWJlcihpMSA+PiBpMik7CiAgICAg
YnJlYWs7CiAgIGNhc2UgT3BVUlNoaWZ0OgogICAgIHVpID0gY3VycmVudC0+dG9VSW50MzIoZXhl
Yyk7Ci0gICAgaTIgPSByaWdodC0+ZXZhbHVhdGUoZXhlYyktPnRvSW50MzIoZXhlYyk7CisgICAg
aTIgPSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIHYgPSBqc051bWJlcih1aSA+
PiBpMik7CiAgICAgYnJlYWs7CiAgIGNhc2UgT3BBbmRFcToKICAgICBpMSA9IGN1cnJlbnQtPnRv
SW50MzIoZXhlYyk7Ci0gICAgaTIgPSByaWdodC0+ZXZhbHVhdGUoZXhlYyktPnRvSW50MzIoZXhl
Yyk7CisgICAgaTIgPSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIHYgPSBqc051
bWJlcihpMSAmIGkyKTsKICAgICBicmVhazsKICAgY2FzZSBPcFhPckVxOgogICAgIGkxID0gY3Vy
cmVudC0+dG9JbnQzMihleGVjKTsKLSAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZShleGVjKS0+dG9J
bnQzMihleGVjKTsKKyAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiAgICAg
diA9IGpzTnVtYmVyKGkxIF4gaTIpOwogICAgIGJyZWFrOwogICBjYXNlIE9wT3JFcToKICAgICBp
MSA9IGN1cnJlbnQtPnRvSW50MzIoZXhlYyk7Ci0gICAgaTIgPSByaWdodC0+ZXZhbHVhdGUoZXhl
YyktPnRvSW50MzIoZXhlYyk7CisgICAgaTIgPSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMp
OwogICAgIHYgPSBqc051bWJlcihpMSB8IGkyKTsKICAgICBicmVhazsKICAgY2FzZSBPcE1vZEVx
OiB7CkBAIC0yODU0LDkgKzMzODksMjkgQEAgdm9pZCBBc3NpZ25FeHByTm9kZTo6b3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3MKIH0KIAog
Ly8gRUNNQSAxMi4yCi1KU1ZhbHVlICpBc3NpZ25FeHByTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
ICpleGVjKQorSlNWYWx1ZSogQXNzaWduRXhwck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gZXhwci0+ZXZhbHVhdGUoZXhlYyk7Cit9CisKK2Jvb2wgQXNzaWdu
RXhwck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gZXhwci0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Cit9CisKK2RvdWJsZSBBc3NpZ25FeHBy
Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGV4
cHItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Cit9CisKK2ludDMyX3QgQXNzaWduRXhwck5vZGU6
OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGV4cHItPmV2
YWx1YXRlVG9JbnQzMihleGVjKTsKK30KKwordWludDMyX3QgQXNzaWduRXhwck5vZGU6OmV2YWx1
YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICByZXR1cm4gZXhwci0+ZXZhbHVhdGUo
ZXhlYyk7CisgICAgcmV0dXJuIGV4cHItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKIH0KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZhckRlY2xOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI4OTYsNyArMzQ1MSw3IEBAIHZvaWQgVmFyRGVjbE5v
ZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYgc3RhY2tzKQogdm9pZCBWYXJE
ZWNsTm9kZTo6aGFuZGxlU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY29wZUNoYWlu
JiBjaGFpbiwgSlNWYWx1ZSogdmFsKQogewogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0g
Y2hhaW4uYmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7
ICAgICAgICAKKyAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7CiAgICAg
CiAgICAgLy8gd2UgbXVzdCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWlu
CiAgICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tq
cy9ub2Rlcy5oIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKaW5kZXggZDYwYjczMy4uNjQ2
MmQ2ZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKKysrIGIvSmF2YVNj
cmlwdENvcmUva2pzL25vZGVzLmgKQEAgLTE4MCw2ICsxODAsOCBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTCA9IDA7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1i
ZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2
YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgICB2aXJ0dWFs
IHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAKICAgICAgICAgLy8gVXNlZCB0byBvcHRpbWl6ZSB0aG9zZSBub2RlcyB0aGF0IGRv
IGV4dHJhIHdvcmsgd2hlbiByZXR1cm5pbmcgYSByZXN1bHQsIGV2ZW4gaWYgdGhlIHJlc3VsdCBo
YXMgbm8gc2VtYW50aWMgcmVsZXZhbmNlCkBAIC0yMzQsNiArMjM2LDggQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRv
VUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogCkBAIC0z
MDYsNiArMzEwLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKIAogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jv
b2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFs
dWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQz
Ml90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1
YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY1ByaW1hcnk7IH0KIApAQCAtMzE0LDYgKzMyMiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuIGlkZW50OyB9CiAKICAgcHJvdGVjdGVkOgorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7CiAgICAgSWRlbnRpZmllciBpZGVudDsKICAgICBz
aXplX3QgaW5kZXg7IC8vIFVzZWQgYnkgTG9jYWxWYXJBY2Nlc3NOb2RlLgogICB9OwpAQCAtMzMw
LDYgKzMzOSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0
ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2
YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBp
bnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZp
cnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVhdGUo
RXhlY1N0YXRlKik7CiAgIH07CkBAIC00MjgsNiArNDM5LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMy
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTWVtYmVyOyB9CiAKQEAgLTQ0Nyw2ICs0
NjAsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgRG90QWNjZXNzb3JOb2RlKEV4cHJlc3Npb25O
b2RlKiBlLCBjb25zdCBJZGVudGlmaWVyJiBzKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSwgaWRl
bnQocykgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rp
b25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJ
bnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2Vk
ZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY01lbWJlcjsgfQogCkBAIC00NTYs
NiArNDczLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllcigpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gaWRlbnQ7IH0KIAogICBwcml2YXRl
OgorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7
CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwogICAgIElkZW50aWZpZXIgaWRlbnQ7
CiAgIH07CkBAIC00OTksOSArNTE3LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIE5ld0V4cHJO
b2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBBcmd1bWVudHNOb2RlKiBhKSBLSlNfRkFTVF9DQUxMIDog
ZXhwcihlKSwgYXJncyhhKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRl
VG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZh
bHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNMZWZ0SGFuZFNp
ZGU7IH0KICAgcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGluZUV2YWx1
YXRlKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKICAgICBS
ZWZQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKICAgfTsKQEAgLTUzNSwxMCArNTU4LDE1IEBAIG5h
bWVzcGFjZSBLSlMgewogCiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQz
MihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVh
dGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KIAogICBw
cm90ZWN0ZWQ6CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShFeGVj
U3RhdGUqKTsKICAgICBJZGVudGlmaWVyIGlkZW50OwogICAgIFJlZlB0cjxBcmd1bWVudHNOb2Rl
PiBhcmdzOwogICAgIHNpemVfdCBpbmRleDsgLy8gVXNlZCBieSBMb2NhbFZhckZ1bmN0aW9uQ2Fs
bE5vZGUuCkBAIC01NTQsNiArNTgyLDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIH0KIAogICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICBwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7CiAgIH07CiAKICAgY2xhc3MgRnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewpAQCAtNTc0LDkg
KzYwOCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBGdW5jdGlvbkNhbGxEb3ROb2RlKEV4cHJl
c3Npb25Ob2RlKiBiLCBjb25zdCBJZGVudGlmaWVyJiBpLCBBcmd1bWVudHNOb2RlKiBhKSBLSlNf
RkFTVF9DQUxMIDogYmFzZShiKSwgaWRlbnQoaSksIGFyZ3MoYSkge30KICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25T
dGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgYm9vbCBldmFs
dWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91
YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0
dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjQ2FsbDsgfQotICBwcm90ZWN0ZWQ6CisgIHByaXZhdGU6CisgICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShFeGVjU3RhdGUqKTsKICAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IGJhc2U7CiAgICAgSWRlbnRpZmllciBpZGVudDsKICAgICBSZWZQdHI8
QXJndW1lbnRzTm9kZT4gYXJnczsKQEAgLTY1Myw3ICs2OTIsMTMgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgfQogCiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOworICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0lu
dDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFs
dWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQoKTsKKyAgcHJpdmF0ZToKKyAgICBBTFdBWVNf
SU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopOwogICB9Owog
CiAgIGNsYXNzIFBvc3RmaXhCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBA
IC05ODAsNiArMTAyNSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBVbmFyeVBsdXNOb2RlKEV4
cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlw
ZSksIG1fZXhwcihlKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CisgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50
MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1
YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogICBw
cml2YXRlOgpAQCAtMTAwMyw5ICsxMDUyLDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEJpdHdp
c2VOb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogRXhwcmVzc2lvbk5v
ZGUoTnVtYmVyVHlwZSksIGV4cHIoZSkge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jv
b2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZh
bHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50
MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5h
cnk7IH0KICAgcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVh
dGVUb0ludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsK
ICAgfTsKIApAQCAtMTAyNyw2ICsxMDgxLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFs
IGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAg
ICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKKyAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNdWx0aXBsaWNpdGF2ZTsgfQogICBwcml2
YXRlOgpAQCAtMTA0MSw2ICsxMDk4LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIGRv
dWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICB2
aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CisgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2Uo
KSBjb25zdCB7IHJldHVybiBQcmVjTXVsdGlwbGljaXRhdmU7IH0KICAgcHJpdmF0ZToKQEAgLTEw
NTUsNiArMTExNCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0
ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVh
dGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgdmlydHVhbCBib29s
IGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0
dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IHJldHVybiBQcmVjTXVsdGlwbGljaXRhdmU7IH0KICAgcHJpdmF0ZToKQEAgLTEwNjks
MTIgKzExMzEsMTYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVt
YmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1
YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMy
X3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0FkZGl0
aXZlOyB9CiAgIHByb3RlY3RlZDoKICAgICBBZGROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhw
cmVzc2lvbk5vZGUqIHQyLCBKU1R5cGUgZXhwZWN0ZWRSZXR1cm4pIEtKU19GQVNUX0NBTEwgOiBF
eHByZXNzaW9uTm9kZShleHBlY3RlZFJldHVybiksIHRlcm0xKHQxKSwgdGVybTIodDIpIHt9CiAg
ICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IHRlcm0yOworICBwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIGlubGluZUV2
YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKik7CiAgIH07CiAKICAgICBjbGFzcyBBZGROdW1iZXJz
Tm9kZSA6IHB1YmxpYyBBZGROb2RlIHsKQEAgLTEwODIsNiArMTE0OCw4IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICBBZGROdW1iZXJzTm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4cHJlc3Np
b25Ob2RlKiB0MikgS0pTX0ZBU1RfQ0FMTCA6IEFkZE5vZGUodDEsIHQyLCBOdW1iZXJUeXBlKSB7
fQogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQz
MihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2
YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICBwcml2YXRlOgog
ICAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgfTsKQEAgLTExMTAsNiArMTE3OCw4IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9D
QUxMOwogICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOworICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0
ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9
CiAgIHByaXZhdGU6CkBAIC0xMTI0LDkgKzExOTQsMTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQog
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUq
LCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmly
dHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwor
ICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IHsgcmV0dXJuIFByZWNTaGlmdDsgfQogICBwcml2YXRlOgorICAgIEFMV0FZU19JTkxJ
TkUgaW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKik7CiAgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0y
OwogICB9OwpAQCAtMTEzNyw5ICsxMjExLDEzIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgOiBF
eHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgdGVybTEodDEpLCB0ZXJtMih0Mikge30KICAgICB2
aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwg
ZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2
aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCB7IHJldHVybiBQcmVjU2hpZnQ7IH0KICAgcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIGlu
dDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gdGVybTE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMjsKICAg
fTsKQEAgLTExNTAsOSArMTIyOCwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIDogRXhwcmVz
c2lvbk5vZGUoTnVtYmVyVHlwZSksIHRlcm0xKHQxKSwgdGVybTIodDIpIHt9CiAgICAgdmlydHVh
bCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0
aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1
ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJs
ZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAg
IHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY1NoaWZ0OyB9CiAgIHByaXZhdGU6CisgICAgQUxXQVlTX0lOTElORSB1aW50MzJf
dCBpbmxpbmVFdmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNz
aW9uTm9kZT4gdGVybTE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMjsKICAgfTsK
QEAgLTEzMTcsOSArMTM5OSwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgOiBFeHByZXNz
aW9uTm9kZShOdW1iZXJUeXBlKSwgZXhwcjEoZTEpLCBleHByMihlMikge30KICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91Ymxl
IGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFs
IGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2
aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCB7IHJldHVybiBQcmVjQml0d2lzZUFuZDsgfQogICBwcml2YXRlOgorICAgIEFMV0FZU19JTkxJ
TkUgaW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKik7CiAgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBleHByMTsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIy
OwogICB9OwpAQCAtMTMzMCw5ICsxNDE3LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCBleHByMShlMSksIGV4cHIyKGUyKSB7fQogICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAg
IHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OworICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNCaXR3aXNlT3I7IH0KICAgcHJpdmF0ZToKKyAgICBBTFdB
WVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwogICAg
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiBleHByMjsKICAgfTsKQEAgLTEzNDMsOSArMTQzNSwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAgICAgOiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgZXhwcjEoZTEpLCBleHByMihlMikg
e30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAg
IHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQml0d2lzZVhvcjsgfQogICBwcml2YXRlOgor
ICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRl
Kik7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKICAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IGV4cHIyOwogICB9OwpAQCAtMTM2Myw2ICsxNDYwLDcgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJl
dHVybiBQcmVjTG9naWNhbEFuZDsgfQogICBwcml2YXRlOgorICAgICAgICBBTFdBWVNfSU5MSU5F
IGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gZXhwcjE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsK
ICAgfTsKQEAgLTEzNzcsNiArMTQ3NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0xvZ2ljYWxP
cjsgfQogICBwcml2YXRlOgorICAgICAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZh
bHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhw
cjE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKQEAgLTEzOTEsNiAr
MTQ5MCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNr
JikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051
bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBldmFs
dWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQz
Ml90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDb25k
aXRpb25hbDsgfQogICBwcml2YXRlOgpAQCAtMTU2Niw2ICsxNjY4LDEwIEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIEFzc2lnbkV4cHJOb2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxM
IDogZXhwcihlKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1
bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CisgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRl
VG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBQcmVjRXhwcmVzc2lvbjsgfQogICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUva2pzL3ZhbHVlLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAKaW5kZXggYzBk
MDgzMC4uYjg1NGEyOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmNwcAor
KysgYi9KYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuY3BwCkBAIC03MiwxMSArNzIsMTAgQEAgZG91
YmxlIEpTVmFsdWU6OnRvSW50ZWdlclByZXNlcnZlTmFOKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QK
ICAgICByZXR1cm4gdHJ1bmModG9OdW1iZXIoZXhlYykpOwogfQogCi1pbnQzMl90IEpTVmFsdWU6
OnRvSW50MzJTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rKSBjb25zdAoraW50MzJf
dCBKU1ZhbHVlOjp0b0ludDMyU2xvd0Nhc2UoZG91YmxlIGQsIGJvb2wmIG9rKQogewogICAgIG9r
ID0gdHJ1ZTsKIAotICAgIGRvdWJsZSBkID0gdG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKGQgPj0g
LUQzMiAvIDIgJiYgZCA8IEQzMiAvIDIpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQz
Ml90PihkKTsKIApAQCAtOTMsMTEgKzkyLDE1IEBAIGludDMyX3QgSlNWYWx1ZTo6dG9JbnQzMlNs
b3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2spIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludDMyX3Q+KGQzMik7CiB9CiAKLXVpbnQzMl90IEpTVmFsdWU6OnRvVUludDMyU2xv
d0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykgY29uc3QKK2ludDMyX3QgSlNWYWx1ZTo6
dG9JbnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2spIGNvbnN0Cit7CisgICAg
cmV0dXJuIEpTVmFsdWU6OnRvSW50MzJTbG93Q2FzZSh0b051bWJlcihleGVjKSwgb2spOworfQor
Cit1aW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQzMlNsb3dDYXNlKGRvdWJsZSBkLCBib29sJiBvaykK
IHsKICAgICBvayA9IHRydWU7CiAKLSAgICBkb3VibGUgZCA9IHRvTnVtYmVyKGV4ZWMpOwogICAg
IGlmIChkID49IDAuMCAmJiBkIDwgRDMyKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGQpOwogCkBAIC0xMTIsNiArMTE1LDExIEBAIHVpbnQzMl90IEpTVmFsdWU6OnRvVUlu
dDMyU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykgY29uc3QKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGQzMik7CiB9CiAKK3VpbnQzMl90IEpTVmFsdWU6OnRvVUlu
dDMyU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykgY29uc3QKK3sKKyAgICByZXR1
cm4gSlNWYWx1ZTo6dG9VSW50MzJTbG93Q2FzZSh0b051bWJlcihleGVjKSwgb2spOworfQorCiBm
bG9hdCBKU1ZhbHVlOjp0b0Zsb2F0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvTnVtYmVyKGV4ZWMpKTsKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL2tqcy92YWx1ZS5oIGIvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgKaW5kZXgg
YzRjM2FhZS4uMGU1NWMxYiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgK
KysrIGIvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgKQEAgLTk3LDYgKzk3LDEwIEBAIHB1Ymxp
YzoKICAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUqKSBjb25zdDsKICAgICB1aW50MzJf
dCB0b1VJbnQzMihFeGVjU3RhdGUqLCBib29sJiBvaykgY29uc3Q7CiAKKyAgICAvLyBUaGVzZSBh
cmUgaWRlbnRpY2FsIGxvZ2ljIHRvIGFib3ZlLCBhbmQgZmFzdGVyIHRoYW4ganNOdW1iZXIobnVt
YmVyKS0+dG9JbnQzMihleGVjKQorICAgIHN0YXRpYyBpbnQzMl90IHRvSW50MzIoZG91YmxlKTsK
KyAgICBzdGF0aWMgaW50MzJfdCB0b1VJbnQzMihkb3VibGUpOworCiAgICAgLy8gRmxvYXRpbmcg
cG9pbnQgY29udmVyc2lvbnMuCiAgICAgZmxvYXQgdG9GbG9hdChFeGVjU3RhdGUqKSBjb25zdDsK
IApAQCAtMTA1LDYgKzEwOSw5IEBAIHB1YmxpYzoKICAgICBib29sIG1hcmtlZCgpIGNvbnN0Owog
CiBwcml2YXRlOgorICAgIHN0YXRpYyBpbnQzMl90IHRvSW50MzJTbG93Q2FzZShkb3VibGUsIGJv
b2wmIG9rKTsKKyAgICBzdGF0aWMgdWludDMyX3QgdG9VSW50MzJTbG93Q2FzZShkb3VibGUsIGJv
b2wmIG9rKTsKKwogICAgIGludDMyX3QgdG9JbnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSosIGJvb2wm
IG9rKSBjb25zdDsKICAgICB1aW50MzJfdCB0b1VJbnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSosIGJv
b2wmIG9rKSBjb25zdDsKIApAQCAtMjg4LDE2ICsyOTUsMTYgQEAgaW5saW5lIHZvaWQgSlNDZWxs
OjptYXJrKCkKICAgICByZXR1cm4gQ29sbGVjdG9yOjptYXJrQ2VsbCh0aGlzKTsKIH0KIAotaW5s
aW5lIEpTQ2VsbCAqSlNWYWx1ZTo6YXNDZWxsKCkKK0FMV0FZU19JTkxJTkUgSlNDZWxsKiBKU1Zh
bHVlOjphc0NlbGwoKQogewogICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHRo
aXMpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNDZWxsICo+KHRoaXMpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxKU0NlbGwqPih0aGlzKTsKIH0KIAotaW5saW5lIGNvbnN0IEpTQ2VsbCAq
SlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKK0FMV0FZU19JTkxJTkUgY29uc3QgSlNDZWxsKiBKU1Zh
bHVlOjphc0NlbGwoKSBjb25zdAogewogICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmlzSW1tZWRp
YXRlKHRoaXMpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNDZWxsICo+KHRoaXMp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU0NlbGwqPih0aGlzKTsKIH0KIAogaW5s
aW5lIGJvb2wgSlNWYWx1ZTo6aXNVbmRlZmluZWQoKSBjb25zdApAQCAtNDczLDYgKzQ4MCwyNCBA
QCBpbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6dG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKGV4ZWMsIG9rKTsKIH0KIAoraW5saW5lIGlu
dDMyX3QgSlNWYWx1ZTo6dG9JbnQzMihkb3VibGUgdmFsKQoreworICAgIGlmICghKHZhbCA+PSAt
MjE0NzQ4MzY0OC4wICYmIHZhbCA8IDIxNDc0ODM2NDguMCkpIHsKKyAgICAgICAgYm9vbCBpZ25v
cmVkOworICAgICAgICByZXR1cm4gdG9JbnQzMlNsb3dDYXNlKHZhbCwgaWdub3JlZCk7CisgICAg
fQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWwpOworfQorCitpbmxpbmUgaW50
MzJfdCBKU1ZhbHVlOjp0b1VJbnQzMihkb3VibGUgdmFsKQoreworICAgIGlmICghKHZhbCA+PSAw
LjAgJiYgdmFsIDwgNDI5NDk2NzI5Ni4wKSkgeworICAgICAgICBib29sIGlnbm9yZWQ7CisgICAg
ICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKHZhbCwgaWdub3JlZCk7CisgICAgfQorICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsKTsKK30KKwogaW5saW5lIGludDMyX3QgSlNW
YWx1ZTo6dG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rKSBjb25zdAogewogICAgIGlu
dDMyX3QgaTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17214</attachid>
            <date>2007-11-12 15:12:42 -0800</date>
            <delta_ts>2007-11-12 22:32:48 -0800</delta_ts>
            <desc>better fix (0.3% improvement on SunSpider)</desc>
            <filename>faster.patch</filename>
            <type>text/plain</type>
            <size>56242</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9KU0ltbWVkaWF0ZS5oIGIvSmF2YVNjcmlw
dENvcmUva2pzL0pTSW1tZWRpYXRlLmgKaW5kZXggYTcxY2I2Mi4uZGZjZjJiYyAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
a2pzL0pTSW1tZWRpYXRlLmgKQEAgLTExNiw2ICsxMTYsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgZ2V0VHJ1bmNhdGVkSW50MzIoY29uc3QgSlNWYWx1ZSosIGludDMyX3QmKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRUcnVuY2F0ZWRVSW50MzIoY29uc3QgSlNWYWx1ZSosIHVpbnQzMl90Jik7
CiAKKyAgICBzdGF0aWMgaW50MzJfdCBnZXRUcnVuY2F0ZWRJbnQzMihjb25zdCBKU1ZhbHVlKik7
CisKICAgICBzdGF0aWMgSlNWYWx1ZSogdHJ1ZUltbWVkaWF0ZSgpOwogICAgIHN0YXRpYyBKU1Zh
bHVlKiBmYWxzZUltbWVkaWF0ZSgpOwogICAgIHN0YXRpYyBKU1ZhbHVlKiB1bmRlZmluZWRJbW1l
ZGlhdGUoKTsKQEAgLTIzOCwxMCArMjQwLDE1IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJ
bW1lZGlhdGU6OmZyb20oZG91YmxlIGQpCiAgICAgcmV0dXJuIHRhZyhpbnRWYWwgPDwgMiwgTnVt
YmVyVHlwZSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgaW50MzJfdCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1
bmNhdGVkSW50MzIoY29uc3QgSlNWYWx1ZSogdikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50MzJfdD4odW5UYWcodikpID4+IDI7Cit9CisKIEFMV0FZU19JTkxJTkUgZG91YmxlIEpTSW1t
ZWRpYXRlOjp0b0RvdWJsZShjb25zdCBKU1ZhbHVlKiB2KQogewogICAgIEFTU0VSVChpc0ltbWVk
aWF0ZSh2KSk7Ci0gICAgY29uc3QgaW50MzJfdCBpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odW5U
YWcodikpID4+IDI7CisgICAgY29uc3QgaW50MzJfdCBpID0gZ2V0VHJ1bmNhdGVkSW50MzIodik7
CiAgICAgaWYgKEpTSW1tZWRpYXRlOjpnZXRUYWcodikgPT0gVW5kZWZpbmVkVHlwZSAmJiBpKQog
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
ICAgICByZXR1cm4gaTsKQEAgLTI0OSwxNCArMjU2LDE0IEBAIEFMV0FZU19JTkxJTkUgZG91Ymxl
IEpTSW1tZWRpYXRlOjp0b0RvdWJsZShjb25zdCBKU1ZhbHVlKiB2KQogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNJbW1lZGlhdGU6OmdldFVJbnQzMihjb25zdCBKU1ZhbHVlKiB2LCB1aW50MzJfdCYg
aSkKIHsKLSAgICBjb25zdCBpbnQzMl90IHNpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odW5UYWco
dikpID4+IDI7CisgICAgY29uc3QgaW50MzJfdCBzaSA9IGdldFRydW5jYXRlZEludDMyKHYpOwog
ICAgIGkgPSBzaTsKICAgICByZXR1cm4gaXNOdW1iZXIodikgJiAoc2kgPj0gMCk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgYm9vbCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoY29uc3QgSlNW
YWx1ZSogdiwgaW50MzJfdCYgaSkKIHsKLSAgICBpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odW5U
YWcodikpID4+IDI7CisgICAgaSA9IGdldFRydW5jYXRlZEludDMyKHYpOwogICAgIHJldHVybiBp
c051bWJlcih2KTsKIH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNw
cCBiL0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKaW5kZXggZTlmMGQ5MS4uYjQyMDM3MyAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAorKysgYi9KYXZhU2NyaXB0
Q29yZS9ranMvbm9kZXMuY3BwCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogI2Rl
ZmluZSBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIgXAogICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsgXAogICAgIGhhbmRsZUV4Y2VwdGlvbihleGVjKTsgXAotICAgIHJldHVybiAwLjA7IFwK
KyAgICByZXR1cm4gMDsgXAogICB9CiAKICNkZWZpbmUgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVB
TiBcCkBAIC0yMjcsNyArMjI3LDYgQEAgZG91YmxlIEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0ZVRv
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlKiB2YWx1ZSA9IGV2YWx1YXRl
KGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIC8vIE5vIG5lZWQgdG8g
Y2hlY2sgZXhjZXB0aW9uIGFmdGVyIHRvTnVtYmVyLCBjYWxsZXIgd2lsbCBkbyBzbyByaWdodCBh
ZnRlciBldmFsdWF0ZVRvTnVtYmVyKCkgY2FsbAogICAgIHJldHVybiB2YWx1ZS0+dG9OdW1iZXIo
ZXhlYyk7CiB9CiAKQEAgLTIzOCw2ICsyMzcsMjAgQEAgYm9vbCBFeHByZXNzaW9uTm9kZTo6ZXZh
bHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiB2YWx1ZS0+dG9Cb29s
ZWFuKGV4ZWMpOwogfQogCitpbnQzMl90IEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0ZVRvSW50MzIo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbHVhdGUoZXhlYyk7
CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHZhbHVlLT50b0ludDMy
KGV4ZWMpOworfQorCit1aW50MzJfdCBFeHByZXNzaW9uTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdmFsdWUgPSBldmFsdWF0ZShleGVjKTsK
KyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdmFsdWUtPnRvVUludDMy
KGV4ZWMpOworfQorCiBzdGF0aWMgdm9pZCBzdWJzdGl0dXRlKFVTdHJpbmcgJnN0cmluZywgY29u
c3QgVVN0cmluZyAmc3Vic3RyaW5nKSBLSlNfRkFTVF9DQUxMOwogc3RhdGljIHZvaWQgc3Vic3Rp
dHV0ZShVU3RyaW5nICZzdHJpbmcsIGNvbnN0IFVTdHJpbmcgJnN1YnN0cmluZykKIHsKQEAgLTQy
NSw2ICs0MzgsMTYgQEAgYm9vbCBOdW1iZXJOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3Rh
dGUqKQogICAgIHJldHVybiBtX2RvdWJsZSA8IDAuMCB8fCBtX2RvdWJsZSA+IDAuMDsgLy8gZmFs
c2UgZm9yIE5hTiBhcyB3ZWxsIGFzIDAKIH0KIAoraW50MzJfdCBOdW1iZXJOb2RlOjpldmFsdWF0
ZVRvSW50MzIoRXhlY1N0YXRlKikKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihtX2Rv
dWJsZSk7Cit9CisKK3VpbnQzMl90IE51bWJlck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0
YXRlKikKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIobV9kb3VibGUpOworfQorCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW1tZWRpYXRlTnVtYmVyTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBKU1ZhbHVlKiBJbW1lZGlhdGVOdW1i
ZXJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqKQpAQCAtNDMyLDYgKzQ1NSwyMCBAQCBKU1ZhbHVl
KiBJbW1lZGlhdGVOdW1iZXJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqKQogICAgIHJldHVybiBt
X3ZhbHVlOwogfQogCitpbnQzMl90IEltbWVkaWF0ZU51bWJlck5vZGU6OmV2YWx1YXRlVG9JbnQz
MihFeGVjU3RhdGUqKQoreworICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50
MzIobV92YWx1ZSk7Cit9CisKK3VpbnQzMl90IEltbWVkaWF0ZU51bWJlck5vZGU6OmV2YWx1YXRl
VG9VSW50MzIoRXhlY1N0YXRlKikKK3sKKyAgICB1aW50MzJfdCBpOworICAgIGlmIChKU0ltbWVk
aWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKG1fdmFsdWUsIGkpKQorICAgICAgICByZXR1cm4gaTsK
KyAgICBib29sIG9rOworICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMlNsb3dDYXNlKG1fZG91
YmxlLCBvayk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdHJpbmdO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEpTVmFsdWUqIFN0cmlu
Z05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSopCkBAIC00NjcsNyArNTA0LDcgQEAgSlNWYWx1ZSAq
VGhpc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIC8vIEVDTUEgMTEuMS4yICYgMTAuMS40Ci1KU1ZhbHVlICpSZXNvbHZlTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogUmVzb2x2ZU5vZGU6OmlubGluZUV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgLy8gQ2hlY2sgZm9yIG1pc3NlZCBvcHRpbWl6YXRp
b24gb3Bwb3J0dW5pdHkuCiAgIEFTU0VSVCghY2FuU2tpcExvb2t1cChleGVjLCBpZGVudCkpOwpA
QCAtNDkyLDYgKzUyOSwzOSBAQCBKU1ZhbHVlICpSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKQogICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlk
ZW50KTsKIH0KIAorSlNWYWx1ZSogUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7Cit9CisKK2RvdWJsZSBSZXNv
bHZlTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1
ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJF
UgorICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKK30KKworYm9vbCBSZXNvbHZlTm9kZTo6
ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBp
bmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCisgICAg
cmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKK30KKworaW50MzJfdCBSZXNvbHZlTm9kZTo6ZXZh
bHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5l
RXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJu
IHYtPnRvSW50MzIoZXhlYyk7Cit9CisKK3VpbnQzMl90IFJlc29sdmVOb2RlOjpldmFsdWF0ZVRv
VUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVh
dGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRv
VUludDMyKGV4ZWMpOworfQorCiB2b2lkIFJlc29sdmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgRGVjbGFyYXRpb25TdGFja3M6Ok5v
ZGVTdGFjayYpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gZnVuY3Rpb25Cb2R5LT5zeW1ib2xUYWJs
ZSgpLmdldChpZGVudC51c3RyaW5nKCkucmVwKCkpOwpAQCAtNTIxLDYgKzU5MSwxNiBAQCBib29s
IExvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQog
ICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKS0+dG9Cb29sZWFuKGV4ZWMpOwogfQogCitp
bnQzMl90IExvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvSW50MzIoZXhlYyk7Cit9
CisKK3VpbnQzMl90IExvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b1VJbnQzMihl
eGVjKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVsZW1lbnROb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBFbGVtZW50Tm9kZTo6
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFj
a3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQpAQCAtNjcyLDE0ICs3NTIsMzIgQEAgSlNWYWx1ZSog
QnJhY2tldEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiBkb3VibGUg
QnJhY2tldEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b051bWJlcihleGVjKTsKKyAgICBK
U1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCisgICAgcmV0dXJuIHYtPnRvTnVtYmVyKGV4ZWMpOwogfQogCiBib29sIEJyYWNrZXRB
Y2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBy
ZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvQm9vbGVhbihleGVjKTsKKyAgICBKU1ZhbHVl
KiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVB
TgorICAgIHJldHVybiB2LT50b0Jvb2xlYW4oZXhlYyk7CiB9CiAKK2ludDMyX3QgQnJhY2tldEFj
Y2Vzc29yTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1Zh
bHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVN
QkVSCisgICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7Cit9CisKK3VpbnQzMl90IEJyYWNrZXRB
Y2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpT
VmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05O
VU1CRVIKKyAgICByZXR1cm4gdi0+dG9VSW50MzIoZXhlYyk7Cit9ICAgIAorCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG90QWNjZXNzb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgRG90QWNjZXNzb3JOb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBu
b2RlU3RhY2spCkBAIC02ODgsMTQgKzc4Niw0NiBAQCB2b2lkIERvdEFjY2Vzc29yTm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFjawog
fQogCiAvLyBFQ01BIDExLjIuMWIKLUpTVmFsdWUgKkRvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogRG90QWNjZXNzb3JOb2RlOjppbmxpbmVFdmFsdWF0
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFsdWUgKnYgPSBleHByLT5ldmFsdWF0ZShleGVj
KTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgcmV0dXJuIHYtPnRvT2JqZWN0KGV4ZWMp
LT5nZXQoZXhlYywgaWRlbnQpOworICAgIEpTVmFsdWUqIHYgPSBleHByLT5ldmFsdWF0ZShleGVj
KTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQorICAgIHJldHVybiB2LT50b09iamVjdChl
eGVjKS0+Z2V0KGV4ZWMsIGlkZW50KTsKK30KKworSlNWYWx1ZSogRG90QWNjZXNzb3JOb2RlOjpl
dmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4
ZWMpOworfQorCitkb3VibGUgRG90QWNjZXNzb3JOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Cisg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRvTnVtYmVyKGV4ZWMp
OworfQorCitib29sIERvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
KiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBL
SlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCisgICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsK
K30KIAoraW50MzJfdCBEb3RBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtK
U19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b0ludDMyKGV4ZWMpOwogfQog
Cit1aW50MzJfdCBEb3RBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNf
Q0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdi0+dG9VSW50MzIoZXhlYyk7Cit9ICAg
IAorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJndW1lbnRMaXN0Tm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIEFyZ3VtZW50TGlzdE5vZGU6Om9w
dGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tz
OjpOb2RlU3RhY2smIG5vZGVTdGFjaykKQEAgLTczNSw5ICs4NjUsOSBAQCB2b2lkIE5ld0V4cHJO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6TgogCiAvLyBFQ01BIDExLjIuMgogCi1KU1ZhbHVlICpOZXdFeHByTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogTmV3RXhwck5vZGU6OmlubGluZUV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSAqdiA9IGV4cHItPmV2YWx1YXRlKGV4
ZWMpOworICBKU1ZhbHVlKiB2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VY
Q0VQVElPTlZBTFVFCiAKICAgTGlzdCBhcmdMaXN0OwpAQCAtNzQ2LDE4ICs4NzYsNDkgQEAgSlNW
YWx1ZSAqTmV3RXhwck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKICAgICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQogICB9CiAKLSAgaWYgKCF2LT5pc09iamVjdCgpKSB7CisgIGlmICgh
di0+aXNPYmplY3QoKSkKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJW
YWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5v
dCBiZSB1c2VkIHdpdGggbmV3LiIsIHYsIGV4cHIuZ2V0KCkpOwotICB9CiAKICAgSlNPYmplY3Qg
KmNvbnN0ciA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odik7Ci0gIGlmICghY29uc3RyLT5pbXBs
ZW1lbnRzQ29uc3RydWN0KCkpIHsKKyAgaWYgKCFjb25zdHItPmltcGxlbWVudHNDb25zdHJ1Y3Qo
KSkKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVz
dWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhIGNvbnN0cnVjdG9yLiBDYW5ub3QgYmUgdXNl
ZCB3aXRoIG5ldy4iLCB2LCBleHByLmdldCgpKTsKLSAgfQogCiAgIHJldHVybiBjb25zdHItPmNv
bnN0cnVjdChleGVjLCBhcmdMaXN0KTsKIH0KIAorSlNWYWx1ZSogTmV3RXhwck5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7
Cit9CisKK2RvdWJsZSBOZXdFeHByTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19D
SEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKK30KKwor
Ym9vbCBOZXdFeHByTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENF
UFRJT05CT09MRUFOCisgICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKK30KKworaW50MzJf
dCBOZXdFeHByTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBK
U1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCisgICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7Cit9CisKK3VpbnQzMl90IE5ld0V4
cHJOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVl
KiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVS
CisgICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOworfSAgICAKKwogdm9pZCBGdW5jdGlvbkNh
bGxWYWx1ZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERl
Y2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKICAgICBub2RlU3RhY2su
YXBwZW5kKGFyZ3MuZ2V0KCkpOwpAQCAtNzk5LDcgKzk2MCw3IEBAIHZvaWQgRnVuY3Rpb25DYWxs
UmVzb2x2ZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSogZnVu
Y3Rpb25CCiB9CiAKIC8vIEVDTUEgMTEuMi4zCi1KU1ZhbHVlICpGdW5jdGlvbkNhbGxSZXNvbHZl
Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGU6OmlubGluZUV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgLy8gQ2hlY2sg
Zm9yIG1pc3NlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuCiAgIEFTU0VSVCghY2FuU2tpcExv
b2t1cChleGVjLCBpZGVudCkpOwpAQCAtODE5LDE1ICs5ODAsMTMgQEAgSlNWYWx1ZSAqRnVuY3Rp
b25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKICAgICAgIEpTVmFs
dWUgKnYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIGlkZW50KTsKICAgICAgIEtKU19DSEVD
S0VYQ0VQVElPTlZBTFVFCiAgICAgICAgIAotICAgICAgaWYgKCF2LT5pc09iamVjdCgpKSB7Cisg
ICAgICBpZiAoIXYtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IG9i
amVjdC4iLCB2LCBpZGVudCk7Ci0gICAgICB9CiAgICAgICAKICAgICAgIEpTT2JqZWN0ICpmdW5j
ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KTsKICAgICAgIAotICAgICAgaWYgKCFmdW5jLT5p
bXBsZW1lbnRzQ2FsbCgpKSB7CisgICAgICBpZiAoIWZ1bmMtPmltcGxlbWVudHNDYWxsKCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIk9iamVjdCAlcyAocmVz
dWx0IG9mIGV4cHJlc3Npb24gJXMpIGRvZXMgbm90IGFsbG93IGNhbGxzLiIsIHYsIGlkZW50KTsK
LSAgICAgIH0KICAgICAgIAogICAgICAgTGlzdCBhcmdMaXN0OwogICAgICAgYXJncy0+ZXZhbHVh
dGVMaXN0KGV4ZWMsIGFyZ0xpc3QpOwpAQCAtODUxLDcgKzEwMTAsNDAgQEAgSlNWYWx1ZSAqRnVu
Y3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKICAgcmV0dXJu
IHRocm93VW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCk7CiB9CiAKLUpTVmFsdWUq
IExvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7Cit9CisKK2RvdWJsZSBGdW5jdGlv
bkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQ
VElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKK30KKworYm9vbCBGdW5j
dGlvbkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQor
eworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tF
WENFUFRJT05CT09MRUFOCisgICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKK30KKworaW50
MzJfdCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pT
X0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7Cit9CisK
K3VpbnQzMl90IEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Cisg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMp
OworfQorCitKU1ZhbHVlKiBMb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmlubGluZUV2YWx1YXRl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbklt
cCo+KGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkpLT5pc0FjdGl2YXRpb24oKSk7CiAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihleGVjLT52YXJpYWJsZU9iamVjdCgpKSA9PSBl
eGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwpAQCAtODcyLDYgKzEwNjQsMzkgQEAgSlNWYWx1ZSog
TG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
cmV0dXJuIGZ1bmMtPmNhbGwoZXhlYywgZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2Jh
bE9iamVjdCgpLCBhcmdMaXN0KTsKIH0KIAorSlNWYWx1ZSogTG9jYWxWYXJGdW5jdGlvbkNhbGxO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1
YXRlKGV4ZWMpOworfQorCitkb3VibGUgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0
ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZh
bHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYt
PnRvTnVtYmVyKGV4ZWMpOworfQorCitib29sIExvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZh
bHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxp
bmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCisgICAgcmV0
dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKK30KKworaW50MzJfdCBMb2NhbFZhckZ1bmN0aW9uQ2Fs
bE5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSog
diA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgor
ICAgIHJldHVybiB2LT50b0ludDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBMb2NhbFZhckZ1bmN0
aW9uQ2FsbE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpT
VmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05O
VU1CRVIKKyAgICByZXR1cm4gdi0+dG9VSW50MzIoZXhlYyk7Cit9CisKIHZvaWQgRnVuY3Rpb25D
YWxsQnJhY2tldE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKICAgICBub2RlU3Rh
Y2suYXBwZW5kKGFyZ3MuZ2V0KCkpOwpAQCAtOTQ4LDcgKzExNzMsNyBAQCB2b2lkIEZ1bmN0aW9u
Q2FsbERvdE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERl
Y2xhcmF0aW9uUwogfQogCiAvLyBFQ01BIDExLjIuMwotSlNWYWx1ZSAqRnVuY3Rpb25DYWxsRG90
Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogRnVuY3Rpb25DYWxsRG90
Tm9kZTo6aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICBKU1ZhbHVlICpiYXNl
VmFsID0gYmFzZS0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCkBA
IC05NzgsNiArMTIwMywzOSBAQCBKU1ZhbHVlICpGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpCiAgIHJldHVybiBmdW5jLT5jYWxsKGV4ZWMsIHRoaXNPYmosIGFy
Z0xpc3QpOwogfQogCitKU1ZhbHVlKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZShFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpOworfQorCitk
b3VibGUgRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19D
SEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKK30KKwor
Ym9vbCBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19D
SEVDS0VYQ0VQVElPTkJPT0xFQU4KKyAgICByZXR1cm4gdi0+dG9Cb29sZWFuKGV4ZWMpOworfQor
CitpbnQzMl90IEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtK
U19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b0ludDMyKGV4ZWMpOworfQor
Cit1aW50MzJfdCBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAg
S0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwor
fQorCiAvLyBFQ01BIDExLjMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBv
c3RmaXhSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0x
MDkyLDYgKzEzNTAsMzcgQEAgSlNWYWx1ZSogUG9zdERlY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiB2OwogfQogCitkb3VibGUgUG9zdERlY0xvY2Fs
VmFyTm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
QVNTRVJUKHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihleGVjLT52YXJpYWJsZU9iamVjdCgp
KS0+aXNBY3RpdmF0aW9uKCkpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1w
Kj4oZXhlYy0+dmFyaWFibGVPYmplY3QoKSkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsK
KyAgICAKKyAgICBKU1ZhbHVlKiogc2xvdCA9ICZleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4
XS52YWx1ZTsKKyAgICBkb3VibGUgbiA9ICgqc2xvdCktPnRvTnVtYmVyKGV4ZWMpOworICAgICpz
bG90ID0ganNOdW1iZXIobiAtIDEpOworICAgIHJldHVybiBuOworfQorCitkb3VibGUgUG9zdERl
Y0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Cit9CisKK2Jvb2wgUG9zdERlY0xv
Y2FsVmFyTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOworfQorCitpbnQzMl90IFBvc3REZWNM
b2NhbFZhck5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIEpTVmFsdWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9CisK
K3VpbnQzMl90IFBvc3REZWNMb2NhbFZhck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRv
TnVtYmVyKGV4ZWMpKTsKK30KKwogdm9pZCBQb3N0RGVjTG9jYWxWYXJOb2RlOjpvcHRpbWl6ZUZv
clVubmVjZXNzYXJ5UmVzdWx0KCkKIHsKICAgICBuZXcgKHRoaXMpIFByZURlY0xvY2FsVmFyTm9k
ZShtX2luZGV4KTsKQEAgLTEzNTYsNyArMTY0NSw3IEBAIHN0YXRpYyBKU1ZhbHVlICp0eXBlU3Ry
aW5nRm9yVmFsdWUoSlNWYWx1ZSAqdikKICAgICAgICAgICAgIC8vIFJldHVybiAidW5kZWZpbmVk
IiBmb3Igb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkCiAgICAgICAgICAgICAvLyBhcyBu
dWxsIHdoZW4gZG9pbmcgY29tcGFyaXNvbnMuCiAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
SlNPYmplY3QqPih2KS0+bWFzcXVlcmFkZUFzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKCJ1bmRlZmluZWQiKTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICByZXR1cm4ganNTdHJpbmcoInVuZGVmaW5lZCIpOwogICAgICAgICAgICAgZWxzZSBpZiAoc3Rh
dGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+aW1wbGVtZW50c0NhbGwoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4ganNTdHJpbmcoImZ1bmN0aW9uIik7CiAgICAgICAgIH0KQEAgLTE2NDcsMTAgKzE5
MzYsMjkgQEAgdm9pZCBVbmFyeVBsdXNOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczoKIC8vIEVDTUEgMTEuNC42CiBKU1ZhbHVl
KiBVbmFyeVBsdXNOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFsdWUg
KnYgPSBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQor
ICAgIEpTVmFsdWUgKnYgPSBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VY
Q0VQVElPTlZBTFVFCisgICAgcmV0dXJuIHYtPnRvSlNOdW1iZXIoZXhlYyk7Cit9CisKK2Jvb2wg
VW5hcnlQbHVzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBtX2V4cHItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworfQogCi0gIHJldHVybiB2
LT50b0pTTnVtYmVyKGV4ZWMpOworZG91YmxlIFVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlVG9OdW1i
ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBtX2V4cHItPmV2YWx1YXRlVG9OdW1i
ZXIoZXhlYyk7Cit9CisKK2ludDMyX3QgVW5hcnlQbHVzTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gbV9leHByLT5ldmFsdWF0ZVRvSW50MzIoZXhl
Yyk7Cit9CisKK3VpbnQzMl90IFVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBtX2V4cHItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5lZ2F0ZU5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2ODEsMTEgKzE5ODksMzQgQEAgdm9p
ZCBCaXR3aXNlTm90Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2Rl
KiwgRGVjbGFyYXRpb25TdGFja3MKIH0KIAogLy8gRUNNQSAxMS40LjgKLUpTVmFsdWUgKkJpdHdp
c2VOb3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitpbnQzMl90IEJpdHdpc2VOb3RO
b2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVl
ICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0g
IHJldHVybiBqc051bWJlcih+di0+dG9JbnQzMihleGVjKSk7CisgICAgcmV0dXJuIH5leHByLT5l
dmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK0pTVmFsdWUqIEJpdHdpc2VOb3ROb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGpzTnVtYmVyKGlubGluZUV2YWx1
YXRlVG9JbnQzMihleGVjKSk7Cit9CisKK2RvdWJsZSBCaXR3aXNlTm90Tm9kZTo6ZXZhbHVhdGVU
b051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9J
bnQzMihleGVjKTsKK30KKworYm9vbCBCaXR3aXNlTm90Tm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4o
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhl
Yyk7Cit9CisKK2ludDMyX3QgQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKK30K
KwordWludDMyX3QgQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2dpY2FsTm90Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNzMzLDYgKzIwNjQsMjEgQEAgZG91YmxlIE11bHRO
b2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gaW5saW5l
RXZhbHVhdGVUb051bWJlcihleGVjKTsKIH0KIAorYm9vbCBNdWx0Tm9kZTo6ZXZhbHVhdGVUb0Jv
b2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVt
YmVyKGV4ZWMpOworfQorCitpbnQzMl90IE11bHROb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlubGluZUV2YWx1YXRl
VG9OdW1iZXIoZXhlYykpOworfQorCit1aW50MzJfdCBNdWx0Tm9kZTo6ZXZhbHVhdGVUb1VJbnQz
MihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OnRvVUludDMyKGlubGlu
ZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOworfQorCiB2b2lkIERpdk5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKIHsKICAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsKQEAg
LTE3NTgsNiArMjEwNCwxNiBAQCBkb3VibGUgRGl2Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiB9
CiAKK2ludDMyX3QgRGl2Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMp
KTsKK30KKwordWludDMyX3QgRGl2Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OnRvVUludDMyKGlubGluZUV2YWx1YXRlVG9OdW1i
ZXIoZXhlYykpOworfQorCiB2b2lkIE1vZE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykK
IHsKICAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsKQEAgLTE3ODMsNiArMjEzOSwy
MSBAQCBkb3VibGUgTW9kTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiB9CiAKK2Jvb2wgTW9kTm9k
ZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxp
bmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOworfQorCitpbnQzMl90IE1vZE5vZGU6OmV2YWx1YXRl
VG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OnRvSW50MzIo
aW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9CisKK3VpbnQzMl90IE1vZE5vZGU6OmV2
YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0
b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKK30KKwogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFkZGl0aXZlIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBKU1ZhbHVlKiB0aHJvd091dE9mTWVtb3J5RXJy
b3IoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTg5OCw3ICsyMjY5LDcgQEAgSlNWYWx1ZSogQWRkTm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICByZXR1cm4gYWRkKGV4ZWMsIHYxLCB2Mik7
CiB9CiAKLWRvdWJsZSBBZGROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykK
K2RvdWJsZSBBZGROb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU1ZhbHVlKiB2MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hF
Q0tFWENFUFRJT05OVU1CRVIKQEAgLTE5MDksNiArMjI4MCwyMSBAQCBkb3VibGUgQWRkTm9kZTo6
ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGFkZFRvTnVtYmVy
KGV4ZWMsIHYxLCB2Mik7CiB9CiAKK2RvdWJsZSBBZGROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVj
KTsKK30KKworaW50MzJfdCBBZGROb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIo
ZXhlYykpOworfQorCit1aW50MzJfdCBBZGROb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVU
b051bWJlcihleGVjKSk7Cit9ICAgIAorCiBkb3VibGUgQWRkTnVtYmVyc05vZGU6OmlubGluZUV2
YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGRvdWJsZSBuMSA9IHRlcm0x
LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwpAQCAtMTkyNyw2ICsyMzEzLDE2IEBAIGRvdWJsZSBB
ZGROdW1iZXJzTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0
dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiB9CiAKK2ludDMyX3QgQWRkTnVtYmVy
c05vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpT
VmFsdWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9CisKK3VpbnQz
Ml90IEFkZE51bWJlcnNOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVj
KSk7Cit9CisKIEpTVmFsdWUqIEFkZFN0cmluZ3NOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNWYWx1ZSogdjEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7CkBAIC0xOTg3
LDYgKzIzODMsMTYgQEAgZG91YmxlIFN1Yk5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRl
KiBleGVjKQogICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogfQogCitp
bnQzMl90IFN1Yk5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIEpTVmFsdWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9
CisKK3VpbnQzMl90IFN1Yk5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpKTsKK30gICAgCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTaGlmdCBO
b2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBMZWZ0U2hp
ZnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCkBAIC0xOTk2LDE2ICsyNDAyLDMyIEBA
IHZvaWQgTGVmdFNoaWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6CiB9CiAKIC8vIEVDTUEgMTEuNy4xCi1KU1ZhbHVlICpM
ZWZ0U2hpZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitpbnQzMl90IExlZnRTaGlm
dE5vZGU6OmlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFs
dWUgKnYxID0gdGVybTEtPmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQotICBKU1ZhbHVlICp2MiA9IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLSAgdW5zaWduZWQgaW50IGkyID0gdjItPnRvVUludDMyKGV4ZWMpOwotICBp
MiAmPSAweDFmOworICAgIGludCBpMSA9IHRlcm0xLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Cisg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgdW5zaWduZWQgaW50IGkyID0gdGVybTIt
PmV2YWx1YXRlVG9VSW50MzIoZXhlYykgJiAweDFmOworICAgIHJldHVybiAoaTEgPDwgaTIpOwor
fQogCi0gIHJldHVybiBqc051bWJlcih2MS0+dG9JbnQzMihleGVjKSA8PCBpMik7CitKU1ZhbHVl
KiBMZWZ0U2hpZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGpzTnVtYmVyKGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7Cit9CisKK2RvdWJsZSBMZWZ0
U2hpZnROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCitpbnQzMl90IExlZnRTaGlmdE5v
ZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGlu
ZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKK30KKwordWludDMyX3QgTGVmdFNoaWZ0Tm9kZTo6ZXZh
bHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1
YXRlVG9JbnQzMihleGVjKTsKIH0KIAogdm9pZCBSaWdodFNoaWZ0Tm9kZTo6b3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYgbm9kZVN0YWNrKQpAQCAtMjAxNSwxNiArMjQzNywzMiBAQCB2b2lkIFJpZ2h0U2hpZnROb2Rl
OjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0
YWNrcwogfQogCiAvLyBFQ01BIDExLjcuMgotSlNWYWx1ZSAqUmlnaHRTaGlmdE5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK2ludDMyX3QgUmlnaHRTaGlmdE5vZGU6OmlubGluZUV2YWx1
YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFsdWUgKnYxID0gdGVybTEtPmV2
YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICBKU1ZhbHVlICp2MiA9
IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgdW5z
aWduZWQgaW50IGkyID0gdjItPnRvVUludDMyKGV4ZWMpOwotICBpMiAmPSAweDFmOworICAgIGlu
dCBpMSA9IHRlcm0xLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBU
SU9OTlVNQkVSCisgICAgdW5zaWduZWQgaW50IGkyID0gdGVybTItPmV2YWx1YXRlVG9VSW50MzIo
ZXhlYykgJiAweDFmOworICAgIHJldHVybiAoaTEgPj4gaTIpOworfQorCitKU1ZhbHVlKiBSaWdo
dFNoaWZ0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBqc051
bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykpOworfQorCitkb3VibGUgUmlnaHRTaGlm
dE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK2ludDMyX3QgUmlnaHRTaGlmdE5vZGU6
OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlVG9JbnQzMihleGVjKTsKK30KIAotICByZXR1cm4ganNOdW1iZXIodjEtPnRvSW50MzIo
ZXhlYykgPj4gaTIpOwordWludDMyX3QgUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhl
Yyk7CiB9CiAKIHZvaWQgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9k
ZVN0YWNrKQpAQCAtMjAzNCwxNiArMjQ3MiwzMiBAQCB2b2lkIFVuc2lnbmVkUmlnaHRTaGlmdE5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aQog
fQogCiAvLyBFQ01BIDExLjcuMwotSlNWYWx1ZSAqVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQordWludDMyX3QgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6
aW5saW5lRXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFsdWUgKnYx
ID0gdGVybTEtPmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICBK
U1ZhbHVlICp2MiA9IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9O
VkFMVUUKLSAgdW5zaWduZWQgaW50IGkyID0gdjItPnRvVUludDMyKGV4ZWMpOwotICBpMiAmPSAw
eDFmOworICAgIHVuc2lnbmVkIGludCBpMSA9IHRlcm0xLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMp
OworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHVuc2lnbmVkIGludCBpMiA9IHRl
cm0yLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKKyAgICByZXR1cm4gKGkxID4+IGky
KTsKK30KIAotICByZXR1cm4ganNOdW1iZXIodjEtPnRvVUludDMyKGV4ZWMpID4+IGkyKTsKK0pT
VmFsdWUqIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb1VJbnQzMihleGVjKSk7Cit9
CisKK2RvdWJsZSBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb1VJbnQzMihleGVjKTsK
K30KKworaW50MzJfdCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvVUludDMyKGV4ZWMp
OworfQorCit1aW50MzJfdCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvVUludDMy
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb1VJbnQzMihl
eGVjKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlbGF0aW9uYWwg
Tm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjM5OSwxNCArMjg1Myw0
MiBAQCB2b2lkIEJpdEFuZE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5
Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpObwogfQogCiAvLyBFQ01BIDExLjEwCi1KU1ZhbHVl
ICpCaXRBbmROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitKU1ZhbHVlKiBCaXRBbmRO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7ICAgIAotICBKU1ZhbHVlICp2MSA9IGV4
cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgSlNWYWx1
ZSAqdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0gIAotICByZXR1cm4ganNOdW1iZXJGcm9tQW5kKGV4ZWMsIHYxLCB2Mik7CisgICAgSlNWYWx1
ZSAqdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKKyAgICBKU1ZhbHVlICp2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQorCisgICAgcmV0dXJuIGpzTnVtYmVyRnJvbUFuZChleGVjLCB2MSwg
djIpOworfQorCitpbnQzMl90IEJpdEFuZE5vZGU6OmlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgaW50MzJfdCBpMSA9IGV4cHIxLT5ldmFsdWF0ZVRvSW50MzIo
ZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgaW50MzJfdCBpMiA9IGV4
cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgcmV0dXJuIChpMSAmIGkyKTsKK30KKwor
ZG91YmxlIEJpdEFuZE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK2Jvb2wgQml0QW5k
Tm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK2ludDMyX3QgQml0QW5kTm9kZTo6ZXZh
bHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVh
dGVUb0ludDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBCaXRBbmROb2RlOjpldmFsdWF0ZVRvVUlu
dDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMy
KGV4ZWMpOwogfQogCiB2b2lkIEJpdFhPck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykK
QEAgLTI0MTUsMTQgKzI4OTcsMzcgQEAgdm9pZCBCaXRYT3JOb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm8KICAgICBub2Rl
U3RhY2suYXBwZW5kKGV4cHIxLmdldCgpKTsKIH0KIAotSlNWYWx1ZSAqQml0WE9yTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQoraW50MzJfdCBCaXRYT3JOb2RlOjppbmxpbmVFdmFsdWF0
ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVlICp2MSA9IGV4cHIxLT5ldmFs
dWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgSlNWYWx1ZSAqdjIgPSBl
eHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIAotICBy
ZXR1cm4ganNOdW1iZXIodjEtPnRvSW50MzIoZXhlYykgXiB2Mi0+dG9JbnQzMihleGVjKSk7Cisg
ICAgaW50IGkxID0gZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBLSlNfQ0hFQ0tF
WENFUFRJT05OVU1CRVIKKyAgICBpbnQgaTIgPSBleHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMp
OworICAgIHJldHVybiAoaTEgXiBpMik7Cit9CisKK0pTVmFsdWUqIEJpdFhPck5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVh
dGVUb0ludDMyKGV4ZWMpKTsKK30KKworZG91YmxlIEJpdFhPck5vZGU6OmV2YWx1YXRlVG9OdW1i
ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIo
ZXhlYyk7Cit9CisKK2Jvb2wgQml0WE9yTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisK
K2ludDMyX3QgQml0WE9yTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBC
aXRYT3JOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogfQogCiB2b2lkIEJpdE9yTm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQpAQCAtMjQzMSwxNCArMjkzNiwzNyBAQCB2b2lkIEJpdE9y
Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZAogICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOwogfQogCi1K
U1ZhbHVlICpCaXRPck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK2ludDMyX3QgQml0
T3JOb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1Zh
bHVlICp2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLSAgSlNWYWx1ZSAqdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VY
Q0VQVElPTlZBTFVFCi0gIAotICByZXR1cm4ganNOdW1iZXIodjEtPnRvSW50MzIoZXhlYykgfCB2
Mi0+dG9JbnQzMihleGVjKSk7CisgICAgaW50IGkxID0gZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihl
eGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICBpbnQgaTIgPSBleHByMi0+
ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOworICAgIHJldHVybiAoaTEgfCBpMik7Cit9CisKK0pTVmFs
dWUqIEJpdE9yTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBq
c051bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykpOworfQorCitkb3VibGUgQml0T3JO
b2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5s
aW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCitib29sIEJpdE9yTm9kZTo6ZXZhbHVhdGVU
b0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRv
SW50MzIoZXhlYyk7Cit9CisKK2ludDMyX3QgQml0T3JOb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7
Cit9CisKK3VpbnQzMl90IEJpdE9yTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKIH0KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJpbmFyeSBMb2dpY2FsIE5vZGVzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI1MTYsNiArMzA0NCwyNyBAQCBib29sIENvbmRp
dGlvbmFsTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVy
biBiID8gZXhwcjEtPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpIDogZXhwcjItPmV2YWx1YXRlVG9C
b29sZWFuKGV4ZWMpOwogfQogCitkb3VibGUgQ29uZGl0aW9uYWxOb2RlOjpldmFsdWF0ZVRvTnVt
YmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBib29sIGIgPSBsb2dpY2FsLT5ldmFsdWF0ZVRv
Qm9vbGVhbihleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4g
YiA/IGV4cHIxLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpIDogZXhwcjItPmV2YWx1YXRlVG9OdW1i
ZXIoZXhlYyk7Cit9CisKK2ludDMyX3QgQ29uZGl0aW9uYWxOb2RlOjpldmFsdWF0ZVRvSW50MzIo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIGJvb2wgYiA9IGxvZ2ljYWwtPmV2YWx1YXRlVG9Cb29s
ZWFuKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiBiID8g
ZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVjKSA6IGV4cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhl
Yyk7Cit9CisKK3VpbnQzMl90IENvbmRpdGlvbmFsTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgYm9vbCBiID0gbG9naWNhbC0+ZXZhbHVhdGVUb0Jvb2xlYW4o
ZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIGIgPyBleHBy
MS0+ZXZhbHVhdGVUb1VJbnQzMihleGVjKSA6IGV4cHIyLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMp
OworfQorCiAvLyBFQ01BIDExLjEzCiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIHZh
bHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1lbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBjdXJy
ZW50LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIE9wZXJhdG9yIG9wZXIpIEtKU19GQVNUX0NBTEw7
CkBAIC0yNTQwLDMyICszMDg5LDMyIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIHZh
bHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1lbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgYnJl
YWs7CiAgIGNhc2UgT3BMU2hpZnQ6CiAgICAgaTEgPSBjdXJyZW50LT50b0ludDMyKGV4ZWMpOwot
ICAgIGkyID0gcmlnaHQtPmV2YWx1YXRlKGV4ZWMpLT50b0ludDMyKGV4ZWMpOworICAgIGkyID0g
cmlnaHQtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKICAgICB2ID0ganNOdW1iZXIoaTEgPDwgaTIp
OwogICAgIGJyZWFrOwogICBjYXNlIE9wUlNoaWZ0OgogICAgIGkxID0gY3VycmVudC0+dG9JbnQz
MihleGVjKTsKLSAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZShleGVjKS0+dG9JbnQzMihleGVjKTsK
KyAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiAgICAgdiA9IGpzTnVtYmVy
KGkxID4+IGkyKTsKICAgICBicmVhazsKICAgY2FzZSBPcFVSU2hpZnQ6CiAgICAgdWkgPSBjdXJy
ZW50LT50b1VJbnQzMihleGVjKTsKLSAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZShleGVjKS0+dG9J
bnQzMihleGVjKTsKKyAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiAgICAg
diA9IGpzTnVtYmVyKHVpID4+IGkyKTsKICAgICBicmVhazsKICAgY2FzZSBPcEFuZEVxOgogICAg
IGkxID0gY3VycmVudC0+dG9JbnQzMihleGVjKTsKLSAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZShl
eGVjKS0+dG9JbnQzMihleGVjKTsKKyAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhl
Yyk7CiAgICAgdiA9IGpzTnVtYmVyKGkxICYgaTIpOwogICAgIGJyZWFrOwogICBjYXNlIE9wWE9y
RXE6CiAgICAgaTEgPSBjdXJyZW50LT50b0ludDMyKGV4ZWMpOwotICAgIGkyID0gcmlnaHQtPmV2
YWx1YXRlKGV4ZWMpLT50b0ludDMyKGV4ZWMpOworICAgIGkyID0gcmlnaHQtPmV2YWx1YXRlVG9J
bnQzMihleGVjKTsKICAgICB2ID0ganNOdW1iZXIoaTEgXiBpMik7CiAgICAgYnJlYWs7CiAgIGNh
c2UgT3BPckVxOgogICAgIGkxID0gY3VycmVudC0+dG9JbnQzMihleGVjKTsKLSAgICBpMiA9IHJp
Z2h0LT5ldmFsdWF0ZShleGVjKS0+dG9JbnQzMihleGVjKTsKKyAgICBpMiA9IHJpZ2h0LT5ldmFs
dWF0ZVRvSW50MzIoZXhlYyk7CiAgICAgdiA9IGpzTnVtYmVyKGkxIHwgaTIpOwogICAgIGJyZWFr
OwogICBjYXNlIE9wTW9kRXE6IHsKQEAgLTI4NTQsOSArMzQwMywyOSBAQCB2b2lkIEFzc2lnbkV4
cHJOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrcwogfQogCiAvLyBFQ01BIDEyLjIKLUpTVmFsdWUgKkFzc2lnbkV4cHJOb2RlOjpl
dmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitKU1ZhbHVlKiBBc3NpZ25FeHByTm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBleHByLT5ldmFsdWF0ZShleGVjKTsK
K30KKworYm9vbCBBc3NpZ25FeHByTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBleHByLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKK30KKwor
ZG91YmxlIEFzc2lnbkV4cHJOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gZXhwci0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKK30KKworaW50MzJf
dCBBc3NpZ25FeHByTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gZXhwci0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBBc3Np
Z25FeHByTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIHJldHVy
biBleHByLT5ldmFsdWF0ZShleGVjKTsKKyAgICByZXR1cm4gZXhwci0+ZXZhbHVhdGVUb0ludDMy
KGV4ZWMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVmFyRGVjbE5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjg5Niw3ICszNDY1LDcg
QEAgdm9pZCBWYXJEZWNsTm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBz
dGFja3MpCiB2b2lkIFZhckRlY2xOb2RlOjpoYW5kbGVTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluLCBKU1ZhbHVlKiB2YWwpCiB7CiAgICAgU2NvcGVDaGFp
bkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBl
bmQgPSBjaGFpbi5lbmQoKTsgICAgICAgIAorICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBj
aGFpbi5lbmQoKTsKICAgICAKICAgICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBp
biB0aGUgc2NvcGUgY2hhaW4KICAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmggYi9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaApp
bmRleCBkNjBiNzMzLi4yMDQzZjg3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9k
ZXMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaApAQCAtMTgwLDYgKzE4MCw4IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICAKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFs
dWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMID0gMDsKICAgICAgICAgdmlydHVhbCBkb3Vi
bGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgICB2
aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CisgICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKIAogICAgICAgICAvLyBVc2VkIHRvIG9wdGltaXplIHRo
b3NlIG5vZGVzIHRoYXQgZG8gZXh0cmEgd29yayB3aGVuIHJldHVybmluZyBhIHJlc3VsdCwgZXZl
biBpZiB0aGUgcmVzdWx0IGhhcyBubyBzZW1hbnRpYyByZWxldmFuY2UKQEAgLTIzNCw2ICsyMzYs
OCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJl
cihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRv
Qm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBl
dmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVp
bnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQ
cmltYXJ5OyB9CiAKQEAgLTI0OSw2ICsyNTMsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGlj
OgogICAgICAgSW1tZWRpYXRlTnVtYmVyTm9kZShKU1ZhbHVlKiB2LCBkb3VibGUgZCkgS0pTX0ZB
U1RfQ0FMTCA6IE51bWJlck5vZGUoZCksIG1fdmFsdWUodikgeyBBU1NFUlQodiA9PSBKU0ltbWVk
aWF0ZTo6ZnJvbShkKSk7IH0KICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50
MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZh
bHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgCiAgICAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWUoZG91YmxlIGQpIEtKU19GQVNUX0NBTEwgeyBtX2RvdWJsZSA9
IGQ7IG1fdmFsdWUgPSBKU0ltbWVkaWF0ZTo6ZnJvbShkKTsgQVNTRVJUKG1fdmFsdWUpOyB9CiAg
IHByaXZhdGU6CkBAIC0zMDYsNiArMzEyLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKIAogICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJv
b2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0
dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KIApAQCAtMzE0LDYgKzMyNCw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNf
RkFTVF9DQUxMIHsgcmV0dXJuIGlkZW50OyB9CiAKICAgcHJvdGVjdGVkOgorICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7CiAgICAgSWRlbnRpZmll
ciBpZGVudDsKICAgICBzaXplX3QgaW5kZXg7IC8vIFVzZWQgYnkgTG9jYWxWYXJBY2Nlc3NOb2Rl
LgogICB9OwpAQCAtMzMwLDYgKzM0MSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwg
SlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7CiAgIH07CkBAIC00MjgsNiArNDQxLDggQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4o
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVU
b0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBl
dmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTWVtYmVyOyB9
CiAKQEAgLTQ0Nyw2ICs0NjIsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgRG90QWNjZXNzb3JO
b2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBjb25zdCBJZGVudGlmaWVyJiBzKSBLSlNfRkFTVF9DQUxM
IDogZXhwcihlKSwgaWRlbnQocykgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2sm
KSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVt
YmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1
YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMy
X3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY01lbWJl
cjsgfQogCkBAIC00NTYsNiArNDc1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcigpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gaWRlbnQ7
IH0KIAogICBwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVh
dGUoRXhlY1N0YXRlKik7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwogICAgIElk
ZW50aWZpZXIgaWRlbnQ7CiAgIH07CkBAIC00OTksOSArNTE5LDE0IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIE5ld0V4cHJOb2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBBcmd1bWVudHNOb2RlKiBhKSBL
SlNfRkFTVF9DQUxMIDogZXhwcihlKSwgYXJncyhhKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVU
b051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBl
dmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVp
bnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2
aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNMZWZ0SGFuZFNpZGU7IH0KICAgcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUqIGlubGluZUV2YWx1YXRlKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gZXhwcjsKICAgICBSZWZQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKICAgfTsKQEAgLTUzNSwx
MCArNTYwLDE1IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVt
YmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBib29sIGV2YWx1YXRl
VG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90
IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwg
dWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJl
Y0NhbGw7IH0KIAogICBwcm90ZWN0ZWQ6CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxp
bmVFdmFsdWF0ZShFeGVjU3RhdGUqKTsKICAgICBJZGVudGlmaWVyIGlkZW50OwogICAgIFJlZlB0
cjxBcmd1bWVudHNOb2RlPiBhcmdzOwogICAgIHNpemVfdCBpbmRleDsgLy8gVXNlZCBieSBMb2Nh
bFZhckZ1bmN0aW9uQ2FsbE5vZGUuCkBAIC01NTQsNiArNTg0LDEyIEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIH0KIAogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9J
bnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZh
bHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICBwcml2YXRlOgorICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7CiAgIH07
CiAKICAgY2xhc3MgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5v
ZGUgewpAQCAtNTc0LDkgKzYxMCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBGdW5jdGlvbkNh
bGxEb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBiLCBjb25zdCBJZGVudGlmaWVyJiBpLCBBcmd1bWVu
dHNOb2RlKiBhKSBLSlNfRkFTVF9DQUxMIDogYmFzZShiKSwgaWRlbnQoaSksIGFyZ3MoYSkge30K
ICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2Rl
KiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZp
cnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwor
ICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ2FsbDsgfQotICBwcm90ZWN0ZWQ6CisgIHByaXZh
dGU6CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShFeGVjU3RhdGUq
KTsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGJhc2U7CiAgICAgSWRlbnRpZmllciBpZGVu
dDsKICAgICBSZWZQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKQEAgLTY1Myw3ICs2OTQsMTMgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgfQogCiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9v
bGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1
YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMy
X3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQoKTsKKyAgcHJpdmF0
ZToKKyAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNT
dGF0ZSopOwogICB9OwogCiAgIGNsYXNzIFBvc3RmaXhCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CkBAIC05ODAsNiArMTAyNywxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBV
bmFyeVBsdXNOb2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogRXhwcmVzc2lv
bk5vZGUoTnVtYmVyVHlwZSksIG1fZXhwcihlKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBkb3VibGUgZXZhbHVh
dGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJf
dCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFs
IHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNVbmFyeTsgfQogICBwcml2YXRlOgpAQCAtMTAwMyw5ICsxMDU0LDE0IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIEJpdHdpc2VOb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxM
IDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIGV4cHIoZSkge30KICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25T
dGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2
YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJv
b2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0
dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjVW5hcnk7IH0KICAgcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIGludDMy
X3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNz
aW9uTm9kZT4gZXhwcjsKICAgfTsKIApAQCAtMTAyNyw2ICsxMDgzLDkgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJv
ZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAg
ICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVh
dGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNdWx0aXBsaWNp
dGF2ZTsgfQogICBwcml2YXRlOgpAQCAtMTA0MSw2ICsxMTAwLDggQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CisgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTXVsdGlwbGljaXRhdmU7IH0KICAg
cHJpdmF0ZToKQEAgLTEwNTUsNiArMTExNiw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xh
cmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVh
bCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAg
ICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CisgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTXVsdGlwbGljaXRhdmU7IH0KICAgcHJp
dmF0ZToKQEAgLTEwNjksMTIgKzExMzMsMTYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVh
bCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0
aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1
ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJs
ZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAg
IHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY0FkZGl0aXZlOyB9CiAgIHByb3RlY3RlZDoKICAgICBBZGROb2RlKEV4cHJlc3Np
b25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQyLCBKU1R5cGUgZXhwZWN0ZWRSZXR1cm4pIEtK
U19GQVNUX0NBTEwgOiBFeHByZXNzaW9uTm9kZShleHBlY3RlZFJldHVybiksIHRlcm0xKHQxKSwg
dGVybTIodDIpIHt9CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0yOworICBwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUg
ZG91YmxlIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKik7CiAgIH07CiAKICAgICBj
bGFzcyBBZGROdW1iZXJzTm9kZSA6IHB1YmxpYyBBZGROb2RlIHsKQEAgLTEwODIsNiArMTE1MCw4
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBBZGROdW1iZXJzTm9kZShFeHByZXNzaW9uTm9k
ZSogdDEsIEV4cHJlc3Npb25Ob2RlKiB0MikgS0pTX0ZBU1RfQ0FMTCA6IEFkZE5vZGUodDEsIHQy
LCBOdW1iZXJUeXBlKSB7fQogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9O
dW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgICAgdmlydHVhbCBpbnQzMl90
IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgICB2aXJ0
dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICBwcml2YXRlOgogICAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0
ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgfTsKQEAgLTExMTAsNiAr
MTE4MCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051
bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgdmlydHVhbCBpbnQzMl90IGV2
YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgdmlydHVhbCB1
aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY0FkZGl0aXZlOyB9CiAgIHByaXZhdGU6CkBAIC0xMTI0LDkgKzExOTYsMTMgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCB0ZXJtMSh0MSks
IHRlcm0yKHQyKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1
bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CisgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50
MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNTaGlmdDsgfQogICBwcml2YXRlOgor
ICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRl
Kik7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKICAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IHRlcm0yOwogICB9OwpAQCAtMTEzNyw5ICsxMjEzLDEzIEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgOiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgdGVybTEodDEpLCB0ZXJt
Mih0Mikge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlv
bkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjU2hpZnQ7IH0KICAgcHJpdmF0ZToKKyAgICBB
TFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwog
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiB0ZXJtMjsKICAgfTsKQEAgLTExNTAsOSArMTIzMCwxMyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIHRlcm0xKHQxKSwgdGVybTIodDIp
IHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5
Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAg
ICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1NoaWZ0OyB9CiAgIHByaXZhdGU6CisgICAgQUxXQVlT
X0lOTElORSB1aW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopOwogICAg
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiB0ZXJtMjsKICAgfTsKQEAgLTEzMTcsOSArMTQwMSwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAgICAgOiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgZXhwcjEoZTEpLCBleHByMihlMikg
e30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAg
IHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQml0d2lzZUFuZDsgfQogICBwcml2YXRlOgor
ICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRl
Kik7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKICAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IGV4cHIyOwogICB9OwpAQCAtMTMzMCw5ICsxNDE5LDE0IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCBleHByMShlMSksIGV4
cHIyKGUyKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CisgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOworICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9V
SW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNCaXR3aXNlT3I7IH0KICAgcHJp
dmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4
ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CiAgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKQEAgLTEzNDMsOSArMTQzNywxNCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgZXhwcjEo
ZTEpLCBleHByMihlMikge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0lu
dDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFs
dWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQml0d2lzZVhvcjsg
fQogICBwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRv
SW50MzIoRXhlY1N0YXRlKik7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKICAg
ICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOwogICB9OwpAQCAtMTM2Myw2ICsxNDYyLDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjTG9naWNhbEFuZDsgfQogICBwcml2YXRlOgorICAgICAg
ICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSop
OwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CiAgICAgUmVmUHRyPEV4cHJlc3Np
b25Ob2RlPiBleHByMjsKICAgfTsKQEAgLTEzNzcsNiArMTQ3Nyw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1
cm4gUHJlY0xvZ2ljYWxPcjsgfQogICBwcml2YXRlOgorICAgICAgICBBTFdBWVNfSU5MSU5FIGlu
dDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gZXhwcjE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAg
fTsKQEAgLTEzOTEsNiArMTQ5Miw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1
YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBkb3Vi
bGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1
YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAg
ICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNDb25kaXRpb25hbDsgfQogICBwcml2YXRlOgpAQCAtMTU2Niw2ICsxNjcwLDEw
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEFzc2lnbkV4cHJOb2RlKEV4cHJlc3Npb25Ob2RlKiBl
KSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFu
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVU
b051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBl
dmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVp
bnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy92YWx1
ZS5jcHAKaW5kZXggYzBkMDgzMC4uYjg1NGEyOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
a2pzL3ZhbHVlLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuY3BwCkBAIC03Miwx
MSArNzIsMTAgQEAgZG91YmxlIEpTVmFsdWU6OnRvSW50ZWdlclByZXNlcnZlTmFOKEV4ZWNTdGF0
ZSAqZXhlYykgY29uc3QKICAgICByZXR1cm4gdHJ1bmModG9OdW1iZXIoZXhlYykpOwogfQogCi1p
bnQzMl90IEpTVmFsdWU6OnRvSW50MzJTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9r
KSBjb25zdAoraW50MzJfdCBKU1ZhbHVlOjp0b0ludDMyU2xvd0Nhc2UoZG91YmxlIGQsIGJvb2wm
IG9rKQogewogICAgIG9rID0gdHJ1ZTsKIAotICAgIGRvdWJsZSBkID0gdG9OdW1iZXIoZXhlYyk7
CiAgICAgaWYgKGQgPj0gLUQzMiAvIDIgJiYgZCA8IEQzMiAvIDIpCiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQzMl90PihkKTsKIApAQCAtOTMsMTEgKzkyLDE1IEBAIGludDMyX3QgSlNW
YWx1ZTo6dG9JbnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2spIGNvbnN0CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KGQzMik7CiB9CiAKLXVpbnQzMl90IEpTVmFs
dWU6OnRvVUludDMyU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykgY29uc3QKK2lu
dDMyX3QgSlNWYWx1ZTo6dG9JbnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2sp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEpTVmFsdWU6OnRvSW50MzJTbG93Q2FzZSh0b051bWJlcihl
eGVjKSwgb2spOworfQorCit1aW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQzMlNsb3dDYXNlKGRvdWJs
ZSBkLCBib29sJiBvaykKIHsKICAgICBvayA9IHRydWU7CiAKLSAgICBkb3VibGUgZCA9IHRvTnVt
YmVyKGV4ZWMpOwogICAgIGlmIChkID49IDAuMCAmJiBkIDwgRDMyKQogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGQpOwogCkBAIC0xMTIsNiArMTE1LDExIEBAIHVpbnQzMl90
IEpTVmFsdWU6OnRvVUludDMyU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykgY29u
c3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGQzMik7CiB9CiAKK3VpbnQzMl90
IEpTVmFsdWU6OnRvVUludDMyU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykgY29u
c3QKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzJTbG93Q2FzZSh0b051bWJlcihleGVj
KSwgb2spOworfQorCiBmbG9hdCBKU1ZhbHVlOjp0b0Zsb2F0KEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvTnVtYmVyKGV4ZWMpKTsKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oIGIvSmF2YVNjcmlwdENvcmUva2pz
L3ZhbHVlLmgKaW5kZXggYzRjM2FhZS4uNWViYjU3NSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUva2pzL3ZhbHVlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgKQEAgLTk3LDYg
Kzk3LDEwIEBAIHB1YmxpYzoKICAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUqKSBjb25z
dDsKICAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUqLCBib29sJiBvaykgY29uc3Q7CiAK
KyAgICAvLyBUaGVzZSBhcmUgaWRlbnRpY2FsIGxvZ2ljIHRvIGFib3ZlLCBhbmQgZmFzdGVyIHRo
YW4ganNOdW1iZXIobnVtYmVyKS0+dG9JbnQzMihleGVjKQorICAgIHN0YXRpYyBpbnQzMl90IHRv
SW50MzIoZG91YmxlKTsKKyAgICBzdGF0aWMgaW50MzJfdCB0b1VJbnQzMihkb3VibGUpOworCiAg
ICAgLy8gRmxvYXRpbmcgcG9pbnQgY29udmVyc2lvbnMuCiAgICAgZmxvYXQgdG9GbG9hdChFeGVj
U3RhdGUqKSBjb25zdDsKIApAQCAtMTA0LDYgKzEwOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG1h
cmsoKTsKICAgICBib29sIG1hcmtlZCgpIGNvbnN0OwogCisgICAgc3RhdGljIGludDMyX3QgdG9J
bnQzMlNsb3dDYXNlKGRvdWJsZSwgYm9vbCYgb2spOworICAgIHN0YXRpYyB1aW50MzJfdCB0b1VJ
bnQzMlNsb3dDYXNlKGRvdWJsZSwgYm9vbCYgb2spOworCiBwcml2YXRlOgogICAgIGludDMyX3Qg
dG9JbnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSosIGJvb2wmIG9rKSBjb25zdDsKICAgICB1aW50MzJf
dCB0b1VJbnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSosIGJvb2wmIG9rKSBjb25zdDsKQEAgLTI4OCwx
NiArMjk1LDE2IEBAIGlubGluZSB2b2lkIEpTQ2VsbDo6bWFyaygpCiAgICAgcmV0dXJuIENvbGxl
Y3Rvcjo6bWFya0NlbGwodGhpcyk7CiB9CiAKLWlubGluZSBKU0NlbGwgKkpTVmFsdWU6OmFzQ2Vs
bCgpCitBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkKIHsKICAgICBBU1NF
UlQoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh0aGlzKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PEpTQ2VsbCAqPih0aGlzKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNDZWxsKj4odGhp
cyk7CiB9CiAKLWlubGluZSBjb25zdCBKU0NlbGwgKkpTVmFsdWU6OmFzQ2VsbCgpIGNvbnN0CitB
TFdBWVNfSU5MSU5FIGNvbnN0IEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh0aGlzKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IEpTQ2VsbCAqPih0aGlzKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgSlNDZWxsKj4odGhpcyk7CiB9CiAKIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZp
bmVkKCkgY29uc3QKQEAgLTQ3Myw2ICs0ODAsMjQgQEAgaW5saW5lIHVpbnQzMl90IEpTVmFsdWU6
OnRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICByZXR1cm4gdG9VSW50MzJTbG93
Q2FzZShleGVjLCBvayk7CiB9CiAKK2lubGluZSBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzIoZG91
YmxlIHZhbCkKK3sKKyAgICBpZiAoISh2YWwgPj0gLTIxNDc0ODM2NDguMCAmJiB2YWwgPCAyMTQ3
NDgzNjQ4LjApKSB7CisgICAgICAgIGJvb2wgaWdub3JlZDsKKyAgICAgICAgcmV0dXJuIHRvSW50
MzJTbG93Q2FzZSh2YWwsIGlnbm9yZWQpOworICAgIH0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50MzJfdD4odmFsKTsKK30KKworaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6dG9VSW50MzIoZG91
YmxlIHZhbCkKK3sKKyAgICBpZiAoISh2YWwgPj0gMC4wICYmIHZhbCA8IDQyOTQ5NjcyOTYuMCkp
IHsKKyAgICAgICAgYm9vbCBpZ25vcmVkOworICAgICAgICByZXR1cm4gdG9VSW50MzJTbG93Q2Fz
ZSh2YWwsIGlnbm9yZWQpOworICAgIH0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHZhbCk7Cit9CisKIGlubGluZSBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzIoRXhlY1N0YXRlKiBl
eGVjLCBib29sJiBvaykgY29uc3QKIHsKICAgICBpbnQzMl90IGk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17220</attachid>
            <date>2007-11-12 22:32:48 -0800</date>
            <delta_ts>2007-11-12 23:32:07 -0800</delta_ts>
            <desc>better fix (1.4% speedup according to SunSpider)</desc>
            <filename>final.patch</filename>
            <type>text/plain</type>
            <size>59762</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9KU0ltbWVkaWF0ZS5oIGIvSmF2YVNjcmlw
dENvcmUva2pzL0pTSW1tZWRpYXRlLmgKaW5kZXggYTcxY2I2Mi4uZGZjZjJiYyAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
a2pzL0pTSW1tZWRpYXRlLmgKQEAgLTExNiw2ICsxMTYsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgZ2V0VHJ1bmNhdGVkSW50MzIoY29uc3QgSlNWYWx1ZSosIGludDMyX3QmKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRUcnVuY2F0ZWRVSW50MzIoY29uc3QgSlNWYWx1ZSosIHVpbnQzMl90Jik7
CiAKKyAgICBzdGF0aWMgaW50MzJfdCBnZXRUcnVuY2F0ZWRJbnQzMihjb25zdCBKU1ZhbHVlKik7
CisKICAgICBzdGF0aWMgSlNWYWx1ZSogdHJ1ZUltbWVkaWF0ZSgpOwogICAgIHN0YXRpYyBKU1Zh
bHVlKiBmYWxzZUltbWVkaWF0ZSgpOwogICAgIHN0YXRpYyBKU1ZhbHVlKiB1bmRlZmluZWRJbW1l
ZGlhdGUoKTsKQEAgLTIzOCwxMCArMjQwLDE1IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJ
bW1lZGlhdGU6OmZyb20oZG91YmxlIGQpCiAgICAgcmV0dXJuIHRhZyhpbnRWYWwgPDwgMiwgTnVt
YmVyVHlwZSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgaW50MzJfdCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1
bmNhdGVkSW50MzIoY29uc3QgSlNWYWx1ZSogdikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50MzJfdD4odW5UYWcodikpID4+IDI7Cit9CisKIEFMV0FZU19JTkxJTkUgZG91YmxlIEpTSW1t
ZWRpYXRlOjp0b0RvdWJsZShjb25zdCBKU1ZhbHVlKiB2KQogewogICAgIEFTU0VSVChpc0ltbWVk
aWF0ZSh2KSk7Ci0gICAgY29uc3QgaW50MzJfdCBpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odW5U
YWcodikpID4+IDI7CisgICAgY29uc3QgaW50MzJfdCBpID0gZ2V0VHJ1bmNhdGVkSW50MzIodik7
CiAgICAgaWYgKEpTSW1tZWRpYXRlOjpnZXRUYWcodikgPT0gVW5kZWZpbmVkVHlwZSAmJiBpKQog
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
ICAgICByZXR1cm4gaTsKQEAgLTI0OSwxNCArMjU2LDE0IEBAIEFMV0FZU19JTkxJTkUgZG91Ymxl
IEpTSW1tZWRpYXRlOjp0b0RvdWJsZShjb25zdCBKU1ZhbHVlKiB2KQogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNJbW1lZGlhdGU6OmdldFVJbnQzMihjb25zdCBKU1ZhbHVlKiB2LCB1aW50MzJfdCYg
aSkKIHsKLSAgICBjb25zdCBpbnQzMl90IHNpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odW5UYWco
dikpID4+IDI7CisgICAgY29uc3QgaW50MzJfdCBzaSA9IGdldFRydW5jYXRlZEludDMyKHYpOwog
ICAgIGkgPSBzaTsKICAgICByZXR1cm4gaXNOdW1iZXIodikgJiAoc2kgPj0gMCk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgYm9vbCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoY29uc3QgSlNW
YWx1ZSogdiwgaW50MzJfdCYgaSkKIHsKLSAgICBpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odW5U
YWcodikpID4+IDI7CisgICAgaSA9IGdldFRydW5jYXRlZEludDMyKHYpOwogICAgIHJldHVybiBp
c051bWJlcih2KTsKIH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNw
cCBiL0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKaW5kZXggZTlmMGQ5MS4uZDg0YjYyNiAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAorKysgYi9KYXZhU2NyaXB0
Q29yZS9ranMvbm9kZXMuY3BwCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogI2Rl
ZmluZSBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIgXAogICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsgXAogICAgIGhhbmRsZUV4Y2VwdGlvbihleGVjKTsgXAotICAgIHJldHVybiAwLjA7IFwK
KyAgICByZXR1cm4gMDsgXAogICB9CiAKICNkZWZpbmUgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVB
TiBcCkBAIC0yMjcsNyArMjI3LDYgQEAgZG91YmxlIEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0ZVRv
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlKiB2YWx1ZSA9IGV2YWx1YXRl
KGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIC8vIE5vIG5lZWQgdG8g
Y2hlY2sgZXhjZXB0aW9uIGFmdGVyIHRvTnVtYmVyLCBjYWxsZXIgd2lsbCBkbyBzbyByaWdodCBh
ZnRlciBldmFsdWF0ZVRvTnVtYmVyKCkgY2FsbAogICAgIHJldHVybiB2YWx1ZS0+dG9OdW1iZXIo
ZXhlYyk7CiB9CiAKQEAgLTIzOCw2ICsyMzcsMjAgQEAgYm9vbCBFeHByZXNzaW9uTm9kZTo6ZXZh
bHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiB2YWx1ZS0+dG9Cb29s
ZWFuKGV4ZWMpOwogfQogCitpbnQzMl90IEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0ZVRvSW50MzIo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbHVhdGUoZXhlYyk7
CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHZhbHVlLT50b0ludDMy
KGV4ZWMpOworfQorCit1aW50MzJfdCBFeHByZXNzaW9uTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdmFsdWUgPSBldmFsdWF0ZShleGVjKTsK
KyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdmFsdWUtPnRvVUludDMy
KGV4ZWMpOworfQorCiBzdGF0aWMgdm9pZCBzdWJzdGl0dXRlKFVTdHJpbmcgJnN0cmluZywgY29u
c3QgVVN0cmluZyAmc3Vic3RyaW5nKSBLSlNfRkFTVF9DQUxMOwogc3RhdGljIHZvaWQgc3Vic3Rp
dHV0ZShVU3RyaW5nICZzdHJpbmcsIGNvbnN0IFVTdHJpbmcgJnN1YnN0cmluZykKIHsKQEAgLTQy
NSw2ICs0MzgsMTYgQEAgYm9vbCBOdW1iZXJOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3Rh
dGUqKQogICAgIHJldHVybiBtX2RvdWJsZSA8IDAuMCB8fCBtX2RvdWJsZSA+IDAuMDsgLy8gZmFs
c2UgZm9yIE5hTiBhcyB3ZWxsIGFzIDAKIH0KIAoraW50MzJfdCBOdW1iZXJOb2RlOjpldmFsdWF0
ZVRvSW50MzIoRXhlY1N0YXRlKikKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihtX2Rv
dWJsZSk7Cit9CisKK3VpbnQzMl90IE51bWJlck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0
YXRlKikKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIobV9kb3VibGUpOworfQorCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW1tZWRpYXRlTnVtYmVyTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBKU1ZhbHVlKiBJbW1lZGlhdGVOdW1i
ZXJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqKQpAQCAtNDMyLDYgKzQ1NSwyMCBAQCBKU1ZhbHVl
KiBJbW1lZGlhdGVOdW1iZXJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqKQogICAgIHJldHVybiBt
X3ZhbHVlOwogfQogCitpbnQzMl90IEltbWVkaWF0ZU51bWJlck5vZGU6OmV2YWx1YXRlVG9JbnQz
MihFeGVjU3RhdGUqKQoreworICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50
MzIobV92YWx1ZSk7Cit9CisKK3VpbnQzMl90IEltbWVkaWF0ZU51bWJlck5vZGU6OmV2YWx1YXRl
VG9VSW50MzIoRXhlY1N0YXRlKikKK3sKKyAgICB1aW50MzJfdCBpOworICAgIGlmIChKU0ltbWVk
aWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKG1fdmFsdWUsIGkpKQorICAgICAgICByZXR1cm4gaTsK
KyAgICBib29sIG9rOworICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMlNsb3dDYXNlKG1fZG91
YmxlLCBvayk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdHJpbmdO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEpTVmFsdWUqIFN0cmlu
Z05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSopCkBAIC00NjcsNyArNTA0LDcgQEAgSlNWYWx1ZSAq
VGhpc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIC8vIEVDTUEgMTEuMS4yICYgMTAuMS40Ci1KU1ZhbHVlICpSZXNvbHZlTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogUmVzb2x2ZU5vZGU6OmlubGluZUV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgLy8gQ2hlY2sgZm9yIG1pc3NlZCBvcHRpbWl6YXRp
b24gb3Bwb3J0dW5pdHkuCiAgIEFTU0VSVCghY2FuU2tpcExvb2t1cChleGVjLCBpZGVudCkpOwpA
QCAtNDkyLDYgKzUyOSwzOSBAQCBKU1ZhbHVlICpSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKQogICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlk
ZW50KTsKIH0KIAorSlNWYWx1ZSogUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7Cit9CisKK2RvdWJsZSBSZXNv
bHZlTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1
ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJF
UgorICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKK30KKworYm9vbCBSZXNvbHZlTm9kZTo6
ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBp
bmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCisgICAg
cmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKK30KKworaW50MzJfdCBSZXNvbHZlTm9kZTo6ZXZh
bHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5l
RXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJu
IHYtPnRvSW50MzIoZXhlYyk7Cit9CisKK3VpbnQzMl90IFJlc29sdmVOb2RlOjpldmFsdWF0ZVRv
VUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVh
dGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRv
VUludDMyKGV4ZWMpOworfQorCiB2b2lkIFJlc29sdmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgRGVjbGFyYXRpb25TdGFja3M6Ok5v
ZGVTdGFjayYpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gZnVuY3Rpb25Cb2R5LT5zeW1ib2xUYWJs
ZSgpLmdldChpZGVudC51c3RyaW5nKCkucmVwKCkpOwpAQCAtNTIxLDYgKzU5MSwxNiBAQCBib29s
IExvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQog
ICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKS0+dG9Cb29sZWFuKGV4ZWMpOwogfQogCitp
bnQzMl90IExvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvSW50MzIoZXhlYyk7Cit9
CisKK3VpbnQzMl90IExvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b1VJbnQzMihl
eGVjKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVsZW1lbnROb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBFbGVtZW50Tm9kZTo6
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFj
a3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQpAQCAtNjcyLDE0ICs3NTIsMzIgQEAgSlNWYWx1ZSog
QnJhY2tldEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiBkb3VibGUg
QnJhY2tldEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b051bWJlcihleGVjKTsKKyAgICBK
U1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCisgICAgcmV0dXJuIHYtPnRvTnVtYmVyKGV4ZWMpOwogfQogCiBib29sIEJyYWNrZXRB
Y2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBy
ZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvQm9vbGVhbihleGVjKTsKKyAgICBKU1ZhbHVl
KiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVB
TgorICAgIHJldHVybiB2LT50b0Jvb2xlYW4oZXhlYyk7CiB9CiAKK2ludDMyX3QgQnJhY2tldEFj
Y2Vzc29yTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1Zh
bHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVN
QkVSCisgICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7Cit9CisKK3VpbnQzMl90IEJyYWNrZXRB
Y2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpT
VmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05O
VU1CRVIKKyAgICByZXR1cm4gdi0+dG9VSW50MzIoZXhlYyk7Cit9ICAgIAorCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG90QWNjZXNzb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgRG90QWNjZXNzb3JOb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBu
b2RlU3RhY2spCkBAIC02ODgsMTQgKzc4Niw0NiBAQCB2b2lkIERvdEFjY2Vzc29yTm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFjawog
fQogCiAvLyBFQ01BIDExLjIuMWIKLUpTVmFsdWUgKkRvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogRG90QWNjZXNzb3JOb2RlOjppbmxpbmVFdmFsdWF0
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFsdWUgKnYgPSBleHByLT5ldmFsdWF0ZShleGVj
KTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgcmV0dXJuIHYtPnRvT2JqZWN0KGV4ZWMp
LT5nZXQoZXhlYywgaWRlbnQpOworICAgIEpTVmFsdWUqIHYgPSBleHByLT5ldmFsdWF0ZShleGVj
KTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQorICAgIHJldHVybiB2LT50b09iamVjdChl
eGVjKS0+Z2V0KGV4ZWMsIGlkZW50KTsKK30KIAorSlNWYWx1ZSogRG90QWNjZXNzb3JOb2RlOjpl
dmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4
ZWMpOwogfQogCitkb3VibGUgRG90QWNjZXNzb3JOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Cisg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRvTnVtYmVyKGV4ZWMp
OworfQorCitib29sIERvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
KiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBL
SlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCisgICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsK
K30KKworaW50MzJfdCBEb3RBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtK
U19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b0ludDMyKGV4ZWMpOworfQor
Cit1aW50MzJfdCBEb3RBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNf
Q0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gdi0+dG9VSW50MzIoZXhlYyk7Cit9ICAg
IAorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJndW1lbnRMaXN0Tm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIEFyZ3VtZW50TGlzdE5vZGU6Om9w
dGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tz
OjpOb2RlU3RhY2smIG5vZGVTdGFjaykKQEAgLTczNSw5ICs4NjUsOSBAQCB2b2lkIE5ld0V4cHJO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6TgogCiAvLyBFQ01BIDExLjIuMgogCi1KU1ZhbHVlICpOZXdFeHByTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogTmV3RXhwck5vZGU6OmlubGluZUV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSAqdiA9IGV4cHItPmV2YWx1YXRlKGV4
ZWMpOworICBKU1ZhbHVlKiB2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VY
Q0VQVElPTlZBTFVFCiAKICAgTGlzdCBhcmdMaXN0OwpAQCAtNzQ2LDE4ICs4NzYsNDkgQEAgSlNW
YWx1ZSAqTmV3RXhwck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKICAgICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQogICB9CiAKLSAgaWYgKCF2LT5pc09iamVjdCgpKSB7CisgIGlmICgh
di0+aXNPYmplY3QoKSkKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJW
YWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5v
dCBiZSB1c2VkIHdpdGggbmV3LiIsIHYsIGV4cHIuZ2V0KCkpOwotICB9CiAKICAgSlNPYmplY3Qg
KmNvbnN0ciA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odik7Ci0gIGlmICghY29uc3RyLT5pbXBs
ZW1lbnRzQ29uc3RydWN0KCkpIHsKKyAgaWYgKCFjb25zdHItPmltcGxlbWVudHNDb25zdHJ1Y3Qo
KSkKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVz
dWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhIGNvbnN0cnVjdG9yLiBDYW5ub3QgYmUgdXNl
ZCB3aXRoIG5ldy4iLCB2LCBleHByLmdldCgpKTsKLSAgfQogCiAgIHJldHVybiBjb25zdHItPmNv
bnN0cnVjdChleGVjLCBhcmdMaXN0KTsKIH0KIAorSlNWYWx1ZSogTmV3RXhwck5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7
Cit9CisKK2RvdWJsZSBOZXdFeHByTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19D
SEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKK30KKwor
Ym9vbCBOZXdFeHByTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENF
UFRJT05CT09MRUFOCisgICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKK30KKworaW50MzJf
dCBOZXdFeHByTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBK
U1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCisgICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7Cit9CisKK3VpbnQzMl90IE5ld0V4
cHJOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVl
KiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVS
CisgICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOworfSAgICAKKwogdm9pZCBGdW5jdGlvbkNh
bGxWYWx1ZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERl
Y2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKICAgICBub2RlU3RhY2su
YXBwZW5kKGFyZ3MuZ2V0KCkpOwpAQCAtNzk5LDcgKzk2MCw3IEBAIHZvaWQgRnVuY3Rpb25DYWxs
UmVzb2x2ZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSogZnVu
Y3Rpb25CCiB9CiAKIC8vIEVDTUEgMTEuMi4zCi1KU1ZhbHVlICpGdW5jdGlvbkNhbGxSZXNvbHZl
Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGU6OmlubGluZUV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgLy8gQ2hlY2sg
Zm9yIG1pc3NlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuCiAgIEFTU0VSVCghY2FuU2tpcExv
b2t1cChleGVjLCBpZGVudCkpOwpAQCAtODE5LDE1ICs5ODAsMTMgQEAgSlNWYWx1ZSAqRnVuY3Rp
b25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKICAgICAgIEpTVmFs
dWUgKnYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIGlkZW50KTsKICAgICAgIEtKU19DSEVD
S0VYQ0VQVElPTlZBTFVFCiAgICAgICAgIAotICAgICAgaWYgKCF2LT5pc09iamVjdCgpKSB7Cisg
ICAgICBpZiAoIXYtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IG9i
amVjdC4iLCB2LCBpZGVudCk7Ci0gICAgICB9CiAgICAgICAKICAgICAgIEpTT2JqZWN0ICpmdW5j
ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KTsKICAgICAgIAotICAgICAgaWYgKCFmdW5jLT5p
bXBsZW1lbnRzQ2FsbCgpKSB7CisgICAgICBpZiAoIWZ1bmMtPmltcGxlbWVudHNDYWxsKCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIk9iamVjdCAlcyAocmVz
dWx0IG9mIGV4cHJlc3Npb24gJXMpIGRvZXMgbm90IGFsbG93IGNhbGxzLiIsIHYsIGlkZW50KTsK
LSAgICAgIH0KICAgICAgIAogICAgICAgTGlzdCBhcmdMaXN0OwogICAgICAgYXJncy0+ZXZhbHVh
dGVMaXN0KGV4ZWMsIGFyZ0xpc3QpOwpAQCAtODUxLDcgKzEwMTAsNDAgQEAgSlNWYWx1ZSAqRnVu
Y3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKICAgcmV0dXJu
IHRocm93VW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCk7CiB9CiAKLUpTVmFsdWUq
IExvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7Cit9CisKK2RvdWJsZSBGdW5jdGlv
bkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQ
VElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKK30KKworYm9vbCBGdW5j
dGlvbkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQor
eworICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tF
WENFUFRJT05CT09MRUFOCisgICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKK30KKworaW50
MzJfdCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAgS0pT
X0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7Cit9CisK
K3VpbnQzMl90IEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Cisg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMp
OworfQorCitKU1ZhbHVlKiBMb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmlubGluZUV2YWx1YXRl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbklt
cCo+KGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkpLT5pc0FjdGl2YXRpb24oKSk7CiAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihleGVjLT52YXJpYWJsZU9iamVjdCgpKSA9PSBl
eGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwpAQCAtODcyLDYgKzEwNjQsMzkgQEAgSlNWYWx1ZSog
TG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
cmV0dXJuIGZ1bmMtPmNhbGwoZXhlYywgZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2Jh
bE9iamVjdCgpLCBhcmdMaXN0KTsKIH0KIAorSlNWYWx1ZSogTG9jYWxWYXJGdW5jdGlvbkNhbGxO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1
YXRlKGV4ZWMpOworfQorCitkb3VibGUgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0
ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZh
bHVhdGUoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYt
PnRvTnVtYmVyKGV4ZWMpOworfQorCitib29sIExvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZh
bHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUqIHYgPSBpbmxp
bmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCisgICAgcmV0
dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKK30KKworaW50MzJfdCBMb2NhbFZhckZ1bmN0aW9uQ2Fs
bE5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSog
diA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgor
ICAgIHJldHVybiB2LT50b0ludDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBMb2NhbFZhckZ1bmN0
aW9uQ2FsbE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpT
VmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05O
VU1CRVIKKyAgICByZXR1cm4gdi0+dG9VSW50MzIoZXhlYyk7Cit9CisKIHZvaWQgRnVuY3Rpb25D
YWxsQnJhY2tldE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKICAgICBub2RlU3Rh
Y2suYXBwZW5kKGFyZ3MuZ2V0KCkpOwpAQCAtOTQ4LDcgKzExNzMsNyBAQCB2b2lkIEZ1bmN0aW9u
Q2FsbERvdE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERl
Y2xhcmF0aW9uUwogfQogCiAvLyBFQ01BIDExLjIuMwotSlNWYWx1ZSAqRnVuY3Rpb25DYWxsRG90
Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogRnVuY3Rpb25DYWxsRG90
Tm9kZTo6aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICBKU1ZhbHVlICpiYXNl
VmFsID0gYmFzZS0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCkBA
IC05NzgsNiArMTIwMywzOSBAQCBKU1ZhbHVlICpGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpCiAgIHJldHVybiBmdW5jLT5jYWxsKGV4ZWMsIHRoaXNPYmosIGFy
Z0xpc3QpOwogfQogCitKU1ZhbHVlKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZShFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpOworfQorCitk
b3VibGUgRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19D
SEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKK30KKwor
Ym9vbCBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19D
SEVDS0VYQ0VQVElPTkJPT0xFQU4KKyAgICByZXR1cm4gdi0+dG9Cb29sZWFuKGV4ZWMpOworfQor
CitpbnQzMl90IEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOworICAgIEtK
U19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHJldHVybiB2LT50b0ludDMyKGV4ZWMpOworfQor
Cit1aW50MzJfdCBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7CisgICAg
S0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwor
fQorCiAvLyBFQ01BIDExLjMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBv
c3RmaXhSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0x
MDkyLDYgKzEzNTAsMzcgQEAgSlNWYWx1ZSogUG9zdERlY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiB2OwogfQogCitkb3VibGUgUG9zdERlY0xvY2Fs
VmFyTm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
QVNTRVJUKHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihleGVjLT52YXJpYWJsZU9iamVjdCgp
KS0+aXNBY3RpdmF0aW9uKCkpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1w
Kj4oZXhlYy0+dmFyaWFibGVPYmplY3QoKSkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsK
KyAgICAKKyAgICBKU1ZhbHVlKiogc2xvdCA9ICZleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4
XS52YWx1ZTsKKyAgICBkb3VibGUgbiA9ICgqc2xvdCktPnRvTnVtYmVyKGV4ZWMpOworICAgICpz
bG90ID0ganNOdW1iZXIobiAtIDEpOworICAgIHJldHVybiBuOworfQorCitkb3VibGUgUG9zdERl
Y0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Cit9CisKK2Jvb2wgUG9zdERlY0xv
Y2FsVmFyTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOworfQorCitpbnQzMl90IFBvc3REZWNM
b2NhbFZhck5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIEpTVmFsdWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9CisK
K3VpbnQzMl90IFBvc3REZWNMb2NhbFZhck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRv
TnVtYmVyKGV4ZWMpKTsKK30KKwogdm9pZCBQb3N0RGVjTG9jYWxWYXJOb2RlOjpvcHRpbWl6ZUZv
clVubmVjZXNzYXJ5UmVzdWx0KCkKIHsKICAgICBuZXcgKHRoaXMpIFByZURlY0xvY2FsVmFyTm9k
ZShtX2luZGV4KTsKQEAgLTEzNTYsNyArMTY0NSw3IEBAIHN0YXRpYyBKU1ZhbHVlICp0eXBlU3Ry
aW5nRm9yVmFsdWUoSlNWYWx1ZSAqdikKICAgICAgICAgICAgIC8vIFJldHVybiAidW5kZWZpbmVk
IiBmb3Igb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkCiAgICAgICAgICAgICAvLyBhcyBu
dWxsIHdoZW4gZG9pbmcgY29tcGFyaXNvbnMuCiAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
SlNPYmplY3QqPih2KS0+bWFzcXVlcmFkZUFzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKCJ1bmRlZmluZWQiKTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICByZXR1cm4ganNTdHJpbmcoInVuZGVmaW5lZCIpOwogICAgICAgICAgICAgZWxzZSBpZiAoc3Rh
dGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+aW1wbGVtZW50c0NhbGwoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4ganNTdHJpbmcoImZ1bmN0aW9uIik7CiAgICAgICAgIH0KQEAgLTE2NDcsMTAgKzE5
MzYsMjkgQEAgdm9pZCBVbmFyeVBsdXNOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczoKIC8vIEVDTUEgMTEuNC42CiBKU1ZhbHVl
KiBVbmFyeVBsdXNOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFsdWUg
KnYgPSBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQor
ICAgIEpTVmFsdWUgKnYgPSBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOworICAgIEtKU19DSEVDS0VY
Q0VQVElPTlZBTFVFCisgICAgcmV0dXJuIHYtPnRvSlNOdW1iZXIoZXhlYyk7Cit9CiAKLSAgcmV0
dXJuIHYtPnRvSlNOdW1iZXIoZXhlYyk7Citib29sIFVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlVG9C
b29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gbV9leHByLT5ldmFsdWF0ZVRv
Qm9vbGVhbihleGVjKTsKK30KKworZG91YmxlIFVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlVG9OdW1i
ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBtX2V4cHItPmV2YWx1YXRlVG9OdW1i
ZXIoZXhlYyk7Cit9CisKK2ludDMyX3QgVW5hcnlQbHVzTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gbV9leHByLT5ldmFsdWF0ZVRvSW50MzIoZXhl
Yyk7Cit9CisKK3VpbnQzMl90IFVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBtX2V4cHItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5lZ2F0ZU5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2ODEsMTEgKzE5ODksMzQgQEAgdm9p
ZCBCaXR3aXNlTm90Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2Rl
KiwgRGVjbGFyYXRpb25TdGFja3MKIH0KIAogLy8gRUNNQSAxMS40LjgKLUpTVmFsdWUgKkJpdHdp
c2VOb3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitpbnQzMl90IEJpdHdpc2VOb3RO
b2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVl
ICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0g
IHJldHVybiBqc051bWJlcih+di0+dG9JbnQzMihleGVjKSk7CisgICAgcmV0dXJuIH5leHByLT5l
dmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK0pTVmFsdWUqIEJpdHdpc2VOb3ROb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGpzTnVtYmVyKGlubGluZUV2YWx1
YXRlVG9JbnQzMihleGVjKSk7Cit9CisKK2RvdWJsZSBCaXR3aXNlTm90Tm9kZTo6ZXZhbHVhdGVU
b051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9J
bnQzMihleGVjKTsKK30KKworYm9vbCBCaXR3aXNlTm90Tm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4o
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhl
Yyk7Cit9CisKK2ludDMyX3QgQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKK30K
KwordWludDMyX3QgQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2dpY2FsTm90Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNzMzLDYgKzIwNjQsMjEgQEAgZG91YmxlIE11bHRO
b2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gaW5saW5l
RXZhbHVhdGVUb051bWJlcihleGVjKTsKIH0KIAorYm9vbCBNdWx0Tm9kZTo6ZXZhbHVhdGVUb0Jv
b2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVt
YmVyKGV4ZWMpOworfQorCitpbnQzMl90IE11bHROb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlubGluZUV2YWx1YXRl
VG9OdW1iZXIoZXhlYykpOworfQorCit1aW50MzJfdCBNdWx0Tm9kZTo6ZXZhbHVhdGVUb1VJbnQz
MihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OnRvVUludDMyKGlubGlu
ZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOworfQorCiB2b2lkIERpdk5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKIHsKICAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsKQEAg
LTE3NTgsNiArMjEwNCwxNiBAQCBkb3VibGUgRGl2Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiB9
CiAKK2ludDMyX3QgRGl2Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMp
KTsKK30KKwordWludDMyX3QgRGl2Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OnRvVUludDMyKGlubGluZUV2YWx1YXRlVG9OdW1i
ZXIoZXhlYykpOworfQorCiB2b2lkIE1vZE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykK
IHsKICAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsKQEAgLTE3ODMsNiArMjEzOSwy
MSBAQCBkb3VibGUgTW9kTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiB9CiAKK2Jvb2wgTW9kTm9k
ZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxp
bmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOworfQorCitpbnQzMl90IE1vZE5vZGU6OmV2YWx1YXRl
VG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OnRvSW50MzIo
aW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9CisKK3VpbnQzMl90IE1vZE5vZGU6OmV2
YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0
b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKK30KKwogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFkZGl0aXZlIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBKU1ZhbHVlKiB0aHJvd091dE9mTWVtb3J5RXJy
b3IoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTg5OCw3ICsyMjY5LDcgQEAgSlNWYWx1ZSogQWRkTm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICByZXR1cm4gYWRkKGV4ZWMsIHYxLCB2Mik7
CiB9CiAKLWRvdWJsZSBBZGROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykK
K2RvdWJsZSBBZGROb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU1ZhbHVlKiB2MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hF
Q0tFWENFUFRJT05OVU1CRVIKQEAgLTE5MDksNiArMjI4MCwyMSBAQCBkb3VibGUgQWRkTm9kZTo6
ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGFkZFRvTnVtYmVy
KGV4ZWMsIHYxLCB2Mik7CiB9CiAKK2RvdWJsZSBBZGROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVj
KTsKK30KKworaW50MzJfdCBBZGROb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIo
ZXhlYykpOworfQorCit1aW50MzJfdCBBZGROb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVU
b051bWJlcihleGVjKSk7Cit9ICAgIAorCiBkb3VibGUgQWRkTnVtYmVyc05vZGU6OmlubGluZUV2
YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGRvdWJsZSBuMSA9IHRlcm0x
LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwpAQCAtMTkyNyw2ICsyMzEzLDE2IEBAIGRvdWJsZSBB
ZGROdW1iZXJzTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0
dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiB9CiAKK2ludDMyX3QgQWRkTnVtYmVy
c05vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpT
VmFsdWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9CisKK3VpbnQz
Ml90IEFkZE51bWJlcnNOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVj
KSk7Cit9CisKIEpTVmFsdWUqIEFkZFN0cmluZ3NOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNWYWx1ZSogdjEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7CkBAIC0xOTg3
LDYgKzIzODMsMTYgQEAgZG91YmxlIFN1Yk5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRl
KiBleGVjKQogICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogfQogCitp
bnQzMl90IFN1Yk5vZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIEpTVmFsdWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Cit9
CisKK3VpbnQzMl90IFN1Yk5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpKTsKK30gICAgCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTaGlmdCBO
b2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBMZWZ0U2hp
ZnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCkBAIC0xOTk2LDE2ICsyNDAyLDMyIEBA
IHZvaWQgTGVmdFNoaWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6CiB9CiAKIC8vIEVDTUEgMTEuNy4xCi1KU1ZhbHVlICpM
ZWZ0U2hpZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitpbnQzMl90IExlZnRTaGlm
dE5vZGU6OmlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFs
dWUgKnYxID0gdGVybTEtPmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQotICBKU1ZhbHVlICp2MiA9IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLSAgdW5zaWduZWQgaW50IGkyID0gdjItPnRvVUludDMyKGV4ZWMpOwotICBp
MiAmPSAweDFmOworICAgIGludCBpMSA9IHRlcm0xLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Cisg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCisgICAgdW5zaWduZWQgaW50IGkyID0gdGVybTIt
PmV2YWx1YXRlVG9VSW50MzIoZXhlYykgJiAweDFmOworICAgIHJldHVybiAoaTEgPDwgaTIpOwor
fQorCitKU1ZhbHVlKiBMZWZ0U2hpZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGpzTnVtYmVyKGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7Cit9CiAK
LSAgcmV0dXJuIGpzTnVtYmVyKHYxLT50b0ludDMyKGV4ZWMpIDw8IGkyKTsKK2RvdWJsZSBMZWZ0
U2hpZnROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCitpbnQzMl90IExlZnRTaGlmdE5v
ZGU6OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGlu
ZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKK30KKwordWludDMyX3QgTGVmdFNoaWZ0Tm9kZTo6ZXZh
bHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1
YXRlVG9JbnQzMihleGVjKTsKIH0KIAogdm9pZCBSaWdodFNoaWZ0Tm9kZTo6b3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYgbm9kZVN0YWNrKQpAQCAtMjAxNSwxNiArMjQzNywzMiBAQCB2b2lkIFJpZ2h0U2hpZnROb2Rl
OjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0
YWNrcwogfQogCiAvLyBFQ01BIDExLjcuMgotSlNWYWx1ZSAqUmlnaHRTaGlmdE5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK2ludDMyX3QgUmlnaHRTaGlmdE5vZGU6OmlubGluZUV2YWx1
YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFsdWUgKnYxID0gdGVybTEtPmV2
YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICBKU1ZhbHVlICp2MiA9
IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgdW5z
aWduZWQgaW50IGkyID0gdjItPnRvVUludDMyKGV4ZWMpOwotICBpMiAmPSAweDFmOworICAgIGlu
dCBpMSA9IHRlcm0xLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBU
SU9OTlVNQkVSCisgICAgdW5zaWduZWQgaW50IGkyID0gdGVybTItPmV2YWx1YXRlVG9VSW50MzIo
ZXhlYykgJiAweDFmOworICAgIHJldHVybiAoaTEgPj4gaTIpOworfQorCitKU1ZhbHVlKiBSaWdo
dFNoaWZ0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBqc051
bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykpOworfQorCitkb3VibGUgUmlnaHRTaGlm
dE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK2ludDMyX3QgUmlnaHRTaGlmdE5vZGU6
OmV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlVG9JbnQzMihleGVjKTsKK30KIAotICByZXR1cm4ganNOdW1iZXIodjEtPnRvSW50MzIo
ZXhlYykgPj4gaTIpOwordWludDMyX3QgUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhl
Yyk7CiB9CiAKIHZvaWQgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9k
ZVN0YWNrKQpAQCAtMjAzNCwxNiArMjQ3MiwzMiBAQCB2b2lkIFVuc2lnbmVkUmlnaHRTaGlmdE5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aQog
fQogCiAvLyBFQ01BIDExLjcuMwotSlNWYWx1ZSAqVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQordWludDMyX3QgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6
aW5saW5lRXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFsdWUgKnYx
ID0gdGVybTEtPmV2YWx1YXRlKGV4ZWMpOwotICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICBK
U1ZhbHVlICp2MiA9IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9O
VkFMVUUKLSAgdW5zaWduZWQgaW50IGkyID0gdjItPnRvVUludDMyKGV4ZWMpOwotICBpMiAmPSAw
eDFmOworICAgIHVuc2lnbmVkIGludCBpMSA9IHRlcm0xLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMp
OworICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgorICAgIHVuc2lnbmVkIGludCBpMiA9IHRl
cm0yLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKKyAgICByZXR1cm4gKGkxID4+IGky
KTsKK30KIAotICByZXR1cm4ganNOdW1iZXIodjEtPnRvVUludDMyKGV4ZWMpID4+IGkyKTsKK0pT
VmFsdWUqIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb1VJbnQzMihleGVjKSk7Cit9
CisKK2RvdWJsZSBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb1VJbnQzMihleGVjKTsK
K30KKworaW50MzJfdCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvVUludDMyKGV4ZWMp
OworfQorCit1aW50MzJfdCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvVUludDMy
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb1VJbnQzMihl
eGVjKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlbGF0aW9uYWwg
Tm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjA4NSwzOCArMjUzOSw1
OSBAQCB2b2lkIExlc3NOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5v
ZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZQogfQogCiAvLyBFQ01BIDExLjguMQotSlNWYWx1
ZSogTGVzc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKK2Jvb2wgTGVzc05vZGU6Omlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlKiB2
MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQor
ICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KICAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5l
dmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIHJldHVybiBq
c0Jvb2xlYW4obGVzc1RoYW4oZXhlYywgdjEsIHYyKSk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9O
Qk9PTEVBTgorICAgIHJldHVybiBsZXNzVGhhbihleGVjLCB2MSwgdjIpOworfQorCitKU1ZhbHVl
KiBMZXNzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBqc0Jv
b2xlYW4oaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwogfQogCiBib29sIExlc3NOb2Rl
OjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEg
PSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgot
ICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VY
Q0VQVElPTkJPT0xFQU4KLSAgICByZXR1cm4gbGVzc1RoYW4oZXhlYywgdjEsIHYyKTsKKyAgICBy
ZXR1cm4gaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7CiB9CiAKLUpTVmFsdWUqIExlc3NO
dW1iZXJzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQorYm9vbCBMZXNzTnVtYmVyc05v
ZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBkb3Vi
bGUgbjEgPSBleHByMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENF
UFRJT05WQUxVRQogICAgIGRvdWJsZSBuMiA9IGV4cHIyLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMp
OwotICAgIHJldHVybiBqc0Jvb2xlYW4objEgPCBuMik7CisgICAgcmV0dXJuIG4xIDwgbjI7CiB9
CiAKLUpTVmFsdWUqIExlc3NTdHJpbmdzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSogTGVzc051bWJlcnNOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGpzQm9vbGVhbihpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKSk7Cit9CisK
K2Jvb2wgTGVzc051bWJlcnNOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworfQorCitib29s
IExlc3NTdHJpbmdzTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19D
SEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgSlNWYWx1ZSogdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MSktPnZh
bHVlKCkgPCBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MiktPnZhbHVlKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MSktPnZhbHVlKCkgPCBzdGF0aWNfY2FzdDxTdHJp
bmdJbXAqPih2MiktPnZhbHVlKCk7Cit9CisKK0pTVmFsdWUqIExlc3NTdHJpbmdzTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBqc0Jvb2xlYW4oaW5saW5lRXZh
bHVhdGVUb0Jvb2xlYW4oZXhlYykpOworfQorCitib29sIExlc3NTdHJpbmdzTm9kZTo6ZXZhbHVh
dGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0
ZVRvQm9vbGVhbihleGVjKTsKIH0KIAogdm9pZCBHcmVhdGVyTm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYg
bm9kZVN0YWNrKQpAQCAtMjM5OSwxNCArMjg3NCw0MiBAQCB2b2lkIEJpdEFuZE5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
bwogfQogCiAvLyBFQ01BIDExLjEwCi1KU1ZhbHVlICpCaXRBbmROb2RlOjpldmFsdWF0ZShFeGVj
U3RhdGUgKmV4ZWMpCitKU1ZhbHVlKiBCaXRBbmROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4
ZWMpCiB7ICAgIAotICBKU1ZhbHVlICp2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgS0pT
X0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgSlNWYWx1ZSAqdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIAotICByZXR1cm4ganNOdW1iZXJGcm9t
QW5kKGV4ZWMsIHYxLCB2Mik7CisgICAgSlNWYWx1ZSAqdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhl
Yyk7CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKKyAgICBKU1ZhbHVlICp2MiA9IGV4cHIy
LT5ldmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQorCisgICAgcmV0
dXJuIGpzTnVtYmVyRnJvbUFuZChleGVjLCB2MSwgdjIpOworfQorCitpbnQzMl90IEJpdEFuZE5v
ZGU6OmlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaW50MzJf
dCBpMSA9IGV4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBU
SU9OTlVNQkVSCisgICAgaW50MzJfdCBpMiA9IGV4cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7
CisgICAgcmV0dXJuIChpMSAmIGkyKTsKK30KKworZG91YmxlIEJpdEFuZE5vZGU6OmV2YWx1YXRl
VG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRv
SW50MzIoZXhlYyk7Cit9CisKK2Jvb2wgQml0QW5kTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7
Cit9CisKK2ludDMyX3QgQml0QW5kTm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworfQorCit1aW50
MzJfdCBCaXRBbmROb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogfQogCiB2b2lkIEJpdFhPck5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9u
U3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKQEAgLTI0MTUsMTQgKzI5MTgsMzcgQEAgdm9p
ZCBCaXRYT3JOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm8KICAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdldCgpKTsK
IH0KIAotSlNWYWx1ZSAqQml0WE9yTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQoraW50
MzJfdCBCaXRYT3JOb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQog
ewotICBKU1ZhbHVlICp2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLSAgSlNWYWx1ZSAqdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gIEtK
U19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIAotICByZXR1cm4ganNOdW1iZXIodjEtPnRvSW50MzIo
ZXhlYykgXiB2Mi0+dG9JbnQzMihleGVjKSk7CisgICAgaW50IGkxID0gZXhwcjEtPmV2YWx1YXRl
VG9JbnQzMihleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKKyAgICBpbnQgaTIg
PSBleHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOworICAgIHJldHVybiAoaTEgXiBpMik7Cit9
CisKK0pTVmFsdWUqIEJpdFhPck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpKTsKK30KKworZG91
YmxlIEJpdFhPck5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK2Jvb2wgQml0WE9yTm9k
ZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBpbmxp
bmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK2ludDMyX3QgQml0WE9yTm9kZTo6ZXZhbHVh
dGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVU
b0ludDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBCaXRYT3JOb2RlOjpldmFsdWF0ZVRvVUludDMy
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4
ZWMpOwogfQogCiB2b2lkIEJpdE9yTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlv
bkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQpAQCAt
MjQzMSwxNCArMjk1NywzNyBAQCB2b2lkIEJpdE9yTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZAogICAgIG5vZGVTdGFj
ay5hcHBlbmQoZXhwcjEuZ2V0KCkpOwogfQogCi1KU1ZhbHVlICpCaXRPck5vZGU6OmV2YWx1YXRl
KEV4ZWNTdGF0ZSAqZXhlYykKK2ludDMyX3QgQml0T3JOb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50
MzIoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVlICp2MSA9IGV4cHIxLT5ldmFsdWF0ZShl
eGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgSlNWYWx1ZSAqdjIgPSBleHByMi0+
ZXZhbHVhdGUoZXhlYyk7Ci0gIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIAotICByZXR1cm4g
anNOdW1iZXIodjEtPnRvSW50MzIoZXhlYykgfCB2Mi0+dG9JbnQzMihleGVjKSk7CisgICAgaW50
IGkxID0gZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05OVU1CRVIKKyAgICBpbnQgaTIgPSBleHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOworICAg
IHJldHVybiAoaTEgfCBpMik7Cit9CisKK0pTVmFsdWUqIEJpdE9yTm9kZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50
MzIoZXhlYykpOworfQorCitkb3VibGUgQml0T3JOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwor
fQorCitib29sIEJpdE9yTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK2ludDMyX3Qg
Qml0T3JOb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK3VpbnQzMl90IEJpdE9yTm9kZTo6
ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlVG9JbnQzMihleGVjKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEJpbmFyeSBMb2dpY2FsIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTI1MTYsNiArMzA2NSwyNyBAQCBib29sIENvbmRpdGlvbmFsTm9kZTo6ZXZhbHVhdGVUb0Jvb2xl
YW4oRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBiID8gZXhwcjEtPmV2YWx1YXRlVG9Cb29s
ZWFuKGV4ZWMpIDogZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogfQogCitkb3VibGUg
Q29uZGl0aW9uYWxOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBib29sIGIgPSBsb2dpY2FsLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAgICBLSlNfQ0hF
Q0tFWENFUFRJT05OVU1CRVIKKyAgICByZXR1cm4gYiA/IGV4cHIxLT5ldmFsdWF0ZVRvTnVtYmVy
KGV4ZWMpIDogZXhwcjItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Cit9CisKK2ludDMyX3QgQ29u
ZGl0aW9uYWxOb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGJv
b2wgYiA9IGxvZ2ljYWwtPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworICAgIEtKU19DSEVDS0VY
Q0VQVElPTk5VTUJFUgorICAgIHJldHVybiBiID8gZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVj
KSA6IGV4cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Cit9CisKK3VpbnQzMl90IENvbmRpdGlv
bmFsTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgYm9vbCBi
ID0gbG9naWNhbC0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7CisgICAgS0pTX0NIRUNLRVhDRVBU
SU9OTlVNQkVSCisgICAgcmV0dXJuIGIgPyBleHByMS0+ZXZhbHVhdGVUb1VJbnQzMihleGVjKSA6
IGV4cHIyLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpOworfQorCiAvLyBFQ01BIDExLjEzCiAKIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1lbnQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBjdXJyZW50LCBFeHByZXNzaW9uTm9kZSogcmlnaHQs
IE9wZXJhdG9yIG9wZXIpIEtKU19GQVNUX0NBTEw7CkBAIC0yNTQwLDMyICszMTEwLDMyIEBAIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1lbnQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgYnJlYWs7CiAgIGNhc2UgT3BMU2hpZnQ6CiAgICAg
aTEgPSBjdXJyZW50LT50b0ludDMyKGV4ZWMpOwotICAgIGkyID0gcmlnaHQtPmV2YWx1YXRlKGV4
ZWMpLT50b0ludDMyKGV4ZWMpOworICAgIGkyID0gcmlnaHQtPmV2YWx1YXRlVG9JbnQzMihleGVj
KTsKICAgICB2ID0ganNOdW1iZXIoaTEgPDwgaTIpOwogICAgIGJyZWFrOwogICBjYXNlIE9wUlNo
aWZ0OgogICAgIGkxID0gY3VycmVudC0+dG9JbnQzMihleGVjKTsKLSAgICBpMiA9IHJpZ2h0LT5l
dmFsdWF0ZShleGVjKS0+dG9JbnQzMihleGVjKTsKKyAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRv
SW50MzIoZXhlYyk7CiAgICAgdiA9IGpzTnVtYmVyKGkxID4+IGkyKTsKICAgICBicmVhazsKICAg
Y2FzZSBPcFVSU2hpZnQ6CiAgICAgdWkgPSBjdXJyZW50LT50b1VJbnQzMihleGVjKTsKLSAgICBp
MiA9IHJpZ2h0LT5ldmFsdWF0ZShleGVjKS0+dG9JbnQzMihleGVjKTsKKyAgICBpMiA9IHJpZ2h0
LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiAgICAgdiA9IGpzTnVtYmVyKHVpID4+IGkyKTsKICAg
ICBicmVhazsKICAgY2FzZSBPcEFuZEVxOgogICAgIGkxID0gY3VycmVudC0+dG9JbnQzMihleGVj
KTsKLSAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZShleGVjKS0+dG9JbnQzMihleGVjKTsKKyAgICBp
MiA9IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiAgICAgdiA9IGpzTnVtYmVyKGkxICYg
aTIpOwogICAgIGJyZWFrOwogICBjYXNlIE9wWE9yRXE6CiAgICAgaTEgPSBjdXJyZW50LT50b0lu
dDMyKGV4ZWMpOwotICAgIGkyID0gcmlnaHQtPmV2YWx1YXRlKGV4ZWMpLT50b0ludDMyKGV4ZWMp
OworICAgIGkyID0gcmlnaHQtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKICAgICB2ID0ganNOdW1i
ZXIoaTEgXiBpMik7CiAgICAgYnJlYWs7CiAgIGNhc2UgT3BPckVxOgogICAgIGkxID0gY3VycmVu
dC0+dG9JbnQzMihleGVjKTsKLSAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZShleGVjKS0+dG9JbnQz
MihleGVjKTsKKyAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiAgICAgdiA9
IGpzTnVtYmVyKGkxIHwgaTIpOwogICAgIGJyZWFrOwogICBjYXNlIE9wTW9kRXE6IHsKQEAgLTI4
NTQsOSArMzQyNCwyOSBAQCB2b2lkIEFzc2lnbkV4cHJOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrcwogfQogCiAvLyBFQ01BIDEy
LjIKLUpTVmFsdWUgKkFzc2lnbkV4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitK
U1ZhbHVlKiBBc3NpZ25FeHByTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBleHByLT5ldmFsdWF0ZShleGVjKTsKK30KKworYm9vbCBBc3NpZ25FeHByTm9kZTo6
ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBleHByLT5l
dmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKK30KKworZG91YmxlIEFzc2lnbkV4cHJOb2RlOjpldmFs
dWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZXhwci0+ZXZhbHVh
dGVUb051bWJlcihleGVjKTsKK30KKworaW50MzJfdCBBc3NpZ25FeHByTm9kZTo6ZXZhbHVhdGVU
b0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZXhwci0+ZXZhbHVhdGVUb0lu
dDMyKGV4ZWMpOworfQorCit1aW50MzJfdCBBc3NpZ25FeHByTm9kZTo6ZXZhbHVhdGVUb1VJbnQz
MihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIHJldHVybiBleHByLT5ldmFsdWF0ZShleGVjKTsKKyAg
ICByZXR1cm4gZXhwci0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogfQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gVmFyRGVjbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpAQCAtMjg5Niw3ICszNDg2LDcgQEAgdm9pZCBWYXJEZWNsTm9kZTo6Z2V0RGVj
bGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJiBzdGFja3MpCiB2b2lkIFZhckRlY2xOb2RlOjpo
YW5kbGVTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluLCBK
U1ZhbHVlKiB2YWwpCiB7CiAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdp
bigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsgICAgICAgIAor
ICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKICAgICAKICAgICAvLyB3
ZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2NvcGUgY2hhaW4KICAgICBBU1NF
UlQoaXRlciAhPSBlbmQpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgg
Yi9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAppbmRleCBkNjBiNzMzLi40Y2IzOGVlIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9r
anMvbm9kZXMuaApAQCAtMTgwLDYgKzE4MCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAK
ICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMID0gMDsKICAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0lu
dDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICAgIHZpcnR1YWwgdWludDMyX3Qg
ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKIAog
ICAgICAgICAvLyBVc2VkIHRvIG9wdGltaXplIHRob3NlIG5vZGVzIHRoYXQgZG8gZXh0cmEgd29y
ayB3aGVuIHJldHVybmluZyBhIHJlc3VsdCwgZXZlbiBpZiB0aGUgcmVzdWx0IGhhcyBubyBzZW1h
bnRpYyByZWxldmFuY2UKQEAgLTIzNCw2ICsyMzYsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQcmltYXJ5OyB9CiAKQEAgLTI0OSw2ICsyNTMs
OCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgICAgSW1tZWRpYXRlTnVtYmVyTm9k
ZShKU1ZhbHVlKiB2LCBkb3VibGUgZCkgS0pTX0ZBU1RfQ0FMTCA6IE51bWJlck5vZGUoZCksIG1f
dmFsdWUodikgeyBBU1NFUlQodiA9PSBKU0ltbWVkaWF0ZTo6ZnJvbShkKSk7IH0KICAgICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAg
IHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgICAgCiAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoZG91Ymxl
IGQpIEtKU19GQVNUX0NBTEwgeyBtX2RvdWJsZSA9IGQ7IG1fdmFsdWUgPSBKU0ltbWVkaWF0ZTo6
ZnJvbShkKTsgQVNTRVJUKG1fdmFsdWUpOyB9CiAgIHByaXZhdGU6CkBAIC0zMDYsNiArMzEyLDEw
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKIAogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVy
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRl
VG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3Qg
ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7
IH0KIApAQCAtMzE0LDYgKzMyNCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGlkZW50OyB9
CiAKICAgcHJvdGVjdGVkOgorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVh
dGUoRXhlY1N0YXRlKik7CiAgICAgSWRlbnRpZmllciBpZGVudDsKICAgICBzaXplX3QgaW5kZXg7
IC8vIFVzZWQgYnkgTG9jYWxWYXJBY2Nlc3NOb2RlLgogICB9OwpAQCAtMzMwLDYgKzM0MSw4IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1
YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMy
X3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRl
OgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7
CiAgIH07CkBAIC00MjgsNiArNDQxLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
ZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
KyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2Uo
KSBjb25zdCB7IHJldHVybiBQcmVjTWVtYmVyOyB9CiAKQEAgLTQ0Nyw2ICs0NjIsMTAgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgRG90QWNjZXNzb3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBjb25z
dCBJZGVudGlmaWVyJiBzKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSwgaWRlbnQocykgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0
dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAg
ICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY01lbWJlcjsgfQogCkBAIC00NTYsNiArNDc1LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcigpIGNvbnN0
IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gaWRlbnQ7IH0KIAogICBwcml2YXRlOgorICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7CiAgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBleHByOwogICAgIElkZW50aWZpZXIgaWRlbnQ7CiAgIH07CkBAIC00
OTksOSArNTE5LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIE5ld0V4cHJOb2RlKEV4cHJlc3Np
b25Ob2RlKiBlLCBBcmd1bWVudHNOb2RlKiBhKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSwgYXJn
cyhhKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9u
Qm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CisgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xl
YW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNMZWZ0SGFuZFNpZGU7IH0KICAgcHJp
dmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGluZUV2YWx1YXRlKEV4ZWNTdGF0
ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKICAgICBSZWZQdHI8QXJndW1l
bnRzTm9kZT4gYXJnczsKICAgfTsKQEAgLTUzNSwxMCArNTYwLDE1IEBAIG5hbWVzcGFjZSBLSlMg
ewogCiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5
Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAg
ICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CisgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KIAogICBwcm90ZWN0ZWQ6Cisg
ICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShFeGVjU3RhdGUqKTsKICAg
ICBJZGVudGlmaWVyIGlkZW50OwogICAgIFJlZlB0cjxBcmd1bWVudHNOb2RlPiBhcmdzOwogICAg
IHNpemVfdCBpbmRleDsgLy8gVXNlZCBieSBMb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGUuCkBAIC01
NTQsNiArNTg0LDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIH0KIAogICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJv
b2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0
dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOworICBwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5s
aW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7CiAgIH07CiAKICAgY2xhc3MgRnVuY3Rpb25DYWxsQnJh
Y2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewpAQCAtNTc0LDkgKzYxMCwxNCBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICBGdW5jdGlvbkNhbGxEb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBi
LCBjb25zdCBJZGVudGlmaWVyJiBpLCBBcmd1bWVudHNOb2RlKiBhKSBLSlNfRkFTVF9DQUxMIDog
YmFzZShiKSwgaWRlbnQoaSksIGFyZ3MoYSkge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVh
bihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRl
VG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3Qg
ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1
aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
Q2FsbDsgfQotICBwcm90ZWN0ZWQ6CisgIHByaXZhdGU6CisgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlKiBpbmxpbmVFdmFsdWF0ZShFeGVjU3RhdGUqKTsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IGJhc2U7CiAgICAgSWRlbnRpZmllciBpZGVudDsKICAgICBSZWZQdHI8QXJndW1lbnRzTm9k
ZT4gYXJnczsKQEAgLTY1Myw3ICs2OTQsMTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgfQogCiAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwor
ICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMy
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplRm9y
VW5uZWNlc3NhcnlSZXN1bHQoKTsKKyAgcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIGRvdWJs
ZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopOwogICB9OwogCiAgIGNsYXNzIFBv
c3RmaXhCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBAIC05ODAsNiArMTAy
NywxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBVbmFyeVBsdXNOb2RlKEV4cHJlc3Npb25Ob2Rl
KiBlKSBLSlNfRkFTVF9DQUxMIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIG1fZXhwcihl
KSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9k
eU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CisgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOworICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogICBwcml2YXRlOgpAQCAt
MTAwMyw5ICsxMDU0LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEJpdHdpc2VOb3ROb2RlKEV4
cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlw
ZSksIGV4cHIoZSkge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMy
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0
ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KICAgcHJp
dmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4
ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKICAgfTsKIApAQCAt
MTAyNyw2ICsxMDgzLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1
YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFs
dWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIGJv
b2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIHZp
cnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
KyAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IHsgcmV0dXJuIFByZWNNdWx0aXBsaWNpdGF2ZTsgfQogICBwcml2YXRlOgpAQCAtMTA0
MSw2ICsxMTAwLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5v
ZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0
ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIGludDMy
X3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0
dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJl
dHVybiBQcmVjTXVsdGlwbGljaXRhdmU7IH0KICAgcHJpdmF0ZToKQEAgLTEwNTUsNiArMTExNiw5
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9C
b29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0dWFsIGludDMyX3Qg
ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0dWFs
IHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjTXVsdGlwbGljaXRhdmU7IH0KICAgcHJpdmF0ZToKQEAgLTEwNjksMTIgKzExMzMsMTYg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVU
b1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9CiAgIHBy
b3RlY3RlZDoKICAgICBBZGROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUq
IHQyLCBKU1R5cGUgZXhwZWN0ZWRSZXR1cm4pIEtKU19GQVNUX0NBTEwgOiBFeHByZXNzaW9uTm9k
ZShleHBlY3RlZFJldHVybiksIHRlcm0xKHQxKSwgdGVybTIodDIpIHt9CiAgICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiB0ZXJtMTsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0yOwor
ICBwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIGlubGluZUV2YWx1YXRlVG9OdW1i
ZXIoRXhlY1N0YXRlKik7CiAgIH07CiAKICAgICBjbGFzcyBBZGROdW1iZXJzTm9kZSA6IHB1Ymxp
YyBBZGROb2RlIHsKQEAgLTEwODIsNiArMTE1MCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICBBZGROdW1iZXJzTm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4cHJlc3Npb25Ob2RlKiB0Mikg
S0pTX0ZBU1RfQ0FMTCA6IEFkZE5vZGUodDEsIHQyLCBOdW1iZXJUeXBlKSB7fQogICAgICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKKyAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOworICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50
MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICBwcml2YXRlOgogICAgICAgICBBTFdB
WVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgfTsKQEAgLTExMTAsNiArMTE4MCw4IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9k
ZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
dmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAg
ICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOworICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOworICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9CiAgIHByaXZhdGU6
CkBAIC0xMTI0LDkgKzExOTYsMTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKE51bWJlclR5cGUpLCB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQogICAgIHZpcnR1YWwg
dm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUq
IGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBkb3VibGUg
ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwg
aW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2
aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0
dXJuIFByZWNTaGlmdDsgfQogICBwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBp
bmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKik7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiB0ZXJtMTsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0yOwogICB9OwpAQCAt
MTEzNyw5ICsxMjEzLDEzIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgOiBFeHByZXNzaW9uTm9k
ZShOdW1iZXJUeXBlKSwgdGVybTEodDEpLCB0ZXJtMih0Mikge30KICAgICB2aXJ0dWFsIHZvaWQg
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFj
a3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFs
dWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1
YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMy
X3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQ
cmVjU2hpZnQ7IH0KICAgcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5l
RXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
dGVybTE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMjsKICAgfTsKQEAgLTExNTAs
OSArMTIzMCwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVt
YmVyVHlwZSksIHRlcm0xKHQxKSwgdGVybTIodDIpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRv
TnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2
YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWlu
dDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1No
aWZ0OyB9CiAgIHByaXZhdGU6CisgICAgQUxXQVlTX0lOTElORSB1aW50MzJfdCBpbmxpbmVFdmFs
dWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVy
bTE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMjsKICAgfTsKQEAgLTExNjYsNiAr
MTI1MCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9v
bGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2Vk
ZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KKyAgcHJp
dmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhl
Y1N0YXRlKik7CiAgIHByb3RlY3RlZDoKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIx
OwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CkBAIC0xMTc0LDE1ICsxMjYwLDIx
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGNsYXNzIExlc3NOdW1iZXJzTm9kZSA6IHB1YmxpYyBM
ZXNzTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBMZXNzTnVtYmVyc05vZGUoRXhwcmVzc2lv
bk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgOiBM
ZXNzTm9kZShlMSwgZTIpIHt9CisgICAgICAgICAgICA6IExlc3NOb2RlKGUxLCBlMikge30KICAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OworICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKKyAgICBwcml2YXRlOgorICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5s
aW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKik7CiAgICAgfTsKIAogICAgIGNsYXNzIExl
c3NTdHJpbmdzTm9kZSA6IHB1YmxpYyBMZXNzTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBM
ZXNzU3RyaW5nc05vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtK
U19GQVNUX0NBTEwKLSAgICAgICAgOiBMZXNzTm9kZShlMSwgZTIpIHt9CisgICAgICAgICAgICA6
IExlc3NOb2RlKGUxLCBlMikge30KICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVU
b0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICBwcml2YXRlOgorICAgICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKik7
CiAgICAgfTsKIAogICBjbGFzcyBHcmVhdGVyTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7
CkBAIC0xMzE3LDkgKzE0MDksMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIDogRXhwcmVz
c2lvbk5vZGUoTnVtYmVyVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CiAgICAgdmlydHVh
bCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0
aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1
ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGRvdWJs
ZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAg
dmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY0JpdHdpc2VBbmQ7IH0KICAgcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5M
SU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHBy
MjsKICAgfTsKQEAgLTEzMzAsOSArMTQyNywxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
OiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgZXhwcjEoZTEpLCBleHByMihlMikge30KICAg
ICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwg
RGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1
YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjQml0d2lzZU9yOyB9CiAgIHByaXZhdGU6CisgICAgQUxX
QVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKTsKICAg
ICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gZXhwcjI7CiAgIH07CkBAIC0xMzQzLDkgKzE0NDUsMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIp
IHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5
Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAg
ICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CisgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CisgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0JpdHdpc2VYb3I7IH0KICAgcHJpdmF0ZToK
KyAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0
ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CiAgICAgUmVmUHRyPEV4cHJl
c3Npb25Ob2RlPiBleHByMjsKICAgfTsKQEAgLTEzNjMsNiArMTQ3MCw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY0xvZ2ljYWxBbmQ7IH0KICAgcHJpdmF0ZToKKyAgICAgICAgQUxXQVlTX0lOTElO
RSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKTsKICAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7
CiAgIH07CkBAIC0xMzc3LDYgKzE0ODUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNMb2dpY2Fs
T3I7IH0KICAgcHJpdmF0ZToKKyAgICAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2
YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKTsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4
cHIxOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CkBAIC0xMzkxLDYg
KzE1MDAsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9O
dW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZh
bHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50
MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ29u
ZGl0aW9uYWw7IH0KICAgcHJpdmF0ZToKQEAgLTE1NjYsNiArMTY3OCwxMCBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBBc3NpZ25FeHByTm9kZShFeHByZXNzaW9uTm9kZSogZSkgS0pTX0ZBU1RfQ0FM
TCA6IGV4cHIoZSkge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMy
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0
ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1
cm4gUHJlY0V4cHJlc3Npb247IH0KICAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL2tqcy92YWx1ZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuY3BwCmluZGV4IGMw
ZDA4MzAuLmI4NTRhMjggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAK
KysrIGIvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmNwcApAQCAtNzIsMTEgKzcyLDEwIEBAIGRv
dWJsZSBKU1ZhbHVlOjp0b0ludGVnZXJQcmVzZXJ2ZU5hTihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
CiAgICAgcmV0dXJuIHRydW5jKHRvTnVtYmVyKGV4ZWMpKTsKIH0KIAotaW50MzJfdCBKU1ZhbHVl
Ojp0b0ludDMyU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykgY29uc3QKK2ludDMy
X3QgSlNWYWx1ZTo6dG9JbnQzMlNsb3dDYXNlKGRvdWJsZSBkLCBib29sJiBvaykKIHsKICAgICBv
ayA9IHRydWU7CiAKLSAgICBkb3VibGUgZCA9IHRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChkID49
IC1EMzIgLyAyICYmIGQgPCBEMzIgLyAyKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
MzJfdD4oZCk7CiAKQEAgLTkzLDExICs5MiwxNSBAQCBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzJT
bG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rKSBjb25zdAogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQzMl90PihkMzIpOwogfQogCi11aW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQzMlNs
b3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2spIGNvbnN0CitpbnQzMl90IEpTVmFsdWU6
OnRvSW50MzJTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rKSBjb25zdAoreworICAg
IHJldHVybiBKU1ZhbHVlOjp0b0ludDMyU2xvd0Nhc2UodG9OdW1iZXIoZXhlYyksIG9rKTsKK30K
KwordWludDMyX3QgSlNWYWx1ZTo6dG9VSW50MzJTbG93Q2FzZShkb3VibGUgZCwgYm9vbCYgb2sp
CiB7CiAgICAgb2sgPSB0cnVlOwogCi0gICAgZG91YmxlIGQgPSB0b051bWJlcihleGVjKTsKICAg
ICBpZiAoZCA+PSAwLjAgJiYgZCA8IEQzMikKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVp
bnQzMl90PihkKTsKIApAQCAtMTEyLDYgKzExNSwxMSBAQCB1aW50MzJfdCBKU1ZhbHVlOjp0b1VJ
bnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2spIGNvbnN0CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVpbnQzMl90PihkMzIpOwogfQogCit1aW50MzJfdCBKU1ZhbHVlOjp0b1VJ
bnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2spIGNvbnN0Cit7CisgICAgcmV0
dXJuIEpTVmFsdWU6OnRvVUludDMyU2xvd0Nhc2UodG9OdW1iZXIoZXhlYyksIG9rKTsKK30KKwog
ZmxvYXQgSlNWYWx1ZTo6dG9GbG9hdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih0b051bWJlcihleGVjKSk7CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ranMvdmFsdWUuaCBiL0phdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCmluZGV4
IGM0YzNhYWUuLjVlYmI1NzUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5o
CisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCkBAIC05Nyw2ICs5NywxMCBAQCBwdWJs
aWM6CiAgICAgdWludDMyX3QgdG9VSW50MzIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdWludDMy
X3QgdG9VSW50MzIoRXhlY1N0YXRlKiwgYm9vbCYgb2spIGNvbnN0OwogCisgICAgLy8gVGhlc2Ug
YXJlIGlkZW50aWNhbCBsb2dpYyB0byBhYm92ZSwgYW5kIGZhc3RlciB0aGFuIGpzTnVtYmVyKG51
bWJlciktPnRvSW50MzIoZXhlYykKKyAgICBzdGF0aWMgaW50MzJfdCB0b0ludDMyKGRvdWJsZSk7
CisgICAgc3RhdGljIGludDMyX3QgdG9VSW50MzIoZG91YmxlKTsKKwogICAgIC8vIEZsb2F0aW5n
IHBvaW50IGNvbnZlcnNpb25zLgogICAgIGZsb2F0IHRvRmxvYXQoRXhlY1N0YXRlKikgY29uc3Q7
CiAKQEAgLTEwNCw2ICsxMDgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrKCk7CiAgICAgYm9v
bCBtYXJrZWQoKSBjb25zdDsKIAorICAgIHN0YXRpYyBpbnQzMl90IHRvSW50MzJTbG93Q2FzZShk
b3VibGUsIGJvb2wmIG9rKTsKKyAgICBzdGF0aWMgdWludDMyX3QgdG9VSW50MzJTbG93Q2FzZShk
b3VibGUsIGJvb2wmIG9rKTsKKwogcHJpdmF0ZToKICAgICBpbnQzMl90IHRvSW50MzJTbG93Q2Fz
ZShFeGVjU3RhdGUqLCBib29sJiBvaykgY29uc3Q7CiAgICAgdWludDMyX3QgdG9VSW50MzJTbG93
Q2FzZShFeGVjU3RhdGUqLCBib29sJiBvaykgY29uc3Q7CkBAIC0yODgsMTYgKzI5NSwxNiBAQCBp
bmxpbmUgdm9pZCBKU0NlbGw6Om1hcmsoKQogICAgIHJldHVybiBDb2xsZWN0b3I6Om1hcmtDZWxs
KHRoaXMpOwogfQogCi1pbmxpbmUgSlNDZWxsICpKU1ZhbHVlOjphc0NlbGwoKQorQUxXQVlTX0lO
TElORSBKU0NlbGwqIEpTVmFsdWU6OmFzQ2VsbCgpCiB7CiAgICAgQVNTRVJUKCFKU0ltbWVkaWF0
ZTo6aXNJbW1lZGlhdGUodGhpcykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NlbGwgKj4o
dGhpcyk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTQ2VsbCo+KHRoaXMpOwogfQogCi1pbmxp
bmUgY29uc3QgSlNDZWxsICpKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAorQUxXQVlTX0lOTElORSBj
b25zdCBKU0NlbGwqIEpTVmFsdWU6OmFzQ2VsbCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFKU0lt
bWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBKU0NlbGwgKj4odGhpcyk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTQ2VsbCo+
KHRoaXMpOwogfQogCiBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VuZGVmaW5lZCgpIGNvbnN0CkBA
IC00NzMsNiArNDgwLDI0IEBAIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQzMihFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgcmV0dXJuIHRvVUludDMyU2xvd0Nhc2UoZXhlYywgb2sp
OwogfQogCitpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjp0b0ludDMyKGRvdWJsZSB2YWwpCit7Cisg
ICAgaWYgKCEodmFsID49IC0yMTQ3NDgzNjQ4LjAgJiYgdmFsIDwgMjE0NzQ4MzY0OC4wKSkgewor
ICAgICAgICBib29sIGlnbm9yZWQ7CisgICAgICAgIHJldHVybiB0b0ludDMyU2xvd0Nhc2UodmFs
LCBpZ25vcmVkKTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbCk7
Cit9CisKK2lubGluZSBpbnQzMl90IEpTVmFsdWU6OnRvVUludDMyKGRvdWJsZSB2YWwpCit7Cisg
ICAgaWYgKCEodmFsID49IDAuMCAmJiB2YWwgPCA0Mjk0OTY3Mjk2LjApKSB7CisgICAgICAgIGJv
b2wgaWdub3JlZDsKKyAgICAgICAgcmV0dXJuIHRvVUludDMyU2xvd0Nhc2UodmFsLCBpZ25vcmVk
KTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWwpOworfQorCiBp
bmxpbmUgaW50MzJfdCBKU1ZhbHVlOjp0b0ludDMyKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2sp
IGNvbnN0CiB7CiAgICAgaW50MzJfdCBpOwo=
</data>
<flag name="review"
          id="7344"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>