<?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>174818</bug_id>
          
          <creation_ts>2017-07-25 09:26:36 -0700</creation_ts>
          <short_desc>WebAssembly: generate smaller binaries</short_desc>
          <delta_ts>2017-07-25 19:23:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174819</blocked>
    
    <blocked>174848</blocked>
    
    <blocked>174821</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1331945</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-07-25 09:26:36 -0700</bug_when>
    <thetext>Some of the codegen is quite wordy. Make it less so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331977</commentid>
    <comment_count>1</comment_count>
      <attachid>316373</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-07-25 10:04:48 -0700</bug_when>
    <thetext>Created attachment 316373
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331979</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-25 10:06:51 -0700</bug_when>
    <thetext>Attachment 316373 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3LowerToAir.cpp:1022:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:278:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331989</commentid>
    <comment_count>3</comment_count>
      <attachid>316373</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-25 10:26:53 -0700</bug_when>
    <thetext>Comment on attachment 316373
patch

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

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        1. Don&apos;t tier up small functions without loops.

We shouldn&apos;t do these kinds of heuristics.  BBQ is not meant to generate good code even for small functions.  This could be leaving too much money on the table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331994</commentid>
    <comment_count>4</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-07-25 10:40:21 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #3)
&gt; Comment on attachment 316373 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=316373&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:10
&gt; &gt; +        1. Don&apos;t tier up small functions without loops.
&gt; 
&gt; We shouldn&apos;t do these kinds of heuristics.  BBQ is not meant to generate
&gt; good code even for small functions.  This could be leaving too much money on
&gt; the table.

I initially decided to auto-OMG instead of never tiering, and that provided little size savings while costing in compile time (I expected a bump, but it was quite large). The no-tier approach has similar size savings, and WasmBench+TitzerBench are neutral / slightly better.

So I agree that BBQ isn&apos;t trying to be good, but from the code we&apos;re currently seeing it seems like we just have a bunch of small functions which almost never execute, and which definitely aren&apos;t hot. I think the i-cache cost alone when we do execute them costs more than whatever non-loop optimization we&apos;re giving up (the code size goes down, and from inspection we&apos;re not losing much compared to OMG).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332011</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-25 11:14:14 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #4)
&gt; (In reply to Filip Pizlo from comment #3)
&gt; &gt; Comment on attachment 316373 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=316373&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:10
&gt; &gt; &gt; +        1. Don&apos;t tier up small functions without loops.
&gt; &gt; 
&gt; &gt; We shouldn&apos;t do these kinds of heuristics.  BBQ is not meant to generate
&gt; &gt; good code even for small functions.  This could be leaving too much money on
&gt; &gt; the table.
&gt; 
&gt; I initially decided to auto-OMG instead of never tiering, and that provided
&gt; little size savings while costing in compile time (I expected a bump, but it
&gt; was quite large). The no-tier approach has similar size savings, and
&gt; WasmBench+TitzerBench are neutral / slightly better.
&gt; 
&gt; So I agree that BBQ isn&apos;t trying to be good, but from the code we&apos;re
&gt; currently seeing it seems like we just have a bunch of small functions which
&gt; almost never execute, and which definitely aren&apos;t hot. I think the i-cache
&gt; cost alone when we do execute them costs more than whatever non-loop
&gt; optimization we&apos;re giving up (the code size goes down, and from inspection
&gt; we&apos;re not losing much compared to OMG).

The cost of your heuristic is that small functions that do rely on optimization could fall off of a cliff, and your heuristic has no way of detecting when this could happen.

I think you should remove this heuristic from your patch, even if this brings back some bloat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332027</commentid>
    <comment_count>6</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-07-25 11:37:42 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #5)
&gt; (In reply to JF Bastien from comment #4)
&gt; &gt; (In reply to Filip Pizlo from comment #3)
&gt; &gt; &gt; Comment on attachment 316373 [details]
&gt; &gt; &gt; patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=316373&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:10
&gt; &gt; &gt; &gt; +        1. Don&apos;t tier up small functions without loops.
&gt; &gt; &gt; 
&gt; &gt; &gt; We shouldn&apos;t do these kinds of heuristics.  BBQ is not meant to generate
&gt; &gt; &gt; good code even for small functions.  This could be leaving too much money on
&gt; &gt; &gt; the table.
&gt; &gt; 
&gt; &gt; I initially decided to auto-OMG instead of never tiering, and that provided
&gt; &gt; little size savings while costing in compile time (I expected a bump, but it
&gt; &gt; was quite large). The no-tier approach has similar size savings, and
&gt; &gt; WasmBench+TitzerBench are neutral / slightly better.
&gt; &gt; 
&gt; &gt; So I agree that BBQ isn&apos;t trying to be good, but from the code we&apos;re
&gt; &gt; currently seeing it seems like we just have a bunch of small functions which
&gt; &gt; almost never execute, and which definitely aren&apos;t hot. I think the i-cache
&gt; &gt; cost alone when we do execute them costs more than whatever non-loop
&gt; &gt; optimization we&apos;re giving up (the code size goes down, and from inspection
&gt; &gt; we&apos;re not losing much compared to OMG).
&gt; 
&gt; The cost of your heuristic is that small functions that do rely on
&gt; optimization could fall off of a cliff, and your heuristic has no way of
&gt; detecting when this could happen.
&gt; 
&gt; I think you should remove this heuristic from your patch, even if this
&gt; brings back some bloat.

Tiering is the biggest contributor to bloat on small functions: it represents over half of a small function&apos;s size. The other things help push some functions a JIT granule lower (at this point shaving two more instructions would get many of them them one more granule lower, hence #174819).

Do you think the patch is worth it without this tiering heuristic? On small functions without loops I have a hard time believing that BBQ can generate egregiously bad code: the CPU can eat up a bunch of straight-line ILP even if slightly sillier. My measurements show that at least for our benchmarks it doesn&apos;t matter (I ran them overnight on x86-64 and ARM64), and for these small straight-line code functions it is a code reduction, removing code that was on the critical path.

So I can remove 1., but really that&apos;s the meat of the change. Reconsider?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332029</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-25 11:48:20 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #6)
&gt; (In reply to Filip Pizlo from comment #5)
&gt; &gt; (In reply to JF Bastien from comment #4)
&gt; &gt; &gt; (In reply to Filip Pizlo from comment #3)
&gt; &gt; &gt; &gt; Comment on attachment 316373 [details]
&gt; &gt; &gt; &gt; patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=316373&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:10
&gt; &gt; &gt; &gt; &gt; +        1. Don&apos;t tier up small functions without loops.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; We shouldn&apos;t do these kinds of heuristics.  BBQ is not meant to generate
&gt; &gt; &gt; &gt; good code even for small functions.  This could be leaving too much money on
&gt; &gt; &gt; &gt; the table.
&gt; &gt; &gt; 
&gt; &gt; &gt; I initially decided to auto-OMG instead of never tiering, and that provided
&gt; &gt; &gt; little size savings while costing in compile time (I expected a bump, but it
&gt; &gt; &gt; was quite large). The no-tier approach has similar size savings, and
&gt; &gt; &gt; WasmBench+TitzerBench are neutral / slightly better.
&gt; &gt; &gt; 
&gt; &gt; &gt; So I agree that BBQ isn&apos;t trying to be good, but from the code we&apos;re
&gt; &gt; &gt; currently seeing it seems like we just have a bunch of small functions which
&gt; &gt; &gt; almost never execute, and which definitely aren&apos;t hot. I think the i-cache
&gt; &gt; &gt; cost alone when we do execute them costs more than whatever non-loop
&gt; &gt; &gt; optimization we&apos;re giving up (the code size goes down, and from inspection
&gt; &gt; &gt; we&apos;re not losing much compared to OMG).
&gt; &gt; 
&gt; &gt; The cost of your heuristic is that small functions that do rely on
&gt; &gt; optimization could fall off of a cliff, and your heuristic has no way of
&gt; &gt; detecting when this could happen.
&gt; &gt; 
&gt; &gt; I think you should remove this heuristic from your patch, even if this
&gt; &gt; brings back some bloat.
&gt; 
&gt; Tiering is the biggest contributor to bloat on small functions: it
&gt; represents over half of a small function&apos;s size. The other things help push
&gt; some functions a JIT granule lower (at this point shaving two more
&gt; instructions would get many of them them one more granule lower, hence
&gt; #174819).
&gt; 
&gt; Do you think the patch is worth it without this tiering heuristic? On small
&gt; functions without loops I have a hard time believing that BBQ can generate
&gt; egregiously bad code: the CPU can eat up a bunch of straight-line ILP even
&gt; if slightly sillier. My measurements show that at least for our benchmarks
&gt; it doesn&apos;t matter (I ran them overnight on x86-64 and ARM64), and for these
&gt; small straight-line code functions it is a code reduction, removing code
&gt; that was on the critical path.
&gt; 
&gt; So I can remove 1., but really that&apos;s the meat of the change. Reconsider?

I think it&apos;s still worth landing the change even without 1.  I think we should figure out how to make the tiering checks less expensive somehow.

I don&apos;t think it&apos;s OK to say that some functions never tier.  That&apos;s just too dangerous and breaks too many of our assumptions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332054</commentid>
    <comment_count>8</comment_count>
      <attachid>316386</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-07-25 13:15:14 -0700</bug_when>
    <thetext>Created attachment 316386
patch

&gt; I think it&apos;s still worth landing the change even without 1.  I think we
&gt; should figure out how to make the tiering checks less expensive somehow.

Sure, here&apos;s an updated patch. I agree we want to make it cheaper. An interpreter would be a good fix, or an intermediate helper on all non-tiered function entry for tier-up check (which would handle non-loop recording and tier-up). I agree with either of these the no-tierup approach isn&apos;t as useful.

&gt; I don&apos;t think it&apos;s OK to say that some functions never tier.  That&apos;s just
&gt; too dangerous and breaks too many of our assumptions.

Eh, I disagree but it&apos;s not worth arguing. So much of the code is small and trivial, straight-line. If BBQ messes it up worst than a few extra registers and spills then we should fix that bug. I&apos;d have liked to have a small gain, but we can get back to it in a few months.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332055</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-25 13:19:23 -0700</bug_when>
    <thetext>Attachment 316386 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3LowerToAir.cpp:1022:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332077</commentid>
    <comment_count>10</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-07-25 13:55:18 -0700</bug_when>
    <thetext>*** Bug 169792 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332227</commentid>
    <comment_count>11</comment_count>
      <attachid>316386</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-25 19:23:05 -0700</bug_when>
    <thetext>Comment on attachment 316386
patch

Clearing flags on attachment: 316386

Committed r219899: &lt;http://trac.webkit.org/changeset/219899&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332228</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-25 19:23:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316373</attachid>
            <date>2017-07-25 10:04:48 -0700</date>
            <delta_ts>2017-07-25 13:15:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Smaller-codegen.patch</filename>
            <type>text/plain</type>
            <size>31250</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA4MzczMGYwM2JlNjMwOWJjMDdhY2Y5NTExYTAyZGZkNzQ3YTA4YTE2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDI1IEp1bCAyMDE3IDEwOjA0OjAyIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gU21hbGxl
ciBjb2RlZ2VuCgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgIHwgIDU0ICsrKysrKysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NC5oIHwgIDEwICsrCiAuLi4vYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2XzY0LmggICAgICAgICAgICAgICB8ICAxMCArKwogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5jcHAgICAgICAgICAgfCAgMjAgKysrLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyAgICAgfCAgIDUgKwogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDIgKwogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAxMTYgKysrKysrKysr
Ky0tLS0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAg
ICAgICAgICB8ICAxNCArKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
blBhcnNlci5oICAgIHwgICAzICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVJbmZvcm1hdGlvbi5oIHwgICAyICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21W
YWxpZGF0ZS5jcHAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVmFsaWRhdGUuaCAgICAgICAgICB8ICAgNiArLQogMTIgZmlsZXMgY2hhbmdlZCwgMTgyIGlu
c2VydGlvbnMoKyksIDY0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4
IDk4ODM0MjcuLmJkYTE0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3
IEBACisyMDE3LTA3LTI1ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAg
ICAgICBXZWJBc3NlbWJseTogZ2VuZXJhdGUgc21hbGxlciBiaW5hcmllcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0ODE4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWR1Y2VzIGdl
bmVyYXRlZCBjb2RlIHNpemUgZm9yIFdlYkFzc2VtYmx5IGluIDMgd2F5czoKKworICAgICAgICAx
LiBEb24ndCB0aWVyIHVwIHNtYWxsIGZ1bmN0aW9ucyB3aXRob3V0IGxvb3BzLgorICAgICAgICAy
LiBVc2UgdGhlIFpSIHJlZ2lzdGVyIHdoZW4gc3RvcmluZyB6ZXJvIG9uIEFSTTY0LgorICAgICAg
ICAzLiBTeW50aGVzaXplIHdhc20gY29udGV4dCBsYXppbHkuCisKKyAgICAgICAgVGhpcyBsZWFk
cyB0byBhIG5lYXIgMTAlIHNpemUgcmVkdWN0aW9uIG9uIGJvdGggeDg2LTY0IGFuZCBBUk02NAor
ICAgICAgICBmb3IgbGFyZ2UgV2ViQXNzZW1ibHkgZ2FtZXMsIHdpdGhvdXQgYW55IHBlcmZvcm1h
bmNlIGxvc3Mgb24KKyAgICAgICAgV2FzbUJlbmNoIGFuZCBUaXR6ZXJCZW5jaC4KKworICAgICAg
ICBUaGUgcmVhc29uIHRoaXMgd29ya3MgaXMgdGhhdCB0aGVzZSBnYW1lcywgdXNpbmcgRW1zY3Jp
cHRlbiwKKyAgICAgICAgZ2VuZXJhdGUgMTAwaysgdGlueSBmdW5jdGlvbnMsIGFuZCBvdXIgSklU
IGFsbG9jYXRpb24gZ3JhbnVsZQorICAgICAgICByb3VuZHMgYWxsIGFsbG9jYXRpb25zIHVwIHRv
IDMyIGJ5dGVzLiBUaGVyZSBhcmUgcGxlbnR5IG9mIG90aGVyCisgICAgICAgIHNpbXBsZSBnYWlu
cyB0byBiZSBoYWQsIEkndmUgZmlsZWQgYSBmb2xsb3ctdXAgYnVnIGF0CisgICAgICAgIHdlYmtp
dC5vcmcvYi8xNzQ4MTkKKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0
Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN0b3JlWmVybzY0KToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnN0b3JlWmVybzY0KToKKyAgICAgICAgKiBiMy9CM0xvd2Vy
VG9BaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpjcmVhdGVTdG9y
ZSk6IHRoaXMgZG9lc24ndCBtYWtlIHNlbnNlCisgICAgICAgIGZvciB4ODYgYmVjYXVzZSBpdCBj
b25zdHJhaW5zIHJlZ2lzdGVyIHJldXNlIGFuZCBjb2RlZ2VuIGluIGEgd2F5CisgICAgICAgIHRo
YXQgZG9lc24ndCBhZmZlY3QgQVJNNjQgYmVjYXVzZSBpdCBoYXMgYSBkZWRpY2F0ZWQgemVybwor
ICAgICAgICByZWdpc3Rlci4KKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6IGFk
ZCB0aGUgc3RvcmVaZXJvNjQgb3Bjb2RlLgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOiBJ
IG9idGFpbmVkIHRoZSB0d28gbmV3IG9wdGlvbnMgYnkgbWVhc3VyaW5nCisgICAgICAgIG11bHRp
cGxlIGNvbWJpbmF0aW9ucyBvZiBsb29wIGNvdW50IGFuZCBmdW5jdGlvbiBzaXplIG9uIGdhbWVz
IGFuZAorICAgICAgICBiZW5jaG1hcmtzLiBNb3N0IHdlcmUgcGVyZi1uZXV0cmFsIG9yIHNsaWdo
dCBnYWlucywgYWxsIHdpdGggc2l6ZQorICAgICAgICByZWR1Y3Rpb25zLiBJIGNob3NlIG5vIGxv
b3BzIGFuZCAyMDQ4IGJlY2F1c2UgdGhleSBnYXZlIHVzIG1vc3Qgb2YKKyAgICAgICAgdGhlIGdh
aW5zIGFuZCBhcmUgdW5saWtlbHkgdG8gY2F1c2UgcGVyZiBpc3N1ZXMgaWYgYSBzbWFsbAorICAg
ICAgICBmdW5jdGlvbiBpcyBhY3R1YWxseSBob3QgYW5kIHdvdWxkIGJlbmVmaXQgZnJvbSB0aWVy
IHVwLgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjppbnN0YW5jZVZhbHVlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6Om1hdGVyaWFsaXplV2FzbUNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAq
IHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpwYXJz
ZUFuZFZhbGlkYXRlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGls
ZUZ1bmN0aW9ucyk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6Omxvb3BDb3VudCk6CisgICAgICAgICogd2Fz
bS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaDoKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5j
cHA6CisgICAgICAgIChKU0M6Oldhc206OnZhbGlkYXRlRnVuY3Rpb24pOgorICAgICAgICAqIHdh
c20vV2FzbVZhbGlkYXRlLmg6CisKIDIwMTctMDctMjQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIEdhcmRlbmluZzogZml4ZWQgQyBMb29wIGJ1aWxkIGFmdGVyIHIy
MTk3OTAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk02NC5oCmluZGV4IDg1MTFlNjIuLjEwZjJiZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0x
MzQzLDYgKzEzNDMsMTYgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNy
YywgZGVzdCwgc2ltbSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc3RvcmVaZXJvNjQoSW1wbGlj
aXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzdG9yZTY0KEFSTTY0UmVnaXN0ZXJz
Ojp6ciwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVaZXJvNjQoQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBzdG9yZTY0KEFSTTY0UmVnaXN0ZXJzOjp6ciwg
YWRkcmVzcyk7CisgICAgfQorICAgIAogICAgIERhdGFMYWJlbDMyIHN0b3JlNjRXaXRoQWRkcmVz
c09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAg
ICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAppbmRleCAxZDc2MGQ4Li5h
NzE1YzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCkBAIC04OTQsNiArODk0LDE2IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9hc3NlbWJsZXIubW92cV9ybShzY3JhdGNoUmVnaXN0ZXIoKSwgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogICAg
IAorICAgIHZvaWQgc3RvcmVaZXJvNjQoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW0zMigwKSwgYWRkcmVzcyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3RvcmVaZXJvNjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBz
dG9yZTY0KFRydXN0ZWRJbW0zMigwKSwgYWRkcmVzcyk7CisgICAgfQorICAgIAogICAgIERhdGFM
YWJlbDMyIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCAyOTA5Nzc1Li42NDEwNTM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtMTAxOCw4ICsx
MDE4LDI0IEBAIHByaXZhdGU6CiAKICAgICBJbnN0IGNyZWF0ZVN0b3JlKEFpcjo6S2luZCBtb3Zl
LCBWYWx1ZSogdmFsdWUsIGNvbnN0IEFyZyYgZGVzdCkKICAgICB7Ci0gICAgICAgIGlmIChpbW0o
dmFsdWUpICYmIGlzVmFsaWRGb3JtKG1vdmUub3Bjb2RlLCBBcmc6OkltbSwgZGVzdC5raW5kKCkp
KQotICAgICAgICAgICAgcmV0dXJuIEluc3QobW92ZSwgbV92YWx1ZSwgaW1tKHZhbHVlKSwgZGVz
dCk7CisgICAgICAgIGlmIChhdXRvIGltbV92YWx1ZSA9IGltbSh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIGlmIChpc0FSTTY0KCkgJiYgaW1tX3ZhbHVlLnZhbHVlKCkgPT0gMCkgeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAobW92ZS5vcGNvZGUpIHsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFpcjo6TW92
ZTMyOgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oU3RvcmVaZXJvMzIsIGRl
c3Qua2luZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdpZHRoMzIpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEluc3QoU3RvcmVaZXJvMzIsIG1fdmFsdWUsIGRlc3QpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFpcjo6TW92ZToKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlWmVybzY0LCBkZXN0LmtpbmQo
KSkgJiYgZGVzdC5pc1ZhbGlkRm9ybShXaWR0aDY0KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBJbnN0KFN0b3JlWmVybzY0LCBtX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGlzVmFsaWRGb3JtKG1vdmUub3Bjb2RlLCBBcmc6OkltbSwgZGVzdC5raW5kKCkpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KG1vdmUsIG1fdmFsdWUsIGltbV92YWx1ZSwgZGVz
dCk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gSW5zdChtb3ZlLCBtX3ZhbHVlLCB0bXAo
dmFsdWUpLCBkZXN0KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlcwppbmRleCA5NjFiNDJjLi44NzNhZjY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTY0OSwxMCArNjQ5LDE1
IEBAIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIsIFM6Rzoz
MgogICAgIEFkZHIsIEFkZHIsIFRtcAogCisjIEZJWE1FOiBTdG9yZVplcm8zMiBhbmQgU3RvcmVa
ZXJvNjQgYXJlIGhhY2tzIG9uIEFSTTY0LCB3ZSBjYW4gZG8gYmV0dGVyOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0ODIxCiBTdG9yZVplcm8zMiBEOkc6MzIKICAg
ICBBZGRyCiAgICAgSW5kZXgKIAorNjQ6IFN0b3JlWmVybzY0IEQ6Rzo2NAorICAgIEFkZHIKKyAg
ICBJbmRleAorCiBTaWduRXh0ZW5kMzJUb1B0ciBVOkc6MzIsIEQ6RzpQdHIKICAgICBUbXAsIFRt
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggNjczN2Y3NS4u
N2ViM2IzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDU0
LDYgKzQ1NCw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5z
aWduZWQsIHdlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCksIE5vcm1hbCwgIkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgT01HIFdlYiBB
c3NlbWJseSBtb2R1bGUgY29tcGlsYXRpb25zLiIpIFwKICAgICBcCiAgICAgdihib29sLCB1c2VC
QlFUaWVyVXBDaGVja3MsIHRydWUsIE5vcm1hbCwgIkVuYWJsZXMgdGllciB1cCBjaGVja3MgZm9y
IG91ciBCQlEgY29kZS4iKSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlOb1RpZXJVcFNt
YWxsTG9vcENvdW50LCAxLCBOb3JtYWwsICJGdW5jdGlvbnMgd2l0aCBmZXdlciB0aGFuIHRoaXMg
bWFueSBsb29wcyB3aWxsIG5vdCB0aWVyIHVwIGFuZCB3aWxsIHJlbWFpbiBhdCBCQlEsIGlmIHRo
ZXkgYWxzbyBtZWV0IHRoZSBzbWFsbCBmdW5jdGlvbiBzaXplIHJlc3RyaWN0aW9uLiIpIFwKKyAg
ICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseU5vVGllclVwU21hbGxGdW5jdGlvbiwgMjA0OCwgTm9y
bWFsLCAiRnVuY3Rpb25zIHdpdGggZmV3ZXIgdGhhbiB0aGlzIHNpemUgaW4gYnl0ZXMgd2lsbCBu
b3QgdGllciB1cCBhbmQgd2lsbCByZW1haW4gYXQgQkJRLCBpZiB0aGV5IGFsc28gbWVldCB0aGUg
bG9vcCBjb3VudCByZXN0cmljdGlvbi4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlP
TUdUaWVyVXBDb3VudCwgNTAwMCwgTm9ybWFsLCAiVGhlIGNvdW50ZG93biBiZWZvcmUgd2UgdGll
ciB1cCBhIGZ1bmN0aW9uIHRvIE9NRy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlM
b29wRGVjcmVtZW50LCAxNSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRv
d24gaXMgZGVjcmVtZW50ZWQgb24gZWFjaCBsb29wIGJhY2tlZGdlLiIpIFwKICAgICB2KHVuc2ln
bmVkLCB3ZWJBc3NlbWJseUZ1bmN0aW9uRW50cnlEZWNyZW1lbnQsIDEsIE5vcm1hbCwgIlRoZSBh
bW91bnQgdGhlIHRpZXIgdXAgY291bnRkb3duIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggZnVuY3Rp
b24gZW50cnkuIikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCmluZGV4IDc2ZGM0YTQuLjM0ODI2YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTI0NSwzMCArMjQ1LDM3
IEBAIHByaXZhdGU6CiAKICAgICBpbnQzMl90IFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50
ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QpOwogCi0gICAgVmFsdWUqIG1h
dGVyaWFsaXplV2FzbUNvbnRleHQoQmFzaWNCbG9jayopOwogICAgIHZvaWQgcmVzdG9yZVdhc21D
b250ZXh0KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVzdG9y
ZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSog
aW5zdGFuY2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKIAogICAgIE9yaWdpbiBvcmlnaW4o
KTsKIAotICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+KiBtX3BhcnNlcjsKKyAgICBG
dW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07CiAgICAg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKLSAgICBjb25zdCBNZW1vcnlNb2RlIG1f
bW9kZTsKLSAgICBjb25zdCBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGU7Ci0gICAg
Y29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4OwotICAgIGNvbnN0IFRpZXJVcENvdW50KiBt
X3RpZXJVcDsKKyAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5k
c0NoZWNraW5nIH07CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2Rl
IHsgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5j
dGlvbkluZGV4IHsgVUlOVF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAg
eyBudWxscHRyIH07CiAKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKLSAgICBCYXNpY0Jsb2NrKiBt
X2N1cnJlbnRCbG9jazsKKyAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIg
fTsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKICAgICBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBj
YWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBi
ZSBwYXRjaGVkIHdpdGguCiAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiBtX2NvbnN0YW50
UG9vbDsKICAgICBJbnNlcnRpb25TZXQgbV9jb25zdGFudEluc2VydGlvblZhbHVlczsKLSAgICBH
UFJSZWcgbV9tZW1vcnlCYXNlR1BSOworICAgIEdQUlJlZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZh
bGlkR1BSUmVnIH07CiAgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcg
fTsKLSAgICBHUFJSZWcgbV93YXNtQ29udGV4dEdQUjsKLSAgICBWYWx1ZSogbV9pbnN0YW5jZVZh
bHVlOyAvLyBGSVhNRTogbWFrZSB0aGlzIGxhenkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2OTc5MgorICAgIEdQUlJlZyBtX3dhc21Db250ZXh0R1BSIHsgSW52YWxp
ZEdQUlJlZyB9OwogICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsgZmFsc2UgfTsKKworICAgIFZhbHVl
KiBtX2luc3RhbmNlVmFsdWUgeyBudWxscHRyIH07IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29y
IGJlbG93IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4g
dXNlZC4KKyAgICBib29sIG1fdXNlc0luc3RhbmNlVmFsdWUgeyBmYWxzZSB9OworICAgIFZhbHVl
KiBpbnN0YW5jZVZhbHVlKCkKKyAgICB7CisgICAgICAgIG1fdXNlc0luc3RhbmNlVmFsdWUgPSB0
cnVlOworICAgICAgICByZXR1cm4gbV9pbnN0YW5jZVZhbHVlOworICAgIH0KKwogICAgIHVpbnQz
Ml90IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OwogfTsKIApAQCAtMjgyLDMwICsyODks
NiBAQCBpbnQzMl90IEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVz
c2lvblR5cGUmIHB0ciwgdWludDMyX3Qgb2ZmcwogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLVZh
bHVlKiBCM0lSR2VuZXJhdG9yOjptYXRlcmlhbGl6ZVdhc21Db250ZXh0KEJhc2ljQmxvY2sqIGJs
b2NrKQotewotICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Ci0gICAgICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVl
PihtX3Byb2MsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpKTsKLSAgICAgICAgaWYgKENDYWxsSGVs
cGVyczo6bG9hZFdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQotICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0
ZXJzKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0gICAgICAgICAgICBb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgewotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlm
IGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0TmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0
KHBhcmFtc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHBhdGNo
cG9pbnQ7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNs
b2JiZXJzIHdhc21Db250ZXh0IHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBu
ZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgotICAgIC8vIFRoaXMgcHJldmVu
dHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJs
ZSBwaW5uZWQgcmVnaXN0ZXIuCi0gICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgcG9pbnRlclR5cGUoKSwgT3Jp
Z2luKCkpOwotICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7Ci0g
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7Ci0gICAgcGF0Y2hwb2lu
dC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEdQUik7Ci0g
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOwotICAgIHJldHVybiBwYXRjaHBvaW50OwotfQot
CiB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmIHByb2Ms
IEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogYXJnKQogewogICAgIGlmICh1c2VGYXN0VExTRm9y
Q29udGV4dCgpKSB7CkBAIC0zMjksNyArMzEyLDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0
b3JlV2FzbUNvbnRleHQoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgVmFsdWUK
ICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IGVmZmVjdHM7CiAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0
ZXJTZXQobV93YXNtQ29udGV4dEdQUikpOwotICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX2luc3Rh
bmNlVmFsdWUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIEdQUlJlZyB3
YXNtQ29udGV4dEdQUiA9IG1fd2FzbUNvbnRleHRHUFI7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW0pIHsKICAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250
ZXh0R1BSKTsKQEAgLTM4NCwyMiArMzY3LDIxIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAK
ICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSgmY29tcGls
YXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgbV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50Qmxv
Y2spOwogCi0gICAgbV9pbnN0YW5jZVZhbHVlID0gbWF0ZXJpYWxpemVXYXNtQ29udGV4dChtX2N1
cnJlbnRCbG9jayk7Ci0KICAgICB7CiAgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2ludGVyID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkZyYW1lUG9p
bnRlciwgT3JpZ2luKCkpOwotICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJm
bG93Q2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+
KG1fcHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKKyAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1
ZSogc3RhY2tPdmVyZmxvd0NoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0
Y2hwb2ludFZhbHVlPihtX3Byb2MsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpKTsKKyAgICAgICAg
bV9pbnN0YW5jZVZhbHVlID0gc3RhY2tPdmVyZmxvd0NoZWNrOwogICAgICAgICBzdGFja092ZXJm
bG93Q2hlY2stPmFwcGVuZFNvbWVSZWdpc3RlcihmcmFtZVBvaW50ZXIpOwotICAgICAgICBzdGFj
a092ZXJmbG93Q2hlY2stPmFwcGVuZFNvbWVSZWdpc3RlcihtX2luc3RhbmNlVmFsdWUpOwogICAg
ICAgICBzdGFja092ZXJmbG93Q2hlY2stPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRj
aFJlZ2lzdGVycygpKTsKKyAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2Fz
bUNvbnRleHQgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVz
dG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRz
IHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUg
cGlubmVkIHJlZ2lzdGVyLgorICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3Rz
LndyaXRlc1Bpbm5lZCA9IGZhbHNlOworICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5l
ZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVj
ay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEdQUik7Cisg
ICAgICAgIH0KICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5udW1HUFNjcmF0Y2hSZWdpc3Rl
cnMgPSAyOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKLSAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKLSAgICAgICAgICAgIEdQUlJlZyBmcCA9IHBhcmFtc1swXS5ncHIoKTsKLSAg
ICAgICAgICAgIEdQUlJlZyBjb250ZXh0ID0gcGFyYW1zWzFdLmdwcigpOwotICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gxID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKLSAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7Ci0KICAgICAgICAgICAgIGNvbnN0IENo
ZWNrZWQ8aW50MzJfdD4gd2FzbUZyYW1lU2l6ZSA9IHBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCk7
CiAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtaW5pbXVtUGFyZW50Q2hlY2tTaXplID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgMTAyNCk7CiAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBleHRyYUZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0ZDo6bWF4PHVpbnQzMl90PigKQEAgLTQx
Nyw5ICszOTksMjEgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgICkpOwog
ICAgICAgICAgICAgY29uc3QgaW50MzJfdCBjaGVja1NpemUgPSBtX21ha2VzQ2FsbHMgPyAod2Fz
bUZyYW1lU2l6ZSArIGV4dHJhRnJhbWVTaXplKS51bnNhZmVHZXQoKSA6IHdhc21GcmFtZVNpemUu
dW5zYWZlR2V0KCk7CiAgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZsb3dDaGVjayA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgp
OworICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBtX21ha2VzQ2FsbHMgfHwg
d2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8IG5lZWRVbmRlcmZsb3dD
aGVjazsKKworICAgICAgICAgICAgR1BSUmVnIGNvbnRleHQgPSB1c2VGYXN0VExTRm9yQ29udGV4
dCgpID8gcGFyYW1zWzBdLmdwcigpIDogbV93YXNtQ29udGV4dEdQUjsKKwogICAgICAgICAgICAg
Ly8gVGhpcyBhbGxvd3MgbGVhZiBmdW5jdGlvbnMgdG8gbm90IGRvIHN0YWNrIGNoZWNrcyBpZiB0
aGVpciBmcmFtZSBzaXplIGlzIHdpdGhpbgogICAgICAgICAgICAgLy8gY2VydGFpbiBsaW1pdHMg
c2luY2UgdGhlaXIgY2FsbGVyIHdvdWxkIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBjaGVjay4KLSAg
ICAgICAgICAgIGlmIChtX21ha2VzQ2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFy
ZW50Q2hlY2tTaXplIHx8IG5lZWRVbmRlcmZsb3dDaGVjaykgeworICAgICAgICAgICAgaWYgKG5l
ZWRzT3ZlcmZsb3dDaGVjaykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZnAg
PSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcGFy
YW1zLmdwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBwYXJh
bXMuZ3BTY3JhdGNoKDEpOworCisgICAgICAgICAgICAgICAgaWYgKHVzZUZhc3RUTFNGb3JDb250
ZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQoY29udGV4dCk7
CisKICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29u
dGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CiAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hl
Y2tTaXplKSwgZnAsIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgb3ZlcmZsb3c7CkBAIC00MjksNiArNDIzLDEyIEBAIEIzSVJHZW5lcmF0b3I6OkIz
SVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJv
Y2VkdXJlCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KG92ZXJmbG93LCBDb2RlTG9jYXRpb25MYWJlbChUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhy
b3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUg
JiYgdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJm
bG93IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMg
dG8gYmUgY29ycmVjdC4KKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dE5l
ZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNt
Q29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly8gV2Ugc2FpZCB3ZSdkIHJldHVybiBhIHBvaW50ZXIuIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQg
dG8gYmVjYXVzZSBpdCBpc24ndCB1c2VkLCBidXQgdGhlIHBhdGNocG9pbnQgY29uc2VydmF0aXZl
bHkgc2FpZCBpdCBoYWQgZWZmZWN0cyAocG90ZW50aWFsIHN0YWNrIGNoZWNrKSB3aGljaCBwcmV2
ZW50IGl0IGZyb20gZ2V0dGluZyByZW1vdmVkLgogICAgICAgICAgICAgfQogICAgICAgICB9KTsK
ICAgICB9CkBAIC01NjMsMTYgKzU2MywxNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dN
ZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCiAKICAg
ICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywg
SW50MzIsIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ3Jvd01lbW9y
eSkpLAotICAgICAgICBtX2luc3RhbmNlVmFsdWUsIGRlbHRhKTsKKyAgICAgICAgaW5zdGFuY2VW
YWx1ZSgpLCBkZWx0YSk7CiAKLSAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShtX2lu
Zm8ubWVtb3J5LCBtX2luc3RhbmNlVmFsdWUsIG1fcHJvYywgbV9jdXJyZW50QmxvY2spOworICAg
IHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFs
dWUoKSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFZhbHVlKiBtZW1vcnlPYmplY3QgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLCBtX2luc3RhbmNlVmFsdWUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSkpOworICAgIFZhbHVlKiBtZW1vcnlPYmpl
Y3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMy
X3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSkpOwogCiAgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3Rh
bmNlKj4obnVsbHB0ciktPm1lbW9yeSgpLT5tZW1vcnkoKS5zaXplKCkpKSA9PSBzaXplb2YodWlu
dDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CiAgICAgVmFsdWUqIHNpemUg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIElu
dDY0LCBvcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOwpAQCAtNTk2LDcgKzU5Niw3IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVl
KSAtPiBQYXJ0aWFsUmVzCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAg
VmFsdWUqIGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIG1faW5zdGFuY2VWYWx1
ZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2Jh
bHMoKSkpOworICAgIFZhbHVlKiBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBp
bnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZHbG9iYWxzKCkpKTsKICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKG1faW5mby5nbG9iYWxzW2lu
ZGV4XS50eXBlKSwgb3JpZ2luKCksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5k
ZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTYwNCw3ICs2
MDQsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbAogYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRH
bG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgQVNTRVJUKHRvQjNUeXBlKG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlKSA9
PSB2YWx1ZS0+dHlwZSgpKTsKLSAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSk7CisgICAgVmFsdWUqIGdsb2JhbHNBcnJheSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9p
bnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4o
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSkpOwogICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCB2
YWx1ZSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdp
c3RlcikpKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTA3Miw3ICsxMDcyLDcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6
bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5z
aXplKCkpKTsKIAogICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNhbiBiZSBsaW5rZWQgaGVyZSwg
aW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludCwgYmVjYXVzZSBhbGwgaW1wb3J0IHN0
dWJzIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIEIzIGNvbXBpbGF0aW9uIHN0YXJ0cy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgotICAgICAgICBWYWx1ZSogZnVu
Y3Rpb25JbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBtX2luc3RhbmNlVmFsdWUsIHNhZmVD
YXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlv
bihmdW5jdGlvbkluZGV4KSkpOworICAgICAgICBWYWx1ZSogZnVuY3Rpb25JbXBvcnQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSkp
OwogICAgICAgICBWYWx1ZSoganNUeXBlT2ZJbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Wiwgb3JpZ2luKCksIGZ1bmN0aW9uSW1wb3J0
LCBzYWZlQ2FzdDxpbnQzMl90PihKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSk7CiAgICAg
ICAgIFZhbHVlKiBpc1dhc21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIGpzVHlwZU9mSW1wb3J0LCBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgV2ViQXNzZW1ibHlGdW5j
dGlvblR5cGUpKTsKIApAQCAtMTEwNSw3ICsxMTA1LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LAogICAgICAgICAvLyBpbXBsZW1lbnQgdGhlIElDIHRvIGJlIG92ZXIgV2FzbTo6Q29udGV4dCou
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAz
NzUKICAgICAgICAgVmFsdWUqIGNvZGVCbG9jayA9IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsCi0gICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwgbV9pbnN0YW5jZVZhbHVlLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpKTsKKyAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSkpOwogICAgICAgICBWYWx1ZSoganVt
cERlc3RpbmF0aW9uID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywK
ICAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxvY2ssIHNh
ZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6Om9mZnNldE9mSW1wb3J0V2Fz
bVRvSlNTdHViKGZ1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgIFZhbHVlKiBqc0NhbGxSZXN1bHQg
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBpc0pTQmxvY2ssIG9y
aWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKQEAgLTExMzYsNyArMTEzNiw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBjYWxs
IGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBv
ciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCi0gICAgICAgIHJlc3RvcmVXZWJBc3Nl
bWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnksIG1faW5zdGFuY2VWYWx1ZSwgbV9wcm9jLCBj
b250aW51YXRpb24pOworICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShtX2lu
Zm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywgY29udGludWF0aW9uKTsKICAgICB9
IGVsc2UgewogICAgICAgICByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENh
bGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVy
blR5cGUpLAogICAgICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsK
QEAgLTExNzIsNyArMTE3Miw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgRXhwcmVz
c2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemU7CiAgICAgewogICAgICAgICBFeHBy
ZXNzaW9uVHlwZSB0YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2lu
c3RhbmNlVmFsdWUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZUYWJsZSgpKSk7CisgICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGlu
dDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKSk7CiAgICAgICAg
IGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICAg
ICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZG
dW5jdGlvbnMoKSkpOwogICAgICAgICBqc0Z1bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwKQEAgLTEyMzYsNyArMTIzNiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAg
ICAgIFZhbHVlKiBuZXdDb250ZXh0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgICAg
IGpzT2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6b2Zm
c2V0T2ZJbnN0YW5jZSgpKSk7CiAgICAgICAgIFZhbHVlKiBpc1NhbWVDb250ZXh0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksCi0gICAg
ICAgICAgICBuZXdDb250ZXh0LCBtX2luc3RhbmNlVmFsdWUpOworICAgICAgICAgICAgbmV3Q29u
dGV4dCwgaW5zdGFuY2VWYWx1ZSgpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLAogICAgICAgICAgICAg
aXNTYW1lQ29udGV4dCwgRnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbiksIEZyZXF1ZW50ZWRC
bG9jayhkb0NvbnRleHRTd2l0Y2gpKTsKIApAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZl
Y3RvcjxFeHByZXNzaW8KICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRSZWdpc3Rl
ckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwogICAgICAg
ICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMo
KSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChuZXdDb250ZXh0LCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1faW5zdGFuY2VWYWx1ZSwg
VmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0
YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICBHUFJSZWcgbmV3
Q29udGV4dCA9IHBhcmFtc1swXS5ncHIoKTsKQEAgLTEyOTYsNyArMTI5Niw3IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBW
ZWN0b3I8RXhwcmVzc2lvCiAgICAgICAgIH0pOwogCiAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2
ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhh
dmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KLSAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0
ZShtX2luZm8ubWVtb3J5LCBtX2luc3RhbmNlVmFsdWUsIG1fcHJvYywgbV9jdXJyZW50QmxvY2sp
OworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnksIGluc3Rh
bmNlVmFsdWUoKSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CiAKICAgICByZXR1cm4geyB9Owog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IDUwZmVi
NzMuLjQxODZlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5j
cHAKQEAgLTExMCw2ICsxMTAsMTMgQEAgYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkKICAgICB9CiAKICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKKworICAgIGlmICghbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bG9vcENvdW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZnVuY3Rpb25M
b2NhdGlvbnMuc2l6ZSgpKSkgeworICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayks
ICJGYWlsZWQgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UgZm9yIGxvb3AgY291bnRzIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bG9vcENv
dW50cy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKKwogICAgIGZvciAodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBmdW5jdGlvbkxvY2F0aW9ucy5z
aXplKCk7ICsrZnVuY3Rpb25JbmRleCkgewogICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
UHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgZnVuY3Rpb25Mb2NhdGlvbnNbZnVu
Y3Rpb25JbmRleF0uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwgZnVuY3Rpb25Mb2NhdGlvbnNb
ZnVuY3Rpb25JbmRleF0uZW5kKTsKICAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFy
dCA9IG1fc291cmNlICsgZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uc3RhcnQ7CkBA
IC0xMjgsNiArMTM1LDggQEAgYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkK
ICAgICAgICAgICAgIEJhc2U6OmZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZyh2YWxp
ZGF0aW9uUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6
bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4K
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorCisgICAgICAgIG1fbW9kdWxl
SW5mb3JtYXRpb24tPmxvb3BDb3VudHNbZnVuY3Rpb25JbmRleF0gPSB2YWxpZGF0aW9uUmVzdWx0
LnZhbHVlKCkubG9vcENvdW50OwogICAgIH0KIAogICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6
OnJlcG9ydENvbXBpbGVUaW1lcygpKQpAQCAtMjY1LDggKzI3NCwxMSBAQCB2b2lkIEJCUVBsYW46
OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICBBU1NF
UlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0
dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2ln
bmF0dXJlSW5kZXgpOwogICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
KSk7CiAKKyAgICAgICAgYm9vbCBub1RpZXJVcCA9IChtX21vZHVsZUluZm9ybWF0aW9uLT5sb29w
Q291bnRzW2Z1bmN0aW9uSW5kZXhdIDwgT3B0aW9uczo6d2ViQXNzZW1ibHlOb1RpZXJVcFNtYWxs
TG9vcENvdW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBmdW5jdGlvbkxlbmd0aCA8
IE9wdGlvbnM6OndlYkFzc2VtYmx5Tm9UaWVyVXBTbWFsbEZ1bmN0aW9uKCkpOworCiAgICAgICAg
IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlv
bnM6OnVzZUJCUVRpZXJVcENoZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhd
IDogbnVsbHB0cjsKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJC
UVRpZXJVcENoZWNrcygpICYmICFub1RpZXJVcCA/ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbklu
ZGV4XSA6IG51bGxwdHI7CiAgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBD
b21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7CiAKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmluZGV4IGQ4ZDFkZWQuLmVm
MmNmNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
blBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIE9wVHlwZSBjdXJyZW50T3Bj
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50T3Bjb2RlOyB9CiAgICAgc2l6ZV90IGN1cnJl
bnRPcGNvZGVTdGFydGluZ09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29kZVN0
YXJ0aW5nT2Zmc2V0OyB9CisgICAgdW5zaWduZWQgbG9vcENvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9sb29wQ291bnQ7IH0KIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CkBAIC05MCw2ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgT3BUeXBlIG1fY3VycmVu
dE9wY29kZTsKICAgICBzaXplX3QgbV9jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQgeyAwIH07
CiAKKyAgICB1bnNpZ25lZCBtX2xvb3BDb3VudCB7IDAgfTsKICAgICB1bnNpZ25lZCBtX3VucmVh
Y2hhYmxlQmxvY2tzIHsgMCB9OwogfTsKIApAQCAtMzgzLDYgKzM4NSw3IEBAIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZXN1bHRUeXBlKGlubGluZVNpZ25hdHVy
ZSksICJjYW4ndCBnZXQgbG9vcCdzIGlubGluZSBzaWduYXR1cmUiKTsKICAgICAgICAgbV9jb250
cm9sU3RhY2suYXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIG1fY29udGV4dC5h
ZGRMb29wKGlubGluZVNpZ25hdHVyZSkgfSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0g
RXhwcmVzc2lvbkxpc3QoKTsKKyAgICAgICAgKyttX2xvb3BDb3VudDsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggMDdiMzg5OS4uOGYyMzBjMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKQEAgLTc1LDYg
Kzc1LDggQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAgICAgdW5zaWduZWQgZmlyc3RJbnRlcm5hbEds
b2JhbCB7IDAgfTsKICAgICBWZWN0b3I8Q3VzdG9tU2VjdGlvbj4gY3VzdG9tU2VjdGlvbnM7CiAg
ICAgTmFtZVNlY3Rpb24gbmFtZVNlY3Rpb247CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGxvb3BD
b3VudHM7CiB9OwogCiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlk
YXRlLmNwcAppbmRleCAxYTQ2ZjVjLi41ZDhjNTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKQEAgLTM3NywxMiArMzc3LDEyIEBAIHZvaWQgVmFsaWRh
dGU6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3Qg
RXhwcmVzc2lvbkxpCiAgICAgZGF0YUxvZ0xuKCk7CiB9CiAKLUV4cGVjdGVkPHZvaWQsIFN0cmlu
Zz4gdmFsaWRhdGVGdW5jdGlvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBsZW5ndGgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9k
dWxlKQorRXhwZWN0ZWQ8VmFsaWRhdGVSZXN1bHQsIFN0cmluZz4gdmFsaWRhdGVGdW5jdGlvbihj
b25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBsZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlKQogewogICAgIFZhbGlkYXRl
IGNvbnRleHQobW9kdWxlKTsKICAgICBGdW5jdGlvblBhcnNlcjxWYWxpZGF0ZT4gdmFsaWRhdG9y
KGNvbnRleHQsIHNvdXJjZSwgbGVuZ3RoLCBzaWduYXR1cmUsIG1vZHVsZSk7CiAgICAgV0FTTV9G
QUlMX0lGX0hFTFBFUl9GQUlMUyh2YWxpZGF0b3IucGFyc2UoKSk7Ci0gICAgcmV0dXJuIHsgfTsK
KyAgICByZXR1cm4gVmFsaWRhdGVSZXN1bHQgeyB2YWxpZGF0b3IubG9vcENvdW50KCkgfTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVZhbGlkYXRlLmgKaW5kZXggMjgyODNjZi4uNDBkN2MzOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgKQEAgLTM0LDcgKzM0LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogCiBuYW1lc3BhY2UgV2FzbSB7CiAKLUV4cGVjdGVkPHZvaWQsIFN0cmluZz4gdmFsaWRh
dGVGdW5jdGlvbihjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYpOworc3RydWN0IFZhbGlkYXRlUmVzdWx0IHsKKyAgICB1bnNp
Z25lZCBsb29wQ291bnQ7Cit9OworCitFeHBlY3RlZDxWYWxpZGF0ZVJlc3VsdCwgU3RyaW5nPiB2
YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYs
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CiAKLS0gCjIuOS4zCgo=
</data>
<flag name="review"
          id="337064"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316386</attachid>
            <date>2017-07-25 13:15:14 -0700</date>
            <delta_ts>2017-07-25 19:23:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Smaller-codegen.patch</filename>
            <type>text/plain</type>
            <size>23082</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA3MDcyZGM3ZTUyZjEzYjA1MWFlYjkxZWY5MzI2YjU1M2YyZjM0ZjNiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDI1IEp1bCAyMDE3IDEwOjA0OjAyIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gU21hbGxl
ciBjb2RlZ2VuCgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgIHwgIDQxICsrKysrKysrCiAuLi4vSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaCB8ICAxMCArKwogLi4uL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Nl82NC5oICAgICAgICAgICAgICAgfCAgMTAgKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwICAgICAgICAgIHwgIDIwICsrKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMgICAgIHwgICA1ICsKIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgMTE2ICsrKysrKysrKystLS0t
LS0tLS0tLQogNiBmaWxlcyBjaGFuZ2VkLCAxNDIgaW5zZXJ0aW9ucygrKSwgNjAgZGVsZXRpb25z
KC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggOTg4MzQyNy4uYTJlYTAyOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTctMDctMjUgIEpGIEJhc3Rp
ZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBnZW5lcmF0
ZSBzbWFsbGVyIGJpbmFyaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzQ4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgZ2VuZXJhdGVkIGNvZGUgc2l6ZSBmb3IgV2Vi
QXNzZW1ibHkgaW4gMiB3YXlzOgorCisgICAgICAgIDEuIFVzZSB0aGUgWlIgcmVnaXN0ZXIgd2hl
biBzdG9yaW5nIHplcm8gb24gQVJNNjQuCisgICAgICAgIDIuIFN5bnRoZXNpemUgd2FzbSBjb250
ZXh0IGxhemlseS4KKworICAgICAgICBUaGlzIGxlYWRzIHRvIGEgbW9kZXN0IHNpemUgcmVkdWN0
aW9uIG9uIGJvdGggeDg2LTY0IGFuZCBBUk02NCBmb3IKKyAgICAgICAgbGFyZ2UgV2ViQXNzZW1i
bHkgZ2FtZXMsIHdpdGhvdXQgYW55IHBlcmZvcm1hbmNlIGxvc3Mgb24gV2FzbUJlbmNoCisgICAg
ICAgIGFuZCBUaXR6ZXJCZW5jaC4KKworICAgICAgICBUaGUgcmVhc29uIHRoaXMgd29ya3MgaXMg
dGhhdCB0aGVzZSBnYW1lcywgdXNpbmcgRW1zY3JpcHRlbiwKKyAgICAgICAgZ2VuZXJhdGUgMTAw
aysgdGlueSBmdW5jdGlvbnMsIGFuZCBvdXIgSklUIGFsbG9jYXRpb24gZ3JhbnVsZQorICAgICAg
ICByb3VuZHMgYWxsIGFsbG9jYXRpb25zIHVwIHRvIDMyIGJ5dGVzLiBUaGVyZSBhcmUgcGxlbnR5
IG9mIG90aGVyCisgICAgICAgIHNpbXBsZSBnYWlucyB0byBiZSBoYWQsIEkndmUgZmlsZWQgYSBm
b2xsb3ctdXAgYnVnIGF0CisgICAgICAgIHdlYmtpdC5vcmcvYi8xNzQ4MTkKKworICAgICAgICBX
ZSBzaG91bGQgZnVydGhlciBhdm9pZCB0aGUgcGVyLWZ1bmN0aW9uIGNvc3Qgb2YgdGllcmluZywg
d2hpY2gKKyAgICAgICAgcmVwcmVzZW50cyB0aGUgYnVsayBvZiBjb2RlIGdlbmVyYXRlZCBmb3Ig
c21hbGwgZnVuY3Rpb25zLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmVaZXJvNjQpOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3RvcmVaZXJvNjQpOgorICAgICAgICAqIGIzL0IzTG93
ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNyZWF0ZVN0
b3JlKTogdGhpcyBkb2Vzbid0IG1ha2Ugc2Vuc2UKKyAgICAgICAgZm9yIHg4NiBiZWNhdXNlIGl0
IGNvbnN0cmFpbnMgcmVnaXN0ZXIgcmV1c2UgYW5kIGNvZGVnZW4gaW4gYSB3YXkKKyAgICAgICAg
dGhhdCBkb2Vzbid0IGFmZmVjdCBBUk02NCBiZWNhdXNlIGl0IGhhcyBhIGRlZGljYXRlZCB6ZXJv
CisgICAgICAgIHJlZ2lzdGVyLgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlczog
YWRkIHRoZSBzdG9yZVplcm82NCBvcGNvZGUuCisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Omluc3RhbmNlVmFs
dWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6bWF0ZXJpYWxpemVXYXNtQ29udGV4
dCk6IERlbGV0ZWQuCisKIDIwMTctMDctMjQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIEdhcmRlbmluZzogZml4ZWQgQyBMb29wIGJ1aWxkIGFmdGVyIHIyMTk3OTAu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oCmluZGV4IDg1MTFlNjIuLjEwZjJiZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0xMzQzLDYg
KzEzNDMsMTYgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgZGVz
dCwgc2ltbSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc3RvcmVaZXJvNjQoSW1wbGljaXRBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzdG9yZTY0KEFSTTY0UmVnaXN0ZXJzOjp6ciwg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVaZXJvNjQoQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgeworICAgICAgICBzdG9yZTY0KEFSTTY0UmVnaXN0ZXJzOjp6ciwgYWRkcmVz
cyk7CisgICAgfQorICAgIAogICAgIERhdGFMYWJlbDMyIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNl
dFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBE
YXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAppbmRleCAxZDc2MGQ4Li5hNzE1Yzcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2XzY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCkBAIC04OTQsNiArODk0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9h
c3NlbWJsZXIubW92cV9ybShzY3JhdGNoUmVnaXN0ZXIoKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogICAgIAorICAg
IHZvaWQgc3RvcmVaZXJvNjQoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBzdG9yZTY0KFRydXN0ZWRJbW0zMigwKSwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc3RvcmVaZXJvNjQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBzdG9yZTY0
KFRydXN0ZWRJbW0zMigwKSwgYWRkcmVzcyk7CisgICAgfQorICAgIAogICAgIERhdGFMYWJlbDMy
IHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCAyOTA5Nzc1Li42NDEwNTM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtMTAxOCw4ICsxMDE4LDI0
IEBAIHByaXZhdGU6CiAKICAgICBJbnN0IGNyZWF0ZVN0b3JlKEFpcjo6S2luZCBtb3ZlLCBWYWx1
ZSogdmFsdWUsIGNvbnN0IEFyZyYgZGVzdCkKICAgICB7Ci0gICAgICAgIGlmIChpbW0odmFsdWUp
ICYmIGlzVmFsaWRGb3JtKG1vdmUub3Bjb2RlLCBBcmc6OkltbSwgZGVzdC5raW5kKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIEluc3QobW92ZSwgbV92YWx1ZSwgaW1tKHZhbHVlKSwgZGVzdCk7Cisg
ICAgICAgIGlmIChhdXRvIGltbV92YWx1ZSA9IGltbSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGlm
IChpc0FSTTY0KCkgJiYgaW1tX3ZhbHVlLnZhbHVlKCkgPT0gMCkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAobW92ZS5vcGNvZGUpIHsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFpcjo6TW92ZTMyOgor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oU3RvcmVaZXJvMzIsIGRlc3Qua2lu
ZCgpKSAmJiBkZXN0LmlzVmFsaWRGb3JtKFdpZHRoMzIpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3QoU3RvcmVaZXJvMzIsIG1fdmFsdWUsIGRlc3QpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFpcjo6TW92ZToKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFN0b3JlWmVybzY0LCBkZXN0LmtpbmQoKSkgJiYg
ZGVzdC5pc1ZhbGlkRm9ybShXaWR0aDY0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBJbnN0KFN0b3JlWmVybzY0LCBtX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGlzVmFsaWRGb3JtKG1vdmUub3Bjb2RlLCBBcmc6OkltbSwgZGVzdC5raW5kKCkpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KG1vdmUsIG1fdmFsdWUsIGltbV92YWx1ZSwgZGVzdCk7Cisg
ICAgICAgIH0KIAogICAgICAgICByZXR1cm4gSW5zdChtb3ZlLCBtX3ZhbHVlLCB0bXAodmFsdWUp
LCBkZXN0KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNv
ZGUub3Bjb2RlcwppbmRleCA5NjFiNDJjLi44NzNhZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTY0OSwxMCArNjQ5LDE1IEBAIE1v
dmUzMiBVOkc6MzIsIFpEOkc6MzIKIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIsIFM6RzozMgogICAg
IEFkZHIsIEFkZHIsIFRtcAogCisjIEZJWE1FOiBTdG9yZVplcm8zMiBhbmQgU3RvcmVaZXJvNjQg
YXJlIGhhY2tzIG9uIEFSTTY0LCB3ZSBjYW4gZG8gYmV0dGVyOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0ODIxCiBTdG9yZVplcm8zMiBEOkc6MzIKICAgICBBZGRy
CiAgICAgSW5kZXgKIAorNjQ6IFN0b3JlWmVybzY0IEQ6Rzo2NAorICAgIEFkZHIKKyAgICBJbmRl
eAorCiBTaWduRXh0ZW5kMzJUb1B0ciBVOkc6MzIsIEQ6RzpQdHIKICAgICBUbXAsIFRtcAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5k
ZXggNzZkYzRhNC4uMzQ4MjZiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMjQ1LDMwICsyNDUsMzcgQEAgcHJpdmF0ZToKIAog
ICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhw
cmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CiAKLSAgICBWYWx1ZSogbWF0ZXJpYWxpemVXYXNtQ29u
dGV4dChCYXNpY0Jsb2NrKik7CiAgICAgdm9pZCByZXN0b3JlV2FzbUNvbnRleHQoUHJvY2VkdXJl
JiwgQmFzaWNCbG9jayosIFZhbHVlKik7CiAgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9i
YWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2Vk
dXJlJiwgQmFzaWNCbG9jayopOwogCiAgICAgT3JpZ2luIG9yaWdpbigpOwogCi0gICAgRnVuY3Rp
b25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyOworICAgIEZ1bmN0aW9uUGFyc2VyPEIz
SVJHZW5lcmF0b3I+KiBtX3BhcnNlciB7IG51bGxwdHIgfTsKICAgICBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgbV9pbmZvOwotICAgIGNvbnN0IE1lbW9yeU1vZGUgbV9tb2RlOwotICAgIGNvbnN0
IENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZTsKLSAgICBjb25zdCB1bnNpZ25lZCBt
X2Z1bmN0aW9uSW5kZXg7Ci0gICAgY29uc3QgVGllclVwQ291bnQqIG1fdGllclVwOworICAgIGNv
bnN0IE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKKyAg
ICBjb25zdCBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGUgeyBDb21waWxhdGlvbk1v
ZGU6OkJCUU1vZGUgfTsKKyAgICBjb25zdCB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXggeyBVSU5U
X01BWCB9OworICAgIGNvbnN0IFRpZXJVcENvdW50KiBtX3RpZXJVcCB7IG51bGxwdHIgfTsKIAog
ICAgIFByb2NlZHVyZSYgbV9wcm9jOwotICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwor
ICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIFZlY3RvcjxW
YXJpYWJsZSo+IG1fbG9jYWxzOwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
bV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhl
IGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4K
ICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fY29uc3RhbnRQb29sOwogICAgIEluc2Vy
dGlvblNldCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzOwotICAgIEdQUlJlZyBtX21lbW9yeUJh
c2VHUFI7CisgICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAg
ICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9OwotICAgIEdQUlJlZyBt
X3dhc21Db250ZXh0R1BSOwotICAgIFZhbHVlKiBtX2luc3RhbmNlVmFsdWU7IC8vIEZJWE1FOiBt
YWtlIHRoaXMgbGF6eSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5
NzkyCisgICAgR1BSUmVnIG1fd2FzbUNvbnRleHRHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAg
Ym9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OworCisgICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1
ZSB7IG51bGxwdHIgfTsgLy8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVsb3cgdG8gZW5zdXJl
IHRoZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2VkLgorICAgIGJvb2wg
bV91c2VzSW5zdGFuY2VWYWx1ZSB7IGZhbHNlIH07CisgICAgVmFsdWUqIGluc3RhbmNlVmFsdWUo
KQorICAgIHsKKyAgICAgICAgbV91c2VzSW5zdGFuY2VWYWx1ZSA9IHRydWU7CisgICAgICAgIHJl
dHVybiBtX2luc3RhbmNlVmFsdWU7CisgICAgfQorCiAgICAgdWludDMyX3QgbV9tYXhOdW1KU0Nh
bGxBcmd1bWVudHMgeyAwIH07CiB9OwogCkBAIC0yODIsMzAgKzI4OSw2IEBAIGludDMyX3QgQjNJ
UkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1
aW50MzJfdCBvZmZzCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0
b3I6Om1hdGVyaWFsaXplV2FzbUNvbnRleHQoQmFzaWNCbG9jayogYmxvY2spCi17Ci0gICAgaWYg
KHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgcG9pbnRl
clR5cGUoKSwgT3JpZ2luKCkpOwotICAgICAgICBpZiAoQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNv
bnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpCi0gICAgICAgICAgICBwYXRjaHBvaW50
LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGpp
dCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVy
KCkpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQocGFyYW1zWzBdLmdwcigp
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKLSAgICB9Ci0K
LSAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRl
eHQgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBp
dCBpbiB0aGUgY2FsbGVyIHNpZGUuCi0gICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5n
IEFyZ3VtZW50UmVnIHRvIHRoaXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rl
ci4KLSAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PFBh
dGNocG9pbnRWYWx1ZT4obV9wcm9jLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7Ci0gICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSBmYWxzZTsKLSAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLSAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJh
aW50ID0gVmFsdWVSZXA6OnJlZyhtX3dhc21Db250ZXh0R1BSKTsKLSAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsgfSk7Ci0gICAgcmV0dXJuIHBhdGNocG9pbnQ7Ci19Ci0KIHZvaWQgQjNJUkdlbmVy
YXRvcjo6cmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxv
Y2ssIFZhbHVlKiBhcmcpCiB7CiAgICAgaWYgKHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKQEAg
LTMyOSw3ICszMTIsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dChQ
cm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZQogICAgIGVmZmVjdHMucmVh
ZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZm
ZWN0czsKICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250
ZXh0R1BSKSk7Ci0gICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1faW5zdGFuY2VWYWx1ZSwgVmFsdWVS
ZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3RhbmNlVmFsdWUo
KSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgR1BSUmVnIHdhc21Db250ZXh0R1BSID0g
bV93YXNtQ29udGV4dEdQUjsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbSkgewog
ICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2FzbUNvbnRleHRHUFIpOwpAQCAtMzg0
LDIyICszNjcsMjEgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKIAogICAgIHdhc21DYWxsaW5n
Q29udmVudGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZjb21waWxhdGlvbi0+Y2FsbGVlTW92
ZUxvY2F0aW9uLCBtX3Byb2MsIE9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CiAKLSAgICBtX2lu
c3RhbmNlVmFsdWUgPSBtYXRlcmlhbGl6ZVdhc21Db250ZXh0KG1fY3VycmVudEJsb2NrKTsKLQog
ICAgIHsKICAgICAgICAgQjM6OlZhbHVlKiBmcmFtZVBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBPcmlnaW4oKSk7
Ci0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHN0YWNrT3ZlcmZsb3dDaGVjayA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9p
ZCwgT3JpZ2luKCkpOworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93
Q2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1f
cHJvYywgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCkpOworICAgICAgICBtX2luc3RhbmNlVmFsdWUg
PSBzdGFja092ZXJmbG93Q2hlY2s7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+YXBwZW5k
U29tZVJlZ2lzdGVyKGZyYW1lUG9pbnRlcik7Ci0gICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+
YXBwZW5kU29tZVJlZ2lzdGVyKG1faW5zdGFuY2VWYWx1ZSk7CiAgICAgICAgIHN0YWNrT3ZlcmZs
b3dDaGVjay0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwor
ICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dCByZWdpc3Rl
ciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBj
YWxsZXIgc2lkZS4KKyAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBB
cmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIu
CisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3JpdGVzUGlubmVkID0g
ZmFsc2U7CisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMucmVhZHNQaW5u
ZWQgPSB0cnVlOworICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5yZXN1bHRDb25zdHJh
aW50ID0gVmFsdWVSZXA6OnJlZyhtX3dhc21Db250ZXh0R1BSKTsKKyAgICAgICAgfQogICAgICAg
ICBzdGFja092ZXJmbG93Q2hlY2stPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDI7CiAgICAgICAg
IHN0YWNrT3ZlcmZsb3dDaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAg
ICAgICAgICAgR1BSUmVnIGZwID0gcGFyYW1zWzBdLmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IGNvbnRleHQgPSBwYXJhbXNbMV0uZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSBwYXJhbXMuZ3BTY3JhdGNoKDApOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcGFy
YW1zLmdwU2NyYXRjaCgxKTsKLQogICAgICAgICAgICAgY29uc3QgQ2hlY2tlZDxpbnQzMl90PiB3
YXNtRnJhbWVTaXplID0gcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKTsKICAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIG1pbmltdW1QYXJlbnRDaGVja1NpemUgPSBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCAxMDI0KTsKICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGV4dHJhRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSwgc3RkOjptYXg8dWludDMyX3Q+KApAQCAtNDE3LDkgKzM5OSwyMSBAQCBC
M0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgKSk7CiAgICAgICAgICAgICBjb25z
dCBpbnQzMl90IGNoZWNrU2l6ZSA9IG1fbWFrZXNDYWxscyA/ICh3YXNtRnJhbWVTaXplICsgZXh0
cmFGcmFtZVNpemUpLnVuc2FmZUdldCgpIDogd2FzbUZyYW1lU2l6ZS51bnNhZmVHZXQoKTsKICAg
ICAgICAgICAgIGJvb2wgbmVlZFVuZGVyZmxvd0NoZWNrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNoZWNrU2l6ZSkgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCk7CisgICAgICAgICAgICBi
b29sIG5lZWRzT3ZlcmZsb3dDaGVjayA9IG1fbWFrZXNDYWxscyB8fCB3YXNtRnJhbWVTaXplID49
IG1pbmltdW1QYXJlbnRDaGVja1NpemUgfHwgbmVlZFVuZGVyZmxvd0NoZWNrOworCisgICAgICAg
ICAgICBHUFJSZWcgY29udGV4dCA9IHVzZUZhc3RUTFNGb3JDb250ZXh0KCkgPyBwYXJhbXNbMF0u
Z3ByKCkgOiBtX3dhc21Db250ZXh0R1BSOworCiAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBs
ZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUg
aXMgd2l0aGluCiAgICAgICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxs
ZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNoZWNrLgotICAgICAgICAgICAgaWYgKG1f
bWFrZXNDYWxscyB8fCB3YXNtRnJhbWVTaXplID49IG1pbmltdW1QYXJlbnRDaGVja1NpemUgfHwg
bmVlZFVuZGVyZmxvd0NoZWNrKSB7CisgICAgICAgICAgICBpZiAobmVlZHNPdmVyZmxvd0NoZWNr
KSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIEdQUlJlZyBmcCA9IHBhcmFtc1sxXS5ncHIo
KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBwYXJhbXMuZ3BTY3JhdGNoKDAp
OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7
CisKKyAgICAgICAgICAgICAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChjb250ZXh0KTsKKwogICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0LCBDb250ZXh0Ojpv
ZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKICAgICAgICAgICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBmcCwgc2Ny
YXRjaDEpOwogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBvdmVyZmxv
dzsKQEAgLTQyOSw2ICs0MjMsMTIgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVM
b2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dG
cm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiB1c2VGYXN0VExTRm9y
Q29udGV4dCgpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVl
ZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0Lgor
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2Ny
YXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGNvbnRleHQp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzYWlkIHdlJ2Qg
cmV0dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBiZWNhdXNlIGl0IGlz
bid0IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVseSBzYWlkIGl0IGhhZCBl
ZmZlY3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZlbnQgaXQgZnJvbSBnZXR0
aW5nIHJlbW92ZWQuCiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTU2Mywx
NiArNTYzLDE2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9u
VHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKIAogICAgIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCks
CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihncm93TWVtb3J5KSksCi0gICAgICAgIG1f
aW5zdGFuY2VWYWx1ZSwgZGVsdGEpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIGRlbHRhKTsK
IAotICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnksIG1faW5z
dGFuY2VWYWx1ZSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CisgICAgcmVzdG9yZVdlYkFzc2Vt
Ymx5R2xvYmFsU3RhdGUobV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIG1f
Y3VycmVudEJsb2NrKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7Ci0gICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIG1f
aW5zdGFuY2VWYWx1ZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZk1lbW9yeSgpKSk7CisgICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwg
b3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSk7CiAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihkZWNsdHlwZShzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihudWxscHRyKS0+
bWVtb3J5KCktPm1lbW9yeSgpLnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2Vu
IHJlbGllcyBvbiB0aGlzIHNpemUiKTsKICAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBt
ZW1vcnlPYmplY3QsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNl
dE9mU2l6ZSgpKSk7CkBAIC01OTYsNyArNTk2LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRM
b2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXMK
IAogYXV0byBCM0lSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBWYWx1ZSogZ2xvYmFsc0Fy
cmF5ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBzYWZlQ2FzdDxpbnQz
Ml90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSk7CisgICAgVmFs
dWUqIGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwg
c2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMo
KSkpOwogICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUobV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGUpLCBvcmln
aW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdp
c3RlcikpKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNjA0LDcgKzYwNCw3IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsCiBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NF
UlQodG9CM1R5cGUobV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGUpID09IHZhbHVlLT50eXBlKCkp
OwotICAgIFZhbHVlKiBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBtX2luc3Rh
bmNlVmFsdWUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZHbG9iYWxzKCkpKTsKKyAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSk7CiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIHZhbHVlLCBnbG9iYWxzQXJy
YXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIHJl
dHVybiB7IH07CiB9CkBAIC0xMDcyLDcgKzEwNzIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
CiAgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0Nh
bGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwogCiAgICAg
ICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtlZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVy
YXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBpbXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRl
ZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgIFZhbHVlKiBmdW5jdGlvbkltcG9ydCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgb3JpZ2luKCksIG1faW5zdGFuY2VWYWx1ZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgp
KSk7CisgICAgICAgIFZhbHVlKiBmdW5jdGlvbkltcG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCks
IGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgIFZhbHVl
KiBqc1R5cGVPZkltcG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4oKSwgZnVuY3Rpb25JbXBvcnQsIHNhZmVDYXN0PGludDMy
X3Q+KEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpKTsKICAgICAgICAgVmFsdWUqIGlzV2Fz
bUNhbGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBv
cmlnaW4oKSwganNUeXBlT2ZJbXBvcnQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBXZWJBc3NlbWJseUZ1bmN0aW9uVHlwZSkpOwogCkBA
IC0xMTA1LDcgKzExMDUsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIC8vIGlt
cGxlbWVudCB0aGUgSUMgdG8gYmUgb3ZlciBXYXNtOjpDb250ZXh0Ki4KICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM3NQogICAgICAgICBWYWx1
ZSogY29kZUJsb2NrID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywK
LSAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBtX2luc3RhbmNlVmFs
dWUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDb2Rl
QmxvY2soKSkpOworICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGlu
c3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZkNvZGVCbG9jaygpKSk7CiAgICAgICAgIFZhbHVlKiBqdW1wRGVzdGluYXRpb24gPSBp
c0pTQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAogICAgICAgICAgICAgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNvZGVCbG9jaywgc2FmZUNhc3Q8aW50MzJfdD4o
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIoZnVuY3Rp
b25JbmRleCkpKTsKICAgICAgICAgVmFsdWUqIGpzQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzSlNCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRv
QjNUeXBlKHJldHVyblR5cGUpLApAQCAtMTEzNiw3ICsxMTM2LDcgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLAogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVu
IHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9k
aWZpZWQgb3VyIE1lbW9yeS4KLSAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUo
bV9pbmZvLm1lbW9yeSwgbV9pbnN0YW5jZVZhbHVlLCBtX3Byb2MsIGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnksIGluc3Rh
bmNlVmFsdWUoKSwgbV9wcm9jLCBjb250aW51YXRpb24pOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3Vy
cmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAg
ICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewpAQCAtMTE3Miw3ICsxMTcy
LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJs
ZUZ1bmN0aW9uQnVmZmVyU2l6ZTsKICAgICB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHRhYmxl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1faW5zdGFuY2VWYWx1ZSwgc2Fm
ZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCkpKTsK
KyAgICAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCkpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgICAgICB0YWJsZSwgc2FmZUNh
c3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7CiAg
ICAgICAgIGpzRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLApAQCAtMTIzNiw3
ICsxMjM2LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICAgICAgVmFsdWUqIG5ld0Nv
bnRleHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICAgICAganNPYmplY3QsIHNhZmVD
YXN0PGludDMyX3Q+KFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpvZmZzZXRPZkluc3RhbmNlKCkp
KTsKICAgICAgICAgVmFsdWUqIGlzU2FtZUNvbnRleHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG5ld0NvbnRl
eHQsIG1faW5zdGFuY2VWYWx1ZSk7CisgICAgICAgICAgICBuZXdDb250ZXh0LCBpbnN0YW5jZVZh
bHVlKCkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1f
cHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksCiAgICAgICAgICAgICBpc1NhbWVDb250ZXh0LCBG
cmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3
aXRjaCkpOwogCkBAIC0xMjQ3LDcgKzEyNDcsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npbwog
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9T
YXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKG5ld0NvbnRleHQsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwotICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV9pbnN0YW5jZVZhbHVlLCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFs
dWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0ID0gcGFyYW1z
WzBdLmdwcigpOwpAQCAtMTI5Niw3ICsxMjk2LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRD
YWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8K
ICAgICAgICAgfSk7CiAKICAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhl
ciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIg
TWVtb3J5LgotICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnks
IG1faW5zdGFuY2VWYWx1ZSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CisgICAgcmVzdG9yZVdl
YkFzc2VtYmx5R2xvYmFsU3RhdGUobV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3By
b2MsIG1fY3VycmVudEJsb2NrKTsKIAogICAgIHJldHVybiB7IH07CiB9Ci0tIAoyLjkuMwoK
</data>

          </attachment>
      

    </bug>

</bugzilla>