<?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>109909</bug_id>
          
          <creation_ts>2013-02-15 00:50:50 -0800</creation_ts>
          <short_desc>[Refactoring] Make m_state an on-stack object</short_desc>
          <delta_ts>2022-07-13 23:39:40 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>110719</dependson>
          <blocked>89879</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Takashi Sakamoto">tasak</reporter>
          <assigned_to name="Takashi Sakamoto">tasak</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jyasskin</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>833773</commentid>
    <comment_count>0</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-15 00:50:50 -0800</bug_when>
    <thetext>Currently m_state is a member variable of StyleResolver. Make the m_state an on-stack object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833796</commentid>
    <comment_count>1</comment_count>
      <attachid>188509</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-15 01:24:51 -0800</bug_when>
    <thetext>Created attachment 188509
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837230</commentid>
    <comment_count>2</comment_count>
      <attachid>189257</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-20 00:04:57 -0800</bug_when>
    <thetext>Created attachment 189257
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837385</commentid>
    <comment_count>3</comment_count>
      <attachid>189257</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-20 05:39:04 -0800</bug_when>
    <thetext>Comment on attachment 189257
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838090</commentid>
    <comment_count>4</comment_count>
      <attachid>189449</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-20 19:15:25 -0800</bug_when>
    <thetext>Created attachment 189449
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838104</commentid>
    <comment_count>5</comment_count>
      <attachid>189449</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 19:41:27 -0800</bug_when>
    <thetext>Comment on attachment 189449
Patch for landing

Clearing flags on attachment: 189449

Committed r143556: &lt;http://trac.webkit.org/changeset/143556&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838105</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 19:41:31 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840567</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-24 02:34:15 -0800</bug_when>
    <thetext>This looks like 2-3% performance regression in Parser/html5-full-render:

https://perf.webkit.org/#mode=charts&amp;days=56&amp;chartList=%5B%5B%22Mac%20Lion%22%2C%22Parser%2Fhtml5-full-render%3ATime%22%5D%5D&amp;zoom=%5B1361218175932.3066%2C1361543074858.7913%5D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840690</commentid>
    <comment_count>8</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-24 20:04:45 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; This looks like 2-3% performance regression in Parser/html5-full-render:
Thanks for the catch! Takashi is out until next week. Let me roll this out for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840839</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-25 03:30:59 -0800</bug_when>
    <thetext>Rollout did indeed fix the regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842110</commentid>
    <comment_count>10</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-26 09:42:12 -0800</bug_when>
    <thetext>Reopening (Rolled out http://trac.webkit.org/changeset/143885)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844210</commentid>
    <comment_count>11</comment_count>
      <attachid>190754</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-28 10:37:37 -0800</bug_when>
    <thetext>Created attachment 190754
Patch(revised)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844215</commentid>
    <comment_count>12</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-28 10:42:11 -0800</bug_when>
    <thetext>I revised the patch (State&amp; -&gt; const State&amp;) and measured its performance:

https://docs.google.com/spreadsheet/ccc?key=0AtdkWCxGaEc2dGRtWjlFejIyS1BBamtEcElzM1ZidGc&amp;usp=sharing

The spreadsheet compares master&apos;s html5-full-render test with patched one&apos;s html5-full-render test, i.e.

for both master and patched DumpRenderTree, run xvfb-run out/Release/DumpRenderTree third_party/WebKit/PerformanceTests/Parser/html5-full-render.html --no-timeout

The result looks almost the same performance. So can I land this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844251</commentid>
    <comment_count>13</comment_count>
      <attachid>190754</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-28 11:19:51 -0800</bug_when>
    <thetext>Comment on attachment 190754
Patch(revised)

Attachment 190754 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/16847211

New failing tests:
css2.1/t1202-counter-01-b.html
compositing/rtl/rtl-absolute-overflow.html
css1/box_properties/margin_right.html
accessibility/render-counter-text.html
css1/box_properties/margin.html
compositing/rtl/rtl-fixed-overflow.html
http/tests/cache/subresource-failover-to-network.html
css2.1/t1202-counter-02-b.html
compositing/iframes/iframe-in-composited-layer.html
accessibility/first-letter-text-transform-causes-crash.html
compositing/rtl/rtl-fixed-overflow-scrolled.html
compositing/layer-creation/overlap-transformed-and-clipped.html
compositing/scrollbar-painting.html
compositing/overflow/clip-content-under-overflow-controls.html
compositing/generated-content.html
compositing/overflow/remove-overflow-crash2.html
compositing/overflow/content-loses-scrollbars.html
css2.1/t1202-counter-03-b.html
compositing/reflections/nested-reflection-on-overflow.html
css1/pseudo/multiple_pseudo_elements.html
css1/pseudo/firstline.html
css1/pseudo/firstletter.html
compositing/overflow/scrollbar-painting.html
css1/color_and_background/background_attachment.html
compositing/overflow/overflow-scroll.html
compositing/rtl/rtl-absolute-overflow-scrolled.html
css1/color_and_background/background_repeat.html
css1/pseudo/pseudo_elements_in_selectors.html
css2.1/t0510-c25-pseudo-elmnt-00-c.html
css2.1/t1202-counter-00-b.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844274</commentid>
    <comment_count>14</comment_count>
      <attachid>190754</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-28 11:33:38 -0800</bug_when>
    <thetext>Comment on attachment 190754
Patch(revised)

Attachment 190754 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/16758390

New failing tests:
css2.1/t1202-counter-01-b.html
css2.1/t1202-counter-08-b.html
css2.1/t1202-counters-06-b.html
css2.1/t1202-counter-07-b.html
css2.1/t1202-counter-02-b.html
css2.1/t1202-counter-04-b.html
css2.1/t1202-counter-15-b.html
compositing/generated-content.html
css2.1/t1202-counter-16-f.html
css2.1/t1202-counter-13-b.html
css2.1/t1202-counters-03-b.html
css2.1/t1202-counter-12-b.html
http/tests/cookies/third-party-cookie-relaxing.html
css2.1/t1202-counter-09-b.html
css2.1/t1202-counter-14-b.html
css2.1/t1202-counter-11-b.html
css2.1/t1202-counters-01-b.html
css2.1/t1202-counters-04-b.html
css2.1/t1202-counter-05-b.html
css2.1/t1202-counter-06-b.html
css2.1/t1202-counter-03-b.html
css2.1/t1202-counters-02-b.html
css2.1/t1202-counters-00-b.html
css2.1/t1202-counter-00-b.html
css2.1/t1202-counters-05-b.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844290</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-28 11:40:52 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I revised the patch (State&amp; -&gt; const State&amp;) and measured its performance:
&gt; 
&gt; https://docs.google.com/spreadsheet/ccc?key=0AtdkWCxGaEc2dGRtWjlFejIyS1BBamtEcElzM1ZidGc&amp;usp=sharing

FYI, http://trac.webkit.org/wiki/Performance%20Tests#AggregatingandComparingResults

&gt; The spreadsheet compares master&apos;s html5-full-render test with patched one&apos;s html5-full-render test, i.e.
&gt; for both master and patched DumpRenderTree, run xvfb-run out/Release/DumpRenderTree third_party/WebKit/PerformanceTests/Parser/html5-full-render.html --no-timeout
&gt; 
&gt; The result looks almost the same performance. So can I land this patch?

Do you observe a difference when you run the baseline and the one with the old patch? i.e. Can you reproduce the perf. regression we saw on the bots on your machine?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844380</commentid>
    <comment_count>16</comment_count>
      <attachid>190754</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-28 12:52:24 -0800</bug_when>
    <thetext>Comment on attachment 190754
Patch(revised)

Attachment 190754 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/16758428

New failing tests:
css2.1/t1202-counter-01-b.html
css2.1/t1202-counter-08-b.html
css2.1/t1202-counters-06-b.html
css2.1/t1202-counter-07-b.html
css2.1/t1202-counter-02-b.html
css2.1/t1202-counter-04-b.html
css2.1/t1202-counters-12-b.html
css2.1/t1202-counter-15-b.html
css2.1/t1202-counters-09-b.html
compositing/generated-content.html
css2.1/t1202-counters-11-b.html
css2.1/t1202-counter-16-f.html
css2.1/t1202-counters-04-b.html
css2.1/t1202-counters-03-b.html
css2.1/t1202-counter-12-b.html
css2.1/t1202-counters-07-b.html
http/tests/cookies/third-party-cookie-relaxing.html
css2.1/t1202-counter-09-b.html
css2.1/t1202-counters-08-b.html
css2.1/t1202-counter-14-b.html
css2.1/t1202-counter-11-b.html
css2.1/t1202-counters-01-b.html
css2.1/t1202-counter-13-b.html
css2.1/t1202-counter-05-b.html
css2.1/t1202-counter-06-b.html
css2.1/t1202-counter-03-b.html
css2.1/t1202-counters-02-b.html
css2.1/t1202-counters-00-b.html
css2.1/t1202-counter-00-b.html
css2.1/t1202-counters-05-b.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847046</commentid>
    <comment_count>17</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-03-04 16:59:48 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; New failing tests:
&gt; css2.1/t1202-counter-01-b.html
&gt; css2.1/t1202-counter-08-b.html
&gt; css2.1/t1202-counters-06-b.html
&gt; css2.1/t1202-counter-07-b.html
&gt; css2.1/t1202-counter-02-b.html
&gt; css2.1/t1202-counter-04-b.html
&gt; css2.1/t1202-counters-12-b.html
&gt; css2.1/t1202-counter-15-b.html
&gt; css2.1/t1202-counters-09-b.html
&gt; compositing/generated-content.html
&gt; css2.1/t1202-counters-11-b.html
&gt; css2.1/t1202-counter-16-f.html
&gt; css2.1/t1202-counters-04-b.html
&gt; css2.1/t1202-counters-03-b.html
&gt; css2.1/t1202-counter-12-b.html
&gt; css2.1/t1202-counters-07-b.html
&gt; http/tests/cookies/third-party-cookie-relaxing.html
&gt; css2.1/t1202-counter-09-b.html
&gt; css2.1/t1202-counters-08-b.html
&gt; css2.1/t1202-counter-14-b.html
&gt; css2.1/t1202-counter-11-b.html
&gt; css2.1/t1202-counters-01-b.html
&gt; css2.1/t1202-counter-13-b.html
&gt; css2.1/t1202-counter-05-b.html
&gt; css2.1/t1202-counter-06-b.html
&gt; css2.1/t1202-counter-03-b.html
&gt; css2.1/t1202-counters-02-b.html
&gt; css2.1/t1202-counters-00-b.html
&gt; css2.1/t1202-counter-00-b.html
&gt; css2.1/t1202-counters-05-b.html

Are these failures real?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847246</commentid>
    <comment_count>18</comment_count>
      <attachid>191396</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-03-04 21:22:45 -0800</bug_when>
    <thetext>Created attachment 191396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847275</commentid>
    <comment_count>19</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-03-04 22:19:46 -0800</bug_when>
    <thetext>I rebase-lined and fixed cq- errors.

(In reply to comment #15)
&gt; (In reply to comment #12)
&gt; &gt; I revised the patch (State&amp; -&gt; const State&amp;) and measured its performance:

&gt; Do you observe a difference when you run the baseline and the one with the old patch? i.e. Can you reproduce the perf. regression we saw on the bots on your machine?

I compared master build with patched build again. The result was:

https://docs.google.com/spreadsheet/ccc?key=0AtdkWCxGaEc2dGUwbWNEZm1iREQxNHE5WTl1dkVIMGc&amp;usp=sharing

My patch seems to cause about 1% performance regression. I think, this is almost the same performance regression as the old patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1883426</commentid>
    <comment_count>20</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2022-07-13 15:41:46 -0700</bug_when>
    <thetext>This code has been significantly refactored since this patch was proposed. There doesn&apos;t seem to be any action we can take here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1883427</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-07-13 15:42:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/96978025&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1883566</commentid>
    <comment_count>22</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-07-13 23:39:40 -0700</bug_when>
    <thetext>It has indeed been refactored to be a stack object.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188509</attachid>
            <date>2013-02-15 01:24:51 -0800</date>
            <delta_ts>2013-02-20 00:04:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109909-20130215182117.patch</filename>
            <type>text/plain</type>
            <size>238856</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyOTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmNkYzRjYTIxNDA4MjY5
NmJiNzgxNWFmNDFjYzE3OTdhMWUxNDRlNi4uMzJkNGZhY2FmOTE4MDA1MjU2ZjVkZTA3NGE1YzFk
ZWFjODc5ZGQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAxMy0wMi0xNSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmFjdG9yaW5n
XSBNYWtlIG1fc3RhdGUgYW4gb24tc3RhY2sgb2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk5MDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb2RlIG1fc3RhdGUsIGFuIGluc3RhbmNlIG9mIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlLCBhbiBvbi1zdGFjayBvYmplY3QuCisgICAgICAgIFRoZSBzdGF0
ZSBpcyBvbmx5IHJlcXVpcmVkIGluIHN0eWxlRm9yRWxlbWVudCwgc3R5bGVGb3JLZXlmcmFtZSBh
bmQKKyAgICAgICAgc28gb24uIE5vIG5lZWQgdG8ga2VlcCB0aGUgc3RhdGUgb3V0c2lkZSBvZiB0
aG9zZSBtZXRob2RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYmVjYXVzZSBqdXN0IHJlZmFj
dG9yaW5nLgorCisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udmVydFRvTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OmJhc2ljU2hh
cGVGb3JWYWx1ZSk6CisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJlc29sdmVyKiB3aXRoIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNv
bHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAgICAgKENTU0dy
YWRpZW50VmFsdWUpOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJlc29sdmVyKiB3aXRoIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
U3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxl
TWFwOjpzdHlsZUltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0eWxl
TWFwKToKKyAgICAgICAgKENTU1RvU3R5bGVNYXApOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJl
c29sdmVyKiB3aXRoIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvU1ZHQ1NT
U3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KToKKyAgICAgICAgUmVwbGFjZWQgbV9zdGF0ZSB3aXRoIHN0YXRlIHdoaWNo
IGlzIGdpdmVuIGFzIGFuIGFyZ3VtZW50IG9mCisgICAgICAgIGFwcGx5U1ZHUHJvcGVydHkuCisg
ICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5RXhwYW5kaW5nOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5RXhwYW5kaW5nOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5RXhwYW5kaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseUluaXRpYWxWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHQ6OmFwcGx5VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU51bWJlcjo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5U3R5bGVJbWFnZTo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjpjb252ZXJ0VG9MZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEaXJlY3Rpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5U3RyaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlCb3JkZXJSYWRpdXM6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRM
aWdhdHVyZXM6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBs
eUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2VNb2RpZmllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvdW50ZXI6OmVtcHR5RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvdW50ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDb3VudGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDdXJzb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDdXJzb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDdXJzb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eVRleHRBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5VGV4dERlY29yYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6YXBw
bHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBo
YXNpc1N0eWxlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlB
bmltYXRpb246Om1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QW5pbWF0aW9u
OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QW5p
bWF0aW9uOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5QW5pbWF0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlPdXRsaW5lU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVJlc2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5VmVydGljYWxBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0aW86OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlJbml0aWFsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjpyZXNldEVmZmVjdGl2
ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OmFwcGx5SW5oZXJp
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjphcHBseUluaXRp
YWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6YXBwbHlWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6aXNWYWxpZERpc3Bs
YXlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6YXBwbHlJ
bmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmFw
cGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwUGF0aDo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RXhjbHVzaW9uU2hh
cGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVz
b2x1dGlvbjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgICog
Y3NzL1N0eWxlQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQcm9wZXJ0
eUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjphcHBseUluaGVy
aXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6OmFwcGx5SW5pdGlh
bFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIFJlcGxhY2VkIFN0eWxlUmVzb2x2ZXIqIHdpdGggU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6CisgICAg
ICAgIFJlbW92ZWQgbV9zdHlsZU1hcC4gTm93IG1fc3R5bGVNYXAgaXMgYW4gb24tc3RhY2sgb2Jq
ZWN0LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c29ydE1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
aGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hh
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
dHlsZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVu
ZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0
ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzZXRGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpzdHlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZp
bHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIEp1c3QgcmVwbGFjZWQg
bV9zdGF0ZSB3aXRoIHN0YXRlIGFuZCBhZGRlZCBvbmUgbW9yZSBwYXJhbWV0ZXIgdG8KKyAgICAg
ICAgcHJvdmlkZSB0aGUgc3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIFNpbmNlIG1fc3RhdGUgd2FzIHJlbW92ZWQsIHJl
bW92ZWQgYSBjb2RlIGZvciByZXBvcnRpbmcgbV9zdGF0ZSdzCisgICAgICAgIG1lbW9yeSB1c2Fn
ZS4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppc1JpZ2h0UGFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRvY3VtZW50KToKKyAgICAgICAgU2luY2UgU3Rh
dGU6Om1fZWxlbWVudCBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZSAoc29tZXRpbWVzLCAwKSwKKyAg
ICAgICAgYWRkZWQgbV9kb2N1bWVudCB0byBTdGF0ZSBhbmQgbW9kaWZpZWQgdG8gcmV0dXJuIHRo
ZSBtX2RvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnVz
ZVNWR1pvb21SdWxlcyk6CisgICAgICAgIE1vdmVkIFN0eWxlUmVzb2x2ZXIgdG8gU3RhdGUuCisg
ICAgICAgIChTdGF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0Rm9udCk6CisgICAgICAgIE1vdmVkIHRoZSBjb2RlLCB1cGRhdGluZyBhIHN0eWxlIGJ5IHVz
aW5nIGEgZ2l2ZW4gU3R5bGVQcm9wZXJ0eVNldCwKKyAgICAgICAgdG8gU3R5bGVSZXNvbHZlci4K
KwogMjAxMy0wMi0xNCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAg
SW5zcGVjdG9yIGRvZXNuJ3Qgc2hvdyBydWxlcyBmcm9tIHBsdWdpbnNTdHlsZVNoZWV0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAKaW5kZXggM2E4Zjc5NTNiNmY5
NmIwMTJmODQzMjM3YTJlMTJhMGZkZjRjYjEyMS4uYWE2Yjc0ZjI5YmFmYTIzZGEyMDFjZWU2MGQ4
ODkwZDAzZTA1Y2ZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVG
dW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25z
LmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCiAjaW5j
bHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9v
bC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0xMDAsMTIgKzk5LDEyIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yQmFzaWNT
aGFwZShjb25zdCBCYXNpY1NoYXBlKiBiYXNpY1NoYXBlKQogICAgIHJldHVybiBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZTxQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+ID4oYmFzaWNTaGFwZVZh
bHVlLnJlbGVhc2UoKSk7CiB9CiAKLXN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNvbnN0
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkK
K3N0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZS0+
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBGaXhlZEZsb2F0Q29udmVy
c2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4o
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgIHJldHVybiB2
YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBGaXhlZEZsb2F0
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVy
c2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpOwogfQogCi1QYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2lj
U2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjb25zdCBD
U1NCYXNpY1NoYXBlKiBiYXNpY1NoYXBlVmFsdWUpCitQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJh
c2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIGNvbnN0
IENTU0Jhc2ljU2hhcGUqIGJhc2ljU2hhcGVWYWx1ZSkKIHsKICAgICBSZWZQdHI8QmFzaWNTaGFw
ZT4gYmFzaWNTaGFwZTsKIApAQCAtMTE0LDE0ICsxMTMsMTQgQEAgUGFzc1JlZlB0cjxCYXNpY1No
YXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgY28KICAgICAgICAgY29uc3QgQ1NTQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVjdFZhbHVlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQmFzaWNTaGFwZVJlY3RhbmdsZSAqPihiYXNpY1NoYXBlVmFs
dWUpOwogICAgICAgICBSZWZQdHI8QmFzaWNTaGFwZVJlY3RhbmdsZT4gcmVjdCA9IEJhc2ljU2hh
cGVSZWN0YW5nbGU6OmNyZWF0ZSgpOwogCi0gICAgICAgIHJlY3QtPnNldFgoY29udmVydFRvTGVu
Z3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+eCgpKSk7Ci0gICAgICAgIHJlY3QtPnNldFko
Y29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+eSgpKSk7Ci0gICAgICAg
IHJlY3QtPnNldFdpZHRoKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUt
PndpZHRoKCkpKTsKLSAgICAgICAgcmVjdC0+c2V0SGVpZ2h0KGNvbnZlcnRUb0xlbmd0aChzdHls
ZVJlc29sdmVyLCByZWN0VmFsdWUtPmhlaWdodCgpKSk7CisgICAgICAgIHJlY3QtPnNldFgoY29u
dmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPngoKSkpOworICAgICAgICByZWN0LT5zZXRZ
KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT55KCkpKTsKKyAgICAgICAgcmVjdC0+
c2V0V2lkdGgoY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPndpZHRoKCkpKTsKKyAg
ICAgICAgcmVjdC0+c2V0SGVpZ2h0KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT5o
ZWlnaHQoKSkpOwogICAgICAgICBpZiAocmVjdFZhbHVlLT5yYWRpdXNYKCkpIHsKLSAgICAgICAg
ICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1goY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIs
IHJlY3RWYWx1ZS0+cmFkaXVzWCgpKSk7CisgICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRp
dXNYKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT5yYWRpdXNYKCkpKTsKICAgICAg
ICAgICAgIGlmIChyZWN0VmFsdWUtPnJhZGl1c1koKSkKLSAgICAgICAgICAgICAgICByZWN0LT5z
ZXRDb3JuZXJSYWRpdXNZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUt
PnJhZGl1c1koKSkpOworICAgICAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1koY29u
dmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPnJhZGl1c1koKSkpOwogICAgICAgICB9CiAg
ICAgICAgIGJhc2ljU2hhcGUgPSByZWN0LnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7CkBAIC0x
MzAsOSArMTI5LDkgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUo
Y29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAgICAgY29uc3QgQ1NT
QmFzaWNTaGFwZUNpcmNsZSogY2lyY2xlVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1NCYXNp
Y1NoYXBlQ2lyY2xlICo+KGJhc2ljU2hhcGVWYWx1ZSk7CiAgICAgICAgIFJlZlB0cjxCYXNpY1No
YXBlQ2lyY2xlPiBjaXJjbGUgPSBCYXNpY1NoYXBlQ2lyY2xlOjpjcmVhdGUoKTsKIAotICAgICAg
ICBjaXJjbGUtPnNldENlbnRlclgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNs
ZVZhbHVlLT5jZW50ZXJYKCkpKTsKLSAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJZKGNvbnZlcnRU
b0xlbmd0aChzdHlsZVJlc29sdmVyLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWSgpKSk7Ci0gICAgICAg
IGNpcmNsZS0+c2V0UmFkaXVzKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBjaXJjbGVW
YWx1ZS0+cmFkaXVzKCkpKTsKKyAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xl
bmd0aChzdGF0ZSwgY2lyY2xlVmFsdWUtPmNlbnRlclgoKSkpOworICAgICAgICBjaXJjbGUtPnNl
dENlbnRlclkoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWSgpKSk7
CisgICAgICAgIGNpcmNsZS0+c2V0UmFkaXVzKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgY2lyY2xl
VmFsdWUtPnJhZGl1cygpKSk7CiAKICAgICAgICAgYmFzaWNTaGFwZSA9IGNpcmNsZS5yZWxlYXNl
KCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQxLDEwICsxNDAsMTAgQEAgUGFzc1JlZlB0cjxCYXNp
Y1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgY28KICAgICAgICAgY29uc3QgQ1NTQmFzaWNTaGFwZUVsbGlwc2UqIGVsbGlwc2VWYWx1
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU0Jhc2ljU2hhcGVFbGxpcHNlICo+KGJhc2ljU2hhcGVW
YWx1ZSk7CiAgICAgICAgIFJlZlB0cjxCYXNpY1NoYXBlRWxsaXBzZT4gZWxsaXBzZSA9IEJhc2lj
U2hhcGVFbGxpcHNlOjpjcmVhdGUoKTsKIAotICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJYKGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPmNlbnRlclgoKSkpOwot
ICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVy
LCBlbGxpcHNlVmFsdWUtPmNlbnRlclkoKSkpOwotICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNY
KGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1goKSkp
OwotICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29s
dmVyLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1koKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRDZW50
ZXJYKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5jZW50ZXJYKCkpKTsKKyAg
ICAgICAgZWxsaXBzZS0+c2V0Q2VudGVyWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VW
YWx1ZS0+Y2VudGVyWSgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1goY29udmVydFRv
TGVuZ3RoKHN0YXRlLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1goKSkpOworICAgICAgICBlbGxpcHNl
LT5zZXRSYWRpdXNZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5yYWRpdXNZ
KCkpKTsKIAogICAgICAgICBiYXNpY1NoYXBlID0gZWxsaXBzZS5yZWxlYXNlKCk7CiAgICAgICAg
IGJyZWFrOwpAQCAtMTU2LDcgKzE1NSw3IEBAIFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNT
aGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvCiAgICAg
ICAgIHBvbHlnb24tPnNldFdpbmRSdWxlKHBvbHlnb25WYWx1ZS0+d2luZFJ1bGUoKSk7CiAgICAg
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+ID4mIHZhbHVlcyA9IHBv
bHlnb25WYWx1ZS0+dmFsdWVzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2
YWx1ZXMuc2l6ZSgpOyBpICs9IDIpCi0gICAgICAgICAgICBwb2x5Z29uLT5hcHBlbmRQb2ludChj
b252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgdmFsdWVzLmF0KGkpLmdldCgpKSwgY29udmVy
dFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHZhbHVlcy5hdChpICsgMSkuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIHBvbHlnb24tPmFwcGVuZFBvaW50KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgdmFsdWVz
LmF0KGkpLmdldCgpKSwgY29udmVydFRvTGVuZ3RoKHN0YXRlLCB2YWx1ZXMuYXQoaSArIDEpLmdl
dCgpKSk7CiAKICAgICAgICAgYmFzaWNTaGFwZSA9IHBvbHlnb24ucmVsZWFzZSgpOwogICAgICAg
ICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rp
b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oCmluZGV4IGQz
NjA3ZTkwOTkyOWMzNDFiMGMwNjlkM2U1Y2ViNjFmMTNmMTE3MTkuLmU1NjMyMDY4NzY4YTY3MDFm
ODAzZmIyYWZlZjU0ODk4NTMxZDExZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9C
YXNpY1NoYXBlRnVuY3Rpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVG
dW5jdGlvbnMuaApAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBCYXNpY1NoYXBlRnVuY3Rpb25z
X2gKICNkZWZpbmUgQmFzaWNTaGFwZUZ1bmN0aW9uc19oCiAKKyNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMzcsMTAgKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQmFzaWNTaGFw
ZTsKIGNsYXNzIENTU0Jhc2ljU2hhcGU7CiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIFN0eWxlUmVz
b2x2ZXI7CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yQmFzaWNTaGFwZShjb25zdCBC
YXNpY1NoYXBlKik7Ci1QYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShj
b25zdCBTdHlsZVJlc29sdmVyKiwgY29uc3QgQ1NTQmFzaWNTaGFwZSopOworUGFzc1JlZlB0cjxC
YXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
LCBjb25zdCBDU1NCYXNpY1NoYXBlKik7CiAKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IDhmMTY4YWI3MmNlMzA3NTZkZTAzNDE3ODRkZjgwMGZk
Mzc2MGJmMmUuLmU1NjVlZmY1YWU0MTg4MzZmNWRlZDIxNDc3OWEwNDhjZWVkYjk4ZGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNp
bmNsdWRlICJJbnRTaXplSGFzaC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNs
dWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL01lbW9y
eUluc3RydW1lbnRhdGlvblZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KQEAgLTExNSwxMSArMTE0LDExIEBAIHN0cnVjdCBHcmFkaWVudFN0b3AgewogICAgIHsg
fQogfTsKIAotUGFzc1JlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpn
cmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
UGFzc1JlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdp
dGhTdHlsZXNSZXNvbHZlZChTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiB7CiAgICAgYm9v
bCBkZXJpdmVkID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMu
c2l6ZSgpOyBpKyspCi0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRp
dmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KG1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSkpIHsK
KyAgICAgICAgaWYgKFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJp
dmVkRnJvbUVsZW1lbnQobV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKSkgewogICAgICAgICAgICAg
bV9zdG9wc1tpXS5tX2NvbG9ySXNEZXJpdmVkRnJvbUVsZW1lbnQgPSB0cnVlOwogICAgICAgICAg
ICAgZGVyaXZlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEzOCw3ICsxMzcsNyBA
QCBQYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50
V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUgogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZXN1bHQtPm1fc3RvcHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJlc3VsdC0+bV9z
dG9wc1tpXS5tX3Jlc29sdmVkQ29sb3IgPSBzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRp
dmVWYWx1ZShyZXN1bHQtPm1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSk7CisgICAgICAgIHJlc3Vs
dC0+bV9zdG9wc1tpXS5tX3Jlc29sdmVkQ29sb3IgPSBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21Q
cmltaXRpdmVWYWx1ZShzdGF0ZSwgcmVzdWx0LT5tX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpOwog
CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRp
ZW50VmFsdWUuaAppbmRleCA4ZTFjNzdiNjQxMTBkOTk2N2QzNzIxYjFjYWZjMDVmMjlmODExNTJm
Li40NTk4MWUyZTU2YWZlMzFjMWY4NzZmODAxNGEwZTJhOGNkODhkMWE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNT
U0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgor
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC04OSw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICBib29s
IGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIHZvaWQg
bG9hZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciopIHsgfQotICAgIFBhc3NSZWZQdHI8
Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZl
ciopOworICAgIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRXaXRoU3R5bGVz
UmVzb2x2ZWQoU3R5bGVSZXNvbHZlcjo6U3RhdGUmKTsKIAogcHJvdGVjdGVkOgogICAgIENTU0dy
YWRpZW50VmFsdWUoQ2xhc3NUeXBlIGNsYXNzVHlwZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0
LCBDU1NHcmFkaWVudFR5cGUgZ3JhZGllbnRUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVN
YXAuY3BwCmluZGV4IDcyMWZkOGU5MDFiNWViYmYxY2Y2Y2Q3NDlmYThmNTNmMWNmYmE0OWIuLmZk
YzA0Y2FmZDMwNmRhOTY4MDBlMGFlMzZhZTg3NjYyNzdjMWZiZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVG9TdHlsZU1hcC5jcHAKQEAgLTQzLDIyICs0MywyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpzdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fcmVzb2x2ZXItPnN0eWxlKCk7CisgICAgcmV0dXJuIG1fc3RhdGUuc3R5bGUoKTsKIH0K
ICAgICAKIFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0eWxlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpOworICAgIHJl
dHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsKIH0KIAogYm9vbCBDU1NUb1N0eWxlTWFw
Ojp1c2VTVkdab29tUnVsZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT51c2VT
Vkdab29tUnVsZXMoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS51c2VTVkdab29tUnVsZXMoKTsKIH0K
ICAgICAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gQ1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
bV9yZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eUlkLCB2YWx1ZSk7CisgICAgcmV0dXJuIFN0
eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UobV9zdGF0ZSwgcHJvcGVydHlJZCwgdmFsdWUpOwogfQog
CiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1h
cC5oCmluZGV4IDNjYjEyMTUwYTg0M2U4YTQ4ZTM5YTViNTQxMzU3NTkyOTRjNDE2NzMuLjdmODcy
MGE0ODZjOTJjYTRjMzBhZjY0MzRkZThmOThkYjdlMmRiZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Rv
U3R5bGVNYXAuaApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgogI2luY2x1ZGUgIkxlbmd0aEJveC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIg
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzIsNyArMzMsNiBAQCBjbGFzcyBDU1NWYWx1
ZTsKIGNsYXNzIEFuaW1hdGlvbjsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3R5bGVJbWFn
ZTsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CiBjbGFzcyBOaW5lUGllY2VJbWFnZTsKIAogY2xhc3Mg
Q1NTVG9TdHlsZU1hcCB7CkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIENTU1RvU3R5bGVNYXAgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgQ1NTVG9TdHlsZU1h
cChTdHlsZVJlc29sdmVyKiByZXNvbHZlcikgOiBtX3Jlc29sdmVyKHJlc29sdmVyKSB7IH0KKyAg
ICBDU1NUb1N0eWxlTWFwKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkgOiBtX3N0YXRlKHN0
YXRlKSB7IH0KIAogICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmls
bExheWVyKiwgQ1NTVmFsdWUqKTsKICAgICB2b2lkIG1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciosIENTU1ZhbHVlKik7CkBAIC04Miw3ICs4Miw3IEBAIHByaXZhdGU6CiAgICAg
Ly8gZHVyaW5nIHRoZSByZXNvbHZlLgogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJ
bWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwogCi0gICAgU3R5bGVSZXNvbHZlciogbV9y
ZXNvbHZlcjsKKyAgICBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgbV9zdGF0ZTsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCBkMWU5YzYwZDNi
OWRlZDdlMjBmYzc2NWU5Yzc3YTQzMTZlM2I2ZDEzLi45MjZjNjkxYThiZjQ2ODZkYTE4Yzk1YTQ4
YzYxM2IyMWU2NmNiNjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0
b3IuY3BwCkBAIC0xMDIsMTQgKzEwMiwxMyBAQCBzdGF0aWMgQ29sb3IgY29sb3JGcm9tU1ZHQ29s
b3JDU1NWYWx1ZShTVkdDb2xvciogc3ZnQ29sb3IsIGNvbnN0IENvbG9yJiBmZ0NvbG9yKQogICAg
IHJldHVybiBjb2xvcjsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlTVkdQcm9wZXJ0eShjb25zdCBTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IDA7CiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCiAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7CiAKLSAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIFNW
R1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7
CiAKICAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJ
bmhlcml0ZWRWYWx1ZSgpOwpAQCAtMjMxLDE2ICsyMzAsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewogICAgICAgICAgICAgICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVudFN0eWxlKCkt
PnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQ
YXJlbnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50Q29s
b3IoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRU
eXBlKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+
ZmlsbFBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0
ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFs
RmlsbFBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludENvbG9yKCks
IFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxG
aWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwg
U1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRVcmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQYWludCogc3Zn
UGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBz
dmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZH
Q29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1BhaW50
LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWlu
dChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFp
bnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIHN0YXRlLmFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTI0OCwxNiArMjQ3LDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOwotICAg
ICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYXJlbnRTdHlsZS0+c3Ry
b2tlUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludENvbG9yKCksIHN2Z1Bh
cmVudFN0eWxlLT5zdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
KSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBz
dmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgp
LCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ry
b2tlUGFpbnRVcmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRl
LmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlh
bFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29s
b3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBhcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsK
KyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxTdHJva2VQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQ
YWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRVcmkoKSwgc3Rh
dGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAg
ICBTVkdQYWludCogc3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlw
ZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5j
b2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwg
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdz
dHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdD
b2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQt
PnVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC01NzAsNyArNTY5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5n
dGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpIDogMDsKICAg
ICAgICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAg
ICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3Iu
Z2V0KCkpOworICAgICAgICAgICAgICAgIGNvbG9yID0gU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNvbG9yLmdldCgpKTsKIAogICAgICAgICAgICAg
Ly8gLXdlYmtpdC1zdmctc2hhZG93IGRvZXMgc2hvdWxkIG5vdCBoYXZlIGEgc3ByZWFkIG9yIHN0
eWxlCiAgICAgICAgICAgICBBU1NFUlQoIWl0ZW0tPnNwcmVhZCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZUJ1aWxkZXIuY3BwCmluZGV4IDRkODc4YjJlOWIzMjVlMjVlZTM2YWQ4Y2JmMmIyMDBmMmYzODIx
MGEuLjFiYjYxMDRlZjllMmE2OGUzN2FhZTJkMWNjODBkZDIxYmI0MjI4MWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
LSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCkBAIC02MSw3ICs2MCw3IEBAIGNsYXNz
IEFwcGx5UHJvcGVydHlFeHBhbmRpbmcgewogcHVibGljOgogCiAgICAgdGVtcGxhdGUgPENTU1By
b3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewogICAgICAgICBpZiAo
aWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjksMjAg
KzY4LDIwIEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgU3R5bGVCdWlsZGVyJiB0YWJsZSA9IFN0
eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CiAgICAgICAgIGNvbnN0IFByb3BlcnR5
SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFuZGxlcihpZCk7CiAgICAgICAgIGlm
IChoYW5kbGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFs
dWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5
SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAg
ewotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0eWxlUmVz
b2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZvdXI+KHByb3BlcnR5SUQs
IHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmaXZlPihwcm9wZXJ0
eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8b25lPihwcm9w
ZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHR3bz4ocHJvcGVydHlJ
RCwgc3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwg
c3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdGF0
ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0YXRlKTsK
ICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC05MCwyMCArODksMjAgQEAgcHVibGljOgogICAgICAgICBj
b25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxk
ZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUucHJv
cGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVy
KTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3Rh
dGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVl
PG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZh
bHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5pdGlh
bFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgYXBwbHlJ
bml0aWFsVmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFw
cGx5SW5pdGlhbFZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAg
ICBhcHBseUluaXRpYWxWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBw
bHlJbml0aWFsVmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5p
dGlhbFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5pdGlh
bFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFs
dWU8Zml2ZT4ocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxDU1NQ
cm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTExLDE5ICsxMTAsMTkgQEAgcHVibGljOgogICAgICAgICBjb25zdCBT
dHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKTsK
ICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUucHJvcGVydHlI
YW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAgICAgICAgICAg
aGFuZGxlci5hcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAg
ICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYg
KCFleHBhbmRWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBhcHBseVZhbHVl
PG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBseVZh
bHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBs
eVZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgICAg
IGFwcGx5VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAg
ICAgICBhcHBseVZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsK
KyAgICAgICAgYXBwbHlWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIGFwcGx5VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBh
cHBseVZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBhcHBs
eVZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFs
dWU8Zml2ZT4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKICAgICB9CiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZh
cHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KIH07
CkBAIC0xMzQsOSArMTMzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJl
bmRlclN0eWxlKiBzdHlsZSwgU2V0dGVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5j
dGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIEdldHRlclR5cGUgdmFsdWUoUmVuZGVyU3R5bGUq
IHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPipnZXR0ZXJGdW5jdGlvbikoKTsgfQogICAgIHN0YXRp
YyBJbml0aWFsVHlwZSBpbml0aWFsKCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24pKCk7IH0K
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKSB7IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IHZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsgfQotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW5pdGlhbCgpKTsgfQot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcios
IENTU1ZhbHVlKikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKSB7IHNldFZhbHVlKHN0YXRlLnN0
eWxlKCksIHZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsgfQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSkgeyBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbml0aWFsKCkpOyB9CisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYsIENTU1Zh
bHVlKikgeyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyBy
ZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZh
bHVlLCAmYXBwbHlWYWx1ZSk7IH0KIH07CiAKQEAgLTE0NCwxMCArMTQzLDEwIEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBHZXR0ZXJUeXBlLCBHZXR0ZXJUeXBlIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1
bmN0aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBseVByb3BlcnR5RGVmYXVsdCB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZh
bHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
ICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgKnN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKTsKICAgICB9CiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xNjAsMTYgKzE1OSwxNiBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTnVtYmVyVHlwZSwgTnVtYmVyVHlwZSAoUmVuZGVyU3R5bGU6
OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdAogY2xhc3MgQXBwbHlQcm9wZXJ0eU51bWJlciB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBOdW1i
ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gaWRNYXBzVG9NaW51c09uZSkKLSAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIC0xKTsKKyAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksIC0xKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlPE51
bWJlclR5cGU+KENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICBz
ZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVtYmVyVHlw
ZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICB9CiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xODEsNyArMTgwLDcgQEAg
cHVibGljOgogdGVtcGxhdGUgPFN0eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0
aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+KSwgU3R5bGVJbWFnZSogKCppbml0aWFsRnVuY3Rpb24pKCksIENTU1By
b3BlcnR5SUQgcHJvcGVydHk+CiBjbGFzcyBBcHBseVByb3BlcnR5U3R5bGVJbWFnZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0
eSwgdmFsdWUpKTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0YXRlLnN0
eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwg
cHJvcGVydHksIHZhbHVlKSk7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKQogICAgIHsKICAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVBy
b3BlcnR5RGVmYXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRpYWxGdW5jdGlv
bj46OmNyZWF0ZUhhbmRsZXIoKTsKQEAgLTE5OCwyOCArMTk3LDI4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgYm9vbCBoYXNBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4q
aGFzQXV0b0Z1bmN0aW9uKSgpOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0byhSZW5kZXJTdHls
ZSogc3R5bGUpIHsgKHN0eWxlLT4qc2V0QXV0b0Z1bmN0aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGlmIChoYXNB
dXRvKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKQotICAgICAgICAgICAgc2V0QXV0byhz
dHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKKyAgICAgICAgaWYgKGhhc0F1dG8oc3RhdGUucGFyZW50
U3R5bGUoKSkpCisgICAgICAgICAgICBzZXRBdXRvKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCB2YWx1ZShz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCB2YWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikgeyBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOyB9CisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
cjo6U3RhdGUmIHN0YXRlKSB7IHNldEF1dG8oc3RhdGUuc3R5bGUoKSk7IH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBhdXRvSWRlbnRpdHkpCi0gICAgICAgICAgICBzZXRB
dXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOworICAgICAgICAgICAgc2V0QXV0byhzdGF0ZS5z
dHlsZSgpKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IE51bWJlcikKLSAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7Cisg
ICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCAqcHJpbWl0aXZlVmFsdWUpOwogICAg
ICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gQ29tcHV0ZUxlbmd0aCkKLSAgICAgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50
U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAg
ICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxl
bmd0aDxUPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhh
bmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhl
cml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0yMjcsMjcg
KzIyNiwyNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlDbGlwIHsKIHByaXZhdGU6
Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9MZW5ndGgoU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBMZW5ndGggY29u
dmVydFRvTGVuZ3RoKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTUHJpbWl0aXZlVmFs
dWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8
Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252
ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVz
b2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJ
bnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9u
IHwgQXV0b0NvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUo
KSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICB9CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJp
dFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlKQogICAgIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
c3RhdGUucGFyZW50U3R5bGUoKTsKICAgICAgICAgaWYgKCFwYXJlbnRTdHlsZS0+aGFzQ2xpcCgp
KQotICAgICAgICAgICAgcmV0dXJuIGFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxl
UmVzb2x2ZXIpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHBhcmVu
dFN0eWxlLT5jbGlwVG9wKCksIHBhcmVudFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUt
PmNsaXBCb3R0b20oKSwgcGFyZW50U3R5bGUtPmNsaXBMZWZ0KCkpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOworICAgICAgICAgICAgcmV0dXJuIGFw
cGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q2xpcChwYXJlbnRTdHlsZS0+Y2xpcFRvcCgpLCBwYXJlbnRTdHlsZS0+Y2xpcFJpZ2h0
KCksIHBhcmVudFN0eWxlLT5jbGlwQm90dG9tKCksIHBhcmVudFN0eWxlLT5jbGlwTGVmdCgpKTsK
KyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgo
KSwgTGVuZ3RoKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlw
KGZhbHNlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3Ro
KCksIExlbmd0aCgpLCBMZW5ndGgoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0Ns
aXAoZmFsc2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNTUsMTUgKzI1NCwx
NSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgICAgIGlmIChS
ZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUtPmdldFJlY3RWYWx1ZSgpKSB7Ci0gICAgICAgICAg
ICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPnRvcCgp
KTsKLSAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29s
dmVyLCByZWN0LT5yaWdodCgpKTsKLSAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0
VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+Ym90dG9tKCkpOwotICAgICAgICAgICAgTGVu
Z3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+bGVmdCgpKTsK
LSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAodG9wLCByaWdodCwg
Ym90dG9tLCBsZWZ0KTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhh
c0NsaXAodHJ1ZSk7CisgICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0
YXRlLCByZWN0LT50b3AoKSk7CisgICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9M
ZW5ndGgoc3RhdGUsIHJlY3QtPnJpZ2h0KCkpOworICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9
IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdC0+Ym90dG9tKCkpOworICAgICAgICAgICAgTGVu
Z3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3QtPmxlZnQoKSk7CisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOwogICAgICAgICB9IGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykgewotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3Ro
KCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENs
aXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOworICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTI4MSw0MCArMjgwLDQwIEBAIHRlbXBsYXRlIDxDb2xvckluaGVyaXQgaW5oZXJpdENvbG9yRnJv
bVBhcmVudCwKICAgICAgICAgICBDb2xvciAoKmluaXRpYWxGdW5jdGlvbikoKSA9ICZkZWZhdWx0
SW5pdGlhbENvbG9yPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbG9yIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIC8v
IFZpc2l0ZWQgbGluayBzdHlsZSBjYW4gbmV2ZXIgZXhwbGljaXRseSBpbmhlcml0IGZyb20gcGFy
ZW50IHZpc2l0ZWQgbGluayBzdHlsZSBzbyBubyBzZXBhcmF0ZSBnZXR0ZXJzIGFyZSBuZWVkZWQu
Ci0gICAgICAgIENvbG9yIGNvbG9yID0gKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipn
ZXR0ZXJGdW5jdGlvbikoKTsKLSAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0eWxlUmVzb2x2ZXIs
IGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkt
PipkZWZhdWx0RnVuY3Rpb24pKCkpOworICAgICAgICBDb2xvciBjb2xvciA9IChzdGF0ZS5wYXJl
bnRTdHlsZSgpLT4qZ2V0dGVyRnVuY3Rpb24pKCk7CisgICAgICAgIGFwcGx5Q29sb3JWYWx1ZShz
dGF0ZSwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiAoc3RhdGUucGFyZW50U3R5bGUoKS0+KmRl
ZmF1bHRGdW5jdGlvbikoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
OjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNv
bHZlciwgaW5pdGlhbEZ1bmN0aW9uKCkpOworICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3RhdGUs
IGluaXRpYWxGdW5jdGlvbigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYg
KGluaGVyaXRDb2xvckZyb21QYXJlbnQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICBhcHBseUluaGVyaXRWYWx1ZShwcm9w
ZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlKHBy
b3BlcnR5SUQsIHN0YXRlKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3R5bGVS
ZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0gICAgICAgICAgICAgICAg
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpKTsKLSAgICAgICAgICAgIGlm
IChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAg
ICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1
bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVW
YWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8gdHJ1ZSkpOworICAgICAgICAgICAgaWYgKHN0YXRl
LmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIChzdGF0ZS5z
dHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSkpOworICAgICAgICAgICAgaWYgKHN0YXRlLmFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAoc3RhdGUu
c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OmNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExp
bmsgKi8gdHJ1ZSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlD
b2xvclZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENvbG9yJiBjb2xv
cikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUNvbG9yVmFsdWUoU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlLCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgewotICAgICAgICBpZiAoc3R5bGVSZXNv
bHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0gICAgICAgICAgICAoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShjb2xvcik7Ci0gICAgICAgIGlmIChz
dHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAgICAg
ICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24p
KGNvbG9yKTsKKyAgICAgICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgp
KQorICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoY29sb3IpOwor
ICAgICAgICBpZiAoc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQorICAg
ICAgICAgICAgKHN0YXRlLnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShjb2xv
cik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkg
eyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlh
bFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTMyMywxMSArMzIyLDExIEBAIHB1YmxpYzoKIHRl
bXBsYXRlIDxUZXh0RGlyZWN0aW9uIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShUZXh0RGlyZWN0aW9uKSwg
VGV4dERpcmVjdGlvbiAoKmluaXRpYWxGdW5jdGlvbikoKT4KIGNsYXNzIEFwcGx5UHJvcGVydHlE
aXJlY3Rpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
LSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dERpcmVjdGlvbiwgZ2V0dGVyRnVuY3Rp
b24sIFRleHREaXJlY3Rpb24sIHNldHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBpbml0aWFs
RnVuY3Rpb24+OjphcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsK
LSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKTsKLSAg
ICAgICAgaWYgKGVsZW1lbnQgJiYgc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpID09IGVsZW1lbnQt
PmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICBBcHBseVByb3BlcnR5RGVm
YXVsdDxUZXh0RGlyZWN0aW9uLCBnZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgc2V0dGVy
RnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIGluaXRpYWxGdW5jdGlvbj46OmFwcGx5VmFsdWUocHJv
cGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRl
LmVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgc3RhdGUuZWxlbWVudCgpID09IGVs
ZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQogICAgICAgICAgICAgZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7CiAg
ICAgfQogCkBAIC0zNTQsNyArMzUzLDcgQEAgdGVtcGxhdGUgPExlbmd0aCAoUmVuZGVyU3R5bGU6
OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwKIGNsYXNzIEFwcGx5UHJvcGVydHlMZW5ndGggewog
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTGVu
Z3RoIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzYyLDM5ICszNjEsMzkgQEAgcHVibGljOgogICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKG5vbmVFbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewogICAgICAgICAgICAgaWYgKG5vbmVVbmRlZmlu
ZWQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVu
Z3RoKFVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCks
IExlbmd0aChVbmRlZmluZWQpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7CisgICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKCkpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChsZWdhY3lJbnRyaW5zaWNFbmFibGVkKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCi0gICAgICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNpYykpOworICAg
ICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChJbnRyaW5zaWMpKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlTWluSW50cmluc2ljKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIExlbmd0aChNaW5JbnRyaW5zaWMpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoTWluSW50cmluc2ljKSk7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGludHJpbnNpY0VuYWJsZWQpIHsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQpCi0gICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1pbkNvbnRlbnQpKTsK
KyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoTWluQ29udGVu
dCkpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVXZWJraXRNYXhDb250ZW50KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNYXhDb250ZW50KSk7CisgICAgICAgICAgICAgICAg
c2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1heENvbnRlbnQpKTsKICAgICAgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlV2Via2l0Rmls
bEF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
YXRlLnN0eWxlKCksIExlbmd0aChGaWxsQXZhaWxhYmxlKSk7CiAgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZpdENvbnRlbnQp
Ci0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3Ro
KEZpdENvbnRlbnQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBM
ZW5ndGgoRml0Q29udGVudCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGF1dG9FbmFibGVk
ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aCgpKTsKKyAgICAgICAg
ICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIExlbmd0aCBsZW5ndGgg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBsZW5ndGggPSBw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAg
ICAgICAgICAgIGxlbmd0aC5zZXRRdWlyayhwcmltaXRpdmVWYWx1ZS0+aXNRdWlya1ZhbHVlKCkp
OwotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbGVuZ3RoKTsK
KyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGxlbmd0aCk7CiAgICAgICAgIH0g
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXRE
b3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHls
ZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpKTsK
ICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VX
aXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKKyAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVl
KCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
c3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwogICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBl
cmNlbnRhZ2VMZW5ndGgoKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBw
cmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpOwogICAgIH0KIAogICAg
IHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC00MDksMTYgKzQwOCwx
NiBAQCB0ZW1wbGF0ZSA8U3RyaW5nSWRlbnRCZWhhdmlvciBpZGVudEJlaGF2aW9yLCBjb25zdCBB
dG9taWNTdHJpbmcmIChSZW5kZXJTdHlsZTo6KgogY2xhc3MgQXBwbHlQcm9wZXJ0eVN0cmluZyB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1
ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAg
ICAgICAgaWYgKChpZGVudEJlaGF2aW9yID09IE1hcE5vbmVUb051bGwgJiYgcHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgfHwgKGlkZW50QmVo
YXZpb3IgPT0gTWFwQXV0b1RvTnVsbCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZUF1dG8pKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgbnVsbEF0b20pOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgbnVsbEF0
b20pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgICAgICBz
ZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7
CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAg
ewpAQCAtNDMxLDcgKzQzMCw3IEBAIHRlbXBsYXRlIDxMZW5ndGhTaXplIChSZW5kZXJTdHlsZTo6
KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6CiBjbGFzcyBBcHBs
eVByb3BlcnR5Qm9yZGVyUmFkaXVzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1
ZShSZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0aFNpemUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVy
RnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00NDgsMTcgKzQ0Nywx
NyBAQCBwdWJsaWM6CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPmZpcnN0KCktPmlzVmlld3BvcnRQ
ZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAgICAgICByYWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0
KCktPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgICAgICBlbHNlIGlmIChwYWlyLT5m
aXJzdCgpLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQotICAgICAgICAgICAg
cmFkaXVzV2lkdGggPSBMZW5ndGgoKHBhaXItPmZpcnN0KCktPmNzc0NhbGNWYWx1ZSgpLT50b0Nh
bGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKKyAg
ICAgICAgICAgIHJhZGl1c1dpZHRoID0gTGVuZ3RoKChwYWlyLT5maXJzdCgpLT5jc3NDYWxjVmFs
dWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUo
KSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAg
IHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRl
LnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKHBhaXItPnNlY29uZCgpLT5pc1BlcmNlbnRhZ2UoKSkK
ICAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aChwYWlyLT5zZWNvbmQoKS0+Z2V0RG91
YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPnNlY29uZCgpLT5p
c1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0g
cGFpci0+c2Vjb25kKCktPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgICAgICBlbHNl
IGlmIChwYWlyLT5zZWNvbmQoKS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkK
LSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aCgocGFpci0+c2Vjb25kKCktPmNzc0Nh
bGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29s
dmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSkpKTsKKyAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aCgocGFpci0+c2Vj
b25kKCktPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVy
LT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBwYWlyLT5zZWNvbmQoKS0+Y29tcHV0
ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
c3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaW50IHdpZHRoID0gcmFk
aXVzV2lkdGgudmFsdWUoKTsKICAgICAgICAgaW50IGhlaWdodCA9IHJhZGl1c0hlaWdodC52YWx1
ZSgpOwogICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCkBAIC00NjksNyArNDY4
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmFkaXVzV2lkdGggPSByYWRpdXNIZWlnaHQ7IC8v
IE51bGwgb3V0IHRoZSBvdGhlciB2YWx1ZS4KIAogICAgICAgICBMZW5ndGhTaXplIHNpemUocmFk
aXVzV2lkdGgsIHJhZGl1c0hlaWdodCk7Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHNpemUpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzaXplKTsK
ICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7
CkBAIC01MDMsMTEgKzUwMiwxMSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKICAgICAgICAgICB2
b2lkIChDU1NUb1N0eWxlTWFwOjoqbWFwRmlsbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBGaWxs
TGF5ZXIqLCBDU1NWYWx1ZSopPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUZpbGxMYXllciB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4q
YWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0g
KHN0YXRlLnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKICAgICAgICAgRmlsbExh
eWVyKiBwcmV2Q2hpbGQgPSAwOwotICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIGN1cnJQYXJlbnQg
PSAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+KmxheWVyc0Z1bmN0aW9uKSgpOworICAg
ICAgICBjb25zdCBGaWxsTGF5ZXIqIGN1cnJQYXJlbnQgPSAoc3RhdGUucGFyZW50U3R5bGUoKS0+
KmxheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICB3aGlsZSAoY3VyclBhcmVudCAmJiAoY3VyclBh
cmVudC0+KnRlc3RGdW5jdGlvbikoKSkgewogICAgICAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsK
ICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgbGF5ZXIuKi8KQEAgLTUyNywx
OCArNTI2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRmlsbExheWVyKiBj
dXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9u
KSgpOworICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdGF0ZS5zdHlsZSgpLT4qYWNj
ZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIChjdXJyQ2hpbGQtPipzZXRGdW5jdGlvbiko
KCppbml0aWFsRnVuY3Rpb24pKGZpbGxMYXllclR5cGUpKTsKICAgICAgICAgZm9yIChjdXJyQ2hp
bGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgY3VyckNoaWxkOyBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQt
Pm5leHQoKSkKICAgICAgICAgICAgIChjdXJyQ2hpbGQtPipjbGVhckZ1bmN0aW9uKSgpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIEZp
bGxMYXllciogY3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlv
bikoKTsKICAgICAgICAgRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAwOworICAgICAgICBDU1NUb1N0
eWxlTWFwIHN0eWxlTWFwKHN0YXRlKTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgp
CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgICAgICYmICF2YWx1ZS0+aXNJbWFnZVNl
dFZhbHVlKCkKQEAgLTU1MiwxMiArNTUyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgY3VyckNoaWxkID0gbmV3IEZpbGxMYXllcihmaWxsTGF5ZXJUeXBlKTsKICAgICAgICAgICAg
ICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRmlsbEZ1
bmN0aW9uKShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhpKSk7CisgICAgICAgICAgICAgICAgKHN0eWxlTWFwLiptYXBGaWxsRnVuY3Rpb24p
KHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KGkpKTsKICAgICAgICAgICAgICAgICBwcmV2Q2hpbGQgPSBjdXJyQ2hpbGQ7CiAgICAgICAgICAg
ICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1h
cEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZSk7CisgICAgICAgICAg
ICAoc3R5bGVNYXAuKm1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1
ZSk7CiAgICAgICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsKICAgICAgICAg
fQogICAgICAgICB3aGlsZSAoY3VyckNoaWxkKSB7CkBAIC01ODMsNyArNTgzLDcgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsCiBjbGFzcyBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBUIHZhbHVl
KSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgLy8gbm90ZTogQ1NTUHJvcGVydHlMZXR0ZXIvV29yZFNwYWNpbmcgcmlnaHQgbm93IHNl
dHMgdG8gemVybyBpZiBpdCdzIG5vdCBhIHByaW1pdGl2ZSB2YWx1ZSBmb3Igc29tZSByZWFzb24u
Li4KICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQpAQCAtNjAyLDEzICs2
MDIsMTMgQEAgcHVibGljOgogICAgICAgICB9IGVsc2UgaWYgKHRoaWNrbmVzc0VuYWJsZWQgJiYg
aWRlbnQgPT0gQ1NTVmFsdWVUaGljaykgewogICAgICAgICAgICAgbGVuZ3RoID0gNTsKICAgICAg
ICAgfSBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZUludmFsaWQpIHsKLSAgICAgICAgICAgIGZs
b2F0IHpvb20gPSAoc3ZnWm9vbUVuYWJsZWQgJiYgc3R5bGVSZXNvbHZlci0+dXNlU1ZHWm9vbVJ1
bGVzKCkpID8gMS4wZiA6IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsK
KyAgICAgICAgICAgIGZsb2F0IHpvb20gPSAoc3ZnWm9vbUVuYWJsZWQgJiYgc3RhdGUudXNlU1ZH
Wm9vbVJ1bGVzKCkpID8gMS4wZiA6IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAog
ICAgICAgICAgICAgLy8gQW55IG9yaWdpbmFsIHJlc3VsdCB0aGF0IHdhcyA+PSAxIHNob3VsZCBu
b3QgYmUgYWxsb3dlZCB0byBmYWxsIGJlbG93IDEuCiAgICAgICAgICAgICAvLyBUaGlzIGtlZXBz
IGJvcmRlciBsaW5lcyBmcm9tIHZhbmlzaGluZy4KLSAgICAgICAgICAgIGxlbmd0aCA9IHByaW1p
dGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxl
UmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CisgICAgICAgICAgICBsZW5ndGgg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHpvb20pOwogICAgICAgICAgICAgaWYgKHpvb20gPCAxLjBmICYm
IGxlbmd0aCA8IDEuMCkgewotICAgICAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIDEuMCk7CisgICAgICAgICAgICAgICAgVCBv
cmlnaW5hbExlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0YXRlLnN0
eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wKTsKICAgICAgICAgICAgICAgICBp
ZiAob3JpZ2luYWxMZW5ndGggPj0gMS4wKQogICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAx
LjA7CiAgICAgICAgICAgICB9CkBAIC02MTgsNyArNjE4LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgbGVuZ3RoID0gMDsKICAgICAgICAgfQogCi0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIGxlbmd0aCk7CisgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGxl
bmd0aCk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigp
CiAgICAgewpAQCAtNjMwLDI4ICs2MzAsMjggQEAgcHVibGljOgogdGVtcGxhdGUgPHR5cGVuYW1l
IFQsIFQgKEZvbnREZXNjcmlwdGlvbjo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChG
b250RGVzY3JpcHRpb246OipzZXR0ZXJGdW5jdGlvbikoVCksIFQgaW5pdGlhbFZhbHVlPgogY2xh
c3MgQXBwbHlQcm9wZXJ0eUZvbnQgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAo
Zm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0eWxlUmVzb2x2ZXItPnBhcmVudEZv
bnREZXNjcmlwdGlvbigpLipnZXR0ZXJGdW5jdGlvbikoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAg
ICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKSgoc3RhdGUucGFyZW50Rm9udERl
c2NyaXB0aW9uKCkuKmdldHRlckZ1bmN0aW9uKSgpKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRp
b24oKTsKICAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKGluaXRpYWxW
YWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIChmb250RGVzY3Jp
cHRpb24uKnNldHRlckZ1bmN0aW9uKSgqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3Rh
dGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCiAgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5k
bGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7
IH0KQEAgLTY3Niw1MCArNjc2LDUwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzaXplIC8g
MS4yZjsKICAgICB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBmbG9hdCBzaXplID0gc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICBm
bG9hdCBzaXplID0gc3RhdGUucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lm
aWVkU2l6ZSgpOwogCiAgICAgICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRLZXl3b3JkU2l6ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS5rZXl3b3JkU2l6ZSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpOworICAgICAgICBTdHlsZVJlc29sdmVyOjpzZXRG
b250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICAgICAgc3RhdGUuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0g
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVz
b2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLCBDU1NW
YWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZmxvYXQgc2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZvbnRT
aXplRm9yS2V5d29yZChzdGF0ZS5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2Ny
aXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CiAKICAgICAgICAgaWYgKHNpemUgPCAwKQog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3Jk
U2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAg
ICAgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgc2l6
ZSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
OjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKIAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVz
Y3JpcHRpb24oKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKDApOwog
ICAgICAgICBmbG9hdCBwYXJlbnRTaXplID0gMDsKICAgICAgICAgYm9vbCBwYXJlbnRJc0Fic29s
dXRlU2l6ZSA9IGZhbHNlOwogICAgICAgICBmbG9hdCBzaXplID0gMDsKIAotICAgICAgICBpZiAo
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkgewotICAgICAgICAgICAgcGFyZW50U2l6ZSA9
IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmll
ZFNpemUoKTsKLSAgICAgICAgICAgIHBhcmVudElzQWJzb2x1dGVTaXplID0gc3R5bGVSZXNvbHZl
ci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKKyAg
ICAgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCkpIHsKKyAgICAgICAgICAgIHBhcmVudFNpemUg
PSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7
CisgICAgICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IHN0YXRlLnBhcmVudFN0eWxlKCkt
PmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoaW50IGlkZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKQEAgLTczMyw3
ICs3MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWExhcmdlOgogICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4TGFyZ2U6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
V2Via2l0WHh4TGFyZ2U6Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPmZv
bnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLCBpZGVudCwgZm9udERl
c2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9
IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChzdGF0ZS5kb2N1bWVudCgpLCBpZGVu
dCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CiAgICAgICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKGlkZW50IC0gQ1NTVmFsdWVYeFNtYWxs
ICsgMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
TGFyZ2VyOgpAQCAtNzUxLDEzICs3NTEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJzb2x1dGVTaXplCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIShwcmltaXRpdmVWYWx1
ZS0+aXNQZXJjZW50YWdlKCkgfHwgcHJpbWl0aXZlVmFsdWUtPmlzRm9udFJlbGF0aXZlTGVuZ3Ro
KCkpKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAg
ICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5
bGUoKSwgMS4wLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnBhcmVudFN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSwgMS4wLCB0cnVlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgICAgICBzaXplID0gKHByaW1pdGl2ZVZh
bHVlLT5nZXRGbG9hdFZhbHVlKCkgKiBwYXJlbnRTaXplKSAvIDEwMC4wZjsKICAgICAgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0
aCgpKQotICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVl
KCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCksIHN0eWxlUmVzb2x2
ZXItPnJvb3RFbGVtZW50U3R5bGUoKSktPmV2YWx1YXRlKHBhcmVudFNpemUpOworICAgICAgICAg
ICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVl
KHN0YXRlLnBhcmVudFN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSktPmV2YWx1YXRl
KHBhcmVudFNpemUpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmll
d3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9IHZhbHVlRm9y
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSwgMCwgc3R5
bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKTsKKyAgICAgICAgICAgICAgICBz
aXplID0gdmFsdWVGb3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxl
bmd0aCgpLCAwLCBzdGF0ZS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNzY5LDggKzc2OSw4
IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQ2FwIGZvbnQgc2l6ZSBoZXJlIHRvIG1ha2Ugc3VyZSB0
aGF0IGRvZXNuJ3QgaGFwcGVuLgogICAgICAgICBzaXplID0gbWluKG1heGltdW1BbGxvd2VkRm9u
dFNpemUsIHNpemUpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnRE
ZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6
ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTc3OSwxMiArNzc5LDEyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUZvbnRXZWln
aHQgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNv
bHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgc3dpdGNoIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzk4LDcgKzc5OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRX
ZWlnaHQoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQotICAgICAgICBzdHlsZVJlc29sdmVy
LT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtODA5LDMwICs4MDksMzAgQEAg
cHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXMgewogcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsK
LSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBz
dHlsZVJlc29sdmVyLT5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigp
OworICAgICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9
IHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAKICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKHBhcmVudEZvbnREZXNjcmlwdGlv
bi5jb21tb25MaWdhdHVyZXNTdGF0ZSgpKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldERp
c2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uZGlzY3JldGlv
bmFyeUxpZ2F0dXJlc1N0YXRlKCkpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9y
aWNhbExpZ2F0dXJlc1N0YXRlKHBhcmVudEZvbnREZXNjcmlwdGlvbi5oaXN0b3JpY2FsTGlnYXR1
cmVzU3RhdGUoKSk7CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAKICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlv
bjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RGlz
Y3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVz
U3RhdGUpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0
YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwogCi0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAg
ICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21t
b25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7
CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxp
Z2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKQEAg
LTg3OCwxMSArODc4LDExIEBAIHB1YmxpYzoKICAgICAgICAgfQogI2VuZGlmCiAKLSAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNj
cmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3Rh
dGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25M
aWdhdHVyZXNTdGF0ZShjb21tb25MaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoZGlzY3JldGlvbmFyeUxpZ2F0dXJl
c1N0YXRlKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNT
dGF0ZShoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3Bl
cnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTg5OCwxMyArODk4LDE0IEBAIHRlbXBsYXRl
IDxCb3JkZXJJbWFnZVR5cGUgYm9yZGVySW1hZ2VUeXBlLAogICAgICAgICAgIHZvaWQgKFJlbmRl
clN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKGNvbnN0IE5pbmVQaWVjZUltYWdlJik+CiBjbGFzcyBB
cHBseVByb3BlcnR5Qm9yZGVySW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAg
ICBOaW5lUGllY2VJbWFnZSBpbWFnZTsKICAgICAgICAgaWYgKGJvcmRlckltYWdlVHlwZSA9PSBC
b3JkZXJNYXNrKQogICAgICAgICAgICAgaW1hZ2Uuc2V0TWFza0RlZmF1bHRzKCk7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCB2
YWx1ZSwgaW1hZ2UpOwotICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1
bmN0aW9uKShpbWFnZSk7CisgICAgICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAoc3RhdGUpOwor
ICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShwcm9wZXJ0eSwgdmFsdWUsIGltYWdl
KTsKKyAgICAgICAgKHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoaW1hZ2UpOwogICAg
IH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC05MjEs
MjkgKzkyMiwyOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgTmluZVBpZWNl
SW1hZ2UmIGdldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gdHlwZSA9PSBCb3Jk
ZXJJbWFnZSA/IHN0eWxlLT5ib3JkZXJJbWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJbWFnZSgpOyB9
CiAgICAgc3RhdGljIGlubGluZSB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgTmluZVBpZWNlSW1hZ2UmIHZhbHVlKSB7IHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8g
c3R5bGUtPnNldEJvcmRlckltYWdlKHZhbHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94SW1hZ2UodmFs
dWUpOyB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUpCiAgICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpKSk7CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVl
KHN0YXRlLnN0eWxlKCkpKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBj
YXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLmNvcHlPdXRzZXRGcm9tKGdldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlPdXRz
ZXRGcm9tKGdldFZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFJlcGVhdDoKLSAgICAgICAgICAgIGltYWdlLmNvcHlSZXBlYXRGcm9t
KGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGlt
YWdlLmNvcHlSZXBlYXRGcm9tKGdldFZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgaW1hZ2UuY29w
eUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7
CisgICAgICAgICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNGcm9tKGdldFZhbHVlKHN0YXRlLnBh
cmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRoOgot
ICAgICAgICAgICAgaW1hZ2UuY29weUJvcmRlclNsaWNlc0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW1hZ2UuY29weUJvcmRlclNsaWNl
c0Zyb20oZ2V0VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW1h
Z2UpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbWFnZSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAg
ICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpKSk7
CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0YXRlLnN0eWxlKCkpKTsK
ICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBjYXNlIE91dHNldDoKICAgICAg
ICAgICAgIGltYWdlLnNldE91dHNldChMZW5ndGhCb3goMCkpOwpAQCAtOTYyLDI3ICs5NjMsMjgg
QEAgcHVibGljOgogICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHR5cGUgPT0gQm9y
ZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0
aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSkgOiBMZW5ndGhC
b3goKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0
eWxlKCksIGltYWdlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgTmluZVBpZWNl
SW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSkpOworICAgICAgICBO
aW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5zdHlsZSgpKSk7CisgICAgICAgIENT
U1RvU3R5bGVNYXAgc3R5bGVNYXAoc3RhdGUpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7
CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxl
UmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAg
ICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2
YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVwZWF0OgotICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQo
dmFsdWUsIGltYWdlKTsKKyAgICAgICAgICAgIHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlUmVw
ZWF0KHZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTbGlj
ZToKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlU2xpY2UodmFsdWUsIGltYWdlKTsKKyAgICAgICAgICAgIHN0eWxlTWFwLm1hcE5pbmVQaWVj
ZUltYWdlU2xpY2UodmFsdWUsIGltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFdpZHRoOgotICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2
ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAg
ICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2
YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCBpbWFnZSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwg
JmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTk5MSw3ICs5OTMsNyBAQCBw
dWJsaWM6CiB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZCwgU3R5bGVJbWFnZSogKFJlbmRlclN0
eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
RnVuY3Rpb24pKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxG
dW5jdGlvbikoKT4KIGNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShpZCwgdmFs
dWUpKTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0YXRlLnN0eWxlKCkt
PipzZXR0ZXJGdW5jdGlvbikoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwgaWQsIHZh
bHVlKSk7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAg
IHsKICAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVs
dEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhh
bmRsZXIoKTsKQEAgLTEwMDMsMTEgKzEwMDUsMTEgQEAgZW51bSBDb3VudGVyQmVoYXZpb3Ige0lu
Y3JlbWVudCA9IDAsIFJlc2V0fTsKIHRlbXBsYXRlIDxDb3VudGVyQmVoYXZpb3IgY291bnRlckJl
aGF2aW9yPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvdW50ZXIgewogcHVibGljOgotICAgIHN0YXRp
YyB2b2lkIGVtcHR5RnVuY3Rpb24oQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgZW1wdHlGdW5jdGlvbihDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSkKICAgICB7Ci0gICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgICAgIENvdW50ZXJE
aXJlY3RpdmVNYXAmIHBhcmVudE1hcCA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFj
Y2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CisgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1h
cCA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CisgICAgICAgIENv
dW50ZXJEaXJlY3RpdmVNYXAmIHBhcmVudE1hcCA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmFjY2Vz
c0NvdW50ZXJEaXJlY3RpdmVzKCk7CiAKICAgICAgICAgdHlwZWRlZiBDb3VudGVyRGlyZWN0aXZl
TWFwOjppdGVyYXRvciBJdGVyYXRvcjsKICAgICAgICAgSXRlcmF0b3IgZW5kID0gcGFyZW50TWFw
LmVuZCgpOwpAQCAtMTAyMCwxNCArMTAyMiwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTVmFsdWVMaXN0KiBs
aXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwogCi0gICAgICAgIENvdW50
ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFjY2Vzc0NvdW50
ZXJEaXJlY3RpdmVzKCk7CisgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0YXRl
LnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CiAgICAgICAgIHR5cGVkZWYgQ291
bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7CiAKICAgICAgICAgSXRlcmF0b3Ig
ZW5kID0gbWFwLmVuZCgpOwpAQCAtMTA2Myw0MiArMTA2NSw0MiBAQCBwdWJsaWM6CiAKIGNsYXNz
IEFwcGx5UHJvcGVydHlDdXJzb3IgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0Q3Vyc29yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmN1cnNvcigpKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yTGlzdChzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT5jdXJzb3JzKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRD
dXJzb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+Y3Vyc29yKCkpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDdXJzb3JMaXN0KHN0YXRlLnBhcmVudFN0eWxlKCktPmN1cnNvcnMoKSk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKFJlbmRlclN0eWxlOjppbml0aWFs
Q3Vyc29yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKFJlbmRlclN0eWxlOjppbml0aWFsQ3Vyc29y
KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDdXJz
b3JMaXN0KCk7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAgICAg
ICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUp
OwogICAgICAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKENVUlNPUl9BVVRPKTsKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcihDVVJTT1JfQVVUTyk7CiAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0
ZW0gPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwogICAgICAgICAgICAgICAgIGlm
IChpdGVtLT5pc0N1cnNvckltYWdlVmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBDU1ND
dXJzb3JJbWFnZVZhbHVlKiBpbWFnZSA9IHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUq
PihpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNv
cklzVXNlZChzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBj
dXJzb3JzIGFyZSBub3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+
c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChz
dGF0ZS5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBub3QgYWxs
b3dlZCB0byBzaGFyZSBzdHlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5hZGRD
dXJzb3IoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwgQ1NTUHJvcGVydHlDdXJzb3Is
IGltYWdlKSwgaW1hZ2UtPmhvdFNwb3QoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChp
dGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihpdGVtKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRD
dXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNJZGVudCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmN1cnNvcigp
ICE9IEVDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpICYmIHN0YXRlLnN0eWxlKCktPmN1cnNvcigpICE9
IEVDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTEw
Nyw3ICsxMTA5LDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5VGV4dEFsaWduIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTExNSwxMyArMTExNywxMyBAQCBwdWJs
aWM6CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZVdlYmtpdE1hdGNoUGFyZW50KQotICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGln
bigpID09IFRBU1RBUlQpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gTEVGVCA6IFJJR0hUKTsKLSAgICAgICAgZWxzZSBpZiAoc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFFTkQpCi0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUklHSFQgOiBMRUZUKTsKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICBl
bHNlIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQVNUQVJUKQorICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExFRlQgOiBSSUdIVCk7CisgICAgICAgIGVsc2Ug
aWYgKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBRU5EKQorICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IFJJR0hUIDogTEVGVCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRUZXh0QWxpZ24oc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkpOwogICAgIH0K
ICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTEx
MzIsNyArMTEzNCw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0
aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgRVRleHREZWNvcmF0aW9uIHQg
PSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHREZWNvcmF0aW9uKCk7CiAgICAgICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewpA
QCAtMTE0MCw3ICsxMTQyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKICAgICAgICAgICAg
IHQgfD0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgIH0K
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb24odCk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHREZWNvcmF0aW9uKHQpOwogICAgIH0KICAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTExNTEsNyAr
MTE1Myw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQgewogcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTYyLDE1ICsxMTY0LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFs
KQogICAgICAgICAgICAgbGluZUhlaWdodCA9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdo
dCgpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAg
ICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCk7Ci0gICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4
dFNpemVBZGp1c3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdHls
ZVJlc29sdmVyLT5kb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgZG91YmxlIG11bHRp
cGxpZXIgPSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAgICBpZiAo
c3RhdGUuc3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKSkgeworICAgICAgICAgICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSBzdGF0ZS5kb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAgICAg
ICAgICBtdWx0aXBsaWVyICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRp
dmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUoKSwgbXVsdGlwbGllcik7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFn
ZSBzaG91bGQgbm90IGJlIHJlc3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICAg
ICAgbGluZUhlaWdodCA9IExlbmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udFNpemUo
KSAqIHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOworICAgICAg
ICAgICAgbGluZUhlaWdodCA9IExlbmd0aCgoc3RhdGUuc3R5bGUoKS0+Zm9udFNpemUoKSAqIHBy
aW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwogICAgICAgICB9IGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAvLyBGSVhN
RTogbnVtYmVyIGFuZCBwZXJjZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0
eXBlIG9mIExlbmd0aCAoaWUuIEZpeGVkIG9yIFBlcmNlbnQpLgogICAgICAgICAgICAgbGluZUhl
aWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQ
ZXJjZW50KTsKQEAgLTExNzgsNyArMTE4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGxpbmVI
ZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFu
ZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xMjY1LDExICsxMjY3LDExIEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciopIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5
cGUoKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKICAgICAg
ICAgTGVuZ3RoIHdpZHRoOwogICAgICAgICBMZW5ndGggaGVpZ2h0OwogICAgICAgICBQYWdlU2l6
ZVR5cGUgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87CkBAIC0xMjg1LDggKzEyODcsOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgLy8gPGxlbmd0aD57Mn0KICAgICAgICAgICAgICAg
ICBpZiAoIXNlY29uZC0+aXNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIHdpZHRoID0gZmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOwot
ICAgICAgICAgICAgICAgIGhlaWdodCA9IHNlY29uZC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSk7
CisgICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAg
aGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgogICAgICAgICAgICAgICAgIC8vIFRo
ZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJh
bWV0ZXIuCkBAIC0xMzA0LDcgKzEzMDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPgog
ICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAg
ICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3dpdGNo
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgMDoK
QEAgLTEzMzAsMjkgKzEzMzIsMjkgQEAgcHVibGljOgogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldFBhZ2VTaXplVHlwZShwYWdlU2l6ZVR5cGUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRQYWdlU2l6ZShMZW5ndGhTaXplKHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFBhZ2VTaXplKExlbmd0aFNpemUod2lkdGgsIGhlaWdodCkpOwogICAg
IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQ
cm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZh
cHBseVZhbHVlKTsgfQogfTsKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkK
ICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0Zp
bGwoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOwotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4
dEVtcGhhc2lzRmlsbCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
TWFyayhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHN0YXRlLnBhcmVudFN0eWxl
KCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVt
cGhhc2lzRmlsbCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVt
cGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc01hcmsoKSk7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoUmVu
ZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVt
cGhhc2lzRmlsbCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFy
ayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc01hcmsoKSk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxU
ZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAg
ICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCog
bGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKQEAgLTEzNjYsMTEgKzEz
NjgsMTEgQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKICAgICAgICAgICAg
ICAgICBpZiAodmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgdmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKQotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCp2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoKnZhbHVlKTsKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc01hcmsoKnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqdmFsdWUpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9t
TWFyayhudWxsQXRvbSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNDdXN0b21NYXJrKG51bGxBdG9tKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkBAIC0xMzc5LDIwICsxMzgxLDIwIEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBo
YXNpc0ZpbGxGaWxsZWQpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQ3VzdG9tKTsKLSAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsocHJpbWl0aXZl
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0N1c3RvbSk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHBy
aW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNp
c0N1c3RvbU1hcmsobnVsbEF0b20pOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVPcGVuKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRUZXh0RW1waGFzaXNGaWxsKCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcmtB
dXRvKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoKnBy
aW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNp
c01hcmsoVGV4dEVtcGhhc2lzTWFya0F1dG8pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFz
aXNGaWxsRmlsbGVkKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc01hcmsoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7CisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCpwcmltaXRpdmVWYWx1ZSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE0MTUsMTQgKzE0MTcsMTggQEAgcHVibGljOgogICAg
IHN0YXRpYyBib29sIHRlc3QoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsgcmV0dXJuIChh
bmltYXRpb24tPip0ZXN0RnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgdm9pZCBjbGVhcihBbmlt
YXRpb24qIGFuaW1hdGlvbikgeyAoYW5pbWF0aW9uLT4qY2xlYXJGdW5jdGlvbikoKTsgfQogICAg
IHN0YXRpYyBUIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5jdGlvbikoKTsgfQotICAg
IHN0YXRpYyB2b2lkIG1hcChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBBbmltYXRpb24q
IGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgp
LT4qbWFwRnVuY3Rpb24pKGFuaW1hdGlvbiwgdmFsdWUpOyB9CisgICAgc3RhdGljIHZvaWQgbWFw
KFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1Zh
bHVlKiB2YWx1ZSkgCisgICAgeworICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRl
KTsKKyAgICAgICAgKHN0eWxlTWFwLiptYXBGdW5jdGlvbikoYW5pbWF0aW9uLCB2YWx1ZSk7Cisg
ICAgfQogICAgIHN0YXRpYyBBbmltYXRpb25MaXN0KiBhY2Nlc3NBbmltYXRpb25zKFJlbmRlclN0
eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qYW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCk7
IH0KICAgICBzdGF0aWMgY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbWF0aW9ucyhSZW5kZXJTdHls
ZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmltbXV0YWJsZUFuaW1hdGlvbkdldHRlckZ1bmN0
aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkK
ICAgICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCkpOwotICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiBwYXJl
bnRMaXN0ID0gYW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKTsKKyAgICAg
ICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3RhdGUuc3R5bGUoKSk7
CisgICAgICAgIGNvbnN0IEFuaW1hdGlvbkxpc3QqIHBhcmVudExpc3QgPSBhbmltYXRpb25zKHN0
YXRlLnBhcmVudFN0eWxlKCkpOwogICAgICAgICBzaXplX3QgaSA9IDAsIHBhcmVudFNpemUgPSBw
YXJlbnRMaXN0ID8gcGFyZW50TGlzdC0+c2l6ZSgpIDogMDsKICAgICAgICAgZm9yICggOyBpIDwg
cGFyZW50U2l6ZSAmJiB0ZXN0KHBhcmVudExpc3QtPmFuaW1hdGlvbihpKSk7ICsraSkgewogICAg
ICAgICAgICAgaWYgKGxpc3QtPnNpemUoKSA8PSBpKQpAQCAtMTQzNiw5ICsxNDQyLDkgQEAgcHVi
bGljOgogICAgICAgICAgICAgY2xlYXIobGlzdC0+YW5pbWF0aW9uKGkpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUpCiAgICAgewotICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0
aW9ucyhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKKyAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlz
dCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3RhdGUuc3R5bGUoKSk7CiAgICAgICAgIGlmIChsaXN0LT5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7
CiAgICAgICAgIHNldFZhbHVlKGxpc3QtPmFuaW1hdGlvbigwKSwgaW5pdGlhbCgpKTsKQEAgLTE0
NDgsMjIgKzE0NTQsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgY2xlYXIobGlzdC0+YW5pbWF0
aW9uKGkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgQW5pbWF0aW9uTGlzdCog
bGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAg
IEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOwog
ICAgICAgICBzaXplX3QgY2hpbGRJbmRleCA9IDA7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1
ZUxpc3QoKSkgewogICAgICAgICAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50
byBhbiBhbmltYXRpb24sIGNyZWF0aW5nIG5ldyBhbmltYXRpb25zIGFzIG5lZWRlZC4gKi8KICAg
ICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUo
KTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRleCA8PSBsaXN0
LT5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNy
ZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0
aW9uKGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1hcChzdGF0ZSwg
bGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOwogICAgICAgICAgICAgICAg
ICsrY2hpbGRJbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmIChsaXN0LT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFu
aW1hdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3Qt
PmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpOworICAgICAgICAgICAgbWFwKHN0YXRlLCBs
aXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIGNoaWxkSW5k
ZXggPSAxOwogICAgICAgICB9CiAgICAgICAgIGZvciAoIDsgY2hpbGRJbmRleCA8IGxpc3QtPnNp
emUoKTsgKytjaGlsZEluZGV4KSB7CkBAIC0xNDc3LDIyICsxNDgzLDIyIEBAIHB1YmxpYzoKIAog
Y2xhc3MgQXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAg
IHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPE91dGxpbmVJc0F1dG8sICZSZW5k
ZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6
OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0
aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5
bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJv
cmRlclN0eWxlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7
CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVy
U3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpz
ZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlh
bE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRl
KTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwgJlJlbmRl
clN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRs
aW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+
OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRl
KQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPE91dGxpbmVJc0F1dG8s
ICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVy
U3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxl
Ojppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNv
bHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAm
UmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0
eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6
aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQs
IHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwg
JlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpz
ZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVy
U3R5bGU+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5
RGVmYXVsdDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywg
T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxp
bmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5
VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBBcHBseVBy
b3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBF
Qm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PE91
dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNB
dXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywg
JlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlWYWx1ZShwcm9w
ZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0
dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1
ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0xNTAwLDcgKzE1MDYsNyBAQCBwdWJsaWM6CiAKIGNsYXNz
IEFwcGx5UHJvcGVydHlSZXNpemUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0x
NTEyLDEzICsxNTE4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgICAgIGlmIChTZXR0
aW5ncyogc2V0dGluZ3MgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpKQor
ICAgICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHN0YXRlLmRvY3VtZW50KCktPnNl
dHRpbmdzKCkpCiAgICAgICAgICAgICAgICAgciA9IHNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNp
emFibGUoKSA/IFJFU0laRV9CT1RIIDogUkVTSVpFX05PTkU7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHIgPSAqcHJpbWl0aXZlVmFsdWU7CiAgICAg
ICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0UmVzaXplKHIpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRSZXNpemUocik7CiAgICAgfQogCiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE1MzAsNyArMTUzNiw3IEBAIHB1Ymxp
YzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVZlcnRpY2FsQWxpZ24gewogcHVibGljOgotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0xNTM4LDkgKzE1NDQsOSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkK
LSAgICAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFs
aWduKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+
c2V0VmVydGljYWxBbGlnbigqcHJpbWl0aXZlVmFsdWUpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ25MZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBD
YWxjdWxhdGVkQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldFZlcnRpY2FsQWxpZ25MZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xl
bmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxh
dGVkQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0YXRlLnN0eWxl
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkKQEAgLTE1NTIsMzIgKzE1NTgsMzIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5
QXNwZWN0UmF0aW8gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgaWYgKCFzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpLT5oYXNBc3BlY3RSYXRpbygpKQorICAgICAgICBpZiAoIXN0YXRlLnBhcmVudFN0eWxlKCkt
Pmhhc0FzcGVjdFJhdGlvKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKHN0eWxlUmVzb2x2ZXIt
PnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKHN0eWxlUmVzb2x2ZXIt
PnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRp
b0Rlbm9taW5hdG9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051
bWVyYXRvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlh
bFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKFJlbmRl
clN0eWxlOjppbml0aWFsSGFzQXNwZWN0UmF0aW8oKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxB
c3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlv
TnVtZXJhdG9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyhS
ZW5kZXJTdHlsZTo6aW5pdGlhbEhhc0FzcGVjdFJhdGlvKCkpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0
UmF0aW9EZW5vbWluYXRvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0
aW9OdW1lcmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNBc3BlY3RSYXRp
b1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0Fz
cGVjdFJhdGlvKGZhbHNlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0FzcGVj
dFJhdGlvKGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBD
U1NBc3BlY3RSYXRpb1ZhbHVlKiBhc3BlY3RSYXRpb1ZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTQXNw
ZWN0UmF0aW9WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0SGFzQXNwZWN0UmF0aW8odHJ1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+ZGVub21pbmF0b3JW
YWx1ZSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9O
dW1lcmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+bnVtZXJhdG9yVmFsdWUoKSk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUtPmRlbm9taW5h
dG9yVmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJh
dG9yKGFzcGVjdFJhdGlvVmFsdWUtPm51bWVyYXRvclZhbHVlKCkpOwogICAgIH0KIAogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNTg4LDQ4ICsxNTk0LDQ4
IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVpvb20gewogcHJpdmF0ZToKLSAgICBz
dGF0aWMgdm9pZCByZXNldEVmZmVjdGl2ZVpvb20oU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICBzdGF0aWMgdm9pZCByZXNldEVmZmVjdGl2ZVpvb20oU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgLy8gUmVzZXQgdGhlIHpvb20gaW4gZWZmZWN0LiBU
aGlzIGFsbG93cyB0aGUgc2V0Wm9vbSBtZXRob2QgdG8gYWNjdXJhdGVseSBjb21wdXRlIGEgbmV3
IHpvb20gaW4gZWZmZWN0LgotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29t
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAg
ICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oc3RhdGUucGFyZW50U3R5bGUoKSA/IHN0YXRlLnBh
cmVudFN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgp
KTsKICAgICB9CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVy
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShzdHlsZVJlc29sdmVyLT5wYXJlbnRT
dHlsZSgpLT56b29tKCkpOworICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOworICAg
ICAgICBzdGF0ZS5zZXRab29tKHN0YXRlLnBhcmVudFN0eWxlKCktPnpvb20oKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICByZXNl
dEVmZmVjdGl2ZVpvb20oc3RhdGUpOworICAgICAgICBzdGF0ZS5zZXRab29tKFJlbmRlclN0eWxl
Ojppbml0aWFsWm9vbSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04odmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSk7CiAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewotICAgICAgICAgICAgcmVzZXRFZmZlY3Rp
dmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9v
bShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgICAgICByZXNldEVmZmVjdGl2
ZVpvb20oc3RhdGUpOworICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5p
dGlhbFpvb20oKSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVSZXNldCkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZm
ZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAg
ICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwor
ICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CiAg
ICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVE
b2N1bWVudCkgewotICAgICAgICAgICAgZmxvYXQgZG9jWm9vbSA9IHN0eWxlUmVzb2x2ZXItPnJv
b3RFbGVtZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKS0+em9v
bSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCk7Ci0gICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zZXRFZmZlY3RpdmVab29tKGRvY1pvb20pOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c2V0Wm9vbShkb2Nab29tKTsKKyAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCkgPyBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCktPnpvb20oKSA6IFJl
bmRlclN0eWxlOjppbml0aWFsWm9vbSgpOworICAgICAgICAgICAgc3RhdGUuc2V0RWZmZWN0aXZl
Wm9vbShkb2Nab29tKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFpvb20oZG9jWm9vbSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7Ci0gICAgICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICByZXNl
dEVmZmVjdGl2ZVpvb20oc3RhdGUpOwogICAgICAgICAgICAgaWYgKGZsb2F0IHBlcmNlbnQgPSBw
cmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnNldFpvb20ocGVyY2VudCAvIDEwMC4wZik7CisgICAgICAgICAgICAgICAgc3RhdGUu
c2V0Wm9vbShwZXJjZW50IC8gMTAwLjBmKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxl
UmVzb2x2ZXIpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKICAgICAg
ICAgICAgIGlmIChmbG9hdCBudW1iZXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgp
KQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20obnVtYmVyKTsKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5zZXRab29tKG51bWJlcik7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTE2NDEsNDIgKzE2NDcsNDIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5RGlzcGxh
eSB7CiBwcml2YXRlOgotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVl
KFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZh
bHVlKQorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSwgRURpc3BsYXkgZGlzcGxheVByb3BlcnR5VmFsdWUpCiAgICAg
ewogI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkg
JiYgc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKKyAgICAgICAgaWYgKHN0YXRl
LmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRlLnN0
eWxlKCktPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQogICAgICAgICAgICAgcmV0dXJuIChkaXNw
bGF5UHJvcGVydHlWYWx1ZSA9PSBJTkxJTkUgfHwgZGlzcGxheVByb3BlcnR5VmFsdWUgPT0gQkxP
Q0sgfHwgZGlzcGxheVByb3BlcnR5VmFsdWUgPT0gTk9ORSk7CiAjZWxzZQotICAgICAgICBVTlVT
RURfUEFSQU0oc3R5bGVSZXNvbHZlcik7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgICAgIFVOVVNFRF9QQVJBTShkaXNwbGF5UHJvcGVydHlWYWx1ZSk7CiAjZW5kaWYKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9IHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmRpc3BsYXkoKTsKLSAgICAgICAgaWYgKCFpc1Zh
bGlkRGlzcGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQorICAgICAgICBFRGlzcGxh
eSBkaXNwbGF5ID0gc3RhdGUucGFyZW50U3R5bGUoKS0+ZGlzcGxheSgpOworICAgICAgICBpZiAo
IWlzVmFsaWREaXNwbGF5VmFsdWUoc3RhdGUsIGRpc3BsYXkpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERp
c3BsYXkoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERpc3BsYXkoUmVuZGVyU3R5bGU6
OmluaXRpYWxEaXNwbGF5KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgRURpc3BsYXkgZGlzcGxheSA9ICpzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKIAotICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3R5bGVSZXNvbHZlciwg
ZGlzcGxheSkpCisgICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdGF0ZSwgZGlzcGxh
eSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0RGlzcGxheShkaXNwbGF5KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGlzcGxh
eShkaXNwbGF5KTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKQpAQCAtMTY4OSwyMSArMTY5NSwyMSBAQCB0ZW1wbGF0ZSA8Q2xpcFBhdGhPcGVyYXRp
b24qIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZQog
Y2xhc3MgQXBwbHlQcm9wZXJ0eUNsaXBQYXRoIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBz
ZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+
IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCAwKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHls
ZSgpLCAwKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkp
IHsKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBTaGFw
ZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2
ZXIsIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKSk7CisgICAgICAgICAgICAgICAg
c2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJh
c2ljU2hhcGVGb3JWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkp
KTsKICAgICAgICAgICAgIH0KICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1VSSSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBjc3NVUkxWYWx1ZSA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgIEtVUkwgdXJsID0gc3R5bGVS
ZXNvbHZlci0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoY3NzVVJMVmFsdWUpOworICAgICAgICAg
ICAgICAgIEtVUkwgdXJsID0gc3RhdGUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoY3NzVVJMVmFs
dWUpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IHdvcmsgd2l0aCBmb3J3
YXJkIG9yIGV4dGVybmFsIFNWRyByZWZlcmVuY2VzIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkwNDA1KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoY3Nz
VVJMVmFsdWUsIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSkpOworICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksIFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUo
Y3NzVVJMVmFsdWUsIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSkpOwogICAgICAgICAgICAgfQog
I2VuZGlmCiAgICAgICAgIH0KQEAgLTE3MjAsMTggKzE3MjYsMTggQEAgdGVtcGxhdGUgPEV4Y2x1
c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2
b2lkIChSZW4KIGNsYXNzIEFwcGx5UHJvcGVydHlFeGNsdXNpb25TaGFwZSB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPEV4
Y2x1c2lvblNoYXBlVmFsdWU+IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1
ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsKKyAgICAgICAgICAgICAgICBz
ZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCAwKTsKICAgICAgICAgICAgIC8vIEZJWE1FIEJ1ZyAxMDI1
NzE6IExheW91dCBmb3IgdGhlIHZhbHVlICdvdXRzaWRlLXNoYXBlJyBpcyBub3QgeWV0IGltcGxl
bWVudGVkCiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZU91dHNpZGVTaGFwZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUo
KSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgRXhjbHVzaW9uU2hh
cGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzU2hhcGUoKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxFeGNsdXNp
b25TaGFwZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFs
dWUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIHByaW1pdGl2ZVZhbHVlLT5nZXRT
aGFwZVZhbHVlKCkpKTsKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBzaGFwZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxFeGNsdXNp
b25TaGFwZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFs
dWUoYmFzaWNTaGFwZUZvclZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1
ZSgpKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgc2hhcGUucmVs
ZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE3NDYsMjEgKzE3
NTIsMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKIGNsYXNz
IEFwcGx5UHJvcGVydHlJbWFnZVJlc29sdXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7
Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3VyY2Us
ICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3Vy
Y2UsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRp
b25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46OmFw
cGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpp
bWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNl
dEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0
LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0
SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0
aW9uPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAg
ICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5k
ZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZS
ZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3Vy
Y2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46OmFwcGx5SW5o
ZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1
bHRCYXNlPEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9u
U25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRp
b25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJl
c29sdXRpb25TbmFwPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAg
ICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VS
ZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUluaGVyaXRWYWx1
ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAg
QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0
eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRl
clN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwg
JlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbml0aWFs
VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlE
ZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1
dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNv
bHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1h
Z2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVz
b2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJT
dHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29s
dXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBs
eUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgQXBwbHlQ
cm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpp
bWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxl
OjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRl
clN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbml0aWFsVmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1h
Z2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25TbmFwLCBJbWFn
ZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNuYXAsIElt
YWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNu
YXA+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24s
IGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5
SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+
aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3ODAsOSArMTc4Niw5IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXNvbHV0aW9uID0g
cHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQ
WCk7CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VS
ZXNvbHV0aW9uU291cmNlKHNvdXJjZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEltYWdlUmVzb2x1dGlvblNuYXAoc25hcCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldEltYWdlUmVzb2x1dGlvbihyZXNvbHV0aW9uKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHNvdXJjZSk7CisgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNuYXAoc25hcCk7CisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEltYWdlUmVzb2x1dGlvbihyZXNvbHV0aW9uKTsKICAgICB9CiAKICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5o
CmluZGV4IDRmZmU4NTIzNGMxM2QwZmJiMTQ0NmUwNjg4MWM5ZjdmZWZjNzA2N2IuLmIyY2M0ZWUz
NWZlZWRhZWFkNzVlN2NhNDA1NThlNDQwZGY3MTgwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWls
ZGVyLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgU3R5bGVCdWlsZGVyX2gKIAogI2luY2x1
ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBA
IC0zMywxOCArMzQsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NWYWx1ZTsK
IGNsYXNzIFN0eWxlQnVpbGRlcjsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKIGNsYXNzIFByb3Bl
cnR5SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5oZXJpdEZ1bmN0aW9u
KShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKik7Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5p
dGlhbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKik7Ci0gICAgdHlwZWRl
ZiB2b2lkICgqQXBwbHlGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciosIENT
U1ZhbHVlKik7CisgICAgdHlwZWRlZiB2b2lkICgqSW5oZXJpdEZ1bmN0aW9uKShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYpOworICAgIHR5cGVkZWYgdm9pZCAoKkluaXRpYWxG
dW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmKTsKKyAgICB0eXBl
ZGVmIHZvaWQgKCpBcHBseUZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYsIENTU1ZhbHVlKik7CiAgICAgUHJvcGVydHlIYW5kbGVyKCkgOiBtX2luaGVyaXQoMCks
IG1faW5pdGlhbCgwKSwgbV9hcHBseSgwKSB7IH0KICAgICBQcm9wZXJ0eUhhbmRsZXIoSW5oZXJp
dEZ1bmN0aW9uIGluaGVyaXQsIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsLCBBcHBseUZ1bmN0aW9u
IGFwcGx5KSA6IG1faW5oZXJpdChpbmhlcml0KSwgbV9pbml0aWFsKGluaXRpYWwpLCBtX2FwcGx5
KGFwcGx5KSB7IH0KLSAgICB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgY29uc3QgeyBBU1NFUlQobV9p
bmhlcml0KTsgKCptX2luaGVyaXQpKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOyB9Ci0gICAg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIGNvbnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0
aWFsKShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsgfQotICAgIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBseSkocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOyB9CisgICAgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkg
Y29uc3QgeyBBU1NFUlQobV9pbmhlcml0KTsgKCptX2luaGVyaXQpKHByb3BlcnR5SUQsIHN0YXRl
KTsgfQorICAgIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpIGNvbnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7
ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdGF0ZSk7IH0KKyAgICB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBseSkocHJvcGVy
dHlJRCwgc3RhdGUsIHZhbHVlKTsgfQogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5oZXJpdCAmJiBtX2luaXRpYWwgJiYgbV9hcHBseTsgfQogICAgIEluaGVyaXRGdW5jdGlv
biBpbmhlcml0RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2luaGVyaXQ7IH0KICAgICBJbml0
aWFsRnVuY3Rpb24gaW5pdGlhbEZ1bmN0aW9uKCkgeyByZXR1cm4gbV9pbml0aWFsOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggZWRmNTMzY2RjOGI3MDU2YzBmZDA3YThj
NWVkYzVjYzg1ZjkwMGI3Yi4uMGY2Njk3YzFhNzE1ZjZkZTMyZmE5OWJjMjI0ZmUyYWFkYTViNGUw
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNDcsNiArNDcsNyBAQAog
I2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2luY2x1ZGUgIkNTU1N1cHBvcnRzUnVsZS5oIgog
I2luY2x1ZGUgIkNTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NUb1N0eWxl
TWFwLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaWYgRU5BQkxFKENTU19WQVJJQUJM
RVMpCiAjaW5jbHVkZSAiQ1NTVmFyaWFibGVWYWx1ZS5oIgpAQCAtMTk0LDE0ICsxOTUsMTQgQEAg
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9w
LCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSB7IFwKLSAgICBtX3N0YXRlLnN0eWxlKCktPnNldCMj
UHJvcChtX3N0YXRlLnBhcmVudFN0eWxlKCktPnByb3AoKSk7IFwKKyAgICBzdGF0ZS5zdHlsZSgp
LT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50U3R5bGUoKS0+cHJvcCgpKTsgIFwKICAgICByZXR1cm47
IFwKIH0KIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChwcm9wLCBQcm9wKSBc
CiBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbml0aWFsKSB7IFwKLSAgICBt
X3N0YXRlLnN0eWxlKCktPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsg
XAorICAgIHN0YXRlLnN0eWxlKCktPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJv
cCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCkBAIC0yMjMsNyArMjI0LDYgQEAgc3RhdGljIFN0
eWxlUHJvcGVydHlTZXQqIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQogICAgIHJldHVybiByaWdo
dFRvTGVmdERlY2wuZ2V0KCk7CiB9CiAKLQogaW5saW5lIFN0YXRpY0NTU1J1bGVMaXN0KiBTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6ZW5zdXJlUnVsZUxpc3QoKQogewogICAgIGlmICghbV9ydWxlTGlz
dCkKQEAgLTI2OSw3ICsyNjksNiBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCiAgICAgLCBtX3Zp
ZXdwb3J0U3R5bGVSZXNvbHZlcihWaWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZShkb2N1bWVu
dCkpCiAjZW5kaWYKICAgICAsIG1fc3R5bGVCdWlsZGVyKFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5
bGVCdWlsZGVyKCkpCi0gICAgLCBtX3N0eWxlTWFwKHRoaXMpCiB7CiAgICAgRWxlbWVudCogcm9v
dCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKIApAQCAtNDUzLDIzICs0NTIsMjIgQEAg
aW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKIAog
Ym9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKIAot
dm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVl
c3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXF1ZXN0
JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewogICAgIEFTU0VSVChtYXRj
aFJlcXVlc3QucnVsZVNldCk7Ci0gICAgQVNTRVJUKG1fc3RhdGUuZWxlbWVudCgpKTsKKyAgICBB
U1NFUlQoc3RhdGUuZWxlbWVudCgpKTsKIAotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAg
ICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsKICAgICBjb25zdCBTdHlsZWRF
bGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGUuc3R5bGVkRWxlbWVudCgpOwogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgcHNldWRvSWQgPSBlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOwogICAg
IGlmICghcHNldWRvSWQuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChzdHlsZWRFbGVtZW50
KTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxl
U2V0LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgbWF0Y2hSZXF1
ZXN0LCBydWxlUmFuZ2UpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3Rh
dGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRv
SWQuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIH0KIAogI2lmIEVOQUJM
RShWSURFT19UUkFDSykKICAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkpCi0gICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y3Vl
UHNldWRvUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jdWVQc2V1
ZG9SdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAjZW5kaWYKICAgICAvLyBDaGVj
ayB3aGV0aGVyIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGFyZSBhcHBsaWNhYmxlIGluIHRoZSBjdXJy
ZW50IHRyZWUgc2NvcGUuIENyaXRlcmlhIGZvciB0aGlzOgogICAgIC8vIGEpIGl0J3MgYSBVQSBy
dWxlCkBAIC00ODUsNDQgKzQ4Myw0MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRj
aGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUgogICAgIC8v
IFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZl
cnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0IHRoZSBidWZm
ZXIuCiAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+aWRSdWxlcyhlbGVtZW50LT5pZEZvclN0
eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAg
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNl
dC0+aWRSdWxlcyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKICAgICBpZiAoc3R5bGVkRWxlbWVudCAmJiBzdHlsZWRFbGVt
ZW50LT5oYXNDbGFzcygpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3R5bGVk
RWxlbWVudC0+Y2xhc3NOYW1lcygpLnNpemUoKTsgKytpKQotICAgICAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jbGFzc1J1bGVzKHN0eWxl
ZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5n
ZSk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNo
UmVxdWVzdC5ydWxlU2V0LT5jbGFzc1J1bGVzKHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtp
XS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgfQogCiAgICAgaWYgKGVs
ZW1lbnQtPmlzTGluaygpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPmxpbmtQc2V1ZG9DbGFzc1J1bGVzKCksIG1hdGNoUmVxdWVzdCwg
cnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBt
YXRjaFJlcXVlc3QucnVsZVNldC0+bGlua1BzZXVkb0NsYXNzUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0
LCBydWxlUmFuZ2UpOwogICAgIGlmIChTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1c1BzZXVk
b0NsYXNzKGVsZW1lbnQpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3Qs
IHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVz
dC5ydWxlU2V0LT50YWdSdWxlcyhlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBtYXRjaFJl
cXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNo
UmVxdWVzdC5ydWxlU2V0LT51bml2ZXJzYWxSdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5n
ZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hSZXF1
ZXN0LnJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVS
YW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVl
c3QucnVsZVNldC0+dGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hS
ZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0
ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCksIG1hdGNoUmVxdWVzdCwg
cnVsZVJhbmdlKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBy
dWxlUmFuZ2UpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVn
aW9uKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVS
YW5nZSYgcnVsZVJhbmdlKQogewotICAgIGlmICghbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkp
CisgICAgaWYgKCFzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHVuc2lnbmVkIHNpemUgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3Rv
cnNBbmRSdWxlU2V0cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewogICAgICAgICBjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBtYXRj
aFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxl
Y3RvcjsKLSAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKS0+bm9kZSgpKSkp
IHsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCktPm5vZGUoKSkpKSB7CiAg
ICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5t
X3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7CiAgICAgICAg
ICAgICBBU1NFUlQocmVnaW9uUnVsZXMpOwotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXMoTWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBtYXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVs
ZXMsIG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBtYXRjaFJlcXVl
c3QuaW5jbHVkZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVSYW5nZSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVy
TWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNv
cnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1
bHQpCiB7Ci0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBWZWN0b3I8Y29uc3QgUnVs
ZURhdGEqLCAzMj4mIG1hdGNoZWRSdWxlcyA9IHN0YXRlLm1hdGNoZWRSdWxlcygpOwogICAgIGlm
IChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzb3J0TWF0
Y2hlZFJ1bGVzKCk7CisgICAgc29ydE1hdGNoZWRSdWxlcyhzdGF0ZSk7CiAKICAgICBpZiAoc3Rh
dGUubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUnVsZXMuc2l6ZSgpOyArK2kpCkBAIC01
MzgsMTkgKzUzNSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNo
ZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVs
ZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzKQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9NKQog
ICAgIGlmICghbV9zY29wZVJlc29sdmVyKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRj
aCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0
YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNpc3RlbnQpLgotICAgIGlmIChtX3Njb3Bl
UmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3Rh
Y2tDb25zaXN0ZW5jeShtX3N0YXRlLmVsZW1lbnQoKSkpIHsKLSAgICAgICAgYm9vbCBhcHBseUF1
dGhvclN0eWxlcyA9IG1fc3RhdGUuZWxlbWVudCgpLT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JT
dHlsZXMoKTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyLT5oYXNTY29wZWRTdHlsZXMoKSAmJiBt
X3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lzdGVuY3koc3RhdGUuZWxlbWVudCgpKSkg
eworICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gc3RhdGUuZWxlbWVudCgpLT50cmVl
U2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKICAgICAgICAgYm9vbCBkb2N1bWVudFNjb3Bl
ID0gdHJ1ZTsKICAgICAgICAgdW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5z
dGFja1NpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsg
KytpKSB7Ci0gICAgICAgICAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CisgICAg
ICAgICAgICBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgICAgICAgICAgcmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxOwogCiAgICAgICAgICAgICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUm
IGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7CkBAIC01NjUsMTEwICs1
NjIsMTEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiAKICAgICAgICAgICAgIE1hdGNoUmVx
dWVzdCBtYXRjaFJlcXVlc3QoZnJhbWUubV9ydWxlU2V0LCBpbmNsdWRlRW1wdHlSdWxlcywgZnJh
bWUubV9zY29wZSk7CiAgICAgICAgICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJh
bmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICAgICAgICAgIHNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgICAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXMoc3RhdGUsIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5n
ZSk7CisgICAgICAgICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3Vs
dCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaEhvc3RSdWxlcyhzdGF0ZSwgcmVzdWx0LCBpbmNsdWRl
RW1wdHlSdWxlcyk7CiAjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHJlc3VsdCk7CiAgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVzKTsKICNl
bmRpZgogfQogCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzSG9zdFJ1bGVzKCkKK2lubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hh
cmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoU3RhdGUmIHN0YXRlKQogewogI2lmIEVOQUJM
RShTSEFET1dfRE9NKQotICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29s
dmVyLT5zdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fc3RhdGUuZWxlbWVu
dCgpKTsKKyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5
bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhzdGF0ZS5lbGVtZW50KCkpOwogI2Vs
c2UKICAgICByZXR1cm4gZmFsc2U7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICNlbmRpZgog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1
bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9z
dFJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcykKIHsKICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBBU1NFUlQobV9zY29wZVJl
c29sdmVyKTsKIAotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKKyAgICBzdGF0
ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAgIFZlY3RvcjxS
dWxlU2V0Kj4gbWF0Y2hlZFJ1bGVzOwotICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVs
ZXMobV9zdGF0ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7CisgICAgbV9zY29wZVJlc29sdmVy
LT5tYXRjaEhvc3RSdWxlcyhzdGF0ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7CiAgICAgaWYg
KG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUnVs
ZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0x
KSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1fc3RhdGUuZWxlbWVudCgpKSwgcnVsZVJhbmdlKTsKKyAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIE1hdGNoUmVxdWVzdChtYXRjaGVkUnVs
ZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIHN0YXRlLmVsZW1lbnQoKSksIHJ1bGVSYW5n
ZSk7CiAgICAgfQotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAg
IHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKICNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKICAgICBVTlVT
RURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOwogI2VuZGlmCiB9CiAKLXZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKFN0YXRlJiBz
dGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKLSAg
ICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CisgICAgc3RhdGUubWF0Y2hlZFJ1bGVz
KCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICBpZiAoIW1fc3RhdGUuZWxlbWVudCgp
KQorICAgIGlmICghc3RhdGUuZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBN
YXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgogICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3Qo
bV9ydWxlU2V0cy5hdXRob3JTdHlsZSgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgUnVsZVJh
bmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgY29s
bGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5n
ZSk7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgVmVjdG9yPE1hdGNoUmVxdWVzdD4gbWF0
Y2hSZXF1ZXN0czsKICAgICBtX3J1bGVTZXRzLnNoYWRvd0Rpc3RyaWJ1dGVkUnVsZXMoKS5jb2xs
ZWN0TWF0Y2hSZXF1ZXN0cyhpbmNsdWRlRW1wdHlSdWxlcywgbWF0Y2hSZXF1ZXN0cyk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaFJlcXVlc3RzLnNpemUoKTsgKytpKQotICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3RzW2ldLCBydWxlUmFuZ2UpOworICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgbWF0Y2hSZXF1ZXN0c1tpXSwgcnVsZVJh
bmdlKTsKICNlbmRpZgogCi0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7
CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQpOwogCi0gICAg
bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBt
YXRjaFNjb3BlZEF1dGhvclJ1bGVzKHN0YXRlLCByZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
IH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVz
dWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVz
ZXJSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpCiB7CiAgICAgaWYgKCFtX3J1bGVTZXRzLnVzZXJTdHlsZSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOworICAgIHN0
YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2Vy
UnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIE1hdGNoUmVx
dWVzdCBtYXRjaFJlcXVlc3QobV9ydWxlU2V0cy51c2VyU3R5bGUoKSwgaW5jbHVkZUVtcHR5UnVs
ZXMpOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLnVzZXJSdWxlUmFu
Z2UoKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7
Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0LCBydWxlUmFu
Z2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVS
YW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oc3RhdGUsIG1hdGNoUmVx
dWVzdCwgcnVsZVJhbmdlKTsKIAotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1
bHQpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIH0K
IAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwg
UnVsZVNldCogcnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhTdGF0ZSYg
c3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQogewotICAgIG1fc3Rh
dGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKKyAgICBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVh
cigpOwogICAgIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSA9IHJlc3VsdC5tYXRjaGVk
UHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQu
cmFuZ2VzLlVBUnVsZVJhbmdlKCk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1
ZXN0KHJ1bGVzKSwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwg
TWF0Y2hSZXF1ZXN0KHJ1bGVzKSwgcnVsZVJhbmdlKTsKIAotICAgIHNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhyZXN1bHQpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0
ZSwgcmVzdWx0KTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGNvbnN0IE1hdGNoUmVxdWVz
dCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KFN0YXRlJiBzdGF0ZSwgY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogcnVsZXMsIGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxl
UmFuZ2UmIHJ1bGVSYW5nZSkKIHsKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICByZXR1cm47CiAK
LSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgbWF5
IGVuZCB1cCBsb29raW5nIHVwIHN0eWxlIGZvciByYW5kb20gZWxlbWVudHMgaW4gdGhlIG1pZGRs
ZSBvZiBhIHJlY3Vyc2l2ZSB0cmVlIHJlc29sdmUuCiAgICAgLy8gQW5jZXN0b3IgaWRlbnRpZmll
ciBmaWx0ZXIgd29uJ3QgYmUgdXAtdG8tZGF0ZSBpbiB0aGF0IGNhc2UgYW5kIHdlIGNhbid0IHVz
ZSB0aGUgZmFzdCBwYXRoLgogICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fc2VsZWN0b3JG
aWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoc3RhdGUucGFyZW50Tm9kZSgpKSAmJiBtYXRj
aFJlcXVlc3QuYmVoYXZpb3JBdEJvdW5kYXJ5ID09IFNlbGVjdG9yQ2hlY2tlcjo6RG9lc05vdENy
b3NzQm91bmRhcnk7CkBAIC02ODIsNyArNjgxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMK
ICAgICAgICAgU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwogICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsTWF0Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwogICAgICAgICBQc2V1
ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgICAgIGlmIChydWxlTWF0Y2hlcyhy
dWxlRGF0YSwgbWF0Y2hSZXF1ZXN0LnNjb3BlLCBkeW5hbWljUHNldWRvLCBtYXRjaFJlcXVlc3Qu
YmVoYXZpb3JBdEJvdW5kYXJ5KSkgeworICAgICAgICBpZiAocnVsZU1hdGNoZXMoc3RhdGUsIHJ1
bGVEYXRhLCBtYXRjaFJlcXVlc3Quc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIG1hdGNoUmVxdWVzdC5i
ZWhhdmlvckF0Qm91bmRhcnkpKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8g
cHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2Rl
LgogICAgICAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcyA9IHJ1bGUt
PnByb3BlcnRpZXMoKTsKICAgICAgICAgICAgIGlmICghcHJvcGVydGllcyB8fCAocHJvcGVydGll
cy0+aXNFbXB0eSgpICYmICFtYXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMpKSB7CkBAIC03
MTAsNyArNzA5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAgICAgICAgICAg
ICAgcnVsZVJhbmdlLmZpcnN0UnVsZUluZGV4ID0gcnVsZVJhbmdlLmxhc3RSdWxlSW5kZXg7CiAK
ICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1hdGNoZWQg
cnVsZXMuCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEp
OworICAgICAgICAgICAgICAgIHN0YXRlLmFkZE1hdGNoZWRSdWxlKCZydWxlRGF0YSk7CiAgICAg
ICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2ll
LCB0cnVlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTcy
NiwzMSArNzI1LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUnVsZXMoY29uc3QgUnVs
ZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0YSogcjIpCiAgICAgcmV0dXJuIChzcGVjaWZpY2l0eTEg
PT0gc3BlY2lmaWNpdHkyKSA/IHIxLT5wb3NpdGlvbigpIDwgcjItPnBvc2l0aW9uKCkgOiBzcGVj
aWZpY2l0eTEgPCBzcGVjaWZpY2l0eTI7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydE1h
dGNoZWRSdWxlcygpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRNYXRjaGVkUnVsZXMoU3RhdGUm
IHN0YXRlKQogewotICAgIHN0ZDo6c29ydChtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmJlZ2luKCks
IG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuZW5kKCksIGNvbXBhcmVSdWxlcyk7CisgICAgc3RkOjpz
b3J0KHN0YXRlLm1hdGNoZWRSdWxlcygpLmJlZ2luKCksIHN0YXRlLm1hdGNoZWRSdWxlcygpLmVu
ZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYg
cmVzdWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcykKIHsKLSAgICBtYXRjaFVBUnVsZXMo
cmVzdWx0KTsKKyAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiAKICAgICAvLyBOb3cg
d2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMpCi0gICAgICAgIG1hdGNoVXNlclJ1bGVzKHJlc3VsdCwgZmFsc2UpOworICAgICAgICBt
YXRjaFVzZXJSdWxlcyhzdGF0ZSwgcmVzdWx0LCBmYWxzZSk7CiAKICAgICAvLyBOb3cgY2hlY2sg
YXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1
dGVzIG1hcHBlZCBmcm9tIEhUTUwuCi0gICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpKSB7
Ci0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxl
ZEVsZW1lbnQoKS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgaWYgKHN0YXRl
LnN0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJl
c3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgp
KTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRp
b25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9u
YWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8gYWZ0ZXIgYWxs
IGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1
ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMo
cmVzdWx0LCBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpKTsKIAotICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlz
SFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0hU
TUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0YXRlLnN0eWxlZEVs
ZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7Cisg
ICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KHN0
YXRlLnN0eWxlZEVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRl
KGlzQXV0byk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAgICAgICAgIGFkZE1h
dGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlvbiA9PSBMVFIgPyBsZWZ0VG9SaWdo
dERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOwogICAgICAgICB9CkBA
IC03NTgsMjEgKzc1NywyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAgIAogICAgIC8v
IENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5leHQuCiAgICAgaWYgKG1fbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFs
c2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHN0YXRlLCByZXN1bHQsIGZhbHNlKTsKIAog
ICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KLSAgICBpZiAobV9t
YXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9z
dGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCkpIHsKKyAgICBpZiAobV9tYXRjaEF1
dGhvckFuZFVzZXJTdHlsZXMgJiYgc3RhdGUuc3R5bGVkRWxlbWVudCgpICYmIHN0YXRlLnN0eWxl
ZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKSkgewogICAgICAgICAvLyBJbmxpbmUgc3R5bGUgaXMg
aW1tdXRhYmxlIGFzIGxvbmcgYXMgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4KICAgICAgICAg
Ly8gRklYTUU6IE1lZGlhIGNvbnRyb2wgc2hhZG93IHRyZWVzIHNlZW0gdG8gaGF2ZSBwcm9ibGVt
cyB3aXRoIGNhY2hpbmcuCi0gICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFt
X3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIW1f
c3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0luU2hhZG93VHJlZSgpOworICAgICAgICBib29sIGlz
SW5saW5lU3R5bGVDYWNoZWFibGUgPSAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHls
ZSgpLT5pc011dGFibGUoKSAmJiAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0luU2hhZG93VHJl
ZSgpOwogICAgICAgICAvLyBGSVhNRTogQ29uc3RpZnkuCi0gICAgICAgIGFkZEVsZW1lbnRTdHls
ZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUo
KSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3Bl
cnRpZXMocmVzdWx0LCBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCksIGlzSW5s
aW5lU3R5bGVDYWNoZWFibGUpOwogICAgIH0KIAogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gTm93
IGNoZWNrIFNNSUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0eWxlLgotICAgIGlmIChpbmNsdWRlU01J
TFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHls
ZWRFbGVtZW50KCkgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQot
ICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9w
ZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICovKTsKKyAgICBpZiAoaW5jbHVkZVNNSUxQ
cm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIHN0YXRlLnN0eWxlZEVs
ZW1lbnQoKSAmJiBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAg
ICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVu
dCo+KHN0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygp
LCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpbmNs
dWRlU01JTFByb3BlcnRpZXMpOwogI2VuZGlmCkBAIC03OTQsMTQgKzc5MywxMiBAQCBpbmxpbmUg
dm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKICAgICBt
X2VsZW1lbnRMaW5rU3RhdGUgPSBlID8gZS0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgp
LT5kZXRlcm1pbmVMaW5rU3RhdGUoZSkgOiBOb3RJbnNpZGVMaW5rOwogfQogCi1pbmxpbmUgdm9p
ZCBTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudChFbGVtZW50KiBlKQoraW5saW5lIHZvaWQgU3R5
bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoU3RhdGUmIHN0YXRlLCBFbGVtZW50KiBlKQogewotICAg
IGlmIChtX3N0YXRlLmVsZW1lbnQoKSAhPSBlKSB7Ci0gICAgICAgIG1fc3RhdGUuaW5pdEVsZW1l
bnQoZSk7Ci0gICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCkpIHsKLSAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9j
dW1lbnRFbGVtZW50KGZhbHNlKTsKLSAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRp
bmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwotICAgICAgICB9CisgICAgc3RhdGUu
aW5pdEVsZW1lbnQoZSk7CisgICAgaWYgKGUgJiYgZSA9PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKSkgeworICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRv
Y3VtZW50RWxlbWVudChmYWxzZSk7CisgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdN
b2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwogICAgIH0KIH0KIApAQCAtODg5LDI2ICs4
ODYsMjIgQEAgTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBw
YXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW4KICAgICByZXR1cm4gMDsKIH0KIAotYm9v
bCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxl
U2V0KiBydWxlU2V0KQorYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVN
YXRjaGVzUnVsZVNldChFbGVtZW50KiBlLCBSdWxlU2V0KiBydWxlU2V0KQogewogICAgIGlmICgh
cnVsZVNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVz
KCkuY2xlYXIoKTsKIAotICAgIG1fc3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJp
bmdSdWxlcyk7CisgICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQoKSk7CisgICAgc3RhdGUuaW5pdEVs
ZW1lbnQoZSk7CisgICAgc3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxl
cyk7CiAgICAgaW50IGZpcnN0UnVsZUluZGV4ID0gLTEsIGxhc3RSdWxlSW5kZXggPSAtMTsKICAg
ICBSdWxlUmFuZ2UgcnVsZVJhbmdlKGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKLSAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocnVsZVNldCksIHJ1bGVSYW5nZSk7
Ci0gICAgbV9zdGF0ZS5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwot
ICAgIGlmIChtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KHJ1bGVT
ZXQpLCBydWxlUmFuZ2UpOworICAgIHJldHVybiAhc3RhdGUubWF0Y2hlZFJ1bGVzKCkuaXNFbXB0
eSgpOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChT
dHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFy
ZVN0eWxlV2l0aENvbnRyb2woY29uc3QgU3RhdGUmIHN0YXRlLCBTdHlsZWRFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAogewotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgSFRN
TElucHV0RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50
KCk7CiAgICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBzdGF0ZS5lbGVt
ZW50KCktPnRvSW5wdXRFbGVtZW50KCk7CiAKQEAgLTk2Miw5ICs5NTUsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVudCkKICAgICBy
ZXR1cm4gZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQoZWxlbWVudCkt
Pmhhc0RpcmVjdGlvbkF1dG8oKTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2Fu
ZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQq
IHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5k
aWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3QgU3RhdGUmIHN0
YXRlLCBTdHlsZWRFbGVtZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25zdAogewotICAgIGNvbnN0
IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZWxlbWVu
dERhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5lbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5h
bWVzOjpsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxO
YW1lczo6bGFuZ0F0dHIpKQpAQCAtMTAwNCwxMCArOTk2LDkgQEAgYm9vbCBTdHlsZVJlc29sdmVy
OjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0
eWxlZEUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFy
ZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgU3R5
bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KGNvbnN0IFN0YXRlJiBzdGF0ZSwg
U3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7CiAKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDM1LDcg
KzEwMjYsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChT
dHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHls
ZUFmZmVjdGluZ0F0dHJpYnV0ZXMoZWxlbWVudCkpCisgICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRl
SGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKHN0YXRlLCBlbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9uYWxQ
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MDU2LDcgKzEwNDcsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxl
bWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChpc0NvbnRyb2wgIT0g
c3RhdGUuZWxlbWVudCgpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wo
ZWxlbWVudCkpCisgICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9s
KHN0YXRlLCBlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHN0eWxl
LT50cmFuc2l0aW9ucygpIHx8IHN0eWxlLT5hbmltYXRpb25zKCkpCkBAIC0xMDk2LDEyICsxMDg3
LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBT
dHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhO
b2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0CitpbmxpbmUgU3R5bGVkRWxlbWVudCog
U3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoY29uc3QgU3RhdGUmIHN0
YXRlLCBOb2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0CiB7CiAgICAgZm9yICg7IG5v
ZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICBpZiAoIW5vZGUt
PmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUp
KSkKKyAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0ZSwgc3RhdGljX2Nh
c3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBp
ZiAoY291bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCiAgICAgICAgICAgICByZXR1cm4g
MDsKQEAgLTExMDksOSArMTEwMCw4IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29s
dmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKTsKIH0KIAotUmVuZGVyU3R5bGUq
IFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKK1JlbmRlclN0eWxlKiBTdHlsZVJl
c29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZShTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgU3RhdGUmIHN0
YXRlID0gbV9zdGF0ZTsKICAgICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQoKSB8fCAhc3RhdGUu
cGFyZW50U3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTExNDQsNyArMTEzNCw3IEBA
IFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgU3R5
bGVkRWxlbWVudCogc2hhcmVFbGVtZW50ID0gMDsKICAgICBOb2RlKiBjb3VzaW5MaXN0ID0gc3Rh
dGUuc3R5bGVkRWxlbWVudCgpLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB3aGlsZSAoY291c2lu
TGlzdCkgewotICAgICAgICBzaGFyZUVsZW1lbnQgPSBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmlu
Zyhjb3VzaW5MaXN0LCBjb3VudCk7CisgICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5n
Rm9yU3R5bGVTaGFyaW5nKHN0YXRlLCBjb3VzaW5MaXN0LCBjb3VudCk7CiAgICAgICAgIGlmIChz
aGFyZUVsZW1lbnQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY291c2luTGlzdCA9IGxv
Y2F0ZUNvdXNpbkxpc3QoY291c2luTGlzdC0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNv
dW50KTsKQEAgLTExNTUsMTMgKzExNDUsMTMgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6
OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBDYW4ndCBz
aGFyZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVuZCBh
cyBpdCBzaG91bGQgcmFyZWx5IGZhaWwuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1h
dGNoZXNSdWxlU2V0KG1fcnVsZVNldHMuc2libGluZygpKSkKKyAgICBpZiAoc3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoc3RhdGUuZWxlbWVudCgpLCBtX3J1bGVTZXRzLnNpYmxp
bmcoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIENhbid0IHNoYXJlIGlmIGF0dHJpYnV0
ZSBydWxlcyBhcHBseS4KLSAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQobV9ydWxlU2V0cy51bmNvbW1vbkF0dHJpYnV0ZSgpKSkKKyAgICBpZiAoc3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoc3RhdGUuZWxlbWVudCgpLCBtX3J1bGVTZXRzLnVuY29t
bW9uQXR0cmlidXRlKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBDYW4ndCBzaGFyZSBp
ZiBAaG9zdCBALXJ1bGVzIGFwcGx5LgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzSG9zdFJ1bGVzKCkpCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0
UnVsZXMoc3RhdGUpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBp
bmRleCByZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNl
dCBieSB0aGUgc2libGluZyBydWxlIG1hdGNoIGFib3ZlLgogICAgIGlmIChwYXJlbnRFbGVtZW50
UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQoKS0+cGFyZW50RWxlbWVudCgpKSkKQEAgLTEx
NjksNyArMTE1OSw3IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRT
dHlsZSgpCiAgICAgcmV0dXJuIHNoYXJlRWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKIH0KIAotdm9p
ZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJl
c3VsdCkKIHsKICAgICBNYXRjaGluZ1VBUnVsZXNTY29wZSBzY29wZTsKIApAQCAtMTE3OCwxNSAr
MTE2OCwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0KQogICAgICAgICByZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKICAgICBSdWxlU2V0
KiB1c2VyQWdlbnRTdHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1hdGNoU3BlY2lmaWMo
InByaW50IikKICAgICAgICAgPyBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRQcmludFN0
eWxlIDogQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0U3R5bGU7Ci0gICAgbWF0Y2hVQVJ1
bGVzKHJlc3VsdCwgdXNlckFnZW50U3R5bGVTaGVldCk7CisgICAgbWF0Y2hVQVJ1bGVzKHN0YXRl
LCByZXN1bHQsIHVzZXJBZ2VudFN0eWxlU2hlZXQpOwogCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUs
IHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgogICAgIGlm
IChkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3Vs
dCwgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0UXVpcmtzU3R5bGUpOworICAgICAgICBt
YXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCwgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0
UXVpcmtzU3R5bGUpOwogCiAgICAgLy8gSWYgZG9jdW1lbnQgdXNlcyB2aWV3IHNvdXJjZSBzdHls
ZXMgKGluIHZpZXcgc291cmNlIG1vZGUgb3IgaW4geG1sIHZpZXdlciBtb2RlKSwgdGhlbiB3ZSBt
YXRjaCBydWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJjZSBzdHlsZSBzaGVldC4KICAgICBpZiAoZG9j
dW1lbnQoKS0+aXNWaWV3U291cmNlKCkpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIENT
U0RlZmF1bHRTdHlsZVNoZWV0czo6dmlld1NvdXJjZVN0eWxlKCkpOworICAgICAgICBtYXRjaFVB
UnVsZXMoc3RhdGUsIHJlc3VsdCwgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjp2aWV3U291cmNlU3R5
bGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFN0eWxlc0ZvclBhZ2luYXRpb25Nb2RlKFBhZ2lu
YXRpb246Ok1vZGUgcGFnaW5hdGlvbk1vZGUsIFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTEzODQs
MjUgKzEzNzQsMjggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKICAgICAgICAgcmV0dXJuIHNf
c3R5bGVOb3RZZXRBdmFpbGFibGU7CiAgICAgfQogCi0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0
ZTsKLSAgICBpbml0RWxlbWVudChlbGVtZW50KTsKKyAgICBTdGF0ZSBzdGF0ZShkb2N1bWVudCgp
KTsKKyAgICBpbml0RWxlbWVudChzdGF0ZSwgZWxlbWVudCk7CiAgICAgc3RhdGUuaW5pdEZvclN0
eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlbGVtZW50LCBkZWZhdWx0UGFyZW50LCBOT1BTRVVETywg
cmVnaW9uRm9yU3R5bGluZyk7CiAgICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxl
U2hhcmluZyAmJiAhc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkpIHsKLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICAg
ICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoc3RhdGUpOwog
ICAgICAgICBpZiAoc2hhcmVkU3R5bGUpCiAgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7
CiAgICAgfQogCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjbG9uZUZvclBhcmVudDsKKyAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwogCiAgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCkp
IHsKLSAgICAgICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKLSAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUoKSwgaXNBdFNo
YWRvd0JvdW5kYXJ5KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBS
ZW5kZXJTdHlsZTo6Tm90QXRTaGFkb3dCb3VuZGFyeSk7CisgICAgICAgIHN0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpOworICAgICAgICBzdHlsZS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50
U3R5bGUoKSwgaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0U2hh
ZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6Tm90QXRTaGFkb3dCb3VuZGFyeSk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgc3RhdGUuc2V0U3R5bGUoZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpKTsK
LSAgICAgICAgY2xvbmVGb3JQYXJlbnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUuc3R5bGUo
KSk7CisgICAgICAgIHN0eWxlID0gZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpOworICAgICAgICBj
bG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdHlsZS5nZXQoKSk7CiAgICAgICAg
IHN0YXRlLnNldFBhcmVudFN0eWxlKGNsb25lRm9yUGFyZW50LmdldCgpKTsKICAgICB9CisgICAg
c3RhdGUuc2V0U3R5bGUoc3R5bGUpOworCiAgICAgLy8gY29udGVudGVkaXRhYmxlIGF0dHJpYnV0
ZSAoaW1wbGVtZW50ZWQgYnkgLXdlYmtpdC11c2VyLW1vZGlmeSkgc2hvdWxkCiAgICAgLy8gYmUg
cHJvcGFnYXRlZCBmcm9tIHNoYWRvdyBob3N0IHRvIGRpc3RyaWJ1dGVkIG5vZGUuCiAgICAgaWYg
KHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7CkBAIC0xNDMwLDE2ICsxNDIz
LDE0IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAKICAgICBNYXRjaFJlc3VsdCBtYXRjaFJl
c3VsdDsKICAgICBpZiAobWF0Y2hpbmdCZWhhdmlvciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxl
cykKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKG1hdGNoUmVzdWx0KTsKKyAgICAgICAgbWF0Y2hVQVJ1
bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCk7CiAgICAgZWxzZQotICAgICAgICBtYXRjaEFsbFJ1bGVz
KG1hdGNoUmVzdWx0LCBtYXRjaGluZ0JlaGF2aW9yICE9IE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdT
TUlMKTsKKyAgICAgICAgbWF0Y2hBbGxSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIG1hdGNoaW5n
QmVoYXZpb3IgIT0gTWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NNSUwpOwogCi0gICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwgZWxlbWVudCk7CisgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIGVsZW1lbnQpOwogCiAgICAgLy8gQ2xlYW4gdXAg
b3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90
aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cGFyZW50U3R5bGUoKSwgZWxlbWVudCk7Ci0KLSAgICBzdGF0ZS5jbGVhcigpOyAvLyBDbGVhciBv
dXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCisgICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUsIHN0
eWxlLmdldCgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpLCBlbGVtZW50KTsKIAogICAgIGRvY3VtZW50
KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIApAQCAtMTQ0Nyw0MyArMTQzOCw0MCBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxl
bWVudCogZWxlbWVudCwgUmVuZGVyUwogICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKIH0K
IAotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFt
ZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBr
ZXlmcmFtZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKK1Bhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoU3RhdGUmIHN0YXRlLCBjb25z
dCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFt
ZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKIHsKICAgICBNYXRjaFJlc3VsdCByZXN1
bHQ7CiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCiAgICAgICAgIGFkZE1hdGNoZWRQ
cm9wZXJ0aWVzKHJlc3VsdCwga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSk7CiAKLSAgICBBU1NFUlQo
IW1fc3RhdGUuc3R5bGUoKSk7Ci0KLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotCiAgICAg
Ly8gQ3JlYXRlIHRoZSBzdHlsZQotICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjbG9u
ZShlbGVtZW50U3R5bGUpKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVy
U3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUpOwog
ICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKIAogICAgIC8vIFdlIGRvbid0IG5lZWQg
dG8gYm90aGVyIHdpdGggIWltcG9ydGFudC4gU2luY2UgdGhlcmUgaXMgb25seSBldmVyIG9uZQog
ICAgIC8vIGRlY2wsIHRoZXJlJ3Mgbm90aGluZyB0byBvdmVycmlkZS4gU28ganVzdCBhZGQgdGhl
IGZpcnN0IHByb3BlcnRpZXMuCiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAg
aWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgICAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1bHQsIGZh
bHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25s
eSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0
ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwogCiAg
ICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0
aGUgZm9udC1zaXplCiAgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQotICAgICAgICBh
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVl
KCkpOworICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQs
IHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBw
cm9wZXJ0aWVzLgogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwg
MCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwor
ICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3Rh
dGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAx
LCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9u
ZSBvZiB0aGUgbm9uLWVzc2VudGlhbCBmb250IHByb3BzLAogICAgIC8vIGdvIGFoZWFkIGFuZCB1
cGRhdGUgaXQgYSBzZWNvbmQgdGltZS4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9u
dChzdGF0ZSk7CiAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5
IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBsb2FkUGVuZGlu
Z1Jlc291cmNlcyhzdGF0ZSk7CiAgICAgCiAgICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHBy
b3BlcnRpZXMgdG8gdGhlIGtleWZyYW1lLgogICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnR5U2V0
KiBzdHlsZURlY2xhcmF0aW9uID0ga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkgewpAQCAtMTUyMCwx
NSArMTUwOCwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0
aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogCiAgICAgLy8gQ29uc3RydWN0
IGFuZCBwb3B1bGF0ZSB0aGUgc3R5bGUgZm9yIGVhY2gga2V5ZnJhbWUKICAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4mIGtleWZyYW1lcyA9IGtleWZyYW1lc1J1bGUtPmtl
eWZyYW1lcygpOworICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOworICAgIGluaXRFbGVtZW50
KHN0YXRlLCBlKTsKKyAgICBzdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgLy8gQXBwbHkgdGhlIGRlY2xhcmF0aW9uIHRvIHRoZSBzdHlsZS4gVGhpcyBpcyBh
IHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgbG9naWMgaW4gc3R5bGVGb3JFbGVtZW50Ci0gICAg
ICAgIGluaXRFbGVtZW50KGUpOwotICAgICAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUo
ZG9jdW1lbnQoKSwgZSk7Ci0KICAgICAgICAgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUg
PSBrZXlmcmFtZXNbaV0uZ2V0KCk7CiAKICAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZh
bHVlKDAsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJh
bWUoZWxlbWVudFN0eWxlLCBrZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBrZXlm
cmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHlsZSwg
a2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKIAogICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFt
ZSBzdHlsZSB0byBhbGwgdGhlIGluZGljYXRlZCBrZXkgdGltZXMKICAgICAgICAgVmVjdG9yPGZs
b2F0PiBrZXlzOwpAQCAtMTU0OCw3ICsxNTM2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlm
cmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwK
ICAgICAgICAgICAgIHplcm9QZXJjZW50S2V5ZnJhbWUtPnNldEtleVRleHQoIjAlIik7CiAgICAg
ICAgIH0KICAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDApOwotICAgICAg
ICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCB6
ZXJvUGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtleWZyYW1lVmFs
dWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShzdGF0ZSwgZWxlbWVudFN0eWxlLCB6ZXJvUGVy
Y2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZy
YW1lVmFsdWUpOwogICAgIH0KIApAQCAtMTU2MCw3ICsxNTQ4LDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJT
dHlsZSogZWwKICAgICAgICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUtPnNldEtleVRleHQo
IjEwMCUiKTsKICAgICAgICAgfQogICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUo
MSwgMCk7Ci0gICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShl
bGVtZW50U3R5bGUsIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAg
ICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVt
ZW50U3R5bGUsIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKICAgICAg
ICAgbGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1ZSk7CiAgICAgfQogfQpAQCAtMTU3MSwyNCArMTU1
OSwyMiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbAogICAgIGlmICghZSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotCi0gICAgaW5pdEVsZW1lbnQo
ZSk7Ci0KKyAgICBTdGF0ZSBzdGF0ZShkb2N1bWVudCgpKTsKKyAgICBpbml0RWxlbWVudChzdGF0
ZSwgZSk7CiAgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCBwYXJl
bnRTdHlsZSwgcHNldWRvKTsKICAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRl
KCkpOwotICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKG1fc3RhdGUucGFyZW50U3R5bGUo
KSk7CisgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUoKSk7
CiAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBvZiBv
dXIgcXVpcmsvcHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxraW5n
CiAgICAgLy8gdGhvc2UgcnVsZXMuCiAKICAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9y
IHJ1bGVzLgogICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgIG1hdGNoVUFSdWxlcyht
YXRjaFJlc3VsdCk7CisgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCk7CiAKICAg
ICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKLSAgICAgICAgbWF0Y2hVc2VyUnVs
ZXMobWF0Y2hSZXN1bHQsIGZhbHNlKTsKLSAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhtYXRjaFJl
c3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaFVzZXJSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQs
IGZhbHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIGZh
bHNlKTsKICAgICB9CiAKICAgICBpZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuaXNF
bXB0eSgpKQpAQCAtMTU5NiwxMyArMTU4MiwxMyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBT
dHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbAog
CiAgICAgc3RhdGUuc3R5bGUoKS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAKLSAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlKTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKHN0YXRlLCBtYXRjaFJlc3VsdCwgZSk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUg
b2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBz
KS4KLSAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHlsZSgpLCBtX3N0YXRlLnBhcmVudFN0
eWxlKCksIDApOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLCBzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5wYXJlbnRTdHlsZSgpLCAwKTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2Vz
IHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwor
ICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKHN0YXRlKTsKIAogICAgIGRvY3VtZW50KCktPmRpZEFj
Y2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIApAQCAtMTYxMiwxMiArMTU5OCwxMyBAQCBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRv
SWQgcHNldWRvLCBFbAogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKIHsKLSAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJl
c29sdmUoZG9jdW1lbnQoKSwgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jv
b3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgorICAgIFN0
YXRlIHN0YXRlKGRvY3VtZW50KCkpOworICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9j
dW1lbnQoKSwgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RFbGVtZW50
U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgogCi0gICAgbV9zdGF0ZS5z
ZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOwotICAgIG1fc3RhdGUuc3R5bGUoKS0+aW5o
ZXJpdEZyb20obV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworICAgIHN0YXRlLnNldFN0eWxl
KFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CisgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20o
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKIAotICAgIGNvbnN0IGJvb2wgaXNMZWZ0ID0gaXNM
ZWZ0UGFnZShwYWdlSW5kZXgpOworICAgIGNvbnN0IGJvb2wgaXNMZWZ0ID0gaXNMZWZ0UGFnZShz
dGF0ZSwgcGFnZUluZGV4KTsKICAgICBjb25zdCBib29sIGlzRmlyc3QgPSBpc0ZpcnN0UGFnZShw
YWdlSW5kZXgpOwogICAgIGNvbnN0IFN0cmluZyBwYWdlID0gcGFnZU5hbWUocGFnZUluZGV4KTsK
ICAgICAKQEAgLTE2MjYsNDIgKzE2MTMsNDMgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5
bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgbWF0Y2hQYWdlUnVs
ZXMocmVzdWx0LCBtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2Up
OwogICAgIC8vIE9ubHkgY29uc2lkZXIgdGhlIGdsb2JhbCBhdXRob3IgUnVsZVNldCBmb3IgQHBh
Z2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KICAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1
bHQsIG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAg
ICBtX3N0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKKyAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0
VmFsdWUoMCk7CiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENT
U19WQVJJQUJMRVMpCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRp
b25zPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0g
MSwgaW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURl
ZmluaXRpb25zPihzdGF0ZSwgcmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogI2VuZGlmCi0gICAgYXBwbHlNYXRjaGVk
UHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgcmVzdWx0
LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRl
ZE9ubHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1
cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KHN0YXRlKTsK
IAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQg
b24gdGhlIGZvbnQtc2l6ZS4KLSAgICBpZiAobV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKLSAg
ICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fc3RhdGUubGluZUhl
aWdodFZhbHVlKCkpOworICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAg
YXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVp
Z2h0VmFsdWUoKSk7CiAKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJv
cGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJp
b3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgcmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCiAgICAgLy8gU3RhcnQgbG9h
ZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5n
UmVzb3VyY2VzKCk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogCiAgICAgZG9j
dW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVybiB0
aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CisgICAgcmV0dXJuIHN0
YXRlLnRha2VTdHlsZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkKIHsKLSAgICBtX3N0YXRlLnNldFN0eWxlKFJl
bmRlclN0eWxlOjpjcmVhdGUoKSk7CisgICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQoKSk7CisgICAg
c3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKICAgICAvLyBNYWtlIHN1cmUg
b3VyIGZvbnRzIGFyZSBpbml0aWFsaXplZCBpZiB3ZSBkb24ndCBpbmhlcml0IHRoZW0gZnJvbSBv
dXIgcGFyZW50IHN0eWxlLgogICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNl
dHRpbmdzKCkpIHsKLSAgICAgICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzZXR0aW5ncyk7Ci0gICAg
ICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAg
ICAgIGluaXRpYWxpemVGb250U3R5bGUoc3RhdGUsIHNldHRpbmdzKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+Zm9udCgpLnVwZGF0ZSgwKTsKIAotICAgIHJldHVybiBtX3N0YXRlLnRha2VTdHlsZSgp
OworICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JUZXh0KFRleHQqIHRleHROb2RlKQpAQCAtMTc1
Niw3ICsxNzQ0LDcgQEAgc3RhdGljIGJvb2wgaXNEaXNwbGF5RmxleGlibGVCb3goRURpc3BsYXkg
ZGlzcGxheSkKICAgICByZXR1cm4gZGlzcGxheSA9PSBGTEVYIHx8IGRpc3BsYXkgPT0gSU5MSU5F
X0ZMRVg7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCiB7CiAgICAg
QVNTRVJUKHBhcmVudFN0eWxlKTsKIApAQCAtMTk0OSw3ICsxOTM3LDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHkKIAogICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQg
YWRqdXN0aW5nIHRoZSBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSkKLSAg
ICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHls
ZSwgZSwgbV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRhKCksIG1f
c3RhdGUuYmFja2dyb3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAg
ICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywgc3R5bGUs
IGUsIHN0YXRlLmhhc1VBQXBwZWFyYW5jZSgpLCBzdGF0ZS5ib3JkZXJEYXRhKCksIHN0YXRlLmJh
Y2tncm91bmREYXRhKCksIHN0YXRlLmJhY2tncm91bmRDb2xvcigpKTsKIAogICAgIC8vIElmIHdl
IGhhdmUgZmlyc3QtbGV0dGVyIHBzZXVkbyBzdHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUu
CiAgICAgaWYgKHN0eWxlLT5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQpAQCAtMjAzMCwx
OCArMjAxOCwxOCBAQCBzdGF0aWMgdm9pZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRl
clN0eWxlKiBzdHlsZSkKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNj
cmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoU3RhdGUmIHN0YXRlKQogewotICAgIGlmICghbV9zdGF0
ZS5mb250RGlydHkoKSkKKyAgICBpZiAoIXN0YXRlLmZvbnREaXJ0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gbV9zdGF0ZS5zdHlsZSgpOwotICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShz
dHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKLSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5
bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChz
dGF0ZSk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3RhdGUuc3R5bGUoKTsKKyAgICBjaGVj
a0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3RhdGUsIHN0eWxlLCBzdGF0ZS5wYXJlbnRTdHlsZSgp
KTsKKyAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3RhdGUsIHN0eWxlLCBzdGF0ZS5wYXJlbnRTdHls
ZSgpKTsKICAgICBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKHN0eWxlKTsKICAgICBzdHlsZS0+
Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7Ci0gICAgbV9zdGF0ZS5zZXRGb250RGlydHko
ZmFsc2UpOworICAgIHN0YXRlLnNldEZvbnREaXJ0eShmYWxzZSk7CiB9CiAKIFBhc3NSZWZQdHI8
Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQq
IGUsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQpAQCAtMjA1NCwzOSArMjA0MiwzNCBAQCBQYXNz
UmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxl
bWVudChFbGVtZW50KiBlLCBQcwogICAgIGlmICghZSB8fCAhZS0+ZG9jdW1lbnQoKS0+aGF2ZVN0
eWxlc2hlZXRzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9zdGF0ZS5zZXRN
b2RlKFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKKyAgICBTdGF0ZSBzdGF0ZShk
b2N1bWVudCgpKTsKKyAgICBzdGF0ZS5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGlu
Z1J1bGVzKTsKIAotICAgIGluaXRFbGVtZW50KGUpOwotICAgIG1fc3RhdGUuaW5pdEZvclN0eWxl
UmVzb2x2ZShkb2N1bWVudCgpLCBlLCAwLCBwc2V1ZG9JZCk7CisgICAgaW5pdEVsZW1lbnQoc3Rh
dGUsIGUpOworICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwgMCwg
cHNldWRvSWQpOwogCiAgICAgTWF0Y2hSZXN1bHQgZHVtbXk7CiAgICAgaWYgKHJ1bGVzVG9JbmNs
dWRlICYgVUFBbmRVc2VyQ1NTUnVsZXMpIHsKICAgICAgICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVs
ZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KLSAgICAgICAgbWF0Y2hVQVJ1bGVzKGR1bW15
KTsKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCBkdW1teSk7CiAKICAgICAgICAgLy8gTm93
IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCiAgICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcykKLSAgICAgICAgICAgIG1hdGNoVXNlclJ1bGVzKGR1bW15LCBydWxlc1RvSW5j
bHVkZSAmIEVtcHR5Q1NTUnVsZXMpOworICAgICAgICAgICAgbWF0Y2hVc2VyUnVsZXMoc3RhdGUs
IGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogICAgIH0KIAogICAgIGlm
IChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiAocnVsZXNUb0luY2x1ZGUgJiBBdXRob3JD
U1NSdWxlcykpIHsKLSAgICAgICAgbV9zdGF0ZS5zZXRTYW1lT3JpZ2luT25seSghKHJ1bGVzVG9J
bmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcykpOworICAgICAgICBzdGF0ZS5zZXRTYW1lT3Jp
Z2luT25seSghKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcykpOwogCiAgICAg
ICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzLgotICAgICAgICBtYXRjaEF1
dGhvclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwotCi0gICAg
ICAgIG1fc3RhdGUuc2V0U2FtZU9yaWdpbk9ubHkoZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhv
clJ1bGVzKHN0YXRlLCBkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKICAg
ICB9CiAKLSAgICBtX3N0YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHls
ZSk7Ci0KLSAgICByZXR1cm4gbV9zdGF0ZS50YWtlUnVsZUxpc3QoKTsKKyAgICByZXR1cm4gc3Rh
dGUudGFrZVJ1bGVMaXN0KCk7CiB9CiAKLWlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnJ1bGVN
YXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2Nv
cGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBTZWxlY3RvckNoZWNrZXI6OkJlaGF2aW9yQXRC
b3VuZGFyeSBiZWhhdmlvckF0Qm91bmRhcnkpCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpy
dWxlTWF0Y2hlcyhTdGF0ZSYgc3RhdGUsIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBTZWxlY3RvckNo
ZWNrZXI6OkJlaGF2aW9yQXRCb3VuZGFyeSBiZWhhdmlvckF0Qm91bmRhcnkpCiB7Ci0gICAgU3Rh
dGUmIHN0YXRlID0gbV9zdGF0ZTsKLQogICAgIGlmIChydWxlRGF0YS5oYXNGYXN0Q2hlY2thYmxl
U2VsZWN0b3IoKSkgewogICAgICAgICAvLyBXZSBrbm93IHRoaXMgc2VsZWN0b3IgZG9lcyBub3Qg
aW5jbHVkZSBhbnkgcHNldWRvIGVsZW1lbnRzLgogICAgICAgICBpZiAoc3RhdGUucHNldWRvU3R5
bGUoKSAhPSBOT1BTRVVETykKQEAgLTIxMjUsNyArMjEwOCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZl
cjo6Y2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3Is
IEVsZW1lCiAgICAgaWYgKCFyZWdpb25TZWxlY3RvciB8fCAhcmVnaW9uRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihk
b2N1bWVudCgpLCBtX3N0YXRlLm1vZGUoKSk7CisgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9y
Q2hlY2tlcihkb2N1bWVudCgpLCBTZWxlY3RvckNoZWNrZXI6OlF1ZXJ5aW5nUnVsZXMpOwogICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1Nl
bGVjdG9yTGlzdDo6bmV4dChzKSkKICAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5tYXRjaGVz
KHMsIHJlZ2lvbkVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTQ3LDkg
KzIxMzAsOSBAQCBMZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRvRmxvYXRMZW5ndGgoQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBSZQogfQogCiB0ZW1wbGF0ZSA8U3R5bGVS
ZXNvbHZlcjo6U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxl
UnVsZSogcnVsZSwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0
eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBlKQordm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBw
cm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJp
dGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKIHsK
LSAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJl
Z2lvbikgfHwgbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpOworICAgIEFTU0VSVCgocHJvcGVy
dHlXaGl0ZWxpc3RUeXBlICE9IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBzdGF0ZS5yZWdp
b25Gb3JTdHlsaW5nKCkpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29r
aWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgp
LCBydWxlLCB0aGlzKTsKIAogICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVz
LT5wcm9wZXJ0eUNvdW50KCk7CkBAIC0yMTc3LDcgKzIxNjAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBT
dHlsZVJ1bAogICAgICAgICBjYXNlIFZhcmlhYmxlRGVmaW5pdGlvbnM6CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0eVZhcmlhYmxlIDwgZmlyc3RDU1NQcm9wZXJ0eSwgQ1NT
X3ZhcmlhYmxlX2lzX2JlZm9yZV9maXJzdF9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBpZiAocHJv
cGVydHkgPT0gQ1NTUHJvcGVydHlWYXJpYWJsZSkKLSAgICAgICAgICAgICAgICBhcHBseVByb3Bl
cnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhcHBs
eVByb3BlcnR5KHN0YXRlLCBjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICNlbmRpZgogICAgICAgICBjYXNlIEhpZ2hQcmlvcml0eVByb3BlcnRpZXM6
CkBAIC0yMTkwLDI2ICsyMTczLDI1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsCiAjZW5kaWYK
ICAgICAgICAgICAgIC8vIGdpdmUgc3BlY2lhbCBwcmlvcml0eSB0byBmb250LXh4eCwgY29sb3Ig
cHJvcGVydGllcywgZXRjCiAgICAgICAgICAgICBpZiAocHJvcGVydHkgPCBDU1NQcm9wZXJ0eUxp
bmVIZWlnaHQpCi0gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1
cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgY3Vy
cmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwogICAgICAgICAgICAgLy8gd2UgYXBwbHkgbGlu
ZS1oZWlnaHQgbGF0ZXIKICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5ID09IENTU1Byb3Bl
cnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnNldExpbmVIZWlnaHRWYWx1
ZShjdXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRW
YWx1ZShjdXJyZW50LnZhbHVlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
TG93UHJpb3JpdHlQcm9wZXJ0aWVzOgogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5p
ZCgpLCBjdXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3Rh
dGUsIGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFByb2Nlc3NSdWxlKGNvb2tpZSk7CiB9CiAK
IHRlbXBsYXRlIDxTdHlsZVJlc29sdmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0
JiBtYXRjaFJlc3VsdCwgYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJ
bmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0
LCBib29sIGlzSW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGlu
aGVyaXRlZE9ubHkpCiB7CiAgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgaWYgKHN0YXRlLnN0eWxlKCkt
Pmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBz
dGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IE1hdGNo
ZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzW2ldOwpAQCAtMjIxOCw3ICsyMjAwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbAog
ICAgICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGxpbmtNYXRj
aFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7CiAgICAgICAgICAgICBzdGF0ZS5z
ZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxw
YXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRj
aGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKKyAg
ICAgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihzdGF0ZSwgbWF0Y2hlZFByb3BlcnRpZXMu
cHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFu
dCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRj
aGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CiAgICAgICAgIH0KICAgICAgICAgc3RhdGUu
c2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwogICAgICAgICBzdGF0ZS5zZXRB
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKQEAgLTIyMjYsNyArMjIwOCw3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wKICAgICB9CiAgICAgZm9yIChpbnQgaSA9IHN0YXJ0
SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewogICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVy
dGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tp
XTsKLSAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KG1hdGNoZWRQcm9wZXJ0aWVzLnByb3Bl
cnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQsIGlu
aGVyaXRlZE9ubHksIHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFBy
b3BlcnRpZXMud2hpdGVsaXN0VHlwZSkpOworICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4o
c3RhdGUsIG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1h
dGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHksIHN0YXRpY19jYXN0PFBy
b3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSkpOwog
ICAgIH0KIH0KIApAQCAtMjMyNiwxMCArMjMwOCw5IEBAIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxl
SW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFJl
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVk
UHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3Rh
dGUmIHN0YXRlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIFN0YXRlJiBzdGF0ZSA9IG1f
c3RhdGU7CiAgICAgdW5zaWduZWQgY2FjaGVIYXNoID0gbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUg
PyBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLmRhdGEoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKSA6IDA7CiAg
ICAgYm9vbCBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAgICBjb25zdCBNYXRjaGVkUHJv
cGVydGllc0NhY2hlSXRlbSogY2FjaGVJdGVtID0gMDsKQEAgLTIzNTMsMTAgKzIzMzQsMTAgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVz
dWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAg
IC8vIEZpcnN0IGFwcGx5IGFsbCB2YXJpYWJsZSBkZWZpbml0aW9ucywgYXMgdGhleSBtYXkgYmUg
dXNlZCBkdXJpbmcgYXBwbGljYXRpb24gb2YgbGF0ZXIgcHJvcGVydGllcy4KLSAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCBmYWxzZSwg
MCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+
KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBt
YXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0g
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3Vs
dCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVk
UHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxl
RGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1
bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRjaFJlc3VsdCwg
dHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1
bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAjZW5kaWYKIAogICAgIC8vIE5vdyB3ZSBoYXZlIGFs
bCBvZiB0aGUgbWF0Y2hlZCBydWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuIFdhbGsgdGhl
IHJ1bGVzIGFuZCBhcHBseQpAQCAtMjM2NCwxMCArMjM0NSwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0
LCBjb25zdAogICAgIC8vIFRoZSBvcmRlciBpcyAoMSkgaGlnaC1wcmlvcml0eSBub3QgaW1wb3J0
YW50LCAoMikgaGlnaC1wcmlvcml0eSBpbXBvcnRhbnQsICgzKSBub3JtYWwgbm90IGltcG9ydGFu
dAogICAgIC8vIGFuZCAoNCkgbm9ybWFsIGltcG9ydGFudC4KICAgICBzdGF0ZS5zZXRMaW5lSGVp
Z2h0VmFsdWUoMCk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9w
ZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRo
b3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBs
eUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5
UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVB
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7
CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0
ZSwgbWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRj
aFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1
dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJS
dWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGln
aFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBs
eUluaGVyaXRlZE9ubHkpOwogCiAgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRl
clN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
KSB7CiAgICAgICAgIHN0YXRlLnNldEZvbnREaXJ0eSh0cnVlKTsKQEAgLTIzNzUsMzAgKzIzNTYs
MzAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1h
dGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICB9CiAKICAgICAvLyBJZiBvdXIgZm9u
dCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9u
dCgpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0
IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgogICAgIGlmIChz
dGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKKyAgICAgICAgYXBwbHlQcm9w
ZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUo
KSk7CiAKICAgICAvLyBNYW55IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBj
aGFuZ2VzIHdlIGp1c3QgYXBwbHkgYWxsIHByb3BlcnRpZXMuCiAgICAgaWYgKGNhY2hlSXRlbSAm
JiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBzdGF0ZS5zdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKSkKICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFs
c2U7CiAKICAgICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBwcmlvcml0eSBVQSBwcm9wZXJ0aWVzLgot
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJl
c3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVk
UHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFs
c2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxh
c3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAgCiAgICAgLy8gQ2FjaGUgb3VyIGJv
cmRlciBhbmQgYmFja2dyb3VuZCBzbyB0aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCiAg
ICAgc3RhdGUuY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAgICAgCiAgICAgLy8gTm93IGRv
IHRoZSBhdXRob3IgYW5kIHVzZXIgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0
aGUgIWltcG9ydGFudCBwcm9wZXJ0aWVzLgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93
UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0VUFSdWxlICsgMSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0g
MSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1By
aW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5m
aXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJ
bmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJv
cGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJS
dWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkp
OwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRj
aFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBm
YWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRj
aGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1
bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0
LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVl
LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgCiAgICAgLy8gU3RhcnQgbG9hZGluZyBy
ZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3Vy
Y2VzKCk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogICAgIAogICAgIEFTU0VS
VCghc3RhdGUuZm9udERpcnR5KCkpOwogICAgIApAQCAtMjQ2OCwxMCArMjQ0OSwxMCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFn
ZSo+JiBtYXRjaGVkUnVsZXMsCiAgICAgfQogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVm
dFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFn
ZShTdGF0ZSYgc3RhdGUsIGludCBwYWdlSW5kZXgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc0ZpcnN0
UGFnZUxlZnQgPSBmYWxzZTsKLSAgICBpZiAoIW1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgaWYgKCFzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgaXNGaXJzdFBhZ2VMZWZ0ID0g
dHJ1ZTsKIAogICAgIHJldHVybiAocGFnZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVmdCA/IDEgOiAw
KSkgJSAyOwpAQCAtMjQ4OSwxOCArMjQ3MCwzMSBAQCBTdHJpbmcgU3R5bGVSZXNvbHZlcjo6cGFn
ZU5hbWUoaW50IC8qIHBhZ2VJbmRleCAqLykgY29uc3QKICAgICByZXR1cm4gIiI7CiB9CiAKLXZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGluaXRFbGVtZW50KDApOwotICAgIG1fc3RhdGUu
aW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCAwLCBzdHlsZSk7Ci0gICAgbV9zdGF0ZS5z
ZXRTdHlsZShzdHlsZSk7Ci0gICAgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCB2YWx1
ZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGFwcGx5UHJvcGVydHko
c3RhdGUsIGlkLCB2YWx1ZSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcGFyc2VkU3R5bGUpCiB7Ci0gICAgaWYgKHZhbHVl
KQotICAgICAgICBhcHBseVByb3BlcnR5KGlkLCB2YWx1ZSk7CisgICAgU3RhdGUgc3RhdGUoZG9j
dW1lbnQoKSk7CisgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCAwLCBz
dHlsZSk7CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUpOworCisgICAgYXBwbHlQcm9wZXJ0eVdp
dGhOdWxsQ2hlY2soc3RhdGUsIENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcGFyc2VkU3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSk7CisgICAgYXBw
bHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2soc3RhdGUsIENTU1Byb3BlcnR5Rm9udFN0eWxlLCBwYXJz
ZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkp
OworICAgIGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50KS5nZXQoKSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2soc3RhdGUsIENT
U1Byb3BlcnR5Rm9udFdlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7CisKKyAgICAvLyBBcyBkZXNjcmliZWQgaW4gQlVH
NjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodCBvbiBhIGZvbnQgbWF5IGVu
dGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlIGNhbGwsCisgICAg
Ly8gd2hpY2ggYXNzdW1lcyB0aGUgZm9udE1ldHJpY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGFm
ZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBhIGNyYXNoIG9jY3VycyAoc2VlIGh0dHA6Ly90cmFjLndl
YmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIyKS4KKyAgICAvLyBUaGUgdXBkYXRlRm9udCgpIGNhbGxz
IGJlbG93IHVwZGF0ZSB0aGUgZm9udE1ldHJpY3MgYW5kIGVuc3VyZSB0aGUgcHJvcGVyIHNldHRp
bmcgb2YgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodC4KKyAgICB1cGRhdGVGb250KHN0YXRlKTsK
KyAgICBhcHBseVByb3BlcnR5V2l0aE51bGxDaGVjayhzdGF0ZSwgQ1NTUHJvcGVydHlGb250U2l6
ZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSku
Z2V0KCkpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOworICAgIGFwcGx5UHJvcGVydHlXaXRoTnVs
bENoZWNrKHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOwogfQogCiBpbmxpbmUg
Ym9vbCBpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQpAQCAtMjYw
MywxMCArMjU5Nyw2IEBAIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRDdWVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiAvLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRp
bmcvLi4uIGZyb20gdGhlIFJlbmRlclN0eWxlIC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxk
IG5ldmVyIHNjYWxlLAogLy8gaWYgd2UnZCBwYXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdl
cmUuIFNvIHdlIG9ubHkgcGFzcyBhIHpvb20gZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKIC8v
IHByb3BlcnRpZXMgdGhhdCBhcmUgTk9UIGFsbG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVk
IFNWRyBkb2N1bWVudCAobGV0dGVyL3dvcmQtc3BhY2luZy9mb250LXNpemUpLgotYm9vbCBTdHls
ZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXMoKQotewotICAgIHJldHVybiBtX3N0YXRlLmVsZW1l
bnQoKSAmJiBtX3N0YXRlLmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCk7Ci19CiAKIHN0YXRpYyBi
b29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIExlbmd0aCYgd29ya2luZ0xl
bmd0aCkKIHsKQEAgLTI3MjQsOSArMjcxNCw5IEBAIHN0YXRpYyBib29sIGhhc1ZhcmlhYmxlUmVm
ZXJlbmNlKENTU1ZhbHVlKiB2YWx1ZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3R5
bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUsIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4
cHJlc3Npb25zKQordm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKFN0YXRlJiBz
dGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpwYWly
PENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucykKIHsKLSAgICBzdGQ6
OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+c2VyaWFs
aXplUmVzb2x2aW5nVmFyaWFibGVzKCptX3N0YXRlLnN0eWxlKCktPnZhcmlhYmxlcygpKSk7Cisg
ICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUt
PnNlcmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqc3RhdGUuc3R5bGUoKS0+dmFyaWFibGVzKCkp
KTsKIAogICAgIGlmIChrbm93bkV4cHJlc3Npb25zLmNvbnRhaW5zKGV4cHJlc3Npb24pKQogICAg
ICAgICByZXR1cm47IC8vIGN5Y2xlIGRldGVjdGVkLgpAQCAtMjc0MSwyNCArMjczMSwyMyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlLCBWZWN0b3I8cwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1
bHRTZXQtPnByb3BlcnR5Q291bnQoKTsgaSsrKSB7CiAgICAgICAgIFN0eWxlUHJvcGVydHlTZXQ6
OlByb3BlcnR5UmVmZXJlbmNlIHByb3BlcnR5ID0gcmVzdWx0U2V0LT5wcm9wZXJ0eUF0KGkpOwog
ICAgICAgICBpZiAocHJvcGVydHkuaWQoKSAhPSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYmIGhhc1Zh
cmlhYmxlUmVmZXJlbmNlKHByb3BlcnR5LnZhbHVlKCkpKQotICAgICAgICAgICAgcmVzb2x2ZVZh
cmlhYmxlcyhwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpLCBrbm93bkV4cHJlc3Npb25z
KTsKKyAgICAgICAgICAgIHJlc29sdmVWYXJpYWJsZXMoc3RhdGUsIHByb3BlcnR5LmlkKCksIHBy
b3BlcnR5LnZhbHVlKCksIGtub3duRXhwcmVzc2lvbnMpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCkpOworICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgcHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFs
dWUoKSk7CiAgICAgfQogfQogI2VuZGlmCiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiB7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgaWYgKGlkICE9IENT
U1Byb3BlcnR5VmFyaWFibGUgJiYgaGFzVmFyaWFibGVSZWZlcmVuY2UodmFsdWUpKSB7CiAgICAg
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+IGtub3duRXhwcmVz
c2lvbnM7Ci0gICAgICAgIHJlc29sdmVWYXJpYWJsZXMoaWQsIHZhbHVlLCBrbm93bkV4cHJlc3Np
b25zKTsKKyAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhzdGF0ZSwgaWQsIHZhbHVlLCBrbm93bkV4
cHJlc3Npb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgU3RhdGUm
IHN0YXRlID0gbV9zdGF0ZTsKICAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUo
KSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOwogICAgIGJvb2wgaXNJbml0aWFsID0gdmFs
dWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlz
SW5oZXJpdGVkVmFsdWUoKSk7CiAKQEAgLTI3ODgsMTEgKzI3NzcsMTEgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSBtX3N0eWxlQnVpbGRlci5wcm9w
ZXJ0eUhhbmRsZXIoaWQpOwogICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkgewogICAgICAgICBp
ZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShpZCwg
dGhpcyk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKGlkLCBzdGF0ZSk7
CiAgICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJ
bml0aWFsVmFsdWUoaWQsIHRoaXMpOworICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxW
YWx1ZShpZCwgc3RhdGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5
VmFsdWUoaWQsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShp
ZCwgc3RhdGUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjgyNCwxOSAr
MjgxMywxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0g
aS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlR2VuZXJhdG9yVmFs
dWUoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNHcmFkaWVudFZhbHVlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4oaXRl
bSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKSwgZGlkU2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+
Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoc3RhdGUpLmdldCgpKSwgZGlkU2V0KTsKICAgICAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGlkU2V0ID0gdHJ1ZTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENT
U1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwg
ZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChz
ZXRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGlkU2V0ID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgIGlmIChpdGVtLT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9w
ZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7
CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENT
U0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNl
dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IH0KQEAgLTI5MzgsNyArMjkyNyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShwYXJlbnRGb250RGVzY3JpcHRpb24uZ2VuZXJpY0Zh
bWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkocGFyZW50Rm9u
dERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRGb250RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250
KCkpOwotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Cisg
ICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yOTQ4LDExICsyOTM3LDExIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBh
Y2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlCiAgICAg
ICAgICAgICAvLyB0byBub24tbW9ub3NwYWNlLgogICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlw
dGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXpl
KCkpCi0gICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6
ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9u
LmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIHNldEZvbnRTaXpl
KHN0YXRlLCBmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBD
U1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNl
KSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShpbml0aWFs
RGVzYy5nZW5lcmljRmFtaWx5KCkpOwogICAgICAgICAgICAgaWYgKCFpbml0aWFsRGVzYy5maXJz
dEZhbWlseSgpLmZhbWlseUlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0RmFtaWx5KGluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkpOwotICAgICAgICAgICAgc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdGF0ZS5zZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0zMDI3LDkgKzMwMTYsOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAvLyBJ
ZiBjdXJyRmFtaWx5IGlzIG5vbi16ZXJvIHRoZW4gd2Ugc2V0IGF0IGxlYXN0IG9uZSBmYW1pbHkg
b24gdGhpcyBkZXNjcmlwdGlvbi4KICAgICAgICAgaWYgKGN1cnJGYW1pbHkpIHsKICAgICAgICAg
ICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKQot
ICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JL
ZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3
b3JkU2l6ZSgpIC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisgICAgICAg
ICAgICAgICAgc2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JL
ZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3
b3JkU2l6ZSgpIC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CiAKLSAgICAg
ICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAg
c3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMwNTQsMTMgKzMwNDMsMTMgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJl
bnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldExpbmVIZWlnaHQoc3RhdGUucGFyZW50U3R5bGUoKS0+c3BlY2lmaWVkTGluZUhlaWdodCgp
KTsKICAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKLSAgICAgICAgICAg
IHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdGUu
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0gZWxzZSBpZiAo
aXNJbml0aWFsKSB7CiAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNl
dHRpbmdzKCk7CiAgICAgICAgICAgICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2lu
ZyBzdHlsZSByZXNvbHV0aW9uLCB0aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBm
cmFtZSBhbmQgdGh1cyBoYXZlIHNldHRpbmdzCiAgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUo
c2V0dGluZ3MpOworICAgICAgICAgICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzdGF0ZSwgc2V0dGlu
Z3MpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdo
dCgpKTsKICAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKQEAgLTMwNzks
MjcgKzMwNjgsMjcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3Mt
PnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwogCiAgICAgICAgICAgICAgICAgLy8g
SGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50
KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250
RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwotICAgICAg
ICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJv
bVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9u
LmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHN0YXRl
LnVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAodmFsdWUtPmlzRm9udFZhbHVlKCkpIHsKICAgICAgICAgICAgIEZvbnRWYWx1ZSogZm9udCA9
IHN0YXRpY19jYXN0PEZvbnRWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgICAgIGlmICghZm9udC0+
c3R5bGUgfHwgIWZvbnQtPnZhcmlhbnQgfHwgIWZvbnQtPndlaWdodAogICAgICAgICAgICAgICAg
IHx8ICFmb250LT5zaXplIHx8ICFmb250LT5saW5lSGVpZ2h0IHx8ICFmb250LT5mYW1pbHkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsKLSAgICAg
ICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LT53ZWlnaHQu
Z2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250
U3R5bGUsIGZvbnQtPnN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3Rh
dGUsIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOworICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LT53
ZWlnaHQuZ2V0KCkpOwogICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIHByb3BlcnRpZXMgY2Fu
IGRpcnR5IG91ciBmb250IGJ1dCB0aGV5IGRvbid0IHRyeSB0byByZWFkIHRoZSBmb250J3MKICAg
ICAgICAgICAgIC8vIHByb3BlcnRpZXMgYmFjaywgd2hpY2ggaXMgc2FmZS4gSG93ZXZlciBpZiBm
b250LXNpemUgaXMgdXNpbmcgdGhlICdleCcgdW5pdCwgaXQgd2lsbAogICAgICAgICAgICAgLy8g
bmVlZCBxdWVyeSB0aGUgZGlydGllZCBmb250J3MgeC1oZWlnaHQgdG8gZ2V0IHRoZSBjb21wdXRl
ZCBzaXplLiBUbyBiZSBzYWZlIGluIHRoaXMKICAgICAgICAgICAgIC8vIGNhc2UsIGxldCdzIGp1
c3QgdXBkYXRlIHRoZSBmb250IG5vdy4KLSAgICAgICAgICAgIHVwZGF0ZUZvbnQoKTsKLSAgICAg
ICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5nZXQo
KSk7CisgICAgICAgICAgICB1cGRhdGVGb250KHN0YXRlKTsKKyAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFNpemUsIGZvbnQtPnNpemUuZ2V0KCkpOwogCiAg
ICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoZm9udC0+bGluZUhlaWdodC5nZXQo
KSk7CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBm
b250LT5mYW1pbHkuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NT
UHJvcGVydHlGb250RmFtaWx5LCBmb250LT5mYW1pbHkuZ2V0KCkpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybjsKIApAQCAtMzEzMCw3ICszMTE5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICAg
ICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAg
ICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7
CisgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwg
aXRlbS0+Y29sb3IuZ2V0KCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3R5bGUoKSkK
ICAgICAgICAgICAgICAgICBjb2xvciA9IHN0YXRlLnN0eWxlKCktPmNvbG9yKCk7CiAKQEAgLTMx
NTksNyArMzE0OCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRP
ZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdl
ckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihz
dGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAg
ICAgICAgTmluZVBpZWNlSW1hZ2UgbWFzazsKICAgICAgICAgbWFzay5zZXRNYXNrRGVmYXVsdHMo
KTsKLSAgICAgICAgbV9zdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVl
LT5tYXNrKCksIG1hc2spOworICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRlKTsK
KyAgICAgICAgc3R5bGVNYXAubWFwTmluZVBpZWNlSW1hZ2UoaWQsIHJlZmxlY3RWYWx1ZS0+bWFz
aygpLCBtYXNrKTsKICAgICAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayhtYXNrKTsKIAogICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKQEAg
LTMyNTEsMTQgKzMyNDEsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldExvY2FsZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CiAgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVz
Y3JpcHRpb24oKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1Nj
cmlwdENvZGVGb3JGb250U2VsZWN0aW9uKHN0YXRlLnN0eWxlKCktPmxvY2FsZSgpKSk7Ci0gICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6IHsKICAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dFNpemVBZGp1c3QsIFRleHRTaXplQWRqdXN0
KQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2V0VGV4dFNpemVBZGp1c3QocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgc3RhdGUu
c2V0VGV4dFNpemVBZGp1c3QocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVB
dXRvKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBP
UlQpCkBAIC0zMzg1LDcgKzMzNzUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoIXByaW1p
dGl2ZVZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgQ29sb3IgY29sID0gY29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpOworICAgICAgICBDb2xvciBjb2wg
PSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUpOwogICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRUYXBIaWdobGlnaHRDb2xvcihjb2wpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMzQ0MCw3ICszNDMwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIENTU1Byb3BlcnR5SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3
YXJlUHJvcGVydHkoaWQsIHN0YXRlLnN0eWxlKCktPmRpcmVjdGlvbigpLCBzdGF0ZS5zdHlsZSgp
LT53cml0aW5nTW9kZSgpKTsKICAgICAgICAgQVNTRVJUKG5ld0lkICE9IGlkKTsKLSAgICAgICAg
cmV0dXJuIGFwcGx5UHJvcGVydHkobmV3SWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGFwcGx5
UHJvcGVydHkoc3RhdGUsIG5ld0lkLCB2YWx1ZSk7CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250U3RyZXRjaDoKICAgICBjYXNlIENTU1Byb3BlcnR5UGFnZToKQEAgLTM0NzAsNyArMzQ2
MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHdy
aXRpbmdNb2RlLCBXcml0aW5nTW9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUpCi0gICAgICAgICAgICBzZXRXcml0aW5nTW9kZSgqcHJpbWl0aXZlVmFsdWUpOworICAg
ICAgICAgICAgc3RhdGUuc2V0V3JpdGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKIAogICAgICAg
ICAvLyBGSVhNRTogSXQgaXMgbm90IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBh
cHBseWluZyBzdHlsZS4KICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVt
ZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCkBAIC0zNDgyLDcg
KzM0NzIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TCh0ZXh0T3JpZW50YXRpb24sIFRleHRPcmllbnRhdGlvbik7CiAKICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlKQotICAgICAgICAgICAgc2V0VGV4dE9yaWVudGF0aW9uKCpwcmltaXRpdmVWYWx1
ZSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRUZXh0T3JpZW50YXRpb24oKnByaW1pdGl2ZVZhbHVl
KTsKIAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzUwNSw3ICszNDk1LDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAvLyBDU1MgRm9udHMgTW9kdWxlIExldmVsIDMKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Rm9udEZlYXR1cmVTZXR0aW5nczogewogICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAg
ICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOworICAgICAgICAgICAgc3RhdGUuc2V0
Rm9udERlc2NyaXB0aW9uKHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLm1ha2VOb3Jt
YWxGZWF0dXJlU2V0dGluZ3MoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtMzUyNCw3ICszNTE0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHNldHRpbmdzLT5h
cHBlbmQoRm9udEZlYXR1cmUoZmVhdHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVlKCkpKTsKICAg
ICAgICAgfQogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmVhdHVyZVNldHRpbmdzKHNldHRp
bmdzLnJlbGVhc2UoKSk7Ci0gICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzUzMiw3ICszNTIyLDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOiB7CiAgICAgICAgIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMKGZpbHRlciwgRmlsdGVyKTsKICAgICAgICAgRmlsdGVyT3BlcmF0
aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1
ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKSkK
KyAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoc3RhdGUsIHZhbHVlLCBzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpKQogICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0RmlsdGVyKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzg1Myw3MiArMzg0Myw3MiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGRlZmF1bHQ6
CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgLy8gVHJ5IHRoZSBTVkcgcHJvcGVydGllcwotICAg
ICAgICBhcHBseVNWR1Byb3BlcnR5KGlkLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5U1ZHUHJvcGVy
dHkoc3RhdGUsIGlkLCB2YWx1ZSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0K
IAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1By
b3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1
ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBz
dGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGNhY2hl
ZE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdl
VmFsdWUqPih2YWx1ZSkpOwogCiAgICAgaWYgKHZhbHVlLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUo
KSkgewogICAgICAgICBpZiAodmFsdWUtPmlzR3JhZGllbnRWYWx1ZSgpKQotICAgICAgICAgICAg
cmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8
Q1NTR3JhZGllbnRWYWx1ZSo+KHZhbHVlKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhp
cykuZ2V0KCkpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHBy
b3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4odmFsdWUpKTsKKyAg
ICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3Bl
cnR5LCBzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4odmFsdWUpLT5ncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZChzdGF0ZSkuZ2V0KCkpOworICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSo+KHZhbHVlKSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQp
CiAgICAgaWYgKHZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHNldE9y
UGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+
KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHBy
b3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4odmFsdWUpKTsKICNlbmRpZgog
CiAgICAgaWYgKHZhbHVlLT5pc0N1cnNvckltYWdlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGN1
cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1h
Z2VWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFs
dWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlKj4odmFs
dWUpKTsKIAogICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxl
UmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNv
bHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1ZSogdmFsdWUpCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1h
Z2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGltYWdl
ICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgc3RhdGUucGVuZGlu
Z0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFn
ZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0lt
YWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJl
c29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmIHN0YXRlLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2YWx1ZSkKIHsKICAgICBp
ZiAodmFsdWUtPmlzUGVuZGluZygpKSB7Ci0gICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJv
cGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBzdGF0ZS5wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBTdHls
ZVBlbmRpbmdJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKICAgICB9CiAgICAgcmV0dXJuIFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NF
VCkKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJv
bVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUqIHZhbHVlKQor
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFs
dWUoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZhbHVl
KiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVk
T3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGlt
YWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KHN0YXRlLmRvY3VtZW50KCkpOwog
ICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0
ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAg
IHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAg
ICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIENTU0N1cnNvckltYWdlVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmIHN0
YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NDdXJzb3JJbWFnZVZhbHVlKiB2YWx1ZSkK
IHsKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5n
SW1hZ2UoZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUt
PmNhY2hlZE9yUGVuZGluZ0ltYWdlKHN0YXRlLmRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAm
JiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIHN0YXRlLnBlbmRpbmdJ
bWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2Uu
cmVsZWFzZSgpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1
c3QoKQordm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KFN0YXRlJiBz
dGF0ZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3N0YXRlLnN0eWxlKCk7CisgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gc3RhdGUuc3R5bGUoKTsKIAogICAgIGlmIChzdHlsZS0+dGV4
dFNpemVBZGp1c3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkyOCwxOCArMzkxOCwxOCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQogICAgIHN0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJl
c29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShT
dGF0ZSYgc3RhdGUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KQogewogICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpID09IHBhcmVudFN0eWxlLT5lZmZl
Y3RpdmVab29tKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgIEZvbnREZXNjcmlw
dGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKLSAgICBzZXRGb250U2l6ZShuZXdG
b250RGVzY3JpcHRpb24sIGNoaWxkRm9udC5zcGVjaWZpZWRTaXplKCkpOworICAgIHNldEZvbnRT
aXplKHN0YXRlLCBuZXdGb250RGVzY3JpcHRpb24sIGNoaWxkRm9udC5zcGVjaWZpZWRTaXplKCkp
OwogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0K
IAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShTdGF0ZSYgc3RhdGUsIFJlbmRlclN0eWxl
KiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogCkBAIC0zOTcz
LDExICszOTYzLDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5
Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqCiAgICAgfQogCiAgICAgRm9u
dERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOwotICAgIHNldEZvbnRT
aXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgc2V0Rm9udFNpemUoc3RhdGUsIG5l
d0ZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihu
ZXdGb250RGVzY3JpcHRpb24pOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVG
b250U3R5bGUoU2V0dGluZ3MqIHNldHRpbmdzKQordm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFs
aXplRm9udFN0eWxlKFN0YXRlJiBzdGF0ZSwgU2V0dGluZ3MqIHNldHRpbmdzKQogewogICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdl
bmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7CkBAIC0zOTg5LDE2
ICszOTc5LDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0
aW5ncyogc2V0dGluZ3MpCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFw
cGVuZEZhbWlseSgwKTsKICAgICB9CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXpl
KENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgc2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVN
ZWRpdW0sIGZhbHNlKSk7Ci0gICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRl
clN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBtX3N0YXRlLnNldExpbmVIZWlnaHRW
YWx1ZSgwKTsKLSAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICBz
ZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9j
dW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7CisgICAgc3RhdGUuc3R5bGUoKS0+c2V0
TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3RhdGUu
c2V0TGluZUhlaWdodFZhbHVlKDApOworICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQordm9pZCBTdHlsZVJlc29s
dmVyOjpzZXRGb250U2l6ZShTdGF0ZSYgc3RhdGUsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBmbG9hdCBzaXplKQogewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRT
aXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0
ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgbV9zdGF0ZS5zdHlsZSgpLCBmb250
RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21T
cGVjaWZpZWRTaXplKHN0YXRlLmRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlw
dGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCBzdGF0ZS51c2VTVkdab29tUnVsZXMoKSkpOwog
fQogCiBmbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6
ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRl
U2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpCkBAIC00MTk2
LDEyICs0MTg2LDExIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFs
dWVJc0Rlcml2ZWRGcm9tRWxlbWVudChDU1NQcmltaXRpdmVWYWx1CiAgICAgfQogfQogCi1Db2xv
ciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZSogdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspIGNvbnN0CitDb2xvciBTdHlsZVJlc29sdmVy
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykKIHsKICAg
ICBpZiAodmFsdWUtPmlzUkdCQ29sb3IoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKHZhbHVlLT5n
ZXRSR0JBMzJWYWx1ZSgpKTsKIAotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAg
ICAgaW50IGlkZW50ID0gdmFsdWUtPmdldElkZW50KCk7CiAgICAgc3dpdGNoIChpZGVudCkgewog
ICAgIGNhc2UgMDoKQEAgLTQ1NDcsOSArNDUzNiw4IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1
CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoU3RhdGUmIHN0YXRlKQogewotICAgIFN0YXRlJiBzdGF0
ZSA9IG1fc3RhdGU7CiAgICAgaWYgKCFzdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCBzdGF0
ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTQ1NzYsMjkgKzQ1NjQsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0Rv
Y3VtZW50cygpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLVN0eWxlU2hhZGVy
KiBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYWRlcihDU1NWYWx1ZSogdmFsdWUpCitTdHlsZVNoYWRl
ciogU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFkZXIoU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFs
dWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc1dlYktpdENTU1NoYWRlclZhbHVlKCkpCi0gICAgICAg
IHJldHVybiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShzdGF0aWNfY2FzdDxX
ZWJLaXRDU1NTaGFkZXJWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBjYWNoZWRPclBl
bmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShzdGF0ZSwgc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hh
ZGVyVmFsdWUqPih2YWx1ZSkpOwogICAgIHJldHVybiAwOwogfQogCi1TdHlsZVNoYWRlciogU3R5
bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NT
U2hhZGVyVmFsdWUqIHZhbHVlKQorU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9y
UGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFN0YXRlJiBzdGF0ZSwgV2ViS2l0Q1NTU2hhZGVy
VmFsdWUqIHZhbHVlKQogewogICAgIFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVk
T3JQZW5kaW5nU2hhZGVyKCk7CiAgICAgaWYgKHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1No
YWRlcigpKQotICAgICAgICBtX3N0YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJzKHRydWUpOworICAg
ICAgICBzdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyh0cnVlKTsKICAgICByZXR1cm4gc2hhZGVy
OwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycyhTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYg
KCFtX3N0YXRlLnN0eWxlKCktPmhhc0ZpbHRlcigpIHx8ICFtX3N0YXRlLmhhc1BlbmRpbmdTaGFk
ZXJzKCkpCisgICAgaWYgKCFzdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCAhc3RhdGUuaGFz
UGVuZGluZ1NoYWRlcnMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IHN0YXRlLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKLSAg
ICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1f
c3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBWZWN0b3I8
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IHN0YXRlLnN0eWxl
KCktPm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZpbHRlck9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVyT3BlcmF0aW9ucy5hdChpKTsK
ICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRl
ck9wZXJhdGlvbjo6Q1VTVE9NKSB7CkBAIC00NjE1LDcgKzQ2MDMsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgbV9zdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyhmYWxzZSk7CisgICAgc3RhdGUu
c2V0SGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpOwogfQogCiBzdGF0aWMgYm9vbCBzb3J0UGFyYW1l
dGVyc0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4m
IGEsIGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQpAQCAtNDY1MywxNiAr
NDY0MSwxNiBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZl
cjo6cGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZQogICAgIHJldHVybiBudW1iZXJQYXJh
bWV0ZXIucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4g
U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoY29uc3Qg
U3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykKK1Bhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBh
cmFtZXRlcihTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2
YWx1ZXMpCiB7CiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcj4gdHJh
bnNmb3JtUGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyOjpjcmVhdGUo
bmFtZSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGNyZWF0ZVRy
YW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBtX3N0YXRlLnN0eWxlKCksIG1fc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKTsKKyAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25z
KHZhbHVlcywgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRp
b25zKTsKICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPnNldE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7
CiAgICAgcmV0dXJuIHRyYW5zZm9ybVBhcmFtZXRlci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRl
clBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJWYWx1ZSkK
K1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1
c3RvbUZpbHRlclBhcmFtZXRlcihTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NT
VmFsdWUqIHBhcmFtZXRlclZhbHVlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIg
cGFyYW1ldGVycyB0eXBlcyBwYXJzaW5nLgogICAgIC8vIGJvb2xlYW5zOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0MzgKQEAgLTQ2ODUsNyArNDY3Myw3IEBAIFBh
c3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3Rv
bUZpbHRlclBhcmFtZXRlcihjb25zCiAgICAgLy8gYXJlIHRyYW5zZm9ybXMuIHBhcnNlQ3VzdG9t
RmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyIHdpbGwKICAgICAvLyByZXR1cm4gMCBpZiB0aGF0IGFz
c3VtcHRpb24gaXMgaW5jb3JyZWN0LgogICAgIGlmICh2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMCktPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHBh
cnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKG5hbWUsIHZhbHVlcyk7CisgICAgICAg
IHJldHVybiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihzdGF0ZSwgbmFtZSwg
dmFsdWVzKTsKIAogICAgIC8vIFdlIGNhbiBoYXZlIG9ubHkgYXJyYXlzIG9mIGJvb2xlYW5zIG9y
IG51bWJlcnMsIHNvIHVzZSB0aGUgZmlyc3QgdmFsdWUgdG8gY2hvb3NlIGJldHdlZW4gdGhvc2Ug
dHdvLgogICAgIC8vIFdlIG5lZWQgdXAgdG8gNCB2YWx1ZXMgKGFsbCBib29sZWFucyBvciBhbGwg
bnVtYmVycykuCkBAIC00NzAyLDcgKzQ2OTAsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBh
cmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29ucwog
ICAgIHJldHVybiAwOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdChDU1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVlLCBDdXN0b21GaWx0ZXJQYXJh
bWV0ZXJMaXN0JiBwYXJhbWV0ZXJMaXN0KQorYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3Rv
bUZpbHRlclBhcmFtZXRlckxpc3QoU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogcGFyYW1ldGVyc1Zh
bHVlLCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJMaXN0KQogewogICAgIEhh
c2hTZXQ8U3RyaW5nPiBrbm93blBhcmFtZXRlck5hbWVzOwogICAgIENTU1ZhbHVlTGlzdEl0ZXJh
dG9yIHBhcmFtZXRlckl0ZXJhdG9yKHBhcmFtZXRlcnNWYWx1ZSk7CkBAIC00NzI3LDcgKzQ3MTUs
NyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChD
U1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVlLCBDdQogICAgICAgICBpZiAoIWl0ZXJhdG9yLmhhc01v
cmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0
cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyKG5hbWUsIGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICBSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBwYXJhbWV0ZXIgPSBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihzdGF0
ZSwgbmFtZSwgaXRlcmF0b3IudmFsdWUoKSk7CiAgICAgICAgIGlmICghcGFyYW1ldGVyKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBwYXJhbWV0ZXJMaXN0LmFwcGVuZChwYXJh
bWV0ZXIucmVsZWFzZSgpKTsKQEAgLTQ3NDYsNyArNDczNCw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRp
b25XaXRoCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0
aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5l
U3ludGF4KFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKK1Bhc3NSZWZQdHI8Q3Vz
dG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVy
YXRpb25XaXRoSW5saW5lU3ludGF4KFN0YXRlJiBzdGF0ZSwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUq
IGZpbHRlclZhbHVlKQogewogICAgIENTU1ZhbHVlKiBzaGFkZXJzVmFsdWUgPSBmaWx0ZXJWYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihzaGFkZXJzVmFsdWUtPmlzVmFsdWVMaXN0KCkpOwpAQCAtNDc1NSw3ICs0NzQz
LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNy
ZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGgKICAgICB1bnNpZ25lZCBzaGFkZXJzTGlzdExl
bmd0aCA9IHNoYWRlcnNMaXN0LT5sZW5ndGgoKTsKICAgICBBU1NFUlQoc2hhZGVyc0xpc3RMZW5n
dGgpOwogCi0gICAgUmVmUHRyPFN0eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNoYWRl
cihzaGFkZXJzTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAgUmVmUHRyPFN0
eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNoYWRlcihzdGF0ZSwgc2hhZGVyc0xpc3Qt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwogICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gZnJh
Z21lbnRTaGFkZXI7CiAgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUgPSBQ
Uk9HUkFNX1RZUEVfQkxFTkRTX0VMRU1FTlRfVEVYVFVSRTsKICAgICBDdXN0b21GaWx0ZXJQcm9n
cmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3M7CkBAIC00NzY4LDcgKzQ3NTYsNyBAQCBQYXNzUmVm
UHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmls
dGVyT3BlcmF0aW9uV2l0aAogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXRlcmF0
b3IobWl4RnVuY3Rpb24pOwogCiAgICAgICAgICAgICBBU1NFUlQobWl4RnVuY3Rpb24tPmxlbmd0
aCgpKTsKLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0gc3R5bGVTaGFkZXIoaXRlcmF0b3Iu
dmFsdWUoKSk7CisgICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKHN0YXRl
LCBpdGVyYXRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKIAog
ICAgICAgICAgICAgQVNTRVJUKG1peEZ1bmN0aW9uLT5sZW5ndGgoKSA8PSAzKTsKQEAgLTQ3ODQs
NyArNDc3Miw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29s
dmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwcm9ncmFtVHlwZSA9IFBST0dSQU1fVFlQRV9OT19F
TEVNRU5UX1RFWFRVUkU7Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVy
KGZyYWdtZW50U2hhZGVyT3JNaXhGdW5jdGlvbik7CisgICAgICAgICAgICBmcmFnbWVudFNoYWRl
ciA9IHN0eWxlU2hhZGVyKHN0YXRlLCBmcmFnbWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOwogICAg
ICAgICB9CiAgICAgfQogICAgIApAQCAtNDg0MCwyMyArNDgyOCwyMyBAQCBQYXNzUmVmUHRyPEN1
c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uV2l0aAogICAgICAgICBwYXJhbWV0ZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygyKTsKICAgICAKICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0
IHBhcmFtZXRlckxpc3Q7Ci0gICAgaWYgKHBhcmFtZXRlcnNWYWx1ZSAmJiAhcGFyc2VDdXN0b21G
aWx0ZXJQYXJhbWV0ZXJMaXN0KHBhcmFtZXRlcnNWYWx1ZSwgcGFyYW1ldGVyTGlzdCkpCisgICAg
aWYgKHBhcmFtZXRlcnNWYWx1ZSAmJiAhcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KHN0
YXRlLCBwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQogICAgICAgICByZXR1cm4gMDsK
ICAgICAKICAgICBSZWZQdHI8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gU3R5
bGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUodmVydGV4U2hhZGVyLnJlbGVhc2UoKSwgZnJh
Z21lbnRTaGFkZXIucmVsZWFzZSgpLCBwcm9ncmFtVHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hUeXBl
KTsKICAgICByZXR1cm4gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUocHJvZ3JhbS5yZWxl
YXNlKCksIHBhcmFtZXRlckxpc3QsIG1lc2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaFR5cGUpOwog
fQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1
ZSkKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVh
dGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oU3RhdGUmIHN0YXRlLCBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZSogZmlsdGVyVmFsdWUpCiB7CiAgICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5ndGgoKSk7CiAg
ICAgYm9vbCBpc0F0UnVsZVJlZmVyZW5jZVN5bnRheCA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApLT5pc1ByaW1pdGl2ZVZhbHVlKCk7Ci0gICAgcmV0dXJuIGlzQXRSdWxl
UmVmZXJlbmNlU3ludGF4ID8gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVsZVJl
ZmVyZW5jZVN5bnRheChmaWx0ZXJWYWx1ZSkgOiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25X
aXRoSW5saW5lU3ludGF4KGZpbHRlclZhbHVlKTsKKyAgICByZXR1cm4gaXNBdFJ1bGVSZWZlcmVu
Y2VTeW50YXggPyBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoQXRSdWxlUmVmZXJlbmNl
U3ludGF4KGZpbHRlclZhbHVlKSA6IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhJbmxp
bmVTeW50YXgoc3RhdGUsIGZpbHRlclZhbHVlKTsKIH0KIAogI2VuZGlmCiAKLWJvb2wgU3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBv
dXRPcGVyYXRpb25zKQorYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25z
KFN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVu
ZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKIHsK
ICAgICBBU1NFUlQob3V0T3BlcmF0aW9ucy5pc0VtcHR5KCkpOwogICAgIApAQCAtNDg4OSw3ICs0
ODc3LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1Zh
bHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChvcGVyYXRpb25UeXBlID09IEZpbHRlck9wZXJhdGlvbjo6
Q1VTVE9NKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBvcGVy
YXRpb24gPSBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oZmlsdGVyVmFsdWUpOworICAgICAg
ICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gY3JlYXRlQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uKHN0YXRlLCBmaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBpZiAo
IW9wZXJhdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAK
QEAgLTQ5MDcsMTIgKzQ4OTUsMTIgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJP
cGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1
ZSogc3ZnRG9jdW1lbnRWYWx1ZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU1NWR0RvY3VtZW50VmFs
dWUqPihhcmd1bWVudCk7Ci0gICAgICAgICAgICBLVVJMIHVybCA9IG1fc3RhdGUuZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOworICAgICAgICAgICAgS1VS
TCB1cmwgPSBzdGF0ZS5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1bWVudFZhbHVlLT51
cmwoKSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+IG9w
ZXJhdGlvbiA9IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKHN2Z0RvY3VtZW50VmFs
dWUtPnVybCgpLCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCksIG9wZXJhdGlvblR5cGUpOwotICAg
ICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5jZShzdmdE
b2N1bWVudFZhbHVlLT51cmwoKSwgbV9zdGF0ZS5kb2N1bWVudCgpKSkgeworICAgICAgICAgICAg
aWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5jZShzdmdEb2N1bWVudFZh
bHVlLT51cmwoKSwgc3RhdGUuZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN2
Z0RvY3VtZW50VmFsdWUtPmxvYWRSZXF1ZXN0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuc2V0KG9wZXJhdGlvbi5nZXQoKSwgc3ZnRG9jdW1l
bnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMo
KS5zZXQob3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQogICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFk
b3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5j
YWNoZWRTVkdEb2N1bWVudCgpKSkpOwogICAgICAgICAgICAgfQpAQCAtNDk5Niw3ICs0OTg0LDcg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUKICAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+
Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6
b29tRmFjdG9yKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlm
IChpdGVtLT5jb2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7CiAKICAgICAgICAg
ICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uOjpjcmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29s
b3I6OnRyYW5zcGFyZW50LCBvcGVyYXRpb25UeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTUwMTQsOSArNTAwMiw5IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0
aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAKICNlbmRpZgogCi1Q
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5
bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbmdJbWFnZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdGF0ZSYgc3RhdGUsIFN0eWxlUGVuZGluZ0lt
YWdlKiBwZW5kaW5nSW1hZ2UpCiB7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJl
c291cmNlTG9hZGVyID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigp
OworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRl
LmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKICAgICBpZiAocGVuZGluZ0lt
YWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1
ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpOwpAQCAtNTA0NCwyOSArNTAzMiwyOSBA
QCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2Uo
U3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBl
bmRpbmdJbWFnZXMoU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChtX3N0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMoKS5pc0VtcHR5KCkpCisgICAgaWYgKHN0YXRlLnBlbmRpbmdJbWFnZVByb3Bl
cnRpZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBlbmRpbmdJbWFnZVBy
b3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMoKS5lbmQoKS5rZXlzKCk7Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0
eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3Bl
cnRpZXMoKS5iZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgUGVuZGluZ0lt
YWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IHN0YXRlLnBlbmRpbmdJ
bWFnZVByb3BlcnRpZXMoKS5lbmQoKS5rZXlzKCk7CisgICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9w
ZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzKCkuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBDU1NQ
cm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9ICppdDsKIAogICAgICAgICBzd2l0Y2ggKGN1cnJl
bnRQcm9wZXJ0eSkgewogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOiB7
Ci0gICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdGF0ZS5z
dHlsZSgpLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dy
b3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAo
RmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3NCYWNrZ3Jv
dW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3Vu
ZExheWVyLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZExheWVyLT5p
bWFnZSgpICYmIGJhY2tncm91bmRMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAg
ICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0lt
YWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFn
ZSgpKSkpOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxv
YWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oYmFj
a2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6IHsKLSAgICAg
ICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50
RGF0YSo+KG1fc3RhdGUuc3R5bGUoKS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250
ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoQ29udGVu
dERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KHN0YXRlLnN0eWxl
KCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0
YS0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJ
bWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3Rh
dGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShz
dGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxvYWRlZEltYWdlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPnNldEltYWdl
KGxvYWRlZEltYWdlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUwNzUs
NDYgKzUwNjMsNDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vy
c29yOiB7Ci0gICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IG1fc3RhdGUu
c3R5bGUoKS0+Y3Vyc29ycygpKSB7CisgICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29y
TGlzdCA9IHN0YXRlLnN0eWxlKCktPmN1cnNvcnMoKSkgewogICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
ICAgICAgICAgQ3Vyc29yRGF0YSYgY3VycmVudEN1cnNvciA9IGN1cnNvckxpc3QtPmF0KGkpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29y
LmltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5n
SW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29yLnNldElt
YWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFn
ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29yLnNldEltYWdl
KGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4o
aW1hZ2UpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxl
KCktPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgp
LT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0
TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJ
bWFnZSo+KG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKKyAgICAgICAgICAg
IGlmIChzdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpICYmIHN0YXRlLnN0eWxlKCktPmxp
c3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGlj
X2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihzdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgp
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZSgp
LT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3Vy
Y2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCkt
PnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQ
ZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkpKSk7Cisg
ICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBzdGF0
ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5n
SW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oc3RhdGUuc3R5bGUo
KS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7Ci0gICAgICAgICAg
ICBpZiAoU3R5bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbV9zdGF0ZS5zdHlsZSgpLT5ib3hS
ZWZsZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24g
PSBzdGF0ZS5zdHlsZSgpLT5ib3hSZWZsZWN0KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBO
aW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOwogICAgICAgICAg
ICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQZW5k
aW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9h
ZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdl
Kj4obWFza0ltYWdlLmltYWdlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxl
SW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nhc3Q8
U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOwogICAgICAgICAgICAgICAg
ICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKE5pbmVQaWVjZUltYWdlKGxvYWRlZEltYWdlLnJlbGVh
c2UoKSwgbWFza0ltYWdlLmltYWdlU2xpY2VzKCksIG1hc2tJbWFnZS5maWxsKCksIG1hc2tJbWFn
ZS5ib3JkZXJTbGljZXMoKSwgbWFza0ltYWdlLm91dHNldCgpLCBtYXNrSW1hZ2UuaG9yaXpvbnRh
bFJ1bGUoKSwgbWFza0ltYWdlLnZlcnRpY2FsUnVsZSgpKSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgaWYg
KG1fc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZSgp
LT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAg
ICBtX3N0YXRlLnN0eWxlKCktPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdl
KHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94
SW1hZ2VTb3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5tYXNrQm94
SW1hZ2VTb3VyY2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXNrQm94
SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nSW1hZ2UqPihzdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBtX3N0
YXRlLnN0eWxlKCktPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBt
YXNrTGF5ZXItPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXll
ciA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5
ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXIt
PmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAg
ICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGlj
X2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1hc2tMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwg
c3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTEyMywyMiAr
NTExMSwyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAg
ICAgfQogICAgIH0KIAotICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFy
KCk7CisgICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7CiB9CiAKLXZv
aWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKQordm9pZCBTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyhTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gU3RhcnQg
bG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5n
SW1hZ2VzKCk7CisgICAgbG9hZFBlbmRpbmdJbWFnZXMoc3RhdGUpOwogCiAjaWYgRU5BQkxFKENT
U19TSEFERVJTKQogICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIHNoYWRlcnMgcmVmZXJlbmNlZCBi
eSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nU2hhZGVycygpOworICAgIGxvYWRQZW5kaW5n
U2hhZGVycyhzdGF0ZSk7CiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYm
IEVOQUJMRShTVkcpCiAgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgU1ZHIERvY3VtZW50cyByZWZl
cmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKTsKKyAg
ICBsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyhzdGF0ZSk7CiAjZW5kaWYKIH0KIApAQCAtNTE4MSw4
ICs1MTY5LDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlP
YmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGluZm8uYWRkTWVtYmVyKG1f
aW5zcGVjdG9yQ1NTT01XcmFwcGVycyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9zY29wZVJlc29s
dmVyLCAic2NvcGVSZXNvbHZlciIpOwogCi0gICAgaW5mby5hZGRNZW1iZXIobV9zdGF0ZSwgInN0
YXRlIik7Ci0KICAgICAvLyBGSVhNRTogbW92ZSB0aGlzIHRvIGEgcGxhY2Ugd2hlcmUgaXQgd291
bGQgYmUgY2FsbGVkIG9ubHkgb25jZT8KICAgICBpbmZvLmFkZE1lbWJlcihDU1NEZWZhdWx0U3R5
bGVTaGVldHM6OmRlZmF1bHRTdHlsZSwgImRlZmF1bHRTdHlsZSIpOwogICAgIGluZm8uYWRkTWVt
YmVyKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFF1aXJrc1N0eWxlLCAiZGVmYXVsdFF1
aXJrc1N0eWxlIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCAyY2RhYzFlZGFl
NTFiOGUzNTA0MTU5NDgxYmI2MzNmOGQxMjEwYmM5Li4yODU2ZDczNTlkMzI2Y2U4NDQzNzUwMzMw
NWM5NTk4ZDc1OTlkNzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTI0LDcg
KzI0LDYgQEAKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5o
IgotI2luY2x1ZGUgIkNTU1RvU3R5bGVNYXAuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIK
ICNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRzLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTT01X
cmFwcGVycy5oIgpAQCAtMTc4LDEzICsxNzcsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRT
ZWxlY3RvciogPSAwKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuc3R5bGUoKTsgfQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGUoKTsgfQotICAgIFJlbmRlclN0eWxlKiByb290
RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCk7
IH0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkgeyByZXR1cm4gbV9zdGF0ZS5lbGVtZW50KCk7IH0K
ICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgU3R5
bGVTY29wZVJlc29sdmVyKiBzY29wZVJlc29sdmVyKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZVJl
c29sdmVyLmdldCgpOyB9Ci0gICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5wYXJlbnROb2RlKCk7IH0KIAogICAgIC8vIEZJWE1FOiBJdCBjb3VsZCBiZSBiZXR0
ZXIgdG8gY2FsbCBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKCkgZGlyZWN0bHkg
YWZ0ZXIgd2UgZmFjdG9yIFN0eWxlUnNvbHZlciBmdXJ0aGVyLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg4OTAKQEAgLTIxMCwxNyArMjA0LDE4IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlci5nZXQoKTsKICAgICB9CiAj
ZW5kaWYKKyAgICBjbGFzcyBTdGF0ZTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGluaXRFbGVtZW50
KEVsZW1lbnQqKTsKLSAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKLSAgICBi
b29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqKTsKLSAgICBi
b29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKTsKKyAgICB2b2lkIGlu
aXRFbGVtZW50KFN0YXRlJiwgRWxlbWVudCopOworICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFy
ZWRTdHlsZShTdGF0ZSYpOworICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1
bGVTZXQoRWxlbWVudCosIFJ1bGVTZXQqKTsKKyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNIb3N0UnVsZXMoU3RhdGUmKTsKICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVs
ZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0OwotICAgIFN0
eWxlZEVsZW1lbnQqIGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYg
Y291bnQpIGNvbnN0OwotICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVs
ZW1lbnQqKSBjb25zdDsKKyAgICBTdHlsZWRFbGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hh
cmluZyhjb25zdCBTdGF0ZSYsIE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OworICAgIGJv
b2wgY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KGNvbnN0IFN0YXRlJiwgU3R5bGVkRWxlbWVudCop
IGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVlJik7
CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShTdGF0ZSYsIGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsK
IAogcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBv
ZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxl
bWVudCkuCkBAIC0yNDMsMjUgKzIzOCwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGludCBsZWdh
Y3lGb250U2l6ZShEb2N1bWVudCosIGludCBwaXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZp
eGVkRGVmYXVsdFNpemUpOwogCiBwdWJsaWM6Ci0gICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHls
ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFJlbmRlclN0eWxlKik7CisgICAgdm9pZCBhcHBs
eUZvbnRQcm9wZXJ0eVRvU3R5bGUoUmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0
Kik7CiAKLSAgICB2b2lkIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlE
LCBDU1NWYWx1ZSopOwotCi0gICAgdm9pZCB1cGRhdGVGb250KCk7Ci0gICAgdm9pZCBpbml0aWFs
aXplRm9udFN0eWxlKFNldHRpbmdzKik7CisgICAgdm9pZCB1cGRhdGVGb250KFN0YXRlJik7Cisg
ICAgdm9pZCBpbml0aWFsaXplRm9udFN0eWxlKFN0YXRlJiwgU2V0dGluZ3MqKTsKIAogICAgIHN0
YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIGZs
b2F0IHpvb21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUs
IEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSA9IFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplKTsK
IAotICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7Cisg
ICAgc3RhdGljIHZvaWQgc2V0Rm9udFNpemUoU3RhdGUmLCBGb250RGVzY3JpcHRpb24mLCBmbG9h
dCBzaXplKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJv
bVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBSZW5kZXJTdHlsZSosIGJvb2wgaXNBYnNvbHV0ZVNp
emUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKTsKIAogcHVibGlj
OgotICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCk7Ci0KICAgICBzdGF0aWMgYm9vbCBjb2xvckZy
b21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KENTU1ByaW1pdGl2ZVZhbHVlKik7
Ci0gICAgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqLCBi
b29sIGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpIGNvbnN0OworICAgIHN0YXRpYyBDb2xvciBjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShjb25zdCBTdGF0ZSYsIENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9v
bCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKTsKIAogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JJZChj
b25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKICAgICBib29sIGhhc1NlbGVjdG9yRm9yQ2xhc3Mo
Y29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CkBAIC0yODksMzQgKzI4MCwzNCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBpbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwogCiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKQotICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1
ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUs
IEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOworICAgIGJvb2wgY3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyhTdGF0ZSYsIENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHls
ZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9u
cyk7CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRl
cihDU1NWYWx1ZSopOwotICAgIFN0eWxlU2hhZGVyKiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRl
ckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWYWx1ZSopOwotICAgIGJvb2wgcGFyc2VDdXN0b21G
aWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYp
OwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRl
clBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKik7CisgICAgU3R5bGVTaGFk
ZXIqIHN0eWxlU2hhZGVyKFN0YXRlJiwgQ1NTVmFsdWUqKTsKKyAgICBTdHlsZVNoYWRlciogY2Fj
aGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoU3RhdGUmLCBXZWJLaXRDU1NTaGFkZXJW
YWx1ZSopOworICAgIGJvb2wgcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KFN0YXRlJiwg
Q1NTVmFsdWUqLCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0Jik7CisgICAgUGFzc1JlZlB0cjxD
dXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKFN0YXRlJiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSopOwogICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7CiAgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJh
bWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgQ1NTVmFsdWVMaXN0Kik7Ci0gICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+
IHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwg
Q1NTVmFsdWVMaXN0Kik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBh
cnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKFN0YXRlJiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBDU1NWYWx1ZUxpc3QqKTsKICAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlv
bj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVsZVJlZmVyZW5jZVN5bnRheChX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0
aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KFdlYktpdENT
U0ZpbHRlclZhbHVlKik7Ci0gICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNy
ZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOwotICAgIHZv
aWQgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVy
YXRpb24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgoU3RhdGUm
LCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3Bl
cmF0aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oU3RhdGUmLCBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZSopOworICAgIHZvaWQgbG9hZFBlbmRpbmdTaGFkZXJzKFN0YXRlJik7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoU1ZHKQotICAgIHZvaWQgbG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKTsKKyAg
ICB2b2lkIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKFN0YXRlJik7CiAjZW5kaWYKICNlbmRpZiAv
LyBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAKLSAgICB2b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7
CisgICAgdm9pZCBsb2FkUGVuZGluZ1Jlc291cmNlcyhTdGF0ZSYpOwogCiBwcml2YXRlOgogICAg
IC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRl
dGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAt
ZHdoCi0gICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwotICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJl
bmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9y
VGV4dFNpemVBZGp1c3QoKTsKKyAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShT
dGF0ZSYsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lk
IGNoZWNrRm9yWm9vbUNoYW5nZShTdGF0ZSYsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoU3RhdGUmKTsKIAot
ICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCopOworICAgIHZvaWQgYWRqdXN0UmVuZGVy
U3R5bGUoU3RhdGUmLCBSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlLCBFbGVtZW50Kik7CiAKICAgICBzdHJ1Y3QgUnVsZVJhbmdlIHsKICAgICAgICAg
UnVsZVJhbmdlKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCk6IGZpcnN0
UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4KSwgbGFzdFJ1bGVJbmRleChsYXN0UnVsZUluZGV4KSB7
IH0KQEAgLTM2MywyNSArMzU0LDI1IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgYWRkTWF0
Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9w
ZXJ0aWVzLCBTdHlsZVJ1bGUqID0gMCwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hBbGwsIFByb3BlcnR5V2hpdGVsaXN0VHlwZSA9IFByb3BlcnR5V2hpdGVs
aXN0Tm9uZSk7CiAgICAgdm9pZCBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0
JiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCosIGJvb2wgaXNDYWNoZWFibGUgPSB0cnVlKTsKIAot
ICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZVNNSUxQcm9w
ZXJ0aWVzKTsKLSAgICB2b2lkIG1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYpOwotICAgIHZvaWQg
bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiwgUnVsZVNldCopOwotICAgIHZvaWQgbWF0Y2hBdXRo
b3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQg
bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAg
ICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaEFsbFJ1bGVzKFN0YXRlJiwgTWF0Y2hS
ZXN1bHQmLCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CisgICAgdm9pZCBtYXRjaFVBUnVs
ZXMoU3RhdGUmLCBNYXRjaFJlc3VsdCYpOworICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKFN0YXRlJiwg
TWF0Y2hSZXN1bHQmLCBSdWxlU2V0Kik7CisgICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKFN0YXRl
JiwgTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNo
VXNlclJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
KyAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoU3RhdGUmLCBNYXRjaFJlc3VsdCYsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoU3RhdGUmLCBN
YXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogCi0gICAgdm9pZCBjb2xsZWN0
TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKLSAgICB2b2lk
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVS
YW5nZSYpOwotICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qLCBjb25zdCBNYXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKKyAgICB2b2lk
IGNvbGxlY3RNYXRjaGluZ1J1bGVzKFN0YXRlJiwgY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJh
bmdlJik7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihTdGF0ZSYsIGNv
bnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KFN0YXRlJiwgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGNvbnN0IE1hdGNo
UmVxdWVzdCYsIFJ1bGVSYW5nZSYpOwogCiAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29u
c3QgUnVsZURhdGEmKSBjb25zdDsKLSAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKLSAgICB2
b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYpOworICAgIHZvaWQg
c29ydE1hdGNoZWRSdWxlcyhTdGF0ZSYpOworICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hl
ZFJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQmKTsKIAotICAgIGJvb2wgcnVsZU1hdGNoZXMoY29u
c3QgUnVsZURhdGEmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmLCBTZWxl
Y3RvckNoZWNrZXI6OkJlaGF2aW9yQXRCb3VuZGFyeSA9IFNlbGVjdG9yQ2hlY2tlcjo6RG9lc05v
dENyb3NzQm91bmRhcnkpOworICAgIGJvb2wgcnVsZU1hdGNoZXMoU3RhdGUmLCBjb25zdCBSdWxl
RGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYsIFNlbGVjdG9yQ2hl
Y2tlcjo6QmVoYXZpb3JBdEJvdW5kYXJ5ID0gU2VsZWN0b3JDaGVja2VyOjpEb2VzTm90Q3Jvc3NC
b3VuZGFyeSk7CiAgICAgYm9vbCBjaGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
KiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCk7Ci0gICAgdm9pZCBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCopOwor
ICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhTdGF0ZSYsIGNvbnN0IE1hdGNoUmVzdWx0
JiwgY29uc3QgRWxlbWVudCopOwogICAgIGVudW0gU3R5bGVBcHBsaWNhdGlvblBhc3MgewogI2lm
IEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgICAgICBWYXJpYWJsZURlZmluaXRpb25zLApAQCAt
MzkwLDExICszODEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgTG93UHJpb3JpdHlQcm9wZXJ0aWVz
CiAgICAgfTsKICAgICB0ZW1wbGF0ZSA8U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KLSAgICB2
b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBib29sIGltcG9y
dGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsK
KyAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmLCBjb25zdCBNYXRjaFJlc3Vs
dCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGlu
aGVyaXRlZE9ubHkpOwogICAgIHRlbXBsYXRlIDxTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgot
ICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRp
ZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJv
cGVydHlXaGl0ZWxpc3RUeXBlID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKKyAgICB2b2lkIGFw
cGx5UHJvcGVydGllcyhTdGF0ZSYsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMs
IFN0eWxlUnVsZSosIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVy
dHlXaGl0ZWxpc3RUeXBlID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKICNpZiBFTkFCTEUoQ1NT
X1ZBUklBQkxFUykKLSAgICB2b2lkIHJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCwgQ1NT
VmFsdWUqLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25F
eHByZXNzaW9ucyk7CisgICAgdm9pZCByZXNvbHZlVmFyaWFibGVzKFN0YXRlJiwgQ1NTUHJvcGVy
dHlJRCwgQ1NTVmFsdWUqLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4g
PiYga25vd25FeHByZXNzaW9ucyk7CiAjZW5kaWYKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUmVn
aW9uU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CkBAIC00MDQsOCArMzk1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzRm9y
TGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxT
dHlsZVJ1bGVQYWdlKj4mLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0
IFN0cmluZyYgcGFnZU5hbWUpOwogICAgIFNldHRpbmdzKiBkb2N1bWVudFNldHRpbmdzKCkgeyBy
ZXR1cm4gbV9kb2N1bWVudC0+c2V0dGluZ3MoKTsgfQogCi0gICAgYm9vbCBpc0xlZnRQYWdlKGlu
dCBwYWdlSW5kZXgpIGNvbnN0OwotICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkg
Y29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQorICAgIGJvb2wgaXNMZWZ0
UGFnZShTdGF0ZSYsIGludCBwYWdlSW5kZXgpIGNvbnN0OworICAgIGJvb2wgaXNSaWdodFBhZ2Uo
U3RhdGUmIHN0YXRlLCBpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShz
dGF0ZSwgcGFnZUluZGV4KTsgfQogICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkg
Y29uc3Q7CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OwogCkBAIC00
MTUsMTYgKzQwNiwxNyBAQCBwcml2YXRlOgogICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFt
ZXNSdWxlTWFwOwogCiBwdWJsaWM6CisKICAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTUHJvcGVydHlJ
RCwgUmVmUHRyPENTU1ZhbHVlPiA+IFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOwogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKICAgICB0eXBlZGVmIEhhc2hNYXA8RmlsdGVy
T3BlcmF0aW9uKiwgUmVmUHRyPFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWU+ID4gUGVuZGluZ1NW
R0RvY3VtZW50TWFwOwogI2VuZGlmCi0KICAgICBjbGFzcyBTdGF0ZSB7CiAgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFN0YXRlKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIFN0YXRlKCkKLSAg
ICAgICAgOiBtX2VsZW1lbnQoMCkKKyAgICAgICAgU3RhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQor
ICAgICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgICAgICwgbV9lbGVtZW50KDApCiAg
ICAgICAgICwgbV9zdHlsZWRFbGVtZW50KDApCiAgICAgICAgICwgbV9wYXJlbnROb2RlKDApCiAg
ICAgICAgICwgbV9wYXJlbnRTdHlsZSgwKQpAQCAtNDUxLDcgKzQ0Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKERvY3VtZW50KiwgRWxlbWVudCosIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8sIFJlbmRlclJlZ2lv
biogcmVnaW9uRm9yU3R5bGluZyA9IDApOwogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVu
dCgpOyB9CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9j
dW1lbnQ7IH0KICAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxl
bWVudDsgfQogICAgICAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHlsZWRFbGVtZW50OyB9CiAgICAgICAgIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gc3R5bGUpIHsgbV9zdHlsZSA9IHN0eWxlOyB9CkBAIC01MTIsMTEgKzUw
NCwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBt
YXRjaGVkUnVsZXMoKSB7IHJldHVybiBtX21hdGNoZWRSdWxlczsgfQogICAgICAgICB2b2lkIGFk
ZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVu
ZChydWxlKTsgfQorICAgICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOyB9CiAgICAgICAgIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIC8vIEZJWE1FKGJ1ZyAxMDg1NjMpOiB0byBtYWtlIGl0IGVhc2ll
ciB0byByZXZpZXcsIHRoZXNlIG1lbWJlcgotICAgICAgICAvLyB2YXJpYWJsZXMgYXJlIHB1Ymxp
Yy4gSG93ZXZlciB3ZSBzaG91bGQgYWRkIG1ldGhvZHMgdG8gYWNjZXNzCi0gICAgICAgIC8vIHRo
ZXNlIHZhcmlhYmxlcy4KKyAgICAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgICAgIEVs
ZW1lbnQqIG1fZWxlbWVudDsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwog
ICAgICAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7CkBAIC01NjIsMzAgKzU1Mywx
OCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxh
YmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCi0gICAgUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0gICAg
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOwotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJh
dGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKFN0YXRl
JiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBD
U1NJbWFnZVZhbHVlKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJh
dGVkT3JQZW5kaW5nRnJvbVZhbHVlKFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSopOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgIFBhc3NSZWZQdHI8
U3R5bGVJbWFnZT4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdl
U2V0VmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRPclBlbmRp
bmdGcm9tVmFsdWUoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7CiAj
ZW5kaWYKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1
ZShDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVlKik7Ci0KLSAgICBib29sIGFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCk7IH0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9y
UGVuZGluZ0Zyb21WYWx1ZShTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdlVmFs
dWUqKTsKIAogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2
ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVs
dGlwbGllciA9IDEpOwogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5ndGgoQ1NT
UHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRv
dWJsZSBtdWx0aXBsaWVyID0gMSk7CiAKLSAgICBDU1NUb1N0eWxlTWFwKiBzdHlsZU1hcCgpIHsg
cmV0dXJuICZtX3N0eWxlTWFwOyB9CiAgICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVj
dG9yQ1NTT01XcmFwcGVycygpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsgfQot
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9z
dGF0ZS5mb250RGVzY3JpcHRpb24oKTsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFy
ZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRp
b24oKTsgfQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7IH0KLSAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX3N0YXRlLnNldFpvb20o
Zik7IH0KLSAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX3N0YXRlLnNldEVm
ZmVjdGl2ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBt
X3N0YXRlLnNldFRleHRTaXplQWRqdXN0KGIpOyB9Ci0gICAgdm9pZCBzZXRXcml0aW5nTW9kZShX
cml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRlLnNldFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKTsgfQotICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0
T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9u
KTsgfQogICAgIAogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyop
IGNvbnN0OwogICAgIApAQCAtNTk1LDE2ICs1NzQsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNh
Y2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogCiBwcml2YXRlOgotICAgIGJvb2wgY2FuU2hhcmVT
dHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGNhblNoYXJl
U3R5bGVXaXRoQ29udHJvbChjb25zdCBTdGF0ZSYsIFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKIAot
ICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIHZv
aWQgYXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2soU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NW
YWx1ZSopOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENT
U1ZhbHVlKik7CiAKICNpZiBFTkFCTEUoU1ZHKQotICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0eShjb25z
dCBTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAjZW5kaWYKIAotICAgIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gbG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSopOwot
ICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IGxvYWRQZW5kaW5nSW1hZ2UoU3RhdGUmLCBTdHlsZVBlbmRpbmdJbWFnZSopOworICAgIHZvaWQg
bG9hZFBlbmRpbmdJbWFnZXMoU3RhdGUmKTsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRl
TWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiwgdW5zaWduZWQg
c2l6ZSk7CiAgICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtIHsKQEAgLTYyMiw3
ICs2MDIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hl
KFRpbWVyPFN0eWxlUmVzb2x2ZXI+Kik7CiAKICAgICBib29sIGNsYXNzTmFtZXNBZmZlY3RlZEJ5
UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYpIGNvbnN0OwotICAgIGJvb2wgc2hhcmluZ0Nh
bmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50
KikgY29uc3Q7CisgICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZl
Y3RpbmdBdHRyaWJ1dGVzKGNvbnN0IFN0YXRlJiwgU3R5bGVkRWxlbWVudCopIGNvbnN0OwogCiAg
ICAgdW5zaWduZWQgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dl
ZXA7CiAKQEAgLTY0OSwxMSArNjI5LDggQEAgcHJpdmF0ZToKICAgICBjb25zdCBTdHlsZUJ1aWxk
ZXImIG1fc3R5bGVCdWlsZGVyOwogCiAgICAgT3duUHRyPFN0eWxlU2NvcGVSZXNvbHZlcj4gbV9z
Y29wZVJlc29sdmVyOwotICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKICAgICBJbnNwZWN0
b3JDU1NPTVdyYXBwZXJzIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsKIAotICAgIFN0YXRlIG1f
c3RhdGU7Ci0KICAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOwogICAgIGZyaWVuZCBib29s
IG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVy
dGllcyYpOwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hlZFByb3BlcnRp
ZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggNDM2NGFj
ZDUwZjM1ODY5NGM4ZjBlNzgxYzMxZmZhMDZjOTYxOTA5Zi4uNGQ0OWMyOTkzNzRjNjU0OTY2ODdm
NWIxYjZiZmI1YmY5ZTliZjEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0yMDY0LDE4ICsyMDY0LDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBu
ZXdGb250KQogCiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50
byB0aGUgc3R5bGUuCiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGNhbnZhcygp
LT5zdHlsZVJlc29sdmVyKCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvU3R5
bGUoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgpLCBuZXdTdHlsZS5nZXQoKSk7Ci0gICAgc3R5
bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFN0
eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHls
ZSkuZ2V0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHls
ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50KS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBw
bHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcGFyc2VkU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7Ci0K
LSAgICAvLyBBcyBkZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBs
aW5lLWhlaWdodCBvbiBhIGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21w
dXRlTGVuZ3RoRG91YmxlIGNhbGwsCi0gICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUgZm9udE1ldHJp
Y3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBhIGNyYXNo
IG9jY3VycyAoc2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIyKS4KLSAg
ICAvLyBUaGUgdXBkYXRlRm9udCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9udE1ldHJpY3Mg
YW5kIGVuc3VyZSB0aGUgcHJvcGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdo
dC4KLSAgICBzdHlsZVJlc29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+
YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpLmdldCgpKTsKLSAg
ICBzdHlsZVJlc29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQ
cm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CisgICAg
c3R5bGVSZXNvbHZlci0+YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKG5ld1N0eWxlLmdldCgpLCBw
YXJzZWRTdHlsZS5nZXQoKSk7CiAKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2ZvbnQgPSBuZXdT
dHlsZS0+Zm9udCgpOwogICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udC51cGRhdGUoc3R5bGVS
ZXNvbHZlci0+Zm9udFNlbGVjdG9yKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189257</attachid>
            <date>2013-02-20 00:04:57 -0800</date>
            <delta_ts>2013-02-20 19:15:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109909-20130220170118.patch</filename>
            <type>text/plain</type>
            <size>238860</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTk4NDgyNWZmMjcwZGVl
NTIwMWI3NGI3ZDM0YTk5NzMzZjA0NmYzNi4uZWNkNWM4YmMxNjhlODIxNjJjNTBiZWVkYmJlNTA2
YjM0Yzk1NTMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAxMy0wMi0xNSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmFjdG9yaW5n
XSBNYWtlIG1fc3RhdGUgYW4gb24tc3RhY2sgb2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk5MDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb2RlIG1fc3RhdGUsIGFuIGluc3RhbmNlIG9mIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlLCBhbiBvbi1zdGFjayBvYmplY3QuCisgICAgICAgIFRoZSBzdGF0
ZSBpcyBvbmx5IHJlcXVpcmVkIGluIHN0eWxlRm9yRWxlbWVudCwgc3R5bGVGb3JLZXlmcmFtZSBh
bmQKKyAgICAgICAgc28gb24uIE5vIG5lZWQgdG8ga2VlcCB0aGUgc3RhdGUgb3V0c2lkZSBvZiB0
aG9zZSBtZXRob2RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYmVjYXVzZSBqdXN0IHJlZmFj
dG9yaW5nLgorCisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udmVydFRvTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OmJhc2ljU2hh
cGVGb3JWYWx1ZSk6CisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJlc29sdmVyKiB3aXRoIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNv
bHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAgICAgKENTU0dy
YWRpZW50VmFsdWUpOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJlc29sdmVyKiB3aXRoIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
U3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxl
TWFwOjpzdHlsZUltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0eWxl
TWFwKToKKyAgICAgICAgKENTU1RvU3R5bGVNYXApOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJl
c29sdmVyKiB3aXRoIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvU1ZHQ1NT
U3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KToKKyAgICAgICAgUmVwbGFjZWQgbV9zdGF0ZSB3aXRoIHN0YXRlIHdoaWNo
IGlzIGdpdmVuIGFzIGFuIGFyZ3VtZW50IG9mCisgICAgICAgIGFwcGx5U1ZHUHJvcGVydHkuCisg
ICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5RXhwYW5kaW5nOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5RXhwYW5kaW5nOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5RXhwYW5kaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseUluaXRpYWxWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHQ6OmFwcGx5VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU51bWJlcjo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5U3R5bGVJbWFnZTo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjpjb252ZXJ0VG9MZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEaXJlY3Rpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5U3RyaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlCb3JkZXJSYWRpdXM6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRM
aWdhdHVyZXM6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBs
eUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2VNb2RpZmllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvdW50ZXI6OmVtcHR5RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvdW50ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDb3VudGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDdXJzb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDdXJzb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDdXJzb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eVRleHRBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5VGV4dERlY29yYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6YXBw
bHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBo
YXNpc1N0eWxlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlB
bmltYXRpb246Om1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QW5pbWF0aW9u
OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QW5p
bWF0aW9uOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5QW5pbWF0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlPdXRsaW5lU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVJlc2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5VmVydGljYWxBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0aW86OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlJbml0aWFsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjpyZXNldEVmZmVjdGl2
ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OmFwcGx5SW5oZXJp
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjphcHBseUluaXRp
YWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6YXBwbHlWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6aXNWYWxpZERpc3Bs
YXlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6YXBwbHlJ
bmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmFw
cGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwUGF0aDo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RXhjbHVzaW9uU2hh
cGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVz
b2x1dGlvbjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgICog
Y3NzL1N0eWxlQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQcm9wZXJ0
eUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjphcHBseUluaGVy
aXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6OmFwcGx5SW5pdGlh
bFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIFJlcGxhY2VkIFN0eWxlUmVzb2x2ZXIqIHdpdGggU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6CisgICAg
ICAgIFJlbW92ZWQgbV9zdHlsZU1hcC4gTm93IG1fc3R5bGVNYXAgaXMgYW4gb24tc3RhY2sgb2Jq
ZWN0LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c29ydE1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
aGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hh
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
dHlsZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVu
ZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0
ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzZXRGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpzdHlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZp
bHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIEp1c3QgcmVwbGFjZWQg
bV9zdGF0ZSB3aXRoIHN0YXRlIGFuZCBhZGRlZCBvbmUgbW9yZSBwYXJhbWV0ZXIgdG8KKyAgICAg
ICAgcHJvdmlkZSB0aGUgc3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIFNpbmNlIG1fc3RhdGUgd2FzIHJlbW92ZWQsIHJl
bW92ZWQgYSBjb2RlIGZvciByZXBvcnRpbmcgbV9zdGF0ZSdzCisgICAgICAgIG1lbW9yeSB1c2Fn
ZS4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppc1JpZ2h0UGFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRvY3VtZW50KToKKyAgICAgICAgU2luY2UgU3Rh
dGU6Om1fZWxlbWVudCBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZSAoc29tZXRpbWVzLCAwKSwKKyAg
ICAgICAgYWRkZWQgbV9kb2N1bWVudCB0byBTdGF0ZSBhbmQgbW9kaWZpZWQgdG8gcmV0dXJuIHRo
ZSBtX2RvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnVz
ZVNWR1pvb21SdWxlcyk6CisgICAgICAgIE1vdmVkIFN0eWxlUmVzb2x2ZXIgdG8gU3RhdGUuCisg
ICAgICAgIChTdGF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0Rm9udCk6CisgICAgICAgIE1vdmVkIHRoZSBjb2RlLCB1cGRhdGluZyBhIHN0eWxlIGJ5IHVz
aW5nIGEgZ2l2ZW4gU3R5bGVQcm9wZXJ0eVNldCwKKyAgICAgICAgdG8gU3R5bGVSZXNvbHZlci4K
KwogMjAxMy0wMi0xOSAgSGF5YXRvIEl0byA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBDYWxjdWxhdGUgRXZlbnRQYXRoIGluIEV2ZW50RGlzcGF0Y2hlcidzIGNvbnN0cnVjdG9yLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCmluZGV4IDNhOGY3OTUz
YjZmOTZiMDEyZjg0MzIzN2EyZTEyYTBmZGY0Y2IxMjEuLmFhNmI3NGYyOWJhZmEyM2RhMjAxY2Vl
NjBkODg5MGQwM2UwNWNmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1No
YXBlRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0
aW9ucy5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJDU1NCYXNpY1NoYXBlcy5oIgog
I2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NWYWx1
ZVBvb2wuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMTAwLDEyICs5OSwxMiBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvckJh
c2ljU2hhcGUoY29uc3QgQmFzaWNTaGFwZSogYmFzaWNTaGFwZSkKICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWU8UGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiA+KGJhc2ljU2hh
cGVWYWx1ZS5yZWxlYXNlKCkpOwogfQogCi1zdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChj
b25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFs
dWUpCitzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChjb25zdCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYgc3RhdGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdmFs
dWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgRml4ZWRGbG9hdENv
bnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNp
b24+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5
bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICByZXR1
cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgRml4ZWRG
bG9hdENvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNv
bnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUu
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKIH0KIAotUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBi
YXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY29u
c3QgQ1NTQmFzaWNTaGFwZSogYmFzaWNTaGFwZVZhbHVlKQorUGFzc1JlZlB0cjxCYXNpY1NoYXBl
PiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBj
b25zdCBDU1NCYXNpY1NoYXBlKiBiYXNpY1NoYXBlVmFsdWUpCiB7CiAgICAgUmVmUHRyPEJhc2lj
U2hhcGU+IGJhc2ljU2hhcGU7CiAKQEAgLTExNCwxNCArMTEzLDE0IEBAIFBhc3NSZWZQdHI8QmFz
aWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIGNvCiAgICAgICAgIGNvbnN0IENTU0Jhc2ljU2hhcGVSZWN0YW5nbGUqIHJlY3RWYWx1
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU0Jhc2ljU2hhcGVSZWN0YW5nbGUgKj4oYmFzaWNTaGFw
ZVZhbHVlKTsKICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGVSZWN0YW5nbGU+IHJlY3QgPSBCYXNp
Y1NoYXBlUmVjdGFuZ2xlOjpjcmVhdGUoKTsKIAotICAgICAgICByZWN0LT5zZXRYKGNvbnZlcnRU
b0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPngoKSkpOwotICAgICAgICByZWN0LT5z
ZXRZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPnkoKSkpOwotICAg
ICAgICByZWN0LT5zZXRXaWR0aChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdFZh
bHVlLT53aWR0aCgpKSk7Ci0gICAgICAgIHJlY3QtPnNldEhlaWdodChjb252ZXJ0VG9MZW5ndGgo
c3R5bGVSZXNvbHZlciwgcmVjdFZhbHVlLT5oZWlnaHQoKSkpOworICAgICAgICByZWN0LT5zZXRY
KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT54KCkpKTsKKyAgICAgICAgcmVjdC0+
c2V0WShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+eSgpKSk7CisgICAgICAgIHJl
Y3QtPnNldFdpZHRoKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT53aWR0aCgpKSk7
CisgICAgICAgIHJlY3QtPnNldEhlaWdodChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1
ZS0+aGVpZ2h0KCkpKTsKICAgICAgICAgaWYgKHJlY3RWYWx1ZS0+cmFkaXVzWCgpKSB7Ci0gICAg
ICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29s
dmVyLCByZWN0VmFsdWUtPnJhZGl1c1goKSkpOworICAgICAgICAgICAgcmVjdC0+c2V0Q29ybmVy
UmFkaXVzWChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+cmFkaXVzWCgpKSk7CiAg
ICAgICAgICAgICBpZiAocmVjdFZhbHVlLT5yYWRpdXNZKCkpCi0gICAgICAgICAgICAgICAgcmVj
dC0+c2V0Q29ybmVyUmFkaXVzWShjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdFZh
bHVlLT5yYWRpdXNZKCkpKTsKKyAgICAgICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNZ
KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT5yYWRpdXNZKCkpKTsKICAgICAgICAg
fQogICAgICAgICBiYXNpY1NoYXBlID0gcmVjdC5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwpA
QCAtMTMwLDkgKzEyOSw5IEBAIFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZh
bHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvCiAgICAgICAgIGNvbnN0
IENTU0Jhc2ljU2hhcGVDaXJjbGUqIGNpcmNsZVZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NT
QmFzaWNTaGFwZUNpcmNsZSAqPihiYXNpY1NoYXBlVmFsdWUpOwogICAgICAgICBSZWZQdHI8QmFz
aWNTaGFwZUNpcmNsZT4gY2lyY2xlID0gQmFzaWNTaGFwZUNpcmNsZTo6Y3JlYXRlKCk7CiAKLSAg
ICAgICAgY2lyY2xlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBj
aXJjbGVWYWx1ZS0+Y2VudGVyWCgpKSk7Ci0gICAgICAgIGNpcmNsZS0+c2V0Q2VudGVyWShjb252
ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgY2lyY2xlVmFsdWUtPmNlbnRlclkoKSkpOwotICAg
ICAgICBjaXJjbGUtPnNldFJhZGl1cyhjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgY2ly
Y2xlVmFsdWUtPnJhZGl1cygpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0Q2VudGVyWChjb252ZXJ0
VG9MZW5ndGgoc3RhdGUsIGNpcmNsZVZhbHVlLT5jZW50ZXJYKCkpKTsKKyAgICAgICAgY2lyY2xl
LT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgY2lyY2xlVmFsdWUtPmNlbnRlclko
KSkpOworICAgICAgICBjaXJjbGUtPnNldFJhZGl1cyhjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGNp
cmNsZVZhbHVlLT5yYWRpdXMoKSkpOwogCiAgICAgICAgIGJhc2ljU2hhcGUgPSBjaXJjbGUucmVs
ZWFzZSgpOwogICAgICAgICBicmVhazsKQEAgLTE0MSwxMCArMTQwLDEwIEBAIFBhc3NSZWZQdHI8
QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIGNvCiAgICAgICAgIGNvbnN0IENTU0Jhc2ljU2hhcGVFbGxpcHNlKiBlbGxpcHNl
VmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1NCYXNpY1NoYXBlRWxsaXBzZSAqPihiYXNpY1No
YXBlVmFsdWUpOwogICAgICAgICBSZWZQdHI8QmFzaWNTaGFwZUVsbGlwc2U+IGVsbGlwc2UgPSBC
YXNpY1NoYXBlRWxsaXBzZTo6Y3JlYXRlKCk7CiAKLSAgICAgICAgZWxsaXBzZS0+c2V0Q2VudGVy
WChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgZWxsaXBzZVZhbHVlLT5jZW50ZXJYKCkp
KTsKLSAgICAgICAgZWxsaXBzZS0+c2V0Q2VudGVyWShjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNv
bHZlciwgZWxsaXBzZVZhbHVlLT5jZW50ZXJZKCkpKTsKLSAgICAgICAgZWxsaXBzZS0+c2V0UmFk
aXVzWChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgZWxsaXBzZVZhbHVlLT5yYWRpdXNY
KCkpKTsKLSAgICAgICAgZWxsaXBzZS0+c2V0UmFkaXVzWShjb252ZXJ0VG9MZW5ndGgoc3R5bGVS
ZXNvbHZlciwgZWxsaXBzZVZhbHVlLT5yYWRpdXNZKCkpKTsKKyAgICAgICAgZWxsaXBzZS0+c2V0
Q2VudGVyWChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1ZS0+Y2VudGVyWCgpKSk7
CisgICAgICAgIGVsbGlwc2UtPnNldENlbnRlclkoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBlbGxp
cHNlVmFsdWUtPmNlbnRlclkoKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNYKGNvbnZl
cnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5yYWRpdXNYKCkpKTsKKyAgICAgICAgZWxs
aXBzZS0+c2V0UmFkaXVzWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1ZS0+cmFk
aXVzWSgpKSk7CiAKICAgICAgICAgYmFzaWNTaGFwZSA9IGVsbGlwc2UucmVsZWFzZSgpOwogICAg
ICAgICBicmVhazsKQEAgLTE1Niw3ICsxNTUsNyBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJh
c2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjbwog
ICAgICAgICBwb2x5Z29uLT5zZXRXaW5kUnVsZShwb2x5Z29uVmFsdWUtPndpbmRSdWxlKCkpOwog
ICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiA+JiB2YWx1ZXMg
PSBwb2x5Z29uVmFsdWUtPnZhbHVlcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmFsdWVzLnNpemUoKTsgaSArPSAyKQotICAgICAgICAgICAgcG9seWdvbi0+YXBwZW5kUG9p
bnQoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHZhbHVlcy5hdChpKS5nZXQoKSksIGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCB2YWx1ZXMuYXQoaSArIDEpLmdldCgpKSk7Cisg
ICAgICAgICAgICBwb2x5Z29uLT5hcHBlbmRQb2ludChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHZh
bHVlcy5hdChpKS5nZXQoKSksIGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgdmFsdWVzLmF0KGkgKyAx
KS5nZXQoKSkpOwogCiAgICAgICAgIGJhc2ljU2hhcGUgPSBwb2x5Z29uLnJlbGVhc2UoKTsKICAg
ICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1
bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaAppbmRl
eCBkMzYwN2U5MDk5MjljMzQxYjBjMDY5ZDNlNWNlYjYxZjEzZjExNzE5Li5lNTYzMjA2ODc2OGE2
NzAxZjgwM2ZiMmFmZWY1NDg5ODUzMWQxMWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1No
YXBlRnVuY3Rpb25zLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgQmFzaWNTaGFwZUZ1bmN0
aW9uc19oCiAjZGVmaW5lIEJhc2ljU2hhcGVGdW5jdGlvbnNfaAogCisjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM3LDEwICszOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJhc2lj
U2hhcGU7CiBjbGFzcyBDU1NCYXNpY1NoYXBlOwogY2xhc3MgQ1NTVmFsdWU7Ci1jbGFzcyBTdHls
ZVJlc29sdmVyOwogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvckJhc2ljU2hhcGUoY29u
c3QgQmFzaWNTaGFwZSopOwotUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFs
dWUoY29uc3QgU3R5bGVSZXNvbHZlciosIGNvbnN0IENTU0Jhc2ljU2hhcGUqKTsKK1Bhc3NSZWZQ
dHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiwgY29uc3QgQ1NTQmFzaWNTaGFwZSopOwogCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCA4ZjE2OGFiNzJjZTMwNzU2ZGUwMzQxNzg0ZGY4
MDBmZDM3NjBiZjJlLi5lNTY1ZWZmNWFlNDE4ODM2ZjVkZWQyMTQ3NzlhMDQ4Y2VlZGI5OGRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0zNSw3ICszNSw2IEBA
CiAjaW5jbHVkZSAiSW50U2l6ZUhhc2guaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9N
ZW1vcnlJbnN0cnVtZW50YXRpb25WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CkBAIC0xMTUsMTEgKzExNCwxMSBAQCBzdHJ1Y3QgR3JhZGllbnRTdG9wIHsKICAg
ICB7IH0KIH07CiAKLVBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1
ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKK1Bhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGll
bnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogewogICAg
IGJvb2wgZGVyaXZlZCA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0
b3BzLnNpemUoKTsgaSsrKQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJp
bWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVudChtX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkp
KSB7CisgICAgICAgIGlmIChTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZUlz
RGVyaXZlZEZyb21FbGVtZW50KG1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSkpIHsKICAgICAgICAg
ICAgIG1fc3RvcHNbaV0ubV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID0gdHJ1ZTsKICAgICAg
ICAgICAgIGRlcml2ZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzgsNyArMTM3
LDcgQEAgUGFzc1JlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFk
aWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZVIKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVzdWx0LT5tX3N0b3BzLnNpemUoKTsgaSsrKQotICAgICAgICByZXN1bHQt
Pm1fc3RvcHNbaV0ubV9yZXNvbHZlZENvbG9yID0gc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJp
bWl0aXZlVmFsdWUocmVzdWx0LT5tX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpOworICAgICAgICBy
ZXN1bHQtPm1fc3RvcHNbaV0ubV9yZXNvbHZlZENvbG9yID0gU3R5bGVSZXNvbHZlcjo6Y29sb3JG
cm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIHJlc3VsdC0+bV9zdG9wc1tpXS5tX2NvbG9yLmdldCgp
KTsKIAogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFkaWVudFZhbHVlLmgKaW5kZXggOGUxYzc3YjY0MTEwZDk5NjdkMzcyMWIxY2FmYzA1ZjI5Zjgx
MTUyZi4uNDU5ODFlMmU1NmFmZTMxYzFmODc2ZjgwMTRhMGUyYThjZDg4ZDFhNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUu
aCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtODksNyArOTAsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBrbm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKICAgICB2
b2lkIGxvYWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKSB7IH0KLSAgICBQYXNzUmVm
UHRyPENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUmVz
b2x2ZXIqKTsKKyAgICBQYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0
eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJik7CiAKIHByb3RlY3RlZDoKICAgICBD
U1NHcmFkaWVudFZhbHVlKENsYXNzVHlwZSBjbGFzc1R5cGUsIENTU0dyYWRpZW50UmVwZWF0IHJl
cGVhdCwgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0
eWxlTWFwLmNwcAppbmRleCA3MjFmZDhlOTAxYjVlYmJmMWNmNmNkNzQ5ZmE4ZjUzZjFjZmJhNDli
Li5mZGMwNGNhZmQzMDZkYTk2ODAwZTBhZTM2YWU4NzY2Mjc3YzFmYmY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1RvU3R5bGVNYXAuY3BwCkBAIC00MywyMiArNDMsMjIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBSZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6c3R5bGUoKSBjb25zdAogewotICAg
IHJldHVybiBtX3Jlc29sdmVyLT5zdHlsZSgpOworICAgIHJldHVybiBtX3N0YXRlLnN0eWxlKCk7
CiB9CiAgICAgCiBSZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRTdHlsZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKTsKKyAg
ICByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCk7CiB9CiAKIGJvb2wgQ1NTVG9TdHls
ZU1hcDo6dXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+
dXNlU1ZHWm9vbVJ1bGVzKCk7CisgICAgcmV0dXJuIG1fc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCk7
CiB9CiAgICAgCiBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1RvU3R5bGVNYXA6OnN0eWxlSW1h
Z2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIG1fcmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJvcGVydHlJZCwgdmFsdWUpOworICAgIHJldHVy
biBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKG1fc3RhdGUsIHByb3BlcnR5SWQsIHZhbHVlKTsK
IH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlE
LCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuaAppbmRleCAzY2IxMjE1MGE4NDNlOGE0OGUzOWE1YjU0MTM1NzU5Mjk0YzQxNjczLi43
Zjg3MjBhNDg2YzkyY2E0YzMwYWY2NDM0ZGU4Zjk4ZGI3ZTJkYmQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NUb1N0eWxlTWFwLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5
TmFtZXMuaCIKICNpbmNsdWRlICJMZW5ndGhCb3guaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMyLDcgKzMzLDYgQEAgY2xhc3MgQ1NT
VmFsdWU7CiBjbGFzcyBBbmltYXRpb247CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFN0eWxl
SW1hZ2U7Ci1jbGFzcyBTdHlsZVJlc29sdmVyOwogY2xhc3MgTmluZVBpZWNlSW1hZ2U7CiAKIGNs
YXNzIENTU1RvU3R5bGVNYXAgewpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBDU1NUb1N0eWxlTWFw
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIENTU1RvU3R5
bGVNYXAoU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIpIDogbV9yZXNvbHZlcihyZXNvbHZlcikgeyB9
CisgICAgQ1NTVG9TdHlsZU1hcChTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpIDogbV9zdGF0
ZShzdGF0ZSkgeyB9CiAKICAgICB2b2lkIG1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciosIENTU1ZhbHVlKik7CiAgICAgdm9pZCBtYXBGaWxsQ2xpcChDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwpAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgog
ICAgIC8vIGR1cmluZyB0aGUgcmVzb2x2ZS4KICAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0
eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAotICAgIFN0eWxlUmVzb2x2ZXIq
IG1fcmVzb2x2ZXI7CisgICAgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIG1fc3RhdGU7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggZDFlOWM2
MGQzYjlkZWQ3ZTIwZmM3NjVlOWM3N2E0MzE2ZTNiNmQxMy4uOTI2YzY5MWE4YmY0Njg2ZGExOGM5
NWE0OGM2MTNiMjFlNjZjYjY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NT
U1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNl
bGVjdG9yLmNwcApAQCAtMTAyLDE0ICsxMDIsMTMgQEAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVNW
R0NvbG9yQ1NTVmFsdWUoU1ZHQ29sb3IqIHN2Z0NvbG9yLCBjb25zdCBDb2xvciYgZmdDb2xvcikK
ICAgICByZXR1cm4gY29sb3I7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5U1ZHUHJvcGVydHkoY29uc3QgU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSAwOwogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQogICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwogCi0gICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAg
ICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3NTVkdTdHls
ZSgpOwogCiAgICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUt
PmlzSW5oZXJpdGVkVmFsdWUoKTsKQEAgLTIzMSwxNiArMjMwLDE2IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQo
c3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWlu
dENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAg
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYXJlbnRTdHlsZS0+ZmlsbFBh
aW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5
bGUtPmZpbGxQYWludFVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwg
c3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0g
ICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbEZpbGxQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRDb2xv
cigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAg
ICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0
aWFsRmlsbFBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludENvbG9y
KCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQq
IHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJv
bVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQ
YWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxs
UGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2
Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBzdGF0ZS5h
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0yNDgsMTYgKzI0NywxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBpZiAoaXNJbmhlcml0KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKTsK
LSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUt
PnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBz
dmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFR5
cGUoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUt
PnN0cm9rZVBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBz
dGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAg
ICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoU1ZHUmVuZGVyU3R5bGU6Omlu
aXRpYWxTdHJva2VQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWlu
dENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRVcmkoKSwgYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KFNWR1JlbmRlclN0
eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ry
b2tlUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VXJpKCks
IHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAg
ICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhaW50LT5wYWlu
dFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUo
KS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICAgICAg
c3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9t
U1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1Bh
aW50LT51cmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTcwLDcgKzU2OSw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRl
TGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSA6IDA7
CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikK
LSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNv
bG9yLmdldCgpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IFN0eWxlUmVzb2x2ZXI6OmNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7CiAKICAgICAgICAg
ICAgIC8vIC13ZWJraXQtc3ZnLXNoYWRvdyBkb2VzIHNob3VsZCBub3QgaGF2ZSBhIHNwcmVhZCBv
ciBzdHlsZQogICAgICAgICAgICAgQVNTRVJUKCFpdGVtLT5zcHJlYWQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyLmNwcAppbmRleCA0ZDg3OGIyZTliMzI1ZTI1ZWUzNmFkOGNiZjJiMjAwZjJm
MzgyMTBhLi4xYmI2MTA0ZWY5ZTJhNjhlMzdhYWUyZDFjYzgwZGQyMWJiNDIyODFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcApAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApAQCAtNjEsNyArNjAsNyBAQCBj
bGFzcyBBcHBseVByb3BlcnR5RXhwYW5kaW5nIHsKIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlIDxD
U1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIp
CisgICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAg
aWYgKGlkID09IENTU1Byb3BlcnR5SW52YWxpZCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTY5
LDIwICs2OCwyMCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgdGFibGUg
PSBTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpOwogICAgICAgICBjb25zdCBQcm9w
ZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQpOwogICAgICAg
ICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJp
dFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgaGFuZGxlci5h
cHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQog
ICAgIHsKLSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyKTsKLSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyKTsKLSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQs
IHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmb3VyPihwcm9wZXJ0
eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zml2ZT4ocHJv
cGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPG9uZT4o
cHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0d28+KHByb3Bl
cnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dGhyZWU+KHByb3BlcnR5
SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwg
c3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdGF0
ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGlj
IGlubGluZSB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYgc3RhdGUpCiAgICAgewogICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlk
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTAsMjAgKzg5LDIwIEBAIHB1YmxpYzoKICAgICAg
ICAgY29uc3QgU3R5bGVCdWlsZGVyJiB0YWJsZSA9IFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVC
dWlsZGVyKCk7CiAgICAgICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IHRhYmxl
LnByb3BlcnR5SGFuZGxlcihpZCk7CiAgICAgICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNv
bHZlcik7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQs
IHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBhcHBseUluaXRpYWxW
YWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaXRp
YWxWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUlu
aXRpYWxWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFw
cGx5SW5pdGlhbFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAg
ICBhcHBseUluaXRpYWxWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAg
ICAgICAgYXBwbHlJbml0aWFsVmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAg
IGFwcGx5SW5pdGlhbFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBs
eUluaXRpYWxWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUlu
aXRpYWxWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5pdGlh
bFZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8
Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5SW52YWxpZCkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTExMSwxOSArMTEwLDE5IEBAIHB1YmxpYzoKICAgICAgICAgY29u
c3QgU3R5bGVCdWlsZGVyJiB0YWJsZSA9IFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVy
KCk7CiAgICAgICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3Bl
cnR5SGFuZGxlcihpZCk7CiAgICAgICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkKLSAgICAgICAg
ICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7
CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVl
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICghZXhwYW5kVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXBwbHlW
YWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBw
bHlWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAg
YXBwbHlWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAg
ICAgICBhcHBseVZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsK
LSAgICAgICAgYXBwbHlWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1
ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICBhcHBseVZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgYXBwbHlWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
YXBwbHlWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBhcHBs
eVZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CiAgICAgfQogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxl
cigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9
CiB9OwpAQCAtMTM0LDkgKzEzMyw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1
ZShSZW5kZXJTdHlsZSogc3R5bGUsIFNldHRlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVy
RnVuY3Rpb24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyBHZXR0ZXJUeXBlIHZhbHVlKFJlbmRlclN0
eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qZ2V0dGVyRnVuY3Rpb24pKCk7IH0KICAgICBz
dGF0aWMgSW5pdGlhbFR5cGUgaW5pdGlhbCgpIHsgcmV0dXJuICgqaW5pdGlhbEZ1bmN0aW9uKSgp
OyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgeyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLCB2YWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7IH0KLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKSB7IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGluaXRpYWwoKSk7
IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqLCBDU1NWYWx1ZSopIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkgeyBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCB2YWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7IH0KKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUpIHsgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW5pdGlhbCgpKTsgfQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmLCBD
U1NWYWx1ZSopIHsgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigp
IHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRp
YWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CiB9OwogCkBAIC0xNDQsMTAgKzE0MywxMCBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgR2V0dGVyVHlwZSwgR2V0dGVyVHlwZSAoUmVuZGVyU3R5bGU6OipnZXR0
ZXJGdW5jdGlvbikoKSBjb25zdAogY2xhc3MgQXBwbHlQcm9wZXJ0eURlZmF1bHQgewogcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgU2V0dGVyVHlw
ZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksICpz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSk7CiAgICAgfQogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTYwLDE2ICsxNTks
MTYgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE51bWJlclR5cGUsIE51bWJlclR5cGUgKFJlbmRlclN0
eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QKIGNsYXNzIEFwcGx5UHJvcGVydHlOdW1iZXIg
ewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwg
TnVtYmVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IGlkTWFwc1RvTWludXNPbmUpCi0gICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAtMSk7CisgICAgICAgICAg
ICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCAtMSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1
ZTxOdW1iZXJUeXBlPihDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlPE51bWJl
clR5cGU+KENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgfQogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTgxLDcgKzE4MCw3
IEBAIHB1YmxpYzoKIHRlbXBsYXRlIDxTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJG
dW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiksIFN0eWxlSW1hZ2UqICgqaW5pdGlhbEZ1bmN0aW9uKSgpLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5PgogY2xhc3MgQXBwbHlQcm9wZXJ0eVN0eWxlSW1hZ2Ugewog
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJv
cGVydHksIHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdGF0
ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3Rh
dGUsIHByb3BlcnR5LCB2YWx1ZSkpOyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKICAgICB7CiAgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBw
bHlQcm9wZXJ0eURlZmF1bHRCYXNlPFN0eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiwgc2V0dGVyRnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBpbml0aWFsRnVu
Y3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7CkBAIC0xOTgsMjggKzE5NywyOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGJvb2wgaGFzQXV0byhSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHls
ZS0+Kmhhc0F1dG9GdW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyB2b2lkIHNldEF1dG8oUmVuZGVy
U3R5bGUqIHN0eWxlKSB7IChzdHlsZS0+KnNldEF1dG9GdW5jdGlvbikoKTsgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBpZiAo
aGFzQXV0byhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSkKLSAgICAgICAgICAgIHNldEF1
dG8oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgIGlmIChoYXNBdXRvKHN0YXRlLnBh
cmVudFN0eWxlKCkpKQorICAgICAgICAgICAgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgdmFs
dWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgc2V0VmFsdWUo
c3RhdGUuc3R5bGUoKSwgdmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsgfQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSkgeyBzZXRBdXRvKHN0YXRlLnN0eWxlKCkpOyB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gYXV0b0lkZW50aXR5KQotICAgICAgICAgICAg
c2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKKyAgICAgICAgICAgIHNldEF1dG8oc3Rh
dGUuc3R5bGUoKSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBOdW1iZXIpCi0gICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAqcHJpbWl0aXZlVmFsdWUp
OworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgKnByaW1pdGl2ZVZhbHVlKTsK
ICAgICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IENvbXB1dGVMZW5ndGgpCi0gICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxl
bWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwor
ICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmNvbXB1
dGVMZW5ndGg8VD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0
ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5
SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtMjI3
LDI3ICsyMjYsMjcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5Q2xpcCB7CiBwcml2
YXRlOgotICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgTGVuZ3Ro
IGNvbnZlcnRUb0xlbmd0aChTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ByaW1pdGl2
ZVZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVu
Z3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9u
Q29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZp
eGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVy
c2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgfQogcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCk7CisgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSA9IHN0YXRlLnBhcmVudFN0eWxlKCk7CiAgICAgICAgIGlmICghcGFyZW50U3R5bGUtPmhhc0Ns
aXAoKSkKLSAgICAgICAgICAgIHJldHVybiBhcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBz
dHlsZVJlc29sdmVyKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChw
YXJlbnRTdHlsZS0+Y2xpcFRvcCgpLCBwYXJlbnRTdHlsZS0+Y2xpcFJpZ2h0KCksIHBhcmVudFN0
eWxlLT5jbGlwQm90dG9tKCksIHBhcmVudFN0eWxlLT5jbGlwTGVmdCgpKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKKyAgICAgICAgICAgIHJldHVy
biBhcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldENsaXAocGFyZW50U3R5bGUtPmNsaXBUb3AoKSwgcGFyZW50U3R5bGUtPmNsaXBS
aWdodCgpLCBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgpLCBwYXJlbnRTdHlsZS0+Y2xpcExlZnQo
KSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVu
Z3RoKCksIExlbmd0aCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFz
Q2xpcChmYWxzZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExl
bmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRI
YXNDbGlwKGZhbHNlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjU1LDE1ICsy
NTQsMTUgQEAgcHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBp
ZiAoUmVjdCogcmVjdCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRSZWN0VmFsdWUoKSkgewotICAgICAg
ICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT50
b3AoKSk7Ci0gICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVS
ZXNvbHZlciwgcmVjdC0+cmlnaHQoKSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29u
dmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPmJvdHRvbSgpKTsKLSAgICAgICAgICAg
IExlbmd0aCBsZWZ0ID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPmxlZnQo
KSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHRvcCwgcmln
aHQsIGJvdHRvbSwgbGVmdCk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRIYXNDbGlwKHRydWUpOworICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0xlbmd0
aChzdGF0ZSwgcmVjdC0+dG9wKCkpOworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVy
dFRvTGVuZ3RoKHN0YXRlLCByZWN0LT5yaWdodCgpKTsKKyAgICAgICAgICAgIExlbmd0aCBib3R0
b20gPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3QtPmJvdHRvbSgpKTsKKyAgICAgICAgICAg
IExlbmd0aCBsZWZ0ID0gY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0LT5sZWZ0KCkpOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q2xpcCh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKICAgICAgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pIHsK
LSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExl
bmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0yODEsNDAgKzI4MCw0MCBAQCB0ZW1wbGF0ZSA8Q29sb3JJbmhlcml0IGluaGVyaXRDb2xv
ckZyb21QYXJlbnQsCiAgICAgICAgICAgQ29sb3IgKCppbml0aWFsRnVuY3Rpb24pKCkgPSAmZGVm
YXVsdEluaXRpYWxDb2xvcj4KIGNsYXNzIEFwcGx5UHJvcGVydHlDb2xvciB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewogICAgICAg
ICAvLyBWaXNpdGVkIGxpbmsgc3R5bGUgY2FuIG5ldmVyIGV4cGxpY2l0bHkgaW5oZXJpdCBmcm9t
IHBhcmVudCB2aXNpdGVkIGxpbmsgc3R5bGUgc28gbm8gc2VwYXJhdGUgZ2V0dGVycyBhcmUgbmVl
ZGVkLgotICAgICAgICBDb2xvciBjb2xvciA9IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
LT4qZ2V0dGVyRnVuY3Rpb24pKCk7Ci0gICAgICAgIGFwcGx5Q29sb3JWYWx1ZShzdHlsZVJlc29s
dmVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpLT4qZGVmYXVsdEZ1bmN0aW9uKSgpKTsKKyAgICAgICAgQ29sb3IgY29sb3IgPSAoc3RhdGUu
cGFyZW50U3R5bGUoKS0+KmdldHRlckZ1bmN0aW9uKSgpOworICAgICAgICBhcHBseUNvbG9yVmFs
dWUoc3RhdGUsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogKHN0YXRlLnBhcmVudFN0eWxlKCkt
PipkZWZhdWx0RnVuY3Rpb24pKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5p
dGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0eWxl
UmVzb2x2ZXIsIGluaXRpYWxGdW5jdGlvbigpKTsKKyAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0
YXRlLCBpbml0aWFsRnVuY3Rpb24oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAg
IGlmIChpbmhlcml0Q29sb3JGcm9tUGFyZW50ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQotICAgICAgICAgICAgYXBwbHlJbmhlcml0VmFsdWUo
cHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBhcHBseUluaGVyaXRWYWx1
ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKHN0
eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQotICAgICAgICAgICAg
ICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2
ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKSk7Ci0gICAgICAgICAg
ICBpZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQot
ICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0
ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0
aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIHRydWUpKTsKKyAgICAgICAgICAgIGlmIChz
dGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAoc3Rh
dGUuc3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShTdHlsZVJlc29sdmVyOjpjb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChzdGF0
ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCisgICAgICAgICAgICAgICAgKHN0
YXRlLnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShTdHlsZVJlc29sdmVyOjpj
b2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0
ZWRMaW5rICovIHRydWUpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5Q29sb3JWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjb25zdCBDb2xvciYg
Y29sb3IpCisgICAgc3RhdGljIHZvaWQgYXBwbHlDb2xvclZhbHVlKFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIHsKLSAgICAgICAgaWYgKHN0eWxl
UmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQotICAgICAgICAgICAgKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoY29sb3IpOwotICAgICAgICBp
ZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQotICAg
ICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0
aW9uKShjb2xvcik7CisgICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKSkKKyAgICAgICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKGNvbG9y
KTsKKyAgICAgICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkK
KyAgICAgICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbiko
Y29sb3IpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUlu
aXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0zMjMsMTEgKzMyMiwxMSBAQCBwdWJsaWM6
CiB0ZW1wbGF0ZSA8VGV4dERpcmVjdGlvbiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbiko
KSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoVGV4dERpcmVjdGlv
biksIFRleHREaXJlY3Rpb24gKCppbml0aWFsRnVuY3Rpb24pKCk+CiBjbGFzcyBBcHBseVByb3Bl
cnR5RGlyZWN0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24sIGdldHRlckZ1
bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgaW5p
dGlhbEZ1bmN0aW9uPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1
ZSk7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCk7
Ci0gICAgICAgIGlmIChlbGVtZW50ICYmIHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSA9PSBlbGVt
ZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgQXBwbHlQcm9wZXJ0
eURlZmF1bHQ8VGV4dERpcmVjdGlvbiwgZ2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIHNl
dHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBpbml0aWFsRnVuY3Rpb24+OjphcHBseVZhbHVl
KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0ZS5lbGVtZW50KCk7CisgICAgICAgIGlmIChlbGVtZW50ICYmIHN0YXRlLmVsZW1lbnQoKSA9
PSBlbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKICAgICAgICAgICAgIGVs
ZW1lbnQtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUp
OwogICAgIH0KIApAQCAtMzU0LDcgKzM1Myw3IEBAIHRlbXBsYXRlIDxMZW5ndGggKFJlbmRlclN0
eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCiBjbGFzcyBBcHBseVByb3BlcnR5TGVuZ3Ro
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUs
IExlbmd0aCB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTM2MiwzOSArMzYxLDM5IEBAIHB1YmxpYzoKICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChub25lRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgICAgIGlmIChub25lVW5k
ZWZpbmVkKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IExlbmd0aChVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHls
ZSgpLCBMZW5ndGgoVW5kZWZpbmVkKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOworICAgICAgICAg
ICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAobGVnYWN5SW50cmluc2ljRW5hYmxlZCkgewogICAgICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW50cmluc2ljKQotICAgICAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChJbnRyaW5zaWMpKTsK
KyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoSW50cmluc2lj
KSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZU1pbkludHJpbnNpYykKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBMZW5ndGgoTWluSW50cmluc2ljKSk7CisgICAgICAgICAgICAgICAgc2V0
VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1pbkludHJpbnNpYykpOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChpbnRyaW5zaWNFbmFibGVkKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50KQotICAgICAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5Db250ZW50
KSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1pbkNv
bnRlbnQpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlV2Via2l0TWF4Q29udGVudCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWF4Q29udGVudCkpOworICAgICAgICAgICAg
ICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChNYXhDb250ZW50KSk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtp
dEZpbGxBdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgTGVuZ3RoKEZpbGxBdmFpbGFibGUpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOwogICAgICAgICAgICAgZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRGaXRDb250
ZW50KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExl
bmd0aChGaXRDb250ZW50KSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgTGVuZ3RoKEZpdENvbnRlbnQpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhdXRvRW5h
YmxlZCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7CisgICAg
ICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoKSk7CiAgICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBMZW5ndGggbGVu
Z3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICBMZW5ndGggbGVuZ3Ro
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7
CiAgICAgICAgICAgICBsZW5ndGguc2V0UXVpcmsocHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1
ZSgpKTsKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGxlbmd0
aCk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBsZW5ndGgpOwogICAgICAg
ICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUu
c3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50
KSk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50
YWdlV2l0aExlbmd0aCgpKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgICAg
ICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNW
YWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCi0gICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+dmlld3Bv
cnRQZXJjZW50YWdlTGVuZ3RoKCkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtNDA5LDE2ICs0
MDgsMTYgQEAgdGVtcGxhdGUgPFN0cmluZ0lkZW50QmVoYXZpb3IgaWRlbnRCZWhhdmlvciwgY29u
c3QgQXRvbWljU3RyaW5nJiAoUmVuZGVyU3R5bGU6OioKIGNsYXNzIEFwcGx5UHJvcGVydHlTdHJp
bmcgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbiko
dmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CiAgICAgICAgIGlmICgoaWRlbnRCZWhhdmlvciA9PSBNYXBOb25lVG9OdWxsICYmIHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHx8IChpZGVu
dEJlaGF2aW9yID09IE1hcEF1dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVBdXRvKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIG51bGxBdG9tKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIG51
bGxBdG9tKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVl
KCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQog
ICAgIHsKQEAgLTQzMSw3ICs0MzAsNyBAQCB0ZW1wbGF0ZSA8TGVuZ3RoU2l6ZSAoUmVuZGVyU3R5
bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OgogY2xhc3Mg
QXBwbHlQcm9wZXJ0eUJvcmRlclJhZGl1cyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0
VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBMZW5ndGhTaXplIHZhbHVlKSB7IChzdHlsZS0+KnNl
dHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDQ4LDE3ICs0
NDcsMTcgQEAgcHVibGljOgogICAgICAgICBlbHNlIGlmIChwYWlyLT5maXJzdCgpLT5pc1ZpZXdw
b3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICAgICAgcmFkaXVzV2lkdGggPSBwYWlyLT5m
aXJzdCgpLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAgZWxzZSBpZiAocGFp
ci0+Zmlyc3QoKS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAg
ICAgIHJhZGl1c1dpZHRoID0gTGVuZ3RoKChwYWlyLT5maXJzdCgpLT5jc3NDYWxjVmFsdWUoKS0+
dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7
CisgICAgICAgICAgICByYWRpdXNXaWR0aCA9IExlbmd0aCgocGFpci0+Zmlyc3QoKS0+Y3NzQ2Fs
Y1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByYWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVu
Z3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAg
ICAgICByYWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihz
dGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNQZXJjZW50YWdl
KCkpCiAgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgocGFpci0+c2Vjb25kKCktPmdl
dERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgICAgICBlbHNlIGlmIChwYWlyLT5zZWNvbmQo
KS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgICAgIHJhZGl1c0hlaWdo
dCA9IHBhaXItPnNlY29uZCgpLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAg
ZWxzZSBpZiAocGFpci0+c2Vjb25kKCktPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3Ro
KCkpCi0gICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5j
c3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCkpKSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBhaXIt
PnNlY29uZCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgp
LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNv
bHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCkpOworICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGludCB3aWR0aCA9
IHJhZGl1c1dpZHRoLnZhbHVlKCk7CiAgICAgICAgIGludCBoZWlnaHQgPSByYWRpdXNIZWlnaHQu
dmFsdWUoKTsKICAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQpAQCAtNDY5LDcg
KzQ2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcmFkaXVzSGVpZ2h0
OyAvLyBOdWxsIG91dCB0aGUgb3RoZXIgdmFsdWUuCiAKICAgICAgICAgTGVuZ3RoU2l6ZSBzaXpl
KHJhZGl1c1dpZHRoLCByYWRpdXNIZWlnaHQpOwotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBzaXplKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgc2l6
ZSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAg
ICAgewpAQCAtNTAzLDExICs1MDIsMTEgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsCiAgICAgICAg
ICAgdm9pZCAoQ1NTVG9TdHlsZU1hcDo6Km1hcEZpbGxGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwg
RmlsbExheWVyKiwgQ1NTVmFsdWUqKT4KIGNsYXNzIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXIgewog
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAg
IHsKLSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGls
ZCA9IChzdGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIEZp
bGxMYXllciogcHJldkNoaWxkID0gMDsKLSAgICAgICAgY29uc3QgRmlsbExheWVyKiBjdXJyUGFy
ZW50ID0gKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipsYXllcnNGdW5jdGlvbikoKTsK
KyAgICAgICAgY29uc3QgRmlsbExheWVyKiBjdXJyUGFyZW50ID0gKHN0YXRlLnBhcmVudFN0eWxl
KCktPipsYXllcnNGdW5jdGlvbikoKTsKICAgICAgICAgd2hpbGUgKGN1cnJQYXJlbnQgJiYgKGN1
cnJQYXJlbnQtPip0ZXN0RnVuY3Rpb24pKCkpIHsKICAgICAgICAgICAgIGlmICghY3VyckNoaWxk
KSB7CiAgICAgICAgICAgICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IGxheWVyLiovCkBAIC01
MjcsMTggKzUyNiwxOSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZpbGxMYXll
ciogY3VyckNoaWxkID0gKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5j
dGlvbikoKTsKKyAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3RhdGUuc3R5bGUoKS0+
KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICAoY3VyckNoaWxkLT4qc2V0RnVuY3Rp
b24pKCgqaW5pdGlhbEZ1bmN0aW9uKShmaWxsTGF5ZXJUeXBlKSk7CiAgICAgICAgIGZvciAoY3Vy
ckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IGN1cnJDaGlsZDsgY3VyckNoaWxkID0gY3VyckNo
aWxkLT5uZXh0KCkpCiAgICAgICAgICAgICAoY3VyckNoaWxkLT4qY2xlYXJGdW5jdGlvbikoKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAg
ICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVu
Y3Rpb24pKCk7CiAgICAgICAgIEZpbGxMYXllciogcHJldkNoaWxkID0gMDsKKyAgICAgICAgQ1NT
VG9TdHlsZU1hcCBzdHlsZU1hcChzdGF0ZSk7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxp
c3QoKQogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgICAgICAmJiAhdmFsdWUtPmlzSW1h
Z2VTZXRWYWx1ZSgpCkBAIC01NTIsMTIgKzU1MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIGN1cnJDaGlsZCA9IG5ldyBGaWxsTGF5ZXIoZmlsbExheWVyVHlwZSk7CiAgICAgICAg
ICAgICAgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZp
bGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSkpOworICAgICAgICAgICAgICAgIChzdHlsZU1hcC4qbWFwRmlsbEZ1bmN0
aW9uKShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjayhpKSk7CiAgICAgICAgICAgICAgICAgcHJldkNoaWxkID0gY3VyckNoaWxkOwogICAgICAg
ICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCkt
PiptYXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWUpOworICAgICAg
ICAgICAgKHN0eWxlTWFwLiptYXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwg
dmFsdWUpOwogICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7CiAgICAg
ICAgIH0KICAgICAgICAgd2hpbGUgKGN1cnJDaGlsZCkgewpAQCAtNTgzLDcgKzU4Myw3IEBAIHRl
bXBsYXRlIDx0eXBlbmFtZSBULAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGggewog
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgVCB2
YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIC8vIG5vdGU6IENTU1Byb3BlcnR5TGV0dGVyL1dvcmRTcGFjaW5nIHJpZ2h0IG5v
dyBzZXRzIHRvIHplcm8gaWYgaXQncyBub3QgYSBwcmltaXRpdmUgdmFsdWUgZm9yIHNvbWUgcmVh
c29uLi4uCiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKQEAgLTYwMiwx
MyArNjAyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgfSBlbHNlIGlmICh0aGlja25lc3NFbmFibGVk
ICYmIGlkZW50ID09IENTU1ZhbHVlVGhpY2spIHsKICAgICAgICAgICAgIGxlbmd0aCA9IDU7CiAg
ICAgICAgIH0gZWxzZSBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVJbnZhbGlkKSB7Ci0gICAgICAgICAg
ICBmbG9hdCB6b29tID0gKHN2Z1pvb21FbmFibGVkICYmIHN0eWxlUmVzb2x2ZXItPnVzZVNWR1pv
b21SdWxlcygpKSA/IDEuMGYgOiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCk7CisgICAgICAgICAgICBmbG9hdCB6b29tID0gKHN2Z1pvb21FbmFibGVkICYmIHN0YXRlLnVz
ZVNWR1pvb21SdWxlcygpKSA/IDEuMGYgOiBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7
CiAKICAgICAgICAgICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQgdGhhdCB3YXMgPj0gMSBzaG91
bGQgbm90IGJlIGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAxLgogICAgICAgICAgICAgLy8gVGhpcyBr
ZWVwcyBib3JkZXIgbGluZXMgZnJvbSB2YW5pc2hpbmcuCi0gICAgICAgICAgICBsZW5ndGggPSBw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOworICAgICAgICAgICAgbGVu
Z3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKICAgICAgICAgICAgIGlmICh6b29tIDwgMS4w
ZiAmJiBsZW5ndGggPCAxLjApIHsKLSAgICAgICAgICAgICAgICBUIG9yaWdpbmFsTGVuZ3RoID0g
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
c3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjApOworICAgICAgICAgICAgICAg
IFQgb3JpZ2luYWxMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0
ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIDEuMCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbmFsTGVuZ3RoID49IDEuMCkKICAgICAgICAgICAgICAgICAgICAgbGVuZ3Ro
ID0gMS4wOwogICAgICAgICAgICAgfQpAQCAtNjE4LDcgKzYxOCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGxlbmd0aCA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBsZW5ndGgpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
LCBsZW5ndGgpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRs
ZXIoKQogICAgIHsKQEAgLTYzMCwyOCArNjMwLDI4IEBAIHB1YmxpYzoKIHRlbXBsYXRlIDx0eXBl
bmFtZSBULCBUIChGb250RGVzY3JpcHRpb246OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9p
ZCAoRm9udERlc2NyaXB0aW9uOjoqc2V0dGVyRnVuY3Rpb24pKFQpLCBUIGluaXRpYWxWYWx1ZT4K
IGNsYXNzIEFwcGx5UHJvcGVydHlGb250IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAg
ICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKChzdHlsZVJlc29sdmVyLT5wYXJl
bnRGb250RGVzY3JpcHRpb24oKS4qZ2V0dGVyRnVuY3Rpb24pKCkpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0YXRlLnBhcmVudEZv
bnREZXNjcmlwdGlvbigpLipnZXR0ZXJGdW5jdGlvbikoKSk7CisgICAgICAgIHN0YXRlLnNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKShpbml0
aWFsVmFsdWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHls
ZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAoZm9udERl
c2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAg
IHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAogICAg
IHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5
SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFs
dWUpOyB9CkBAIC02NzYsNTAgKzY3Niw1MCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc2l6
ZSAvIDEuMmY7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6
U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2ZXIt
PnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAg
ICAgZmxvYXQgc2l6ZSA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNw
ZWNpZmllZFNpemUoKTsKIAogICAgICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0S2V5d29yZFNpemUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCkua2V5d29yZFNpemUoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRT
aXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShzdGF0ZS5wYXJlbnRTdHlsZSgpLT5m
b250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZSgpKTsKKyAgICAgICAgU3R5bGVSZXNvbHZlcjo6
c2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgICAgIHN0YXRl
LnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAg
ewotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZsb2F0IHNpemUgPSBzdHls
ZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwg
Q1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZsb2F0IHNpemUgPSBTdHlsZVJlc29sdmVyOjpm
b250U2l6ZUZvcktleXdvcmQoc3RhdGUuZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZvbnRE
ZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOwogCiAgICAgICAgIGlmIChzaXplIDwg
MCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5
d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Cisg
ICAgICAgIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24s
IHNpemUpOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgw
KTsKICAgICAgICAgZmxvYXQgcGFyZW50U2l6ZSA9IDA7CiAgICAgICAgIGJvb2wgcGFyZW50SXNB
YnNvbHV0ZVNpemUgPSBmYWxzZTsKICAgICAgICAgZmxvYXQgc2l6ZSA9IDA7CiAKLSAgICAgICAg
aWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpIHsKLSAgICAgICAgICAgIHBhcmVudFNp
emUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVj
aWZpZWRTaXplKCk7Ci0gICAgICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IHN0eWxlUmVz
b2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7
CisgICAgICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7CisgICAgICAgICAgICBwYXJlbnRT
aXplID0gc3RhdGUucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6
ZSgpOworICAgICAgICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKGludCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CkBAIC03
MzMsNyArNzMzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToK
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgogICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZVdlYmtpdFh4eExhcmdlOgotICAgICAgICAgICAgICAgIHNpemUgPSBzdHlsZVJlc29sdmVy
LT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgaWRlbnQsIGZv
bnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICAgICAgICAgIHNp
emUgPSBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQoc3RhdGUuZG9jdW1lbnQoKSwg
aWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOwogICAgICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShpZGVudCAtIENTU1ZhbHVlWHhT
bWFsbCArIDEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZUxhcmdlcjoKQEAgLTc1MSwxMyArNzUxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICEocHJpbWl0aXZl
VmFsdWUtPmlzUGVyY2VudGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLT5pc0ZvbnRSZWxhdGl2ZUxl
bmd0aCgpKSk7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0g
ICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCksIDEuMCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5wYXJlbnRTdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIDEuMCwgdHJ1ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAgICAgICAgc2l6ZSA9IChwcmltaXRp
dmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpICogcGFyZW50U2l6ZSkgLyAxMDAuMGY7CiAgICAgICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhM
ZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNW
YWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLCBzdHlsZVJl
c29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKKyAgICAg
ICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNW
YWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpLT5ldmFs
dWF0ZShwYXJlbnRTaXplKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5p
c1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHNpemUgPSB2YWx1
ZUZvckxlbmd0aChwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCksIDAs
IHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSk7CisgICAgICAgICAgICAg
ICAgc2l6ZSA9IHZhbHVlRm9yTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRh
Z2VMZW5ndGgoKSwgMCwgc3RhdGUuZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTc2OSw4ICs3
NjksOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIENhcCBmb250IHNpemUgaGVyZSB0byBtYWtlIHN1
cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4KICAgICAgICAgc2l6ZSA9IG1pbihtYXhpbXVtQWxsb3dl
ZEZvbnRTaXplLCBzaXplKTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShm
b250RGVzY3JpcHRpb24sIHNpemUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgU3R5bGVSZXNvbHZlcjo6c2V0Rm9u
dFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgICAgIHN0YXRlLnNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC03NzksMTIgKzc3OSwxMiBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlGb250
V2VpZ2h0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
UmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIHN3aXRjaCAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUludmFs
aWQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTc5OCw3ICs3OTgsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0V2VpZ2h0KCpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRl
LnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTgwOSwzMCArODA5LDMw
IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAg
ICB7Ci0gICAgICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9u
ID0gc3R5bGVSZXNvbHZlci0+cGFyZW50Rm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRp
b24oKTsKKyAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRp
b24gPSBzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250RGVzY3Jp
cHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUocGFyZW50Rm9udERlc2NyaXB0aW9uLmRpc2Ny
ZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEhp
c3RvcmljYWxMaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uaGlzdG9yaWNhbExp
Z2F0dXJlc1N0YXRlKCkpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogCiAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShGb250RGVzY3Jp
cHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0
dXJlc1N0YXRlKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVy
ZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKIAotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAg
ICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUg
Y29tbW9uTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0
YXRlOwogICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGRpc2NyZXRpb25h
cnlMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7
CkBAIC04NzgsMTEgKzg3OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICNlbmRpZgogCi0gICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
bW9uTGlnYXR1cmVzU3RhdGUoY29tbW9uTGlnYXR1cmVzU3RhdGUpOwogICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKGRpc2NyZXRpb25hcnlMaWdh
dHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1
cmVzU3RhdGUoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAogICAgIHN0YXRpYyBQ
cm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC04OTgsMTMgKzg5OCwxNCBAQCB0ZW1w
bGF0ZSA8Qm9yZGVySW1hZ2VUeXBlIGJvcmRlckltYWdlVHlwZSwKICAgICAgICAgICB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShjb25zdCBOaW5lUGllY2VJbWFnZSYpPgogY2xh
c3MgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2U7CiAgICAgICAgIGlmIChib3JkZXJJbWFnZVR5cGUg
PT0gQm9yZGVyTWFzaykKICAgICAgICAgICAgIGltYWdlLnNldE1hc2tEZWZhdWx0cygpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZShwcm9wZXJ0
eSwgdmFsdWUsIGltYWdlKTsKLSAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0
ZXJGdW5jdGlvbikoaW1hZ2UpOworICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRl
KTsKKyAgICAgICAgc3R5bGVNYXAubWFwTmluZVBpZWNlSW1hZ2UocHJvcGVydHksIHZhbHVlLCBp
bWFnZSk7CisgICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKGltYWdlKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAt
OTIxLDI5ICs5MjIsMjkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW5saW5lIGNvbnN0IE5pbmVQ
aWVjZUltYWdlJiBnZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIHR5cGUgPT0g
Qm9yZGVySW1hZ2UgPyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2Uo
KTsgfQogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IE5pbmVQaWVjZUltYWdlJiB2YWx1ZSkgeyByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFn
ZSA/IHN0eWxlLT5zZXRCb3JkZXJJbWFnZSh2YWx1ZSkgOiBzdHlsZS0+c2V0TWFza0JveEltYWdl
KHZhbHVlKTsgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlKQogICAgIHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRW
YWx1ZShzdGF0ZS5zdHlsZSgpKSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAg
ICAgY2FzZSBPdXRzZXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShnZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5
T3V0c2V0RnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBSZXBlYXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5UmVwZWF0
RnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAg
ICBpbWFnZS5jb3B5UmVwZWF0RnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIGltYWdl
LmNvcHlJbWFnZVNsaWNlc0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KSkpOworICAgICAgICAgICAgaW1hZ2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShzdGF0
ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWR0
aDoKLSAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJT
bGljZXNGcm9tKGdldFZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IGltYWdlKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAg
ICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSkpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
KSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRzZXQ6CiAg
ICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQoTGVuZ3RoQm94KDApKTsKQEAgLTk2MiwyNyArOTYz
LDI4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyh0eXBlID09
IEJvcmRlckltYWdlID8gTGVuZ3RoQm94KExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBS
ZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSkpIDogTGVu
Z3RoQm94KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCBpbWFnZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQ
aWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAg
ICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOworICAgICAg
ICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRlKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmll
cikgewogICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLnNldE91dHNldChz
dHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsK
KyAgICAgICAgICAgIGltYWdlLnNldE91dHNldChzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZVF1
YWQodmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlcGVhdDoKLSAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUmVw
ZWF0KHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFn
ZVJlcGVhdCh2YWx1ZSwgaW1hZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
U2xpY2U6Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGll
Y2VJbWFnZVNsaWNlKHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBzdHlsZU1hcC5tYXBOaW5l
UGllY2VJbWFnZVNsaWNlKHZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZVJl
c29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAg
ICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZVF1
YWQodmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAgICAgICAgc2V0VmFsdWUoc3Rh
dGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIg
Y3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFs
dWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC05OTEsNyArOTkzLDcg
QEAgcHVibGljOgogdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQsIFN0eWxlSW1hZ2UqIChSZW5k
ZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlckZ1bmN0aW9uKShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5bGVJbWFnZSogKCppbml0
aWFsRnVuY3Rpb24pKCk+CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2Ugewog
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UoaWQs
IHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdGF0ZS5zdHls
ZSgpLT4qc2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3RhdGUsIGlk
LCB2YWx1ZSkpOyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
ICAgICB7CiAgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURl
ZmF1bHRCYXNlPFN0eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiwgc2V0dGVyRnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVh
dGVIYW5kbGVyKCk7CkBAIC0xMDAzLDExICsxMDA1LDExIEBAIGVudW0gQ291bnRlckJlaGF2aW9y
IHtJbmNyZW1lbnQgPSAwLCBSZXNldH07CiB0ZW1wbGF0ZSA8Q291bnRlckJlaGF2aW9yIGNvdW50
ZXJCZWhhdmlvcj4KIGNsYXNzIEFwcGx5UHJvcGVydHlDb3VudGVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgdm9pZCBlbXB0eUZ1bmN0aW9uKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKSB7
IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGVtcHR5RnVuY3Rpb24o
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmKSB7IH0KKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUpCiAgICAgewotICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwotICAgICAgICBDb3Vu
dGVyRGlyZWN0aXZlTWFwJiBwYXJlbnRNYXAgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
LT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFw
JiBtYXAgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAgICAg
ICBDb3VudGVyRGlyZWN0aXZlTWFwJiBwYXJlbnRNYXAgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5h
Y2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwogCiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVj
dGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVu
dE1hcC5lbmQoKTsKQEAgLTEwMjAsMTQgKzEwMjIsMTQgQEAgcHVibGljOgogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5p
c1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ZhbHVlTGlz
dCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKIAotICAgICAgICBD
b3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hY2Nlc3ND
b3VudGVyRGlyZWN0aXZlcygpOworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBz
dGF0ZS5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwogICAgICAgICB0eXBlZGVm
IENvdW50ZXJEaXJlY3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogCiAgICAgICAgIEl0ZXJh
dG9yIGVuZCA9IG1hcC5lbmQoKTsKQEAgLTEwNjMsNDIgKzEwNjUsNDIgQEAgcHVibGljOgogCiBj
bGFzcyBBcHBseVByb3BlcnR5Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldEN1cnNvcihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvckxpc3Qoc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKS0+Y3Vyc29ycygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Q3Vyc29yKHN0YXRlLnBhcmVudFN0eWxlKCktPmN1cnNvcigpKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0Q3Vyc29yTGlzdChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jdXJzb3JzKCkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAg
IHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5p
dGlhbEN1cnNvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7
CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1
cnNvcigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFy
Q3Vyc29yTGlzdCgpOwogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAg
ICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZh
bHVlKTsKICAgICAgICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihDVVJTT1JfQVVUTyk7CisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3IoQ1VSU09SX0FVVE8pOwogICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIENTU1ZhbHVl
KiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKICAgICAgICAgICAgICAg
ICBpZiAoaXRlbS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxDU1NDdXJzb3JJbWFnZVZh
bHVlKj4oaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+dXBkYXRlSWZTVkdD
dXJzb3JJc1VzZWQoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpKSkgLy8gRWxlbWVudHMgd2l0aCBT
VkcgY3Vyc29ycyBhcmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgc3R5bGUuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2
ZXItPnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlDdXJzb3IsIGltYWdlKSwgaW1hZ2UtPmhvdFNwb3Qo
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1Vz
ZWQoc3RhdGUuZWxlbWVudCgpKSkgLy8gRWxlbWVudHMgd2l0aCBTVkcgY3Vyc29ycyBhcmUgbm90
IGFsbG93ZWQgdG8gc2hhcmUgc3R5bGUuCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
YWRkQ3Vyc29yKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3RhdGUsIENTU1Byb3BlcnR5Q3Vy
c29yLCBpbWFnZSksIGltYWdlLT5ob3RTcG90KCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4oaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNJ
ZGVudCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkgewogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSAmJiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jdXJz
b3IoKSAhPSBFQ3Vyc29yKCpwcmltaXRpdmVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSAmJiBzdGF0ZS5zdHlsZSgpLT5jdXJzb3Io
KSAhPSBFQ3Vyc29yKCpwcmltaXRpdmVWYWx1ZSkpCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTExMDcsNyArMTEwOSw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRBbGln
biB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExMTUsMTMgKzExMTcsMTMgQEAg
cHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgIT0gQ1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0
QWxpZ24oKSA9PSBUQVNUQVJUKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IExFRlQgOiBSSUdIVCk7Ci0gICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBRU5EKQotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFJJR0hUIDogTEVGVCk7CisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAg
ICAgZWxzZSBpZiAoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFTVEFSVCkK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGlnbihzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBMRUZUIDogUklHSFQpOworICAgICAgICBl
bHNlIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQUVORCkKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGlnbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBSSUdIVCA6IExFRlQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpKTsKICAg
ICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBA
IC0xMTMyLDcgKzExMzQsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RGVj
b3JhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEVUZXh0RGVjb3JhdGlv
biB0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbigpOwogICAgICAgICBmb3Ig
KENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkp
IHsKQEAgLTExNDAsNyArMTE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSk7CiAgICAgICAg
ICAgICB0IHw9ICpzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogICAgICAg
ICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHREZWNvcmF0aW9uKHQp
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvbih0KTsKICAgICB9CiAg
ICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xMTUx
LDcgKzExNTMsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTE2MiwxNSArMTE2NCwxNSBAQCBwdWJs
aWM6CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5v
cm1hbCkKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVI
ZWlnaHQoKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsK
LSAgICAgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnRleHRTaXplQWRqdXN0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0g
c3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGRvdWJsZSBt
dWx0aXBsaWVyID0gc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICAgICAg
aWYgKHN0YXRlLnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gc3RhdGUuZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgICAg
ICAgICAgICAgbXVsdGlwbGllciAqPSBmcmFtZS0+dGV4dFpvb21GYWN0b3IoKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxl
bmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RF
bGVtZW50U3R5bGUoKSwgbXVsdGlwbGllcik7CisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIG11bHRpcGxpZXIpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IHBlcmNl
bnRhZ2Ugc2hvdWxkIG5vdCBiZSByZXN0cmljdGVkIHRvIGFuIGludGVnZXIgaGVyZS4KLSAgICAg
ICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnRT
aXplKCkgKiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKKyAg
ICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0YXRlLnN0eWxlKCktPmZvbnRTaXplKCkg
KiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKICAgICAgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewogICAgICAgICAgICAgLy8g
RklYTUU6IG51bWJlciBhbmQgcGVyY2VudGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2UgdGhlIHNh
bWUgdHlwZSBvZiBMZW5ndGggKGllLiBGaXhlZCBvciBQZXJjZW50KS4KICAgICAgICAgICAgIGxp
bmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkgKiAxMDAu
MCwgUGVyY2VudCk7CkBAIC0xMTc4LDcgKzExODAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBs
aW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7CisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0
eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTI2NSwxMSArMTI2NywxMSBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsg
fQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnJlc2V0UGFnZVNp
emVUeXBlKCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnJlc2V0UGFnZVNpemVUeXBlKCk7CiAg
ICAgICAgIExlbmd0aCB3aWR0aDsKICAgICAgICAgTGVuZ3RoIGhlaWdodDsKICAgICAgICAgUGFn
ZVNpemVUeXBlIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPOwpAQCAtMTI4NSw4ICsxMjg3
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9CiAgICAgICAgICAg
ICAgICAgaWYgKCFzZWNvbmQtPmlzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGZpcnN0LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
KTsKLSAgICAgICAgICAgICAgICBoZWlnaHQgPSBzZWNvbmQtPmNvbXB1dGVMZW5ndGg8TGVuZ3Ro
PihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxl
KCkpOworICAgICAgICAgICAgICAgIHdpZHRoID0gZmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3Ro
PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworICAgICAgICAgICAg
ICAgIGhlaWdodCA9IHNlY29uZC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIC8vIDxwYWdlLXNpemU+IDxvcmllbnRhdGlvbj4KICAgICAgICAgICAgICAgICAv
LyBUaGUgdmFsdWUgb3JkZXIgaXMgZ3VhcmFudGVlZC4gU2VlIENTU1BhcnNlcjo6cGFyc2VTaXpl
UGFyYW1ldGVyLgpAQCAtMTMwNCw3ICsxMzA2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gPGxlbmd0
aD4KICAgICAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7Ci0g
ICAgICAgICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxl
bmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RF
bGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSBwcmltaXRp
dmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN3
aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgICAgICBjYXNl
IDA6CkBAIC0xMzMwLDI5ICsxMzMyLDI5IEBAIHB1YmxpYzoKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRQYWdlU2l6ZVR5cGUocGFnZVNpemVUeXBlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0UGFnZVNpemUoTGVuZ3RoU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdlU2l6ZVR5cGUpOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRQYWdlU2l6ZShMZW5ndGhTaXplKHdpZHRoLCBoZWlnaHQpKTsK
ICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1
cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVl
LCAmYXBwbHlWYWx1ZSk7IH0KIH07CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNT
dHlsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNGaWxsKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0ZpbGwoKSk7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoc3R5
bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzTWFyaygpKTsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKHN0YXRlLnBhcmVudFN0eWxlKCkt
PnRleHRFbXBoYXNpc0ZpbGwoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc01hcmsoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhzdGF0ZS5wYXJlbnRT
dHlsZSgpLT50ZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChSZW5kZXJTdHlsZTo6aW5pdGlhbFRl
eHRFbXBoYXNpc0ZpbGwoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc01hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNNYXJrKCkpOwot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJr
KFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChSZW5kZXJTdHlsZTo6aW5pdGlhbFRl
eHRFbXBoYXNpc0ZpbGwoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNp
c01hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNNYXJrKCkpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKFJlbmRlclN0eWxlOjppbml0
aWFsVGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxp
c3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CkBAIC0xMzY2LDEx
ICsxMzY4LDExIEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiB2YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAg
ICAgICAgICAgaWYgKHZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqdmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCp2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnZhbHVlKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1
c3RvbU1hcmsobnVsbEF0b20pOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVt
cGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtMTM3OSwyMCArMTM4MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSkgewotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0
RW1waGFzaXNGaWxsRmlsbGVkKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0N1c3RvbSk7Ci0gICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHByaW1p
dGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7CisgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcmtDdXN0
b20pOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFy
ayhwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlT3BlbikgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNN
YXJrQXV0byk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcmtBdXRvKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVt
cGhhc2lzRmlsbEZpbGxlZCk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNNYXJrKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqcHJpbWl0aXZlVmFs
dWUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNDE1LDE0ICsxNDE3LDE4IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCB0ZXN0KGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uKSB7IHJldHVy
biAoYW5pbWF0aW9uLT4qdGVzdEZ1bmN0aW9uKSgpOyB9CiAgICAgc3RhdGljIHZvaWQgY2xlYXIo
QW5pbWF0aW9uKiBhbmltYXRpb24pIHsgKGFuaW1hdGlvbi0+KmNsZWFyRnVuY3Rpb24pKCk7IH0K
ICAgICBzdGF0aWMgVCBpbml0aWFsKCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24pKCk7IH0K
LSAgICBzdGF0aWMgdm9pZCBtYXAoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQW5pbWF0
aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGVN
YXAoKS0+Km1hcEZ1bmN0aW9uKShhbmltYXRpb24sIHZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lk
IG1hcChTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIEFuaW1hdGlvbiogYW5pbWF0aW9uLCBD
U1NWYWx1ZSogdmFsdWUpIAorICAgIHsKKyAgICAgICAgQ1NTVG9TdHlsZU1hcCBzdHlsZU1hcChz
dGF0ZSk7CisgICAgICAgIChzdHlsZU1hcC4qbWFwRnVuY3Rpb24pKGFuaW1hdGlvbiwgdmFsdWUp
OworICAgIH0KICAgICBzdGF0aWMgQW5pbWF0aW9uTGlzdCogYWNjZXNzQW5pbWF0aW9ucyhSZW5k
ZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmFuaW1hdGlvbkdldHRlckZ1bmN0aW9u
KSgpOyB9CiAgICAgc3RhdGljIGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFuaW1hdGlvbnMoUmVuZGVy
U3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPippbW11dGFibGVBbmltYXRpb25HZXR0ZXJG
dW5jdGlvbikoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUpCiAgICAgewotICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9u
cyhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCog
cGFyZW50TGlzdCA9IGFuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSk7Cisg
ICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxl
KCkpOworICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnRMaXN0ID0gYW5pbWF0aW9u
cyhzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICAgICAgc2l6ZV90IGkgPSAwLCBwYXJlbnRTaXpl
ID0gcGFyZW50TGlzdCA/IHBhcmVudExpc3QtPnNpemUoKSA6IDA7CiAgICAgICAgIGZvciAoIDsg
aSA8IHBhcmVudFNpemUgJiYgdGVzdChwYXJlbnRMaXN0LT5hbmltYXRpb24oaSkpOyArK2kpIHsK
ICAgICAgICAgICAgIGlmIChsaXN0LT5zaXplKCkgPD0gaSkKQEAgLTE0MzYsOSArMTQ0Miw5IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGNsZWFyKGxpc3QtPmFuaW1hdGlvbihpKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0Fu
aW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgIEFuaW1hdGlvbkxpc3Qq
IGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBpZiAobGlz
dC0+aXNFbXB0eSgpKQogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRl
KCkpOwogICAgICAgICBzZXRWYWx1ZShsaXN0LT5hbmltYXRpb24oMCksIGluaXRpYWwoKSk7CkBA
IC0xNDQ4LDIyICsxNDU0LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNsZWFyKGxpc3QtPmFu
aW1hdGlvbihpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFuaW1hdGlvbkxp
c3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOworICAg
ICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdGF0ZS5zdHlsZSgp
KTsKICAgICAgICAgc2l6ZV90IGNoaWxkSW5kZXggPSAwOwogICAgICAgICBpZiAodmFsdWUtPmlz
VmFsdWVMaXN0KCkpIHsKICAgICAgICAgICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0
IGludG8gYW4gYW5pbWF0aW9uLCBjcmVhdGluZyBuZXcgYW5pbWF0aW9ucyBhcyBuZWVkZWQuICov
CiAgICAgICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNN
b3JlKCk7IGkuYWR2YW5jZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkSW5kZXggPD0g
bGlzdC0+c2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9u
OjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3QtPmFu
aW1hdGlvbihjaGlsZEluZGV4KSwgaS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtYXAoc3Rh
dGUsIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgaS52YWx1ZSgpKTsKICAgICAgICAgICAg
ICAgICArK2NoaWxkSW5kZXg7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChBbmltYXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIG1hcChzdHlsZVJlc29sdmVyLCBs
aXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIHZhbHVlKTsKKyAgICAgICAgICAgIG1hcChzdGF0
ZSwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZSk7CiAgICAgICAgICAgICBjaGls
ZEluZGV4ID0gMTsKICAgICAgICAgfQogICAgICAgICBmb3IgKCA7IGNoaWxkSW5kZXggPCBsaXN0
LT5zaXplKCk7ICsrY2hpbGRJbmRleCkgewpAQCAtMTQ3NywyMiArMTQ4MywyMiBAQCBwdWJsaWM6
CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlPdXRsaW5lU3R5bGUgewogcHVibGljOgotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkK
ICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAm
UmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0
eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6
aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQs
IHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRl
clN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVy
U3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxCb3JkZXJTdHlsZT46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJl
bmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBz
dGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZS
ZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0
T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0
eWxlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBz
dGF0ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNB
dXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJl
bmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJT
dHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8
RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAm
UmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxl
UmVzb2x2ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0
bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0
eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5
bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJv
cmRlclN0eWxlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9w
ZXJ0eURlZmF1bHQ8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1
dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBP
dXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+Ojph
cHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgQXBw
bHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHls
ZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0
eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5VmFsdWUocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVs
dDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGlu
ZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1
dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5VmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8
RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAm
UmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVl
KTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7
IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFs
VmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtMTUwMCw3ICsxNTA2LDcgQEAgcHVibGljOgogCiBj
bGFzcyBBcHBseVByb3BlcnR5UmVzaXplIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTUxMiwxMyArMTUxOCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgMDoKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86Ci0gICAgICAgICAgICBpZiAo
U2V0dGluZ3MqIHNldHRpbmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2V0dGluZ3Mo
KSkKKyAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBzdGF0ZS5kb2N1bWVudCgp
LT5zZXR0aW5ncygpKQogICAgICAgICAgICAgICAgIHIgPSBzZXR0aW5ncy0+dGV4dEFyZWFzQXJl
UmVzaXphYmxlKCkgPyBSRVNJWkVfQk9USCA6IFJFU0laRV9OT05FOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByID0gKnByaW1pdGl2ZVZhbHVlOwog
ICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFJlc2l6ZShyKTsK
KyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UmVzaXplKHIpOwogICAgIH0KIAogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNTMwLDcgKzE1MzYsNyBAQCBw
dWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWduIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMTUzOCw5ICsxNTQ0LDkgQEAgcHVibGljOgogICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkpCi0gICAgICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGlj
YWxBbGlnbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxl
KCktPnNldFZlcnRpY2FsQWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsKIAotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5j
b252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9u
IHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCks
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0
VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2Fs
Y3VsYXRlZENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpCkBAIC0xNTUyLDMyICsxNTU4LDMyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9w
ZXJ0eUFzcGVjdFJhdGlvIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGlmICghc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKS0+aGFzQXNwZWN0UmF0aW8oKSkKKyAgICAgICAgaWYgKCFzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5oYXNBc3BlY3RSYXRpbygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8odHJ1ZSk7CisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YXNwZWN0
UmF0aW9EZW5vbWluYXRvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0
aW9OdW1lcmF0b3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAg
ICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyhS
ZW5kZXJTdHlsZTo6aW5pdGlhbEhhc0FzcGVjdFJhdGlvKCkpOwotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRlclN0eWxlOjppbml0
aWFsQXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RS
YXRpb051bWVyYXRvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0
aW8oUmVuZGVyU3R5bGU6OmluaXRpYWxIYXNBc3BlY3RSYXRpbygpKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFz
cGVjdFJhdGlvRGVub21pbmF0b3IoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVj
dFJhdGlvTnVtZXJhdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3Io
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzQXNwZWN0
UmF0aW9WYWx1ZSgpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRI
YXNBc3BlY3RSYXRpbyhmYWxzZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNB
c3BlY3RSYXRpbyhmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgQ1NTQXNwZWN0UmF0aW9WYWx1ZSogYXNwZWN0UmF0aW9WYWx1ZSA9IHN0YXRpY19jYXN0PENT
U0FzcGVjdFJhdGlvVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUtPmRlbm9taW5h
dG9yVmFsdWUoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJh
dGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUtPm51bWVyYXRvclZhbHVlKCkpOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5kZW5v
bWluYXRvclZhbHVlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051
bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5udW1lcmF0b3JWYWx1ZSgpKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTU4OCw0OCArMTU5
NCw0OCBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlab29tIHsKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIC8vIFJlc2V0IHRoZSB6b29tIGluIGVmZmVj
dC4gVGhpcyBhbGxvd3MgdGhlIHNldFpvb20gbWV0aG9kIHRvIGFjY3VyYXRlbHkgY29tcHV0ZSBh
IG5ldyB6b29tIGluIGVmZmVjdC4KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0aXZl
Wm9vbShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpID8gc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwor
ICAgICAgICBzdGF0ZS5zZXRFZmZlY3RpdmVab29tKHN0YXRlLnBhcmVudFN0eWxlKCkgPyBzdGF0
ZS5wYXJlbnRTdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpv
b20oKSk7CiAgICAgfQogCiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNv
bHZlcik7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKS0+em9vbSgpKTsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsK
KyAgICAgICAgc3RhdGUuc2V0Wm9vbShzdGF0ZS5wYXJlbnRTdHlsZSgpLT56b29tKCkpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsK
LSAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAg
cmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJT
dHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
OwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHJlc2V0RWZm
ZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNl
dFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICAgICAgcmVzZXRFZmZl
Y3RpdmVab29tKHN0YXRlKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6
OmluaXRpYWxab29tKCkpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlUmVzZXQpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNl
dEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAg
ICAgICAgICBzdGF0ZS5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgp
KTsKKyAgICAgICAgICAgIHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkp
OwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlRG9jdW1lbnQpIHsKLSAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHlsZVJlc29sdmVy
LT5yb290RWxlbWVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkt
Pnpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOwotICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKLSAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnNldFpvb20oZG9jWm9vbSk7CisgICAgICAgICAgICBmbG9hdCBkb2Nab29tID0gc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpID8gc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkg
OiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEVmZmVj
dGl2ZVpvb20oZG9jWm9vbSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRab29tKGRvY1pvb20pOwog
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgewotICAg
ICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAg
cmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKICAgICAgICAgICAgIGlmIChmbG9hdCBwZXJjZW50
ID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRab29tKHBlcmNlbnQgLyAxMDAuMGYpOworICAgICAgICAgICAgICAgIHN0
YXRlLnNldFpvb20ocGVyY2VudCAvIDEwMC4wZik7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShz
dHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CiAg
ICAgICAgICAgICBpZiAoZmxvYXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFs
dWUoKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKG51bWJlcik7Cisg
ICAgICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShudW1iZXIpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0xNjQxLDQyICsxNjQ3LDQyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eURp
c3BsYXkgewogcHJpdmF0ZToKLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERpc3BsYXlW
YWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBFRGlzcGxheSBkaXNwbGF5UHJvcGVy
dHlWYWx1ZSkKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZhbHVlKQog
ICAgIHsKICNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+ZWxlbWVu
dCgpICYmIHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAgICAgIGlmIChz
dGF0ZS5lbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0
ZS5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgIHJldHVybiAo
ZGlzcGxheVByb3BlcnR5VmFsdWUgPT0gSU5MSU5FIHx8IGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09
IEJMT0NLIHx8IGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IE5PTkUpOwogI2Vsc2UKLSAgICAgICAg
VU5VU0VEX1BBUkFNKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgICAgICBVTlVTRURfUEFSQU0oZGlzcGxheVByb3BlcnR5VmFsdWUpOwogI2VuZGlmCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEVEaXNwbGF5IGRpc3BsYXkg
PSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5kaXNwbGF5KCk7Ci0gICAgICAgIGlmICgh
aXNWYWxpZERpc3BsYXlWYWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKKyAgICAgICAgRURp
c3BsYXkgZGlzcGxheSA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmRpc3BsYXkoKTsKKyAgICAgICAg
aWYgKCFpc1ZhbGlkRGlzcGxheVZhbHVlKHN0YXRlLCBkaXNwbGF5KSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldERpc3BsYXkoUmVuZGVyU3R5bGU6OmluaXRp
YWxEaXNwbGF5KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KFJlbmRlclN0
eWxlOjppbml0aWFsRGlzcGxheSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CiAKLSAgICAgICAgaWYgKCFpc1ZhbGlkRGlzcGxheVZhbHVlKHN0eWxlUmVzb2x2
ZXIsIGRpc3BsYXkpKQorICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3RhdGUsIGRp
c3BsYXkpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERp
c3BsYXkoZGlzcGxheSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKQEAgLTE2ODksMjEgKzE2OTUsMjEgQEAgdGVtcGxhdGUgPENsaXBQYXRoT3Bl
cmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVu
ZGUKIGNsYXNzIEFwcGx5UHJvcGVydHlDbGlwUGF0aCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0
aW9uPiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUu
c3R5bGUoKSwgMCk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFw
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
U2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJl
c29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSkpOworICAgICAgICAgICAg
ICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0
ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVl
KCkpKSk7CiAgICAgICAgICAgICB9CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19VUkkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgY3NzVVJMVmFsdWUgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBLVVJMIHVybCA9IHN0
eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGNzc1VSTFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBLVVJMIHVybCA9IHN0YXRlLmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGNzc1VS
TFZhbHVlKTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgZG9lc24ndCB3b3JrIHdpdGgg
Zm9yd2FyZCBvciBleHRlcm5hbCBTVkcgcmVmZXJlbmNlcyAoc2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDQwNSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBSZWZlcmVuY2VDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRl
KGNzc1VSTFZhbHVlLCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCkpKTsKKyAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBSZWZlcmVuY2VDbGlwUGF0aE9wZXJhdGlvbjo6Y3Jl
YXRlKGNzc1VSTFZhbHVlLCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCkpKTsKICAgICAgICAgICAg
IH0KICNlbmRpZgogICAgICAgICB9CkBAIC0xNzIwLDE4ICsxNzI2LDE4IEBAIHRlbXBsYXRlIDxF
eGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25z
dCwgdm9pZCAoUmVuCiBjbGFzcyBBcHBseVByb3BlcnR5RXhjbHVzaW9uU2hhcGUgewogcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0
cjxFeGNsdXNpb25TaGFwZVZhbHVlPiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbiko
dmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKSB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CisgICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgMCk7CiAgICAgICAgICAgICAvLyBGSVhNRSBCdWcg
MTAyNTcxOiBMYXlvdXQgZm9yIHRoZSB2YWx1ZSAnb3V0c2lkZS1zaGFwZScgaXMgbm90IHlldCBp
bXBsZW1lbnRlZAogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVPdXRzaWRlU2hhcGUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZh
bHVlKCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIEV4Y2x1c2lv
blNoYXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgpKTsKICAgICAgICAgICAgIGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8RXhj
bHVzaW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFw
ZVZhbHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+
Z2V0U2hhcGVWYWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8RXhj
bHVzaW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFw
ZVZhbHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBl
VmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHNoYXBl
LnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzQ2LDIx
ICsxNzUyLDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCiBj
bGFzcyBBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAg
ICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291
cmNlLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9u
U291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNv
bHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+
OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAg
QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHls
ZTo6aW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxl
OjpzZXRJbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxm
bG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6
OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVz
b2x1dGlvbj46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwor
ICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAm
UmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNl
LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9u
U291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBs
eUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlE
ZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1
dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNv
bHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1h
Z2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsK
KyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVuZGVyU3R5bGU6Omlt
YWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBm
bG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6YXBwbHlJbmhlcml0
VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAg
ICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5k
ZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZS
ZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3Vy
Y2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46OmFwcGx5SW5p
dGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3Bl
cnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbWFnZVJl
c29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNldEltYWdl
UmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVu
ZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VS
ZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6
YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFw
cGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHls
ZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJT
dHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46OmFwcGx5SW5pdGlhbFZh
bHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNl
PEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU25hcCwg
SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25TbmFw
LCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRp
b25TbmFwPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBB
cHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0
aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUluaXRpYWxWYWx1ZShwcm9w
ZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
OjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFs
dWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNzgwLDkgKzE3ODYs
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmVzb2x1dGlv
biA9IHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0RQUFgpOwogICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldElt
YWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2UpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOwotICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2UpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CiAgICAgfQogCiAgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxk
ZXIuaAppbmRleCA0ZmZlODUyMzRjMTNkMGZiYjE0NDZlMDY4ODFjOWY3ZmVmYzcwNjdiLi5iMmNj
NGVlMzVmZWVkYWVhZDc1ZTdjYTQwNTU4ZTQ0MGRmNzE4MDg4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
QnVpbGRlci5oCkBAIC0yNiw2ICsyNiw3IEBACiAjZGVmaW5lIFN0eWxlQnVpbGRlcl9oCiAKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
IApAQCAtMzMsMTggKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTVmFs
dWU7CiBjbGFzcyBTdHlsZUJ1aWxkZXI7Ci1jbGFzcyBTdHlsZVJlc29sdmVyOwogCiBjbGFzcyBQ
cm9wZXJ0eUhhbmRsZXIgewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkluaGVyaXRGdW5j
dGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopOwotICAgIHR5cGVkZWYgdm9pZCAo
KkluaXRpYWxGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopOwotICAgIHR5
cGVkZWYgdm9pZCAoKkFwcGx5RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
LCBDU1NWYWx1ZSopOworICAgIHR5cGVkZWYgdm9pZCAoKkluaGVyaXRGdW5jdGlvbikoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpJbml0
aWFsRnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJik7CisgICAg
dHlwZWRlZiB2b2lkICgqQXBwbHlGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
cjo6U3RhdGUmLCBDU1NWYWx1ZSopOwogICAgIFByb3BlcnR5SGFuZGxlcigpIDogbV9pbmhlcml0
KDApLCBtX2luaXRpYWwoMCksIG1fYXBwbHkoMCkgeyB9CiAgICAgUHJvcGVydHlIYW5kbGVyKElu
aGVyaXRGdW5jdGlvbiBpbmhlcml0LCBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbCwgQXBwbHlGdW5j
dGlvbiBhcHBseSkgOiBtX2luaGVyaXQoaW5oZXJpdCksIG1faW5pdGlhbChpbml0aWFsKSwgbV9h
cHBseShhcHBseSkgeyB9Ci0gICAgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIGNvbnN0IHsgQVNTRVJU
KG1faW5oZXJpdCk7ICgqbV9pbmhlcml0KShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsgfQot
ICAgIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSBjb25zdCB7IEFTU0VSVChtX2luaXRpYWwpOyAoKm1f
aW5pdGlhbCkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7IH0KLSAgICB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBwbHkpOyAoKm1fYXBwbHkpKHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsgfQorICAgIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUpIGNvbnN0IHsgQVNTRVJUKG1faW5oZXJpdCk7ICgqbV9pbmhlcml0KShwcm9wZXJ0eUlELCBz
dGF0ZSk7IH0KKyAgICB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKSBjb25zdCB7IEFTU0VSVChtX2luaXRp
YWwpOyAoKm1faW5pdGlhbCkocHJvcGVydHlJRCwgc3RhdGUpOyB9CisgICAgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRl
LCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBwbHkpOyAoKm1fYXBwbHkpKHBy
b3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7IH0KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiBtX2luaGVyaXQgJiYgbV9pbml0aWFsICYmIG1fYXBwbHk7IH0KICAgICBJbmhlcml0RnVu
Y3Rpb24gaW5oZXJpdEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbmhlcml0OyB9CiAgICAg
SW5pdGlhbEZ1bmN0aW9uIGluaXRpYWxGdW5jdGlvbigpIHsgcmV0dXJuIG1faW5pdGlhbDsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDM1NGIyYzkwMjFkMTg0NWYzMTlm
ZTljMDdiOWYxNTkwYmI2NjhmYTcuLmYyMjJiYjFlMzczNzM2OTRlOGMzOTFiYjA5YzY2ZTdkZjFj
NTQyZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTQ3LDYgKzQ3LDcg
QEAKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NTdXBwb3J0c1J1bGUu
aCIKICNpbmNsdWRlICJDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVG9T
dHlsZU1hcC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2lmIEVOQUJMRShDU1NfVkFS
SUFCTEVTKQogI2luY2x1ZGUgIkNTU1ZhcmlhYmxlVmFsdWUuaCIKQEAgLTE5NCwxNCArMTk1LDE0
IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQo
cHJvcCwgUHJvcCkgXAogaWYgKGlzSW5oZXJpdCkgeyBcCi0gICAgbV9zdGF0ZS5zdHlsZSgpLT5z
ZXQjI1Byb3AobV9zdGF0ZS5wYXJlbnRTdHlsZSgpLT5wcm9wKCkpOyBcCisgICAgc3RhdGUuc3R5
bGUoKS0+c2V0IyNQcm9wKHN0YXRlLnBhcmVudFN0eWxlKCktPnByb3AoKSk7ICBcCiAgICAgcmV0
dXJuOyBcCiB9CiAKICNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJv
cCkgXAogSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5pdGlhbCkgeyBcCi0g
ICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1Byb3Ao
KSk7IFwKKyAgICBzdGF0ZS5zdHlsZSgpLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwj
I1Byb3AoKSk7IFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtMjIzLDcgKzIyNCw2IEBAIHN0YXRp
YyBTdHlsZVByb3BlcnR5U2V0KiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKICAgICByZXR1cm4g
cmlnaHRUb0xlZnREZWNsLmdldCgpOwogfQogCi0KIGlubGluZSBTdGF0aWNDU1NSdWxlTGlzdCog
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVuc3VyZVJ1bGVMaXN0KCkKIHsKICAgICBpZiAoIW1fcnVs
ZUxpc3QpCkBAIC0yNjksNyArMjY5LDYgQEAgU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQogICAgICwg
bV92aWV3cG9ydFN0eWxlUmVzb2x2ZXIoVmlld3BvcnRTdHlsZVJlc29sdmVyOjpjcmVhdGUoZG9j
dW1lbnQpKQogI2VuZGlmCiAgICAgLCBtX3N0eWxlQnVpbGRlcihTdHlsZUJ1aWxkZXI6OnNoYXJl
ZFN0eWxlQnVpbGRlcigpKQotICAgICwgbV9zdHlsZU1hcCh0aGlzKQogewogICAgIEVsZW1lbnQq
IHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAKQEAgLTQ1MywyMyArNDUyLDIy
IEBAIGlubGluZSBib29sIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygp
CiAKIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hS
ZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVx
dWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKICAgICBBU1NFUlQo
bWF0Y2hSZXF1ZXN0LnJ1bGVTZXQpOwotICAgIEFTU0VSVChtX3N0YXRlLmVsZW1lbnQoKSk7Cisg
ICAgQVNTRVJUKHN0YXRlLmVsZW1lbnQoKSk7CiAKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCk7CiAgICAgY29uc3QgU3R5
bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKTsKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsK
ICAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQoc3R5bGVkRWxl
bWVudCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3Qu
cnVsZVNldC0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBz
ZXVkb0lkLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICAgICB9CiAKICNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCiAgICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQot
ICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQt
PmN1ZVBzZXVkb1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+Y3Vl
UHNldWRvUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogI2VuZGlmCiAgICAgLy8g
Q2hlY2sgd2hldGhlciBvdGhlciB0eXBlcyBvZiBydWxlcyBhcmUgYXBwbGljYWJsZSBpbiB0aGUg
Y3VycmVudCB0cmVlIHNjb3BlLiBDcml0ZXJpYSBmb3IgdGhpczoKICAgICAvLyBhKSBpdCdzIGEg
VUEgcnVsZQpAQCAtNDg1LDQ0ICs0ODMsNDMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVIKICAg
ICAvLyBXZSBuZWVkIHRvIGNvbGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5k
IGV2ZXJ5dGhpbmcgZWxzZSBpbnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUg
YnVmZmVyLgogICAgIGlmIChlbGVtZW50LT5oYXNJRCgpKQotICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmlkUnVsZXMoZWxlbWVudC0+aWRG
b3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Cisg
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1
bGVTZXQtPmlkUnVsZXMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBt
YXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgaWYgKHN0eWxlZEVsZW1lbnQgJiYgc3R5bGVk
RWxlbWVudC0+aGFzQ2xhc3MoKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0
eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y2xhc3NSdWxlcyhz
dHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKClbaV0uaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxl
UmFuZ2UpOworICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBt
YXRjaFJlcXVlc3QucnVsZVNldC0+Y2xhc3NSdWxlcyhzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVz
KClbaV0uaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIH0KIAogICAgIGlm
IChlbGVtZW50LT5pc0xpbmsoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVl
c3QsIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0
ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmxpbmtQc2V1ZG9DbGFzc1J1bGVzKCksIG1hdGNoUmVx
dWVzdCwgcnVsZVJhbmdlKTsKICAgICBpZiAoU2VsZWN0b3JDaGVja2VyOjptYXRjaGVzRm9jdXNQ
c2V1ZG9DbGFzcyhlbGVtZW50KSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5mb2N1c1BzZXVkb0NsYXNzUnVsZXMoKSwgbWF0Y2hSZXF1
ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJl
cXVlc3QucnVsZVNldC0+dGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0
Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCht
YXRjaFJlcXVlc3QucnVsZVNldC0+dW5pdmVyc2FsUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxl
UmFuZ2UpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNo
UmVxdWVzdC5ydWxlU2V0LT5mb2N1c1BzZXVkb0NsYXNzUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBy
dWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hS
ZXF1ZXN0LnJ1bGVTZXQtPnRhZ1J1bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIG1h
dGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qo
c3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0LT51bml2ZXJzYWxSdWxlcygpLCBtYXRjaFJlcXVl
c3QsIHJ1bGVSYW5nZSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JSZWdpb24oY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5n
ZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
clJlZ2lvbihTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBS
dWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKLSAgICBpZiAoIW1fc3RhdGUucmVnaW9uRm9yU3R5bGlu
ZygpKQorICAgIGlmICghc3RhdGUucmVnaW9uRm9yU3R5bGluZygpKQogICAgICAgICByZXR1cm47
CiAKICAgICB1bnNpZ25lZCBzaXplID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2Vs
ZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yID0g
bWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSku
c2VsZWN0b3I7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9y
LCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCktPm5vZGUo
KSkpKSB7CisgICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4oc3RhdGUucmVnaW9uRm9yU3R5bGluZygpLT5ub2RlKCkpKSkg
ewogICAgICAgICAgICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVsZVNl
dC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOwogICAg
ICAgICAgICAgQVNTRVJUKHJlZ2lvblJ1bGVzKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKE1hdGNoUmVxdWVzdChyZWdpb25SdWxlcywgbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0
eVJ1bGVzLCBtYXRjaFJlcXVlc3Quc2NvcGUpLCBydWxlUmFuZ2UpOworICAgICAgICAgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIE1hdGNoUmVxdWVzdChyZWdpb25SdWxlcywgbWF0Y2hS
ZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzLCBtYXRjaFJlcXVlc3Quc2NvcGUpLCBydWxlUmFuZ2Up
OwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFu
c2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVy
Ojpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYg
cmVzdWx0KQogewotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgVmVjdG9yPGNvbnN0
IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMgPSBzdGF0ZS5tYXRjaGVkUnVsZXMoKTsKICAg
ICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc29y
dE1hdGNoZWRSdWxlcygpOworICAgIHNvcnRNYXRjaGVkUnVsZXMoc3RhdGUpOwogCiAgICAgaWYg
KHN0YXRlLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQpA
QCAtNTM4LDE5ICs1MzUsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKICAgICB9CiB9CiAKLXZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhv
clJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcykKIHsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RP
TSkKICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
TWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVu
dCBzdGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KLSAgICBpZiAobV9z
Y29wZVJlc29sdmVyLT5oYXNTY29wZWRTdHlsZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3Vy
ZVN0YWNrQ29uc2lzdGVuY3kobV9zdGF0ZS5lbGVtZW50KCkpKSB7Ci0gICAgICAgIGJvb2wgYXBw
bHlBdXRob3JTdHlsZXMgPSBtX3N0YXRlLmVsZW1lbnQoKS0+dHJlZVNjb3BlKCktPmFwcGx5QXV0
aG9yU3R5bGVzKCk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkg
JiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5KHN0YXRlLmVsZW1lbnQo
KSkpIHsKKyAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9IHN0YXRlLmVsZW1lbnQoKS0+
dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7CiAgICAgICAgIGJvb2wgZG9jdW1lbnRT
Y29wZSA9IHRydWU7CiAgICAgICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZl
ci0+c3RhY2tTaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNp
emU7ICsraSkgewotICAgICAgICAgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwor
ICAgICAgICAgICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICAgICAgICAgIHJl
c3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6
ZSgpIC0gMTsKIAogICAgICAgICAgICAgY29uc3QgU3R5bGVTY29wZVJlc29sdmVyOjpTdGFja0Zy
YW1lJiBmcmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFtZUF0KGkpOwpAQCAtNTY1LDEx
MCArNTYyLDExMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMo
TWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogCiAgICAgICAgICAgICBNYXRj
aFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KGZyYW1lLm1fcnVsZVNldCwgaW5jbHVkZUVtcHR5UnVsZXMs
IGZyYW1lLm1fc2NvcGUpOwogICAgICAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3Vs
dC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlcyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0ZvclJlZ2lvbihtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgICAgICAgICBz
b3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICAgICAgICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihzdGF0ZSwgbWF0Y2hSZXF1ZXN0LCBydWxl
UmFuZ2UpOworICAgICAgICAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCBy
ZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbWF0Y2hIb3N0UnVsZXMocmVzdWx0LCBp
bmNsdWRlRW1wdHlSdWxlcyk7CisgICAgbWF0Y2hIb3N0UnVsZXMoc3RhdGUsIHJlc3VsdCwgaW5j
bHVkZUVtcHR5UnVsZXMpOwogI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTShyZXN1bHQpOwogICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7
CiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2Fu
ZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHls
ZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKFN0YXRlJiBzdGF0ZSkKIHsKICNpZiBF
TkFCTEUoU0hBRE9XX0RPTSkKLSAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVS
ZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX3N0YXRlLmVs
ZW1lbnQoKSk7CisgICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXIt
PnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoc3RhdGUuZWxlbWVudCgpKTsK
ICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAjZW5k
aWYKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aEhvc3RSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVk
ZUVtcHR5UnVsZXMpCiB7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgQVNTRVJUKG1fc2Nv
cGVSZXNvbHZlcik7CiAKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CisgICAg
c3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRo
b3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICBWZWN0
b3I8UnVsZVNldCo+IG1hdGNoZWRSdWxlczsKLSAgICBtX3Njb3BlUmVzb2x2ZXItPm1hdGNoSG9z
dFJ1bGVzKG1fc3RhdGUuZWxlbWVudCgpLCBtYXRjaGVkUnVsZXMpOworICAgIG1fc2NvcGVSZXNv
bHZlci0+bWF0Y2hIb3N0UnVsZXMoc3RhdGUuZWxlbWVudCgpLCBtYXRjaGVkUnVsZXMpOwogICAg
IGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7CiAgICAgICAg
IFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwot
ICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QobWF0Y2hlZFJ1bGVzLmF0
KGktMSksIGluY2x1ZGVFbXB0eVJ1bGVzLCBtX3N0YXRlLmVsZW1lbnQoKSksIHJ1bGVSYW5nZSk7
CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHN0YXRlLCBNYXRjaFJlcXVlc3QobWF0Y2hl
ZFJ1bGVzLmF0KGktMSksIGluY2x1ZGVFbXB0eVJ1bGVzLCBzdGF0ZS5lbGVtZW50KCkpLCBydWxl
UmFuZ2UpOwogICAgIH0KLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsK
KyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiAjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CiAgICAg
VU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVzKTsKICNlbmRpZgogfQogCi12b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhTdGF0
ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7
Ci0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOworICAgIHN0YXRlLm1hdGNoZWRS
dWxlcygpLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCi0gICAgaWYgKCFtX3N0YXRlLmVsZW1l
bnQoKSkKKyAgICBpZiAoIXN0YXRlLmVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gTWF0Y2ggZ2xvYmFsIGF1dGhvciBydWxlcy4KICAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1
ZXN0KG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKSwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIFJ1
bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwotICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihzdGF0ZSwgbWF0Y2hSZXF1ZXN0LCBydWxl
UmFuZ2UpOwogI2lmIEVOQUJMRShTSEFET1dfRE9NKQogICAgIFZlY3RvcjxNYXRjaFJlcXVlc3Q+
IG1hdGNoUmVxdWVzdHM7CiAgICAgbV9ydWxlU2V0cy5zaGFkb3dEaXN0cmlidXRlZFJ1bGVzKCku
Y29sbGVjdE1hdGNoUmVxdWVzdHMoaW5jbHVkZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdHMpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF0Y2hSZXF1ZXN0cy5zaXplKCk7ICsraSkKLSAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0c1tpXSwgcnVsZVJhbmdlKTsK
KyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIG1hdGNoUmVxdWVzdHNbaV0sIHJ1
bGVSYW5nZSk7CiAjZW5kaWYKIAotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1
bHQpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIAot
ICAgIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7Cisg
ICAgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhzdGF0ZSwgcmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxl
cyk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQm
IHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0
Y2hVc2VyUnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQogewogICAgIGlmICghbV9ydWxlU2V0cy51c2VyU3R5bGUoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKKyAg
ICBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0
VXNlclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKICAgICBNYXRj
aFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fcnVsZVNldHMudXNlclN0eWxlKCksIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy51c2VyUnVs
ZVJhbmdlKCk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFu
Z2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVs
ZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgbWF0Y2hSZXF1ZXN0LCBy
dWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHN0YXRlLCBtYXRj
aFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAKLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMo
cmVzdWx0KTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1
bHQsIFJ1bGVTZXQqIHJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoU3Rh
dGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKIHsKLSAgICBt
X3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CisgICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCku
Y2xlYXIoKTsKICAgICAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgPSByZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVz
dWx0LnJhbmdlcy5VQVJ1bGVSYW5nZSgpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNo
UmVxdWVzdChydWxlcyksIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoc3Rh
dGUsIE1hdGNoUmVxdWVzdChydWxlcyksIHJ1bGVSYW5nZSk7CiAKLSAgICBzb3J0QW5kVHJhbnNm
ZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMo
c3RhdGUsIHJlc3VsdCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjb25zdCBNYXRjaFJl
cXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChTdGF0ZSYgc3RhdGUsIGNvbnN0IFZl
Y3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwg
UnVsZVJhbmdlJiBydWxlUmFuZ2UpCiB7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICAvLyBJbiBzb21lIGNhc2VzIHdl
IG1heSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBmb3IgcmFuZG9tIGVsZW1lbnRzIGluIHRoZSBt
aWRkbGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNvbHZlLgogICAgIC8vIEFuY2VzdG9yIGlkZW50
aWZpZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRhdGUgaW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4n
dCB1c2UgdGhlIGZhc3QgcGF0aC4KICAgICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX3NlbGVj
dG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHN0YXRlLnBhcmVudE5vZGUoKSkgJiYg
bWF0Y2hSZXF1ZXN0LmJlaGF2aW9yQXRCb3VuZGFyeSA9PSBTZWxlY3RvckNoZWNrZXI6OkRvZXNO
b3RDcm9zc0JvdW5kYXJ5OwpAQCAtNjgyLDcgKzY4MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVz
LCBjCiAgICAgICAgIFN0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUoKTsKICAgICAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbE1hdGNoUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlzKTsKICAgICAgICAg
UHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgICAgICBpZiAocnVsZU1hdGNo
ZXMocnVsZURhdGEsIG1hdGNoUmVxdWVzdC5zY29wZSwgZHluYW1pY1BzZXVkbywgbWF0Y2hSZXF1
ZXN0LmJlaGF2aW9yQXRCb3VuZGFyeSkpIHsKKyAgICAgICAgaWYgKHJ1bGVNYXRjaGVzKHN0YXRl
LCBydWxlRGF0YSwgbWF0Y2hSZXF1ZXN0LnNjb3BlLCBkeW5hbWljUHNldWRvLCBtYXRjaFJlcXVl
c3QuYmVoYXZpb3JBdEJvdW5kYXJ5KSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFz
IG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcg
bW9kZS4KICAgICAgICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMgPSBy
dWxlLT5wcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwgKHByb3Bl
cnRpZXMtPmlzRW1wdHkoKSAmJiAhbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzKSkgewpA
QCAtNzEwLDcgKzcwOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjCiAgICAgICAgICAgICAg
ICAgICAgIHJ1bGVSYW5nZS5maXJzdFJ1bGVJbmRleCA9IHJ1bGVSYW5nZS5sYXN0UnVsZUluZGV4
OwogCiAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgcnVsZSB0byBvdXIgbGlzdCBvZiBtYXRj
aGVkIHJ1bGVzLgotICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkTWF0Y2hlZFJ1bGUoJnJ1bGVE
YXRhKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEpOwog
ICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNv
b2tpZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBA
IC03MjYsMzEgKzcyNSwzMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVJ1bGVzKGNvbnN0
IFJ1bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIyKQogICAgIHJldHVybiAoc3BlY2lmaWNp
dHkxID09IHNwZWNpZmljaXR5MikgPyByMS0+cG9zaXRpb24oKSA8IHIyLT5wb3NpdGlvbigpIDog
c3BlY2lmaWNpdHkxIDwgc3BlY2lmaWNpdHkyOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNv
cnRNYXRjaGVkUnVsZXMoKQordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKFN0
YXRlJiBzdGF0ZSkKIHsKLSAgICBzdGQ6OnNvcnQobV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5iZWdp
bigpLCBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmVuZCgpLCBjb21wYXJlUnVsZXMpOworICAgIHN0
ZDo6c29ydChzdGF0ZS5tYXRjaGVkUnVsZXMoKS5iZWdpbigpLCBzdGF0ZS5tYXRjaGVkUnVsZXMo
KS5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFs
bFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKQor
dm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCiB7Ci0gICAgbWF0Y2hVQVJ1
bGVzKHJlc3VsdCk7CisgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCByZXN1bHQpOwogCiAgICAgLy8g
Tm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzKQotICAgICAgICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQsIGZhbHNlKTsKKyAgICAg
ICAgbWF0Y2hVc2VyUnVsZXMoc3RhdGUsIHJlc3VsdCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNo
ZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2VudGF0aW9uYWwgYXR0
cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgotICAgIGlmIChtX3N0YXRlLnN0eWxlZEVsZW1lbnQo
KSkgewotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5z
dHlsZWRFbGVtZW50KCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworICAgIGlmIChz
dGF0ZS5zdHlsZWRFbGVtZW50KCkpIHsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGll
cyhyZXN1bHQsIHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUoKSk7CiAKICAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9uYWwgbWFwcGVkIGRlY2xh
cmF0aW9ucy4KICAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxscyBzaGFyZSBhbiBhZGRp
dGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCiAgICAgICAgIC8vIGFmdGVy
IGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUgZGVwZW5kcyBvbiB0aGUg
dmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0ZXMuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRkaXRpb25hbFByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0
aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGUoKSk7CiAKLSAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVudCgp
LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+
aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBib29sIGlzQXV0bzsKLSAgICAgICAgICAg
IFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRvSFRNTEVsZW1lbnQobV9zdGF0ZS5zdHls
ZWRFbGVtZW50KCkpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8p
OworICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVu
dChzdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJp
YnV0ZShpc0F1dG8pOwogICAgICAgICAgICAgaWYgKGlzQXV0bykKICAgICAgICAgICAgICAgICBh
ZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRv
UmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKICAgICAgICAg
fQpAQCAtNzU4LDIxICs3NTcsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVz
KE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWUKICAgICAKICAg
ICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgogICAgIGlmIChtX21h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhyZXN1bHQs
IGZhbHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0ZSwgcmVzdWx0LCBmYWxzZSk7
CiAKICAgICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCi0gICAgaWYg
KG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpICYm
IG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIHN0YXRlLnN0eWxlZEVsZW1lbnQoKSAmJiBzdGF0ZS5z
dHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCkpIHsKICAgICAgICAgLy8gSW5saW5lIHN0eWxl
IGlzIGltbXV0YWJsZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCiAgICAg
ICAgIC8vIEZJWE1FOiBNZWRpYSBjb250cm9sIHNoYWRvdyB0cmVlcyBzZWVtIHRvIGhhdmUgcHJv
YmxlbXMgd2l0aCBjYWNoaW5nLgotICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUg
PSAhbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYm
ICFtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNJblNoYWRvd1RyZWUoKTsKKyAgICAgICAgYm9v
bCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIXN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5l
U3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIXN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNJblNoYWRv
d1RyZWUoKTsKICAgICAgICAgLy8gRklYTUU6IENvbnN0aWZ5LgotICAgICAgICBhZGRFbGVtZW50
U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0
eWxlKCksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLCBp
c0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKICAgICB9CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8v
IE5vdyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlkZSBzdHlsZS4KLSAgICBpZiAoaW5jbHVk
ZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3RhdGUu
c3R5bGVkRWxlbWVudCgpICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc1NWR0VsZW1lbnQo
KSkKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmFuaW1hdGVkU01JTFN0eWxl
UHJvcGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CisgICAgaWYgKGluY2x1ZGVT
TUlMUHJvcGVydGllcyAmJiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBzdGF0ZS5zdHls
ZWRFbGVtZW50KCkgJiYgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkKKyAg
ICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihzdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRp
ZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
aW5jbHVkZVNNSUxQcm9wZXJ0aWVzKTsKICNlbmRpZgpAQCAtNzk0LDE0ICs3OTMsMTIgQEAgaW5s
aW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6U3RhdGU6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCiAg
ICAgbV9lbGVtZW50TGlua1N0YXRlID0gZSA/IGUtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3Rh
dGUoKS0+ZGV0ZXJtaW5lTGlua1N0YXRlKGUpIDogTm90SW5zaWRlTGluazsKIH0KIAotaW5saW5l
IHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKK2lubGluZSB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KFN0YXRlJiBzdGF0ZSwgRWxlbWVudCogZSkKIHsK
LSAgICBpZiAobV9zdGF0ZS5lbGVtZW50KCkgIT0gZSkgewotICAgICAgICBtX3N0YXRlLmluaXRF
bGVtZW50KGUpOwotICAgICAgICBpZiAoZSAmJiBlID09IGUtPmRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRP
bkRvY3VtZW50RWxlbWVudChmYWxzZSk7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRX
cml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKLSAgICAgICAgfQorICAgIHN0
YXRlLmluaXRFbGVtZW50KGUpOworICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9j
dW1lbnRFbGVtZW50KCkpIHsKKyAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0
T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOworICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0
aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKICAgICB9CiB9CiAKQEAgLTg4OSwy
NiArODg2LDIyIEBAIE5vZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVu
dCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VuCiAgICAgcmV0dXJuIDA7CiB9CiAK
LWJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQo
UnVsZVNldCogcnVsZVNldCkKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlk
YXRlTWF0Y2hlc1J1bGVTZXQoRWxlbWVudCogZSwgUnVsZVNldCogcnVsZVNldCkKIHsKICAgICBp
ZiAoIXJ1bGVTZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3N0YXRlLm1hdGNoZWRS
dWxlcygpLmNsZWFyKCk7CiAKLSAgICBtX3N0YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpT
aGFyaW5nUnVsZXMpOworICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOworICAgIHN0YXRlLmlu
aXRFbGVtZW50KGUpOworICAgIHN0YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpTaGFyaW5n
UnVsZXMpOwogICAgIGludCBmaXJzdFJ1bGVJbmRleCA9IC0xLCBsYXN0UnVsZUluZGV4ID0gLTE7
CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZShmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7
Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVTZXQpLCBydWxlUmFu
Z2UpOwotICAgIG1fc3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxl
KTsKLSAgICBpZiAobV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIE1hdGNoUmVxdWVzdChy
dWxlU2V0KSwgcnVsZVJhbmdlKTsKKyAgICByZXR1cm4gIXN0YXRlLm1hdGNoZWRSdWxlcygpLmlz
RW1wdHkoKTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRy
b2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2Fu
U2hhcmVTdHlsZVdpdGhDb250cm9sKGNvbnN0IFN0YXRlJiBzdGF0ZSwgU3R5bGVkRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKIHsKLSAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxl
bWVudCgpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gc3RhdGUu
ZWxlbWVudCgpLT50b0lucHV0RWxlbWVudCgpOwogCkBAIC05NjIsOSArOTU1LDggQEAgc3RhdGlj
IGlubGluZSBib29sIGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgcmV0dXJuIGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1l
bnQpLT5oYXNEaXJlY3Rpb25BdXRvKCk7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmlu
Z0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVt
ZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5n
Q2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGNvbnN0IFN0YXRl
JiBzdGF0ZSwgU3R5bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0ZSkgY29uc3QKIHsKLSAgICBj
b25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmVs
ZW1lbnREYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZWxlbWVudERhdGEoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShY
TUxOYW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUo
WE1MTmFtZXM6OmxhbmdBdHRyKSkKQEAgLTEwMDQsMTAgKzk5Niw5IEBAIGJvb2wgU3R5bGVSZXNv
bHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRl
cyhTdHlsZWRFCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y2Fu
U2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29s
IFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChjb25zdCBTdGF0ZSYgc3Rh
dGUsIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBt
X3N0YXRlOwogCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAz
Nyw3ICsxMDI4LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2Fs
U3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGVsZW1lbnQpKQorICAgIGlmICghc2hhcmluZ0NhbmRp
ZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhzdGF0ZSwgZWxlbWVudCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25hbFByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlv
bmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTA1OCw3ICsxMDQ5LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0
aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoaXNDb250cm9s
ICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250
cm9sKGVsZW1lbnQpKQorICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29u
dHJvbChzdGF0ZSwgZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChz
dHlsZS0+dHJhbnNpdGlvbnMoKSB8fCBzdHlsZS0+YW5pbWF0aW9ucygpKQpAQCAtMTA5OCwxMiAr
MTA4OSwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChT
dHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxp
bmUgU3R5bGVkRWxlbWVudCogU3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJp
bmcoTm9kZSogbm9kZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAoraW5saW5lIFN0eWxlZEVsZW1l
bnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvbnN0IFN0YXRl
JiBzdGF0ZSwgTm9kZSogbm9kZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAogewogICAgIGZvciAo
OyBub2RlOyBub2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFu
b2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihu
b2RlKSkpCisgICAgICAgIGlmIChjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoc3RhdGUsIHN0YXRp
Y19jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgaWYgKGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQogICAgICAgICAgICAgcmV0
dXJuIDA7CkBAIC0xMTExLDkgKzExMDIsOCBAQCBpbmxpbmUgU3R5bGVkRWxlbWVudCogU3R5bGVS
ZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSogbm9kZSwgdW5zaQogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7CiB9CiAKLVJlbmRlclN0
eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCitSZW5kZXJTdHlsZSogU3R5
bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoU3RhdGUmIHN0YXRlKQogewotICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgaWYgKCFzdGF0ZS5zdHlsZWRFbGVtZW50KCkgfHwgIXN0
YXRlLnBhcmVudFN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMTQ2LDcgKzExMzYs
NyBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAg
IFN0eWxlZEVsZW1lbnQqIHNoYXJlRWxlbWVudCA9IDA7CiAgICAgTm9kZSogY291c2luTGlzdCA9
IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hpbGUgKGNv
dXNpbkxpc3QpIHsKLSAgICAgICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNo
YXJpbmcoY291c2luTGlzdCwgY291bnQpOworICAgICAgICBzaGFyZUVsZW1lbnQgPSBmaW5kU2li
bGluZ0ZvclN0eWxlU2hhcmluZyhzdGF0ZSwgY291c2luTGlzdCwgY291bnQpOwogICAgICAgICBp
ZiAoc2hhcmVFbGVtZW50KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNvdXNpbkxpc3Qg
PSBsb2NhdGVDb3VzaW5MaXN0KGNvdXNpbkxpc3QtPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5v
ZGVDb3VudCk7CkBAIC0xMTU3LDEzICsxMTQ3LDEzIEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29s
dmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2Fu
J3Qgc2hhcmUgaWYgc2libGluZyBydWxlcyBhcHBseS4gVGhpcyBpcyBjaGVja2VkIGF0IHRoZSBl
bmQgYXMgaXQgc2hvdWxkIHJhcmVseSBmYWlsLgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzUnVsZVNldChtX3J1bGVTZXRzLnNpYmxpbmcoKSkpCisgICAgaWYgKHN0eWxlU2hh
cmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KHN0YXRlLmVsZW1lbnQoKSwgbV9ydWxlU2V0cy5z
aWJsaW5nKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRy
aWJ1dGUgcnVsZXMgYXBwbHkuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNS
dWxlU2V0KG1fcnVsZVNldHMudW5jb21tb25BdHRyaWJ1dGUoKSkpCisgICAgaWYgKHN0eWxlU2hh
cmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KHN0YXRlLmVsZW1lbnQoKSwgbV9ydWxlU2V0cy51
bmNvbW1vbkF0dHJpYnV0ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hh
cmUgaWYgQGhvc3QgQC1ydWxlcyBhcHBseS4KLSAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcygpKQorICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVz
SG9zdFJ1bGVzKHN0YXRlKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gVHJhY2tpbmcgY2hp
bGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdl
dCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KICAgICBpZiAocGFyZW50RWxl
bWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50KCktPnBhcmVudEVsZW1lbnQoKSkpCkBA
IC0xMTcxLDcgKzExNjEsNyBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hh
cmVkU3R5bGUoKQogICAgIHJldHVybiBzaGFyZUVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiB9CiAK
LXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCit2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0
JiByZXN1bHQpCiB7CiAgICAgTWF0Y2hpbmdVQVJ1bGVzU2NvcGUgc2NvcGU7CiAKQEAgLTExODAs
MTUgKzExNzAsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCkKICAgICAgICAgcmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CiAgICAgUnVs
ZVNldCogdXNlckFnZW50U3R5bGVTaGVldCA9IG1fbWVkaXVtLT5tZWRpYVR5cGVNYXRjaFNwZWNp
ZmljKCJwcmludCIpCiAgICAgICAgID8gQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0UHJp
bnRTdHlsZSA6IENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFN0eWxlOwotICAgIG1hdGNo
VUFSdWxlcyhyZXN1bHQsIHVzZXJBZ2VudFN0eWxlU2hlZXQpOworICAgIG1hdGNoVUFSdWxlcyhz
dGF0ZSwgcmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKIAogICAgIC8vIEluIHF1aXJrcyBt
b2RlLCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSBxdWlya3MgdXNlciBhZ2VudCBzaGVldC4KICAg
ICBpZiAoZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhy
ZXN1bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFF1aXJrc1N0eWxlKTsKKyAgICAg
ICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCByZXN1bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVm
YXVsdFF1aXJrc1N0eWxlKTsKIAogICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBzb3VyY2Ug
c3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSksIHRoZW4g
d2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCiAgICAgaWYg
KGRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKQotICAgICAgICBtYXRjaFVBUnVsZXMocmVzdWx0
LCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OnZpZXdTb3VyY2VTdHlsZSgpKTsKKyAgICAgICAgbWF0
Y2hVQVJ1bGVzKHN0YXRlLCByZXN1bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6dmlld1NvdXJj
ZVN0eWxlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRTdHlsZXNGb3JQYWdpbmF0aW9uTW9kZShQ
YWdpbmF0aW9uOjpNb2RlIHBhZ2luYXRpb25Nb2RlLCBSZW5kZXJTdHlsZSogc3R5bGUpCkBAIC0x
Mzg2LDI1ICsxMzc2LDI4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAgICAgICAgIHJldHVy
biBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwogICAgIH0KIAotICAgIFN0YXRlJiBzdGF0ZSA9IG1f
c3RhdGU7Ci0gICAgaW5pdEVsZW1lbnQoZWxlbWVudCk7CisgICAgU3RhdGUgc3RhdGUoZG9jdW1l
bnQoKSk7CisgICAgaW5pdEVsZW1lbnQoc3RhdGUsIGVsZW1lbnQpOwogICAgIHN0YXRlLmluaXRG
b3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZWxlbWVudCwgZGVmYXVsdFBhcmVudCwgTk9QU0VV
RE8sIHJlZ2lvbkZvclN0eWxpbmcpOwogICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dT
dHlsZVNoYXJpbmcgJiYgIXN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7Ci0g
ICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxvY2F0ZVNoYXJlZFN0eWxlKCk7Cisg
ICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxvY2F0ZVNoYXJlZFN0eWxlKHN0YXRl
KTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0
eWxlOwogICAgIH0KIAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY2xvbmVGb3JQYXJlbnQ7Cisg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZTsKIAogICAgIGlmIChzdGF0ZS5wYXJlbnRTdHls
ZSgpKSB7Ci0gICAgICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7Ci0g
ICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxlKCksIGlz
QXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5
IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOworICAgICAgICBzdHlsZSA9IFJl
bmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLnBh
cmVudFN0eWxlKCksIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpB
dFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHN0YXRlLnNldFN0eWxlKGRlZmF1bHRTdHlsZUZvckVsZW1lbnQo
KSk7Ci0gICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0YXRlLnN0
eWxlKCkpOworICAgICAgICBzdHlsZSA9IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKKyAgICAg
ICAgY2xvbmVGb3JQYXJlbnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3R5bGUuZ2V0KCkpOwogICAg
ICAgICBzdGF0ZS5zZXRQYXJlbnRTdHlsZShjbG9uZUZvclBhcmVudC5nZXQoKSk7CiAgICAgfQor
ICAgIHN0YXRlLnNldFN0eWxlKHN0eWxlKTsKKwogICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhdHRy
aWJ1dGUgKGltcGxlbWVudGVkIGJ5IC13ZWJraXQtdXNlci1tb2RpZnkpIHNob3VsZAogICAgIC8v
IGJlIHByb3BhZ2F0ZWQgZnJvbSBzaGFkb3cgaG9zdCB0byBkaXN0cmlidXRlZCBub2RlLgogICAg
IGlmIChzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoKSkgewpAQCAtMTQzMiwxNiAr
MTQyNSwxNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZv
ckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogCiAgICAgTWF0Y2hSZXN1bHQgbWF0
Y2hSZXN1bHQ7CiAgICAgaWYgKG1hdGNoaW5nQmVoYXZpb3IgPT0gTWF0Y2hPbmx5VXNlckFnZW50
UnVsZXMpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhtYXRjaFJlc3VsdCk7CisgICAgICAgIG1hdGNo
VUFSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQpOwogICAgIGVsc2UKLSAgICAgICAgbWF0Y2hBbGxS
dWxlcyhtYXRjaFJlc3VsdCwgbWF0Y2hpbmdCZWhhdmlvciAhPSBNYXRjaEFsbFJ1bGVzRXhjbHVk
aW5nU01JTCk7CisgICAgICAgIG1hdGNoQWxsUnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0LCBtYXRj
aGluZ0JlaGF2aW9yICE9IE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKTsKIAotICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQpOworICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXMoc3RhdGUsIG1hdGNoUmVzdWx0LCBlbGVtZW50KTsKIAogICAgIC8vIENsZWFu
IHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9u
ZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxlKCksIHN0
YXRlLnBhcmVudFN0eWxlKCksIGVsZW1lbnQpOwotCi0gICAgc3RhdGUuY2xlYXIoKTsgLy8gQ2xl
YXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgorICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRl
LCBzdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUoKSwgZWxlbWVudCk7CiAKICAgICBkb2N1
bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKQEAgLTE0NDksNDMgKzE0NDAsNDAg
QEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50
KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKICAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7
CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5
ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVLZXlmcmFt
ZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCitQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKFN0YXRlJiBzdGF0ZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5
ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCiB7CiAgICAgTWF0Y2hSZXN1bHQg
cmVzdWx0OwogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQogICAgICAgICBhZGRNYXRj
aGVkUHJvcGVydGllcyhyZXN1bHQsIGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOwogCi0gICAgQVNT
RVJUKCFtX3N0YXRlLnN0eWxlKCkpOwotCi0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLQog
ICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKLSAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6
Y2xvbmUoZWxlbWVudFN0eWxlKSk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IFJl
bmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUpOworICAgIHN0YXRlLnNldFN0eWxlKHN0eWxl
KTsKICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAKICAgICAvLyBXZSBkb24ndCBu
ZWVkIHRvIGJvdGhlciB3aXRoICFpbXBvcnRhbnQuIFNpbmNlIHRoZXJlIGlzIG9ubHkgZXZlciBv
bmUKICAgICAvLyBkZWNsLCB0aGVyZSdzIG5vdGhpbmcgdG8gb3ZlcnJpZGUuIFNvIGp1c3QgYWRk
IHRoZSBmaXJzdCBwcm9wZXJ0aWVzLgogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwog
ICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgcmVzdWx0
LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRl
ZE9ubHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1
cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KHN0YXRlKTsK
IAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQg
b24gdGhlIGZvbnQtc2l6ZQogICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKLSAgICAg
ICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRW
YWx1ZSgpKTsKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlMaW5lSGVp
Z2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKICAgICAvLyBOb3cgZG8gcmVzdCBvZiB0
aGUgcHJvcGVydGllcy4KICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAgICAgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFs
c2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5
KTsKKyAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+
KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgp
IC0gMSwgaW5oZXJpdGVkT25seSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBi
eSBvbmUgb2YgdGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywKICAgICAvLyBnbyBhaGVhZCBh
bmQgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0
ZUZvbnQoc3RhdGUpOwogCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNl
ZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgbG9hZFBl
bmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogICAgIAogICAgIC8vIEFkZCBhbGwgdGhlIGFuaW1hdGlu
ZyBwcm9wZXJ0aWVzIHRvIHRoZSBrZXlmcmFtZS4KICAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCogc3R5bGVEZWNsYXJhdGlvbiA9IGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpIHsKQEAgLTE1
MjIsMTUgKzE1MTAsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFu
aW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwKIAogICAgIC8vIENvbnN0
cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxlIGZvciBlYWNoIGtleWZyYW1lCiAgICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+JiBrZXlmcmFtZXMgPSBrZXlmcmFtZXNSdWxl
LT5rZXlmcmFtZXMoKTsKKyAgICBTdGF0ZSBzdGF0ZShkb2N1bWVudCgpKTsKKyAgICBpbml0RWxl
bWVudChzdGF0ZSwgZSk7CisgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgp
LCBlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIC8vIEFwcGx5IHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUuIFRoaXMg
aXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxlbWVudAot
ICAgICAgICBpbml0RWxlbWVudChlKTsKLSAgICAgICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNv
bHZlKGRvY3VtZW50KCksIGUpOwotCiAgICAgICAgIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZy
YW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwogCiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJh
bWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktl
eWZyYW1lKGVsZW1lbnRTdHlsZSwga2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAg
a2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5
bGUsIGtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAKICAgICAgICAgLy8gQWRkIHRoaXMga2V5
ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRpbWVzCiAgICAgICAgIFZlY3Rv
cjxmbG9hdD4ga2V5czsKQEAgLTE1NTAsNyArMTUzOCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUq
IGVsCiAgICAgICAgICAgICB6ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIwJSIpOwog
ICAgICAgICB9CiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAg
ICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHls
ZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBrZXlmcmFt
ZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHlsZSwgemVy
b1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwogICAgICAgICBsaXN0Lmluc2VydChr
ZXlmcmFtZVZhbHVlKTsKICAgICB9CiAKQEAgLTE1NjIsNyArMTU1MCw3IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGVsCiAgICAgICAgICAgICBodW5kcmVkUGVyY2VudEtleWZyYW1lLT5zZXRLZXlU
ZXh0KCIxMDAlIik7CiAgICAgICAgIH0KICAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZh
bHVlKDEsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJh
bWUoZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7
CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShzdGF0ZSwg
ZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAg
ICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOwogICAgIH0KIH0KQEAgLTE1NzMsMjQg
KzE1NjEsMjIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRv
U3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWwKICAgICBpZiAoIWUpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLQotICAgIGluaXRFbGVt
ZW50KGUpOwotCisgICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQoKSk7CisgICAgaW5pdEVsZW1lbnQo
c3RhdGUsIGUpOwogICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwg
cGFyZW50U3R5bGUsIHBzZXVkbyk7CiAgICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNy
ZWF0ZSgpKTsKLSAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShtX3N0YXRlLnBhcmVudFN0
eWxlKCkpOworICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxl
KCkpOwogCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkg
b2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fs
a2luZwogICAgIC8vIHRob3NlIHJ1bGVzLgogCiAgICAgLy8gQ2hlY2sgVUEsIHVzZXIgYW5kIGF1
dGhvciBydWxlcy4KICAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKLSAgICBtYXRjaFVBUnVs
ZXMobWF0Y2hSZXN1bHQpOworICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQpOwog
CiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7Ci0gICAgICAgIG1hdGNoVXNl
clJ1bGVzKG1hdGNoUmVzdWx0LCBmYWxzZSk7Ci0gICAgICAgIG1hdGNoQXV0aG9yUnVsZXMobWF0
Y2hSZXN1bHQsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hVc2VyUnVsZXMoc3RhdGUsIG1hdGNoUmVz
dWx0LCBmYWxzZSk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0
LCBmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
LmlzRW1wdHkoKSkKQEAgLTE1OTgsMTMgKzE1ODQsMTMgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywg
RWwKIAogICAgIHN0YXRlLnN0eWxlKCktPnNldFN0eWxlVHlwZShwc2V1ZG8pOwogCi0gICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwgZSk7CisgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIGUpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0
eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZp
eHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwgbV9zdGF0ZS5wYXJl
bnRTdHlsZSgpLCAwKTsKKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZSwgc3RhdGUuc3R5bGUo
KSwgc3RhdGUucGFyZW50U3R5bGUoKSwgMCk7CiAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291
cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMo
KTsKKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7CiAKICAgICBkb2N1bWVudCgpLT5k
aWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKQEAgLTE2MTQsMTIgKzE2MDAsMTMgQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBz
ZXVkb0lkIHBzZXVkbywgRWwKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiB7Ci0gICAgbV9zdGF0ZS5pbml0Rm9yU3R5
bGVSZXNvbHZlKGRvY3VtZW50KCksIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8g
bV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KKyAg
ICBTdGF0ZSBzdGF0ZShkb2N1bWVudCgpKTsKKyAgICBzdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZl
KGRvY3VtZW50KCksIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxl
bWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KIAotICAgIG1fc3Rh
dGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKLSAgICBtX3N0YXRlLnN0eWxlKCkt
PmluaGVyaXRGcm9tKG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICBzdGF0ZS5zZXRT
dHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOworICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRG
cm9tKHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CiAKLSAgICBjb25zdCBib29sIGlzTGVmdCA9
IGlzTGVmdFBhZ2UocGFnZUluZGV4KTsKKyAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVmdFBh
Z2Uoc3RhdGUsIHBhZ2VJbmRleCk7CiAgICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBh
Z2UocGFnZUluZGV4KTsKICAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRl
eCk7CiAgICAgCkBAIC0xNjI4LDQyICsxNjE1LDQzIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFn
ZVJ1bGVzKHJlc3VsdCwgbV9ydWxlU2V0cy51c2VyU3R5bGUoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBw
YWdlKTsKICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9y
IEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVsZXMo
cmVzdWx0LCBtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7
Ci0gICAgbV9zdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CisgICAgc3RhdGUuc2V0TGluZUhl
aWdodFZhbHVlKDApOwogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwogI2lmIEVOQUJM
RShDU1NfVkFSSUFCTEVTKQotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZp
bml0aW9ucz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFi
bGVEZWZpbml0aW9ucz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKICNlbmRpZgotICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwg
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIHJl
c3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhl
cml0ZWRPbmx5KTsKIAogICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBh
bmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChzdGF0
ZSk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNp
ZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYgKG1fc3RhdGUubGluZUhlaWdodFZhbHVlKCkp
Ci0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX3N0YXRlLmxp
bmVIZWlnaHRWYWx1ZSgpKTsKKyAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCisgICAg
ICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGlu
ZUhlaWdodFZhbHVlKCkpOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0
eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExv
d1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRj
aGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIFN0YXJ0
IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVu
ZGluZ1Jlc291cmNlcygpOworICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKHN0YXRlKTsKIAogICAg
IGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1
cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0YXRlLnRha2VTdHlsZSgpOworICAgIHJldHVy
biBzdGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpCiB7Ci0gICAgbV9zdGF0ZS5zZXRTdHls
ZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOworICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOwor
ICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CiAgICAgLy8gTWFrZSBz
dXJlIG91ciBmb250cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZy
b20gb3VyIHBhcmVudCBzdHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1l
bnRTZXR0aW5ncygpKSB7Ci0gICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwot
ICAgICAgICBtX3N0YXRlLnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwor
ICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHN0YXRlLCBzZXR0aW5ncyk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAgIH0gZWxzZQot
ICAgICAgICBtX3N0YXRlLnN0eWxlKCktPmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPmZvbnQoKS51cGRhdGUoMCk7CiAKLSAgICByZXR1cm4gbV9zdGF0ZS50YWtlU3R5
bGUoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yVGV4dChUZXh0KiB0ZXh0Tm9kZSkKQEAg
LTE3NTgsNyArMTc0Niw3IEBAIHN0YXRpYyBib29sIGlzRGlzcGxheUZsZXhpYmxlQm94KEVEaXNw
bGF5IGRpc3BsYXkpCiAgICAgcmV0dXJuIGRpc3BsYXkgPT0gRkxFWCB8fCBkaXNwbGF5ID09IElO
TElORV9GTEVYOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJl
bmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50ICplKQor
dm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShTdGF0ZSYgc3RhdGUsIFJlbmRl
clN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50ICplKQogewog
ICAgIEFTU0VSVChwYXJlbnRTdHlsZSk7CiAKQEAgLTE5NTEsNyArMTkzOSw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5CiAKICAgICAvLyBMZXQgdGhlIHRoZW1lIGFsc28gaGF2ZSBhIGNyYWNr
IGF0IGFkanVzdGluZyB0aGUgc3R5bGUuCiAgICAgaWYgKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkp
Ci0gICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywg
c3R5bGUsIGUsIG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3RhdGUuYm9yZGVyRGF0YSgp
LCBtX3N0YXRlLmJhY2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yKCkpOwor
ICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0
eWxlLCBlLCBzdGF0ZS5oYXNVQUFwcGVhcmFuY2UoKSwgc3RhdGUuYm9yZGVyRGF0YSgpLCBzdGF0
ZS5iYWNrZ3JvdW5kRGF0YSgpLCBzdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAKICAgICAvLyBJ
ZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0
eWxlLgogICAgIGlmIChzdHlsZS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKQEAgLTIw
MzIsMTggKzIwMjAsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShS
ZW5kZXJTdHlsZSogc3R5bGUpCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250
RGVzY3JpcHRpb24pOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQordm9p
ZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1f
c3RhdGUuZm9udERpcnR5KCkpCisgICAgaWYgKCFzdGF0ZS5mb250RGlydHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOwotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUoKTsKLSAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFu
Z2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7Ci0gICAgY2hlY2tGb3Jab29tQ2hhbmdl
KHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOworICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1
c3Qoc3RhdGUpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0YXRlLnN0eWxlKCk7CisgICAg
Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0YXRlLCBzdHlsZSwgc3RhdGUucGFyZW50U3R5
bGUoKSk7CisgICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0YXRlLCBzdHlsZSwgc3RhdGUucGFyZW50
U3R5bGUoKSk7CiAgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSk7CiAgICAgc3R5
bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fc3RhdGUuc2V0Rm9udERp
cnR5KGZhbHNlKTsKKyAgICBzdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwogfQogCiBQYXNzUmVm
UHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVt
ZW50KiBlLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKQEAgLTIwNTYsMzkgKzIwNDQsMzQgQEAg
UGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0Zv
ckVsZW1lbnQoRWxlbWVudCogZSwgUHMKICAgICBpZiAoIWUgfHwgIWUtPmRvY3VtZW50KCktPmhh
dmVTdHlsZXNoZWV0c0xvYWRlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fc3RhdGUu
c2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CisgICAgU3RhdGUgc3Rh
dGUoZG9jdW1lbnQoKSk7CisgICAgc3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxl
Y3RpbmdSdWxlcyk7CiAKLSAgICBpbml0RWxlbWVudChlKTsKLSAgICBtX3N0YXRlLmluaXRGb3JT
dHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwgMCwgcHNldWRvSWQpOworICAgIGluaXRFbGVtZW50
KHN0YXRlLCBlKTsKKyAgICBzdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUs
IDAsIHBzZXVkb0lkKTsKIAogICAgIE1hdGNoUmVzdWx0IGR1bW15OwogICAgIGlmIChydWxlc1Rv
SW5jbHVkZSAmIFVBQW5kVXNlckNTU1J1bGVzKSB7CiAgICAgICAgIC8vIEZpcnN0IHdlIG1hdGNo
IHJ1bGVzIGZyb20gdGhlIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgICAgIG1hdGNoVUFSdWxlcyhk
dW1teSk7CisgICAgICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgZHVtbXkpOwogCiAgICAgICAgIC8v
IE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgogICAgICAgICBpZiAobV9tYXRjaEF1dGhv
ckFuZFVzZXJTdHlsZXMpCi0gICAgICAgICAgICBtYXRjaFVzZXJSdWxlcyhkdW1teSwgcnVsZXNU
b0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICAgICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0
YXRlLCBkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKICAgICB9CiAKICAg
ICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0
aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc3RhdGUuc2V0U2FtZU9yaWdpbk9ubHkoIShydWxl
c1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsKKyAgICAgICAgc3RhdGUuc2V0U2Ft
ZU9yaWdpbk9ubHkoIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsKIAog
ICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KLSAgICAgICAgbWF0
Y2hBdXRob3JSdWxlcyhkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKLQot
ICAgICAgICBtX3N0YXRlLnNldFNhbWVPcmlnaW5Pbmx5KGZhbHNlKTsKKyAgICAgICAgbWF0Y2hB
dXRob3JSdWxlcyhzdGF0ZSwgZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7
CiAgICAgfQogCi0gICAgbV9zdGF0ZS5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5n
U3R5bGUpOwotCi0gICAgcmV0dXJuIG1fc3RhdGUudGFrZVJ1bGVMaXN0KCk7CisgICAgcmV0dXJu
IHN0YXRlLnRha2VSdWxlTGlzdCgpOwogfQogCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpy
dWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgU2VsZWN0b3JDaGVja2VyOjpCZWhhdmlv
ckF0Qm91bmRhcnkgYmVoYXZpb3JBdEJvdW5kYXJ5KQoraW5saW5lIGJvb2wgU3R5bGVSZXNvbHZl
cjo6cnVsZU1hdGNoZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgU2VsZWN0
b3JDaGVja2VyOjpCZWhhdmlvckF0Qm91bmRhcnkgYmVoYXZpb3JBdEJvdW5kYXJ5KQogewotICAg
IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0KICAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNr
YWJsZVNlbGVjdG9yKCkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMg
bm90IGluY2x1ZGUgYW55IHBzZXVkbyBlbGVtZW50cy4KICAgICAgICAgaWYgKHN0YXRlLnBzZXVk
b1N0eWxlKCkgIT0gTk9QU0VVRE8pCkBAIC0yMTI3LDcgKzIxMTAsNyBAQCBib29sIFN0eWxlUmVz
b2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVj
dG9yLCBFbGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNr
ZXIoZG9jdW1lbnQoKSwgbV9zdGF0ZS5tb2RlKCkpOworICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxl
Y3RvckNoZWNrZXIoZG9jdW1lbnQoKSwgU2VsZWN0b3JDaGVja2VyOjpRdWVyeWluZ1J1bGVzKTsK
ICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMgPSBD
U1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCiAgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIubWF0
Y2hlcyhzLCByZWdpb25FbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjE0
OSw5ICsyMTMyLDkgQEAgTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0TGVuZ3Ro
KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmUKIH0KIAogdGVtcGxhdGUgPFN0
eWxlUmVzb2x2ZXI6OlN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Ci12b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBT
dHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJv
cGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0aWVzKFN0YXRlJiBzdGF0ZSwgY29uc3QgU3R5bGVQcm9wZXJ0eVNl
dCogcHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGlu
aGVyaXRlZE9ubHksIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUp
CiB7Ci0gICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxp
c3RSZWdpb24pIHx8IG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZygpKTsKKyAgICBBU1NFUlQoKHBy
b3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgc3RhdGUu
cmVnaW9uRm9yU3R5bGluZygpKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
Y29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGUoZG9jdW1l
bnQoKSwgcnVsZSwgdGhpcyk7CiAKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVy
dGllcy0+cHJvcGVydHlDb3VudCgpOwpAQCAtMjE3OSw3ICsyMTYyLDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGll
cywgU3R5bGVSdWwKICAgICAgICAgY2FzZSBWYXJpYWJsZURlZmluaXRpb25zOgogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJvcGVydHlWYXJpYWJsZSA8IGZpcnN0Q1NTUHJvcGVydHks
IENTU192YXJpYWJsZV9pc19iZWZvcmVfZmlyc3RfcHJvcGVydHkpOwogICAgICAgICAgICAgaWYg
KHByb3BlcnR5ID09IENTU1Byb3BlcnR5VmFyaWFibGUpCi0gICAgICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShzdGF0ZSwgY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgY2FzZSBIaWdoUHJpb3JpdHlQcm9wZXJ0
aWVzOgpAQCAtMjE5MiwyNiArMjE3NSwyNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogI2Vu
ZGlmCiAgICAgICAgICAgICAvLyBnaXZlIHNwZWNpYWwgcHJpb3JpdHkgdG8gZm9udC14eHgsIGNv
bG9yIHByb3BlcnRpZXMsIGV0YwogICAgICAgICAgICAgaWYgKHByb3BlcnR5IDwgQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgp
LCBjdXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUs
IGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKICAgICAgICAgICAgIC8vIHdlIGFwcGx5
IGxpbmUtaGVpZ2h0IGxhdGVyCiAgICAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eSA9PSBDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRMaW5lSGVpZ2h0
VmFsdWUoY3VycmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVp
Z2h0VmFsdWUoY3VycmVudC52YWx1ZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIExvd1ByaW9yaXR5UHJvcGVydGllczoKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA+IENT
U1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJl
bnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5
KHN0YXRlLCBjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQcm9jZXNzUnVsZShjb29raWUpOwog
fQogCiB0ZW1wbGF0ZSA8U3R5bGVSZXNvbHZlcjo6U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4K
LXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJl
c3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wgaXNJbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQg
ZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlN
YXRjaGVkUHJvcGVydGllcyhTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9v
bCBpbmhlcml0ZWRPbmx5KQogewogICAgIGlmIChzdGFydEluZGV4ID09IC0xKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIGlmIChzdGF0ZS5zdHls
ZSgpLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGluaykgewogICAgICAgICBmb3IgKGludCBp
ID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBN
YXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVk
UHJvcGVydGllc1tpXTsKQEAgLTIyMjAsNyArMjIwMiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJv
b2wKICAgICAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShsaW5r
TWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmspOwogICAgICAgICAgICAgc3Rh
dGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShsaW5rTWF0Y2hUeXBlICYgU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpOwogCi0gICAgICAgICAgICBhcHBseVByb3BlcnRp
ZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQu
bWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8
UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7
CisgICAgICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4oc3RhdGUsIG1hdGNoZWRQcm9wZXJ0
aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBv
cnRhbnQsIGluaGVyaXRlZE9ubHksIHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4o
bWF0Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSkpOwogICAgICAgICB9CiAgICAgICAgIHN0
YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKICAgICAgICAgc3RhdGUu
c2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7CkBAIC0yMjI4LDcgKzIy
MTAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3Qg
TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sCiAgICAgfQogICAgIGZvciAoaW50IGkgPSBz
dGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAgY29uc3QgTWF0Y2hlZFBy
b3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXNbaV07Ci0gICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5w
cm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50
LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNo
ZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKKyAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBh
c3M+KHN0YXRlLCBtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3Vs
dC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUp
KTsKICAgICB9CiB9CiAKQEAgLTIzMjgsMTAgKzIzMTAsOSBAQCBzdGF0aWMgYm9vbCBpc0NhY2hl
YWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBSZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0
Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVt
ZW50KiBlbGVtZW50KQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVt
ZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBTdGF0ZSYgc3RhdGUg
PSBtX3N0YXRlOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNoUmVzdWx0LmlzQ2FjaGVh
YmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkgOiAw
OwogICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgY29uc3QgTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7CkBAIC0yMzU1LDEwICsyMzM2LDEw
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykK
ICAgICAvLyBGaXJzdCBhcHBseSBhbGwgdmFyaWFibGUgZGVmaW5pdGlvbnMsIGFzIHRoZXkgbWF5
IGJlIHVzZWQgZHVyaW5nIGFwcGxpY2F0aW9uIG9mIGxhdGVyIHByb3BlcnRpZXMuCi0gICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgZmFs
c2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5o
ZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRp
b25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVs
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkp
OwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0Y2hS
ZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQsIHRydWUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1
bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJp
YWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIG1hdGNo
UmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJl
c3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1
bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5y
YW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVl
LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogI2VuZGlmCiAKICAgICAvLyBOb3cgd2UgaGF2
ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVsZXMgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLiBXYWxr
IHRoZSBydWxlcyBhbmQgYXBwbHkKQEAgLTIzNjYsMTAgKzIzNDcsMTAgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgY29uc3QKICAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGlt
cG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBv
cnRhbnQKICAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQuCiAgICAgc3RhdGUuc2V0TGlu
ZUhlaWdodFZhbHVlKDApOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5
UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlv
cml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmly
c3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4o
c3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxh
c3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBt
YXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RV
c2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKIAogICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5y
ZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSkgewogICAgICAgICBzdGF0ZS5zZXRGb250RGlydHkodHJ1ZSk7CkBAIC0yMzc3LDMwICsy
MzU4LDMwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25z
dCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgfQogCiAgICAgLy8gSWYgb3Vy
IGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0
ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KHN0YXRlKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlz
IHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KICAgICBp
ZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CisgICAgICAgIGFwcGx5
UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZh
bHVlKCkpOwogCiAgICAgLy8gTWFueSBwcm9wZXJ0aWVzIGRlcGVuZCBvbiB0aGUgZm9udC4gSWYg
aXQgY2hhbmdlcyB3ZSBqdXN0IGFwcGx5IGFsbCBwcm9wZXJ0aWVzLgogICAgIGlmIChjYWNoZUl0
ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3RhdGUu
c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkpCiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9
IGZhbHNlOwogCiAgICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJvcGVydGll
cy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0
Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVz
dWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQs
IGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIAogICAgIC8vIENhY2hlIG91
ciBib3JkZXIgYW5kIGJhY2tncm91bmQgc28gdGhhdCB3ZSBjYW4gZXhhbWluZSB0aGVtIGxhdGVy
LgogICAgIHN0YXRlLmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogICAgIAogICAgIC8vIE5v
dyBkbyB0aGUgYXV0aG9yIGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBh
bGwgdGhlICFpbXBvcnRhbnQgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5y
YW5nZXMubGFzdFVBUnVsZSArIDEsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxM
b3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFw
cGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0
eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
c2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4o
bWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3Vs
dCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlICsgMSwgbWF0Y2hSZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNo
UmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJl
c3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJl
c3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwg
dHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgIAogICAgIC8vIFN0YXJ0IGxvYWRp
bmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jl
c291cmNlcygpOworICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKHN0YXRlKTsKICAgICAKICAgICBB
U1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgpKTsKICAgICAKQEAgLTI0NzAsMTAgKzI0NTEsMTAgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVs
ZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLAogICAgIH0KIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpp
c0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVm
dFBhZ2UoU3RhdGUmIHN0YXRlLCBpbnQgcGFnZUluZGV4KSBjb25zdAogewogICAgIGJvb2wgaXNG
aXJzdFBhZ2VMZWZ0ID0gZmFsc2U7Ci0gICAgaWYgKCFtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgIGlmICghc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIGlzRmlyc3RQYWdlTGVm
dCA9IHRydWU7CiAKICAgICByZXR1cm4gKHBhZ2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAx
IDogMCkpICUgMjsKQEAgLTI0OTEsMTggKzI0NzIsMzEgQEAgU3RyaW5nIFN0eWxlUmVzb2x2ZXI6
OnBhZ2VOYW1lKGludCAvKiBwYWdlSW5kZXggKi8pIGNvbnN0CiAgICAgcmV0dXJuICIiOwogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5V2l0aE51bGxDaGVjayhTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpbml0RWxlbWVudCgwKTsKLSAgICBtX3N0
YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgMCwgc3R5bGUpOwotICAgIG1fc3Rh
dGUuc2V0U3R5bGUoc3R5bGUpOwotICAgIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwg
dmFsdWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBhcHBseVByb3Bl
cnR5KHN0YXRlLCBpZCwgdmFsdWUpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5Rm9udFByb3BlcnR5VG9TdHlsZShSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHBhcnNlZFN0eWxlKQogewotICAgIGlmICh2
YWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShpZCwgdmFsdWUpOworICAgIFN0YXRlIHN0YXRl
KGRvY3VtZW50KCkpOworICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwg
MCwgc3R5bGUpOworICAgIHN0YXRlLnNldFN0eWxlKHN0eWxlKTsKKworICAgIGFwcGx5UHJvcGVy
dHlXaXRoTnVsbENoZWNrKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNlZFN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCkpOworICAg
IGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSwg
cGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpLmdl
dCgpKTsKKyAgICBhcHBseVByb3BlcnR5V2l0aE51bGxDaGVjayhzdGF0ZSwgQ1NTUHJvcGVydHlG
b250VmFyaWFudCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlG
b250VmFyaWFudCkuZ2V0KCkpOworICAgIGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKHN0YXRl
LCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkpOworCisgICAgLy8gQXMgZGVzY3JpYmVkIGlu
IEJVRzY2MjkxLCBzZXR0aW5nIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQgb24gYSBmb250IG1h
eSBlbnRhaWwgYSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZSBjYWxsLAor
ICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZvbnRNZXRyaWNzIGFyZSBhdmFpbGFibGUgZm9yIHRo
ZSBhZmZlY3RlZCBmb250LCBvdGhlcndpc2UgYSBjcmFzaCBvY2N1cnMgKHNlZSBodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2NoYW5nZXNldC85NjEyMikuCisgICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBj
YWxscyBiZWxvdyB1cGRhdGUgdGhlIGZvbnRNZXRyaWNzIGFuZCBlbnN1cmUgdGhlIHByb3BlciBz
ZXR0aW5nIG9mIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQuCisgICAgdXBkYXRlRm9udChzdGF0
ZSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2soc3RhdGUsIENTU1Byb3BlcnR5Rm9u
dFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNp
emUpLmdldCgpKTsKKyAgICB1cGRhdGVGb250KHN0YXRlKTsKKyAgICBhcHBseVByb3BlcnR5V2l0
aE51bGxDaGVjayhzdGF0ZSwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKIH0KIAogaW5s
aW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKQEAg
LTI2MDUsMTAgKzI1OTksNiBAQCBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjppc1ZhbGlkQ3Vl
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQogLy8gd2lkdGgvaGVpZ2h0L2JvcmRlci9w
YWRkaW5nLy4uLiBmcm9tIHRoZSBSZW5kZXJTdHlsZSAtPiBmb3IgU1ZHIHRoZXNlIHZhbHVlcyB3
b3VsZCBuZXZlciBzY2FsZSwKIC8vIGlmIHdlJ2QgcGFzcyBhIDEuMCB6b29tIGZhY3RvciBldmVy
eWh3ZXJlLiBTbyB3ZSBvbmx5IHBhc3MgYSB6b29tIGZhY3RvciBvZiAxLjAgZm9yIHNwZWNpZmlj
CiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpv
b21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KLWJvb2wg
U3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKLXsKLSAgICByZXR1cm4gbV9zdGF0ZS5l
bGVtZW50KCkgJiYgbV9zdGF0ZS5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpOwotfQogCiBzdGF0
aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBMZW5ndGgmIHdvcmtp
bmdMZW5ndGgpCiB7CkBAIC0yNzI2LDkgKzI3MTYsOSBAQCBzdGF0aWMgYm9vbCBoYXNWYXJpYWJs
ZVJlZmVyZW5jZShDU1NWYWx1ZSogdmFsdWUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25v
d25FeHByZXNzaW9ucykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhTdGF0
ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6
cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMpCiB7Ci0gICAg
c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNl
cmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqbV9zdGF0ZS5zdHlsZSgpLT52YXJpYWJsZXMoKSkp
OworICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQsIHZh
bHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMoKnN0YXRlLnN0eWxlKCktPnZhcmlhYmxl
cygpKSk7CiAKICAgICBpZiAoa25vd25FeHByZXNzaW9ucy5jb250YWlucyhleHByZXNzaW9uKSkK
ICAgICAgICAgcmV0dXJuOyAvLyBjeWNsZSBkZXRlY3RlZC4KQEAgLTI3NDMsMjQgKzI3MzMsMjMg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHMKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVzdWx0U2V0LT5wcm9wZXJ0eUNvdW50KCk7IGkrKykgewogICAgICAgICBTdHlsZVByb3BlcnR5
U2V0OjpQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IHJlc3VsdFNldC0+cHJvcGVydHlBdChp
KTsKICAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgIT0gQ1NTUHJvcGVydHlWYXJpYWJsZSAmJiBo
YXNWYXJpYWJsZVJlZmVyZW5jZShwcm9wZXJ0eS52YWx1ZSgpKSkKLSAgICAgICAgICAgIHJlc29s
dmVWYXJpYWJsZXMocHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFsdWUoKSwga25vd25FeHByZXNz
aW9ucyk7CisgICAgICAgICAgICByZXNvbHZlVmFyaWFibGVzKHN0YXRlLCBwcm9wZXJ0eS5pZCgp
LCBwcm9wZXJ0eS52YWx1ZSgpLCBrbm93bkV4cHJlc3Npb25zKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpKTsK
KyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIHByb3BlcnR5LmlkKCksIHByb3BlcnR5
LnZhbHVlKCkpOwogICAgIH0KIH0KICNlbmRpZgogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogewogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlmIChpZCAh
PSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHZhbHVlKSkgewog
ICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiBrbm93bkV4
cHJlc3Npb25zOwotICAgICAgICByZXNvbHZlVmFyaWFibGVzKGlkLCB2YWx1ZSwga25vd25FeHBy
ZXNzaW9ucyk7CisgICAgICAgIHJlc29sdmVWYXJpYWJsZXMoc3RhdGUsIGlkLCB2YWx1ZSwga25v
d25FeHByZXNzaW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIFN0
YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnRO
b2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKICAgICBib29sIGlzSW5pdGlhbCA9
IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVl
LT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCkBAIC0yNzkwLDExICsyNzc5LDExIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gbV9zdHlsZUJ1aWxkZXIu
cHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpIHsKICAgICAg
ICAgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUo
aWQsIHRoaXMpOworICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShpZCwgc3Rh
dGUpOwogICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBoYW5kbGVyLmFw
cGx5SW5pdGlhbFZhbHVlKGlkLCB0aGlzKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0
aWFsVmFsdWUoaWQsIHN0YXRlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlci5h
cHBseVZhbHVlKGlkLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFs
dWUoaWQsIHN0YXRlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI4MjYs
MTkgKzI4MTUsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRl
bSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRv
clZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzR3JhZGllbnRWYWx1
ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChT
dHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+
KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4oaXRl
bSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHN0YXRlKS5nZXQoKSksIGRpZFNldCk7CiAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0
PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkgewotICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1
ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVt
KSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRl
bnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRp
Y19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NT
UHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRT
ZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNhY2hl
ZE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2Fz
dDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0yOTQwLDcgKzI5MjksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVy
aWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVu
dEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVk
Rm9udCgpKTsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjk1MCwxMSArMjkzOSwxMSBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUg
dG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZQog
ICAgICAgICAgICAgLy8gdG8gbm9uLW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlmIChmb250RGVz
Y3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpKQotICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9u
dFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlw
dGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBzZXRGb250
U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQo
KSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBm
YWxzZSkpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoaW5p
dGlhbERlc2MuZ2VuZXJpY0ZhbWlseSgpKTsKICAgICAgICAgICAgIGlmICghaW5pdGlhbERlc2Mu
Zmlyc3RGYW1pbHkoKS5mYW1pbHlJc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEZhbWlseShpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpKTsKLSAgICAgICAgICAg
IHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdGUu
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMzAyOSw5ICszMDE4LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
Ly8gSWYgY3VyckZhbWlseSBpcyBub24temVybyB0aGVuIHdlIHNldCBhdCBsZWFzdCBvbmUgZmFt
aWx5IG9uIHRoaXMgZGVzY3JpcHRpb24uCiAgICAgICAgIGlmIChjdXJyRmFtaWx5KSB7CiAgICAg
ICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0
aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6
ZSkKLSAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXpl
Rm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24u
a2V5d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkpOworICAg
ICAgICAgICAgICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIGZvbnRTaXpl
Rm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24u
a2V5d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkpOwogCi0g
ICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAg
ICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMDU2LDEzICszMDQ1LDEzIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUu
cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRMaW5lSGVpZ2h0KHN0YXRlLnBhcmVudFN0eWxlKCktPnNwZWNpZmllZExpbmVIZWln
aHQoKSk7CiAgICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7Ci0gICAgICAg
ICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHN0
YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICB9IGVsc2Ug
aWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1l
bnRTZXR0aW5ncygpOwogICAgICAgICAgICAgQVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2UncmUg
ZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJlIGlu
IGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0aW5ncwogICAgICAgICAgICAgaWYgKCFzZXR0aW5n
cykKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpbml0aWFsaXplRm9udFN0
eWxlKHNldHRpbmdzKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc3RhdGUsIHNl
dHRpbmdzKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewogICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVI
ZWlnaHQoKSk7CiAgICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CkBAIC0z
MDgxLDI3ICszMDcwLDI3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50KCktPnByaW50aW5nKCkgfHwgIXNldHRp
bmdzLT5zY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZCgpKTsKIAogICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSB0aGUgem9vbSBmYWN0b3IuCi0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1
bWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwg
Zm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKLSAg
ICAgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6
ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlw
dGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCBz
dGF0ZS51c2VTVkdab29tUnVsZXMoKSkpOworICAgICAgICAgICAgICAgIHN0YXRlLnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7CiAgICAgICAgICAgICBGb250VmFsdWUqIGZv
bnQgPSBzdGF0aWNfY2FzdDxGb250VmFsdWUqPih2YWx1ZSk7CiAgICAgICAgICAgICBpZiAoIWZv
bnQtPnN0eWxlIHx8ICFmb250LT52YXJpYW50IHx8ICFmb250LT53ZWlnaHQKICAgICAgICAgICAg
ICAgICB8fCAhZm9udC0+c2l6ZSB8fCAhZm9udC0+bGluZUhlaWdodCB8fCAhZm9udC0+ZmFtaWx5
KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlGb250U3R5bGUsIGZvbnQtPnN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgIGFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgZm9udC0+dmFyaWFudC5nZXQoKSk7Ci0g
ICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgZm9udC0+d2Vp
Z2h0LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5
Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5
KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsKKyAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCwgZm9u
dC0+d2VpZ2h0LmdldCgpKTsKICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBwcm9wZXJ0aWVz
IGNhbiBkaXJ0eSBvdXIgZm9udCBidXQgdGhleSBkb24ndCB0cnkgdG8gcmVhZCB0aGUgZm9udCdz
CiAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIGJhY2ssIHdoaWNoIGlzIHNhZmUuIEhvd2V2ZXIg
aWYgZm9udC1zaXplIGlzIHVzaW5nIHRoZSAnZXgnIHVuaXQsIGl0IHdpbGwKICAgICAgICAgICAg
IC8vIG5lZWQgcXVlcnkgdGhlIGRpcnRpZWQgZm9udCdzIHgtaGVpZ2h0IHRvIGdldCB0aGUgY29t
cHV0ZWQgc2l6ZS4gVG8gYmUgc2FmZSBpbiB0aGlzCiAgICAgICAgICAgICAvLyBjYXNlLCBsZXQn
cyBqdXN0IHVwZGF0ZSB0aGUgZm9udCBub3cuCi0gICAgICAgICAgICB1cGRhdGVGb250KCk7Ci0g
ICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIGZvbnQtPnNpemUu
Z2V0KCkpOworICAgICAgICAgICAgdXBkYXRlRm9udChzdGF0ZSk7CisgICAgICAgICAgICBhcHBs
eVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsK
IAogICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQtPmxpbmVIZWlnaHQu
Z2V0KCkpOwogCi0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWls
eSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUs
IENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CiAKQEAgLTMxMzIsNyArMzEyMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICBTaGFkb3dTdHlsZSBzaGFkb3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0
eWxlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKICAgICAg
ICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAg
ICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0
KCkpOworICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3Rh
dGUsIGl0ZW0tPmNvbG9yLmdldCgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0eWxl
KCkpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpOwogCkBA
IC0zMTYxLDcgKzMxNTAsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmVmbGVjdGlvbi0+
c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZElu
dGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lv
bj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSk7
CiAgICAgICAgIE5pbmVQaWVjZUltYWdlIG1hc2s7CiAgICAgICAgIG1hc2suc2V0TWFza0RlZmF1
bHRzKCk7Ci0gICAgICAgIG1fc3R5bGVNYXAubWFwTmluZVBpZWNlSW1hZ2UoaWQsIHJlZmxlY3RW
YWx1ZS0+bWFzaygpLCBtYXNrKTsKKyAgICAgICAgQ1NTVG9TdHlsZU1hcCBzdHlsZU1hcChzdGF0
ZSk7CisgICAgICAgIHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUt
Pm1hc2soKSwgbWFzayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7
CkBAIC0zMjUzLDE0ICszMjQzLDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwogICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9jYWxl
VG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0ZS5zdHlsZSgpLT5sb2NhbGUoKSkpOwot
ICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3Rh
dGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTaXplQWRqdXN0OiB7CiAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRTaXplQWRqdXN0LCBUZXh0U2l6ZUFk
anVzdCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNldFRleHRTaXplQWRqdXN0
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0byk7CisgICAgICAgIHN0
YXRlLnNldFRleHRTaXplQWRqdXN0KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlQXV0byk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9T
VVBQT1JUKQpAQCAtMzM4Nyw3ICszMzc3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIENvbG9yIGNvbCA9
IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgQ29sb3Ig
Y29sID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZhbHVlKTsKICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTM0NDIsNyArMzQzMiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rp
b25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZSgpLT5kaXJlY3Rpb24oKSwgc3RhdGUuc3R5
bGUoKS0+d3JpdGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7Ci0gICAg
ICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBh
cHBseVByb3BlcnR5KHN0YXRlLCBuZXdJZCwgdmFsdWUpOwogICAgIH0KICAgICBjYXNlIENTU1By
b3BlcnR5Rm9udFN0cmV0Y2g6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2U6CkBAIC0zNDcyLDcg
KzM0NjIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TCh3cml0aW5nTW9kZSwgV3JpdGluZ01vZGUpOwogICAgICAgICAKICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlKQotICAgICAgICAgICAgc2V0V3JpdGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsK
KyAgICAgICAgICAgIHN0YXRlLnNldFdyaXRpbmdNb2RlKCpwcmltaXRpdmVWYWx1ZSk7CiAKICAg
ICAgICAgLy8gRklYTUU6IEl0IGlzIG5vdCBvayB0byBtb2RpZnkgZG9jdW1lbnQgc3RhdGUgd2hp
bGUgYXBwbHlpbmcgc3R5bGUuCiAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgJiYgc3RhdGUu
ZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQpAQCAtMzQ4
NCw3ICszNDc0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwodGV4dE9yaWVudGF0aW9uLCBUZXh0T3JpZW50YXRpb24pOwogCiAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHNldFRleHRPcmllbnRhdGlvbigqcHJpbWl0aXZl
VmFsdWUpOworICAgICAgICAgICAgc3RhdGUuc2V0VGV4dE9yaWVudGF0aW9uKCpwcmltaXRpdmVW
YWx1ZSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1MDcsNyArMzQ5Nyw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgLy8gQ1NTIEZvbnRzIE1vZHVsZSBMZXZlbCAzCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7
Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oc3RhdGUuc3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHN0YXRl
LnNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5tYWtl
Tm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKQEAgLTM1MjYsNyArMzUxNiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBzZXR0aW5n
cy0+YXBwZW5kKEZvbnRGZWF0dXJlKGZlYXR1cmUtPnRhZygpLCBmZWF0dXJlLT52YWx1ZSgpKSk7
CiAgICAgICAgIH0KICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZlYXR1cmVTZXR0aW5ncyhz
ZXR0aW5ncy5yZWxlYXNlKCkpOwotICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1MzQsNyArMzUyNCw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9w
ZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMo
dmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9u
cykpCisgICAgICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHN0YXRlLCB2YWx1ZSwgc3Rh
dGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKSkKICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEZpbHRlcihvcGVyYXRpb25zKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTM4NTUsNzIgKzM4NDUsNzIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBkZWZh
dWx0OgogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMK
LSAgICAgICAgYXBwbHlTVkdQcm9wZXJ0eShpZCwgdmFsdWUpOworICAgICAgICBhcHBseVNWR1By
b3BlcnR5KHN0YXRlLCBpZCwgdmFsdWUpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9
CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0ltYWdl
VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0
eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBj
YWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJ
bWFnZVZhbHVlKj4odmFsdWUpKTsKIAogICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZh
bHVlKCkpIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19j
YXN0PENTU0dyYWRpZW50VmFsdWUqPih2YWx1ZSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVk
KHRoaXMpLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1
ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7
CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBw
cm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KHZhbHVlKS0+Z3JhZGllbnRX
aXRoU3R5bGVzUmVzb2x2ZWQoc3RhdGUpLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRl
ZE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqPih2YWx1ZSkpOwogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0Vf
U0VUKQogICAgIGlmICh2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBz
ZXRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFs
dWUqPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRl
LCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7CiAjZW5k
aWYKIAogICAgIGlmICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVy
biBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0N1cnNv
ckltYWdlVmFsdWUqPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJv
bVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+
KHZhbHVlKSk7CiAKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBT
dHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgQ1NTSW1hZ2VWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxl
UmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShTdGF0ZSYgc3RhdGUsIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQogewogICAgIFJlZlB0cjxTdHls
ZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwogICAgIGlmIChp
bWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIHN0YXRlLnBl
bmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4g
aW1hZ2UucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2
ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBD
U1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKFN0YXRlJiBzdGF0ZSwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCiB7CiAg
ICAgaWYgKHZhbHVlLT5pc1BlbmRpbmcoKSkgewotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgc3RhdGUucGVuZGlu
Z0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgICAgICByZXR1cm4g
U3R5bGVQZW5kaW5nSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiAgICAgfQogICAgIHJldHVybiBTdHls
ZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUodmFsdWUpOwogfQogCiAjaWYgRU5BQkxFKENTU19JTUFH
RV9TRVQpCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNldE9yUGVuZGlu
Z0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZhbHVlKiB2YWx1
ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJv
bVZhbHVlKFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VTZXRW
YWx1ZSogdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNh
Y2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxTdHlsZUltYWdl
PiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZVNldChzdGF0ZS5kb2N1bWVudCgp
KTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1f
c3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAg
ICAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7
CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBDU1NDdXJzb3JJbWFnZVZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8
U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKFN0YXRl
JiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogdmFs
dWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVu
ZGluZ0ltYWdlKGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZh
bHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZShzdGF0ZS5kb2N1bWVudCgpKTsKICAgICBpZiAoaW1h
Z2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fc3RhdGUucGVuZGluZ0lt
YWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBzdGF0ZS5wZW5k
aW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGlt
YWdlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXpl
QWRqdXN0KCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdChTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgpOwor
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0YXRlLnN0eWxlKCk7CiAKICAgICBpZiAoc3R5bGUt
PnRleHRTaXplQWRqdXN0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM5MzAsMTggKzM5MjAsMTgg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KCkKICAgICBzdHls
ZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5
bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFu
Z2UoU3RhdGUmIHN0YXRlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBGb250RGVzY3Jp
cHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBGb250RGVz
Y3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7Ci0gICAgc2V0Rm9udFNpemUo
bmV3Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKKyAgICBzZXRG
b250U2l6ZShzdGF0ZSwgbmV3Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6
ZSgpKTsKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJl
bmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQordm9pZCBTdHlsZVJl
c29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoU3RhdGUmIHN0YXRlLCBSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBjb25zdCBGb250
RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKIApAQCAt
Mzk3NSwxMSArMzk2NSwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0Zh
bWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKgogICAgIH0KIAogICAg
IEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKLSAgICBzZXRG
b250U2l6ZShuZXdGb250RGVzY3JpcHRpb24sIHNpemUpOworICAgIHNldEZvbnRTaXplKHN0YXRl
LCBuZXdGb250RGVzY3JpcHRpb24sIHNpemUpOwogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRp
b24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFs
aXplRm9udFN0eWxlKFNldHRpbmdzKiBzZXR0aW5ncykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6aW5p
dGlhbGl6ZUZvbnRTdHlsZShTdGF0ZSYgc3RhdGUsIFNldHRpbmdzKiBzZXR0aW5ncykKIHsKICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHkpOwpAQCAtMzk5
MSwxNiArMzk4MSwxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUo
U2V0dGluZ3MqIHNldHRpbmdzKQogICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHko
KS5hcHBlbmRGYW1pbHkoMCk7CiAgICAgfQogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3Jk
U2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgIHNldEZvbnRT
aXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1Zh
bHVlTWVkaXVtLCBmYWxzZSkpOwotICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgbV9zdGF0ZS5zZXRMaW5lSGVp
Z2h0VmFsdWUoMCk7Ci0gICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Cisg
ICAgc2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3Jk
KGRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSkpOworICAgIHN0YXRlLnN0eWxlKCkt
PnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHN0
YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKKyAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6c2V0Rm9udFNpemUoU3RhdGUmIHN0YXRlLCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKIHsKICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lm
aWVkU2l6ZShzaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENv
bXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIG1fc3RhdGUuc3R5bGUoKSwg
Zm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygp
KSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShzdGF0ZS5kb2N1bWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBmb250RGVz
Y3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCkp
KTsKIH0KIAogZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmll
ZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNBYnNv
bHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKQpAQCAt
NDE5OCwxMiArNDE4OCwxMSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQoQ1NTUHJpbWl0aXZlVmFsdQogICAgIH0KIH0KIAot
Q29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWUqIHZhbHVlLCBib29sIGZvclZpc2l0ZWRMaW5rKSBjb25zdAorQ29sb3IgU3R5bGVSZXNv
bHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspCiB7
CiAgICAgaWYgKHZhbHVlLT5pc1JHQkNvbG9yKCkpCiAgICAgICAgIHJldHVybiBDb2xvcih2YWx1
ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7CiAKLSAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OwogICAgIGludCBpZGVudCA9IHZhbHVlLT5nZXRJZGVudCgpOwogICAgIHN3aXRjaCAoaWRlbnQp
IHsKICAgICBjYXNlIDA6CkBAIC00NTQ5LDkgKzQ1MzgsOCBAQCBzdGF0aWMgRmlsdGVyT3BlcmF0
aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9wZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NTRmlsdGVy
VmFsdQogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotdm9pZCBT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBTdGF0ZSYg
c3RhdGUgPSBtX3N0YXRlOwogICAgIGlmICghc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwg
c3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC00NTc4LDI5ICs0NTY2LDI5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdT
VkdEb2N1bWVudHMoKQogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi1TdHlsZVNo
YWRlciogU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFkZXIoQ1NTVmFsdWUqIHZhbHVlKQorU3R5bGVT
aGFkZXIqIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKFN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNXZWJLaXRDU1NTaGFkZXJWYWx1ZSgpKQotICAg
ICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoc3RhdGljX2Nh
c3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUqPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY2FjaGVk
T3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoc3RhdGUsIHN0YXRpY19jYXN0PFdlYktpdENT
U1NoYWRlclZhbHVlKj4odmFsdWUpKTsKICAgICByZXR1cm4gMDsKIH0KIAotU3R5bGVTaGFkZXIq
IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFdlYktp
dENTU1NoYWRlclZhbHVlKiB2YWx1ZSkKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNo
ZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShTdGF0ZSYgc3RhdGUsIFdlYktpdENTU1No
YWRlclZhbHVlKiB2YWx1ZSkKIHsKICAgICBTdHlsZVNoYWRlciogc2hhZGVyID0gdmFsdWUtPmNh
Y2hlZE9yUGVuZGluZ1NoYWRlcigpOwogICAgIGlmIChzaGFkZXIgJiYgc2hhZGVyLT5pc1BlbmRp
bmdTaGFkZXIoKSkKLSAgICAgICAgbV9zdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyh0cnVlKTsK
KyAgICAgICAgc3RhdGUuc2V0SGFzUGVuZGluZ1NoYWRlcnModHJ1ZSk7CiAgICAgcmV0dXJuIHNo
YWRlcjsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMoKQordm9p
ZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMoU3RhdGUmIHN0YXRlKQogewotICAg
IGlmICghbV9zdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCAhbV9zdGF0ZS5oYXNQZW5kaW5n
U2hhZGVycygpKQorICAgIGlmICghc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgIXN0YXRl
Lmhhc1BlbmRpbmdTaGFkZXJzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhY2hlZFJlc291
cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVz
b3VyY2VMb2FkZXIgPSBzdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwog
Ci0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMg
PSBtX3N0YXRlLnN0eWxlKCktPm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CisgICAgVmVj
dG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5z
dHlsZSgpLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQo
aSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBG
aWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewpAQCAtNDYxNyw3ICs0NjA1LDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMoKQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQotICAgIG1fc3RhdGUuc2V0SGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpOworICAgIHN0
YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKTsKIH0KIAogc3RhdGljIGJvb2wgc29ydFBh
cmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0
ZXI+JiBhLCBjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYikKQEAgLTQ2NTUs
MTYgKzQ2NDMsMTYgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVz
b2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGUKICAgICByZXR1cm4gbnVtYmVy
UGFyYW1ldGVyLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0
ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKGNv
bnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMpCitQYXNzUmVmUHRyPEN1c3Rv
bUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zv
cm1QYXJhbWV0ZXIoU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlz
dCogdmFsdWVzKQogewogICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI+
IHRyYW5zZm9ybVBhcmFtZXRlciA9IEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcjo6Y3Jl
YXRlKG5hbWUpOwogICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBjcmVh
dGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgbV9zdGF0ZS5zdHlsZSgpLCBtX3N0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucyk7CisgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0
aW9ucyh2YWx1ZXMsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3Bl
cmF0aW9ucyk7CiAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlv
bnMpOwogICAgIHJldHVybiB0cmFuc2Zvcm1QYXJhbWV0ZXIucmVsZWFzZSgpOwogfQogCi1QYXNz
UmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21G
aWx0ZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSogcGFyYW1ldGVyVmFs
dWUpCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFy
c2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIG5hbWUs
IENTU1ZhbHVlKiBwYXJhbWV0ZXJWYWx1ZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90
aGVyIHBhcmFtZXRlcnMgdHlwZXMgcGFyc2luZy4KICAgICAvLyBib29sZWFuczogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDM4CkBAIC00Njg3LDcgKzQ2NzUsNyBA
QCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VD
dXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29ucwogICAgIC8vIGFyZSB0cmFuc2Zvcm1zLiBwYXJzZUN1
c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlciB3aWxsCiAgICAgLy8gcmV0dXJuIDAgaWYgdGhh
dCBhc3N1bXB0aW9uIGlzIGluY29ycmVjdC4KICAgICBpZiAodmFsdWVzLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDApLT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkpCi0gICAgICAgIHJldHVy
biBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihuYW1lLCB2YWx1ZXMpOworICAg
ICAgICByZXR1cm4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoc3RhdGUsIG5h
bWUsIHZhbHVlcyk7CiAKICAgICAvLyBXZSBjYW4gaGF2ZSBvbmx5IGFycmF5cyBvZiBib29sZWFu
cyBvciBudW1iZXJzLCBzbyB1c2UgdGhlIGZpcnN0IHZhbHVlIHRvIGNob29zZSBiZXR3ZWVuIHRo
b3NlIHR3by4KICAgICAvLyBXZSBuZWVkIHVwIHRvIDQgdmFsdWVzIChhbGwgYm9vbGVhbnMgb3Ig
YWxsIG51bWJlcnMpLgpAQCAtNDcwNCw3ICs0NjkyLDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNv
bnMKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZp
bHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVyTGlzdCkKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VD
dXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KFN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHBhcmFtZXRl
cnNWYWx1ZSwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVyTGlzdCkKIHsKICAg
ICBIYXNoU2V0PFN0cmluZz4ga25vd25QYXJhbWV0ZXJOYW1lczsKICAgICBDU1NWYWx1ZUxpc3RJ
dGVyYXRvciBwYXJhbWV0ZXJJdGVyYXRvcihwYXJhbWV0ZXJzVmFsdWUpOwpAQCAtNDcyOSw3ICs0
NzE3LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxp
c3QoQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3UKICAgICAgICAgaWYgKCFpdGVyYXRvci5o
YXNNb3JlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBS
ZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJhbWV0ZXIgPSBwYXJzZUN1c3RvbUZpbHRl
clBhcmFtZXRlcihuYW1lLCBpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgUmVmUHRyPEN1c3Rv
bUZpbHRlclBhcmFtZXRlcj4gcGFyYW1ldGVyID0gcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIo
c3RhdGUsIG5hbWUsIGl0ZXJhdG9yLnZhbHVlKCkpOwogICAgICAgICBpZiAoIXBhcmFtZXRlcikK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcGFyYW1ldGVyTGlzdC5hcHBlbmQo
cGFyYW1ldGVyLnJlbGVhc2UoKSk7CkBAIC00NzQ4LDcgKzQ3MzYsNyBAQCBQYXNzUmVmUHRyPEN1
c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uV2l0aAogICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9w
ZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aElu
bGluZVN5bnRheChXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCitQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uV2l0aElubGluZVN5bnRheChTdGF0ZSYgc3RhdGUsIFdlYktpdENTU0ZpbHRlclZh
bHVlKiBmaWx0ZXJWYWx1ZSkKIHsKICAgICBDU1NWYWx1ZSogc2hhZGVyc1ZhbHVlID0gZmlsdGVy
VmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oc2hhZGVyc1ZhbHVlLT5pc1ZhbHVlTGlzdCgpKTsKQEAgLTQ3NTcsNyAr
NDc0NSw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVy
OjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoCiAgICAgdW5zaWduZWQgc2hhZGVyc0xp
c3RMZW5ndGggPSBzaGFkZXJzTGlzdC0+bGVuZ3RoKCk7CiAgICAgQVNTRVJUKHNoYWRlcnNMaXN0
TGVuZ3RoKTsKIAotICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gdmVydGV4U2hhZGVyID0gc3R5bGVT
aGFkZXIoc2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgIFJlZlB0
cjxTdHlsZVNoYWRlcj4gdmVydGV4U2hhZGVyID0gc3R5bGVTaGFkZXIoc3RhdGUsIHNoYWRlcnNM
aXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKICAgICBSZWZQdHI8U3R5bGVTaGFkZXI+
IGZyYWdtZW50U2hhZGVyOwogICAgIEN1c3RvbUZpbHRlclByb2dyYW1UeXBlIHByb2dyYW1UeXBl
ID0gUFJPR1JBTV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRVUkU7CiAgICAgQ3VzdG9tRmlsdGVy
UHJvZ3JhbU1peFNldHRpbmdzIG1peFNldHRpbmdzOwpAQCAtNDc3MCw3ICs0NzU4LDcgQEAgUGFz
c1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3Rv
bUZpbHRlck9wZXJhdGlvbldpdGgKICAgICAgICAgICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGl0
ZXJhdG9yKG1peEZ1bmN0aW9uKTsKIAogICAgICAgICAgICAgQVNTRVJUKG1peEZ1bmN0aW9uLT5s
ZW5ndGgoKSk7Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKGl0ZXJh
dG9yLnZhbHVlKCkpOworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNoYWRlcihz
dGF0ZSwgaXRlcmF0b3IudmFsdWUoKSk7CiAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7
CiAKICAgICAgICAgICAgIEFTU0VSVChtaXhGdW5jdGlvbi0+bGVuZ3RoKCkgPD0gMyk7CkBAIC00
Nzg2LDcgKzQ3NzQsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aAogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHJvZ3JhbVR5cGUgPSBQUk9HUkFNX1RZUEVf
Tk9fRUxFTUVOVF9URVhUVVJFOwotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNo
YWRlcihmcmFnbWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOworICAgICAgICAgICAgZnJhZ21lbnRT
aGFkZXIgPSBzdHlsZVNoYWRlcihzdGF0ZSwgZnJhZ21lbnRTaGFkZXJPck1peEZ1bmN0aW9uKTsK
ICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTQ4NDIsMjMgKzQ4MzAsMjMgQEAgUGFzc1JlZlB0
cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRl
ck9wZXJhdGlvbldpdGgKICAgICAgICAgcGFyYW1ldGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMik7CiAgICAgCiAgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
TGlzdCBwYXJhbWV0ZXJMaXN0OwotICAgIGlmIChwYXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyTGlzdChwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQor
ICAgIGlmIChwYXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dChzdGF0ZSwgcGFyYW1ldGVyc1ZhbHVlLCBwYXJhbWV0ZXJMaXN0KSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgCiAgICAgUmVmUHRyPFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9
IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHZlcnRleFNoYWRlci5yZWxlYXNlKCks
IGZyYWdtZW50U2hhZGVyLnJlbGVhc2UoKSwgcHJvZ3JhbVR5cGUsIG1peFNldHRpbmdzLCBtZXNo
VHlwZSk7CiAgICAgcmV0dXJuIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKHByb2dyYW0u
cmVsZWFzZSgpLCBwYXJhbWV0ZXJMaXN0LCBtZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hUeXBl
KTsKIH0KIAotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6
OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVy
VmFsdWUpCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6
Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFN0YXRlJiBzdGF0ZSwgV2ViS2l0Q1NTRmlsdGVy
VmFsdWUqIGZpbHRlclZhbHVlKQogewogICAgIEFTU0VSVChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkp
OwogICAgIGJvb2wgaXNBdFJ1bGVSZWZlcmVuY2VTeW50YXggPSBmaWx0ZXJWYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygwKS0+aXNQcmltaXRpdmVWYWx1ZSgpOwotICAgIHJldHVybiBpc0F0
UnVsZVJlZmVyZW5jZVN5bnRheCA/IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhBdFJ1
bGVSZWZlcmVuY2VTeW50YXgoZmlsdGVyVmFsdWUpIDogY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uV2l0aElubGluZVN5bnRheChmaWx0ZXJWYWx1ZSk7CisgICAgcmV0dXJuIGlzQXRSdWxlUmVm
ZXJlbmNlU3ludGF4ID8gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVsZVJlZmVy
ZW5jZVN5bnRheChmaWx0ZXJWYWx1ZSkgOiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRo
SW5saW5lU3ludGF4KHN0YXRlLCBmaWx0ZXJWYWx1ZSk7CiB9CiAKICNlbmRpZgogCi1ib29sIFN0
eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJl
bmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9u
cyYgb3V0T3BlcmF0aW9ucykKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0
aW9ucyhTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMp
CiB7CiAgICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKICAgICAKQEAgLTQ4OTEs
NyArNDg3OSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhD
U1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRp
b246OkNVU1RPTSkgewotICAgICAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4g
b3BlcmF0aW9uID0gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKGZpbHRlclZhbHVlKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0
ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihzdGF0ZSwgZmlsdGVyVmFsdWUpOwogICAgICAgICAgICAg
aWYgKCFvcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgCkBAIC00OTA5LDEyICs0ODk3LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmls
dGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50
VmFsdWUqIHN2Z0RvY3VtZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NTVkdEb2N1bWVu
dFZhbHVlKj4oYXJndW1lbnQpOwotICAgICAgICAgICAgS1VSTCB1cmwgPSBtX3N0YXRlLmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKKyAgICAgICAgICAg
IEtVUkwgdXJsID0gc3RhdGUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1
ZS0+dXJsKCkpOwogCiAgICAgICAgICAgICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
PiBvcGVyYXRpb24gPSBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVu
dFZhbHVlLT51cmwoKSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsK
LSAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uo
c3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fc3RhdGUuZG9jdW1lbnQoKSkpIHsKKyAgICAgICAg
ICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1l
bnRWYWx1ZS0+dXJsKCksIHN0YXRlLmRvY3VtZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KCFzdmdEb2N1bWVudFZhbHVlLT5sb2FkUmVxdWVzdGVkKCkpCi0gICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0Rv
Y3VtZW50VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1l
bnRzKCkuc2V0KG9wZXJhdGlvbi5nZXQoKSwgc3ZnRG9jdW1lbnRWYWx1ZSk7CiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoc3ZnRG9jdW1lbnRWYWx1ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQoKSkKICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLT5zZXRDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5j
ZShhZG9wdFB0cihuZXcgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1
ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQoKSkpKTsKICAgICAgICAgICAgIH0KQEAgLTQ5OTgsNyArNDk4
Niw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1
ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAgICAgICAgICBpbnQgYmx1ciA9IGl0
ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHls
ZSwgem9vbUZhY3RvcikgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAg
ICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICAgICAgY29sb3IgPSBj
b2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgaXRlbS0+Y29sb3IuZ2V0KCkpOwogCiAgICAg
ICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoRHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbjo6Y3JlYXRlKGxvY2F0aW9uLCBibHVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6
IENvbG9yOjp0cmFuc3BhcmVudCwgb3BlcmF0aW9uVHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC01MDE2LDkgKzUwMDQsOSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9w
ZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogCiAjZW5kaWYK
IAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdl
KFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3RhdGUmIHN0YXRlLCBTdHlsZVBlbmRp
bmdJbWFnZSogcGVuZGluZ0ltYWdlKQogewotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNo
ZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBz
dGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCiAgICAgaWYgKHBlbmRp
bmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpKSB7CiAgICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdl
VmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFsdWUoKTsKQEAgLTUwNDYsMjkgKzUwMzQs
MjkgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0lt
YWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW4KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Omxv
YWRQZW5kaW5nSW1hZ2VzKFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAobV9zdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzKCkuaXNFbXB0eSgpKQorICAgIGlmIChzdGF0ZS5wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBQZW5kaW5nSW1h
Z2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0gbV9zdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzKCkuZW5kKCkua2V5cygpOwotICAgIGZvciAoUGVuZGluZ0ltYWdlUHJv
cGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzKCkuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFBlbmRp
bmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBzdGF0ZS5wZW5k
aW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5kKCkua2V5cygpOworICAgIGZvciAoUGVuZGluZ0ltYWdl
UHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gc3RhdGUucGVuZGluZ0ltYWdl
UHJvcGVydGllcygpLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
Q1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSAqaXQ7CiAKICAgICAgICAgc3dpdGNoIChj
dXJyZW50UHJvcGVydHkpIHsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFn
ZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3Rh
dGUuc3R5bGUoKS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJh
Y2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICBm
b3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzQmFj
a2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tn
cm91bmRMYXllci0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmRMYXll
ci0+aW1hZ2UoKSAmJiBiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRp
bmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGJhY2tncm91bmRMYXllci0+
aW1hZ2UoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFn
ZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRlLCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+
KGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OiB7Ci0g
ICAgICAgICAgICBmb3IgKENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29u
dGVudERhdGEqPihtX3N0YXRlLnN0eWxlKCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsg
Y29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKENv
bnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihzdGF0ZS5z
dHlsZSgpLT5jb250ZW50RGF0YSgpKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVu
dERhdGEtPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChjb250ZW50RGF0YS0+aXNJbWFn
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gc3RhdGljX2Nh
c3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+aW1hZ2UoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdl
KHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1h
Z2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChsb2FkZWRJbWFnZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5zZXRJ
bWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC01
MDc3LDQ2ICs1MDY1LDQ2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMo
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUN1cnNvcjogewotICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0
YXRlLnN0eWxlKCktPmN1cnNvcnMoKSkgeworICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1
cnNvckxpc3QgPSBzdGF0ZS5zdHlsZSgpLT5jdXJzb3JzKCkpIHsKICAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIEN1cnNvckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChp
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVudEN1
cnNvci5pbWFnZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVu
ZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5z
ZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4o
aW1hZ2UpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5zZXRJ
bWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRlLCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFn
ZSo+KGltYWdlKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5z
dHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1h
Z2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCkt
PnNldExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkpKSk7CisgICAgICAg
ICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBzdGF0ZS5zdHlsZSgp
LT5saXN0U3R5bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0
YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1h
Z2UoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5
bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdl
U291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHls
ZSgpLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkp
OworICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkgJiYg
c3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRlLCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0
eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewotICAgICAg
ICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1fc3RhdGUuc3R5bGUoKS0+
Ym94UmVmbGVjdCgpKSB7CisgICAgICAgICAgICBpZiAoU3R5bGVSZWZsZWN0aW9uKiByZWZsZWN0
aW9uID0gc3RhdGUuc3R5bGUoKS0+Ym94UmVmbGVjdCgpKSB7CiAgICAgICAgICAgICAgICAgY29u
c3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJbWFnZSA9IHJlZmxlY3Rpb24tPm1hc2soKTsKICAgICAg
ICAgICAgICAgICBpZiAobWFza0ltYWdlLmltYWdlKCkgJiYgbWFza0ltYWdlLmltYWdlKCktPmlz
UGVuZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+
IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJ
bWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxT
dHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19j
YXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdlLmltYWdlKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayhOaW5lUGllY2VJbWFnZShsb2FkZWRJbWFnZS5y
ZWxlYXNlKCksIG1hc2tJbWFnZS5pbWFnZVNsaWNlcygpLCBtYXNrSW1hZ2UuZmlsbCgpLCBtYXNr
SW1hZ2UuYm9yZGVyU2xpY2VzKCksIG1hc2tJbWFnZS5vdXRzZXQoKSwgbWFza0ltYWdlLmhvcml6
b250YWxSdWxlKCksIG1hc2tJbWFnZS52ZXJ0aWNhbFJ1bGUoKSkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAg
IGlmIChtX3N0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIG1fc3RhdGUuc3R5
bGUoKS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJ
bWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUoKS0+bWFz
a0JveEltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+bWFz
a0JveEltYWdlU291cmNlKCkgJiYgc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkt
PmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFz
a0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxl
UGVuZGluZ0ltYWdlKj4oc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza0ltYWdlOiB7Ci0gICAgICAgICAgICBmb3IgKEZpbGxMYXllciogbWFza0xheWVyID0g
bV9zdGF0ZS5zdHlsZSgpLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVy
ID0gbWFza0xheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNr
TGF5ZXIgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFz
a0xheWVyID0gbWFza0xheWVyLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAobWFza0xh
eWVyLT5pbWFnZSgpICYmIG1hc2tMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAg
ICAgICAgICAgICAgICAgICAgbWFza0xheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0
YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkpOworICAg
ICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3Rh
dGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTUxMjUs
MjIgKzUxMTMsMjIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5j
bGVhcigpOworICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5jbGVhcigpOwogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3VyY2VzKCkKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoU3RhdGUmIHN0YXRlKQogewogICAgIC8vIFN0
YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVu
ZGluZ0ltYWdlcygpOworICAgIGxvYWRQZW5kaW5nSW1hZ2VzKHN0YXRlKTsKIAogI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKICAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5j
ZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKKyAgICBsb2FkUGVu
ZGluZ1NoYWRlcnMoc3RhdGUpOwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KSAmJiBFTkFCTEUoU1ZHKQogICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIFNWRyBEb2N1bWVudHMg
cmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCk7
CisgICAgbG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoc3RhdGUpOwogI2VuZGlmCiB9CiAKQEAgLTUx
ODMsOCArNTE3MSw2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVt
b3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZE1lbWJl
cihtX2luc3BlY3RvckNTU09NV3JhcHBlcnMpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc2NvcGVS
ZXNvbHZlciwgInNjb3BlUmVzb2x2ZXIiKTsKIAotICAgIGluZm8uYWRkTWVtYmVyKG1fc3RhdGUs
ICJzdGF0ZSIpOwotCiAgICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byBhIHBsYWNlIHdoZXJlIGl0
IHdvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2U/CiAgICAgaW5mby5hZGRNZW1iZXIoQ1NTRGVmYXVs
dFN0eWxlU2hlZXRzOjpkZWZhdWx0U3R5bGUsICJkZWZhdWx0U3R5bGUiKTsKICAgICBpbmZvLmFk
ZE1lbWJlcihDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRRdWlya3NTdHlsZSwgImRlZmF1
bHRRdWlya3NTdHlsZSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggMmNkYWMx
ZWRhZTUxYjhlMzUwNDE1OTQ4MWJiNjMzZjhkMTIxMGJjOS4uMjg1NmQ3MzU5ZDMyNmNlODQ0Mzc1
MDMzMDVjOTU5OGQ3NTk5ZDc0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0y
NCw3ICsyNCw2IEBACiAKICNpbmNsdWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZUxp
c3QuaCIKLSNpbmNsdWRlICJDU1NUb1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRSdWxlU2V0cy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNT
U09NV3JhcHBlcnMuaCIKQEAgLTE3OCwxMyArMTc3LDggQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqLCBDU1NG
b250U2VsZWN0b3IqID0gMCk7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnN0eWxlKCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KLSAgICBSZW5kZXJTdHlsZSog
cm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpOyB9Ci0gICAgRWxlbWVudCogZWxlbWVudCgpIHsgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCgp
OyB9CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAg
IFN0eWxlU2NvcGVSZXNvbHZlciogc2NvcGVSZXNvbHZlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nv
cGVSZXNvbHZlci5nZXQoKTsgfQotICAgIGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUucGFyZW50Tm9kZSgpOyB9CiAKICAgICAvLyBGSVhNRTogSXQgY291bGQgYmUg
YmV0dGVyIHRvIGNhbGwgbV9ydWxlU2V0cy5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cygpIGRpcmVj
dGx5IGFmdGVyIHdlIGZhY3RvciBTdHlsZVJzb2x2ZXIgZnVydGhlci4KICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4ODkwCkBAIC0yMTAsMTcgKzIwNCwx
OCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIuZ2V0KCk7CiAgICAg
fQogI2VuZGlmCisgICAgY2xhc3MgU3RhdGU7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBpbml0RWxl
bWVudChFbGVtZW50Kik7Ci0gICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7Ci0g
ICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7Ci0g
ICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCk7CisgICAgdm9p
ZCBpbml0RWxlbWVudChTdGF0ZSYsIEVsZW1lbnQqKTsKKyAgICBSZW5kZXJTdHlsZSogbG9jYXRl
U2hhcmVkU3R5bGUoU3RhdGUmKTsKKyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNo
ZXNSdWxlU2V0KEVsZW1lbnQqLCBSdWxlU2V0Kik7CisgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5k
aWRhdGVNYXRjaGVzSG9zdFJ1bGVzKFN0YXRlJik7CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlz
dChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKLSAg
ICBTdHlsZWRFbGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWdu
ZWQmIGNvdW50KSBjb25zdDsKLSAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHls
ZWRFbGVtZW50KikgY29uc3Q7CisgICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHls
ZVNoYXJpbmcoY29uc3QgU3RhdGUmLCBOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKKyAg
ICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChjb25zdCBTdGF0ZSYsIFN0eWxlZEVsZW1l
bnQqKSBjb25zdDsKIAotICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJh
bWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZUtleWZyYW1lKiwgS2V5ZnJhbWVWYWx1
ZSYpOworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoU3RhdGUm
LCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVl
Jik7CiAKIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBiYWNrIHRoZSBz
ZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9yIGEgcHNldWRv
LWVsZW1lbnQpLgpAQCAtMjQzLDI1ICsyMzgsMjEgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQg
bGVnYWN5Rm9udFNpemUoRG9jdW1lbnQqLCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRV
c2VGaXhlZERlZmF1bHRTaXplKTsKIAogcHVibGljOgotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRv
U3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBSZW5kZXJTdHlsZSopOworICAgIHZvaWQg
YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCopOwogCi0gICAgdm9pZCBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVy
dHlJRCwgQ1NTVmFsdWUqKTsKLQotICAgIHZvaWQgdXBkYXRlRm9udCgpOwotICAgIHZvaWQgaW5p
dGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyopOworICAgIHZvaWQgdXBkYXRlRm9udChTdGF0ZSYp
OworICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZShTdGF0ZSYsIFNldHRpbmdzKik7CiAKICAg
ICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQq
LCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRT
aXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6
ZSk7CiAKLSAgICB2b2lkIHNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUp
OworICAgIHN0YXRpYyB2b2lkIHNldEZvbnRTaXplKFN0YXRlJiwgRm9udERlc2NyaXB0aW9uJiwg
ZmxvYXQgc2l6ZSk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6
ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiwgUmVuZGVyU3R5bGUqLCBib29sIGlzQWJzb2x1
dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcyk7CiAKIHB1
YmxpYzoKLSAgICBib29sIHVzZVNWR1pvb21SdWxlcygpOwotCiAgICAgc3RhdGljIGJvb2wgY29s
b3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVudChDU1NQcmltaXRpdmVWYWx1
ZSopOwotICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
KiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25zdDsKKyAgICBzdGF0aWMgQ29sb3Ig
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgU3RhdGUmLCBDU1NQcmltaXRpdmVWYWx1ZSos
IGJvb2wgZm9yVmlzaXRlZExpbmsgPSBmYWxzZSk7CiAKICAgICBib29sIGhhc1NlbGVjdG9yRm9y
SWQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CiAgICAgYm9vbCBoYXNTZWxlY3RvckZvckNs
YXNzKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwpAQCAtMjg5LDM0ICsyODAsMzQgQEAgcHVi
bGljOgogICAgIHZvaWQgaW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKIAogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NT
VmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKKyAgICBib29sIGNyZWF0ZUZp
bHRlck9wZXJhdGlvbnMoU3RhdGUmLCBDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGlu
U3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJh
dGlvbnMpOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBTdHlsZVNoYWRlciogc3R5bGVT
aGFkZXIoQ1NTVmFsdWUqKTsKLSAgICBTdHlsZVNoYWRlciogY2FjaGVkT3JQZW5kaW5nU3R5bGVT
aGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqKTsKLSAgICBib29sIHBhcnNlQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSosIEN1c3RvbUZpbHRlclBhcmFtZXRlckxp
c3QmKTsKLSAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21G
aWx0ZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSopOworICAgIFN0eWxl
U2hhZGVyKiBzdHlsZVNoYWRlcihTdGF0ZSYsIENTU1ZhbHVlKik7CisgICAgU3R5bGVTaGFkZXIq
IGNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFN0YXRlJiwgV2ViS2l0Q1NTU2hh
ZGVyVmFsdWUqKTsKKyAgICBib29sIHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChTdGF0
ZSYsIENTU1ZhbHVlKiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOworICAgIFBhc3NSZWZQ
dHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihTdGF0
ZSYsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqKTsKICAgICBQYXNzUmVmUHRyPEN1c3Rv
bUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcihjb25zdCBT
dHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCopOwogICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
UGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcihjb25zdCBTdHJpbmcm
IG5hbWUsIENTU1ZhbHVlTGlzdCopOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1l
dGVyPiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5h
bWUsIENTU1ZhbHVlTGlzdCopOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVy
PiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihTdGF0ZSYsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7CiAgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVy
YXRpb24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhBdFJ1bGVSZWZlcmVuY2VTeW50
YXgoV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKLSAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9w
ZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aElubGluZVN5bnRheChXZWJL
aXRDU1NGaWx0ZXJWYWx1ZSopOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9u
PiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKLSAg
ICB2b2lkIGxvYWRQZW5kaW5nU2hhZGVycygpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
T3BlcmF0aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KFN0
YXRlJiwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
ck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFN0YXRlJiwgV2ViS2l0Q1NT
RmlsdGVyVmFsdWUqKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nU2hhZGVycyhTdGF0ZSYpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFNWRykKLSAgICB2b2lkIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCk7
CisgICAgdm9pZCBsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyhTdGF0ZSYpOwogI2VuZGlmCiAjZW5k
aWYgLy8gRU5BQkxFKENTU19GSUxURVJTKQogCi0gICAgdm9pZCBsb2FkUGVuZGluZ1Jlc291cmNl
cygpOworICAgIHZvaWQgbG9hZFBlbmRpbmdSZXNvdXJjZXMoU3RhdGUmKTsKIAogcHJpdmF0ZToK
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBp
dCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdl
ZC4gLWR3aAotICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxl
KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5n
ZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgdm9pZCBjaGVj
a0ZvclRleHRTaXplQWRqdXN0KCk7CisgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFu
Z2UoU3RhdGUmLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAg
dm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoU3RhdGUmLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KFN0YXRlJik7
CiAKLSAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkanVzdFJl
bmRlclN0eWxlKFN0YXRlJiwgUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSwgRWxlbWVudCopOwogCiAgICAgc3RydWN0IFJ1bGVSYW5nZSB7CiAgICAg
ICAgIFJ1bGVSYW5nZShpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpOiBm
aXJzdFJ1bGVJbmRleChmaXJzdFJ1bGVJbmRleCksIGxhc3RSdWxlSW5kZXgobGFzdFJ1bGVJbmRl
eCkgeyB9CkBAIC0zNjMsMjUgKzM1NCwyNSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGFk
ZE1hdGNoZWRQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCog
cHJvcGVydGllcywgU3R5bGVSdWxlKiA9IDAsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoQWxsLCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdo
aXRlbGlzdE5vbmUpOwogICAgIHZvaWQgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhNYXRjaFJl
c3VsdCYsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqLCBib29sIGlzQ2FjaGVhYmxlID0gdHJ1ZSk7
CiAKLSAgICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVTTUlM
UHJvcGVydGllcyk7Ci0gICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmKTsKLSAgICB2
b2lkIG1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqKTsKLSAgICB2b2lkIG1hdGNo
QXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2
b2lkIG1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7
Ci0gICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhTdGF0ZSYsIE1h
dGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpOworICAgIHZvaWQgbWF0Y2hV
QVJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoVUFSdWxlcyhTdGF0
ZSYsIE1hdGNoUmVzdWx0JiwgUnVsZVNldCopOworICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhT
dGF0ZSYsIE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBt
YXRjaFVzZXJSdWxlcyhTdGF0ZSYsIE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cyk7CisgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQm
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoSG9zdFJ1bGVzKFN0YXRl
JiwgTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKIAotICAgIHZvaWQgY29s
bGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7Ci0gICAg
dm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmLCBS
dWxlUmFuZ2UmKTsKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBW
ZWN0b3I8UnVsZURhdGE+KiwgY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7CisgICAg
dm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhTdGF0ZSYsIGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1
bGVSYW5nZSYpOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oU3RhdGUm
LCBjb25zdCBNYXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdChTdGF0ZSYsIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBjb25zdCBN
YXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKIAogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9y
KGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7Ci0gICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0g
ICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2
b2lkIHNvcnRNYXRjaGVkUnVsZXMoU3RhdGUmKTsKKyAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhTdGF0ZSYsIE1hdGNoUmVzdWx0Jik7CiAKLSAgICBib29sIHJ1bGVNYXRjaGVz
KGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVkb0lkJiwg
U2VsZWN0b3JDaGVja2VyOjpCZWhhdmlvckF0Qm91bmRhcnkgPSBTZWxlY3RvckNoZWNrZXI6OkRv
ZXNOb3RDcm9zc0JvdW5kYXJ5KTsKKyAgICBib29sIHJ1bGVNYXRjaGVzKFN0YXRlJiwgY29uc3Qg
UnVsZURhdGEmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmLCBTZWxlY3Rv
ckNoZWNrZXI6OkJlaGF2aW9yQXRCb3VuZGFyeSA9IFNlbGVjdG9yQ2hlY2tlcjo6RG9lc05vdENy
b3NzQm91bmRhcnkpOwogICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDU1NTZWxl
Y3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwotICAgIHZvaWQg
YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQq
KTsKKyAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmLCBjb25zdCBNYXRjaFJl
c3VsdCYsIGNvbnN0IEVsZW1lbnQqKTsKICAgICBlbnVtIFN0eWxlQXBwbGljYXRpb25QYXNzIHsK
ICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICAgICAgVmFyaWFibGVEZWZpbml0aW9ucywK
QEAgLTM5MCwxMSArMzgxLDExIEBAIHByaXZhdGU6CiAgICAgICAgIExvd1ByaW9yaXR5UHJvcGVy
dGllcwogICAgIH07CiAgICAgdGVtcGxhdGUgPFN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Ci0g
ICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgYm9vbCBp
bXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25s
eSk7CisgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0YXRlJiwgY29uc3QgTWF0Y2hS
ZXN1bHQmLCBib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9v
bCBpbmhlcml0ZWRPbmx5KTsKICAgICB0ZW1wbGF0ZSA8U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFz
cz4KLSAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9w
ZXJ0aWVzLCBTdHlsZVJ1bGUqLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHks
IFByb3BlcnR5V2hpdGVsaXN0VHlwZSA9IFByb3BlcnR5V2hpdGVsaXN0Tm9uZSk7CisgICAgdm9p
ZCBhcHBseVByb3BlcnRpZXMoU3RhdGUmLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0
aWVzLCBTdHlsZVJ1bGUqLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFBy
b3BlcnR5V2hpdGVsaXN0VHlwZSA9IFByb3BlcnR5V2hpdGVsaXN0Tm9uZSk7CiAjaWYgRU5BQkxF
KENTU19WQVJJQUJMRVMpCi0gICAgdm9pZCByZXNvbHZlVmFyaWFibGVzKENTU1Byb3BlcnR5SUQs
IENTU1ZhbHVlKiwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtu
b3duRXhwcmVzc2lvbnMpOworICAgIHZvaWQgcmVzb2x2ZVZhcmlhYmxlcyhTdGF0ZSYsIENTU1By
b3BlcnR5SUQsIENTU1ZhbHVlKiwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJp
bmc+ID4mIGtub3duRXhwcmVzc2lvbnMpOwogI2VuZGlmCiAgICAgc3RhdGljIGJvb2wgaXNWYWxp
ZFJlZ2lvblN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQpAQCAtNDA0LDggKzM5NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXRjaFBhZ2VSdWxl
c0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLCBjb25zdCBWZWN0
b3I8U3R5bGVSdWxlUGFnZSo+JiwgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBj
b25zdCBTdHJpbmcmIHBhZ2VOYW1lKTsKICAgICBTZXR0aW5ncyogZG9jdW1lbnRTZXR0aW5ncygp
IHsgcmV0dXJuIG1fZG9jdW1lbnQtPnNldHRpbmdzKCk7IH0KIAotICAgIGJvb2wgaXNMZWZ0UGFn
ZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLSAgICBib29sIGlzUmlnaHRQYWdlKGludCBwYWdlSW5k
ZXgpIGNvbnN0IHsgcmV0dXJuICFpc0xlZnRQYWdlKHBhZ2VJbmRleCk7IH0KKyAgICBib29sIGlz
TGVmdFBhZ2UoU3RhdGUmLCBpbnQgcGFnZUluZGV4KSBjb25zdDsKKyAgICBib29sIGlzUmlnaHRQ
YWdlKFN0YXRlJiBzdGF0ZSwgaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBh
Z2Uoc3RhdGUsIHBhZ2VJbmRleCk7IH0KICAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5k
ZXgpIGNvbnN0OwogICAgIFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKIApA
QCAtNDE1LDE2ICs0MDYsMTcgQEAgcHJpdmF0ZToKICAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5
ZnJhbWVzUnVsZU1hcDsKIAogcHVibGljOgorCiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1Byb3Bl
cnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4gPiBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKICNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCiAgICAgdHlwZWRlZiBIYXNoTWFwPEZp
bHRlck9wZXJhdGlvbiosIFJlZlB0cjxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlPiA+IFBlbmRp
bmdTVkdEb2N1bWVudE1hcDsKICNlbmRpZgotCiAgICAgY2xhc3MgU3RhdGUgewogICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShTdGF0ZSk7CiAgICAgcHVibGljOgotICAgICAgICBTdGF0ZSgp
Ci0gICAgICAgIDogbV9lbGVtZW50KDApCisgICAgICAgIFN0YXRlKERvY3VtZW50KiBkb2N1bWVu
dCkKKyAgICAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICAgICAsIG1fZWxlbWVudCgw
KQogICAgICAgICAsIG1fc3R5bGVkRWxlbWVudCgwKQogICAgICAgICAsIG1fcGFyZW50Tm9kZSgw
KQogICAgICAgICAsIG1fcGFyZW50U3R5bGUoMCkKQEAgLTQ1MSw3ICs0NDMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShEb2N1bWVudCosIEVsZW1lbnQqLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5PUFNFVURPLCBSZW5kZXJS
ZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogCi0g
ICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC0+ZG9j
dW1lbnQoKTsgfQorICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2VsZW1lbnQ7IH0KICAgICAgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGVkRWxlbWVudDsgfQogICAgICAgICB2b2lkIHNldFN0eWxlKFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKSB7IG1fc3R5bGUgPSBzdHlsZTsgfQpAQCAtNTEyLDEx
ICs1MDQsMTAgQEAgcHVibGljOgogCiAgICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMy
PiYgbWF0Y2hlZFJ1bGVzKCkgeyByZXR1cm4gbV9tYXRjaGVkUnVsZXM7IH0KICAgICAgICAgdm9p
ZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5h
cHBlbmQocnVsZSk7IH0KKyAgICAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKSBjb25zdCB7IHJl
dHVybiBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsgfQogICAgICAgICAK
ICAgICBwcml2YXRlOgotICAgICAgICAvLyBGSVhNRShidWcgMTA4NTYzKTogdG8gbWFrZSBpdCBl
YXNpZXIgdG8gcmV2aWV3LCB0aGVzZSBtZW1iZXIKLSAgICAgICAgLy8gdmFyaWFibGVzIGFyZSBw
dWJsaWMuIEhvd2V2ZXIgd2Ugc2hvdWxkIGFkZCBtZXRob2RzIHRvIGFjY2VzcwotICAgICAgICAv
LyB0aGVzZSB2YXJpYWJsZXMuCisgICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgICAg
ICBFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHls
ZTsKICAgICAgICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OwpAQCAtNTYyLDMwICs1
NTMsMTggQEAgcHVibGljOgogCiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2
YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KIAotICAgIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwot
ICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1By
b3BlcnR5SUQsIENTU0ltYWdlVmFsdWUqKTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGdl
bmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVyYXRv
clZhbHVlKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShT
dGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3R5bGVJbWFnZT4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKFN0YXRlJiwgQ1NTUHJvcGVydHlJ
RCwgQ1NTSW1hZ2VWYWx1ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGdl
bmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqKTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJ
bWFnZVNldFZhbHVlKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc2V0T3JQ
ZW5kaW5nRnJvbVZhbHVlKFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VTZXRWYWx1ZSop
OwogI2VuZGlmCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjdXJzb3JPclBlbmRpbmdGcm9t
VmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSopOwotCi0gICAgYm9vbCBh
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpOyB9Ci0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjdXJz
b3JPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFn
ZVZhbHVlKik7CiAKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0ludExlbmd0aChDU1NQcmlt
aXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91Ymxl
IG11bHRpcGxpZXIgPSAxKTsKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0Zsb2F0TGVuZ3Ro
KENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxl
LCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwogCi0gICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVNYXAo
KSB7IHJldHVybiAmbV9zdHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGlu
c3BlY3RvckNTU09NV3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7
IH0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJu
IG1fc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24m
IHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Rm9udERlc2Ny
aXB0aW9uKCk7IH0KLSAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX3N0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOyB9Ci0gICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5zZXRa
b29tKGYpOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5z
ZXRFZmZlY3RpdmVab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIp
IHsgbV9zdGF0ZS5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQotICAgIHZvaWQgc2V0V3JpdGluZ01v
ZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5zZXRXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSk7IH0KLSAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24g
dGV4dE9yaWVudGF0aW9uKSB7IG1fc3RhdGUuc2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRh
dGlvbik7IH0KICAgICAKICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdElu
Zm8qKSBjb25zdDsKICAgICAKQEAgLTU5NSwxNiArNTc0LDE3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBjYW5T
aGFyZVN0eWxlV2l0aENvbnRyb2woY29uc3QgU3RhdGUmLCBTdHlsZWRFbGVtZW50KikgY29uc3Q7
CiAKLSAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAg
ICB2b2lkIGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwg
Q1NTVmFsdWUqKTsKKyAgICB2b2lkIGFwcGx5UHJvcGVydHkoU3RhdGUmLCBDU1NQcm9wZXJ0eUlE
LCBDU1NWYWx1ZSopOwogCiAjaWYgRU5BQkxFKFNWRykKLSAgICB2b2lkIGFwcGx5U1ZHUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHko
Y29uc3QgU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwogI2VuZGlmCiAKLSAgICBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2Uq
KTsKLSAgICB2b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisgICAgUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBsb2FkUGVuZGluZ0ltYWdlKFN0YXRlJiwgU3R5bGVQZW5kaW5nSW1hZ2UqKTsKKyAgICB2
b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKFN0YXRlJik7CiAKICAgICBzdGF0aWMgdW5zaWduZWQgY29t
cHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyosIHVuc2ln
bmVkIHNpemUpOwogICAgIHN0cnVjdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSB7CkBAIC02
MjIsNyArNjAyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN3ZWVwTWF0Y2hlZFByb3BlcnRpZXND
YWNoZShUaW1lcjxTdHlsZVJlc29sdmVyPiopOwogCiAgICAgYm9vbCBjbGFzc05hbWVzQWZmZWN0
ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIHNoYXJp
bmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRWxl
bWVudCopIGNvbnN0OworICAgIGJvb2wgc2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxl
QWZmZWN0aW5nQXR0cmlidXRlcyhjb25zdCBTdGF0ZSYsIFN0eWxlZEVsZW1lbnQqKSBjb25zdDsK
IAogICAgIHVuc2lnbmVkIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFz
dFN3ZWVwOwogCkBAIC02NDksMTEgKzYyOSw4IEBAIHByaXZhdGU6CiAgICAgY29uc3QgU3R5bGVC
dWlsZGVyJiBtX3N0eWxlQnVpbGRlcjsKIAogICAgIE93blB0cjxTdHlsZVNjb3BlUmVzb2x2ZXI+
IG1fc2NvcGVSZXNvbHZlcjsKLSAgICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7CiAgICAgSW5z
cGVjdG9yQ1NTT01XcmFwcGVycyBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7CiAKLSAgICBTdGF0
ZSBtX3N0YXRlOwotCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsKICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFBy
b3BlcnRpZXMmKTsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNoZWRQcm9w
ZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDQ0
MmMxOWU2YjUzNzNhZjY3YjU2MWFkMmJjYmIyYTAyMDQ4M2NmZWQuLjM3MGJlZGNhN2Q1Mzk1MDcx
NTU3Njg1OWI3Yzg3NjE1NjljMzUyMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMjA2NCwxOCArMjA2
NCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmlu
ZyYgbmV3Rm9udCkKIAogICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVydHkgbG9uZ2hhbmRz
IGludG8gdGhlIHN0eWxlLgogICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIgPSBjYW52
YXMoKS0+c3R5bGVSZXNvbHZlcigpOwotICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlU
b1N0eWxlKENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSwgbmV3U3R5bGUuZ2V0KCkpOwotICAg
IHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZv
bnRTdHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250
U3R5bGUpLmdldCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50
U3R5bGUoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudCkuZ2V0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIt
PmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBhcnNl
ZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkp
OwotCi0gICAgLy8gQXMgZGVzY3JpYmVkIGluIEJVRzY2MjkxLCBzZXR0aW5nIGZvbnQtc2l6ZSBh
bmQgbGluZS1oZWlnaHQgb24gYSBmb250IG1heSBlbnRhaWwgYSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y29tcHV0ZUxlbmd0aERvdWJsZSBjYWxsLAotICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZvbnRN
ZXRyaWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhlcndpc2UgYSBj
cmFzaCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85NjEyMiku
Ci0gICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxscyBiZWxvdyB1cGRhdGUgdGhlIGZvbnRNZXRy
aWNzIGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0aW5nIG9mIGZvbnQtc2l6ZSBhbmQgbGluZS1o
ZWlnaHQuCi0gICAgc3R5bGVSZXNvbHZlci0+dXBkYXRlRm9udCgpOwotICAgIHN0eWxlUmVzb2x2
ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJz
ZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKS5nZXQoKSk7
Ci0gICAgc3R5bGVSZXNvbHZlci0+dXBkYXRlRm9udCgpOwotICAgIHN0eWxlUmVzb2x2ZXItPmFw
cGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOwor
ICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5Rm9udFByb3BlcnR5VG9TdHlsZShuZXdTdHlsZS5nZXQo
KSwgcGFyc2VkU3R5bGUuZ2V0KCkpOwogCiAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9mb250ID0g
bmV3U3R5bGUtPmZvbnQoKTsKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2ZvbnQudXBkYXRlKHN0
eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189449</attachid>
            <date>2013-02-20 19:15:25 -0800</date>
            <delta_ts>2013-02-28 10:37:32 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-109909-20130221121146.patch</filename>
            <type>text/plain</type>
            <size>238835</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzdlMzdiYTk0MGE4MDYy
Y2E2OThkNWJmNTFkNTk3ZDVhMmI4NzQ4NC4uMjFkZDRjODBhNmY0YTc0NmRkMDUzNjM3MDIzY2E5
YjVlNGIwNGY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAxMy0wMi0xNSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmFjdG9yaW5n
XSBNYWtlIG1fc3RhdGUgYW4gb24tc3RhY2sgb2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk5MDkKKworICAgICAgICBSZXZpZXdlZCBieSBB
bnR0aSBLb2l2aXN0by4KKworICAgICAgICBNb2RlIG1fc3RhdGUsIGFuIGluc3RhbmNlIG9mIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlLCBhbiBvbi1zdGFjayBvYmplY3QuCisgICAgICAgIFRoZSBzdGF0
ZSBpcyBvbmx5IHJlcXVpcmVkIGluIHN0eWxlRm9yRWxlbWVudCwgc3R5bGVGb3JLZXlmcmFtZSBh
bmQKKyAgICAgICAgc28gb24uIE5vIG5lZWQgdG8ga2VlcCB0aGUgc3RhdGUgb3V0c2lkZSBvZiB0
aG9zZSBtZXRob2RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYmVjYXVzZSBqdXN0IHJlZmFj
dG9yaW5nLgorCisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udmVydFRvTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OmJhc2ljU2hh
cGVGb3JWYWx1ZSk6CisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJlc29sdmVyKiB3aXRoIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNv
bHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAgICAgKENTU0dy
YWRpZW50VmFsdWUpOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJlc29sdmVyKiB3aXRoIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
U3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxl
TWFwOjpzdHlsZUltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0eWxl
TWFwKToKKyAgICAgICAgKENTU1RvU3R5bGVNYXApOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJl
c29sdmVyKiB3aXRoIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvU1ZHQ1NT
U3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KToKKyAgICAgICAgUmVwbGFjZWQgbV9zdGF0ZSB3aXRoIHN0YXRlIHdoaWNo
IGlzIGdpdmVuIGFzIGFuIGFyZ3VtZW50IG9mCisgICAgICAgIGFwcGx5U1ZHUHJvcGVydHkuCisg
ICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5RXhwYW5kaW5nOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5RXhwYW5kaW5nOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5RXhwYW5kaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseUluaXRpYWxWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHQ6OmFwcGx5VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU51bWJlcjo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5U3R5bGVJbWFnZTo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjpjb252ZXJ0VG9MZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEaXJlY3Rpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5U3RyaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlCb3JkZXJSYWRpdXM6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRM
aWdhdHVyZXM6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBs
eUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2VNb2RpZmllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvdW50ZXI6OmVtcHR5RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvdW50ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDb3VudGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDdXJzb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDdXJzb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDdXJzb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eVRleHRBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5VGV4dERlY29yYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6YXBw
bHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBo
YXNpc1N0eWxlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlB
bmltYXRpb246Om1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QW5pbWF0aW9u
OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QW5p
bWF0aW9uOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5QW5pbWF0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlPdXRsaW5lU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVJlc2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5VmVydGljYWxBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0aW86OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlJbml0aWFsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjpyZXNldEVmZmVjdGl2
ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OmFwcGx5SW5oZXJp
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjphcHBseUluaXRp
YWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6YXBwbHlWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6aXNWYWxpZERpc3Bs
YXlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6YXBwbHlJ
bmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmFw
cGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwUGF0aDo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RXhjbHVzaW9uU2hh
cGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVz
b2x1dGlvbjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgICog
Y3NzL1N0eWxlQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQcm9wZXJ0
eUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjphcHBseUluaGVy
aXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6OmFwcGx5SW5pdGlh
bFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIFJlcGxhY2VkIFN0eWxlUmVzb2x2ZXIqIHdpdGggU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6CisgICAg
ICAgIFJlbW92ZWQgbV9zdHlsZU1hcC4gTm93IG1fc3R5bGVNYXAgaXMgYW4gb24tc3RhY2sgb2Jq
ZWN0LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c29ydE1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
aGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hh
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
dHlsZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVu
ZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0
ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzZXRGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpzdHlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZp
bHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIEp1c3QgcmVwbGFjZWQg
bV9zdGF0ZSB3aXRoIHN0YXRlIGFuZCBhZGRlZCBvbmUgbW9yZSBwYXJhbWV0ZXIgdG8KKyAgICAg
ICAgcHJvdmlkZSB0aGUgc3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIFNpbmNlIG1fc3RhdGUgd2FzIHJlbW92ZWQsIHJl
bW92ZWQgYSBjb2RlIGZvciByZXBvcnRpbmcgbV9zdGF0ZSdzCisgICAgICAgIG1lbW9yeSB1c2Fn
ZS4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppc1JpZ2h0UGFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRvY3VtZW50KToKKyAgICAgICAgU2luY2UgU3Rh
dGU6Om1fZWxlbWVudCBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZSAoc29tZXRpbWVzLCAwKSwKKyAg
ICAgICAgYWRkZWQgbV9kb2N1bWVudCB0byBTdGF0ZSBhbmQgbW9kaWZpZWQgdG8gcmV0dXJuIHRo
ZSBtX2RvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnVz
ZVNWR1pvb21SdWxlcyk6CisgICAgICAgIE1vdmVkIFN0eWxlUmVzb2x2ZXIgdG8gU3RhdGUuCisg
ICAgICAgIChTdGF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0Rm9udCk6CisgICAgICAgIE1vdmVkIHRoZSBjb2RlLCB1cGRhdGluZyBhIHN0eWxlIGJ5IHVz
aW5nIGEgZ2l2ZW4gU3R5bGVQcm9wZXJ0eVNldCwKKyAgICAgICAgdG8gU3R5bGVSZXNvbHZlci4K
KwogMjAxMy0wMi0yMCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVwc3RyZWFtIFNoYXJlZFRpbWVySU9TLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNT
aGFwZUZ1bmN0aW9ucy5jcHAKaW5kZXggM2E4Zjc5NTNiNmY5NmIwMTJmODQzMjM3YTJlMTJhMGZk
ZjRjYjEyMS4uYWE2Yjc0ZjI5YmFmYTIzZGEyMDFjZWU2MGQ4ODkwZDAzZTA1Y2ZkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmNwcApAQCAtMzQsNyArMzQsNiBA
QAogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFs
dWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgotI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMDAsMTIgKzk5LDEyIEBA
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yQmFzaWNTaGFwZShjb25zdCBCYXNpY1NoYXBl
KiBiYXNpY1NoYXBlKQogICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZTxQYXNz
UmVmUHRyPENTU0Jhc2ljU2hhcGU+ID4oYmFzaWNTaGFwZVZhbHVlLnJlbGVhc2UoKSk7CiB9CiAK
LXN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBMZW5ndGggY29udmVy
dFRvTGVuZ3RoKGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTUHJpbWl0aXZl
VmFsdWUqIHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVk
SW50ZWdlckNvbnZlcnNpb24gfCBGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJz
aW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3Ro
PEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRD
b252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
OwogfQogCi1QYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NCYXNpY1NoYXBlKiBiYXNpY1No
YXBlVmFsdWUpCitQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25z
dCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIGNvbnN0IENTU0Jhc2ljU2hhcGUqIGJhc2lj
U2hhcGVWYWx1ZSkKIHsKICAgICBSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZTsKIApAQCAt
MTE0LDE0ICsxMTMsMTQgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFs
dWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAgICAgY29uc3Qg
Q1NTQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NT
QmFzaWNTaGFwZVJlY3RhbmdsZSAqPihiYXNpY1NoYXBlVmFsdWUpOwogICAgICAgICBSZWZQdHI8
QmFzaWNTaGFwZVJlY3RhbmdsZT4gcmVjdCA9IEJhc2ljU2hhcGVSZWN0YW5nbGU6OmNyZWF0ZSgp
OwogCi0gICAgICAgIHJlY3QtPnNldFgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJl
Y3RWYWx1ZS0+eCgpKSk7Ci0gICAgICAgIHJlY3QtPnNldFkoY29udmVydFRvTGVuZ3RoKHN0eWxl
UmVzb2x2ZXIsIHJlY3RWYWx1ZS0+eSgpKSk7Ci0gICAgICAgIHJlY3QtPnNldFdpZHRoKGNvbnZl
cnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPndpZHRoKCkpKTsKLSAgICAgICAg
cmVjdC0+c2V0SGVpZ2h0KGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUt
PmhlaWdodCgpKSk7CisgICAgICAgIHJlY3QtPnNldFgoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBy
ZWN0VmFsdWUtPngoKSkpOworICAgICAgICByZWN0LT5zZXRZKGNvbnZlcnRUb0xlbmd0aChzdGF0
ZSwgcmVjdFZhbHVlLT55KCkpKTsKKyAgICAgICAgcmVjdC0+c2V0V2lkdGgoY29udmVydFRvTGVu
Z3RoKHN0YXRlLCByZWN0VmFsdWUtPndpZHRoKCkpKTsKKyAgICAgICAgcmVjdC0+c2V0SGVpZ2h0
KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT5oZWlnaHQoKSkpOwogICAgICAgICBp
ZiAocmVjdFZhbHVlLT5yYWRpdXNYKCkpIHsKLSAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJh
ZGl1c1goY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+cmFkaXVzWCgp
KSk7CisgICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNYKGNvbnZlcnRUb0xlbmd0aChz
dGF0ZSwgcmVjdFZhbHVlLT5yYWRpdXNYKCkpKTsKICAgICAgICAgICAgIGlmIChyZWN0VmFsdWUt
PnJhZGl1c1koKSkKLSAgICAgICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNZKGNvbnZl
cnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPnJhZGl1c1koKSkpOworICAgICAg
ICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0YXRlLCBy
ZWN0VmFsdWUtPnJhZGl1c1koKSkpOwogICAgICAgICB9CiAgICAgICAgIGJhc2ljU2hhcGUgPSBy
ZWN0LnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMzAsOSArMTI5LDkgQEAgUGFzc1Jl
ZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgY28KICAgICAgICAgY29uc3QgQ1NTQmFzaWNTaGFwZUNpcmNsZSogY2ly
Y2xlVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1NCYXNpY1NoYXBlQ2lyY2xlICo+KGJhc2lj
U2hhcGVWYWx1ZSk7CiAgICAgICAgIFJlZlB0cjxCYXNpY1NoYXBlQ2lyY2xlPiBjaXJjbGUgPSBC
YXNpY1NoYXBlQ2lyY2xlOjpjcmVhdGUoKTsKIAotICAgICAgICBjaXJjbGUtPnNldENlbnRlclgo
Y29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNsZVZhbHVlLT5jZW50ZXJYKCkpKTsK
LSAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVy
LCBjaXJjbGVWYWx1ZS0+Y2VudGVyWSgpKSk7Ci0gICAgICAgIGNpcmNsZS0+c2V0UmFkaXVzKGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBjaXJjbGVWYWx1ZS0+cmFkaXVzKCkpKTsKKyAg
ICAgICAgY2lyY2xlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgY2lyY2xlVmFs
dWUtPmNlbnRlclgoKSkpOworICAgICAgICBjaXJjbGUtPnNldENlbnRlclkoY29udmVydFRvTGVu
Z3RoKHN0YXRlLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWSgpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0
UmFkaXVzKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgY2lyY2xlVmFsdWUtPnJhZGl1cygpKSk7CiAK
ICAgICAgICAgYmFzaWNTaGFwZSA9IGNpcmNsZS5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwpA
QCAtMTQxLDEwICsxNDAsMTAgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9y
VmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAgICAgY29u
c3QgQ1NTQmFzaWNTaGFwZUVsbGlwc2UqIGVsbGlwc2VWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0
IENTU0Jhc2ljU2hhcGVFbGxpcHNlICo+KGJhc2ljU2hhcGVWYWx1ZSk7CiAgICAgICAgIFJlZlB0
cjxCYXNpY1NoYXBlRWxsaXBzZT4gZWxsaXBzZSA9IEJhc2ljU2hhcGVFbGxpcHNlOjpjcmVhdGUo
KTsKIAotICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJl
c29sdmVyLCBlbGxpcHNlVmFsdWUtPmNlbnRlclgoKSkpOwotICAgICAgICBlbGxpcHNlLT5zZXRD
ZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPmNlbnRl
clkoKSkpOwotICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNYKGNvbnZlcnRUb0xlbmd0aChzdHls
ZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1goKSkpOwotICAgICAgICBlbGxpcHNlLT5z
ZXRSYWRpdXNZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPnJh
ZGl1c1koKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChz
dGF0ZSwgZWxsaXBzZVZhbHVlLT5jZW50ZXJYKCkpKTsKKyAgICAgICAgZWxsaXBzZS0+c2V0Q2Vu
dGVyWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1ZS0+Y2VudGVyWSgpKSk7Cisg
ICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1goY29udmVydFRvTGVuZ3RoKHN0YXRlLCBlbGxpcHNl
VmFsdWUtPnJhZGl1c1goKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNZKGNvbnZlcnRU
b0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5yYWRpdXNZKCkpKTsKIAogICAgICAgICBiYXNp
Y1NoYXBlID0gZWxsaXBzZS5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTU2LDcgKzE1
NSw3IEBAIFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvCiAgICAgICAgIHBvbHlnb24tPnNldFdpbmRS
dWxlKHBvbHlnb25WYWx1ZS0+d2luZFJ1bGUoKSk7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+ID4mIHZhbHVlcyA9IHBvbHlnb25WYWx1ZS0+dmFsdWVzKCk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyBpICs9IDIp
Ci0gICAgICAgICAgICBwb2x5Z29uLT5hcHBlbmRQb2ludChjb252ZXJ0VG9MZW5ndGgoc3R5bGVS
ZXNvbHZlciwgdmFsdWVzLmF0KGkpLmdldCgpKSwgY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2
ZXIsIHZhbHVlcy5hdChpICsgMSkuZ2V0KCkpKTsKKyAgICAgICAgICAgIHBvbHlnb24tPmFwcGVu
ZFBvaW50KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgdmFsdWVzLmF0KGkpLmdldCgpKSwgY29udmVy
dFRvTGVuZ3RoKHN0YXRlLCB2YWx1ZXMuYXQoaSArIDEpLmdldCgpKSk7CiAKICAgICAgICAgYmFz
aWNTaGFwZSA9IHBvbHlnb24ucmVsZWFzZSgpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oCmluZGV4IGQzNjA3ZTkwOTkyOWMzNDFiMGMwNjlk
M2U1Y2ViNjFmMTNmMTE3MTkuLmU1NjMyMDY4NzY4YTY3MDFmODAzZmIyYWZlZjU0ODk4NTMxZDEx
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaApAQCAtMzAsNiAr
MzAsNyBAQAogI2lmbmRlZiBCYXNpY1NoYXBlRnVuY3Rpb25zX2gKICNkZWZpbmUgQmFzaWNTaGFw
ZUZ1bmN0aW9uc19oCiAKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsMTAgKzM4LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQmFzaWNTaGFwZTsKIGNsYXNzIENTU0Jhc2ljU2hh
cGU7CiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlRm9yQmFzaWNTaGFwZShjb25zdCBCYXNpY1NoYXBlKik7Ci1QYXNzUmVm
UHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiwg
Y29uc3QgQ1NTQmFzaWNTaGFwZSopOworUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBl
Rm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmLCBjb25zdCBDU1NCYXNpY1NoYXBl
Kik7CiAKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRp
ZW50VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmlu
ZGV4IDhmMTY4YWI3MmNlMzA3NTZkZTAzNDE3ODRkZjgwMGZkMzc2MGJmMmUuLmU1NjVlZmY1YWU0
MTg4MzZmNWRlZDIxNDc3OWEwNDhjZWVkYjk4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJJbnRTaXplSGFzaC5o
IgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5z
dHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvblZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTExNSwxMSArMTE0
LDExIEBAIHN0cnVjdCBHcmFkaWVudFN0b3AgewogICAgIHsgfQogfTsKIAotUGFzc1JlZlB0cjxD
U1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNv
bHZlZChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorUGFzc1JlZlB0cjxDU1NHcmFkaWVu
dFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiB7CiAgICAgYm9vbCBkZXJpdmVkID0gZmFsc2U7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyBpKyspCi0gICAgICAg
IGlmIChzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21F
bGVtZW50KG1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSkpIHsKKyAgICAgICAgaWYgKFN0eWxlUmVz
b2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQobV9zdG9w
c1tpXS5tX2NvbG9yLmdldCgpKSkgewogICAgICAgICAgICAgbV9zdG9wc1tpXS5tX2NvbG9ySXNE
ZXJpdmVkRnJvbUVsZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgZGVyaXZlZCA9IHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTEzOCw3ICsxMzcsNyBAQCBQYXNzUmVmUHRyPENTU0dyYWRp
ZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0
eWxlUgogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHQtPm1fc3Rv
cHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJlc3VsdC0+bV9zdG9wc1tpXS5tX3Jlc29sdmVkQ29s
b3IgPSBzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShyZXN1bHQtPm1fc3Rv
cHNbaV0ubV9jb2xvci5nZXQoKSk7CisgICAgICAgIHJlc3VsdC0+bV9zdG9wc1tpXS5tX3Jlc29s
dmVkQ29sb3IgPSBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwg
cmVzdWx0LT5tX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRW
YWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAppbmRleCA4ZTFj
NzdiNjQxMTBkOTk2N2QzNzIxYjFjYWZjMDVmMjlmODExNTJmLi40NTk4MWUyZTU2YWZlMzFjMWY4
NzZmODAxNGEwZTJhOGNkODhkMWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JhZGllbnRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUu
aCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CkBAIC04OSw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGtub3duVG9CZU9wYXF1ZShjb25z
dCBSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIHZvaWQgbG9hZFN1YmltYWdlcyhDYWNoZWRS
ZXNvdXJjZUxvYWRlciopIHsgfQotICAgIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gZ3Jh
ZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZlciopOworICAgIFBhc3NSZWZQdHI8
Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZl
cjo6U3RhdGUmKTsKIAogcHJvdGVjdGVkOgogICAgIENTU0dyYWRpZW50VmFsdWUoQ2xhc3NUeXBl
IGNsYXNzVHlwZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0LCBDU1NHcmFkaWVudFR5cGUgZ3Jh
ZGllbnRUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCmluZGV4IDcyMWZkOGU5
MDFiNWViYmYxY2Y2Y2Q3NDlmYThmNTNmMWNmYmE0OWIuLmZkYzA0Y2FmZDMwNmRhOTY4MDBlMGFl
MzZhZTg3NjYyNzdjMWZiZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0
eWxlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKQEAg
LTQzLDIyICs0MywyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlclN0eWxlKiBDU1NU
b1N0eWxlTWFwOjpzdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnN0eWxl
KCk7CisgICAgcmV0dXJuIG1fc3RhdGUuc3R5bGUoKTsKIH0KICAgICAKIFJlbmRlclN0eWxlKiBD
U1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9y
ZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpOworICAgIHJldHVybiBtX3N0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKTsKIH0KIAogYm9vbCBDU1NUb1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMoKSBj
b25zdAogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT51c2VTVkdab29tUnVsZXMoKTsKKyAgICBy
ZXR1cm4gbV9zdGF0ZS51c2VTVkdab29tUnVsZXMoKTsKIH0KICAgICAKIFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gQ1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGVJbWFn
ZShwcm9wZXJ0eUlkLCB2YWx1ZSk7CisgICAgcmV0dXJuIFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1h
Z2UobV9zdGF0ZSwgcHJvcGVydHlJZCwgdmFsdWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6
Om1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFw
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCmluZGV4IDNjYjEyMTUwYTg0
M2U4YTQ4ZTM5YTViNTQxMzU3NTkyOTRjNDE2NzMuLjdmODcyMGE0ODZjOTJjYTRjMzBhZjY0MzRk
ZThmOThkYjdlMmRiZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaApAQCAtMjQsNiAr
MjQsNyBAQAogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkxlbmd0
aEJveC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIgCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzIsNyArMzMsNiBAQCBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIEFuaW1hdGlvbjsK
IGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3R5bGVJbWFnZTsKLWNsYXNzIFN0eWxlUmVzb2x2
ZXI7CiBjbGFzcyBOaW5lUGllY2VJbWFnZTsKIAogY2xhc3MgQ1NTVG9TdHlsZU1hcCB7CkBAIC00
MCw3ICs0MCw3IEBAIGNsYXNzIENTU1RvU3R5bGVNYXAgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgQ1NTVG9TdHlsZU1hcChTdHlsZVJlc29sdmVyKiByZXNv
bHZlcikgOiBtX3Jlc29sdmVyKHJlc29sdmVyKSB7IH0KKyAgICBDU1NUb1N0eWxlTWFwKFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkgOiBtX3N0YXRlKHN0YXRlKSB7IH0KIAogICAgIHZvaWQg
bWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsK
ICAgICB2b2lkIG1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVl
Kik7CkBAIC04Miw3ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgLy8gZHVyaW5nIHRoZSByZXNvbHZl
LgogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSopOwogCi0gICAgU3R5bGVSZXNvbHZlciogbV9yZXNvbHZlcjsKKyAgICBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgbV9zdGF0ZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdD
U1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCBkMWU5YzYwZDNiOWRlZDdlMjBmYzc2NWU5Yzc3YTQz
MTZlM2I2ZDEzLi45MjZjNjkxYThiZjQ2ODZkYTE4Yzk1YTQ4YzYxM2IyMWU2NmNiNjZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0xMDIsMTQgKzEw
MiwxMyBAQCBzdGF0aWMgQ29sb3IgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShTVkdDb2xvciog
c3ZnQ29sb3IsIGNvbnN0IENvbG9yJiBmZ0NvbG9yKQogICAgIHJldHVybiBjb2xvcjsKIH0KIAot
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShjb25z
dCBTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAg
ICBBU1NFUlQodmFsdWUpOwogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IDA7CiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKLSAgICBj
b25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHls
ZSA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7CiAKICAgICBib29sIGlzSW5oZXJp
dCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOwpAQCAt
MjMxLDE2ICsyMzAsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKGlzSW5oZXJpdCkgewogICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBz
dmdQYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAg
ICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50
VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUt
PmZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0
RmlsbFBhaW50KHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxl
LT5maWxsUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VXJpKCksIHN0YXRl
LmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+
c2V0RmlsbFBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VHlwZSgpLCBTVkdS
ZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0
aWFsRmlsbFBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1Jl
bmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRp
YWxGaWxsUGFpbnRVcmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0
YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50
KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQYWludCogc3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxT
VkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50
KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWlu
dCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7Cisg
ICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYWludC0+cGFpbnRUeXBl
KCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNv
bG9yKCkpLCBzdmdQYWludC0+dXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI0OCwxNiArMjQ3LDE2IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsK
ICAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRTdHJva2VQYWludChzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRUeXBlKCksIHN2Z1Bh
cmVudFN0eWxlLT5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWlu
dFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFp
bnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+c3Ry
b2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRVcmkoKSwgc3RhdGUu
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBT
VkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwg
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdz
dHlsZS0+c2V0U3Ryb2tlUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFR5
cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludENvbG9yKCksIFNWR1JlbmRl
clN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRVcmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZh
bHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQYWludCogc3ZnUGFpbnQg
PSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xv
ckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVy
aSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQo
c3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50
LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBzdGF0ZS5hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC01NzAsNyArNTY5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGludCBibHVyID0g
aXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpIDogMDsKICAgICAgICAgICAgIENvbG9yIGNvbG9y
OwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0g
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAg
ICAgIGNvbG9yID0gU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUs
IGl0ZW0tPmNvbG9yLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gLXdlYmtpdC1zdmctc2hhZG93
IGRvZXMgc2hvdWxkIG5vdCBoYXZlIGEgc3ByZWFkIG9yIHN0eWxlCiAgICAgICAgICAgICBBU1NF
UlQoIWl0ZW0tPnNwcmVhZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVC
dWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCmluZGV4IDRk
ODc4YjJlOWIzMjVlMjVlZTM2YWQ4Y2JmMmIyMDBmMmYzODIxMGEuLjFiYjYxMDRlZjllMmE2OGUz
N2FhZTJkMWNjODBkZDIxYmI0MjI4MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3Bw
CkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgogCkBAIC02MSw3ICs2MCw3IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlFeHBhbmRp
bmcgewogcHVibGljOgogCiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3Rh
dGljIGlubGluZSB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQg
YXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
OjpTdGF0ZSYgc3RhdGUpCiAgICAgewogICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZh
bGlkKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjksMjAgKzY4LDIwIEBAIHB1YmxpYzoKICAg
ICAgICAgY29uc3QgU3R5bGVCdWlsZGVyJiB0YWJsZSA9IFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5
bGVCdWlsZGVyKCk7CiAgICAgICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IHRh
YmxlLnByb3BlcnR5SGFuZGxlcihpZCk7CiAgICAgICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkK
LSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVS
ZXNvbHZlcik7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5
SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBhcHBseUluaGVy
aXRWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUlu
aGVyaXRWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBs
eUluaGVyaXRWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAg
IGFwcGx5SW5oZXJpdFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAg
ICAgICBhcHBseUluaGVyaXRWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsK
KyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAg
ICAgIGFwcGx5SW5oZXJpdFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBh
cHBseUluaGVyaXRWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBs
eUluaGVyaXRWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5o
ZXJpdFZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZSA8Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAg
ICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC05MCwyMCArODksMjAgQEAgcHVibGljOgogICAgICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRh
YmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKTsKICAgICAgICAgY29uc3Qg
UHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUucHJvcGVydHlIYW5kbGVyKGlkKTsKICAg
ICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUlu
aXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIGhhbmRs
ZXIuYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSkKICAgICB7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPHR3bz4ocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPHRocmVlPihwcm9wZXJ0
eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zm91cj4ocHJv
cGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZpdmU+
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxv
bmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dHdvPihw
cm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPHRocmVlPihwcm9w
ZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZvdXI+KHByb3BlcnR5
SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwg
c3RhdGUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
aWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTExLDE5
ICsxMTAsMTkgQEAgcHVibGljOgogICAgICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0g
U3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVy
dHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAg
aWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBw
bHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCFleHBhbmRWYWx1ZSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBhcHBseVZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBseVZhbHVlPHR3bz4ocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBseVZhbHVlPHRocmVlPihwcm9wZXJ0
eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgICAgIGFwcGx5VmFsdWU8Zm91cj4ocHJv
cGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBseVZhbHVlPGZpdmU+
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTxv
bmU+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8dHdvPihw
cm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPHRocmVlPihwcm9w
ZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPGZvdXI+KHByb3BlcnR5
SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwg
c3RhdGUsIHZhbHVlKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFw
cGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KIH07CkBAIC0xMzQsOSArMTMzLDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgU2V0
dGVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAg
c3RhdGljIEdldHRlclR5cGUgdmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5
bGUtPipnZXR0ZXJGdW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyBJbml0aWFsVHlwZSBpbml0aWFs
KCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24pKCk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KSB7IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnBhcmVudFN0eWxlKCkpKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgaW5pdGlhbCgpKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciosIENTU1ZhbHVlKikgeyB9CisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
cjo6U3RhdGUmIHN0YXRlKSB7IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHZhbHVlKHN0YXRlLnBh
cmVudFN0eWxlKCkpKTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkgeyBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCBpbml0aWFsKCkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYsIENTU1ZhbHVlKikgeyB9CiAgICAgc3RhdGlj
IFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVy
KCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0K
IH07CiAKQEAgLTE0NCwxMCArMTQzLDEwIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBHZXR0ZXJUeXBl
LCBHZXR0ZXJUeXBlIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0CiBjbGFz
cyBBcHBseVByb3BlcnR5RGVmYXVsdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFs
dWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRl
ckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOworICAgICAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKICAgICB7CkBAIC0xNjAsMTYgKzE1OSwxNiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TnVtYmVyVHlwZSwgTnVtYmVyVHlwZSAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBj
b25zdAogY2xhc3MgQXBwbHlQcm9wZXJ0eU51bWJlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBOdW1iZXJUeXBlIHZhbHVlKSB7IChzdHls
ZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYg
KCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gaWRNYXBzVG9NaW51c09uZSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIC0xKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCks
IC0xKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlPE51bWJlclR5cGU+KENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
LCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKICAgICB7CkBAIC0xODEsNyArMTgwLDcgQEAgcHVibGljOgogdGVtcGxhdGUgPFN0
eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5
bGVJbWFnZSogKCppbml0aWFsRnVuY3Rpb24pKCksIENTU1Byb3BlcnR5SUQgcHJvcGVydHk+CiBj
bGFzcyBBcHBseVByb3BlcnR5U3R5bGVJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlv
bikoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsgfQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlv
bikoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwgcHJvcGVydHksIHZhbHVlKSk7IH0K
ICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKICAgICAg
ICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8U3R5
bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+LCBzZXR0ZXJG
dW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsK
QEAgLTE5OCwyOCArMTk3LDI4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBoYXNBdXRvKFJl
bmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaGFzQXV0b0Z1bmN0aW9uKSgpOyB9
CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0byhSZW5kZXJTdHlsZSogc3R5bGUpIHsgKHN0eWxlLT4q
c2V0QXV0b0Z1bmN0aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGlmIChoYXNBdXRvKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCkpKQotICAgICAgICAgICAgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHlsZSgp
KTsKKyAgICAgICAgaWYgKGhhc0F1dG8oc3RhdGUucGFyZW50U3R5bGUoKSkpCisgICAgICAgICAg
ICBzZXRBdXRvKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCB2YWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRT
dHlsZSgpKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCB2YWx1ZShzdGF0
ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgeyBzZXRB
dXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKSB7IHNl
dEF1dG8oc3RhdGUuc3R5bGUoKSk7IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
cjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBhdXRvSWRlbnRpdHkpCi0gICAgICAgICAgICBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCkpOworICAgICAgICAgICAgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgZWxz
ZSBpZiAodmFsdWVUeXBlID09IE51bWJlcikKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCAqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZVR5
cGUgPT0gQ29tcHV0ZUxlbmd0aCkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigp
IHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRp
YWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0yMjcsMjcgKzIyNiwyNyBAQCBwdWJsaWM6CiAK
IGNsYXNzIEFwcGx5UHJvcGVydHlDbGlwIHsKIHByaXZhdGU6Ci0gICAgc3RhdGljIExlbmd0aCBj
b252ZXJ0VG9MZW5ndGgoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTUHJpbWl0aXZl
VmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lv
biB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgQXV0b0NvbnZlcnNp
b24+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5
bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBl
cmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpKTsKICAgICB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKTsK
KyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUoKTsK
ICAgICAgICAgaWYgKCFwYXJlbnRTdHlsZS0+aGFzQ2xpcCgpKQotICAgICAgICAgICAgcmV0dXJu
IGFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHBhcmVudFN0eWxlLT5jbGlwVG9wKCksIHBh
cmVudFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50
U3R5bGUtPmNsaXBMZWZ0KCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRI
YXNDbGlwKHRydWUpOworICAgICAgICAgICAgcmV0dXJuIGFwcGx5SW5pdGlhbFZhbHVlKHByb3Bl
cnR5SUQsIHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q2xpcChwYXJlbnRTdHls
ZS0+Y2xpcFRvcCgpLCBwYXJlbnRTdHlsZS0+Y2xpcFJpZ2h0KCksIHBhcmVudFN0eWxlLT5jbGlw
Qm90dG9tKCksIHBhcmVudFN0eWxlLT5jbGlwTGVmdCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0SGFzQ2xpcCh0cnVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgo
KSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yNTUsMTUgKzI1NCwxNSBAQCBwdWJsaWM6CiAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgICAgIGlmIChSZWN0KiByZWN0ID0gcHJpbWl0aXZl
VmFsdWUtPmdldFJlY3RWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVy
dFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPnRvcCgpKTsKLSAgICAgICAgICAgIExlbmd0
aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5yaWdodCgpKTsK
LSAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZl
ciwgcmVjdC0+Ym90dG9tKCkpOwotICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9M
ZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+bGVmdCgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAg
ICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0LT50b3AoKSk7Cisg
ICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3QtPnJp
Z2h0KCkpOworICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChzdGF0
ZSwgcmVjdC0+Ym90dG9tKCkpOworICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9M
ZW5ndGgoc3RhdGUsIHJlY3QtPmxlZnQoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDbGlwKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7CisgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRIYXNDbGlwKHRydWUpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgo
KSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNl
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgp
LCBMZW5ndGgoKSwgTGVuZ3RoKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFz
Q2xpcChmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI4MSw0MCArMjgwLDQwIEBAIHRl
bXBsYXRlIDxDb2xvckluaGVyaXQgaW5oZXJpdENvbG9yRnJvbVBhcmVudCwKICAgICAgICAgICBD
b2xvciAoKmluaXRpYWxGdW5jdGlvbikoKSA9ICZkZWZhdWx0SW5pdGlhbENvbG9yPgogY2xhc3Mg
QXBwbHlQcm9wZXJ0eUNvbG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVy
aXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIC8vIFZpc2l0ZWQgbGluayBzdHlsZSBj
YW4gbmV2ZXIgZXhwbGljaXRseSBpbmhlcml0IGZyb20gcGFyZW50IHZpc2l0ZWQgbGluayBzdHls
ZSBzbyBubyBzZXBhcmF0ZSBnZXR0ZXJzIGFyZSBuZWVkZWQuCi0gICAgICAgIENvbG9yIGNvbG9y
ID0gKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipnZXR0ZXJGdW5jdGlvbikoKTsKLSAg
ICAgICAgYXBwbHlDb2xvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNv
bG9yIDogKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipkZWZhdWx0RnVuY3Rpb24pKCkp
OworICAgICAgICBDb2xvciBjb2xvciA9IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qZ2V0dGVyRnVu
Y3Rpb24pKCk7CisgICAgICAgIGFwcGx5Q29sb3JWYWx1ZShzdGF0ZSwgY29sb3IuaXNWYWxpZCgp
ID8gY29sb3IgOiAoc3RhdGUucGFyZW50U3R5bGUoKS0+KmRlZmF1bHRGdW5jdGlvbikoKSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAg
ewotICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9u
KCkpOworICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3RhdGUsIGluaXRpYWxGdW5jdGlvbigpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKGluaGVyaXRDb2xvckZyb21QYXJl
bnQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3Ip
Ci0gICAgICAgICAgICBhcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVy
KTsKKyAgICAgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUocHJpbWl0aXZlVmFsdWUpKTsKLSAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVy
LT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExp
bmsgKi8gdHJ1ZSkpOworICAgICAgICAgICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rp
b24pKFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRp
dmVWYWx1ZSkpOworICAgICAgICAgICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnZpc2l0ZWRMaW5r
U2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0
YXRlLCBwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8gdHJ1ZSkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlDb2xvclZhbHVlKFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUNvbG9yVmFsdWUoU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBjb25zdCBDb2xvciYg
Y29sb3IpCiAgICAgewotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCkpCi0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNl
dHRlckZ1bmN0aW9uKShjb2xvcik7Ci0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsKKyAgICAgICAgaWYg
KHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQorICAgICAgICAgICAgKHN0YXRl
LnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoY29sb3IpOworICAgICAgICBpZiAoc3RhdGUuYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQorICAgICAgICAgICAgKHN0YXRlLnN0eWxl
KCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShjb2xvcik7CiAgICAgfQogCiAgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5k
bGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7
IH0KQEAgLTMyMywxMSArMzIyLDExIEBAIHB1YmxpYzoKIHRlbXBsYXRlIDxUZXh0RGlyZWN0aW9u
IChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnNldHRlckZ1bmN0aW9uKShUZXh0RGlyZWN0aW9uKSwgVGV4dERpcmVjdGlvbiAoKmluaXRp
YWxGdW5jdGlvbikoKT4KIGNsYXNzIEFwcGx5UHJvcGVydHlEaXJlY3Rpb24gewogcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0
eURlZmF1bHQ8VGV4dERpcmVjdGlvbiwgZ2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIHNl
dHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBpbml0aWFsRnVuY3Rpb24+OjphcHBseVZhbHVl
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYg
c3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpKQorICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0RGlyZWN0aW9uLCBn
ZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgc2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rp
b24sIGluaXRpYWxGdW5jdGlvbj46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsKKyAgICAgICAg
aWYgKGVsZW1lbnQgJiYgc3RhdGUuZWxlbWVudCgpID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRv
Y3VtZW50RWxlbWVudCgpKQogICAgICAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0RGly
ZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7CiAgICAgfQogCkBAIC0zNTQsNyArMzUz
LDcgQEAgdGVtcGxhdGUgPExlbmd0aCAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBj
b25zdCwKIGNsYXNzIEFwcGx5UHJvcGVydHlMZW5ndGggewogcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTGVuZ3RoIHZhbHVlKSB7IChzdHlsZS0+
KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzYyLDM5
ICszNjEsMzkgQEAgcHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAg
aWYgKG5vbmVFbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Tm9uZSkgewogICAgICAgICAgICAgaWYgKG5vbmVVbmRlZmluZWQpCi0gICAgICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKFVuZGVmaW5lZCkpOworICAg
ICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChVbmRlZmluZWQpKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5
bGUoKSwgTGVuZ3RoKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChsZWdhY3lJbnRyaW5zaWNF
bmFibGVkKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVJbnRyaW5zaWMpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNpYykpOworICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIExlbmd0aChJbnRyaW5zaWMpKTsKICAgICAgICAgICAgIGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTWluSW50cmluc2ljKQotICAg
ICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5J
bnRyaW5zaWMpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5n
dGgoTWluSW50cmluc2ljKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGludHJpbnNpY0VuYWJs
ZWQpIHsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZVdlYmtpdE1pbkNvbnRlbnQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1pbkNvbnRlbnQpKTsKKyAgICAgICAgICAgICAgICBzZXRW
YWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoTWluQ29udGVudCkpOwogICAgICAgICAgICAgZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250
ZW50KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExl
bmd0aChNYXhDb250ZW50KSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgTGVuZ3RoKE1heENvbnRlbnQpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSkKLSAgICAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWls
YWJsZSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChG
aWxsQXZhaWxhYmxlKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZpdENvbnRlbnQpCi0gICAgICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEZpdENvbnRlbnQpKTsKKyAgICAg
ICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoRml0Q29udGVudCkpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKGF1dG9FbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIExlbmd0aCgpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0
eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVu
Z3RoKCkpIHsKLSAgICAgICAgICAgIExlbmd0aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXIt
PnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
c3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgICAgIGxlbmd0aC5zZXRR
dWlyayhwcmltaXRpdmVWYWx1ZS0+aXNRdWlya1ZhbHVlKCkpOwotICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIGxlbmd0aCk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50
KSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpKTsKICAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAg
ICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFs
dWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKSkpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCks
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRl
LnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpKSkpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9y
dFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7Cisg
ICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+dmlld3Bv
cnRQZXJjZW50YWdlTGVuZ3RoKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRs
ZXIgY3JlYXRlSGFuZGxlcigpCkBAIC00MDksMTYgKzQwOCwxNiBAQCB0ZW1wbGF0ZSA8U3RyaW5n
SWRlbnRCZWhhdmlvciBpZGVudEJlaGF2aW9yLCBjb25zdCBBdG9taWNTdHJpbmcmIChSZW5kZXJT
dHlsZTo6KgogY2xhc3MgQXBwbHlQcm9wZXJ0eVN0cmluZyB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
ICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKChpZGVudEJlaGF2
aW9yID09IE1hcE5vbmVUb051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVOb25lKQogICAgICAgICAgICAgfHwgKGlkZW50QmVoYXZpb3IgPT0gTWFwQXV0b1RvTnVs
bCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pKQotICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbnVsbEF0b20pOworICAgICAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgbnVsbEF0b20pOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1
ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
LCBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CiAgICAgfQogICAgIHN0YXRpYyBQ
cm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtNDMxLDcgKzQzMCw3IEBA
IHRlbXBsYXRlIDxMZW5ndGhTaXplIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVz
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUs
IExlbmd0aFNpemUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC00NDgsMTcgKzQ0NywxNyBAQCBwdWJsaWM6CiAgICAgICAg
IGVsc2UgaWYgKHBhaXItPmZpcnN0KCktPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAg
ICAgICAgICAgICByYWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0KCktPnZpZXdwb3J0UGVyY2VudGFn
ZUxlbmd0aCgpOwogICAgICAgICBlbHNlIGlmIChwYWlyLT5maXJzdCgpLT5pc0NhbGN1bGF0ZWRQ
ZXJjZW50YWdlV2l0aExlbmd0aCgpKQotICAgICAgICAgICAgcmFkaXVzV2lkdGggPSBMZW5ndGgo
KHBhaXItPmZpcnN0KCktPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKKyAgICAgICAgICAgIHJhZGl1c1dpZHRo
ID0gTGVuZ3RoKChwYWlyLT5maXJzdCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3Rh
dGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCkpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJhZGl1c1dpZHRoID0g
cGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+
Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAg
aWYgKHBhaXItPnNlY29uZCgpLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgIHJhZGl1c0hl
aWdodCA9IExlbmd0aChwYWlyLT5zZWNvbmQoKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7
CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPnNlY29uZCgpLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxl
bmd0aCgpKQogICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPnZpZXdw
b3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgICAgICBlbHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+
aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHJhZGl1c0hl
aWdodCA9IExlbmd0aCgocGFpci0+c2Vjb25kKCktPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxl
KCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKKyAgICAgICAg
ICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aCgocGFpci0+c2Vjb25kKCktPmNzc0NhbGNWYWx1ZSgp
LT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0
YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCks
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICBy
YWRpdXNIZWlnaHQgPSBwYWlyLT5zZWNvbmQoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRl
LnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpKTsKICAgICAgICAgaW50IHdpZHRoID0gcmFkaXVzV2lkdGgudmFsdWUoKTsKICAg
ICAgICAgaW50IGhlaWdodCA9IHJhZGl1c0hlaWdodC52YWx1ZSgpOwogICAgICAgICBpZiAod2lk
dGggPCAwIHx8IGhlaWdodCA8IDApCkBAIC00NjksNyArNDY4LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgcmFkaXVzV2lkdGggPSByYWRpdXNIZWlnaHQ7IC8vIE51bGwgb3V0IHRoZSBvdGhlciB2
YWx1ZS4KIAogICAgICAgICBMZW5ndGhTaXplIHNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdo
dCk7Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNpemUpOworICAg
ICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzaXplKTsKICAgICB9CiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC01MDMsMTEgKzUwMiwxMSBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKICAgICAgICAgICB2b2lkIChDU1NUb1N0eWxlTWFwOjoq
bWFwRmlsbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopPgog
Y2xhc3MgQXBwbHlQcm9wZXJ0eUZpbGxMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBGaWxsTGF5ZXIqIGN1
cnJDaGlsZCA9IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24p
KCk7CisgICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nl
c3NMYXllcnNGdW5jdGlvbikoKTsKICAgICAgICAgRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAwOwot
ICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIGN1cnJQYXJlbnQgPSAoc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKS0+KmxheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBjb25zdCBGaWxsTGF5ZXIq
IGN1cnJQYXJlbnQgPSAoc3RhdGUucGFyZW50U3R5bGUoKS0+KmxheWVyc0Z1bmN0aW9uKSgpOwog
ICAgICAgICB3aGlsZSAoY3VyclBhcmVudCAmJiAoY3VyclBhcmVudC0+KnRlc3RGdW5jdGlvbiko
KSkgewogICAgICAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsKICAgICAgICAgICAgICAgICAvKiBO
ZWVkIHRvIG1ha2UgYSBuZXcgbGF5ZXIuKi8KQEAgLTUyNywxOCArNTI2LDE5IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlKQogICAgIHsKLSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5
ZXIqIGN1cnJDaGlsZCA9IChzdGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7
CiAgICAgICAgIChjdXJyQ2hpbGQtPipzZXRGdW5jdGlvbikoKCppbml0aWFsRnVuY3Rpb24pKGZp
bGxMYXllclR5cGUpKTsKICAgICAgICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQo
KTsgY3VyckNoaWxkOyBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkKICAgICAgICAgICAg
IChjdXJyQ2hpbGQtPipjbGVhckZ1bmN0aW9uKSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4q
YWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0g
KHN0YXRlLnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKICAgICAgICAgRmlsbExh
eWVyKiBwcmV2Q2hpbGQgPSAwOworICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRl
KTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpCiAjaWYgRU5BQkxFKENTU19JTUFH
RV9TRVQpCiAgICAgICAgICYmICF2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkKQEAgLTU1MiwxMiAr
NTUyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY3VyckNoaWxkID0gbmV3IEZp
bGxMYXllcihmaWxsTGF5ZXJUeXBlKTsKICAgICAgICAgICAgICAgICAgICAgcHJldkNoaWxkLT5z
ZXROZXh0KGN1cnJDaGlsZCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIChz
dHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRmlsbEZ1bmN0aW9uKShwcm9wZXJ0eUlkLCBj
dXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAg
ICAgICAgICAgKHN0eWxlTWFwLiptYXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGls
ZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKICAgICAgICAgICAgICAg
ICBwcmV2Q2hpbGQgPSBjdXJyQ2hpbGQ7CiAgICAgICAgICAgICAgICAgY3VyckNoaWxkID0gY3Vy
ckNoaWxkLT5uZXh0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZpbGxGdW5jdGlvbikocHJvcGVy
dHlJZCwgY3VyckNoaWxkLCB2YWx1ZSk7CisgICAgICAgICAgICAoc3R5bGVNYXAuKm1hcEZpbGxG
dW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZSk7CiAgICAgICAgICAgICBjdXJy
Q2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsKICAgICAgICAgfQogICAgICAgICB3aGlsZSAoY3Vy
ckNoaWxkKSB7CkBAIC01ODMsNyArNTgzLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsCiBjbGFz
cyBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
c2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBUIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1
bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgLy8gbm90ZTogQ1NTUHJv
cGVydHlMZXR0ZXIvV29yZFNwYWNpbmcgcmlnaHQgbm93IHNldHMgdG8gemVybyBpZiBpdCdzIG5v
dCBhIHByaW1pdGl2ZSB2YWx1ZSBmb3Igc29tZSByZWFzb24uLi4KICAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQpAQCAtNjAyLDEzICs2MDIsMTMgQEAgcHVibGljOgogICAg
ICAgICB9IGVsc2UgaWYgKHRoaWNrbmVzc0VuYWJsZWQgJiYgaWRlbnQgPT0gQ1NTVmFsdWVUaGlj
aykgewogICAgICAgICAgICAgbGVuZ3RoID0gNTsKICAgICAgICAgfSBlbHNlIGlmIChpZGVudCA9
PSBDU1NWYWx1ZUludmFsaWQpIHsKLSAgICAgICAgICAgIGZsb2F0IHpvb20gPSAoc3ZnWm9vbUVu
YWJsZWQgJiYgc3R5bGVSZXNvbHZlci0+dXNlU1ZHWm9vbVJ1bGVzKCkpID8gMS4wZiA6IHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGZsb2F0IHpv
b20gPSAoc3ZnWm9vbUVuYWJsZWQgJiYgc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCkpID8gMS4wZiA6
IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgICAgICAgICAgLy8gQW55IG9y
aWdpbmFsIHJlc3VsdCB0aGF0IHdhcyA+PSAxIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBmYWxs
IGJlbG93IDEuCiAgICAgICAgICAgICAvLyBUaGlzIGtlZXBzIGJvcmRlciBsaW5lcyBmcm9tIHZh
bmlzaGluZy4KLSAgICAgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50
U3R5bGUoKSwgem9vbSk7CisgICAgICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxUPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpv
b20pOwogICAgICAgICAgICAgaWYgKHpvb20gPCAxLjBmICYmIGxlbmd0aCA8IDEuMCkgewotICAg
ICAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxl
bmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCksIDEuMCk7CisgICAgICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9IHByaW1p
dGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSwgMS4wKTsKICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxMZW5ndGggPj0g
MS4wKQogICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAxLjA7CiAgICAgICAgICAgICB9CkBA
IC02MTgsNyArNjE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAg
ICAgfQogCi0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGxlbmd0aCk7
CisgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGxlbmd0aCk7CiAgICAgfQogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtNjMwLDI4ICs2
MzAsMjggQEAgcHVibGljOgogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIFQgKEZvbnREZXNjcmlwdGlv
bjo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChGb250RGVzY3JpcHRpb246OipzZXR0
ZXJGdW5jdGlvbikoVCksIFQgaW5pdGlhbFZhbHVlPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUZvbnQg
ewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQog
ICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0
ZXJGdW5jdGlvbikoKHN0eWxlUmVzb2x2ZXItPnBhcmVudEZvbnREZXNjcmlwdGlvbigpLipnZXR0
ZXJGdW5jdGlvbikoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIChmb250RGVzY3JpcHRpb24u
KnNldHRlckZ1bmN0aW9uKSgoc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuKmdldHRlckZ1
bmN0aW9uKSgpKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUpCiAgICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5
bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgKGZvbnRE
ZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKGluaXRpYWxWYWx1ZSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBz
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlv
bigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9u
KSgqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBj
cmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1
ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTY3Niw1MCArNjc2LDUw
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzaXplIC8gMS4yZjsKICAgICB9CiBwdWJsaWM6
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAg
ICAgICBmbG9hdCBzaXplID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICBmbG9hdCBzaXplID0gc3RhdGUucGFy
ZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwogCiAgICAgICAg
IGlmIChzaXplIDwgMCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZSgpKTsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXpl
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtl
eXdvcmRTaXplKHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRT
aXplKCkpOworICAgICAgICBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShzdGF0ZSwgZm9udERl
c2NyaXB0aW9uLCBzaXplKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBh
cHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKTsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPmZvbnRTaXplRm9yS2V5
d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2Ny
aXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAg
ICAgZmxvYXQgc2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChzdGF0ZS5k
b2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVs
dFNpemUoKSk7CiAKICAgICAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAt
IENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6
ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgU3R5bGVSZXNvbHZlcjo6c2V0
Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgICAgIHN0YXRlLnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAot
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKDApOwogICAgICAgICBmbG9hdCBwYXJlbnRT
aXplID0gMDsKICAgICAgICAgYm9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOwogICAg
ICAgICBmbG9hdCBzaXplID0gMDsKIAotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKSkgewotICAgICAgICAgICAgcGFyZW50U2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKLSAgICAgICAgICAg
IHBhcmVudElzQWJzb2x1dGVTaXplID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9u
dERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKKyAgICAgICAgaWYgKHN0YXRlLnBhcmVu
dFN0eWxlKCkpIHsKKyAgICAgICAgICAgIHBhcmVudFNpemUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7CisgICAgICAgICAgICBwYXJlbnRJ
c0Fic29sdXRlU2l6ZSA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmlz
QWJzb2x1dGVTaXplKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaW50IGlkZW50ID0gcHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKQEAgLTczMyw3ICs3MzMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlWExhcmdlOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZVh4TGFyZ2U6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6Ci0gICAg
ICAgICAgICAgICAgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHls
ZVJlc29sdmVyLT5kb2N1bWVudCgpLCBpZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVm
YXVsdFNpemUoKSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZvbnRT
aXplRm9yS2V5d29yZChzdGF0ZS5kb2N1bWVudCgpLCBpZGVudCwgZm9udERlc2NyaXB0aW9uLnVz
ZUZpeGVkRGVmYXVsdFNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEtleXdvcmRTaXplKGlkZW50IC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgpAQCAtNzUxLDEzICs3
NTEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1
dGVTaXplKHBhcmVudElzQWJzb2x1dGVTaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgIShwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkgfHwg
cHJpbWl0aXZlVmFsdWUtPmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBzaXplID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wLCB0cnVlKTsKKyAg
ICAgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+
KHN0YXRlLnBhcmVudFN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wLCB0cnVl
KTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkK
ICAgICAgICAgICAgICAgICBzaXplID0gKHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkg
KiBwYXJlbnRTaXplKSAvIDEwMC4wZjsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQotICAgICAgICAgICAgICAg
IHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUo
KSktPmV2YWx1YXRlKHBhcmVudFNpemUpOworICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRp
dmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSktPmV2YWx1YXRlKHBhcmVudFNpemUpOwogICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3Ro
KCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9IHZhbHVlRm9yTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSwgMCwgc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQo
KS0+cmVuZGVyVmlldygpKTsKKyAgICAgICAgICAgICAgICBzaXplID0gdmFsdWVGb3JMZW5ndGgo
cHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpLCAwLCBzdGF0ZS5kb2N1
bWVudCgpLT5yZW5kZXJWaWV3KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtNzY5LDggKzc2OSw4IEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gQ2FwIGZvbnQgc2l6ZSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IGRvZXNuJ3QgaGFwcGVuLgog
ICAgICAgICBzaXplID0gbWluKG1heGltdW1BbGxvd2VkRm9udFNpemUsIHNpemUpOwogCi0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgICAgICBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0
aW9uLCBzaXplKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTc3OSwxMiArNzc5LDEyIEBAIHB1
YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQgewogcHVibGljOgotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9u
KCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250
RGVzY3JpcHRpb24oKTsKICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtNzk4LDcgKzc5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKnByaW1pdGl2ZVZhbHVl
KTsKICAgICAgICAgfQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpCiAgICAgewpAQCAtODA5LDMwICs4MDksMzAgQEAgcHVibGljOgogCiBjbGFzcyBBcHBs
eVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXMgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRG
b250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBjb25zdCBGb250
RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudEZvbnREZXNj
cmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3Rh
dGUuZm9udERlc2NyaXB0aW9uKCk7CiAKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1v
bkxpZ2F0dXJlc1N0YXRlKHBhcmVudEZvbnREZXNjcmlwdGlvbi5jb21tb25MaWdhdHVyZXNTdGF0
ZSgpKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNT
dGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKCkp
OwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKHBh
cmVudEZvbnREZXNjcmlwdGlvbi5oaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUoKSk7CiAKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Cisg
ICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZv
bnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbW1vbkxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3Rh
dGUpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0
YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwogICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6
Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAg
Rm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZv
bnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgIEZvbnREZXNjcmlw
dGlvbjo6TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERl
c2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKQEAgLTg3OCwxMSArODc4LDExIEBAIHB1
YmxpYzoKICAgICAgICAgfQogI2VuZGlmCiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7
CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShjb21tb25M
aWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzU3RhdGUoZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShoaXN0b3JpY2FsTGlnYXR1
cmVzU3RhdGUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5k
bGVyKCkKQEAgLTg5OCwxMyArODk4LDE0IEBAIHRlbXBsYXRlIDxCb3JkZXJJbWFnZVR5cGUgYm9y
ZGVySW1hZ2VUeXBlLAogICAgICAgICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rp
b24pKGNvbnN0IE5pbmVQaWVjZUltYWdlJik+CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2UgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFn
ZTsKICAgICAgICAgaWYgKGJvcmRlckltYWdlVHlwZSA9PSBCb3JkZXJNYXNrKQogICAgICAgICAg
ICAgaW1hZ2Uuc2V0TWFza0RlZmF1bHRzKCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
TWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCB2YWx1ZSwgaW1hZ2UpOwotICAgICAg
ICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShpbWFnZSk7CisgICAg
ICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAoc3RhdGUpOworICAgICAgICBzdHlsZU1hcC5tYXBO
aW5lUGllY2VJbWFnZShwcm9wZXJ0eSwgdmFsdWUsIGltYWdlKTsKKyAgICAgICAgKHN0YXRlLnN0
eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoaW1hZ2UpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC05MjEsMjkgKzkyMiwyOSBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKFJlbmRl
clN0eWxlKiBzdHlsZSkgeyByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLT5ib3Jk
ZXJJbWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJbWFnZSgpOyB9CiAgICAgc3RhdGljIGlubGluZSB2
b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIHZh
bHVlKSB7IHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUtPnNldEJvcmRlckltYWdl
KHZhbHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94SW1hZ2UodmFsdWUpOyB9CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBO
aW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpKSk7Cisg
ICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0YXRlLnN0eWxlKCkpKTsKICAg
ICAgICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAg
ICAgIGltYWdlLmNvcHlPdXRzZXRGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlPdXRzZXRGcm9tKGdldFZhbHVlKHN0YXRl
LnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlcGVh
dDoKLSAgICAgICAgICAgIGltYWdlLmNvcHlSZXBlYXRGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlSZXBlYXRGcm9tKGdl
dFZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgaW1hZ2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5j
b3B5SW1hZ2VTbGljZXNGcm9tKGdldFZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRoOgotICAgICAgICAgICAgaW1hZ2UuY29w
eUJvcmRlclNsaWNlc0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkp
OworICAgICAgICAgICAgaW1hZ2UuY29weUJvcmRlclNsaWNlc0Zyb20oZ2V0VmFsdWUoc3RhdGUu
cGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1
ZShzdGF0ZS5zdHlsZSgpLCBpbWFnZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFn
ZShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpKSk7CisgICAgICAgIE5pbmVQaWVjZUlt
YWdlIGltYWdlKGdldFZhbHVlKHN0YXRlLnN0eWxlKCkpKTsKICAgICAgICAgc3dpdGNoIChtb2Rp
ZmllcikgewogICAgICAgICBjYXNlIE91dHNldDoKICAgICAgICAgICAgIGltYWdlLnNldE91dHNl
dChMZW5ndGhCb3goMCkpOwpAQCAtOTYyLDI3ICs5NjMsMjggQEAgcHVibGljOgogICAgICAgICAg
ICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhCb3go
TGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0
aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSkgOiBMZW5ndGhCb3goKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGltYWdlKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShn
ZXRWYWx1ZShzdGF0ZS5zdHlsZSgpKSk7CisgICAgICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAo
c3RhdGUpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0
OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCkt
Pm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0
c2V0KHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgUmVwZWF0OgotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQodmFsdWUsIGltYWdlKTsKKyAgICAg
ICAgICAgIHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGltYWdl
KTsKKyAgICAgICAgICAgIHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGlt
YWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRoOgotICAgICAgICAg
ICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5p
bmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xp
Y2VzKHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbWFnZSk7CiAgICAg
fQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4g
UHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAm
YXBwbHlWYWx1ZSk7IH0KQEAgLTk5MSw3ICs5OTMsNyBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8Q1NT
UHJvcGVydHlJRCBpZCwgU3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24p
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8
U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKT4KIGNsYXNzIEFw
cGx5UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlv
bikoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShpZCwgdmFsdWUpKTsgfQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRl
LCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoU3R5
bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwgaWQsIHZhbHVlKSk7IH0KICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKICAgICAgICAgUHJvcGVydHlI
YW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8U3R5bGVJbWFnZSosIGdl
dHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5
bGVJbWFnZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKQEAgLTEwMDMsMTEg
KzEwMDUsMTEgQEAgZW51bSBDb3VudGVyQmVoYXZpb3Ige0luY3JlbWVudCA9IDAsIFJlc2V0fTsK
IHRlbXBsYXRlIDxDb3VudGVyQmVoYXZpb3IgY291bnRlckJlaGF2aW9yPgogY2xhc3MgQXBwbHlQ
cm9wZXJ0eUNvdW50ZXIgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGVtcHR5RnVuY3Rpb24o
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIp
CisgICAgc3RhdGljIHZvaWQgZW1wdHlGdW5jdGlvbihDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyOjpTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIENv
dW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFjY2Vzc0Nv
dW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIHBhcmVudE1h
cCA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVz
KCk7CisgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0YXRlLnN0eWxlKCktPmFj
Y2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CisgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIHBh
cmVudE1hcCA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7
CiAKICAgICAgICAgdHlwZWRlZiBDb3VudGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRv
cjsKICAgICAgICAgSXRlcmF0b3IgZW5kID0gcGFyZW50TWFwLmVuZCgpOwpAQCAtMTAyMCwxNCAr
MTAyMiwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVMaXN0Kj4odmFsdWUpOwogCi0gICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CisgICAg
ICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc0NvdW50
ZXJEaXJlY3RpdmVzKCk7CiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRl
cmF0b3IgSXRlcmF0b3I7CiAKICAgICAgICAgSXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwpAQCAt
MTA2Myw0MiArMTA2NSw0MiBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlDdXJzb3Ig
ewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQog
ICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKHN0eWxlUmVz
b2x2ZXItPnBhcmVudFN0eWxlKCktPmN1cnNvcigpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0Q3Vyc29yTGlzdChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5jdXJz
b3JzKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3Ioc3RhdGUucGFyZW50U3R5
bGUoKS0+Y3Vyc29yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3JMaXN0KHN0
YXRlLnBhcmVudFN0eWxlKCktPmN1cnNvcnMoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0Q3Vyc29yKFJlbmRlclN0eWxlOjppbml0aWFsQ3Vyc29yKCkpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Q3Vyc29yKFJlbmRlclN0eWxlOjppbml0aWFsQ3Vyc29yKCkpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3Qo
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7CiAgICAgICAgIGlm
ICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0
ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwogICAgICAgICAgICAgaW50IGxl
biA9IGxpc3QtPmxlbmd0aCgpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0Q3Vyc29yKENVUlNPUl9BVVRPKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1
cnNvcihDVVJTT1JfQVVUTyk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsg
aSsrKSB7CiAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0LT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKGkpOwogICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0N1cnNvckltYWdl
VmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBpbWFn
ZSA9IHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUqPihpdGVtKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChzdHlsZVJlc29sdmVy
LT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBub3QgYWxsb3dl
ZCB0byBzaGFyZSBzdHlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShDU1NQcm9wZXJ0
eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChzdGF0ZS5lbGVtZW50KCkpKSAvLyBF
bGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBub3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4K
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5hZGRDdXJzb3IoU3R5bGVSZXNvbHZlcjo6
c3R5bGVJbWFnZShzdGF0ZSwgQ1NTUHJvcGVydHlDdXJzb3IsIGltYWdlKSwgaW1hZ2UtPmhvdFNw
b3QoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcigqcHJp
bWl0aXZlVmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgp
ICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmN1cnNvcigpICE9IEVDdXJzb3IoKnByaW1pdGl2
ZVZhbHVlKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJz
b3IoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNJ
ZGVudCgpICYmIHN0YXRlLnN0eWxlKCktPmN1cnNvcigpICE9IEVDdXJzb3IoKnByaW1pdGl2ZVZh
bHVlKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2
ZVZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTEwNyw3ICsxMTA5LDcgQEAgcHVibGlj
OgogCiBjbGFzcyBBcHBseVByb3BlcnR5VGV4dEFsaWduIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTExNSwxMyArMTExNywxMyBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSAhPSBD
U1NWYWx1ZVdlYmtpdE1hdGNoUGFyZW50KQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBU1RBUlQpCi0gICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZl
ci0+cGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTEVGVCA6IFJJR0hU
KTsKLSAgICAgICAgZWxzZSBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEFs
aWduKCkgPT0gVEFFTkQpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gUklHSFQgOiBMRUZUKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRl
eHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICBlbHNlIGlmIChzdGF0ZS5wYXJlbnRT
dHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQVNUQVJUKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IExFRlQgOiBSSUdIVCk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlLnBhcmVudFN0eWxl
KCktPnRleHRBbGlnbigpID09IFRBRU5EKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IFJJR0hUIDogTEVGVCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0
QWxpZ24oKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3RhdGUu
cGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlI
YW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTExMzIsNyArMTEzNCw3IEBAIHB1Ymxp
YzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKICAgICAgICAgRVRleHREZWNvcmF0aW9uIHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlh
bFRleHREZWNvcmF0aW9uKCk7CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2
YWx1ZSk7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewpAQCAtMTE0MCw3ICsxMTQyLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXRl
bS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKICAgICAgICAgICAgIHQgfD0gKnN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb24odCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHREZWNvcmF0aW9uKHQpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVy
IGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTExNTEsNyArMTE1Myw3IEBAIHB1YmxpYzoKIAog
Y2xhc3MgQXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC0xMTYyLDE1ICsxMTY0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgbGluZUhl
aWdodCA9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpOwogICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgZG91YmxlIG11bHRp
cGxpZXIgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAg
ICAgICBpZiAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgp
LT5mcmFtZSgpKQorICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSBzdGF0ZS5zdHlsZSgp
LT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+dGV4dFNp
emVBZGp1c3QoKSkgeworICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdGF0ZS5k
b2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyICo9IGZy
YW1lLT50ZXh0Wm9vbUZhY3RvcigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGluZUhl
aWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBtdWx0aXBsaWVy
KTsKKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0
aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgbXVsdGlw
bGllcik7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgp
KSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91bGQgbm90IGJlIHJlc3Ry
aWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0
aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLT5n
ZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOworICAgICAgICAgICAgbGluZUhlaWdodCA9IExl
bmd0aCgoc3RhdGUuc3R5bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRW
YWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbnVtYmVyIGFuZCBwZXJjZW50
YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eXBlIG9mIExlbmd0aCAoaWUuIEZp
eGVkIG9yIFBlcmNlbnQpLgogICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChwcmltaXRp
dmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKQEAgLTExNzgsNyAr
MTE4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1
ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TGluZUhlaWdodChs
aW5lSGVpZ2h0KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVp
Z2h0KTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
ICAgICB7CkBAIC0xMjY1LDExICsxMjY3LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJikgeyB9CisgICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
KSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKICAgICAgICAgTGVuZ3RoIHdpZHRoOwogICAg
ICAgICBMZW5ndGggaGVpZ2h0OwogICAgICAgICBQYWdlU2l6ZVR5cGUgcGFnZVNpemVUeXBlID0g
UEFHRV9TSVpFX0FVVE87CkBAIC0xMjg1LDggKzEyODcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgLy8gPGxlbmd0aD57Mn0KICAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC0+aXNMZW5n
dGgoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHdpZHRo
ID0gZmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOwotICAgICAgICAgICAgICAgIGhlaWdo
dCA9IHNlY29uZC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgd2lk
dGggPSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4g
PG9yaWVudGF0aW9uPgogICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBndWFy
YW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIuCkBAIC0xMzA0LDcgKzEz
MDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3Ro
KCkpIHsKICAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPgogICAgICAgICAgICAgICAgIHBhZ2VT
aXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGhl
aWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAg
ICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExl
bmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgMDoKQEAgLTEzMzAsMjkgKzEzMzIsMjkg
QEAgcHVibGljOgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdl
U2l6ZVR5cGUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRQYWdlU2l6ZShM
ZW5ndGhTaXplKHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGFn
ZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBhZ2VT
aXplKExlbmd0aFNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5
SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQogfTsKIAog
Y2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
LT50ZXh0RW1waGFzaXNNYXJrKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRl
eHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc0ZpbGwoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhzdGF0ZS5wYXJlbnRTdHls
ZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0
RW1waGFzaXNDdXN0b21NYXJrKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNGaWxsKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJTdHls
ZTo6aW5pdGlhbFRleHRFbXBoYXNpc01hcmsoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0
RW1waGFzaXNDdXN0b21NYXJrKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNGaWxsKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlh
bFRleHRFbXBoYXNpc01hcmsoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0N1c3RvbU1hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNDdXN0b21NYXJr
KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVM
aXN0KCkpIHsKICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENT
U1ZhbHVlTGlzdCo+KHZhbHVlKTsKQEAgLTEzNjYsMTEgKzEzNjgsMTEgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgdmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVP
cGVuKQotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0
RW1waGFzaXNGaWxsKCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc0ZpbGwoKnZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01h
cmsoKnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVt
cGhhc2lzTWFyaygqdmFsdWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7CisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9t
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMzc5LDIwICsxMzgxLDIw
IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0
RW1waGFzaXNNYXJrQ3VzdG9tKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVl
KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0
RW1waGFzaXNGaWxsRmlsbGVkKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0N1c3RvbSk7CisgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJp
bmdWYWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20p
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxB
dG9tKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVGaWxsZWQgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKSB7
Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcmtBdXRvKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFy
a0F1dG8pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnByaW1p
dGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0Zp
bGwoVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNNYXJrKCpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTE0MTUsMTQgKzE0MTcsMTggQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRlc3QoY29u
c3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsgcmV0dXJuIChhbmltYXRpb24tPip0ZXN0RnVuY3Rp
b24pKCk7IH0KICAgICBzdGF0aWMgdm9pZCBjbGVhcihBbmltYXRpb24qIGFuaW1hdGlvbikgeyAo
YW5pbWF0aW9uLT4qY2xlYXJGdW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyBUIGluaXRpYWwoKSB7
IHJldHVybiAoKmluaXRpYWxGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIG1hcChTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUq
IHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKGFuaW1h
dGlvbiwgdmFsdWUpOyB9CisgICAgc3RhdGljIHZvaWQgbWFwKFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSwgQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkgCisgICAgewor
ICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRlKTsKKyAgICAgICAgKHN0eWxlTWFw
LiptYXBGdW5jdGlvbikoYW5pbWF0aW9uLCB2YWx1ZSk7CisgICAgfQogICAgIHN0YXRpYyBBbmlt
YXRpb25MaXN0KiBhY2Nlc3NBbmltYXRpb25zKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4g
KHN0eWxlLT4qYW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgY29uc3Qg
QW5pbWF0aW9uTGlzdCogYW5pbWF0aW9ucyhSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChz
dHlsZS0+KmltbXV0YWJsZUFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpOyB9CiAKLSAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFuaW1h
dGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkp
OwotICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnRMaXN0ID0gYW5pbWF0aW9ucyhz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKTsKKyAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlz
dCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3RhdGUuc3R5bGUoKSk7CisgICAgICAgIGNvbnN0IEFuaW1h
dGlvbkxpc3QqIHBhcmVudExpc3QgPSBhbmltYXRpb25zKHN0YXRlLnBhcmVudFN0eWxlKCkpOwog
ICAgICAgICBzaXplX3QgaSA9IDAsIHBhcmVudFNpemUgPSBwYXJlbnRMaXN0ID8gcGFyZW50TGlz
dC0+c2l6ZSgpIDogMDsKICAgICAgICAgZm9yICggOyBpIDwgcGFyZW50U2l6ZSAmJiB0ZXN0KHBh
cmVudExpc3QtPmFuaW1hdGlvbihpKSk7ICsraSkgewogICAgICAgICAgICAgaWYgKGxpc3QtPnNp
emUoKSA8PSBpKQpAQCAtMTQzNiw5ICsxNDQyLDkgQEAgcHVibGljOgogICAgICAgICAgICAgY2xl
YXIobGlzdC0+YW5pbWF0aW9uKGkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAg
ICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5z
dHlsZSgpKTsKKyAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMo
c3RhdGUuc3R5bGUoKSk7CiAgICAgICAgIGlmIChsaXN0LT5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7CiAgICAgICAgIHNldFZhbHVlKGxp
c3QtPmFuaW1hdGlvbigwKSwgaW5pdGlhbCgpKTsKQEAgLTE0NDgsMjIgKzE0NTQsMjIgQEAgcHVi
bGljOgogICAgICAgICAgICAgY2xlYXIobGlzdC0+YW5pbWF0aW9uKGkpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKLSAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlv
bnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3Qg
PSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBzaXplX3QgY2hpbGRJ
bmRleCA9IDA7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAgICAg
ICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBhbiBhbmltYXRpb24sIGNyZWF0
aW5nIG5ldyBhbmltYXRpb25zIGFzIG5lZWRlZC4gKi8KICAgICAgICAgICAgIGZvciAoQ1NTVmFs
dWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRleCA8PSBsaXN0LT5zaXplKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAg
ICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBpLnZh
bHVlKCkpOworICAgICAgICAgICAgICAgIG1hcChzdGF0ZSwgbGlzdC0+YW5pbWF0aW9uKGNoaWxk
SW5kZXgpLCBpLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgICsrY2hpbGRJbmRleDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChsaXN0LT5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwot
ICAgICAgICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4
KSwgdmFsdWUpOworICAgICAgICAgICAgbWFwKHN0YXRlLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJ
bmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIGNoaWxkSW5kZXggPSAxOwogICAgICAgICB9CiAg
ICAgICAgIGZvciAoIDsgY2hpbGRJbmRleCA8IGxpc3QtPnNpemUoKTsgKytjaGlsZEluZGV4KSB7
CkBAIC0xNDc3LDIyICsxNDgzLDIyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eU91
dGxpbmVTdHlsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9w
ZXJ0eURlZmF1bHRCYXNlPE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxl
SXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0
bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRv
Pjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAg
IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0
bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBF
Qm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbmhl
cml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlz
QXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8s
IE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46
OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9w
ZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUs
IEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHls
ZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjphcHBseUluaGVyaXRWYWx1ZShw
cm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgQXBw
bHlQcm9wZXJ0eURlZmF1bHRCYXNlPE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0bGlu
ZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHls
ZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxl
SXNBdXRvPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0g
ICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHls
ZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0
eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBw
bHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVT
dHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJ
c0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlz
QXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBw
bHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5l
U3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGUsIEVCb3Jk
ZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjphcHBseUluaXRpYWxW
YWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxPdXRsaW5lSXNBdXRv
LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRl
clN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHls
ZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVy
U3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJT
dHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1
ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PE91dGxpbmVJc0F1dG8sICZSZW5kZXJT
dHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNl
dE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFs
T3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUp
OworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHls
ZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0
eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBw
bHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwogICAgIH0KIAogICAgIHN0YXRpYyBQ
cm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigm
YXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBA
IC0xNTAwLDcgKzE1MDYsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlSZXNpemUg
ewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRl
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTEyLDEzICsxNTE4LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNl
IENTU1ZhbHVlQXV0bzoKLSAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBzdHls
ZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpKQorICAgICAgICAgICAgaWYgKFNldHRp
bmdzKiBzZXR0aW5ncyA9IHN0YXRlLmRvY3VtZW50KCktPnNldHRpbmdzKCkpCiAgICAgICAgICAg
ICAgICAgciA9IHNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKSA/IFJFU0laRV9CT1RI
IDogUkVTSVpFX05PTkU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHIgPSAqcHJpbWl0aXZlVmFsdWU7CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0UmVzaXplKHIpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRSZXNpemUocik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKQEAgLTE1MzAsNyArMTUzNiw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9w
ZXJ0eVZlcnRpY2FsQWxpZ24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTM4
LDkgKzE1NDQsOSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbigqcHJp
bWl0aXZlVmFsdWUpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRp
Y2FsQWxpZ25MZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVn
ZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8
IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFZlcnRpY2FsQWxp
Z25MZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IFZpZXdw
b3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiAgICAgfQogCiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE1NTIsMzIgKzE1NTgs
MzIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5QXNwZWN0UmF0aW8gewogcHVibGlj
OgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAg
ICAgICAgaWYgKCFzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5oYXNBc3BlY3RSYXRpbygp
KQorICAgICAgICBpZiAoIXN0YXRlLnBhcmVudFN0eWxlKCktPmhhc0FzcGVjdFJhdGlvKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhh
c0FzcGVjdFJhdGlvKHRydWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRB
c3BlY3RSYXRpb0Rlbm9taW5hdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVj
dFJhdGlvRGVub21pbmF0b3IoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEFzcGVjdFJhdGlvTnVtZXJhdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVj
dFJhdGlvTnVtZXJhdG9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RS
YXRpbyh0cnVlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWlu
YXRvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihzdGF0ZS5wYXJlbnRT
dHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKFJlbmRlclN0eWxlOjppbml0aWFsSGFzQXNw
ZWN0UmF0aW8oKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJh
dGlvRGVub21pbmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9y
KCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVy
YXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyhSZW5kZXJTdHlsZTo6aW5pdGlhbEhh
c0FzcGVjdFJhdGlvKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rl
bm9taW5hdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsK
KyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5
bGU6OmluaXRpYWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNBc3BlY3RSYXRpb1ZhbHVlKCkpIHsKLSAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKGZhbHNlKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKGZhbHNlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVlKiBh
c3BlY3RSYXRpb1ZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZSo+KHZhbHVl
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8odHJ1
ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21p
bmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+ZGVub21pbmF0b3JWYWx1ZSgpKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoYXNwZWN0UmF0aW9W
YWx1ZS0+bnVtZXJhdG9yVmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0Fz
cGVjdFJhdGlvKHRydWUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rl
bm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUtPmRlbm9taW5hdG9yVmFsdWUoKSk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUt
Pm51bWVyYXRvclZhbHVlKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIg
Y3JlYXRlSGFuZGxlcigpCkBAIC0xNTg4LDQ4ICsxNTk0LDQ4IEBAIHB1YmxpYzoKIAogY2xhc3Mg
QXBwbHlQcm9wZXJ0eVpvb20gewogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCByZXNldEVmZmVj
dGl2ZVpvb20oU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBy
ZXNldEVmZmVjdGl2ZVpvb20oU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKICAg
ICAgICAgLy8gUmVzZXQgdGhlIHpvb20gaW4gZWZmZWN0LiBUaGlzIGFsbG93cyB0aGUgc2V0Wm9v
bSBtZXRob2QgdG8gYWNjdXJhdGVseSBjb21wdXRlIGEgbmV3IHpvb20gaW4gZWZmZWN0LgotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5lZmZlY3RpdmVab29tKCkg
OiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2
ZVpvb20oc3RhdGUucGFyZW50U3R5bGUoKSA/IHN0YXRlLnBhcmVudFN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9CiAKIHB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAg
ICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Wm9vbShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT56b29tKCkpOworICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOworICAgICAgICBzdGF0ZS5zZXRab29tKHN0
YXRlLnBhcmVudFN0eWxlKCktPnpvb20oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICByZXNldEVmZmVjdGl2ZVpv
b20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVy
U3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUp
OworICAgICAgICBzdGF0ZS5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04odmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSk7CiAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZU5vcm1hbCkgewotICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIp
OwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlh
bFpvb20oKSk7CisgICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOworICAgICAg
ICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgICAg
IH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVSZXNldCkg
ewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHls
ZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKFJl
bmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2
ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICAgICAgc3RhdGUuc2V0
Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEb2N1bWVudCkgewotICAgICAgICAg
ICAgZmxvYXQgZG9jWm9vbSA9IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSA/IHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKS0+em9vbSgpIDogUmVuZGVyU3R5bGU6Omlu
aXRpYWxab29tKCk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29t
KGRvY1pvb20pOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShkb2Nab29tKTsK
KyAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkgPyBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCktPnpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9v
bSgpOworICAgICAgICAgICAgc3RhdGUuc2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKKyAgICAg
ICAgICAgIHN0YXRlLnNldFpvb20oZG9jWm9vbSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7Ci0gICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpv
b20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUp
OwogICAgICAgICAgICAgaWYgKGZsb2F0IHBlcmNlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0Rmxv
YXRWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20ocGVyY2Vu
dCAvIDEwMC4wZik7CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShwZXJjZW50IC8gMTAw
LjBmKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewot
ICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAg
ICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKICAgICAgICAgICAgIGlmIChmbG9hdCBudW1i
ZXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnNldFpvb20obnVtYmVyKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRa
b29tKG51bWJlcik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE2NDEsNDIgKzE2NDcsNDIgQEAg
cHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5RGlzcGxheSB7CiBwcml2YXRlOgotICAgIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZhbHVlKQorICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwg
RURpc3BsYXkgZGlzcGxheVByb3BlcnR5VmFsdWUpCiAgICAgewogI2lmIEVOQUJMRShTVkcpCi0g
ICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+ZWxl
bWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zdHlsZVR5
cGUoKSA9PSBOT1BTRVVETykKKyAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5l
bGVtZW50KCktPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRlLnN0eWxlKCktPnN0eWxlVHlwZSgpID09
IE5PUFNFVURPKQogICAgICAgICAgICAgcmV0dXJuIChkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBJ
TkxJTkUgfHwgZGlzcGxheVByb3BlcnR5VmFsdWUgPT0gQkxPQ0sgfHwgZGlzcGxheVByb3BlcnR5
VmFsdWUgPT0gTk9ORSk7CiAjZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oc3R5bGVSZXNvbHZl
cik7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShk
aXNwbGF5UHJvcGVydHlWYWx1ZSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQog
ICAgIHsKLSAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPmRpc3BsYXkoKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkRGlzcGxheVZhbHVlKHN0eWxl
UmVzb2x2ZXIsIGRpc3BsYXkpKQorICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gc3RhdGUucGFy
ZW50U3R5bGUoKS0+ZGlzcGxheSgpOworICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUo
c3RhdGUsIGRpc3BsYXkpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOworICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXREaXNwbGF5KGRpc3BsYXkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5p
dGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0RGlzcGxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERpc3BsYXkoKSk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldERpc3BsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEaXNwbGF5KCkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9
ICpzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAotICAgICAgICBpZiAo
IWlzVmFsaWREaXNwbGF5VmFsdWUoc3R5bGVSZXNvbHZlciwgZGlzcGxheSkpCisgICAgICAgIGlm
ICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdGF0ZSwgZGlzcGxheSkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKICAgICB9CiAK
ICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTY4OSwyMSAr
MTY5NSwyMSBAQCB0ZW1wbGF0ZSA8Q2xpcFBhdGhPcGVyYXRpb24qIChSZW5kZXJTdHlsZTo6Kmdl
dHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZQogY2xhc3MgQXBwbHlQcm9wZXJ0eUNs
aXBQYXRoIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSog
c3R5bGUsIFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IHZhbHVlKSB7IChzdHlsZS0+KnNl
dHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwog
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9u
ZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsK
KyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCAwKTsKICAgICAgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkpIHsKLSAgICAgICAgICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBTaGFwZUNsaXBQYXRoT3BlcmF0aW9uOjpj
cmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIHByaW1pdGl2ZVZhbHVlLT5n
ZXRTaGFwZVZhbHVlKCkpKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdGF0
ZSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpKTsKICAgICAgICAgICAgIH0KICNp
ZiBFTkFCTEUoU1ZHKQogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewogICAgICAgICAgICAg
ICAgIFN0cmluZyBjc3NVUkxWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
OwotICAgICAgICAgICAgICAgIEtVUkwgdXJsID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwoY3NzVVJMVmFsdWUpOworICAgICAgICAgICAgICAgIEtVUkwgdXJsID0gc3Rh
dGUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoY3NzVVJMVmFsdWUpOwogICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBJdCBkb2Vzbid0IHdvcmsgd2l0aCBmb3J3YXJkIG9yIGV4dGVybmFsIFNWRyBy
ZWZlcmVuY2VzIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkw
NDA1KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIFJl
ZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoY3NzVVJMVmFsdWUsIHVybC5mcmFnbWVu
dElkZW50aWZpZXIoKSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCks
IFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoY3NzVVJMVmFsdWUsIHVybC5mcmFn
bWVudElkZW50aWZpZXIoKSkpOwogICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIH0KQEAg
LTE3MjAsMTggKzE3MjYsMTggQEAgdGVtcGxhdGUgPEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5k
ZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW4KIGNsYXNzIEFwcGx5
UHJvcGVydHlFeGNsdXNpb25TaGFwZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFs
dWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHZh
bHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
ICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCAwKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
LCAwKTsKICAgICAgICAgICAgIC8vIEZJWE1FIEJ1ZyAxMDI1NzE6IExheW91dCBmb3IgdGhlIHZh
bHVlICdvdXRzaWRlLXNoYXBlJyBpcyBub3QgeWV0IGltcGxlbWVudGVkCiAgICAgICAgICAgICBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU91dHNpZGVTaGFw
ZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBFeGNs
dXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
c2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lk
ZVZhbHVlKCkpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU2hhcGUo
KSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBzaGFwZSA9
IEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUoYmFzaWNTaGFwZUZvclZhbHVl
KHN0eWxlUmVzb2x2ZXIsIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKTsKLSAgICAg
ICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaGFwZS5yZWxlYXNl
KCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBzaGFwZSA9
IEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUoYmFzaWNTaGFwZUZvclZhbHVl
KHN0YXRlLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSk7CisgICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KQEAgLTE3NDYsMjEgKzE3NTIsMjEgQEAgcHVibGljOgogI2lm
IEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKIGNsYXNzIEFwcGx5UHJvcGVydHlJbWFnZVJl
c29sdXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW1hZ2VS
ZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0
SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8
SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25TbmFwLCBJ
bWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNuYXAs
IEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlv
blNuYXA+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVuZGVyU3R5bGU6OmltYWdl
UmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBmbG9h
dCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6YXBwbHlJbmhlcml0VmFs
dWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0
aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VS
ZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQs
IHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlv
blNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9u
U25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRp
b25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJ
bmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVm
YXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJl
bmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxJbWFnZVJlc29sdXRpb24+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRC
YXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25T
b3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29s
dXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFs
SW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29s
dXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1
dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNv
bHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46OmFw
cGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9u
LCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0
eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPElt
YWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2Us
IEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25T
b3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VS
ZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwor
ICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJl
bmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVu
ZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaXRpYWxWYWx1
ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxm
bG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6
OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVz
b2x1dGlvbj46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTE3ODAsOSArMTc4Niw5IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICByZXNvbHV0aW9uID0gcHJpbWl0aXZlVmFsdWUtPmdldERv
dWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCk7CiAgICAgICAgIH0KLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHNvdXJj
ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNu
YXAoc25hcCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEltYWdlUmVzb2x1
dGlvbihyZXNvbHV0aW9uKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0
aW9uU291cmNlKHNvdXJjZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEltYWdlUmVzb2x1
dGlvblNuYXAoc25hcCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlv
bihyZXNvbHV0aW9uKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0
ZUhhbmRsZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCmluZGV4IDRmZmU4NTIzNGMxM2Qw
ZmJiMTQ0NmUwNjg4MWM5ZjdmZWZjNzA2N2IuLmIyY2M0ZWUzNWZlZWRhZWFkNzVlN2NhNDA1NThl
NDQwZGY3MTgwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgKQEAgLTI2LDYgKzI2LDcg
QEAKICNkZWZpbmUgU3R5bGVCdWlsZGVyX2gKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMu
aCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0zMywxOCArMzQsMTcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIFN0eWxlQnVpbGRlcjsK
LWNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKIGNsYXNzIFByb3BlcnR5SGFuZGxlciB7CiBwdWJsaWM6
Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5oZXJpdEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKik7Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5pdGlhbEZ1bmN0aW9uKShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKik7Ci0gICAgdHlwZWRlZiB2b2lkICgqQXBwbHlGdW5jdGlv
bikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciosIENTU1ZhbHVlKik7CisgICAgdHlwZWRl
ZiB2b2lkICgqSW5oZXJpdEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYpOworICAgIHR5cGVkZWYgdm9pZCAoKkluaXRpYWxGdW5jdGlvbikoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpBcHBseUZ1bmN0
aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYsIENTU1ZhbHVlKik7CiAg
ICAgUHJvcGVydHlIYW5kbGVyKCkgOiBtX2luaGVyaXQoMCksIG1faW5pdGlhbCgwKSwgbV9hcHBs
eSgwKSB7IH0KICAgICBQcm9wZXJ0eUhhbmRsZXIoSW5oZXJpdEZ1bmN0aW9uIGluaGVyaXQsIElu
aXRpYWxGdW5jdGlvbiBpbml0aWFsLCBBcHBseUZ1bmN0aW9uIGFwcGx5KSA6IG1faW5oZXJpdChp
bmhlcml0KSwgbV9pbml0aWFsKGluaXRpYWwpLCBtX2FwcGx5KGFwcGx5KSB7IH0KLSAgICB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikgY29uc3QgeyBBU1NFUlQobV9pbmhlcml0KTsgKCptX2luaGVyaXQp
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOyB9Ci0gICAgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIp
IGNvbnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyKTsgfQotICAgIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3Qg
eyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBseSkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwg
dmFsdWUpOyB9CisgICAgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkgY29uc3QgeyBBU1NFUlQobV9pbmhl
cml0KTsgKCptX2luaGVyaXQpKHByb3BlcnR5SUQsIHN0YXRlKTsgfQorICAgIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYgc3RhdGUpIGNvbnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0
eUlELCBzdGF0ZSk7IH0KKyAgICB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3Qg
eyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBseSkocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsg
fQogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5oZXJpdCAmJiBtX2luaXRp
YWwgJiYgbV9hcHBseTsgfQogICAgIEluaGVyaXRGdW5jdGlvbiBpbmhlcml0RnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2luaGVyaXQ7IH0KICAgICBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbEZ1
bmN0aW9uKCkgeyByZXR1cm4gbV9pbml0aWFsOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAKaW5kZXggMzU0YjJjOTAyMWQxODQ1ZjMxOWZlOWMwN2I5ZjE1OTBiYjY2OGZhNy4uZjIy
MmJiMWUzNzM3MzY5NGU4YzM5MWJiMDljNjZlN2RmMWM1NDJkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcApAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIkNTU1N0eWxlUnVs
ZS5oIgogI2luY2x1ZGUgIkNTU1N1cHBvcnRzUnVsZS5oIgogI2luY2x1ZGUgIkNTU1RpbWluZ0Z1
bmN0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NUb1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAjaW5jbHVkZSAiQ1NTVmFy
aWFibGVWYWx1ZS5oIgpAQCAtMTk0LDE0ICsxOTUsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhl
cml0KSB7IFwKLSAgICBtX3N0YXRlLnN0eWxlKCktPnNldCMjUHJvcChtX3N0YXRlLnBhcmVudFN0
eWxlKCktPnByb3AoKSk7IFwKKyAgICBzdGF0ZS5zdHlsZSgpLT5zZXQjI1Byb3Aoc3RhdGUucGFy
ZW50U3R5bGUoKS0+cHJvcCgpKTsgIFwKICAgICByZXR1cm47IFwKIH0KIAogI2RlZmluZSBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTChwcm9wLCBQcm9wKSBcCiBIQU5ETEVfSU5IRVJJVChwcm9w
LCBQcm9wKSBcCiBpZiAoaXNJbml0aWFsKSB7IFwKLSAgICBtX3N0YXRlLnN0eWxlKCktPnNldCMj
UHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIHN0YXRlLnN0eWxlKCkt
PnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAogICAgIHJldHVybjsg
XAogfQogCkBAIC0yMjMsNyArMjI0LDYgQEAgc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJpZ2h0
VG9MZWZ0RGVjbGFyYXRpb24oKQogICAgIHJldHVybiByaWdodFRvTGVmdERlY2wuZ2V0KCk7CiB9
CiAKLQogaW5saW5lIFN0YXRpY0NTU1J1bGVMaXN0KiBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6ZW5z
dXJlUnVsZUxpc3QoKQogewogICAgIGlmICghbV9ydWxlTGlzdCkKQEAgLTI2OSw3ICsyNjksNiBA
QCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBt
YXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCiAgICAgLCBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcihW
aWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZShkb2N1bWVudCkpCiAjZW5kaWYKICAgICAsIG1f
c3R5bGVCdWlsZGVyKFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCkpCi0gICAgLCBt
X3N0eWxlTWFwKHRoaXMpCiB7CiAgICAgRWxlbWVudCogcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKTsKIApAQCAtNDUzLDIzICs0NTIsMjIgQEAgaW5saW5lIGJvb2wgTWF0Y2hpbmdV
QVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKIAogYm9vbCBNYXRjaGluZ1VBUnVsZXNT
Y29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKIAotdm9pZCBTdHlsZVJlc29sdmVyOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVs
ZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1
bGVzKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVS
YW5nZSYgcnVsZVJhbmdlKQogewogICAgIEFTU0VSVChtYXRjaFJlcXVlc3QucnVsZVNldCk7Ci0g
ICAgQVNTRVJUKG1fc3RhdGUuZWxlbWVudCgpKTsKKyAgICBBU1NFUlQoc3RhdGUuZWxlbWVudCgp
KTsKIAotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgRWxlbWVudCogZWxlbWVudCA9
IHN0YXRlLmVsZW1lbnQoKTsKICAgICBjb25zdCBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50
ID0gc3RhdGUuc3R5bGVkRWxlbWVudCgpOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHNldWRv
SWQgPSBlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOwogICAgIGlmICghcHNldWRvSWQuaXNFbXB0
eSgpKSB7CiAgICAgICAgIEFTU0VSVChzdHlsZWRFbGVtZW50KTsKLSAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5zaGFkb3dQc2V1ZG9FbGVt
ZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxl
U2V0LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgbWF0Y2hSZXF1
ZXN0LCBydWxlUmFuZ2UpOwogICAgIH0KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBp
ZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y3VlUHNldWRvUnVsZXMoKSwgbWF0Y2hS
ZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qo
c3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jdWVQc2V1ZG9SdWxlcygpLCBtYXRjaFJlcXVl
c3QsIHJ1bGVSYW5nZSk7CiAjZW5kaWYKICAgICAvLyBDaGVjayB3aGV0aGVyIG90aGVyIHR5cGVz
IG9mIHJ1bGVzIGFyZSBhcHBsaWNhYmxlIGluIHRoZSBjdXJyZW50IHRyZWUgc2NvcGUuIENyaXRl
cmlhIGZvciB0aGlzOgogICAgIC8vIGEpIGl0J3MgYSBVQSBydWxlCkBAIC00ODUsNDQgKzQ4Myw0
MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNo
UmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUgogICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0
aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBi
dWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCiAgICAgaWYgKGVsZW1lbnQt
Pmhhc0lEKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVl
c3QucnVsZVNldC0+aWRSdWxlcyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwo
KSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+aWRSdWxlcyhlbGVtZW50LT5p
ZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsK
ICAgICBpZiAoc3R5bGVkRWxlbWVudCAmJiBzdHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygp
LnNpemUoKTsgKytpKQotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1h
dGNoUmVxdWVzdC5ydWxlU2V0LT5jbGFzc1J1bGVzKHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMo
KVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jbGFz
c1J1bGVzKHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVl
c3QsIHJ1bGVSYW5nZSk7CiAgICAgfQogCiAgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKQotICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmxp
bmtQc2V1ZG9DbGFzc1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+
bGlua1BzZXVkb0NsYXNzUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIGlm
IChTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGVsZW1lbnQpKQotICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZv
Y3VzUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT50YWdSdWxlcyhl
bGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0g
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT51bml2
ZXJzYWxSdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3VzUHNl
dWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMo
ZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwor
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVT
ZXQtPnVuaXZlcnNhbFJ1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKIH0KIAotdm9p
ZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRj
aFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lkIFN0eWxl
UmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFN0YXRlJiBzdGF0ZSwgY29u
c3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewot
ICAgIGlmICghbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpCisgICAgaWYgKCFzdGF0ZS5yZWdp
b25Gb3JTdHlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIHNpemUgPSBt
YXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBjb25z
dCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9y
ZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvcjsKLSAgICAgICAgaWYgKGNo
ZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPiht
X3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKS0+bm9kZSgpKSkpIHsKKyAgICAgICAgaWYgKGNoZWNr
UmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihzdGF0
ZS5yZWdpb25Gb3JTdHlsaW5nKCktPm5vZGUoKSkpKSB7CiAgICAgICAgICAgICBSdWxlU2V0KiBy
ZWdpb25SdWxlcyA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1
bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQocmVnaW9uUnVs
ZXMpOwotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJlZ2lv
blJ1bGVzLCBtYXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdC5zY29w
ZSksIHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwg
TWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBtYXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMs
IG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVSYW5nZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAK
LXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7Ci0gICAgU3RhdGUmIHN0
YXRlID0gbV9zdGF0ZTsKICAgICBWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4mIG1hdGNoZWRS
dWxlcyA9IHN0YXRlLm1hdGNoZWRSdWxlcygpOwogICAgIGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAgc29y
dE1hdGNoZWRSdWxlcyhzdGF0ZSk7CiAKICAgICBpZiAoc3RhdGUubW9kZSgpID09IFNlbGVjdG9y
Q2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtYXRjaGVkUnVsZXMuc2l6ZSgpOyArK2kpCkBAIC01MzgsMTkgKzUzNSwxOSBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0KQogICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhv
clJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVOQUJMRShT
VFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9NKQogICAgIGlmICghbV9zY29wZVJlc29s
dmVyKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVz
IGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0
IGdvdCBpbmNvbnNpc3RlbnQpLgotICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0
eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX3N0YXRl
LmVsZW1lbnQoKSkpIHsKLSAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9IG1fc3RhdGUu
ZWxlbWVudCgpLT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKKyAgICBpZiAobV9z
Y29wZVJlc29sdmVyLT5oYXNTY29wZWRTdHlsZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3Vy
ZVN0YWNrQ29uc2lzdGVuY3koc3RhdGUuZWxlbWVudCgpKSkgeworICAgICAgICBib29sIGFwcGx5
QXV0aG9yU3R5bGVzID0gc3RhdGUuZWxlbWVudCgpLT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JT
dHlsZXMoKTsKICAgICAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0gdHJ1ZTsKICAgICAgICAgdW5z
aWduZWQgc2NvcGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFja1NpemUoKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBt
X3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CisgICAgICAgICAgICBzdGF0ZS5tYXRjaGVk
UnVsZXMoKS5jbGVhcigpOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCiAgICAgICAgICAgICBj
b25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJlc29s
dmVyLT5zdGFja0ZyYW1lQXQoaSk7CkBAIC01NjUsMTEwICs1NjIsMTEyIEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29s
IGluY2x1ZGVFbXB0CiAKICAgICAgICAgICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QoZnJh
bWUubV9ydWxlU2V0LCBpbmNsdWRlRW1wdHlSdWxlcywgZnJhbWUubV9zY29wZSk7CiAgICAgICAg
ICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2Uo
KTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVsZVJh
bmdlKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVx
dWVzdCwgcnVsZVJhbmdlKTsKLSAgICAgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxl
cyhyZXN1bHQpOworICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
UmVnaW9uKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBzb3J0
QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBt
YXRjaEhvc3RSdWxlcyhzdGF0ZSwgcmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CiAgICAg
VU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVzKTsKICNlbmRpZgogfQogCi1pbmxpbmUgYm9v
bCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkK
K2lubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNI
b3N0UnVsZXMoU3RhdGUmIHN0YXRlKQogewogI2lmIEVOQUJMRShTSEFET1dfRE9NKQotICAgIHJl
dHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHlsZVNoYXJpbmdDYW5k
aWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fc3RhdGUuZWxlbWVudCgpKTsKKyAgICByZXR1cm4gbV9z
Y29wZVJlc29sdmVyICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0
Y2hlc0hvc3RSdWxlcyhzdGF0ZS5lbGVtZW50KCkpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICNlbmRpZgogfQogCi12b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKFN0YXRlJiBzdGF0ZSwg
TWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICNpZiBFTkFC
TEUoU0hBRE9XX0RPTSkKICAgICBBU1NFUlQobV9zY29wZVJlc29sdmVyKTsKIAotICAgIG1fc3Rh
dGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKKyAgICBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVh
cigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAgIFZlY3RvcjxSdWxlU2V0Kj4gbWF0Y2hlZFJ1bGVz
OwotICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KCks
IG1hdGNoZWRSdWxlcyk7CisgICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhzdGF0
ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7CiAgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxl
cy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJl
c3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMs
IG1fc3RhdGUuZWxlbWVudCgpKSwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMoc3RhdGUsIE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVt
cHR5UnVsZXMsIHN0YXRlLmVsZW1lbnQoKSksIHJ1bGVSYW5nZSk7CiAgICAgfQotICAgIHNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNo
ZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKICNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKICAgICBVTlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5
UnVsZXMpOwogI2VuZGlmCiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxl
cygpLmNsZWFyKCk7CisgICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICByZXN1
bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSAtIDE7CiAKLSAgICBpZiAoIW1fc3RhdGUuZWxlbWVudCgpKQorICAgIGlmICghc3RhdGUuZWxl
bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1
bGVzLgogICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9ydWxlU2V0cy5hdXRob3JTdHls
ZSgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3Vs
dC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0
Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9u
KG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0
ZSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
UmVnaW9uKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAjaWYgRU5BQkxFKFNIQURP
V19ET00pCiAgICAgVmVjdG9yPE1hdGNoUmVxdWVzdD4gbWF0Y2hSZXF1ZXN0czsKICAgICBtX3J1
bGVTZXRzLnNoYWRvd0Rpc3RyaWJ1dGVkUnVsZXMoKS5jb2xsZWN0TWF0Y2hSZXF1ZXN0cyhpbmNs
dWRlRW1wdHlSdWxlcywgbWF0Y2hSZXF1ZXN0cyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtYXRjaFJlcXVlc3RzLnNpemUoKTsgKytpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
cyhtYXRjaFJlcXVlc3RzW2ldLCBydWxlUmFuZ2UpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlcyhzdGF0ZSwgbWF0Y2hSZXF1ZXN0c1tpXSwgcnVsZVJhbmdlKTsKICNlbmRpZgogCi0gICAg
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CisgICAgc29ydEFuZFRyYW5zZmVy
TWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQpOwogCi0gICAgbWF0Y2hTY29wZWRBdXRob3JSdWxl
cyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVz
KHN0YXRlLCByZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKIH0KIAotdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhTdGF0ZSYgc3RhdGUs
IE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgaWYg
KCFtX3J1bGVTZXRzLnVzZXJTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9z
dGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOworICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNs
ZWFyKCk7CiAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVk
UHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9y
dWxlU2V0cy51c2VyU3R5bGUoKSwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIFJ1bGVSYW5nZSBy
dWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLnVzZXJSdWxlUmFuZ2UoKTsKLSAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JSZWdpb24oc3RhdGUsIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKIAot
ICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIHNvcnRBbmRUcmFu
c2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgUnVsZVNldCogcnVsZXMpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiBy
ZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQogewotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xl
YXIoKTsKKyAgICBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgIAogICAgIHJlc3Vs
dC5yYW5nZXMubGFzdFVBUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAx
OwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdlKCk7
Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVzKSwgcnVsZVJhbmdl
KTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KHJ1bGVzKSwg
cnVsZVJhbmdlKTsKIAotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwor
ICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIH0KIAotdm9p
ZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogcnVsZXMsIGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxl
UmFuZ2UmIHJ1bGVSYW5nZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KFN0YXRlJiBzdGF0ZSwgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGNv
bnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsK
ICAgICBpZiAoIXJ1bGVzKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdGF0ZSYgc3RhdGUgPSBt
X3N0YXRlOwogICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgbWF5IGVuZCB1cCBsb29raW5nIHVwIHN0
eWxlIGZvciByYW5kb20gZWxlbWVudHMgaW4gdGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2ZSB0cmVl
IHJlc29sdmUuCiAgICAgLy8gQW5jZXN0b3IgaWRlbnRpZmllciBmaWx0ZXIgd29uJ3QgYmUgdXAt
dG8tZGF0ZSBpbiB0aGF0IGNhc2UgYW5kIHdlIGNhbid0IHVzZSB0aGUgZmFzdCBwYXRoLgogICAg
IGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fc2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0Nv
bnNpc3RlbnQoc3RhdGUucGFyZW50Tm9kZSgpKSAmJiBtYXRjaFJlcXVlc3QuYmVoYXZpb3JBdEJv
dW5kYXJ5ID09IFNlbGVjdG9yQ2hlY2tlcjo6RG9lc05vdENyb3NzQm91bmRhcnk7CkBAIC02ODIs
NyArNjgxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAgU3R5bGVSdWxlKiBy
dWxlID0gcnVsZURhdGEucnVsZSgpOwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKGRv
Y3VtZW50KCksIHJ1bGUsIHRoaXMpOwogICAgICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0g
Tk9QU0VVRE87Ci0gICAgICAgIGlmIChydWxlTWF0Y2hlcyhydWxlRGF0YSwgbWF0Y2hSZXF1ZXN0
LnNjb3BlLCBkeW5hbWljUHNldWRvLCBtYXRjaFJlcXVlc3QuYmVoYXZpb3JBdEJvdW5kYXJ5KSkg
eworICAgICAgICBpZiAocnVsZU1hdGNoZXMoc3RhdGUsIHJ1bGVEYXRhLCBtYXRjaFJlcXVlc3Qu
c2NvcGUsIGR5bmFtaWNQc2V1ZG8sIG1hdGNoUmVxdWVzdC5iZWhhdmlvckF0Qm91bmRhcnkpKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwg
dGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAgICAgICAgICAgY29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKICAgICAg
ICAgICAgIGlmICghcHJvcGVydGllcyB8fCAocHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFtYXRj
aFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMpKSB7CkBAIC03MTAsNyArNzA5LDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1
bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAgICAgICAgICAgICAgcnVsZVJhbmdlLmZpcnN0UnVs
ZUluZGV4ID0gcnVsZVJhbmdlLmxhc3RSdWxlSW5kZXg7CiAKICAgICAgICAgICAgICAgICAvLyBB
ZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAgICAgICAgICAg
ICAgbV9zdGF0ZS5hZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEpOworICAgICAgICAgICAgICAgIHN0
YXRlLmFkZE1hdGNoZWRSdWxlKCZydWxlRGF0YSk7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCB0cnVlKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTcyNiwzMSArNzI1LDMxIEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBjb21wYXJlUnVsZXMoY29uc3QgUnVsZURhdGEqIHIxLCBjb25zdCBSdWxl
RGF0YSogcjIpCiAgICAgcmV0dXJuIChzcGVjaWZpY2l0eTEgPT0gc3BlY2lmaWNpdHkyKSA/IHIx
LT5wb3NpdGlvbigpIDwgcjItPnBvc2l0aW9uKCkgOiBzcGVjaWZpY2l0eTEgPCBzcGVjaWZpY2l0
eTI7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcygpCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OnNvcnRNYXRjaGVkUnVsZXMoU3RhdGUmIHN0YXRlKQogewotICAgIHN0ZDo6
c29ydChtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmJlZ2luKCksIG1fc3RhdGUubWF0Y2hlZFJ1bGVz
KCkuZW5kKCksIGNvbXBhcmVSdWxlcyk7CisgICAgc3RkOjpzb3J0KHN0YXRlLm1hdGNoZWRSdWxl
cygpLmJlZ2luKCksIHN0YXRlLm1hdGNoZWRSdWxlcygpLmVuZCgpLCBjb21wYXJlUnVsZXMpOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNo
QWxsUnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVT
TUlMUHJvcGVydGllcykKIHsKLSAgICBtYXRjaFVBUnVsZXMocmVzdWx0KTsKKyAgICBtYXRjaFVB
UnVsZXMoc3RhdGUsIHJlc3VsdCk7CiAKICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBy
dWxlcy4KICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgIG1hdGNo
VXNlclJ1bGVzKHJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaFVzZXJSdWxlcyhzdGF0ZSwg
cmVzdWx0LCBmYWxzZSk7CiAKICAgICAvLyBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBiZWdpbm5p
bmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzIG1hcHBlZCBmcm9tIEhUTUwu
Ci0gICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpKSB7Ci0gICAgICAgIGFkZEVsZW1lbnRT
dHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKSkgewor
ICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAogICAgICAgICAvLyBOb3cg
d2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRpb25zLgogICAgICAgICAvLyBUYWJs
ZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9uYWwgbWFwcGVkIHJ1bGUgdGhhdCBt
dXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8gYWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRo
ZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmli
dXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUu
c3R5bGVkRWxlbWVudCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7
CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5zdHlsZWRF
bGVtZW50KCktPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAotICAg
ICAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkgeworICAg
ICAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAg
ICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0
aW9uID0gdG9IVE1MRWxlbWVudChtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmRpcmVjdGlvbmFs
aXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBUZXh0RGlyZWN0
aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KHN0YXRlLnN0eWxlZEVsZW1lbnQoKSkt
PmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAg
ICBpZiAoaXNBdXRvKQogICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3Vs
dCwgdGV4dERpcmVjdGlvbiA9PSBMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdo
dFRvTGVmdERlY2xhcmF0aW9uKCkpOwogICAgICAgICB9CkBAIC03NTgsMjEgKzc1NywyMSBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9v
bCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAgIAogICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBh
dXRob3Igc2hlZXRzIG5leHQuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQot
ICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaEF1
dGhvclJ1bGVzKHN0YXRlLCByZXN1bHQsIGZhbHNlKTsKIAogICAgIC8vIE5vdyBjaGVjayBvdXIg
aW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkt
PmlubGluZVN0eWxlKCkpIHsKKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYg
c3RhdGUuc3R5bGVkRWxlbWVudCgpICYmIHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5
bGUoKSkgewogICAgICAgICAvLyBJbmxpbmUgc3R5bGUgaXMgaW1tdXRhYmxlIGFzIGxvbmcgYXMg
dGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4KICAgICAgICAgLy8gRklYTUU6IE1lZGlhIGNvbnRy
b2wgc2hhZG93IHRyZWVzIHNlZW0gdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGNhY2hpbmcuCi0gICAg
ICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFtX3N0YXRlLnN0eWxlZEVsZW1lbnQo
KS0+aW5saW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIW1fc3RhdGUuc3R5bGVkRWxlbWVudCgp
LT5pc0luU2hhZG93VHJlZSgpOworICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUg
PSAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAh
c3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0luU2hhZG93VHJlZSgpOwogICAgICAgICAvLyBGSVhN
RTogQ29uc3RpZnkuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBt
X3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hl
YWJsZSk7CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5z
dHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOwog
ICAgIH0KIAogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gTm93IGNoZWNrIFNNSUwgYW5pbWF0aW9u
IG92ZXJyaWRlIHN0eWxlLgotICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0
ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICBhZGRFbGVtZW50U3R5
bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5
bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlz
Q2FjaGVhYmxlICovKTsKKyAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzICYmIHN0YXRlLnN0eWxlZEVsZW1lbnQoKSAmJiBzdGF0ZS5zdHls
ZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9w
ZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHN0YXRlLnN0eWxlZEVsZW1l
bnQoKSktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hlYWJs
ZSAqLyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU01JTFByb3BlcnRpZXMpOwog
I2VuZGlmCkBAIC03OTQsMTQgKzc5MywxMiBAQCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKICAgICBtX2VsZW1lbnRMaW5rU3RhdGUgPSBl
ID8gZS0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRlcm1pbmVMaW5rU3RhdGUo
ZSkgOiBOb3RJbnNpZGVMaW5rOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0
RWxlbWVudChFbGVtZW50KiBlKQoraW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1l
bnQoU3RhdGUmIHN0YXRlLCBFbGVtZW50KiBlKQogewotICAgIGlmIChtX3N0YXRlLmVsZW1lbnQo
KSAhPSBlKSB7Ci0gICAgICAgIG1fc3RhdGUuaW5pdEVsZW1lbnQoZSk7Ci0gICAgICAgIGlmIChl
ICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAg
IGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsK
LSAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVs
ZW1lbnQoZmFsc2UpOwotICAgICAgICB9CisgICAgc3RhdGUuaW5pdEVsZW1lbnQoZSk7CisgICAg
aWYgKGUgJiYgZSA9PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgeworICAgICAg
ICBlLT5kb2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7
CisgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1l
bnQoZmFsc2UpOwogICAgIH0KIH0KIApAQCAtODg5LDI2ICs4ODYsMjIgQEAgTm9kZSogU3R5bGVS
ZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNp
dGVkTm9kZUNvdW4KICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpzdHls
ZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQorYm9vbCBT
dHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChFbGVtZW50
KiBlLCBSdWxlU2V0KiBydWxlU2V0KQogewogICAgIGlmICghcnVsZVNldCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKIAotICAgIG1f
c3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlcyk7CisgICAgU3RhdGUg
c3RhdGUoZG9jdW1lbnQoKSk7CisgICAgc3RhdGUuaW5pdEVsZW1lbnQoZSk7CisgICAgc3RhdGUu
c2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlcyk7CiAgICAgaW50IGZpcnN0UnVs
ZUluZGV4ID0gLTEsIGxhc3RSdWxlSW5kZXggPSAtMTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdl
KGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
cyhNYXRjaFJlcXVlc3QocnVsZVNldCksIHJ1bGVSYW5nZSk7Ci0gICAgbV9zdGF0ZS5zZXRNb2Rl
KFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIGlmIChtX3N0YXRlLm1hdGNo
ZWRSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RhdGUu
bWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlcyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KHJ1bGVTZXQpLCBydWxlUmFuZ2UpOworICAg
IHJldHVybiAhc3RhdGUubWF0Y2hlZFJ1bGVzKCkuaXNFbXB0eSgpOwogfQogCi1ib29sIFN0eWxl
UmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50
KSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woY29u
c3QgU3RhdGUmIHN0YXRlLCBTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewotICAgIGNv
bnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgSFRNTElucHV0RWxlbWVudCogdGhpc0lu
cHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgSFRNTElucHV0RWxl
bWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCktPnRvSW5wdXRFbGVtZW50
KCk7CiAKQEAgLTk2Miw5ICs5NTUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudEhhc0Rp
cmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gZWxlbWVudC0+aXNIVE1M
RWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQoZWxlbWVudCktPmhhc0RpcmVjdGlvbkF1dG8oKTsK
IH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5
bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNv
bnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHls
ZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3QgU3RhdGUmIHN0YXRlLCBTdHlsZWRFbGVtZW50KiBz
aGFyaW5nQ2FuZGlkYXRlKSBjb25zdAogewotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7CiAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZWxlbWVudERhdGEoKSA9PSBzaGFyaW5nQ2Fu
ZGlkYXRlLT5lbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoc3Rh
dGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hh
cmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQpAQCAt
MTAwNCwxMCArOTk2LDkgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFz
SWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5
bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVT
dHlsZVdpdGhFbGVtZW50KGNvbnN0IFN0YXRlJiBzdGF0ZSwgU3R5bGVkRWxlbWVudCogZWxlbWVu
dCkgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHls
ZSgpOwotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKICAgICBpZiAoIXN0eWxl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDM3LDcgKzEwMjgsNyBAQCBib29sIFN0eWxl
UmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50
KSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMo
ZWxlbWVudCkpCisgICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZl
Y3RpbmdBdHRyaWJ1dGVzKHN0YXRlLCBlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAh
PSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVT
dHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDU4LDcgKzEwNDksNyBAQCBib29s
IFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBl
bGVtZW50KSBjb25zdAogICAgIGlmIChpc0NvbnRyb2wgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXND
b250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woZWxlbWVudCkpCisgICAgaWYgKGlz
Q29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKHN0YXRlLCBlbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHN0eWxlLT50cmFuc2l0aW9ucygpIHx8IHN0
eWxlLT5hbmltYXRpb25zKCkpCkBAIC0xMDk4LDEyICsxMDg5LDEyIEBAIGJvb2wgU3R5bGVSZXNv
bHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJl
c29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpZ25lZCYg
Y291bnQpIGNvbnN0CitpbmxpbmUgU3R5bGVkRWxlbWVudCogU3R5bGVSZXNvbHZlcjo6ZmluZFNp
YmxpbmdGb3JTdHlsZVNoYXJpbmcoY29uc3QgU3RhdGUmIHN0YXRlLCBOb2RlKiBub2RlLCB1bnNp
Z25lZCYgY291bnQpIGNvbnN0CiB7CiAgICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2
aW91c1NpYmxpbmcoKSkgewogICAgICAgICBpZiAoIW5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQoc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpKSkKKyAgICAgICAgaWYgKGNhblNo
YXJlU3R5bGVXaXRoRWxlbWVudChzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5v
ZGUpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoY291bnQrKyA9PSBjU3R5bGVT
ZWFyY2hUaHJlc2hvbGQpCiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTExMTEsOSArMTEwMiw4
IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0
eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnQqPihub2RlKTsKIH0KIAotUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0
ZVNoYXJlZFN0eWxlKCkKK1JlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRT
dHlsZShTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBp
ZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQoKSB8fCAhc3RhdGUucGFyZW50U3R5bGUoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKQEAgLTExNDYsNyArMTEzNiw3IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJl
c29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgU3R5bGVkRWxlbWVudCogc2hhcmVFbGVt
ZW50ID0gMDsKICAgICBOb2RlKiBjb3VzaW5MaXN0ID0gc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5w
cmV2aW91c1NpYmxpbmcoKTsKICAgICB3aGlsZSAoY291c2luTGlzdCkgewotICAgICAgICBzaGFy
ZUVsZW1lbnQgPSBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhjb3VzaW5MaXN0LCBjb3VudCk7
CisgICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKHN0YXRl
LCBjb3VzaW5MaXN0LCBjb3VudCk7CiAgICAgICAgIGlmIChzaGFyZUVsZW1lbnQpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY291c2luTGlzdCA9IGxvY2F0ZUNvdXNpbkxpc3QoY291c2lu
TGlzdC0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKQEAgLTExNTcsMTMgKzEx
NDcsMTMgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBzaWJsaW5nIHJ1bGVz
IGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVuZCBhcyBpdCBzaG91bGQgcmFyZWx5IGZh
aWwuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1fcnVsZVNl
dHMuc2libGluZygpKSkKKyAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQoc3RhdGUuZWxlbWVudCgpLCBtX3J1bGVTZXRzLnNpYmxpbmcoKSkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIC8vIENhbid0IHNoYXJlIGlmIGF0dHJpYnV0ZSBydWxlcyBhcHBseS4KLSAgICBp
ZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQobV9ydWxlU2V0cy51bmNvbW1v
bkF0dHJpYnV0ZSgpKSkKKyAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQoc3RhdGUuZWxlbWVudCgpLCBtX3J1bGVTZXRzLnVuY29tbW9uQXR0cmlidXRlKCkpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBAaG9zdCBALXJ1bGVzIGFwcGx5
LgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkpCisgICAg
aWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoc3RhdGUpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUg
c3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBydWxl
IG1hdGNoIGFib3ZlLgogICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRl
LmVsZW1lbnQoKS0+cGFyZW50RWxlbWVudCgpKSkKQEAgLTExNzEsNyArMTE2MSw3IEBAIFJlbmRl
clN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgcmV0dXJuIHNo
YXJlRWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hV
QVJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBNYXRjaGlu
Z1VBUnVsZXNTY29wZSBzY29wZTsKIApAQCAtMTE4MCwxNSArMTE3MCwxNSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAgICAgICByZXN1
bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKICAgICBSdWxlU2V0KiB1c2VyQWdlbnRTdHlsZVNoZWV0
ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1hdGNoU3BlY2lmaWMoInByaW50IikKICAgICAgICAgPyBD
U1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRQcmludFN0eWxlIDogQ1NTRGVmYXVsdFN0eWxl
U2hlZXRzOjpkZWZhdWx0U3R5bGU7Ci0gICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgdXNlckFnZW50
U3R5bGVTaGVldCk7CisgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCByZXN1bHQsIHVzZXJBZ2VudFN0
eWxlU2hlZXQpOwogCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20g
dGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgogICAgIGlmIChkb2N1bWVudCgpLT5pblF1aXJr
c01vZGUoKSkKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgQ1NTRGVmYXVsdFN0eWxlU2hl
ZXRzOjpkZWZhdWx0UXVpcmtzU3R5bGUpOworICAgICAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJl
c3VsdCwgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0UXVpcmtzU3R5bGUpOwogCiAgICAg
Ly8gSWYgZG9jdW1lbnQgdXNlcyB2aWV3IHNvdXJjZSBzdHlsZXMgKGluIHZpZXcgc291cmNlIG1v
ZGUgb3IgaW4geG1sIHZpZXdlciBtb2RlKSwgdGhlbiB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB2
aWV3IHNvdXJjZSBzdHlsZSBzaGVldC4KICAgICBpZiAoZG9jdW1lbnQoKS0+aXNWaWV3U291cmNl
KCkpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6
dmlld1NvdXJjZVN0eWxlKCkpOworICAgICAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCwg
Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjp2aWV3U291cmNlU3R5bGUoKSk7CiB9CiAKIHN0YXRpYyB2
b2lkIHNldFN0eWxlc0ZvclBhZ2luYXRpb25Nb2RlKFBhZ2luYXRpb246Ok1vZGUgcGFnaW5hdGlv
bk1vZGUsIFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTEzODYsMjUgKzEzNzYsMjggQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQq
IGVsZW1lbnQsIFJlbmRlclMKICAgICAgICAgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7
CiAgICAgfQogCi0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBpbml0RWxlbWVudChl
bGVtZW50KTsKKyAgICBTdGF0ZSBzdGF0ZShkb2N1bWVudCgpKTsKKyAgICBpbml0RWxlbWVudChz
dGF0ZSwgZWxlbWVudCk7CiAgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgp
LCBlbGVtZW50LCBkZWZhdWx0UGFyZW50LCBOT1BTRVVETywgcmVnaW9uRm9yU3R5bGluZyk7CiAg
ICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZyAmJiAhc3RhdGUuZGlz
dHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJl
ZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJl
ZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoc3RhdGUpOwogICAgICAgICBpZiAoc2hhcmVkU3R5
bGUpCiAgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7CiAgICAgfQogCiAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBjbG9uZUZvclBhcmVudDsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlOwogCiAgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCkpIHsKLSAgICAgICAgc3RhdGUuc2V0
U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5o
ZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUoKSwgaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQp
ID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6Tm90QXRTaGFk
b3dCb3VuZGFyeSk7CisgICAgICAgIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAg
ICAgICBzdHlsZS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUoKSwgaXNBdFNoYWRvd0Jv
dW5kYXJ5KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJT
dHlsZTo6Tm90QXRTaGFkb3dCb3VuZGFyeSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGUu
c2V0U3R5bGUoZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpKTsKLSAgICAgICAgY2xvbmVGb3JQYXJl
bnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUuc3R5bGUoKSk7CisgICAgICAgIHN0eWxlID0g
ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpOworICAgICAgICBjbG9uZUZvclBhcmVudCA9IFJlbmRl
clN0eWxlOjpjbG9uZShzdHlsZS5nZXQoKSk7CiAgICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxl
KGNsb25lRm9yUGFyZW50LmdldCgpKTsKICAgICB9CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUp
OworCiAgICAgLy8gY29udGVudGVkaXRhYmxlIGF0dHJpYnV0ZSAoaW1wbGVtZW50ZWQgYnkgLXdl
YmtpdC11c2VyLW1vZGlmeSkgc2hvdWxkCiAgICAgLy8gYmUgcHJvcGFnYXRlZCBmcm9tIHNoYWRv
dyBob3N0IHRvIGRpc3RyaWJ1dGVkIG5vZGUuCiAgICAgaWYgKHN0YXRlLmRpc3RyaWJ1dGVkVG9J
bnNlcnRpb25Qb2ludCgpKSB7CkBAIC0xNDMyLDE2ICsxNDI1LDE0IEBAIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50
LCBSZW5kZXJTCiAKICAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKICAgICBpZiAobWF0Y2hp
bmdCZWhhdmlvciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykKLSAgICAgICAgbWF0Y2hVQVJ1
bGVzKG1hdGNoUmVzdWx0KTsKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCBtYXRjaFJlc3Vs
dCk7CiAgICAgZWxzZQotICAgICAgICBtYXRjaEFsbFJ1bGVzKG1hdGNoUmVzdWx0LCBtYXRjaGlu
Z0JlaGF2aW9yICE9IE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKTsKKyAgICAgICAgbWF0Y2hB
bGxSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIG1hdGNoaW5nQmVoYXZpb3IgIT0gTWF0Y2hBbGxS
dWxlc0V4Y2x1ZGluZ1NNSUwpOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJl
c3VsdCwgZWxlbWVudCk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0Y2hS
ZXN1bHQsIGVsZW1lbnQpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRp
c3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRq
dXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSwgZWxlbWVu
dCk7Ci0KLSAgICBzdGF0ZS5jbGVhcigpOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29s
dmUuCisgICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUsIHN0eWxlLmdldCgpLCBzdGF0ZS5wYXJl
bnRTdHlsZSgpLCBlbGVtZW50KTsKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVz
b2x2ZXIoKTsKIApAQCAtMTQ0OSw0MyArMTQ0MCw0MCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVy
UwogICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKIH0KIAotUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSog
ZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5ZnJhbWVWYWx1
ZSYga2V5ZnJhbWVWYWx1ZSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yS2V5ZnJhbWUoU3RhdGUmIHN0YXRlLCBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVu
dFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5ZnJhbWVWYWx1ZSYga2V5
ZnJhbWVWYWx1ZSkKIHsKICAgICBNYXRjaFJlc3VsdCByZXN1bHQ7CiAgICAgaWYgKGtleWZyYW1l
LT5wcm9wZXJ0aWVzKCkpCiAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwga2V5
ZnJhbWUtPnByb3BlcnRpZXMoKSk7CiAKLSAgICBBU1NFUlQoIW1fc3RhdGUuc3R5bGUoKSk7Ci0K
LSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotCiAgICAgLy8gQ3JlYXRlIHRoZSBzdHlsZQot
ICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUpKTsKKyAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRT
dHlsZSk7CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUpOwogICAgIHN0YXRlLnNldExpbmVIZWln
aHRWYWx1ZSgwKTsKIAogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYm90aGVyIHdpdGggIWltcG9y
dGFudC4gU2luY2UgdGhlcmUgaXMgb25seSBldmVyIG9uZQogICAgIC8vIGRlY2wsIHRoZXJlJ3Mg
bm90aGluZyB0byBvdmVycmlkZS4gU28ganVzdCBhZGQgdGhlIGZpcnN0IHByb3BlcnRpZXMuCiAg
ICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0
aWVzKCkpCi0gICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVy
dGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAt
IDEsIGluaGVyaXRlZE9ubHkpOworICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQ
cmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAKICAgICAvLyBJZiBvdXIg
Zm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRl
Rm9udCgpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMg
c2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCiAgICAgaWYg
KHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOworICAgICAgICBhcHBseVBy
b3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1
ZSgpKTsKIAogICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzLgogICAgIGlmIChr
ZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExv
d1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgICAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAs
IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAog
ICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUgbm9uLWVzc2VudGlh
bCBmb250IHByb3BzLAogICAgIC8vIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgYSBzZWNvbmQgdGlt
ZS4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CiAKICAgICAvLyBT
dGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9h
ZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7CiAg
ICAgCiAgICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3BlcnRpZXMgdG8gdGhlIGtleWZy
YW1lLgogICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0aW9uID0g
a2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkgewpAQCAtMTUyMiwxNSArMTUxMCwxNSBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0
IFJlbmRlclN0eWxlKiBlbAogCiAgICAgLy8gQ29uc3RydWN0IGFuZCBwb3B1bGF0ZSB0aGUgc3R5
bGUgZm9yIGVhY2gga2V5ZnJhbWUKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJh
bWU+ID4mIGtleWZyYW1lcyA9IGtleWZyYW1lc1J1bGUtPmtleWZyYW1lcygpOworICAgIFN0YXRl
IHN0YXRlKGRvY3VtZW50KCkpOworICAgIGluaXRFbGVtZW50KHN0YXRlLCBlKTsKKyAgICBzdGF0
ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgLy8gQXBwbHkgdGhl
IGRlY2xhcmF0aW9uIHRvIHRoZSBzdHlsZS4gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBv
ZiB0aGUgbG9naWMgaW4gc3R5bGVGb3JFbGVtZW50Ci0gICAgICAgIGluaXRFbGVtZW50KGUpOwot
ICAgICAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSk7Ci0KICAg
ICAgICAgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUgPSBrZXlmcmFtZXNbaV0uZ2V0KCk7
CiAKICAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDApOwotICAgICAgICBr
ZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBrZXlm
cmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0
eWxlRm9yS2V5ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHlsZSwga2V5ZnJhbWUsIGtleWZyYW1lVmFs
dWUpKTsKIAogICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBzdHlsZSB0byBhbGwgdGhlIGlu
ZGljYXRlZCBrZXkgdGltZXMKICAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXlzOwpAQCAtMTU1MCw3
ICsxNTM4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlv
bihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwKICAgICAgICAgICAgIHplcm9QZXJj
ZW50S2V5ZnJhbWUtPnNldEtleVRleHQoIjAlIik7CiAgICAgICAgIH0KICAgICAgICAgS2V5ZnJh
bWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0
eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCB6ZXJvUGVyY2VudEtleWZyYW1lLCBr
ZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JL
ZXlmcmFtZShzdGF0ZSwgZWxlbWVudFN0eWxlLCB6ZXJvUGVyY2VudEtleWZyYW1lLCBrZXlmcmFt
ZVZhbHVlKSk7CiAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOwogICAgIH0KIApA
QCAtMTU2Miw3ICsxNTUwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0Zv
ckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwKICAgICAgICAgICAg
IGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUtPnNldEtleVRleHQoIjEwMCUiKTsKICAgICAgICAgfQog
ICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMSwgMCk7Ci0gICAgICAgIGtleWZy
YW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGh1bmRyZWRQ
ZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAga2V5ZnJhbWVWYWx1ZS5z
ZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5bGUsIGh1bmRyZWRQZXJj
ZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKICAgICAgICAgbGlzdC5pbnNlcnQoa2V5ZnJh
bWVWYWx1ZSk7CiAgICAgfQogfQpAQCAtMTU3MywyNCArMTU2MSwyMiBAQCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQg
cHNldWRvLCBFbAogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBTdGF0ZSYg
c3RhdGUgPSBtX3N0YXRlOwotCi0gICAgaW5pdEVsZW1lbnQoZSk7Ci0KKyAgICBTdGF0ZSBzdGF0
ZShkb2N1bWVudCgpKTsKKyAgICBpbml0RWxlbWVudChzdGF0ZSwgZSk7CiAgICAgc3RhdGUuaW5p
dEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKICAg
ICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOwotICAgIHN0YXRlLnN0eWxl
KCktPmluaGVyaXRGcm9tKG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgc3RhdGUuc3R5bGUo
KS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUoKSk7CiAKICAgICAvLyBTaW5jZSB3ZSBk
b24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBvZiBvdXIgcXVpcmsvcHJpbnQgdXNlciBh
Z2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxraW5nCiAgICAgLy8gdGhvc2UgcnVsZXMu
CiAKICAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9yIHJ1bGVzLgogICAgIE1hdGNoUmVz
dWx0IG1hdGNoUmVzdWx0OwotICAgIG1hdGNoVUFSdWxlcyhtYXRjaFJlc3VsdCk7CisgICAgbWF0
Y2hVQVJ1bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCk7CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMpIHsKLSAgICAgICAgbWF0Y2hVc2VyUnVsZXMobWF0Y2hSZXN1bHQsIGZhbHNl
KTsKLSAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhtYXRjaFJlc3VsdCwgZmFsc2UpOworICAgICAg
ICBtYXRjaFVzZXJSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIGZhbHNlKTsKKyAgICAgICAgbWF0
Y2hBdXRob3JSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIGZhbHNlKTsKICAgICB9CiAKICAgICBp
ZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQpAQCAtMTU5OCwxMyAr
MTU4NCwxMyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9T
dHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbAogCiAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNo
UmVzdWx0LCBlKTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKHN0YXRlLCBtYXRjaFJlc3Vs
dCwgZSk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQg
dGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KLSAgICBhZGp1c3RSZW5kZXJT
dHlsZShzdGF0ZS5zdHlsZSgpLCBtX3N0YXRlLnBhcmVudFN0eWxlKCksIDApOworICAgIGFkanVz
dFJlbmRlclN0eWxlKHN0YXRlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpLCAw
KTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBz
dHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworICAgIGxvYWRQZW5kaW5nUmVzb3Vy
Y2VzKHN0YXRlKTsKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsK
IApAQCAtMTYxNCwxMiArMTYwMCwxMyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbAogCiBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJ
bmRleCkKIHsKLSAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBi
ZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgorICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkp
OworICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8g
dGhlIGRvY3VtZW50IHN0eWxlLgogCi0gICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6
Y3JlYXRlKCkpOwotICAgIG1fc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20obV9zdGF0ZS5yb290
RWxlbWVudFN0eWxlKCkpOworICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUo
KSk7CisgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20oc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpKTsKIAotICAgIGNvbnN0IGJvb2wgaXNMZWZ0ID0gaXNMZWZ0UGFnZShwYWdlSW5kZXgpOwor
ICAgIGNvbnN0IGJvb2wgaXNMZWZ0ID0gaXNMZWZ0UGFnZShzdGF0ZSwgcGFnZUluZGV4KTsKICAg
ICBjb25zdCBib29sIGlzRmlyc3QgPSBpc0ZpcnN0UGFnZShwYWdlSW5kZXgpOwogICAgIGNvbnN0
IFN0cmluZyBwYWdlID0gcGFnZU5hbWUocGFnZUluZGV4KTsKICAgICAKQEAgLTE2MjgsNDIgKzE2
MTUsNDMgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQ
YWdlKGludCBwYWdlSW5kZXgpCiAgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3J1bGVTZXRz
LnVzZXJTdHlsZSgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwogICAgIC8vIE9ubHkgY29uc2lk
ZXIgdGhlIGdsb2JhbCBhdXRob3IgUnVsZVNldCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUg
SFRNTDUgc3BlYy4KICAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fcnVsZVNldHMuYXV0aG9y
U3R5bGUoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX3N0YXRlLnNldExpbmVIZWln
aHRWYWx1ZSgwKTsKKyAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAgICAgYm9vbCBp
bmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCi0gICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihyZXN1bHQsIGZhbHNlLCAw
LCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7Cisg
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgcmVz
dWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVy
aXRlZE9ubHkpOwogI2VuZGlmCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3Jp
dHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxI
aWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgcmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCiAgICAgLy8gSWYg
b3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVw
ZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KHN0YXRlKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0
IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KLSAg
ICBpZiAobV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOworICAgIGlm
IChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwg
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKLSAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxz
ZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkp
OworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0
ZSwgcmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEs
IGluaGVyaXRlZE9ubHkpOwogCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJl
bmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgbG9h
ZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5
bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJu
IG1fc3RhdGUudGFrZVN0eWxlKCk7CisgICAgcmV0dXJuIHN0YXRlLnRha2VTdHlsZSgpOwogfQog
CiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpkZWZhdWx0U3R5bGVGb3JF
bGVtZW50KCkKIHsKLSAgICBtX3N0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7
CisgICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQoKSk7CisgICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpKTsKICAgICAvLyBNYWtlIHN1cmUgb3VyIGZvbnRzIGFyZSBpbml0aWFs
aXplZCBpZiB3ZSBkb24ndCBpbmhlcml0IHRoZW0gZnJvbSBvdXIgcGFyZW50IHN0eWxlLgogICAg
IGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCkpIHsKLSAgICAgICAg
aW5pdGlhbGl6ZUZvbnRTdHlsZShzZXR0aW5ncyk7Ci0gICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+
Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgIGluaXRpYWxpemVGb250U3R5
bGUoc3RhdGUsIHNldHRpbmdzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0
ZShmb250U2VsZWN0b3IoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+
Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZSgw
KTsKIAotICAgIHJldHVybiBtX3N0YXRlLnRha2VTdHlsZSgpOworICAgIHJldHVybiBzdGF0ZS50
YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JUZXh0KFRleHQqIHRleHROb2RlKQpAQCAtMTc1OCw3ICsxNzQ2LDcgQEAgc3RhdGlj
IGJvb2wgaXNEaXNwbGF5RmxleGlibGVCb3goRURpc3BsYXkgZGlzcGxheSkKICAgICByZXR1cm4g
ZGlzcGxheSA9PSBGTEVYIHx8IGRpc3BsYXkgPT0gSU5MSU5FX0ZMRVg7CiB9CiAKLXZvaWQgU3R5
bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVz
dFJlbmRlclN0eWxlKFN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCiB7CiAgICAgQVNTRVJUKHBhcmVudFN0eWxlKTsK
IApAQCAtMTk1MSw3ICsxOTM5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJT
dHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgIC8v
IExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4K
ICAgICBpZiAoc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9zdGF0ZS5oYXNVQUFw
cGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZERhdGEo
KSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgIFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywgc3R5bGUsIGUsIHN0YXRlLmhhc1VBQXBwZWFy
YW5jZSgpLCBzdGF0ZS5ib3JkZXJEYXRhKCksIHN0YXRlLmJhY2tncm91bmREYXRhKCksIHN0YXRl
LmJhY2tncm91bmRDb2xvcigpKTsKIAogICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBz
ZXVkbyBzdHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCiAgICAgaWYgKHN0eWxlLT5oYXNQ
c2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQpAQCAtMjAzMiwxOCArMjAyMCwxOCBAQCBzdGF0aWMg
dm9pZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICBz
dHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZv
bnQoU3RhdGUmIHN0YXRlKQogewotICAgIGlmICghbV9zdGF0ZS5mb250RGlydHkoKSkKKyAgICBp
ZiAoIXN0YXRlLmZvbnREaXJ0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjaGVja0ZvclRl
eHRTaXplQWRqdXN0KCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgp
OwotICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRT
dHlsZSgpKTsKLSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5
bGUoKSk7CisgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChzdGF0ZSk7CisgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gc3RhdGUuc3R5bGUoKTsKKyAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFu
Z2Uoc3RhdGUsIHN0eWxlLCBzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBjaGVja0Zvclpvb21D
aGFuZ2Uoc3RhdGUsIHN0eWxlLCBzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICBjaGVja0Zvck9y
aWVudGF0aW9uQ2hhbmdlKHN0eWxlKTsKICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRT
ZWxlY3Rvcik7Ci0gICAgbV9zdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOworICAgIHN0YXRlLnNl
dEZvbnREaXJ0eShmYWxzZSk7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVz
b2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIHVuc2lnbmVkIHJ1bGVzVG9J
bmNsdWRlKQpAQCAtMjA1NiwzOSArMjA0NCwzNCBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBT
dHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBQcwog
ICAgIGlmICghZSB8fCAhZS0+ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgbV9zdGF0ZS5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6
Q29sbGVjdGluZ1J1bGVzKTsKKyAgICBTdGF0ZSBzdGF0ZShkb2N1bWVudCgpKTsKKyAgICBzdGF0
ZS5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKIAotICAgIGluaXRF
bGVtZW50KGUpOwotICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBl
LCAwLCBwc2V1ZG9JZCk7CisgICAgaW5pdEVsZW1lbnQoc3RhdGUsIGUpOworICAgIHN0YXRlLmlu
aXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwgMCwgcHNldWRvSWQpOwogCiAgICAgTWF0
Y2hSZXN1bHQgZHVtbXk7CiAgICAgaWYgKHJ1bGVzVG9JbmNsdWRlICYgVUFBbmRVc2VyQ1NTUnVs
ZXMpIHsKICAgICAgICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2Vu
dCBzaGVldC4KLSAgICAgICAgbWF0Y2hVQVJ1bGVzKGR1bW15KTsKKyAgICAgICAgbWF0Y2hVQVJ1
bGVzKHN0YXRlLCBkdW1teSk7CiAKICAgICAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQg
cnVsZXMuCiAgICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAg
ICAgIG1hdGNoVXNlclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMp
OworICAgICAgICAgICAgbWF0Y2hVc2VyUnVsZXMoc3RhdGUsIGR1bW15LCBydWxlc1RvSW5jbHVk
ZSAmIEVtcHR5Q1NTUnVsZXMpOwogICAgIH0KIAogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyAmJiAocnVsZXNUb0luY2x1ZGUgJiBBdXRob3JDU1NSdWxlcykpIHsKLSAgICAgICAg
bV9zdGF0ZS5zZXRTYW1lT3JpZ2luT25seSghKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5D
U1NSdWxlcykpOworICAgICAgICBzdGF0ZS5zZXRTYW1lT3JpZ2luT25seSghKHJ1bGVzVG9JbmNs
dWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcykpOwogCiAgICAgICAgIC8vIENoZWNrIHRoZSBydWxl
cyBpbiBhdXRob3Igc2hlZXRzLgotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKGR1bW15LCBydWxl
c1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwotCi0gICAgICAgIG1fc3RhdGUuc2V0U2FtZU9y
aWdpbk9ubHkoZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHN0YXRlLCBkdW1teSwg
cnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKICAgICB9CiAKLSAgICBtX3N0YXRlLnNl
dE1vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7Ci0KLSAgICByZXR1cm4gbV9z
dGF0ZS50YWtlUnVsZUxpc3QoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVJ1bGVMaXN0KCk7CiB9
CiAKLWlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRh
JiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVkb0lkJiBkeW5hbWlj
UHNldWRvLCBTZWxlY3RvckNoZWNrZXI6OkJlaGF2aW9yQXRCb3VuZGFyeSBiZWhhdmlvckF0Qm91
bmRhcnkpCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhTdGF0ZSYgc3Rh
dGUsIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUs
IFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBTZWxlY3RvckNoZWNrZXI6OkJlaGF2aW9yQXRCb3Vu
ZGFyeSBiZWhhdmlvckF0Qm91bmRhcnkpCiB7Ci0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
LQogICAgIGlmIChydWxlRGF0YS5oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSkgewogICAgICAg
ICAvLyBXZSBrbm93IHRoaXMgc2VsZWN0b3IgZG9lcyBub3QgaW5jbHVkZSBhbnkgcHNldWRvIGVs
ZW1lbnRzLgogICAgICAgICBpZiAoc3RhdGUucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETykKQEAg
LTIxMjcsNyArMjExMCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TZWxlY3Rv
cihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lCiAgICAgaWYgKCFyZWdp
b25TZWxlY3RvciB8fCAhcmVnaW9uRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihkb2N1bWVudCgpLCBtX3N0YXRlLm1v
ZGUoKSk7CisgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihkb2N1bWVudCgpLCBT
ZWxlY3RvckNoZWNrZXI6OlF1ZXJ5aW5nUnVsZXMpOwogICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0
b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkK
ICAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5tYXRjaGVzKHMsIHJlZ2lvbkVsZW1lbnQpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTQ5LDkgKzIxMzIsOSBAQCBMZW5ndGggU3R5
bGVSZXNvbHZlcjo6Y29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlLCBSZQogfQogCiB0ZW1wbGF0ZSA8U3R5bGVSZXNvbHZlcjo6U3R5bGVBcHBsaWNh
dGlvblBhc3MgcGFzcz4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0lt
cG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVy
dHlXaGl0ZWxpc3RUeXBlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoU3Rh
dGUmIHN0YXRlLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUq
IHJ1bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0
ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKIHsKLSAgICBBU1NFUlQoKHByb3BlcnR5
V2hpdGVsaXN0VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9zdGF0ZS5yZWdp
b25Gb3JTdHlsaW5nKCkpOworICAgIEFTU0VSVCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9IFBy
b3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpOwogICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlzKTsKIAogICAg
IHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUNvdW50KCk7CkBA
IC0yMTc5LDcgKzIxNjIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhj
b25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogICAgICAgICBjYXNl
IFZhcmlhYmxlRGVmaW5pdGlvbnM6CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9w
ZXJ0eVZhcmlhYmxlIDwgZmlyc3RDU1NQcm9wZXJ0eSwgQ1NTX3ZhcmlhYmxlX2lzX2JlZm9yZV9m
aXJzdF9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlW
YXJpYWJsZSkKLSAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3Vy
cmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBjdXJy
ZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAgICBicmVhazsKICNlbmRpZgog
ICAgICAgICBjYXNlIEhpZ2hQcmlvcml0eVByb3BlcnRpZXM6CkBAIC0yMTkyLDI2ICsyMTc1LDI1
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVy
dHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsCiAjZW5kaWYKICAgICAgICAgICAgIC8vIGdpdmUg
c3BlY2lhbCBwcmlvcml0eSB0byBmb250LXh4eCwgY29sb3IgcHJvcGVydGllcywgZXRjCiAgICAg
ICAgICAgICBpZiAocHJvcGVydHkgPCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgY3VycmVudC5pZCgpLCBjdXJyZW50LnZh
bHVlKCkpOwogICAgICAgICAgICAgLy8gd2UgYXBwbHkgbGluZS1oZWlnaHQgbGF0ZXIKICAgICAg
ICAgICAgIGVsc2UgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAg
ICAgICAgICAgICBtX3N0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShjdXJyZW50LnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShjdXJyZW50LnZhbHVlKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVz
OgogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAg
ICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkp
OworICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGN1cnJlbnQuaWQoKSwgY3Vy
cmVudC52YWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFByb2Nlc3NSdWxlKGNvb2tpZSk7CiB9CiAKIHRlbXBsYXRlIDxTdHlsZVJlc29s
dmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbCBp
c0ltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRP
bmx5KQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0YXRlJiBz
dGF0ZSwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sIGlzSW1wb3J0YW50LCBp
bnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCiB7CiAgICAg
aWYgKHN0YXJ0SW5kZXggPT0gLTEpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0YXRlJiBzdGF0
ZSA9IG1fc3RhdGU7CiAgICAgaWYgKHN0YXRlLnN0eWxlKCktPmluc2lkZUxpbmsoKSAhPSBOb3RJ
bnNpZGVMaW5rKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZElu
ZGV4OyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVk
UHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldOwpAQCAtMjIyMCw3
ICsyMjAyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNv
bnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbAogICAgICAgICAgICAgc3RhdGUuc2V0
QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoTGluayk7CiAgICAgICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRl
ZCk7CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGll
cy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0
YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1h
dGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVy
dGllczxwYXNzPihzdGF0ZSwgbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0
Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3Rh
dGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxp
c3RUeXBlKSk7CiAgICAgICAgIH0KICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKHRydWUpOwogICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKGZhbHNlKTsKQEAgLTIyMjgsNyArMjIxMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQs
IGJvb2wKICAgICB9CiAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7
ICsraSkgewogICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRp
ZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXTsKLSAgICAgICAgYXBwbHlQcm9w
ZXJ0aWVzPHBhc3M+KG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVz
dWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHksIHN0YXRpY19j
YXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlw
ZSkpOworICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4oc3RhdGUsIG1hdGNoZWRQcm9wZXJ0
aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBv
cnRhbnQsIGluaGVyaXRlZE9ubHksIHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4o
bWF0Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSkpOwogICAgIH0KIH0KIApAQCAtMjMyOCwx
MCArMjMxMCw5IEBAIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0Nh
Y2hlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFJlCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNT
RVJUKGVsZW1lbnQpOwotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgdW5zaWduZWQg
Y2FjaGVIYXNoID0gbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21wdXRlTWF0Y2hlZFByb3Bl
cnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmRhdGEoKSwgbWF0Y2hSZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKSA6IDA7CiAgICAgYm9vbCBhcHBseUluaGVyaXRl
ZE9ubHkgPSBmYWxzZTsKICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogY2Fj
aGVJdGVtID0gMDsKQEAgLTIzNTUsMTAgKzIzMzYsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29u
c3QKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIC8vIEZpcnN0IGFwcGx5IGFsbCB2
YXJpYWJsZSBkZWZpbml0aW9ucywgYXMgdGhleSBtYXkgYmUgdXNlZCBkdXJpbmcgYXBwbGljYXRp
b24gb2YgbGF0ZXIgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlh
YmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVlLCBt
YXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFw
cGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURl
ZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFS
dWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
KyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBt
YXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxW
YXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlh
YmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5
SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmlu
aXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJz
dFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25s
eSk7CiAjZW5kaWYKIAogICAgIC8vIE5vdyB3ZSBoYXZlIGFsbCBvZiB0aGUgbWF0Y2hlZCBydWxl
cyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuIFdhbGsgdGhlIHJ1bGVzIGFuZCBhcHBseQpAQCAt
MjM2NiwxMCArMjM0NywxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIC8vIFRoZSBv
cmRlciBpcyAoMSkgaGlnaC1wcmlvcml0eSBub3QgaW1wb3J0YW50LCAoMikgaGlnaC1wcmlvcml0
eSBpbXBvcnRhbnQsICgzKSBub3JtYWwgbm90IGltcG9ydGFudAogICAgIC8vIGFuZCAoNCkgbm9y
bWFsIGltcG9ydGFudC4KICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7Ci0gICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwg
ZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5
SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQ
cm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0
aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGll
cz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBt
YXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1
bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIGZhbHNl
LCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVy
aXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVy
dGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RB
dXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJp
dGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0
aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVz
ZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4o
c3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogCiAg
ICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29t
KCkgIT0gc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSB7CiAgICAgICAgIHN0YXRlLnNl
dEZvbnREaXJ0eSh0cnVlKTsKQEAgLTIzNzcsMzAgKzIzNTgsMzAgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCwgY29uc3QKICAgICB9CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhl
YWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQo
c3RhdGUpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2Ug
ZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgogICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUo
KSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxp
bmVIZWlnaHRWYWx1ZSgpKTsKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKICAgICAvLyBNYW55IHBy
b3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBjaGFuZ2VzIHdlIGp1c3QgYXBwbHkg
YWxsIHByb3BlcnRpZXMuCiAgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0
eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24o
KSkKICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAKICAgICAvLyBOb3cgZG8g
dGhlIG5vcm1hbCBwcmlvcml0eSBVQSBwcm9wZXJ0aWVzLgotICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVz
dWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFw
cGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0
eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdl
cy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJp
dGVkT25seSk7CiAgICAgCiAgICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBz
byB0aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCiAgICAgc3RhdGUuY2FjaGVCb3JkZXJB
bmRCYWNrZ3JvdW5kKCk7CiAgICAgCiAgICAgLy8gTm93IGRvIHRoZSBhdXRob3IgYW5kIHVzZXIg
bm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0aGUgIWltcG9ydGFudCBwcm9wZXJ0
aWVzLgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPiht
YXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlICsgMSwgbWF0
Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0
Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQs
IHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9y
aXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93
UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1By
aW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5y
YW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5
UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
Zmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwogICAgCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBi
eSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgbG9hZFBlbmRp
bmdSZXNvdXJjZXMoc3RhdGUpOwogICAgIAogICAgIEFTU0VSVCghc3RhdGUuZm9udERpcnR5KCkp
OwogICAgIApAQCAtMjQ3MCwxMCArMjQ1MSwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNo
UGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsCiAg
ICAgfQogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkg
Y29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZShTdGF0ZSYgc3RhdGUsIGludCBw
YWdlSW5kZXgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc0ZpcnN0UGFnZUxlZnQgPSBmYWxzZTsKLSAg
ICBpZiAoIW1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpCisgICAgaWYgKCFzdGF0ZS5yb290RWxlbWVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKICAgICAgICAgaXNGaXJzdFBhZ2VMZWZ0ID0gdHJ1ZTsKIAogICAgIHJldHVybiAo
cGFnZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVmdCA/IDEgOiAwKSkgJSAyOwpAQCAtMjQ5MSwxOCAr
MjQ3MiwzMSBAQCBTdHJpbmcgU3R5bGVSZXNvbHZlcjo6cGFnZU5hbWUoaW50IC8qIHBhZ2VJbmRl
eCAqLykgY29uc3QKICAgICByZXR1cm4gIiI7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBSZW5k
ZXJTdHlsZSogc3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlXaXRoTnVs
bENoZWNrKFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ewotICAgIGluaXRFbGVtZW50KDApOwotICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShk
b2N1bWVudCgpLCAwLCBzdHlsZSk7Ci0gICAgbV9zdGF0ZS5zZXRTdHlsZShzdHlsZSk7Ci0gICAg
YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCB2YWx1ZSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuOworICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGlkLCB2YWx1ZSk7CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlG
b250UHJvcGVydHlUb1N0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCogcGFyc2VkU3R5bGUpCiB7Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICBhcHBseVByb3Bl
cnR5KGlkLCB2YWx1ZSk7CisgICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQoKSk7CisgICAgc3RhdGUu
aW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCAwLCBzdHlsZSk7CisgICAgc3RhdGUuc2V0
U3R5bGUoc3R5bGUpOworCisgICAgYXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2soc3RhdGUsIENT
U1Byb3BlcnR5Rm9udEZhbWlseSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hl
Y2soc3RhdGUsIENTU1Byb3BlcnR5Rm9udFN0eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkpOworICAgIGFwcGx5UHJvcGVydHlX
aXRoTnVsbENoZWNrKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBwYXJzZWRTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50KS5nZXQoKSk7CisgICAg
YXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2soc3RhdGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCwg
cGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5n
ZXQoKSk7CisKKyAgICAvLyBBcyBkZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1z
aXplIGFuZCBsaW5lLWhlaWdodCBvbiBhIGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZh
bHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlIGNhbGwsCisgICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUg
Zm9udE1ldHJpY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lz
ZSBhIGNyYXNoIG9jY3VycyAoc2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2
MTIyKS4KKyAgICAvLyBUaGUgdXBkYXRlRm9udCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9u
dE1ldHJpY3MgYW5kIGVuc3VyZSB0aGUgcHJvcGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBs
aW5lLWhlaWdodC4KKyAgICB1cGRhdGVGb250KHN0YXRlKTsKKyAgICBhcHBseVByb3BlcnR5V2l0
aE51bGxDaGVjayhzdGF0ZSwgQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2VkU3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkuZ2V0KCkpOworICAgIHVwZGF0ZUZv
bnQoc3RhdGUpOworICAgIGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKHN0YXRlLCBDU1NQcm9w
ZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5TGluZUhlaWdodCkuZ2V0KCkpOwogfQogCiBpbmxpbmUgYm9vbCBpc1ZhbGlkVmlzaXRlZExp
bmtQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQpAQCAtMjYwNSwxMCArMjU5OSw2IEBAIGlubGlu
ZSBib29sIFN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQpCiAvLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcvLi4uIGZyb20gdGhlIFJlbmRl
clN0eWxlIC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5ldmVyIHNjYWxlLAogLy8gaWYg
d2UnZCBwYXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFzcyBh
IHpvb20gZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKIC8vIHByb3BlcnRpZXMgdGhhdCBhcmUg
Tk9UIGFsbG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1bWVudCAobGV0dGVy
L3dvcmQtc3BhY2luZy9mb250LXNpemUpLgotYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29t
UnVsZXMoKQotewotICAgIHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKSAmJiBtX3N0YXRlLmVsZW1l
bnQoKS0+aXNTVkdFbGVtZW50KCk7Ci19CiAKIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0Jy
ZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsZVJlc29s
dmVyOjpTdGF0ZSYgc3RhdGUsIExlbmd0aCYgd29ya2luZ0xlbmd0aCkKIHsKQEAgLTI3MjYsOSAr
MjcxNiw5IEBAIHN0YXRpYyBib29sIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKENTU1ZhbHVlKiB2YWx1
ZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZh
cmlhYmxlcyhDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxzdGQ6OnBh
aXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKQordm9pZCBTdHls
ZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmlu
Zz4gPiYga25vd25FeHByZXNzaW9ucykKIHsKLSAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwg
U3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVz
KCptX3N0YXRlLnN0eWxlKCktPnZhcmlhYmxlcygpKSk7CisgICAgc3RkOjpwYWlyPENTU1Byb3Bl
cnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6ZVJlc29sdmluZ1Zh
cmlhYmxlcygqc3RhdGUuc3R5bGUoKS0+dmFyaWFibGVzKCkpKTsKIAogICAgIGlmIChrbm93bkV4
cHJlc3Npb25zLmNvbnRhaW5zKGV4cHJlc3Npb24pKQogICAgICAgICByZXR1cm47IC8vIGN5Y2xl
IGRldGVjdGVkLgpAQCAtMjc0MywyNCArMjczMywyMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJl
c29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8
cwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRTZXQtPnByb3BlcnR5Q291bnQo
KTsgaSsrKSB7CiAgICAgICAgIFN0eWxlUHJvcGVydHlTZXQ6OlByb3BlcnR5UmVmZXJlbmNlIHBy
b3BlcnR5ID0gcmVzdWx0U2V0LT5wcm9wZXJ0eUF0KGkpOwogICAgICAgICBpZiAocHJvcGVydHku
aWQoKSAhPSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHByb3Bl
cnR5LnZhbHVlKCkpKQotICAgICAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhwcm9wZXJ0eS5pZCgp
LCBwcm9wZXJ0eS52YWx1ZSgpLCBrbm93bkV4cHJlc3Npb25zKTsKKyAgICAgICAgICAgIHJlc29s
dmVWYXJpYWJsZXMoc3RhdGUsIHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCksIGtub3du
RXhwcmVzc2lvbnMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBseVByb3BlcnR5KHBy
b3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0
eShzdGF0ZSwgcHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFsdWUoKSk7CiAgICAgfQogfQogI2Vu
ZGlmCiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoU3Rh
dGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAjaWYgRU5B
QkxFKENTU19WQVJJQUJMRVMpCiAgICAgaWYgKGlkICE9IENTU1Byb3BlcnR5VmFyaWFibGUgJiYg
aGFzVmFyaWFibGVSZWZlcmVuY2UodmFsdWUpKSB7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+IGtub3duRXhwcmVzc2lvbnM7Ci0gICAgICAgIHJlc29s
dmVWYXJpYWJsZXMoaWQsIHZhbHVlLCBrbm93bkV4cHJlc3Npb25zKTsKKyAgICAgICAgcmVzb2x2
ZVZhcmlhYmxlcyhzdGF0ZSwgaWQsIHZhbHVlLCBrbm93bkV4cHJlc3Npb25zKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAg
ICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0
ZWRWYWx1ZSgpOwogICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkg
fHwgKCFzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAK
QEAgLTI3OTAsMTEgKzI3NzksMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjb25zdCBQcm9wZXJ0eUhh
bmRsZXImIGhhbmRsZXIgPSBtX3N0eWxlQnVpbGRlci5wcm9wZXJ0eUhhbmRsZXIoaWQpOwogICAg
IGlmIChoYW5kbGVyLmlzVmFsaWQoKSkgewogICAgICAgICBpZiAoaXNJbmhlcml0KQotICAgICAg
ICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShpZCwgdGhpcyk7CisgICAgICAgICAgICBo
YW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKGlkLCBzdGF0ZSk7CiAgICAgICAgIGVsc2UgaWYgKGlz
SW5pdGlhbCkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUoaWQsIHRoaXMp
OworICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShpZCwgc3RhdGUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUoaWQsIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShpZCwgc3RhdGUsIHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjgyNiwxOSArMjgxNSwxOSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwogICAgICAgICAg
ICAgICAgIGlmIChpdGVtLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAoaXRlbS0+aXNHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0
ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4oaXRlbSktPmdyYWRpZW50V2l0aFN0eWxl
c1Jlc29sdmVkKHRoaXMpLmdldCgpKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0
YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVz
b2x2ZWQoc3RhdGUpLmdldCgpKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+
KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNp
ZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0t
PmlzSW1hZ2VTZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3Rh
dGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUo
c3RhdGUsIENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+
KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNl
bmRpZgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0lt
YWdlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250
ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19j
YXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRl
LCBDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSks
IGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTI5NDAsNyArMjkyOSw3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0Zh
bWlseShwYXJlbnRGb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKTsKICAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmZpcnN0RmFt
aWx5KCkpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChw
YXJlbnRGb250RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkpOwotICAgICAgICAgICAgc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdGF0ZS5zZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0yOTUwLDExICsyOTM5LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAg
ICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJp
YyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlCiAgICAgICAgICAgICAvLyB0byBub24tbW9u
b3NwYWNlLgogICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYm
IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpCi0gICAgICAgICAgICAgICAg
c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQo
KSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBm
YWxzZSkpOworICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRp
b24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250
RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNlKSk7CiAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmljRmFtaWx5KCkp
OwogICAgICAgICAgICAgaWYgKCFpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpLmZhbWlseUlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KGluaXRpYWxE
ZXNjLmZpcnN0RmFtaWx5KCkpOwotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0zMDI5LDkg
KzMwMTgsOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAvLyBJZiBjdXJyRmFtaWx5IGlzIG5vbi16
ZXJvIHRoZW4gd2Ugc2V0IGF0IGxlYXN0IG9uZSBmYW1pbHkgb24gdGhpcyBkZXNjcmlwdGlvbi4K
ICAgICAgICAgaWYgKGN1cnJGYW1pbHkpIHsKICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRp
b24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgp
ICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKQotICAgICAgICAgICAgICAgIHNldEZv
bnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENT
U1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgIW9sZEZh
bWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9udFNpemUo
c3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENT
U1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgIW9sZEZh
bWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CiAKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTMwNTYsMTMgKzMwNDUsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKTsKICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoc3RhdGUu
cGFyZW50U3R5bGUoKS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKICAgICAgICAgICAgIHN0YXRl
LnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CiAgICAgICAg
ICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CiAgICAgICAgICAg
ICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0
aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNl
dHRpbmdzCiAgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOworICAgICAgICAg
ICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzdGF0ZSwgc2V0dGluZ3MpOwogICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5l
SGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKICAgICAgICAgICAgIHN0
YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKQEAgLTMwODEsMjcgKzMwNzAsMjcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQo
ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRp
b25FbmFibGVkKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZhY3Rv
ci4KLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENv
bXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZv
bnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVk
U2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwotICAgICAgICAgICAgICAgIHNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1l
bnQoKSwgc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZv
bnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHN0YXRlLnVzZVNWR1pvb21SdWxlcygpKSk7
CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzRm9udFZhbHVl
KCkpIHsKICAgICAgICAgICAgIEZvbnRWYWx1ZSogZm9udCA9IHN0YXRpY19jYXN0PEZvbnRWYWx1
ZSo+KHZhbHVlKTsKICAgICAgICAgICAgIGlmICghZm9udC0+c3R5bGUgfHwgIWZvbnQtPnZhcmlh
bnQgfHwgIWZvbnQtPndlaWdodAogICAgICAgICAgICAgICAgIHx8ICFmb250LT5zaXplIHx8ICFm
b250LT5saW5lSGVpZ2h0IHx8ICFmb250LT5mYW1pbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgZm9udC0+
c3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LT53ZWlnaHQuZ2V0KCkpOworICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250U3R5bGUsIGZvbnQtPnN0eWxlLmdl
dCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFZh
cmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShz
dGF0ZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LT53ZWlnaHQuZ2V0KCkpOwogICAgICAg
ICAgICAgLy8gVGhlIHByZXZpb3VzIHByb3BlcnRpZXMgY2FuIGRpcnR5IG91ciBmb250IGJ1dCB0
aGV5IGRvbid0IHRyeSB0byByZWFkIHRoZSBmb250J3MKICAgICAgICAgICAgIC8vIHByb3BlcnRp
ZXMgYmFjaywgd2hpY2ggaXMgc2FmZS4gSG93ZXZlciBpZiBmb250LXNpemUgaXMgdXNpbmcgdGhl
ICdleCcgdW5pdCwgaXQgd2lsbAogICAgICAgICAgICAgLy8gbmVlZCBxdWVyeSB0aGUgZGlydGll
ZCBmb250J3MgeC1oZWlnaHQgdG8gZ2V0IHRoZSBjb21wdXRlZCBzaXplLiBUbyBiZSBzYWZlIGlu
IHRoaXMKICAgICAgICAgICAgIC8vIGNhc2UsIGxldCdzIGp1c3QgdXBkYXRlIHRoZSBmb250IG5v
dy4KLSAgICAgICAgICAgIHVwZGF0ZUZvbnQoKTsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5nZXQoKSk7CisgICAgICAgICAgICB1cGRh
dGVGb250KHN0YXRlKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3Bl
cnR5Rm9udFNpemUsIGZvbnQtPnNpemUuZ2V0KCkpOwogCiAgICAgICAgICAgICBzdGF0ZS5zZXRM
aW5lSGVpZ2h0VmFsdWUoZm9udC0+bGluZUhlaWdodC5nZXQoKSk7CiAKLSAgICAgICAgICAgIGFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250LT5mYW1pbHkuZ2V0KCkpOwor
ICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250RmFtaWx5LCBm
b250LT5mYW1pbHkuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKIApAQCAtMzEz
Miw3ICszMTIxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRv
d1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAg
ICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZy
b21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICAgICAgY29s
b3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgaXRlbS0+Y29sb3IuZ2V0KCkpOwog
ICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3R5bGUoKSkKICAgICAgICAgICAgICAgICBjb2xv
ciA9IHN0YXRlLnN0eWxlKCktPmNvbG9yKCk7CiAKQEAgLTMxNjEsNyArMzE1MCw4IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5v
ZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50
Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAgICAgICAgTmluZVBpZWNlSW1hZ2Ug
bWFzazsKICAgICAgICAgbWFzay5zZXRNYXNrRGVmYXVsdHMoKTsKLSAgICAgICAgbV9zdHlsZU1h
cC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOworICAg
ICAgICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRlKTsKKyAgICAgICAgc3R5bGVNYXAubWFw
TmluZVBpZWNlSW1hZ2UoaWQsIHJlZmxlY3RWYWx1ZS0+bWFzaygpLCBtYXNrKTsKICAgICAgICAg
cmVmbGVjdGlvbi0+c2V0TWFzayhtYXNrKTsKIAogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRC
b3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKQEAgLTMyNTMsMTQgKzMyNDMsMTQgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2FsZShwcmltaXRp
dmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0
aW9uKHN0YXRlLnN0eWxlKCktPmxvY2FsZSgpKSk7Ci0gICAgICAgIHNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwodGV4dFNpemVBZGp1c3QsIFRleHRTaXplQWRqdXN0KQogICAgICAgICBpZiAoIXByaW1p
dGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgc2V0VGV4dFNpemVBZGp1c3QocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgc3RhdGUuc2V0VGV4dFNpemVBZGp1c3QocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkBAIC0zMzg3LDcgKzMzNzcs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICAgICAgQ29sb3IgY29sID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUo
cHJpbWl0aXZlVmFsdWUpOworICAgICAgICBDb2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRpdmVW
YWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRU
YXBIaWdobGlnaHRDb2xvcihjb2wpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ0Miw3
ICszNDMyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgbmV3
SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQsIHN0YXRl
LnN0eWxlKCktPmRpcmVjdGlvbigpLCBzdGF0ZS5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKICAg
ICAgICAgQVNTRVJUKG5ld0lkICE9IGlkKTsKLSAgICAgICAgcmV0dXJuIGFwcGx5UHJvcGVydHko
bmV3SWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGFwcGx5UHJvcGVydHkoc3RhdGUsIG5ld0lk
LCB2YWx1ZSk7CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKICAgICBj
YXNlIENTU1Byb3BlcnR5UGFnZToKQEAgLTM0NzIsNyArMzQ2Miw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHdyaXRpbmdNb2RlLCBXcml0aW5nTW9k
ZSk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICBz
ZXRXcml0aW5nTW9kZSgqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc3RhdGUuc2V0V3Jp
dGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKIAogICAgICAgICAvLyBGSVhNRTogSXQgaXMgbm90
IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBseWluZyBzdHlsZS4KICAgICAg
ICAgaWYgKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCkBAIC0zNDg0LDcgKzM0NzQsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0ZXh0T3JpZW50YXRpb24sIFRl
eHRPcmllbnRhdGlvbik7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKQotICAgICAgICAg
ICAgc2V0VGV4dE9yaWVudGF0aW9uKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzdGF0
ZS5zZXRUZXh0T3JpZW50YXRpb24oKnByaW1pdGl2ZVZhbHVlKTsKIAogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzUwNyw3ICszNDk3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAvLyBDU1MgRm9u
dHMgTW9kdWxlIExldmVsIDMKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEZlYXR1cmVT
ZXR0aW5nczogewogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHNldEZvbnREZXNj
cmlwdGlvbihzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVy
ZVNldHRpbmdzKCkpOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKHN0YXRl
LnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxGZWF0dXJlU2V0dGluZ3MoKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzUyNiw3ICszNTE2LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHNldHRpbmdzLT5hcHBlbmQoRm9udEZlYXR1cmUoZmVh
dHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVlKCkpKTsKICAgICAgICAgfQogICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0RmVhdHVyZVNldHRpbmdzKHNldHRpbmdzLnJlbGVhc2UoKSk7Ci0gICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMzUzNCw3ICszNTI0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0RmlsdGVyOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZp
bHRlciwgRmlsdGVyKTsKICAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAg
ICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKSkKKyAgICAgICAgaWYgKGNyZWF0ZUZp
bHRlck9wZXJhdGlvbnMoc3RhdGUsIHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIG9wZXJhdGlvbnMpKQogICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
RmlsdGVyKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzg1NSw3MiAr
Mzg0NSw3MiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGRlZmF1bHQ6CiAjaWYgRU5BQkxFKFNWRykKICAg
ICAgICAgLy8gVHJ5IHRoZSBTVkcgcHJvcGVydGllcwotICAgICAgICBhcHBseVNWR1Byb3BlcnR5
KGlkLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5U1ZHUHJvcGVydHkoc3RhdGUsIGlkLCB2YWx1ZSk7
CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENT
U1ZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVJbWFnZShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2
YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQotICAgICAgICByZXR1cm4g
Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZh
bHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShz
dGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPih2YWx1ZSkpOwogCiAg
ICAgaWYgKHZhbHVlLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgewogICAgICAgICBpZiAodmFs
dWUtPmlzR3JhZGllbnRWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVu
ZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KHZh
bHVlKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpOwotICAgICAgICBy
ZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxD
U1NJbWFnZUdlbmVyYXRvclZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5l
cmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NH
cmFkaWVudFZhbHVlKj4odmFsdWUpLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChzdGF0ZSku
Z2V0KCkpOworICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRl
LCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7
CiAgICAgfQogCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgaWYgKHZhbHVlLT5pc0lt
YWdlU2V0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9w
ZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJl
dHVybiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxD
U1NJbWFnZVNldFZhbHVlKj4odmFsdWUpKTsKICNlbmRpZgogCiAgICAgaWYgKHZhbHVlLT5pc0N1
cnNvckltYWdlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1
ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KHZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBz
dGF0aWNfY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlKj4odmFsdWUpKTsKIAogICAgIHJldHVybiAw
OwogfQogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVu
ZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1
ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5n
RnJvbVZhbHVlKFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VW
YWx1ZSogdmFsdWUpCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNh
Y2hlZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJ
bWFnZSgpKQotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJv
cGVydHksIHZhbHVlKTsKKyAgICAgICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNl
dChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKLVBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJv
bVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZh
bHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBl
bmRpbmdGcm9tVmFsdWUoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzUGVuZGluZygp
KSB7Ci0gICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0
eSwgdmFsdWUpOworICAgICAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHBy
b3BlcnR5LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBTdHlsZVBlbmRpbmdJbWFnZTo6Y3JlYXRl
KHZhbHVlKTsKICAgICB9CiAgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSh2
YWx1ZSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLVBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmIHN0YXRlLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSZWZQ
dHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9j
dW1lbnQoKSk7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9y
UGVuZGluZ0ltYWdlU2V0KHN0YXRlLmRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFn
ZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0
aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIHN0YXRlLnBlbmRpbmdJbWFnZVBy
b3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFz
ZSgpOwogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0N1cnNv
ckltYWdlVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
OjpjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBDU1NDdXJzb3JJbWFnZVZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8U3R5bGVJ
bWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoZG9jdW1lbnQoKSk7Cisg
ICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdl
KHN0YXRlLmRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1h
Z2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3Bl
cnR5LCB2YWx1ZSk7CisgICAgICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQo
cHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQordm9pZCBTdHlsZVJlc29s
dmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSBtX3N0YXRlLnN0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
c3RhdGUuc3R5bGUoKTsKIAogICAgIGlmIChzdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzkzMCwxOCArMzkyMCwxOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNo
ZWNrRm9yVGV4dFNpemVBZGp1c3QoKQogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3
Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21D
aGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShTdGF0ZSYgc3RhdGUsIFJlbmRlclN0
eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmIChzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpID09IHBhcmVudFN0eWxlLT5lZmZlY3RpdmVab29tKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOwogICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRp
b24oY2hpbGRGb250KTsKLSAgICBzZXRGb250U2l6ZShuZXdGb250RGVzY3JpcHRpb24sIGNoaWxk
Rm9udC5zcGVjaWZpZWRTaXplKCkpOworICAgIHNldEZvbnRTaXplKHN0YXRlLCBuZXdGb250RGVz
Y3JpcHRpb24sIGNoaWxkRm9udC5zcGVjaWZpZWRTaXplKCkpOwogICAgIHN0eWxlLT5zZXRGb250
RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVy
OjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0Zh
bWlseUNoYW5nZShTdGF0ZSYgc3RhdGUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKQogewogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0g
c3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogCkBAIC0zOTc1LDExICszOTY1LDExIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBz
dHlsZSwgUmVuZGVyU3R5bGUqCiAgICAgfQogCiAgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnRE
ZXNjcmlwdGlvbihjaGlsZEZvbnQpOwotICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlv
biwgc2l6ZSk7CisgICAgc2V0Rm9udFNpemUoc3RhdGUsIG5ld0ZvbnREZXNjcmlwdGlvbiwgc2l6
ZSk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqIHNl
dHRpbmdzKQordm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFN0YXRlJiBz
dGF0ZSwgU2V0dGluZ3MqIHNldHRpbmdzKQogewogICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2Ny
aXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7CkBAIC0zOTkxLDE2ICszOTgxLDE2IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKICAgICB9
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NT
VmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250
U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7Ci0gICAg
bV9zdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhl
aWdodCgpKTsKLSAgICBtX3N0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKLSAgICBzZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICBzZXRGb250U2l6ZShzdGF0ZSwgZm9u
dERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRp
dW0sIGZhbHNlKSk7CisgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHls
ZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDAp
OworICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogfQogCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBmbG9hdCBzaXplKQordm9pZCBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShTdGF0
ZSYgc3RhdGUsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQog
ewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUoZG9jdW1lbnQoKSwgbV9zdGF0ZS5zdHlsZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0
ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKHN0YXRlLmRv
Y3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgp
LCBzaXplLCBzdGF0ZS51c2VTVkdab29tUnVsZXMoKSkpOwogfQogCiBmbG9hdCBTdHlsZVJlc29s
dmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQs
IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVk
U2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpCkBAIC00MTk4LDEyICs0MTg4LDExIEBAIGJvb2wg
U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVu
dChDU1NQcmltaXRpdmVWYWx1CiAgICAgfQogfQogCi1Db2xvciBTdHlsZVJlc29sdmVyOjpjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVmlz
aXRlZExpbmspIGNvbnN0CitDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVW
YWx1ZShjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ByaW1pdGl2ZVZhbHVl
KiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykKIHsKICAgICBpZiAodmFsdWUtPmlzUkdCQ29s
b3IoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpKTsKIAot
ICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgaW50IGlkZW50ID0gdmFsdWUt
PmdldElkZW50KCk7CiAgICAgc3dpdGNoIChpZGVudCkgewogICAgIGNhc2UgMDoKQEAgLTQ1NDks
OSArNDUzOCw4IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVy
T3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1CiB9CiAKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5n
U1ZHRG9jdW1lbnRzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVu
dHMoU3RhdGUmIHN0YXRlKQogewotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgaWYg
KCFzdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRz
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ1NzgsMjkgKzQ1NjYsMjkgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKLVN0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpzdHls
ZVNoYWRlcihDU1NWYWx1ZSogdmFsdWUpCitTdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6c3R5
bGVTaGFkZXIoU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVl
LT5pc1dlYktpdENTU1NoYWRlclZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRp
bmdTdHlsZVNoYWRlckZyb21WYWx1ZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NTaGFkZXJWYWx1ZSo+
KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21W
YWx1ZShzdGF0ZSwgc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUqPih2YWx1ZSkpOwog
ICAgIHJldHVybiAwOwogfQogCi1TdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQ
ZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHZhbHVlKQor
U3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJv
bVZhbHVlKFN0YXRlJiBzdGF0ZSwgV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHZhbHVlKQogewogICAg
IFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nU2hhZGVyKCk7CiAg
ICAgaWYgKHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1NoYWRlcigpKQotICAgICAgICBtX3N0
YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJzKHRydWUpOworICAgICAgICBzdGF0ZS5zZXRIYXNQZW5k
aW5nU2hhZGVycyh0cnVlKTsKICAgICByZXR1cm4gc2hhZGVyOwogfQogCi12b2lkIFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nU2hhZGVycyhTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLnN0eWxlKCktPmhh
c0ZpbHRlcigpIHx8ICFtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzKCkpCisgICAgaWYgKCFzdGF0
ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCAhc3RhdGUuaGFzUGVuZGluZ1NoYWRlcnMoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNl
TG9hZGVyID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAg
IENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRlLmRvY3Vt
ZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKLSAgICBWZWN0b3I8UmVmUHRyPEZpbHRl
ck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3RhdGUuc3R5bGUoKS0+bXV0YWJs
ZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlv
bj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IHN0YXRlLnN0eWxlKCktPm11dGFibGVGaWx0ZXIoKS5v
cGVyYXRpb25zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlck9wZXJhdGlv
bnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZmlsdGVy
T3BlcmF0aW9uID0gZmlsdGVyT3BlcmF0aW9ucy5hdChpKTsKICAgICAgICAgaWYgKGZpbHRlck9w
ZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NKSB7
CkBAIC00NjE3LDcgKzQ2MDUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hh
ZGVycygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgbV9zdGF0ZS5zZXRI
YXNQZW5kaW5nU2hhZGVycyhmYWxzZSk7CisgICAgc3RhdGUuc2V0SGFzUGVuZGluZ1NoYWRlcnMo
ZmFsc2UpOwogfQogCiBzdGF0aWMgYm9vbCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBhcmF0b3Io
Y29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGEsIGNvbnN0IFJlZlB0cjxDdXN0
b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQpAQCAtNDY1NSwxNiArNDY0MywxNiBAQCBQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJO
dW1iZXJQYXJhbWV0ZQogICAgIHJldHVybiBudW1iZXJQYXJhbWV0ZXIucmVsZWFzZSgpOwogfQog
Ci1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VD
dXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1
ZUxpc3QqIHZhbHVlcykKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJl
c29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihTdGF0ZSYgc3RhdGUs
IGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMpCiB7CiAgICAgUmVmUHRy
PEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcj4gdHJhbnNmb3JtUGFyYW1ldGVyID0gQ3Vz
dG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyOjpjcmVhdGUobmFtZSk7CiAgICAgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFs
dWVzLCBtX3N0YXRlLnN0eWxlKCksIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRp
b25zKTsKKyAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKTsKICAgICB0cmFuc2Zvcm1Q
YXJhbWV0ZXItPnNldE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7CiAgICAgcmV0dXJuIHRyYW5zZm9y
bVBhcmFtZXRlci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1l
dGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihjb25zdCBTdHJp
bmcmIG5hbWUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJWYWx1ZSkKK1Bhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihT
dGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqIHBhcmFtZXRlclZhbHVl
KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIgcGFyYW1ldGVycyB0eXBlcyBwYXJz
aW5nLgogICAgIC8vIGJvb2xlYW5zOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY0MzgKQEAgLTQ2ODcsNyArNDY3NSw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
UGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihjb25z
CiAgICAgLy8gYXJlIHRyYW5zZm9ybXMuIHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1l
dGVyIHdpbGwKICAgICAvLyByZXR1cm4gMCBpZiB0aGF0IGFzc3VtcHRpb24gaXMgaW5jb3JyZWN0
LgogICAgIGlmICh2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCktPmlzV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNm
b3JtUGFyYW1ldGVyKG5hbWUsIHZhbHVlcyk7CisgICAgICAgIHJldHVybiBwYXJzZUN1c3RvbUZp
bHRlclRyYW5zZm9ybVBhcmFtZXRlcihzdGF0ZSwgbmFtZSwgdmFsdWVzKTsKIAogICAgIC8vIFdl
IGNhbiBoYXZlIG9ubHkgYXJyYXlzIG9mIGJvb2xlYW5zIG9yIG51bWJlcnMsIHNvIHVzZSB0aGUg
Zmlyc3QgdmFsdWUgdG8gY2hvb3NlIGJldHdlZW4gdGhvc2UgdHdvLgogICAgIC8vIFdlIG5lZWQg
dXAgdG8gNCB2YWx1ZXMgKGFsbCBib29sZWFucyBvciBhbGwgbnVtYmVycykuCkBAIC00NzA0LDcg
KzQ2OTIsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZl
cjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29ucwogICAgIHJldHVybiAwOwogfQogCi1i
b29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1
ZSogcGFyYW1ldGVyc1ZhbHVlLCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJM
aXN0KQorYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3Qo
U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVlLCBDdXN0b21GaWx0ZXJQYXJh
bWV0ZXJMaXN0JiBwYXJhbWV0ZXJMaXN0KQogewogICAgIEhhc2hTZXQ8U3RyaW5nPiBrbm93blBh
cmFtZXRlck5hbWVzOwogICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHBhcmFtZXRlckl0ZXJhdG9y
KHBhcmFtZXRlcnNWYWx1ZSk7CkBAIC00NzI5LDcgKzQ3MTcsNyBAQCBib29sIFN0eWxlUmVzb2x2
ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSogcGFyYW1ldGVyc1Zh
bHVlLCBDdQogICAgICAgICBpZiAoIWl0ZXJhdG9yLmhhc01vcmUoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0
ZXI+IHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKG5hbWUsIGl0ZXJhdG9y
LnZhbHVlKCkpOworICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJhbWV0
ZXIgPSBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihzdGF0ZSwgbmFtZSwgaXRlcmF0b3IudmFs
dWUoKSk7CiAgICAgICAgIGlmICghcGFyYW1ldGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBwYXJhbWV0ZXJMaXN0LmFwcGVuZChwYXJhbWV0ZXIucmVsZWFzZSgpKTsKQEAg
LTQ3NDgsNyArNDczNiw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHls
ZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoCiAgICAgcmV0dXJuIDA7
CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpj
cmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KFdlYktpdENTU0ZpbHRl
clZhbHVlKiBmaWx0ZXJWYWx1ZSkKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBT
dHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4
KFN0YXRlJiBzdGF0ZSwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVlKQogewogICAg
IENTU1ZhbHVlKiBzaGFkZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygwKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzaGFkZXJzVmFs
dWUtPmlzVmFsdWVMaXN0KCkpOwpAQCAtNDc1Nyw3ICs0NzQ1LDcgQEAgUGFzc1JlZlB0cjxDdXN0
b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJh
dGlvbldpdGgKICAgICB1bnNpZ25lZCBzaGFkZXJzTGlzdExlbmd0aCA9IHNoYWRlcnNMaXN0LT5s
ZW5ndGgoKTsKICAgICBBU1NFUlQoc2hhZGVyc0xpc3RMZW5ndGgpOwogCi0gICAgUmVmUHRyPFN0
eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNoYWRlcihzaGFkZXJzTGlzdC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAgUmVmUHRyPFN0eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFk
ZXIgPSBzdHlsZVNoYWRlcihzdGF0ZSwgc2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soMCkpOwogICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gZnJhZ21lbnRTaGFkZXI7CiAgICAgQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUgPSBQUk9HUkFNX1RZUEVfQkxFTkRTX0VM
RU1FTlRfVEVYVFVSRTsKICAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0
dGluZ3M7CkBAIC00NzcwLDcgKzQ3NTgsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJh
dGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aAogICAg
ICAgICAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXRlcmF0b3IobWl4RnVuY3Rpb24pOwogCiAg
ICAgICAgICAgICBBU1NFUlQobWl4RnVuY3Rpb24tPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGZy
YWdtZW50U2hhZGVyID0gc3R5bGVTaGFkZXIoaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgICAg
ICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKHN0YXRlLCBpdGVyYXRvci52YWx1ZSgpKTsK
ICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKIAogICAgICAgICAgICAgQVNTRVJUKG1p
eEZ1bmN0aW9uLT5sZW5ndGgoKSA8PSAzKTsKQEAgLTQ3ODYsNyArNDc3NCw3IEBAIFBhc3NSZWZQ
dHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0
ZXJPcGVyYXRpb25XaXRoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBwcm9ncmFtVHlwZSA9IFBST0dSQU1fVFlQRV9OT19FTEVNRU5UX1RFWFRVUkU7Ci0gICAg
ICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyT3JNaXhG
dW5jdGlvbik7CisgICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKHN0YXRl
LCBmcmFnbWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgfQogICAgIApA
QCAtNDg0MiwyMyArNDgzMCwyMyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4g
U3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aAogICAgICAgICBw
YXJhbWV0ZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKTsK
ICAgICAKICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0IHBhcmFtZXRlckxpc3Q7Ci0gICAg
aWYgKHBhcmFtZXRlcnNWYWx1ZSAmJiAhcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KHBh
cmFtZXRlcnNWYWx1ZSwgcGFyYW1ldGVyTGlzdCkpCisgICAgaWYgKHBhcmFtZXRlcnNWYWx1ZSAm
JiAhcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KHN0YXRlLCBwYXJhbWV0ZXJzVmFsdWUs
IHBhcmFtZXRlckxpc3QpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBSZWZQdHI8U3R5
bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFt
OjpjcmVhdGUodmVydGV4U2hhZGVyLnJlbGVhc2UoKSwgZnJhZ21lbnRTaGFkZXIucmVsZWFzZSgp
LCBwcm9ncmFtVHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hUeXBlKTsKICAgICByZXR1cm4gQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUocHJvZ3JhbS5yZWxlYXNlKCksIHBhcmFtZXRlckxpc3Qs
IG1lc2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaFR5cGUpOwogfQogCi1QYXNzUmVmUHRyPEN1c3Rv
bUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uKFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKK1Bhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRp
b24oU3RhdGUmIHN0YXRlLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCiB7CiAg
ICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5ndGgoKSk7CiAgICAgYm9vbCBpc0F0UnVsZVJlZmVy
ZW5jZVN5bnRheCA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApLT5pc1By
aW1pdGl2ZVZhbHVlKCk7Ci0gICAgcmV0dXJuIGlzQXRSdWxlUmVmZXJlbmNlU3ludGF4ID8gY3Jl
YXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVsZVJlZmVyZW5jZVN5bnRheChmaWx0ZXJW
YWx1ZSkgOiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KGZpbHRl
clZhbHVlKTsKKyAgICByZXR1cm4gaXNBdFJ1bGVSZWZlcmVuY2VTeW50YXggPyBjcmVhdGVDdXN0
b21GaWx0ZXJPcGVyYXRpb25XaXRoQXRSdWxlUmVmZXJlbmNlU3ludGF4KGZpbHRlclZhbHVlKSA6
IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgoc3RhdGUsIGZpbHRl
clZhbHVlKTsKIH0KIAogI2VuZGlmCiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJT
dHlsZSogcm9vdFN0eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQorYm9vbCBT
dHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwg
RmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKIHsKICAgICBBU1NFUlQob3V0T3BlcmF0
aW9ucy5pc0VtcHR5KCkpOwogICAgIApAQCAtNDg5MSw3ICs0ODc5LDcgQEAgYm9vbCBTdHlsZVJl
c29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJT
dHlsZSogc3R5bGUKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlm
IChvcGVyYXRpb25UeXBlID09IEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NKSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBjcmVhdGVDdXN0b21G
aWx0ZXJPcGVyYXRpb24oZmlsdGVyVmFsdWUpOworICAgICAgICAgICAgUmVmUHRyPEN1c3RvbUZp
bHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKHN0
YXRlLCBmaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBpZiAoIW9wZXJhdGlvbikKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKQEAgLTQ5MDksMTIgKzQ4OTcsMTIg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogc3ZnRG9jdW1lbnRWYWx1ZSA9
IHN0YXRpY19jYXN0PFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqPihhcmd1bWVudCk7Ci0gICAg
ICAgICAgICBLVVJMIHVybCA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9j
dW1lbnRWYWx1ZS0+dXJsKCkpOworICAgICAgICAgICAgS1VSTCB1cmwgPSBzdGF0ZS5kb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1bWVudFZhbHVlLT51cmwoKSk7CiAKICAgICAgICAgICAg
IFJlZlB0cjxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbjo6Y3JlYXRlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCB1cmwuZnJhZ21l
bnRJZGVudGlmaWVyKCksIG9wZXJhdGlvblR5cGUpOwotICAgICAgICAgICAgaWYgKFNWR1VSSVJl
ZmVyZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwg
bV9zdGF0ZS5kb2N1bWVudCgpKSkgeworICAgICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6
aXNFeHRlcm5hbFVSSVJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgc3RhdGUuZG9j
dW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50VmFsdWUtPmxvYWRS
ZXF1ZXN0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5wZW5kaW5nU1ZHRG9jdW1l
bnRzKCkuc2V0KG9wZXJhdGlvbi5nZXQoKSwgc3ZnRG9jdW1lbnRWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5zZXQob3BlcmF0aW9uLmdldCgp
LCBzdmdEb2N1bWVudFZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdmdEb2N1bWVu
dFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdE
b2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKSkp
OwogICAgICAgICAgICAgfQpAQCAtNDk5OCw3ICs0OTg2LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVy
OjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSog
c3R5bGUKICAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNv
bXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CiAgICAg
ICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKLSAgICAg
ICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0
YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7CiAKICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0
aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRpb24s
IGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50LCBvcGVy
YXRpb25UeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUwMTYsOSArNTAwNCw5IEBAIGJv
b2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1
ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAKICNlbmRpZgogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRp
bmdJbWFnZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdJbWFnZShTdGF0ZSYgc3RhdGUsIFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7
Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0
ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNl
TG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRlLmRvY3VtZW50KCktPmNhY2hlZFJl
c291cmNlTG9hZGVyKCk7CiAKICAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCkp
IHsKICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3Nz
SW1hZ2VWYWx1ZSgpOwpAQCAtNTA0NiwyOSArNTAzNCwyOSBAQCBQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBl
bmRpbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5n
SW1hZ2VzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoU3RhdGUmIHN0
YXRlKQogewotICAgIGlmIChtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5pc0VtcHR5
KCkpCisgICAgaWYgKHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVy
YXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5lbmQoKS5r
ZXlzKCk7Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6
OktleXMgaXQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5iZWdpbigpLmtleXMo
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0
X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5lbmQo
KS5rZXlzKCk7CisgICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0
b3I6OktleXMgaXQgPSBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuYmVnaW4oKS5rZXlz
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9w
ZXJ0eSA9ICppdDsKIAogICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOiB7Ci0gICAgICAgICAgICBmb3IgKEZp
bGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdGF0ZS5zdHlsZSgpLT5hY2Nlc3NCYWNrZ3Jv
dW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3Vu
ZExheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5k
TGF5ZXIgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91
bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZExheWVyLT5pbWFnZSgpICYmIGJhY2tncm91bmRM
YXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgYmFj
a2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxl
UGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOworICAgICAgICAgICAg
ICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUs
IHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFnZSgp
KSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6IHsKLSAgICAgICAgICAgIGZvciAoQ29udGVudERh
dGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1fc3RhdGUuc3R5bGUo
KS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRh
LT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0g
Y29uc3RfY2FzdDxDb250ZW50RGF0YSo+KHN0YXRlLnN0eWxlKCktPmNvbnRlbnREYXRhKCkpOyBj
b250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29u
dGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVu
ZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdl
PiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihpbWFnZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1h
Z2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxv
YWRlZEltYWdlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEltYWdl
Q29udGVudERhdGEqPihjb250ZW50RGF0YSktPnNldEltYWdlKGxvYWRlZEltYWdlLnJlbGVhc2Uo
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUwNzcsNDYgKzUwNjUsNDYgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOiB7Ci0gICAgICAgICAgICBp
ZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IG1fc3RhdGUuc3R5bGUoKS0+Y3Vyc29ycygpKSB7
CisgICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IHN0YXRlLnN0eWxlKCkt
PmN1cnNvcnMoKSkgewogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3Vy
c29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgQ3Vyc29yRGF0YSYg
Y3VycmVudEN1cnNvciA9IGN1cnNvckxpc3QtPmF0KGkpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdlKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29yLnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uo
c3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29yLnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3Rh
dGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1h
Z2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkg
JiYgbV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQot
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBl
bmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUo
KS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5s
aXN0U3R5bGVJbWFnZSgpICYmIHN0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCktPmlzUGVu
ZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGlzdFN0eWxl
SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihzdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNl
OiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgp
ICYmIG1fc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2Uo
KSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldEJvcmRlckltYWdlU291cmNl
KGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRl
LnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAoc3RhdGUu
c3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFn
ZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19j
YXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2Uo
KSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3hSZWZsZWN0OiB7Ci0gICAgICAgICAgICBpZiAoU3R5bGVSZWZsZWN0aW9u
KiByZWZsZWN0aW9uID0gbV9zdGF0ZS5zdHlsZSgpLT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAg
ICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBzdGF0ZS5zdHlsZSgpLT5ib3hS
ZWZsZWN0KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgbWFza0lt
YWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOwogICAgICAgICAgICAgICAgIGlmIChtYXNrSW1hZ2Uu
aW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAg
ICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGlu
Z0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdlLmltYWdlKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0g
bG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPiht
YXNrSW1hZ2UuaW1hZ2UoKSkpOwogICAgICAgICAgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRN
YXNrKE5pbmVQaWVjZUltYWdlKGxvYWRlZEltYWdlLnJlbGVhc2UoKSwgbWFza0ltYWdlLmltYWdl
U2xpY2VzKCksIG1hc2tJbWFnZS5maWxsKCksIG1hc2tJbWFnZS5ib3JkZXJTbGljZXMoKSwgbWFz
a0ltYWdlLm91dHNldCgpLCBtYXNrSW1hZ2UuaG9yaXpvbnRhbFJ1bGUoKSwgbWFza0ltYWdlLnZl
cnRpY2FsUnVsZSgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tCb3hJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+bWFz
a0JveEltYWdlU291cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2Uo
KS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNl
dE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVu
ZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKKyAg
ICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBzdGF0
ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRp
bmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihzdGF0ZS5zdHls
ZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2U6IHsKLSAgICAgICAg
ICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBtX3N0YXRlLnN0eWxlKCktPmFjY2Vzc01h
c2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewor
ICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IHN0YXRlLnN0eWxlKCktPmFj
Y2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQo
KSkgewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVy
LT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgICAgICBtYXNrTGF5
ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CisgICAgICAgICAgICAgICAgICAgIG1hc2tMYXll
ci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTEyNSwyMiArNTExMywyMiBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1f
c3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7CisgICAgc3RhdGUucGVuZGlu
Z0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9h
ZFBlbmRpbmdSZXNvdXJjZXMoKQordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291
cmNlcyhTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVmZXJl
bmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisgICAgbG9hZFBl
bmRpbmdJbWFnZXMoc3RhdGUpOwogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIC8vIFN0
YXJ0IGxvYWRpbmcgdGhlIHNoYWRlcnMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxv
YWRQZW5kaW5nU2hhZGVycygpOworICAgIGxvYWRQZW5kaW5nU2hhZGVycyhzdGF0ZSk7CiAjZW5k
aWYKICAgICAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCiAgICAgLy8g
U3RhcnQgbG9hZGluZyB0aGUgU1ZHIERvY3VtZW50cyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUu
Ci0gICAgbG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKTsKKyAgICBsb2FkUGVuZGluZ1NWR0RvY3Vt
ZW50cyhzdGF0ZSk7CiAjZW5kaWYKIH0KIApAQCAtNTE4Myw4ICs1MTcxLDYgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdAogICAgIGluZm8uYWRkTWVtYmVyKG1faW5zcGVjdG9yQ1NTT01XcmFwcGVy
cyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9zY29wZVJlc29sdmVyLCAic2NvcGVSZXNvbHZlciIp
OwogCi0gICAgaW5mby5hZGRNZW1iZXIobV9zdGF0ZSwgInN0YXRlIik7Ci0KICAgICAvLyBGSVhN
RTogbW92ZSB0aGlzIHRvIGEgcGxhY2Ugd2hlcmUgaXQgd291bGQgYmUgY2FsbGVkIG9ubHkgb25j
ZT8KICAgICBpbmZvLmFkZE1lbWJlcihDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRTdHls
ZSwgImRlZmF1bHRTdHlsZSIpOwogICAgIGluZm8uYWRkTWVtYmVyKENTU0RlZmF1bHRTdHlsZVNo
ZWV0czo6ZGVmYXVsdFF1aXJrc1N0eWxlLCAiZGVmYXVsdFF1aXJrc1N0eWxlIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCAyY2RhYzFlZGFlNTFiOGUzNTA0MTU5NDgxYmI2MzNm
OGQxMjEwYmM5Li4yODU2ZDczNTlkMzI2Y2U4NDQzNzUwMzMwNWM5NTk4ZDc1OTlkNzRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1ZGUg
IkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgotI2luY2x1ZGUgIkNTU1RvU3R5
bGVNYXAuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudFJ1
bGVTZXRzLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oIgpAQCAtMTc4LDEz
ICsxNzcsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAotICAg
IFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUoKTsgfQot
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFy
ZW50U3R5bGUoKTsgfQotICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCk7IH0KLSAgICBFbGVtZW50KiBlbGVt
ZW50KCkgeyByZXR1cm4gbV9zdGF0ZS5lbGVtZW50KCk7IH0KICAgICBEb2N1bWVudCogZG9jdW1l
bnQoKSB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgU3R5bGVTY29wZVJlc29sdmVyKiBzY29w
ZVJlc29sdmVyKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZVJlc29sdmVyLmdldCgpOyB9Ci0gICAg
Ym9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnROb2RlKCk7
IH0KIAogICAgIC8vIEZJWE1FOiBJdCBjb3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCBtX3J1bGVTZXRz
LmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKCkgZGlyZWN0bHkgYWZ0ZXIgd2UgZmFjdG9yIFN0eWxl
UnNvbHZlciBmdXJ0aGVyLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDg4OTAKQEAgLTIxMCwxNyArMjA0LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fc2NvcGVSZXNvbHZlci5nZXQoKTsKICAgICB9CiAjZW5kaWYKKyAgICBjbGFzcyBTdGF0
ZTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKLSAgICBSZW5k
ZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKLSAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqKTsKLSAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKTsKKyAgICB2b2lkIGluaXRFbGVtZW50KFN0YXRlJiwgRWxl
bWVudCopOworICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFyZWRTdHlsZShTdGF0ZSYpOworICAg
IGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoRWxlbWVudCosIFJ1bGVT
ZXQqKTsKKyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoU3Rh
dGUmKTsKICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWdu
ZWQmIHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0OwotICAgIFN0eWxlZEVsZW1lbnQqIGZpbmRTaWJs
aW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OwotICAgIGJv
b2wgY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAgICBT
dHlsZWRFbGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhjb25zdCBTdGF0ZSYsIE5v
ZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OworICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhF
bGVtZW50KGNvbnN0IFN0YXRlJiwgU3R5bGVkRWxlbWVudCopIGNvbnN0OwogCi0gICAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFN0eWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVlJik7CisgICAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShTdGF0ZSYsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29u
c3QgU3R5bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsKIAogcHVibGljOgogICAgIC8vIFRo
ZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQg
Zm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCkBAIC0yNDMsMjUgKzIz
OCwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGludCBsZWdhY3lGb250U2l6ZShEb2N1bWVudCos
IGludCBwaXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwogCiBw
dWJsaWM6Ci0gICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NW
YWx1ZSosIFJlbmRlclN0eWxlKik7CisgICAgdm9pZCBhcHBseUZvbnRQcm9wZXJ0eVRvU3R5bGUo
UmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0Kik7CiAKLSAgICB2b2lkIGFwcGx5
UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwotCi0gICAg
dm9pZCB1cGRhdGVGb250KCk7Ci0gICAgdm9pZCBpbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdz
Kik7CisgICAgdm9pZCB1cGRhdGVGb250KFN0YXRlJik7CisgICAgdm9pZCBpbml0aWFsaXplRm9u
dFN0eWxlKFN0YXRlJiwgU2V0dGluZ3MqKTsKIAogICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRl
ZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIGZsb2F0IHpvb21GYWN0b3IsIGJvb2wg
aXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1pbmltdW1Gb3JGb250
U2l6ZSA9IFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplKTsKIAotICAgIHZvaWQgc2V0Rm9udFNp
emUoRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7CisgICAgc3RhdGljIHZvaWQgc2V0Rm9u
dFNpemUoU3RhdGUmLCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKIAogcHJpdmF0ZToK
ICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1l
bnQqLCBSZW5kZXJTdHlsZSosIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNp
emUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKTsKIAogcHVibGljOgotICAgIGJvb2wgdXNlU1ZHWm9v
bVJ1bGVzKCk7Ci0KICAgICBzdGF0aWMgYm9vbCBjb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVy
aXZlZEZyb21FbGVtZW50KENTU1ByaW1pdGl2ZVZhbHVlKik7Ci0gICAgQ29sb3IgY29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIGZvclZpc2l0ZWRMaW5rID0g
ZmFsc2UpIGNvbnN0OworICAgIHN0YXRpYyBDb2xvciBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShj
b25zdCBTdGF0ZSYsIENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZh
bHNlKTsKIAogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JJZChjb25zdCBBdG9taWNTdHJpbmcmKSBj
b25zdDsKICAgICBib29sIGhhc1NlbGVjdG9yRm9yQ2xhc3MoY29uc3QgQXRvbWljU3RyaW5nJikg
Y29uc3Q7CkBAIC0yODksMzQgKzI4MCwzNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRl
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAg
IGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5
bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91
dE9wZXJhdGlvbnMpOworICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdGF0ZSYsIENT
U1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CiAjaWYgRU5BQkxFKENTU19T
SEFERVJTKQotICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihDU1NWYWx1ZSopOwotICAgIFN0
eWxlU2hhZGVyKiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NT
aGFkZXJWYWx1ZSopOwotICAgIGJvb2wgcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENT
U1ZhbHVlKiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOwotICAgIFBhc3NSZWZQdHI8Q3Vz
dG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihjb25zdCBTdHJp
bmcmIG5hbWUsIENTU1ZhbHVlKik7CisgICAgU3R5bGVTaGFkZXIqIHN0eWxlU2hhZGVyKFN0YXRl
JiwgQ1NTVmFsdWUqKTsKKyAgICBTdHlsZVNoYWRlciogY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFk
ZXJGcm9tVmFsdWUoU3RhdGUmLCBXZWJLaXRDU1NTaGFkZXJWYWx1ZSopOworICAgIGJvb2wgcGFy
c2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KFN0YXRlJiwgQ1NTVmFsdWUqLCBDdXN0b21GaWx0
ZXJQYXJhbWV0ZXJMaXN0Jik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+
IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKFN0YXRlJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBD
U1NWYWx1ZSopOwogICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1
c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0
Kik7CiAgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmls
dGVyTnVtYmVyUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7Ci0g
ICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyVHJh
bnNmb3JtUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7CisgICAg
UGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNm
b3JtUGFyYW1ldGVyKFN0YXRlJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsK
ICAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uV2l0aEF0UnVsZVJlZmVyZW5jZVN5bnRheChXZWJLaXRDU1NGaWx0ZXJWYWx1ZSop
OwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGVDdXN0b21GaWx0
ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KFdlYktpdENTU0ZpbHRlclZhbHVlKik7Ci0gICAg
UGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJh
dGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOwotICAgIHZvaWQgbG9hZFBlbmRpbmdTaGFkZXJz
KCk7CisgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZUN1c3RvbUZp
bHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgoU3RhdGUmLCBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZSopOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGVDdXN0b21G
aWx0ZXJPcGVyYXRpb24oU3RhdGUmLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOworICAgIHZvaWQg
bG9hZFBlbmRpbmdTaGFkZXJzKFN0YXRlJik7CiAjZW5kaWYKICNpZiBFTkFCTEUoU1ZHKQotICAg
IHZvaWQgbG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nU1ZH
RG9jdW1lbnRzKFN0YXRlJik7CiAjZW5kaWYKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CiAKLSAgICB2b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgdm9pZCBsb2FkUGVuZGlu
Z1Jlc291cmNlcyhTdGF0ZSYpOwogCiBwcml2YXRlOgogICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4
ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgY3VycmVu
dCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoCi0gICAgdm9pZCBjaGVja0Zv
ckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUpOwotICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKKyAg
ICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShTdGF0ZSYsIFJlbmRlclN0eWxlKiwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShT
dGF0ZSYsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lk
IGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoU3RhdGUmKTsKIAotICAgIHZvaWQgYWRqdXN0UmVuZGVy
U3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSwgRWxlbWVudCopOworICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoU3RhdGUmLCBSZW5kZXJT
dHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7
CiAKICAgICBzdHJ1Y3QgUnVsZVJhbmdlIHsKICAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RS
dWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUlu
ZGV4KSwgbGFzdFJ1bGVJbmRleChsYXN0UnVsZUluZGV4KSB7IH0KQEAgLTM2MywyNSArMzU0LDI1
IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hS
ZXN1bHQmLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0g
MCwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIFBy
b3BlcnR5V2hpdGVsaXN0VHlwZSA9IFByb3BlcnR5V2hpdGVsaXN0Tm9uZSk7CiAgICAgdm9pZCBh
ZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCosIGJvb2wgaXNDYWNoZWFibGUgPSB0cnVlKTsKIAotICAgIHZvaWQgbWF0Y2hBbGxSdWxl
cyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKTsKLSAgICB2b2lkIG1h
dGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYpOwotICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVz
dWx0JiwgUnVsZVNldCopOwotICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0Y2hS
ZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoU2NvcGVkQXV0
aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lk
IG1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Cisg
ICAgdm9pZCBtYXRjaEFsbFJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVT
TUlMUHJvcGVydGllcyk7CisgICAgdm9pZCBtYXRjaFVBUnVsZXMoU3RhdGUmLCBNYXRjaFJlc3Vs
dCYpOworICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQmLCBSdWxlU2V0
Kik7CisgICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQmLCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKFN0YXRlJiwgTWF0
Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoU2NvcGVk
QXV0aG9yUnVsZXMoU3RhdGUmLCBNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OworICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoU3RhdGUmLCBNYXRjaFJlc3VsdCYsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpOwogCi0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBN
YXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOwotICAgIHZvaWQgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBjb25zdCBN
YXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KFN0YXRlJiwgY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7CisgICAgdm9pZCBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihTdGF0ZSYsIGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1
bGVSYW5nZSYpOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KFN0YXRlJiwg
Y29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYp
OwogCiAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsK
LSAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKLSAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYpOworICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcyhTdGF0
ZSYpOworICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKFN0YXRlJiwgTWF0Y2hS
ZXN1bHQmKTsKIAotICAgIGJvb2wgcnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmLCBjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmLCBTZWxlY3RvckNoZWNrZXI6OkJlaGF2aW9y
QXRCb3VuZGFyeSA9IFNlbGVjdG9yQ2hlY2tlcjo6RG9lc05vdENyb3NzQm91bmRhcnkpOworICAg
IGJvb2wgcnVsZU1hdGNoZXMoU3RhdGUmLCBjb25zdCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYsIFNlbGVjdG9yQ2hlY2tlcjo6QmVoYXZpb3JBdEJvdW5k
YXJ5ID0gU2VsZWN0b3JDaGVja2VyOjpEb2VzTm90Q3Jvc3NCb3VuZGFyeSk7CiAgICAgYm9vbCBj
aGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxl
bWVudCogcmVnaW9uRWxlbWVudCk7Ci0gICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNv
bnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCopOworICAgIHZvaWQgYXBwbHlNYXRjaGVk
UHJvcGVydGllcyhTdGF0ZSYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCopOwog
ICAgIGVudW0gU3R5bGVBcHBsaWNhdGlvblBhc3MgewogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVT
KQogICAgICAgICBWYXJpYWJsZURlZmluaXRpb25zLApAQCAtMzkwLDExICszODEsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgTG93UHJpb3JpdHlQcm9wZXJ0aWVzCiAgICAgfTsKICAgICB0ZW1wbGF0
ZSA8U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KLSAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgs
IGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsKKyAgICB2b2lkIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXMoU3RhdGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBp
bnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOwogICAgIHRl
bXBsYXRlIDxTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotICAgIHZvaWQgYXBwbHlQcm9wZXJ0
aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wg
aXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlID0g
UHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKKyAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhTdGF0ZSYs
IGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJ
bXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlID0gUHJv
cGVydHlXaGl0ZWxpc3ROb25lKTsKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKLSAgICB2b2lk
IHJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBWZWN0b3I8c3RkOjpw
YWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucyk7CisgICAgdm9p
ZCByZXNvbHZlVmFyaWFibGVzKFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBWZWN0
b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucyk7
CiAjZW5kaWYKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEKTsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC00MDQsOCArMzk1LDggQEAg
cHJpdmF0ZToKICAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxl
UGFnZSo+JiBtYXRjaGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mLCBib29s
IGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwog
ICAgIFNldHRpbmdzKiBkb2N1bWVudFNldHRpbmdzKCkgeyByZXR1cm4gbV9kb2N1bWVudC0+c2V0
dGluZ3MoKTsgfQogCi0gICAgYm9vbCBpc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0Owot
ICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVm
dFBhZ2UocGFnZUluZGV4KTsgfQorICAgIGJvb2wgaXNMZWZ0UGFnZShTdGF0ZSYsIGludCBwYWdl
SW5kZXgpIGNvbnN0OworICAgIGJvb2wgaXNSaWdodFBhZ2UoU3RhdGUmIHN0YXRlLCBpbnQgcGFn
ZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShzdGF0ZSwgcGFnZUluZGV4KTsgfQog
ICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CiAgICAgU3RyaW5nIHBh
Z2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OwogCkBAIC00MTUsMTYgKzQwNiwxNyBAQCBwcml2
YXRlOgogICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxlTWFwOwogCiBwdWJsaWM6
CisKICAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPiA+
IFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5B
QkxFKFNWRykKICAgICB0eXBlZGVmIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdl
YktpdENTU1NWR0RvY3VtZW50VmFsdWU+ID4gUGVuZGluZ1NWR0RvY3VtZW50TWFwOwogI2VuZGlm
Ci0KICAgICBjbGFzcyBTdGF0ZSB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YXRl
KTsKICAgICBwdWJsaWM6Ci0gICAgICAgIFN0YXRlKCkKLSAgICAgICAgOiBtX2VsZW1lbnQoMCkK
KyAgICAgICAgU3RhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgICAgICA6IG1fZG9jdW1lbnQo
ZG9jdW1lbnQpCisgICAgICAgICwgbV9lbGVtZW50KDApCiAgICAgICAgICwgbV9zdHlsZWRFbGVt
ZW50KDApCiAgICAgICAgICwgbV9wYXJlbnROb2RlKDApCiAgICAgICAgICwgbV9wYXJlbnRTdHls
ZSgwKQpAQCAtNDUxLDcgKzQ0Myw3IEBAIHB1YmxpYzoKICAgICAgICAgdm9pZCBpbml0Rm9yU3R5
bGVSZXNvbHZlKERvY3VtZW50KiwgRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8sIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9
IDApOwogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpOyB9CisgICAgICAgIERvY3Vt
ZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICAgICAgRWxl
bWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogICAgICAgICBTdHls
ZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZWRFbGVtZW50
OyB9CiAgICAgICAgIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUp
IHsgbV9zdHlsZSA9IHN0eWxlOyB9CkBAIC01MTIsMTEgKzUwNCwxMCBAQCBwdWJsaWM6CiAKICAg
ICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMoKSB7IHJldHVy
biBtX21hdGNoZWRSdWxlczsgfQogICAgICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1
bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQorICAgICAgICBi
b29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudCAmJiBtX2VsZW1l
bnQtPmlzU1ZHRWxlbWVudCgpOyB9CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIC8v
IEZJWE1FKGJ1ZyAxMDg1NjMpOiB0byBtYWtlIGl0IGVhc2llciB0byByZXZpZXcsIHRoZXNlIG1l
bWJlcgotICAgICAgICAvLyB2YXJpYWJsZXMgYXJlIHB1YmxpYy4gSG93ZXZlciB3ZSBzaG91bGQg
YWRkIG1ldGhvZHMgdG8gYWNjZXNzCi0gICAgICAgIC8vIHRoZXNlIHZhcmlhYmxlcy4KKyAgICAg
ICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKICAg
ICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwogICAgICAgICBTdHlsZWRFbGVtZW50
KiBtX3N0eWxlZEVsZW1lbnQ7CkBAIC01NjIsMzAgKzU1MywxOCBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHls
ZU5vdFlldEF2YWlsYWJsZTsgfQogCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUlt
YWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSop
OwotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NT
VmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRp
bmdGcm9tVmFsdWUoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVl
KFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSopOwogI2lmIEVO
QUJMRShDU1NfSU1BR0VfU0VUKQotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc2V0T3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlU2V0VmFsdWUqKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmLCBD
U1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7CiAjZW5kaWYKLSAgICBQYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1ND
dXJzb3JJbWFnZVZhbHVlKik7Ci0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCk7
IH0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKTsgfQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShTdGF0
ZSYsIENTU1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdlVmFsdWUqKTsKIAogICAgIHN0YXRpYyBM
ZW5ndGggY29udmVydFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUq
LCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwogICAgIHN0
YXRpYyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5k
ZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7
CiAKLSAgICBDU1NUb1N0eWxlTWFwKiBzdHlsZU1hcCgpIHsgcmV0dXJuICZtX3N0eWxlTWFwOyB9
CiAgICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NTT01XcmFwcGVycygpIHsg
cmV0dXJuIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5mb250RGVzY3JpcHRpb24o
KTsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkg
eyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsgfQotICAgIHZvaWQgc2V0
Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7
IG1fc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KLSAgICB2b2lk
IHNldFpvb20oZmxvYXQgZikgeyBtX3N0YXRlLnNldFpvb20oZik7IH0KLSAgICB2b2lkIHNldEVm
ZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX3N0YXRlLnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAg
ICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX3N0YXRlLnNldFRleHRTaXplQWRq
dXN0KGIpOyB9Ci0gICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkgeyBtX3N0YXRlLnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQotICAgIHZvaWQgc2V0
VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9zdGF0
ZS5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQogICAgIAogICAgIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogICAgIApAQCAtNTk1
LDE2ICs1NzQsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3Vu
ZCgpOwogCiBwcml2YXRlOgotICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxl
ZEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChjb25z
dCBTdGF0ZSYsIFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVdpdGhO
dWxsQ2hlY2soU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBw
bHlQcm9wZXJ0eShTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKICNpZiBFTkFC
TEUoU1ZHKQotICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1
ZSopOworICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0eShjb25zdCBTdGF0ZSYsIENTU1Byb3BlcnR5
SUQsIENTU1ZhbHVlKik7CiAjZW5kaWYKIAotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gbG9h
ZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSopOwotICAgIHZvaWQgbG9hZFBlbmRpbmdJ
bWFnZXMoKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3Rh
dGUmLCBTdHlsZVBlbmRpbmdJbWFnZSopOworICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoU3Rh
dGUmKTsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNo
KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiwgdW5zaWduZWQgc2l6ZSk7CiAgICAgc3RydWN0IE1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtIHsKQEAgLTYyMiw3ICs2MDIsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKFRpbWVyPFN0eWxlUmVzb2x2ZXI+
Kik7CiAKICAgICBib29sIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoY29uc3QgU3BhY2VTcGxp
dFN0cmluZyYpIGNvbnN0OwotICAgIGJvb2wgc2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0
eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBz
aGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGNvbnN0
IFN0YXRlJiwgU3R5bGVkRWxlbWVudCopIGNvbnN0OwogCiAgICAgdW5zaWduZWQgbV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXA7CiAKQEAgLTY0OSwxMSArNjI5
LDggQEAgcHJpdmF0ZToKICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIG1fc3R5bGVCdWlsZGVyOwog
CiAgICAgT3duUHRyPFN0eWxlU2NvcGVSZXNvbHZlcj4gbV9zY29wZVJlc29sdmVyOwotICAgIENT
U1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKICAgICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzIG1faW5z
cGVjdG9yQ1NTT01XcmFwcGVyczsKIAotICAgIFN0YXRlIG1fc3RhdGU7Ci0KICAgICBmcmllbmQg
Y2xhc3MgU3R5bGVCdWlsZGVyOwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTWF0
Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwogICAgIGZyaWVuZCBi
b29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJv
cGVydGllcyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggNDQyYzE5ZTZiNTM3M2FmNjdiNTYxYWQyYmNi
YjJhMDIwNDgzY2ZlZC4uMzcwYmVkY2E3ZDUzOTUwNzE1NTc2ODU5YjdjODc2MTU2OWMzNTIxOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCkBAIC0yMDY0LDE4ICsyMDY0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQogCiAgICAgLy8gTm93
IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5bGUuCiAgICAgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGNhbnZhcygpLT5zdHlsZVJlc29sdmVyKCk7Ci0g
ICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250RmFt
aWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1p
bHkpLmdldCgpLCBuZXdTdHlsZS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9w
ZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFN0eWxlLCBwYXJzZWRTdHlsZS0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkpOwotICAgIHN0eWxl
UmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRWYXJp
YW50LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJp
YW50KS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0
eWxlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7Ci0KLSAgICAvLyBBcyBkZXNjcmliZWQg
aW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodCBvbiBhIGZvbnQg
bWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlIGNhbGws
Ci0gICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUgZm9udE1ldHJpY3MgYXJlIGF2YWlsYWJsZSBmb3Ig
dGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBhIGNyYXNoIG9jY3VycyAoc2VlIGh0dHA6Ly90
cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIyKS4KLSAgICAvLyBUaGUgdXBkYXRlRm9udCgp
IGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9udE1ldHJpY3MgYW5kIGVuc3VyZSB0aGUgcHJvcGVy
IHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodC4KLSAgICBzdHlsZVJlc29sdmVy
LT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVu
dFN0eWxlKENTU1Byb3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udFNpemUpLmdldCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLT51cGRh
dGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxl
KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CisgICAgc3R5bGVSZXNvbHZlci0+YXBwbHlG
b250UHJvcGVydHlUb1N0eWxlKG5ld1N0eWxlLmdldCgpLCBwYXJzZWRTdHlsZS5nZXQoKSk7CiAK
ICAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2ZvbnQgPSBuZXdTdHlsZS0+Zm9udCgpOwogICAgIG1v
ZGlmaWFibGVTdGF0ZSgpLm1fZm9udC51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVjdG9y
KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190754</attachid>
            <date>2013-02-28 10:37:37 -0800</date>
            <delta_ts>2013-03-04 21:22:38 -0800</delta_ts>
            <desc>Patch(revised)</desc>
            <filename>bug-109909-20130301033349.patch</filename>
            <type>text/plain</type>
            <size>239965</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk3ODgwOGY3NTI5ZmI0
N2RkYjdlNjgzZTBiOWQ4ZDYyNDI1MTIwZi4uZWQ4NDNkZmYyNTk2OTJlOTYxODRiMjRkZTExN2Ji
MjlkNmExN2U1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAxMy0wMi0xNSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmFjdG9yaW5n
XSBNYWtlIG1fc3RhdGUgYW4gb24tc3RhY2sgb2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk5MDkKKworICAgICAgICBSZXZpZXdlZCBieSBB
bnR0aSBLb2l2aXN0by4KKworICAgICAgICBNb2RlIG1fc3RhdGUsIGFuIGluc3RhbmNlIG9mIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlLCBhbiBvbi1zdGFjayBvYmplY3QuCisgICAgICAgIFRoZSBzdGF0
ZSBpcyBvbmx5IHJlcXVpcmVkIGluIHN0eWxlRm9yRWxlbWVudCwgc3R5bGVGb3JLZXlmcmFtZSBh
bmQKKyAgICAgICAgc28gb24uIE5vIG5lZWQgdG8ga2VlcCB0aGUgc3RhdGUgb3V0c2lkZSBvZiB0
aG9zZSBtZXRob2RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYmVjYXVzZSBqdXN0IHJlZmFj
dG9yaW5nLgorCisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udmVydFRvTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OmJhc2ljU2hh
cGVGb3JWYWx1ZSk6CisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJlc29sdmVyKiB3aXRoIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNv
bHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAgICAgKENTU0dy
YWRpZW50VmFsdWUpOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJlc29sdmVyKiB3aXRoIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
U3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxl
TWFwOjpzdHlsZUltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0eWxl
TWFwKToKKyAgICAgICAgKENTU1RvU3R5bGVNYXApOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJl
c29sdmVyKiB3aXRoIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvU1ZHQ1NT
U3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KToKKyAgICAgICAgUmVwbGFjZWQgbV9zdGF0ZSB3aXRoIHN0YXRlIHdoaWNo
IGlzIGdpdmVuIGFzIGFuIGFyZ3VtZW50IG9mCisgICAgICAgIGFwcGx5U1ZHUHJvcGVydHkuCisg
ICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5RXhwYW5kaW5nOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5RXhwYW5kaW5nOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5RXhwYW5kaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseUluaXRpYWxWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHQ6OmFwcGx5VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU51bWJlcjo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5U3R5bGVJbWFnZTo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjpjb252ZXJ0VG9MZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEaXJlY3Rpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5U3RyaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlCb3JkZXJSYWRpdXM6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRM
aWdhdHVyZXM6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBs
eUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2VNb2RpZmllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvdW50ZXI6OmVtcHR5RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvdW50ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDb3VudGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDdXJzb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDdXJzb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDdXJzb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eVRleHRBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5VGV4dERlY29yYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6YXBw
bHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBo
YXNpc1N0eWxlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlB
bmltYXRpb246Om1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QW5pbWF0aW9u
OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QW5p
bWF0aW9uOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5QW5pbWF0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlPdXRsaW5lU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVJlc2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5VmVydGljYWxBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0aW86OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlJbml0aWFsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjpyZXNldEVmZmVjdGl2
ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OmFwcGx5SW5oZXJp
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjphcHBseUluaXRp
YWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6YXBwbHlWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6aXNWYWxpZERpc3Bs
YXlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6YXBwbHlJ
bmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmFw
cGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwUGF0aDo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RXhjbHVzaW9uU2hh
cGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVz
b2x1dGlvbjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgICog
Y3NzL1N0eWxlQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQcm9wZXJ0
eUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjphcHBseUluaGVy
aXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6OmFwcGx5SW5pdGlh
bFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIFJlcGxhY2VkIFN0eWxlUmVzb2x2ZXIqIHdpdGggU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6CisgICAg
ICAgIFJlbW92ZWQgbV9zdHlsZU1hcC4gTm93IG1fc3R5bGVNYXAgaXMgYW4gb24tc3RhY2sgb2Jq
ZWN0LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c29ydE1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
aGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hh
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
dHlsZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVu
ZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0
ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzZXRGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpzdHlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZp
bHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIEp1c3QgcmVwbGFjZWQg
bV9zdGF0ZSB3aXRoIHN0YXRlIGFuZCBhZGRlZCBvbmUgbW9yZSBwYXJhbWV0ZXIgdG8KKyAgICAg
ICAgcHJvdmlkZSB0aGUgc3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIFNpbmNlIG1fc3RhdGUgd2FzIHJlbW92ZWQsIHJl
bW92ZWQgYSBjb2RlIGZvciByZXBvcnRpbmcgbV9zdGF0ZSdzCisgICAgICAgIG1lbW9yeSB1c2Fn
ZS4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppc1JpZ2h0UGFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRvY3VtZW50KToKKyAgICAgICAgU2luY2UgU3Rh
dGU6Om1fZWxlbWVudCBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZSAoc29tZXRpbWVzLCAwKSwKKyAg
ICAgICAgYWRkZWQgbV9kb2N1bWVudCB0byBTdGF0ZSBhbmQgbW9kaWZpZWQgdG8gcmV0dXJuIHRo
ZSBtX2RvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnVz
ZVNWR1pvb21SdWxlcyk6CisgICAgICAgIE1vdmVkIFN0eWxlUmVzb2x2ZXIgdG8gU3RhdGUuCisg
ICAgICAgIChTdGF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0Rm9udCk6CisgICAgICAgIE1vdmVkIHRoZSBjb2RlLCB1cGRhdGluZyBhIHN0eWxlIGJ5IHVz
aW5nIGEgZ2l2ZW4gU3R5bGVQcm9wZXJ0eVNldCwKKyAgICAgICAgdG8gU3R5bGVSZXNvbHZlci4K
KwogMjAxMy0wMi0yOCAgQWxiZXJ0byBHYXJjaWEgIDxhZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0JsYWNrQmVycnldIFVzZXIgY3JlZGVudGlhbHMgaXMgbm90IGNvcnJlY3RseSBoYW5k
bGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAKaW5kZXggM2E4
Zjc5NTNiNmY5NmIwMTJmODQzMjM3YTJlMTJhMGZkZjRjYjEyMS4uYWE2Yjc0ZjI5YmFmYTIzZGEy
MDFjZWU2MGQ4ODkwZDAzZTA1Y2ZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Jh
c2ljU2hhcGVGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBl
RnVuY3Rpb25zLmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVz
LmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNT
U1ZhbHVlUG9vbC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC0xMDAsMTIgKzk5LDEyIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
Rm9yQmFzaWNTaGFwZShjb25zdCBCYXNpY1NoYXBlKiBiYXNpY1NoYXBlKQogICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZTxQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+ID4oYmFz
aWNTaGFwZVZhbHVlLnJlbGVhc2UoKSk7CiB9CiAKLXN0YXRpYyBMZW5ndGggY29udmVydFRvTGVu
Z3RoKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVl
KiB2YWx1ZSkKK3N0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNvbnN0IFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQogewotICAgIHJldHVy
biB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBGaXhlZEZs
b2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29u
dmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAg
IHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBG
aXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50
YWdlQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBz
dGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogfQogCi1QYXNzUmVmUHRyPEJhc2ljU2hh
cGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBjb25zdCBDU1NCYXNpY1NoYXBlKiBiYXNpY1NoYXBlVmFsdWUpCitQYXNzUmVmUHRyPEJhc2lj
U2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUsIGNvbnN0IENTU0Jhc2ljU2hhcGUqIGJhc2ljU2hhcGVWYWx1ZSkKIHsKICAgICBSZWZQdHI8
QmFzaWNTaGFwZT4gYmFzaWNTaGFwZTsKIApAQCAtMTE0LDE0ICsxMTMsMTQgQEAgUGFzc1JlZlB0
cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgY28KICAgICAgICAgY29uc3QgQ1NTQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVj
dFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQmFzaWNTaGFwZVJlY3RhbmdsZSAqPihiYXNp
Y1NoYXBlVmFsdWUpOwogICAgICAgICBSZWZQdHI8QmFzaWNTaGFwZVJlY3RhbmdsZT4gcmVjdCA9
IEJhc2ljU2hhcGVSZWN0YW5nbGU6OmNyZWF0ZSgpOwogCi0gICAgICAgIHJlY3QtPnNldFgoY29u
dmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+eCgpKSk7Ci0gICAgICAgIHJl
Y3QtPnNldFkoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+eSgpKSk7
Ci0gICAgICAgIHJlY3QtPnNldFdpZHRoKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBy
ZWN0VmFsdWUtPndpZHRoKCkpKTsKLSAgICAgICAgcmVjdC0+c2V0SGVpZ2h0KGNvbnZlcnRUb0xl
bmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPmhlaWdodCgpKSk7CisgICAgICAgIHJlY3Qt
PnNldFgoY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPngoKSkpOworICAgICAgICBy
ZWN0LT5zZXRZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT55KCkpKTsKKyAgICAg
ICAgcmVjdC0+c2V0V2lkdGgoY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPndpZHRo
KCkpKTsKKyAgICAgICAgcmVjdC0+c2V0SGVpZ2h0KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVj
dFZhbHVlLT5oZWlnaHQoKSkpOwogICAgICAgICBpZiAocmVjdFZhbHVlLT5yYWRpdXNYKCkpIHsK
LSAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1goY29udmVydFRvTGVuZ3RoKHN0eWxl
UmVzb2x2ZXIsIHJlY3RWYWx1ZS0+cmFkaXVzWCgpKSk7CisgICAgICAgICAgICByZWN0LT5zZXRD
b3JuZXJSYWRpdXNYKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT5yYWRpdXNYKCkp
KTsKICAgICAgICAgICAgIGlmIChyZWN0VmFsdWUtPnJhZGl1c1koKSkKLSAgICAgICAgICAgICAg
ICByZWN0LT5zZXRDb3JuZXJSYWRpdXNZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBy
ZWN0VmFsdWUtPnJhZGl1c1koKSkpOworICAgICAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJh
ZGl1c1koY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPnJhZGl1c1koKSkpOwogICAg
ICAgICB9CiAgICAgICAgIGJhc2ljU2hhcGUgPSByZWN0LnJlbGVhc2UoKTsKICAgICAgICAgYnJl
YWs7CkBAIC0xMzAsOSArMTI5LDkgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBl
Rm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAgICAg
Y29uc3QgQ1NTQmFzaWNTaGFwZUNpcmNsZSogY2lyY2xlVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25z
dCBDU1NCYXNpY1NoYXBlQ2lyY2xlICo+KGJhc2ljU2hhcGVWYWx1ZSk7CiAgICAgICAgIFJlZlB0
cjxCYXNpY1NoYXBlQ2lyY2xlPiBjaXJjbGUgPSBCYXNpY1NoYXBlQ2lyY2xlOjpjcmVhdGUoKTsK
IAotICAgICAgICBjaXJjbGUtPnNldENlbnRlclgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2
ZXIsIGNpcmNsZVZhbHVlLT5jZW50ZXJYKCkpKTsKLSAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJZ
KGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWSgpKSk7
Ci0gICAgICAgIGNpcmNsZS0+c2V0UmFkaXVzKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVy
LCBjaXJjbGVWYWx1ZS0+cmFkaXVzKCkpKTsKKyAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJYKGNv
bnZlcnRUb0xlbmd0aChzdGF0ZSwgY2lyY2xlVmFsdWUtPmNlbnRlclgoKSkpOworICAgICAgICBj
aXJjbGUtPnNldENlbnRlclkoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBjaXJjbGVWYWx1ZS0+Y2Vu
dGVyWSgpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0UmFkaXVzKGNvbnZlcnRUb0xlbmd0aChzdGF0
ZSwgY2lyY2xlVmFsdWUtPnJhZGl1cygpKSk7CiAKICAgICAgICAgYmFzaWNTaGFwZSA9IGNpcmNs
ZS5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQxLDEwICsxNDAsMTAgQEAgUGFzc1Jl
ZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgY28KICAgICAgICAgY29uc3QgQ1NTQmFzaWNTaGFwZUVsbGlwc2UqIGVs
bGlwc2VWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU0Jhc2ljU2hhcGVFbGxpcHNlICo+KGJh
c2ljU2hhcGVWYWx1ZSk7CiAgICAgICAgIFJlZlB0cjxCYXNpY1NoYXBlRWxsaXBzZT4gZWxsaXBz
ZSA9IEJhc2ljU2hhcGVFbGxpcHNlOjpjcmVhdGUoKTsKIAotICAgICAgICBlbGxpcHNlLT5zZXRD
ZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPmNlbnRl
clgoKSkpOwotICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdHls
ZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPmNlbnRlclkoKSkpOwotICAgICAgICBlbGxpcHNlLT5z
ZXRSYWRpdXNYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPnJh
ZGl1c1goKSkpOwotICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNZKGNvbnZlcnRUb0xlbmd0aChz
dHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1koKSkpOworICAgICAgICBlbGxpcHNl
LT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5jZW50ZXJY
KCkpKTsKKyAgICAgICAgZWxsaXBzZS0+c2V0Q2VudGVyWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUs
IGVsbGlwc2VWYWx1ZS0+Y2VudGVyWSgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1go
Y29udmVydFRvTGVuZ3RoKHN0YXRlLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1goKSkpOworICAgICAg
ICBlbGxpcHNlLT5zZXRSYWRpdXNZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVl
LT5yYWRpdXNZKCkpKTsKIAogICAgICAgICBiYXNpY1NoYXBlID0gZWxsaXBzZS5yZWxlYXNlKCk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTU2LDcgKzE1NSw3IEBAIFBhc3NSZWZQdHI8QmFzaWNTaGFw
ZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IGNvCiAgICAgICAgIHBvbHlnb24tPnNldFdpbmRSdWxlKHBvbHlnb25WYWx1ZS0+d2luZFJ1bGUo
KSk7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+ID4mIHZh
bHVlcyA9IHBvbHlnb25WYWx1ZS0+dmFsdWVzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyBpICs9IDIpCi0gICAgICAgICAgICBwb2x5Z29uLT5hcHBl
bmRQb2ludChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgdmFsdWVzLmF0KGkpLmdldCgp
KSwgY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHZhbHVlcy5hdChpICsgMSkuZ2V0KCkp
KTsKKyAgICAgICAgICAgIHBvbHlnb24tPmFwcGVuZFBvaW50KGNvbnZlcnRUb0xlbmd0aChzdGF0
ZSwgdmFsdWVzLmF0KGkpLmdldCgpKSwgY29udmVydFRvTGVuZ3RoKHN0YXRlLCB2YWx1ZXMuYXQo
aSArIDEpLmdldCgpKSk7CiAKICAgICAgICAgYmFzaWNTaGFwZSA9IHBvbHlnb24ucmVsZWFzZSgp
OwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1No
YXBlRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5o
CmluZGV4IGQzNjA3ZTkwOTkyOWMzNDFiMGMwNjlkM2U1Y2ViNjFmMTNmMTE3MTkuLmU1NjMyMDY4
NzY4YTY3MDFmODAzZmIyYWZlZjU0ODk4NTMxZDExZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jh
c2ljU2hhcGVGdW5jdGlvbnMuaApAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBCYXNpY1NoYXBl
RnVuY3Rpb25zX2gKICNkZWZpbmUgQmFzaWNTaGFwZUZ1bmN0aW9uc19oCiAKKyNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzcsMTAgKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
QmFzaWNTaGFwZTsKIGNsYXNzIENTU0Jhc2ljU2hhcGU7CiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNz
IFN0eWxlUmVzb2x2ZXI7CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yQmFzaWNTaGFw
ZShjb25zdCBCYXNpY1NoYXBlKik7Ci1QYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVG
b3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiwgY29uc3QgQ1NTQmFzaWNTaGFwZSopOworUGFz
c1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZl
cjo6U3RhdGUmLCBjb25zdCBDU1NCYXNpY1NoYXBlKik7CiAKIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IDhmMTY4YWI3MmNlMzA3NTZkZTAzNDE3
ODRkZjgwMGZkMzc2MGJmMmUuLmU1NjVlZmY1YWU0MTg4MzZmNWRlZDIxNDc3OWEwNDhjZWVkYjk4
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTM1LDcgKzM1
LDYgQEAKICNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIu
aCIKICNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSA8
d3RmL01lbW9yeUluc3RydW1lbnRhdGlvblZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KQEAgLTExNSwxMSArMTE0LDExIEBAIHN0cnVjdCBHcmFkaWVudFN0b3Ag
ewogICAgIHsgfQogfTsKIAotUGFzc1JlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVu
dFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyKQorUGFzc1JlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpn
cmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiB7
CiAgICAgYm9vbCBkZXJpdmVkID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc3RvcHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5jb2xvckZy
b21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KG1fc3RvcHNbaV0ubV9jb2xvci5n
ZXQoKSkpIHsKKyAgICAgICAgaWYgKFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQobV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKSkgewogICAg
ICAgICAgICAgbV9zdG9wc1tpXS5tX2NvbG9ySXNEZXJpdmVkRnJvbUVsZW1lbnQgPSB0cnVlOwog
ICAgICAgICAgICAgZGVyaXZlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEzOCw3
ICsxMzcsNyBAQCBQYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6
OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUgogICAgIH0KIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZXN1bHQtPm1fc3RvcHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJl
c3VsdC0+bV9zdG9wc1tpXS5tX3Jlc29sdmVkQ29sb3IgPSBzdHlsZVJlc29sdmVyLT5jb2xvckZy
b21QcmltaXRpdmVWYWx1ZShyZXN1bHQtPm1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSk7CisgICAg
ICAgIHJlc3VsdC0+bV9zdG9wc1tpXS5tX3Jlc29sdmVkQ29sb3IgPSBTdHlsZVJlc29sdmVyOjpj
b2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgcmVzdWx0LT5tX3N0b3BzW2ldLm1fY29sb3Iu
Z2V0KCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuaAppbmRleCA4ZTFjNzdiNjQxMTBkOTk2N2QzNzIxYjFjYWZjMDVm
MjlmODExNTJmLi40NTk4MWUyZTU2YWZlMzFjMWY4NzZmODAxNGEwZTJhOGNkODhkMWE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVW
YWx1ZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC04OSw3ICs5MCw3IEBAIHB1YmxpYzoK
ICAgICBib29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKIAog
ICAgIHZvaWQgbG9hZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciopIHsgfQotICAgIFBh
c3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5
bGVSZXNvbHZlciopOworICAgIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRX
aXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZlcjo6U3RhdGUmKTsKIAogcHJvdGVjdGVkOgog
ICAgIENTU0dyYWRpZW50VmFsdWUoQ2xhc3NUeXBlIGNsYXNzVHlwZSwgQ1NTR3JhZGllbnRSZXBl
YXQgcmVwZWF0LCBDU1NHcmFkaWVudFR5cGUgZ3JhZGllbnRUeXBlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuY3BwCmluZGV4IDcyMWZkOGU5MDFiNWViYmYxY2Y2Y2Q3NDlmYThmNTNmMWNm
YmE0OWIuLmZkYzA0Y2FmZDMwNmRhOTY4MDBlMGFlMzZhZTg3NjYyNzdjMWZiZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKQEAgLTQzLDIyICs0MywyMiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpzdHlsZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnN0eWxlKCk7CisgICAgcmV0dXJuIG1fc3RhdGUuc3R5
bGUoKTsKIH0KICAgICAKIFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0
eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
OworICAgIHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsKIH0KIAogYm9vbCBDU1NU
b1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX3Jlc29s
dmVyLT51c2VTVkdab29tUnVsZXMoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS51c2VTVkdab29tUnVs
ZXMoKTsKIH0KICAgICAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gQ1NTVG9TdHlsZU1hcDo6c3R5
bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eUlkLCB2YWx1ZSk7CisgICAg
cmV0dXJuIFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UobV9zdGF0ZSwgcHJvcGVydHlJZCwgdmFs
dWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50KENTU1Byb3Bl
cnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VG9TdHlsZU1hcC5oCmluZGV4IDNjYjEyMTUwYTg0M2U4YTQ4ZTM5YTViNTQxMzU3NTkyOTRjNDE2
NzMuLjdmODcyMGE0ODZjOTJjYTRjMzBhZjY0MzRkZThmOThkYjdlMmRiZDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1RvU3R5bGVNYXAuaApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQ1NTUHJv
cGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkxlbmd0aEJveC5oIgorI2luY2x1ZGUgIlN0eWxlUmVz
b2x2ZXIuaCIgCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzIsNyArMzMsNiBAQCBjbGFz
cyBDU1NWYWx1ZTsKIGNsYXNzIEFuaW1hdGlvbjsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3Mg
U3R5bGVJbWFnZTsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CiBjbGFzcyBOaW5lUGllY2VJbWFnZTsK
IAogY2xhc3MgQ1NTVG9TdHlsZU1hcCB7CkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIENTU1RvU3R5
bGVNYXAgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgQ1NT
VG9TdHlsZU1hcChTdHlsZVJlc29sdmVyKiByZXNvbHZlcikgOiBtX3Jlc29sdmVyKHJlc29sdmVy
KSB7IH0KKyAgICBDU1NUb1N0eWxlTWFwKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkgOiBt
X3N0YXRlKHN0YXRlKSB7IH0KIAogICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVy
dHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKICAgICB2b2lkIG1hcEZpbGxDbGlwKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CkBAIC04Miw3ICs4Miw3IEBAIHByaXZh
dGU6CiAgICAgLy8gZHVyaW5nIHRoZSByZXNvbHZlLgogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwogCi0gICAgU3R5bGVSZXNv
bHZlciogbV9yZXNvbHZlcjsKKyAgICBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgbV9zdGF0ZTsKIH07
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCBk
MWU5YzYwZDNiOWRlZDdlMjBmYzc2NWU5Yzc3YTQzMTZlM2I2ZDEzLi45MjZjNjkxYThiZjQ2ODZk
YTE4Yzk1YTQ4YzYxM2IyMWU2NmNiNjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0
eWxlU2VsZWN0b3IuY3BwCkBAIC0xMDIsMTQgKzEwMiwxMyBAQCBzdGF0aWMgQ29sb3IgY29sb3JG
cm9tU1ZHQ29sb3JDU1NWYWx1ZShTVkdDb2xvciogc3ZnQ29sb3IsIGNvbnN0IENvbG9yJiBmZ0Nv
bG9yKQogICAgIHJldHVybiBjb2xvcjsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNW
R1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShjb25zdCBTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IDA7CiAgICAgaWYgKHZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCiAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKLSAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OwogICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc1NW
R1N0eWxlKCk7CiAKICAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2
YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOwpAQCAtMjMxLDE2ICsyMzAsMTYgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewogICAgICAgICAg
ICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVu
dFN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQ
YWludChzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+Zmls
bFBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgpLCBhcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsK
KyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhcmVudFN0eWxlLT5m
aWxsUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRDb2xvcigpLCBzdmdQYXJl
bnRTdHlsZS0+ZmlsbFBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0luaXRpYWwp
IHsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsRmlsbFBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWlu
dENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VXJpKCksIGFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkp
OworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50
Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRVcmkoKSwgc3RhdGUuYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQ
YWludCogc3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29s
b3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSks
IHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dEZpbGxQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFs
dWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIHN0
YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTI0OCwxNiArMjQ3LDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAgICAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHls
ZSgpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYXJlbnRT
dHlsZS0+c3Ryb2tlUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludENvbG9y
KCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBh
aW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRT
dHlsZS0+c3Ryb2tlUGFpbnRVcmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkg
ewotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9r
ZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBh
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoU1ZHUmVu
ZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRp
YWxTdHJva2VQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRV
cmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAg
ICAgICAgICAgICBTVkdQYWludCogc3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZh
bHVlKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQt
PnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5z
dHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xv
ckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwg
c3ZnUGFpbnQtPnVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3Rh
dGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01NzAsNyArNTY5LDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkp
IDogMDsKICAgICAgICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNv
bG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRl
bS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAgICAgIGNvbG9yID0gU3R5bGVSZXNvbHZlcjo6
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNvbG9yLmdldCgpKTsKIAogICAg
ICAgICAgICAgLy8gLXdlYmtpdC1zdmctc2hhZG93IGRvZXMgc2hvdWxkIG5vdCBoYXZlIGEgc3By
ZWFkIG9yIHN0eWxlCiAgICAgICAgICAgICBBU1NFUlQoIWl0ZW0tPnNwcmVhZCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCmluZGV4IDRkODc4YjJlOWIzMjVlMjVlZTM2YWQ4Y2JmMmIy
MDBmMmYzODIxMGEuLjFiYjYxMDRlZjllMmE2OGUzN2FhZTJkMWNjODBkZDIxYmI0MjI4MWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCkBAIC02MSw3ICs2MCw3
IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlFeHBhbmRpbmcgewogcHVibGljOgogCiAgICAgdGVtcGxh
dGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5SW5oZXJp
dFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewogICAg
ICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtNjksMjAgKzY4LDIwIEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgU3R5bGVCdWlsZGVyJiB0
YWJsZSA9IFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CiAgICAgICAgIGNvbnN0
IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFuZGxlcihpZCk7CiAg
ICAgICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJ
bmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBoYW5k
bGVyLmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUpCiAgICAgewotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0
eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0d28+KHByb3BlcnR5SUQs
IHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0aHJlZT4ocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZvdXI+KHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmaXZl
Pihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8
b25lPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHR3bz4o
cHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0aHJlZT4ocHJv
cGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmb3VyPihwcm9wZXJ0
eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZpdmU+KHByb3BlcnR5SUQs
IHN0YXRlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBz
dGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUlu
dmFsaWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC05MCwyMCArODksMjAgQEAgcHVibGljOgog
ICAgICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRT
dHlsZUJ1aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0g
dGFibGUucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgp
KQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUocHJvcGVy
dHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGFwcGx5SW5p
dGlhbFZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5
SW5pdGlhbFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFw
cGx5SW5pdGlhbFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAg
ICAgYXBwbHlJbml0aWFsVmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0g
ICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIp
OworICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAg
ICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAg
IGFwcGx5SW5pdGlhbFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFw
cGx5SW5pdGlhbFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJ
bml0aWFsVmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAogICAgIHRlbXBs
YXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTExLDE5ICsxMTAsMTkgQEAgcHVibGljOgogICAgICAg
ICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1
aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUu
cHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZh
bHVlKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwg
dmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKCFleHBhbmRWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBh
cHBseVZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAg
ICBhcHBseVZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAg
ICAgICBhcHBseVZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7
Ci0gICAgICAgIGFwcGx5VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFs
dWUpOwotICAgICAgICBhcHBseVZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIs
IHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICBhcHBseVZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBhcHBseVZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGFwcGx5VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKICAgICB9CiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlI
YW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1
ZSk7IH0KIH07CkBAIC0xMzQsOSArMTMzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNl
dFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgU2V0dGVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipz
ZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIEdldHRlclR5cGUgdmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPipnZXR0ZXJGdW5jdGlvbikoKTsgfQog
ICAgIHN0YXRpYyBJbml0aWFsVHlwZSBpbml0aWFsKCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rp
b24pKCk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSB7IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsgfQotICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW5pdGlh
bCgpKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciosIENTU1ZhbHVlKikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKSB7IHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIHZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsgfQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSkgeyBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbml0aWFsKCkpOyB9CisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYsIENTU1ZhbHVlKikgeyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5k
bGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5
SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KIH07CiAKQEAgLTE0NCwxMCArMTQzLDEwIEBA
IHRlbXBsYXRlIDx0eXBlbmFtZSBHZXR0ZXJUeXBlLCBHZXR0ZXJUeXBlIChSZW5kZXJTdHlsZTo6
KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBseVByb3BlcnR5RGVmYXVsdCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0
ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAg
ICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAqc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKTsKICAgICB9CiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xNjAsMTYg
KzE1OSwxNiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTnVtYmVyVHlwZSwgTnVtYmVyVHlwZSAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdAogY2xhc3MgQXBwbHlQcm9wZXJ0eU51
bWJlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0
eWxlLCBOdW1iZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7
IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gaWRNYXBzVG9NaW51c09uZSkK
LSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIC0xKTsKKyAgICAg
ICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIC0xKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdl
dFZhbHVlPE51bWJlclR5cGU+KENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAg
ICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8
TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICB9CiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xODEsNyAr
MTgwLDcgQEAgcHVibGljOgogdGVtcGxhdGUgPFN0eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6Kmdl
dHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9u
KShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5bGVJbWFnZSogKCppbml0aWFsRnVuY3Rpb24p
KCksIENTU1Byb3BlcnR5SUQgcHJvcGVydHk+CiBjbGFzcyBBcHBseVByb3BlcnR5U3R5bGVJbWFn
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFn
ZShwcm9wZXJ0eSwgdmFsdWUpKTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpIHsg
KHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFn
ZShzdGF0ZSwgcHJvcGVydHksIHZhbHVlKSk7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVy
IGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKICAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIg
PSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRp
YWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKQEAgLTE5OCwyOCArMTk3LDI4IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgYm9vbCBoYXNBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4g
KHN0eWxlLT4qaGFzQXV0b0Z1bmN0aW9uKSgpOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0byhS
ZW5kZXJTdHlsZSogc3R5bGUpIHsgKHN0eWxlLT4qc2V0QXV0b0Z1bmN0aW9uKSgpOyB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAg
IGlmIChoYXNBdXRvKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKQotICAgICAgICAgICAg
c2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKKyAgICAgICAgaWYgKGhhc0F1dG8oc3Rh
dGUucGFyZW50U3R5bGUoKSkpCisgICAgICAgICAgICBzZXRBdXRvKHN0YXRlLnN0eWxlKCkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCB2YWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBzZXRW
YWx1ZShzdGF0ZS5zdHlsZSgpLCB2YWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikgeyBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkp
OyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKSB7IHNldEF1dG8oc3RhdGUuc3R5bGUoKSk7IH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBhdXRvSWRlbnRpdHkpCi0gICAgICAg
ICAgICBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOworICAgICAgICAgICAgc2V0QXV0
byhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IE51bWJlcikK
LSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksICpwcmltaXRpdmVW
YWx1ZSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCAqcHJpbWl0aXZlVmFs
dWUpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gQ29tcHV0ZUxlbmd0aCkKLSAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5j
b21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJv
b3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
KSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+
Y29tcHV0ZUxlbmd0aDxUPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCks
IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQ
cm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigm
YXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBA
IC0yMjcsMjcgKzIyNiwyNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlDbGlwIHsK
IHByaXZhdGU6Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9MZW5ndGgoU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBM
ZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTUHJp
bWl0aXZlVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0
VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJh
Y3Rpb25Db252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5n
dGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25D
b252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICB9CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6
U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUoKTsKICAgICAgICAgaWYgKCFwYXJlbnRTdHlsZS0+
aGFzQ2xpcCgpKQotICAgICAgICAgICAgcmV0dXJuIGFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRD
bGlwKHBhcmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVudFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFy
ZW50U3R5bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5bGUtPmNsaXBMZWZ0KCkpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOworICAgICAgICAgICAg
cmV0dXJuIGFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q2xpcChwYXJlbnRTdHlsZS0+Y2xpcFRvcCgpLCBwYXJlbnRTdHlsZS0+
Y2xpcFJpZ2h0KCksIHBhcmVudFN0eWxlLT5jbGlwQm90dG9tKCksIHBhcmVudFN0eWxlLT5jbGlw
TGVmdCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgp
LCBMZW5ndGgoKSwgTGVuZ3RoKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRIYXNDbGlwKGZhbHNlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgo
KSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEhhc0NsaXAoZmFsc2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNTUs
MTUgKzI1NCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAg
ICAgIGlmIChSZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUtPmdldFJlY3RWYWx1ZSgpKSB7Ci0g
ICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJl
Y3QtPnRvcCgpKTsKLSAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChz
dHlsZVJlc29sdmVyLCByZWN0LT5yaWdodCgpKTsKLSAgICAgICAgICAgIExlbmd0aCBib3R0b20g
PSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+Ym90dG9tKCkpOwotICAgICAg
ICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+
bGVmdCgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAodG9w
LCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRv
TGVuZ3RoKHN0YXRlLCByZWN0LT50b3AoKSk7CisgICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBj
b252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3QtPnJpZ2h0KCkpOworICAgICAgICAgICAgTGVuZ3Ro
IGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdC0+Ym90dG9tKCkpOworICAgICAg
ICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3QtPmxlZnQoKSk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKHRvcCwgcmlnaHQsIGJvdHRvbSwg
bGVmdCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOwogICAg
ICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0
bykgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgo
KSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTI4MSw0MCArMjgwLDQwIEBAIHRlbXBsYXRlIDxDb2xvckluaGVyaXQgaW5oZXJp
dENvbG9yRnJvbVBhcmVudCwKICAgICAgICAgICBDb2xvciAoKmluaXRpYWxGdW5jdGlvbikoKSA9
ICZkZWZhdWx0SW5pdGlhbENvbG9yPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbG9yIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7CiAg
ICAgICAgIC8vIFZpc2l0ZWQgbGluayBzdHlsZSBjYW4gbmV2ZXIgZXhwbGljaXRseSBpbmhlcml0
IGZyb20gcGFyZW50IHZpc2l0ZWQgbGluayBzdHlsZSBzbyBubyBzZXBhcmF0ZSBnZXR0ZXJzIGFy
ZSBuZWVkZWQuCi0gICAgICAgIENvbG9yIGNvbG9yID0gKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPipnZXR0ZXJGdW5jdGlvbikoKTsKLSAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0eWxl
UmVzb2x2ZXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogKHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCktPipkZWZhdWx0RnVuY3Rpb24pKCkpOworICAgICAgICBDb2xvciBjb2xvciA9IChz
dGF0ZS5wYXJlbnRTdHlsZSgpLT4qZ2V0dGVyRnVuY3Rpb24pKCk7CisgICAgICAgIGFwcGx5Q29s
b3JWYWx1ZShzdGF0ZSwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiAoc3RhdGUucGFyZW50U3R5
bGUoKS0+KmRlZmF1bHRGdW5jdGlvbikoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBhcHBseUNvbG9yVmFsdWUo
c3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9uKCkpOworICAgICAgICBhcHBseUNvbG9yVmFs
dWUoc3RhdGUsIGluaXRpYWxGdW5jdGlvbigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAg
ICAgICAgaWYgKGluaGVyaXRDb2xvckZyb21QYXJlbnQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICBhcHBseUluaGVyaXRW
YWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIGFwcGx5SW5oZXJp
dFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0gICAgICAg
ICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVS
ZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpKTsKLSAgICAg
ICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkpCi0gICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPip2aXNpdGVkTGlu
a1NldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShw
cmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8gdHJ1ZSkpOworICAgICAgICAgICAg
aWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQorICAgICAgICAgICAgICAg
IChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSkpOworICAgICAgICAgICAgaWYg
KHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKKyAgICAgICAgICAgICAg
ICAoc3RhdGUuc3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2
ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSwgLyogZm9y
VmlzaXRlZExpbmsgKi8gdHJ1ZSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlDb2xvclZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENv
bG9yJiBjb2xvcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUNvbG9yVmFsdWUoU3R5bGVSZXNvbHZl
cjo6U3RhdGUmIHN0YXRlLCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgewotICAgICAgICBpZiAo
c3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0gICAgICAgICAg
ICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShjb2xvcik7Ci0gICAg
ICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkp
Ci0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVy
RnVuY3Rpb24pKGNvbG9yKTsKKyAgICAgICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSgpKQorICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbiko
Y29sb3IpOworICAgICAgICBpZiAoc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSgpKQorICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0
aW9uKShjb2xvcik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFw
cGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTMyMywxMSArMzIyLDExIEBAIHB1
YmxpYzoKIHRlbXBsYXRlIDxUZXh0RGlyZWN0aW9uIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0
aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShUZXh0RGly
ZWN0aW9uKSwgVGV4dERpcmVjdGlvbiAoKmluaXRpYWxGdW5jdGlvbikoKT4KIGNsYXNzIEFwcGx5
UHJvcGVydHlEaXJlY3Rpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dERpcmVjdGlvbiwgZ2V0
dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIHNldHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9u
LCBpbml0aWFsRnVuY3Rpb24+OjphcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIs
IHZhbHVlKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0eWxlUmVzb2x2ZXItPmVsZW1l
bnQoKTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYgc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpID09
IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICBBcHBseVBy
b3BlcnR5RGVmYXVsdDxUZXh0RGlyZWN0aW9uLCBnZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlv
biwgc2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIGluaXRpYWxGdW5jdGlvbj46OmFwcGx5
VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRlLmVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgc3RhdGUuZWxlbWVu
dCgpID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQogICAgICAgICAg
ICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQo
dHJ1ZSk7CiAgICAgfQogCkBAIC0zNTQsNyArMzUzLDcgQEAgdGVtcGxhdGUgPExlbmd0aCAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwKIGNsYXNzIEFwcGx5UHJvcGVydHlM
ZW5ndGggewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBz
dHlsZSwgTGVuZ3RoIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0K
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzYyLDM5ICszNjEsMzkgQEAgcHVibGljOgogICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKG5vbmVFbmFibGVkICYmIHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewogICAgICAgICAgICAgaWYgKG5v
bmVVbmRlZmluZWQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgTGVuZ3RoKFVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRl
LnN0eWxlKCksIExlbmd0aChVbmRlZmluZWQpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7CisgICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKCkpOwogICAgICAgICB9
CiAgICAgICAgIGlmIChsZWdhY3lJbnRyaW5zaWNFbmFibGVkKSB7CiAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCi0gICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNp
YykpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChJbnRy
aW5zaWMpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlTWluSW50cmluc2ljKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5JbnRyaW5zaWMpKTsKKyAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoTWluSW50cmluc2ljKSk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGludHJpbnNpY0VuYWJsZWQpIHsKICAgICAgICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQpCi0gICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1pbkNv
bnRlbnQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgo
TWluQ29udGVudCkpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KQotICAgICAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNYXhDb250ZW50KSk7CisgICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1heENvbnRlbnQpKTsKICAg
ICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
V2Via2l0RmlsbEF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOworICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChGaWxsQXZhaWxhYmxlKSk7CiAgICAgICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZp
dENvbnRlbnQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKEZpdENvbnRlbnQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCBMZW5ndGgoRml0Q29udGVudCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGF1
dG9FbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykK
LSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aCgpKTsK
KyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAg
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIExlbmd0
aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBs
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxl
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKTsKICAgICAgICAgICAgIGxlbmd0aC5zZXRRdWlyayhwcmltaXRpdmVWYWx1ZS0+aXNRdWly
a1ZhbHVlKCkpOwotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
bGVuZ3RoKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGxlbmd0aCk7CiAg
ICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZh
bHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CisgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBl
cmNlbnQpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBl
cmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKKyAgICAg
ICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3Nz
Q2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwogICAgICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT52
aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpOwogICAg
IH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC00MDks
MTYgKzQwOCwxNiBAQCB0ZW1wbGF0ZSA8U3RyaW5nSWRlbnRCZWhhdmlvciBpZGVudEJlaGF2aW9y
LCBjb25zdCBBdG9taWNTdHJpbmcmIChSZW5kZXJTdHlsZTo6KgogY2xhc3MgQXBwbHlQcm9wZXJ0
eVN0cmluZyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUq
IHN0eWxlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0
aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKICAgICAgICAgaWYgKChpZGVudEJlaGF2aW9yID09IE1hcE5vbmVUb051bGwgJiYgcHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgfHwg
KGlkZW50QmVoYXZpb3IgPT0gTWFwQXV0b1RvTnVsbCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZUF1dG8pKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgbnVsbEF0b20pOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgbnVsbEF0b20pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAg
ICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5n
VmFsdWUoKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpCiAgICAgewpAQCAtNDMxLDcgKzQzMCw3IEBAIHRlbXBsYXRlIDxMZW5ndGhTaXplIChSZW5k
ZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6CiBj
bGFzcyBBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0aFNpemUgdmFsdWUpIHsgKHN0eWxl
LT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00NDgs
MTcgKzQ0NywxNyBAQCBwdWJsaWM6CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPmZpcnN0KCktPmlz
Vmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAgICAgICByYWRpdXNXaWR0aCA9IHBh
aXItPmZpcnN0KCktPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgICAgICBlbHNlIGlm
IChwYWlyLT5maXJzdCgpLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQotICAg
ICAgICAgICAgcmFkaXVzV2lkdGggPSBMZW5ndGgoKHBhaXItPmZpcnN0KCktPmNzc0NhbGNWYWx1
ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5y
b290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkpKTsKKyAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gTGVuZ3RoKChwYWlyLT5maXJzdCgpLT5j
c3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0
aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVt
ZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAg
ICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aDxMZW5n
dGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKHBhaXItPnNlY29uZCgpLT5pc1BlcmNl
bnRhZ2UoKSkKICAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aChwYWlyLT5zZWNvbmQo
KS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPnNl
Y29uZCgpLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICAgICAgcmFkaXVz
SGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAg
ICAgICBlbHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhM
ZW5ndGgoKSkKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aCgocGFpci0+c2Vjb25k
KCktPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKSkpKTsKKyAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aCgo
cGFpci0+c2Vjb25kKCktPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+c2Vj
b25kKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBwYWlyLT5zZWNvbmQo
KS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaW50IHdp
ZHRoID0gcmFkaXVzV2lkdGgudmFsdWUoKTsKICAgICAgICAgaW50IGhlaWdodCA9IHJhZGl1c0hl
aWdodC52YWx1ZSgpOwogICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCkBAIC00
NjksNyArNDY4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmFkaXVzV2lkdGggPSByYWRpdXNI
ZWlnaHQ7IC8vIE51bGwgb3V0IHRoZSBvdGhlciB2YWx1ZS4KIAogICAgICAgICBMZW5ndGhTaXpl
IHNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCk7Ci0gICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIHNpemUpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
LCBzaXplKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkKICAgICB7CkBAIC01MDMsMTEgKzUwMiwxMSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKICAg
ICAgICAgICB2b2lkIChDU1NUb1N0eWxlTWFwOjoqbWFwRmlsbEZ1bmN0aW9uKShDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUZpbGxMYXll
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUp
CiAgICAgewotICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIEZpbGxMYXllciogY3Vy
ckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKICAgICAg
ICAgRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAwOwotICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIGN1
cnJQYXJlbnQgPSAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+KmxheWVyc0Z1bmN0aW9u
KSgpOworICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIGN1cnJQYXJlbnQgPSAoc3RhdGUucGFyZW50
U3R5bGUoKS0+KmxheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICB3aGlsZSAoY3VyclBhcmVudCAm
JiAoY3VyclBhcmVudC0+KnRlc3RGdW5jdGlvbikoKSkgewogICAgICAgICAgICAgaWYgKCFjdXJy
Q2hpbGQpIHsKICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgbGF5ZXIuKi8K
QEAgLTUyNywxOCArNTI2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRmls
bExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVy
c0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdGF0ZS5zdHls
ZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIChjdXJyQ2hpbGQtPipzZXRG
dW5jdGlvbikoKCppbml0aWFsRnVuY3Rpb24pKGZpbGxMYXllclR5cGUpKTsKICAgICAgICAgZm9y
IChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgY3VyckNoaWxkOyBjdXJyQ2hpbGQgPSBj
dXJyQ2hpbGQtPm5leHQoKSkKICAgICAgICAgICAgIChjdXJyQ2hpbGQtPipjbGVhckZ1bmN0aW9u
KSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGls
ZCA9IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7Cisg
ICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nlc3NMYXll
cnNGdW5jdGlvbikoKTsKICAgICAgICAgRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAwOworICAgICAg
ICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRlKTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1Zh
bHVlTGlzdCgpCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgICAgICYmICF2YWx1ZS0+
aXNJbWFnZVNldFZhbHVlKCkKQEAgLTU1MiwxMiArNTUyLDEyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgY3VyckNoaWxkID0gbmV3IEZpbGxMYXllcihmaWxsTGF5ZXJUeXBlKTsKICAg
ICAgICAgICAgICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4q
bWFwRmlsbEZ1bmN0aW9uKShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgICAgICAgICAgKHN0eWxlTWFwLiptYXBGaWxs
RnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKGkpKTsKICAgICAgICAgICAgICAgICBwcmV2Q2hpbGQgPSBjdXJyQ2hpbGQ7CiAg
ICAgICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVN
YXAoKS0+Km1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZSk7Cisg
ICAgICAgICAgICAoc3R5bGVNYXAuKm1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNo
aWxkLCB2YWx1ZSk7CiAgICAgICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsK
ICAgICAgICAgfQogICAgICAgICB3aGlsZSAoY3VyckNoaWxkKSB7CkBAIC01ODMsNyArNTgzLDcg
QEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsCiBjbGFzcyBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0
aCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxl
LCBUIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgLy8gbm90ZTogQ1NTUHJvcGVydHlMZXR0ZXIvV29yZFNwYWNpbmcgcmln
aHQgbm93IHNldHMgdG8gemVybyBpZiBpdCdzIG5vdCBhIHByaW1pdGl2ZSB2YWx1ZSBmb3Igc29t
ZSByZWFzb24uLi4KICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQpAQCAt
NjAyLDEzICs2MDIsMTMgQEAgcHVibGljOgogICAgICAgICB9IGVsc2UgaWYgKHRoaWNrbmVzc0Vu
YWJsZWQgJiYgaWRlbnQgPT0gQ1NTVmFsdWVUaGljaykgewogICAgICAgICAgICAgbGVuZ3RoID0g
NTsKICAgICAgICAgfSBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZUludmFsaWQpIHsKLSAgICAg
ICAgICAgIGZsb2F0IHpvb20gPSAoc3ZnWm9vbUVuYWJsZWQgJiYgc3R5bGVSZXNvbHZlci0+dXNl
U1ZHWm9vbVJ1bGVzKCkpID8gMS4wZiA6IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKTsKKyAgICAgICAgICAgIGZsb2F0IHpvb20gPSAoc3ZnWm9vbUVuYWJsZWQgJiYgc3Rh
dGUudXNlU1ZHWm9vbVJ1bGVzKCkpID8gMS4wZiA6IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKTsKIAogICAgICAgICAgICAgLy8gQW55IG9yaWdpbmFsIHJlc3VsdCB0aGF0IHdhcyA+PSAx
IHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBmYWxsIGJlbG93IDEuCiAgICAgICAgICAgICAvLyBU
aGlzIGtlZXBzIGJvcmRlciBsaW5lcyBmcm9tIHZhbmlzaGluZy4KLSAgICAgICAgICAgIGxlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CisgICAgICAgICAg
ICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOwogICAgICAgICAgICAgaWYgKHpvb20g
PCAxLjBmICYmIGxlbmd0aCA8IDEuMCkgewotICAgICAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5n
dGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIDEuMCk7CisgICAgICAgICAg
ICAgICAgVCBvcmlnaW5hbExlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+
KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wKTsKICAgICAgICAg
ICAgICAgICBpZiAob3JpZ2luYWxMZW5ndGggPj0gMS4wKQogICAgICAgICAgICAgICAgICAgICBs
ZW5ndGggPSAxLjA7CiAgICAgICAgICAgICB9CkBAIC02MTgsNyArNjE4LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAgfQogCi0gICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIGxlbmd0aCk7CisgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0
eWxlKCksIGxlbmd0aCk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpCiAgICAgewpAQCAtNjMwLDI4ICs2MzAsMjggQEAgcHVibGljOgogdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIFQgKEZvbnREZXNjcmlwdGlvbjo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0
LCB2b2lkIChGb250RGVzY3JpcHRpb246OipzZXR0ZXJGdW5jdGlvbikoVCksIFQgaW5pdGlhbFZh
bHVlPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUZvbnQgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwot
ICAgICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0eWxlUmVzb2x2ZXIt
PnBhcmVudEZvbnREZXNjcmlwdGlvbigpLipnZXR0ZXJGdW5jdGlvbikoKSk7Ci0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9u
KCk7CisgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKSgoc3RhdGUucGFy
ZW50Rm9udERlc2NyaXB0aW9uKCkuKmdldHRlckZ1bmN0aW9uKSgpKTsKKyAgICAgICAgc3RhdGUu
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9u
KCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250
RGVzY3JpcHRpb24oKTsKICAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24p
KGluaXRpYWxWYWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIChm
b250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKSgqcHJpbWl0aXZlVmFsdWUpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAg
ICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQog
CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJv
cGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBw
bHlWYWx1ZSk7IH0KQEAgLTY3Niw1MCArNjc2LDUwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biBzaXplIC8gMS4yZjsKICAgICB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBmbG9hdCBzaXplID0gc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwor
ICAgICAgICBmbG9hdCBzaXplID0gc3RhdGUucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9u
KCkuc3BlY2lmaWVkU2l6ZSgpOwogCiAgICAgICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0
Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsK
KyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKHN0YXRlLnBhcmVudFN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpOworICAgICAgICBTdHlsZVJlc29s
dmVyOjpzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICAgICAg
c3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkK
ICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZmxvYXQgc2l6ZSA9
IHN0eWxlUmVzb2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVu
dCgpLCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUo
KSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZmxvYXQgc2l6ZSA9IFN0eWxlUmVzb2x2
ZXI6OmZvbnRTaXplRm9yS2V5d29yZChzdGF0ZS5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwg
Zm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CiAKICAgICAgICAgaWYgKHNp
emUgPCAwKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKKyAgICAgICAgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlw
dGlvbiwgc2l6ZSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRT
aXplKDApOwogICAgICAgICBmbG9hdCBwYXJlbnRTaXplID0gMDsKICAgICAgICAgYm9vbCBwYXJl
bnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOwogICAgICAgICBmbG9hdCBzaXplID0gMDsKIAotICAg
ICAgICBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkgewotICAgICAgICAgICAgcGFy
ZW50U2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigp
LnNwZWNpZmllZFNpemUoKTsKLSAgICAgICAgICAgIHBhcmVudElzQWJzb2x1dGVTaXplID0gc3R5
bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNp
emUoKTsKKyAgICAgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCkpIHsKKyAgICAgICAgICAgIHBh
cmVudFNpemUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZp
ZWRTaXplKCk7CisgICAgICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IHN0YXRlLnBhcmVu
dFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoaW50IGlkZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsK
QEAgLTczMyw3ICs3MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWExh
cmdlOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4TGFyZ2U6CiAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHN0eWxlUmVz
b2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLCBpZGVu
dCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAgICAgICAgICAg
ICAgc2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChzdGF0ZS5kb2N1bWVu
dCgpLCBpZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CiAgICAg
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKGlkZW50IC0gQ1NTVmFs
dWVYeFNtYWxsICsgMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlTGFyZ2VyOgpAQCAtNzUxLDEzICs3NTEsMTMgQEAgcHVibGljOgogICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJzb2x1dGVTaXpl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIShwcmlt
aXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkgfHwgcHJpbWl0aXZlVmFsdWUtPmlzRm9udFJlbGF0
aXZlTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgo
KSkKLSAgICAgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8
ZmxvYXQ+KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RF
bGVtZW50U3R5bGUoKSwgMS4wLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzaXplID0gcHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnBhcmVudFN0eWxlKCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wLCB0cnVlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgICAgICBzaXplID0gKHBy
aW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgKiBwYXJlbnRTaXplKSAvIDEwMC4wZjsKICAg
ICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdl
V2l0aExlbmd0aCgpKQotICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y3Nz
Q2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSktPmV2YWx1YXRlKHBhcmVudFNpemUpOwor
ICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRv
Q2FsY1ZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSkt
PmV2YWx1YXRlKHBhcmVudFNpemUpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9
IHZhbHVlRm9yTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgo
KSwgMCwgc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKTsKKyAgICAgICAg
ICAgICAgICBzaXplID0gdmFsdWVGb3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVy
Y2VudGFnZUxlbmd0aCgpLCAwLCBzdGF0ZS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNzY5
LDggKzc2OSw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQ2FwIGZvbnQgc2l6ZSBoZXJlIHRvIG1h
a2Ugc3VyZSB0aGF0IGRvZXNuJ3QgaGFwcGVuLgogICAgICAgICBzaXplID0gbWluKG1heGltdW1B
bGxvd2VkRm9udFNpemUsIHNpemUpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRT
aXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBTdHlsZVJlc29sdmVyOjpz
ZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICAgICAgc3RhdGUu
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTc3OSwxMiArNzc5LDEyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0
eUZvbnRXZWlnaHQgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6
U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgc3dp
dGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVl
SW52YWxpZDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzk4LDcgKzc5
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRXZWlnaHQoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAg
c3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtODA5LDMwICs4
MDksMzAgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVy
ZXMgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRl
KQogICAgIHsKLSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNj
cmlwdGlvbigpOworICAgICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNj
cmlwdGlvbiA9IHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAKICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKHBhcmVudEZvbnRE
ZXNjcmlwdGlvbi5jb21tb25MaWdhdHVyZXNTdGF0ZSgpKTsKICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24u
ZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKCkpOwogICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKHBhcmVudEZvbnREZXNjcmlwdGlvbi5oaXN0b3Jp
Y2FsTGlnYXR1cmVzU3RhdGUoKSk7CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5p
dGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7
CiAKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKEZvbnRE
ZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwogICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFs
TGlnYXR1cmVzU3RhdGUpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExp
Z2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwogCi0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNT
dGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1
cmVzU3RhdGU7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgZGlzY3Jl
dGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNT
dGF0ZTsKQEAgLTg3OCwxMSArODc4LDExIEBAIHB1YmxpYzoKICAgICAgICAgfQogI2VuZGlmCiAK
LSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIt
PmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRDb21tb25MaWdhdHVyZXNTdGF0ZShjb21tb25MaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoZGlzY3JldGlvbmFy
eUxpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxM
aWdhdHVyZXNTdGF0ZShoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3Rh
dGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCiAgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTg5OCwxMyArODk4LDE0IEBA
IHRlbXBsYXRlIDxCb3JkZXJJbWFnZVR5cGUgYm9yZGVySW1hZ2VUeXBlLAogICAgICAgICAgIHZv
aWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKGNvbnN0IE5pbmVQaWVjZUltYWdlJik+
CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewogICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZTsKICAgICAgICAgaWYgKGJvcmRlckltYWdl
VHlwZSA9PSBCb3JkZXJNYXNrKQogICAgICAgICAgICAgaW1hZ2Uuc2V0TWFza0RlZmF1bHRzKCk7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHBy
b3BlcnR5LCB2YWx1ZSwgaW1hZ2UpOwotICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
KnNldHRlckZ1bmN0aW9uKShpbWFnZSk7CisgICAgICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAo
c3RhdGUpOworICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShwcm9wZXJ0eSwgdmFs
dWUsIGltYWdlKTsKKyAgICAgICAgKHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoaW1h
Z2UpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigp
CkBAIC05MjEsMjkgKzkyMiwyOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbmxpbmUgY29uc3Qg
TmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gdHlw
ZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLT5ib3JkZXJJbWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJ
bWFnZSgpOyB9CiAgICAgc3RhdGljIGlubGluZSB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIHZhbHVlKSB7IHJldHVybiB0eXBlID09IEJvcmRl
ckltYWdlID8gc3R5bGUtPnNldEJvcmRlckltYWdlKHZhbHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94
SW1hZ2UodmFsdWUpOyB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpKSk7CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdl
KGdldFZhbHVlKHN0YXRlLnN0eWxlKCkpKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewog
ICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLmNvcHlPdXRzZXRGcm9tKGdl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdl
LmNvcHlPdXRzZXRGcm9tKGdldFZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlcGVhdDoKLSAgICAgICAgICAgIGltYWdlLmNvcHlS
ZXBlYXRGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAgICAg
ICAgICAgIGltYWdlLmNvcHlSZXBlYXRGcm9tKGdldFZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAg
aW1hZ2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRT
dHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNGcm9tKGdldFZhbHVl
KHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFdpZHRoOgotICAgICAgICAgICAgaW1hZ2UuY29weUJvcmRlclNsaWNlc0Zyb20oZ2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW1hZ2UuY29weUJv
cmRlclNsaWNlc0Zyb20oZ2V0VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbWFnZSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAg
ewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpKSk7CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0YXRlLnN0
eWxlKCkpKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBjYXNlIE91dHNl
dDoKICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChMZW5ndGhCb3goMCkpOwpAQCAtOTYyLDI3
ICs5NjMsMjggQEAgcHVibGljOgogICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHR5
cGUgPT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3Ro
KDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSkg
OiBMZW5ndGhCb3goKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAg
TmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSkpOwor
ICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5zdHlsZSgpKSk7Cisg
ICAgICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAoc3RhdGUpOwogICAgICAgICBzd2l0Y2ggKG1v
ZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0
c2V0KHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1
ZSkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxlTWFwLm1hcE5pbmVQaWVjZUlt
YWdlUXVhZCh2YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVwZWF0
OgotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1h
Z2VSZXBlYXQodmFsdWUsIGltYWdlKTsKKyAgICAgICAgICAgIHN0eWxlTWFwLm1hcE5pbmVQaWVj
ZUltYWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBTbGljZToKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5p
bmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGltYWdlKTsKKyAgICAgICAgICAgIHN0eWxlTWFwLm1h
cE5pbmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFdpZHRoOgotICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0
eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOwor
ICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlTWFwLm1hcE5pbmVQaWVjZUlt
YWdlUXVhZCh2YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1
ZShzdGF0ZS5zdHlsZSgpLCBpbWFnZSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFu
ZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVy
aXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTk5MSw3ICs5
OTMsNyBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZCwgU3R5bGVJbWFnZSog
KFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxl
Ojoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAo
KmluaXRpYWxGdW5jdGlvbikoKT4KIGNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJj
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFn
ZShpZCwgdmFsdWUpKTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0YXRl
LnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0
ZSwgaWQsIHZhbHVlKSk7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRs
ZXIoKQogICAgIHsKICAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3Bl
cnR5RGVmYXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRpYWxGdW5jdGlvbj46
OmNyZWF0ZUhhbmRsZXIoKTsKQEAgLTEwMDMsMTEgKzEwMDUsMTEgQEAgZW51bSBDb3VudGVyQmVo
YXZpb3Ige0luY3JlbWVudCA9IDAsIFJlc2V0fTsKIHRlbXBsYXRlIDxDb3VudGVyQmVoYXZpb3Ig
Y291bnRlckJlaGF2aW9yPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvdW50ZXIgewogcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGVtcHR5RnVuY3Rpb24oQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciopIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgZW1wdHlGdW5j
dGlvbihDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYpIHsgfQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgICAg
IENvdW50ZXJEaXJlY3RpdmVNYXAmIHBhcmVudE1hcCA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CisgICAgICAgIENvdW50ZXJEaXJlY3Rp
dmVNYXAmIG1hcCA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7Cisg
ICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIHBhcmVudE1hcCA9IHN0YXRlLnBhcmVudFN0eWxl
KCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CiAKICAgICAgICAgdHlwZWRlZiBDb3VudGVy
RGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsKICAgICAgICAgSXRlcmF0b3IgZW5kID0g
cGFyZW50TWFwLmVuZCgpOwpAQCAtMTAyMCwxNCArMTAyMiwxNCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
OjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFs
dWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTVmFs
dWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwogCi0gICAg
ICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFj
Y2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CisgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1h
cCA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CiAgICAgICAgIHR5
cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7CiAKICAgICAgICAg
SXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwpAQCAtMTA2Myw0MiArMTA2NSw0MiBAQCBwdWJsaWM6
CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlDdXJzb3IgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0Q3Vyc29yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmN1cnNv
cigpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yTGlzdChzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5jdXJzb3JzKCkpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDdXJzb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+Y3Vyc29yKCkpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3JMaXN0KHN0YXRlLnBhcmVudFN0eWxlKCktPmN1cnNvcnMo
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUp
CiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3Qo
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKFJlbmRlclN0eWxl
Ojppbml0aWFsQ3Vyc29yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckN1cnNvckxp
c3QoKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKFJlbmRlclN0eWxlOjppbml0
aWFsQ3Vyc29yKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6
U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
Y2xlYXJDdXJzb3JMaXN0KCk7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewog
ICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0
Kj4odmFsdWUpOwogICAgICAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwotICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKENVUlNPUl9BVVRPKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcihDVVJTT1JfQVVUTyk7CiAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgQ1NT
VmFsdWUqIGl0ZW0gPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwogICAgICAgICAg
ICAgICAgIGlmIChpdGVtLT5pc0N1cnNvckltYWdlVmFsdWUoKSkgewogICAgICAgICAgICAgICAg
ICAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBpbWFnZSA9IHN0YXRpY19jYXN0PENTU0N1cnNvcklt
YWdlVmFsdWUqPihpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT51cGRhdGVJ
ZlNWR0N1cnNvcklzVXNlZChzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3
aXRoIFNWRyBjdXJzb3JzIGFyZSBub3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFVuaXF1ZSgpOwotICAg
ICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVS
ZXNvbHZlci0+c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90
U3BvdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNv
cklzVXNlZChzdGF0ZS5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFy
ZSBub3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5hZGRDdXJzb3IoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwgQ1NTUHJvcGVy
dHlDdXJzb3IsIGltYWdlKSwgaW1hZ2UtPmhvdFNwb3QoKSk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihpdGVtKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc0lkZW50KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PmN1cnNvcigpICE9IEVDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKSkKLSAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpICYmIHN0YXRlLnN0eWxlKCktPmN1
cnNvcigpICE9IEVDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKSkKKyAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMTEwNyw3ICsxMTA5LDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5VGV4
dEFsaWduIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTExNSwxMyArMTExNywx
MyBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZVdlYmtpdE1hdGNoUGFyZW50KQot
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKCpwcmltaXRp
dmVWYWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkt
PnRleHRBbGlnbigpID09IFRBU1RBUlQpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpID8gTEVGVCA6IFJJR0hUKTsKLSAgICAgICAgZWxzZSBpZiAoc3R5bGVS
ZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFFTkQpCi0gICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUklHSFQgOiBMRUZUKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOwor
ICAgICAgICBlbHNlIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQVNU
QVJUKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVu
dFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExFRlQgOiBSSUdIVCk7CisgICAg
ICAgIGVsc2UgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBRU5EKQor
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFJJR0hUIDogTEVGVCk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkp
OwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAg
IHsKQEAgLTExMzIsNyArMTEzNCw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRl
eHREZWNvcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgRVRleHREZWNv
cmF0aW9uIHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHREZWNvcmF0aW9uKCk7CiAgICAgICAg
IGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9yZSgpOyBpLmFkdmFu
Y2UoKSkgewpAQCAtMTE0MCw3ICsxMTQyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKICAg
ICAgICAgICAgIHQgfD0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAg
ICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRp
b24odCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHREZWNvcmF0aW9uKHQpOwogICAg
IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAg
LTExNTEsNyArMTE1Myw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUxpbmVIZWln
aHQgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTYyLDE1ICsxMTY0LDE1IEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlTm9ybWFsKQogICAgICAgICAgICAgbGluZUhlaWdodCA9IFJlbmRlclN0eWxlOjppbml0aWFs
TGluZUhlaWdodCgpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgo
KSkgewotICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+dGV4dFNpemVBZGp1c3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJh
bWUgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgZG91
YmxlIG11bHRpcGxpZXIgPSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAg
ICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdGF0ZS5kb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAg
ICAgICAgICAgICAgICBtdWx0aXBsaWVyICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
cm9vdEVsZW1lbnRTdHlsZSgpLCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIGxpbmVIZWlnaHQg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgbXVsdGlwbGllcik7CiAgICAgICAgIH0gZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTog
cGVyY2VudGFnZSBzaG91bGQgbm90IGJlIHJlc3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgot
ICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQp
OworICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aCgoc3RhdGUuc3R5bGUoKS0+Zm9udFNp
emUoKSAqIHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwogICAg
ICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogbnVtYmVyIGFuZCBwZXJjZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0
aGUgc2FtZSB0eXBlIG9mIExlbmd0aCAoaWUuIEZpeGVkIG9yIFBlcmNlbnQpLgogICAgICAgICAg
ICAgbGluZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAq
IDEwMC4wLCBQZXJjZW50KTsKQEAgLTExNzgsNyArMTE4MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3Ro
KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKICAgICB9CiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xMjY1LDExICsxMjY3LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIHB1YmxpYzoKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciopIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+cmVzZXRQ
YWdlU2l6ZVR5cGUoKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUo
KTsKICAgICAgICAgTGVuZ3RoIHdpZHRoOwogICAgICAgICBMZW5ndGggaGVpZ2h0OwogICAgICAg
ICBQYWdlU2l6ZVR5cGUgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87CkBAIC0xMjg1LDgg
KzEyODcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgLy8gPGxlbmd0aD57Mn0KICAgICAg
ICAgICAgICAgICBpZiAoIXNlY29uZC0+aXNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIHdpZHRoID0gZmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVu
Z3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCkpOwotICAgICAgICAgICAgICAgIGhlaWdodCA9IHNlY29uZC0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50
U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAg
ICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5
bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgogICAgICAgICAgICAg
ICAgIC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJz
ZVNpemVQYXJhbWV0ZXIuCkBAIC0xMzA0LDcgKzEzMDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAvLyA8
bGVuZ3RoPgogICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZF
RDsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgICAg
IGNhc2UgMDoKQEAgLTEzMzAsMjkgKzEzMzIsMjkgQEAgcHVibGljOgogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdlU2l6ZVR5cGUpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRQYWdlU2l6ZShMZW5ndGhTaXplKHdpZHRoLCBoZWlnaHQpKTsK
KyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBhZ2VTaXplKExlbmd0aFNpemUod2lkdGgsIGhlaWdo
dCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7
IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFs
VmFsdWUsICZhcHBseVZhbHVlKTsgfQogfTsKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRFbXBo
YXNpc1N0eWxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc0ZpbGwoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmls
bCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFy
ayhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoc3RhdGUucGFyZW50U3R5
bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzTWFyayhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHN0YXRlLnBh
cmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFJlbmRlclN0eWxlOjppbml0
aWFsVGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc01hcmso
KSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFJlbmRlclN0eWxlOjppbml0
aWFsVGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVt
cGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc01hcmsoKSk7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoUmVuZGVyU3R5bGU6
OmluaXRpYWxUZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAgICAgICAgIENTU1Zh
bHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKQEAgLTEz
NjYsMTEgKzEzNjgsMTEgQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKICAg
ICAgICAgICAgICAgICBpZiAodmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwg
dmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKQotICAgICAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCp2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoKnZhbHVl
KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqdmFsdWUpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhh
c2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0xMzc5LDIwICsxMzgxLDIwIEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1N0cmluZygpKSB7
Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQ3VzdG9tKTsKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmso
cHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFy
a0N1c3RvbSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0
b21NYXJrKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20pOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKIAogICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBo
YXNpc01hcmtBdXRvKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNp
c0ZpbGwoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0F1dG8pOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChU
ZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc01hcmsoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCpwcmltaXRp
dmVWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE0MTUsMTQgKzE0MTcsMTggQEAgcHVi
bGljOgogICAgIHN0YXRpYyBib29sIHRlc3QoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsg
cmV0dXJuIChhbmltYXRpb24tPip0ZXN0RnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgdm9pZCBj
bGVhcihBbmltYXRpb24qIGFuaW1hdGlvbikgeyAoYW5pbWF0aW9uLT4qY2xlYXJGdW5jdGlvbiko
KTsgfQogICAgIHN0YXRpYyBUIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5jdGlvbiko
KTsgfQotICAgIHN0YXRpYyB2b2lkIG1hcChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBB
bmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5z
dHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKGFuaW1hdGlvbiwgdmFsdWUpOyB9CisgICAgc3RhdGlj
IHZvaWQgbWFwKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQW5pbWF0aW9uKiBhbmltYXRp
b24sIENTU1ZhbHVlKiB2YWx1ZSkgCisgICAgeworICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxl
TWFwKHN0YXRlKTsKKyAgICAgICAgKHN0eWxlTWFwLiptYXBGdW5jdGlvbikoYW5pbWF0aW9uLCB2
YWx1ZSk7CisgICAgfQogICAgIHN0YXRpYyBBbmltYXRpb25MaXN0KiBhY2Nlc3NBbmltYXRpb25z
KFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qYW5pbWF0aW9uR2V0dGVyRnVu
Y3Rpb24pKCk7IH0KICAgICBzdGF0aWMgY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbWF0aW9ucyhS
ZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmltbXV0YWJsZUFuaW1hdGlvbkdl
dHRlckZ1bmN0aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmlt
YXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOwotICAgICAgICBjb25zdCBBbmltYXRpb25M
aXN0KiBwYXJlbnRMaXN0ID0gYW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
KTsKKyAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3RhdGUu
c3R5bGUoKSk7CisgICAgICAgIGNvbnN0IEFuaW1hdGlvbkxpc3QqIHBhcmVudExpc3QgPSBhbmlt
YXRpb25zKHN0YXRlLnBhcmVudFN0eWxlKCkpOwogICAgICAgICBzaXplX3QgaSA9IDAsIHBhcmVu
dFNpemUgPSBwYXJlbnRMaXN0ID8gcGFyZW50TGlzdC0+c2l6ZSgpIDogMDsKICAgICAgICAgZm9y
ICggOyBpIDwgcGFyZW50U2l6ZSAmJiB0ZXN0KHBhcmVudExpc3QtPmFuaW1hdGlvbihpKSk7ICsr
aSkgewogICAgICAgICAgICAgaWYgKGxpc3QtPnNpemUoKSA8PSBpKQpAQCAtMTQzNiw5ICsxNDQy
LDkgQEAgcHVibGljOgogICAgICAgICAgICAgY2xlYXIobGlzdC0+YW5pbWF0aW9uKGkpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
OjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNj
ZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKKyAgICAgICAgQW5pbWF0aW9u
TGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3RhdGUuc3R5bGUoKSk7CiAgICAgICAgIGlm
IChsaXN0LT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpj
cmVhdGUoKSk7CiAgICAgICAgIHNldFZhbHVlKGxpc3QtPmFuaW1hdGlvbigwKSwgaW5pdGlhbCgp
KTsKQEAgLTE0NDgsMjIgKzE0NTQsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgY2xlYXIobGlz
dC0+YW5pbWF0aW9uKGkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgQW5pbWF0
aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7
CisgICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0
eWxlKCkpOwogICAgICAgICBzaXplX3QgY2hpbGRJbmRleCA9IDA7CiAgICAgICAgIGlmICh2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAgICAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBw
dXQgaXQgaW50byBhbiBhbmltYXRpb24sIGNyZWF0aW5nIG5ldyBhbmltYXRpb25zIGFzIG5lZWRl
ZC4gKi8KICAgICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBp
Lmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRl
eCA8PSBsaXN0LT5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmlt
YXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlz
dC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1h
cChzdGF0ZSwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOwogICAgICAg
ICAgICAgICAgICsrY2hpbGRJbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGlmIChsaXN0LT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbGlzdC0+
YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgbWFwKHN0eWxlUmVzb2x2
ZXIsIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpOworICAgICAgICAgICAgbWFw
KHN0YXRlLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIHZhbHVlKTsKICAgICAgICAgICAg
IGNoaWxkSW5kZXggPSAxOwogICAgICAgICB9CiAgICAgICAgIGZvciAoIDsgY2hpbGRJbmRleCA8
IGxpc3QtPnNpemUoKTsgKytjaGlsZEluZGV4KSB7CkBAIC0xNDc3LDIyICsxNDgzLDIyIEBAIHB1
YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJp
dFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPE91dGxpbmVJc0F1
dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVu
ZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0
eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxF
Qm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZS
ZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVS
ZXNvbHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRv
LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRl
clN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHls
ZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5
SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHls
ZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxl
OjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9y
ZGVyU3R5bGU+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPE91dGxp
bmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRv
LCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJl
bmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlJbml0aWFsVmFsdWUo
cHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0
QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5
bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5l
SXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywg
JlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHBy
b3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3Jk
ZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRl
clN0eWxlOjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0
aWFsQm9yZGVyU3R5bGU+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHls
ZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1
dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0
bz46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGlu
ZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlE
ZWZhdWx0PE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBP
dXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGlu
ZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlW
YWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVm
YXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5
bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwg
dmFsdWUpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUlu
aXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0xNTAwLDcgKzE1MDYsNyBAQCBwdWJsaWM6
CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlSZXNpemUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC0xNTEyLDEzICsxNTE4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSAwOgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgICAg
IGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0
aW5ncygpKQorICAgICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHN0YXRlLmRvY3Vt
ZW50KCktPnNldHRpbmdzKCkpCiAgICAgICAgICAgICAgICAgciA9IHNldHRpbmdzLT50ZXh0QXJl
YXNBcmVSZXNpemFibGUoKSA/IFJFU0laRV9CT1RIIDogUkVTSVpFX05PTkU7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHIgPSAqcHJpbWl0aXZlVmFs
dWU7CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0UmVzaXpl
KHIpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRSZXNpemUocik7CiAgICAgfQogCiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE1MzAsNyArMTUzNiw3
IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVZlcnRpY2FsQWxpZ24gewogcHVibGlj
OgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTM4LDkgKzE1NDQsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRW
ZXJ0aWNhbEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGUu
c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbigqcHJpbWl0aXZlVmFsdWUpOwogCi0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ25MZW5ndGgocHJpbWl0aXZlVmFs
dWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZl
cnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNp
b24+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5
bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ25MZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNv
bnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24g
fCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKQEAgLTE1NTIsMzIgKzE1NTgsMzIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBs
eVByb3BlcnR5QXNwZWN0UmF0aW8gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgaWYgKCFzdHlsZVJlc29sdmVyLT5w
YXJlbnRTdHlsZSgpLT5oYXNBc3BlY3RSYXRpbygpKQorICAgICAgICBpZiAoIXN0YXRlLnBhcmVu
dFN0eWxlKCktPmhhc0FzcGVjdFJhdGlvKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5h
c3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3Bl
Y3RSYXRpb051bWVyYXRvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRv
cigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJh
dGlvKFJlbmRlclN0eWxlOjppbml0aWFsSGFzQXNwZWN0UmF0aW8oKSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoUmVuZGVyU3R5bGU6
OmluaXRpYWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFz
cGVjdFJhdGlvTnVtZXJhdG9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3Bl
Y3RSYXRpbyhSZW5kZXJTdHlsZTo6aW5pdGlhbEhhc0FzcGVjdFJhdGlvKCkpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRlclN0eWxlOjppbml0
aWFsQXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb051bWVy
YXRvcigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNB
c3BlY3RSYXRpb1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEhhc0FzcGVjdFJhdGlvKGZhbHNlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEhhc0FzcGVjdFJhdGlvKGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVlKiBhc3BlY3RSYXRpb1ZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8odHJ1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+ZGVu
b21pbmF0b3JWYWx1ZSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNw
ZWN0UmF0aW9OdW1lcmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+bnVtZXJhdG9yVmFsdWUoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUt
PmRlbm9taW5hdG9yVmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJh
dGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUtPm51bWVyYXRvclZhbHVlKCkpOwogICAgIH0K
IAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNTg4LDQ4
ICsxNTk0LDQ4IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVpvb20gewogcHJpdmF0
ZToKLSAgICBzdGF0aWMgdm9pZCByZXNldEVmZmVjdGl2ZVpvb20oU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCByZXNldEVmZmVjdGl2ZVpvb20oU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgLy8gUmVzZXQgdGhlIHpvb20gaW4g
ZWZmZWN0LiBUaGlzIGFsbG93cyB0aGUgc2V0Wm9vbSBtZXRob2QgdG8gYWNjdXJhdGVseSBjb21w
dXRlIGEgbmV3IHpvb20gaW4gZWZmZWN0LgotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZl
Y3RpdmVab29tKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5w
YXJlbnRTdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20o
KSk7CisgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oc3RhdGUucGFyZW50U3R5bGUoKSA/
IHN0YXRlLnBhcmVudFN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0
aWFsWm9vbSgpKTsKICAgICB9CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVy
aXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHls
ZVJlc29sdmVyKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT56b29tKCkpOworICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3Rh
dGUpOworICAgICAgICBzdGF0ZS5zZXRab29tKHN0YXRlLnBhcmVudFN0eWxlKCktPnpvb20oKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAg
ICAgewotICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOworICAgICAgICBzdGF0ZS5zZXRab29tKFJl
bmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04odmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSk7CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewotICAgICAgICAgICAgcmVz
ZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgICAgICByZXNl
dEVmZmVjdGl2ZVpvb20oc3RhdGUpOworICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJT
dHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVSZXNldCkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsK
KyAgICAgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxa
b29tKCkpOworICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpv
b20oKSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVEb2N1bWVudCkgewotICAgICAgICAgICAgZmxvYXQgZG9jWm9vbSA9IHN0eWxlUmVz
b2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5
bGUoKS0+em9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCk7Ci0gICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKGRvY1pvb20pOwotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0Wm9vbShkb2Nab29tKTsKKyAgICAgICAgICAgIGZsb2F0IGRvY1pvb20g
PSBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkgPyBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCktPnpv
b20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOworICAgICAgICAgICAgc3RhdGUuc2V0
RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFpvb20oZG9jWm9v
bSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7
Ci0gICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOwogICAgICAgICAgICAgaWYgKGZsb2F0IHBl
cmNlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKQotICAgICAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnNldFpvb20ocGVyY2VudCAvIDEwMC4wZik7CisgICAgICAgICAgICAg
ICAgc3RhdGUuc2V0Wm9vbShwZXJjZW50IC8gMTAwLjBmKTsKICAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVa
b29tKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRl
KTsKICAgICAgICAgICAgIGlmIChmbG9hdCBudW1iZXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0Rmxv
YXRWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20obnVtYmVy
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRab29tKG51bWJlcik7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTE2NDEsNDIgKzE2NDcsNDIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3Bl
cnR5RGlzcGxheSB7CiBwcml2YXRlOgotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkRGlz
cGxheVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIEVEaXNwbGF5IGRpc3BsYXlQ
cm9wZXJ0eVZhbHVlKQorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVl
KFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgRURpc3BsYXkgZGlzcGxheVByb3BlcnR5VmFs
dWUpCiAgICAgewogI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5l
bGVtZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKKyAgICAgICAg
aWYgKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpICYm
IHN0YXRlLnN0eWxlKCktPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQogICAgICAgICAgICAgcmV0
dXJuIChkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBJTkxJTkUgfHwgZGlzcGxheVByb3BlcnR5VmFs
dWUgPT0gQkxPQ0sgfHwgZGlzcGxheVByb3BlcnR5VmFsdWUgPT0gTk9ORSk7CiAjZWxzZQotICAg
ICAgICBVTlVTRURfUEFSQU0oc3R5bGVSZXNvbHZlcik7CisgICAgICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShkaXNwbGF5UHJvcGVydHlWYWx1ZSk7CiAjZW5k
aWYKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRURpc3BsYXkgZGlz
cGxheSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmRpc3BsYXkoKTsKLSAgICAgICAg
aWYgKCFpc1ZhbGlkRGlzcGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQorICAgICAg
ICBFRGlzcGxheSBkaXNwbGF5ID0gc3RhdGUucGFyZW50U3R5bGUoKS0+ZGlzcGxheSgpOworICAg
ICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3RhdGUsIGRpc3BsYXkpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXREaXNwbGF5KGRp
c3BsYXkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShSZW5kZXJTdHlsZTo6
aW5pdGlhbERpc3BsYXkoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERpc3BsYXkoUmVu
ZGVyU3R5bGU6OmluaXRpYWxEaXNwbGF5KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9ICpzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKIAotICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3R5bGVS
ZXNvbHZlciwgZGlzcGxheSkpCisgICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdGF0
ZSwgZGlzcGxheSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0RGlzcGxheShkaXNwbGF5KTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVy
IGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTY4OSwyMSArMTY5NSwyMSBAQCB0ZW1wbGF0ZSA8Q2xpcFBh
dGhPcGVyYXRpb24qIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lk
IChSZW5kZQogY2xhc3MgQXBwbHlQcm9wZXJ0eUNsaXBQYXRoIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8Q2xpcFBhdGhP
cGVyYXRpb24+IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCAwKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5p
c1NoYXBlKCkpIHsKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLCBTaGFwZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKHN0
eWxlUmVzb2x2ZXIsIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKSk7CisgICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6
Y3JlYXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBl
VmFsdWUoKSkpKTsKICAgICAgICAgICAgIH0KICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAgICAg
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VSSSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBjc3NVUkxWYWx1ZSA9IHBy
aW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgIEtVUkwgdXJs
ID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoY3NzVVJMVmFsdWUpOwor
ICAgICAgICAgICAgICAgIEtVUkwgdXJsID0gc3RhdGUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
Y3NzVVJMVmFsdWUpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IHdvcmsg
d2l0aCBmb3J3YXJkIG9yIGV4dGVybmFsIFNWRyByZWZlcmVuY2VzIChzZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNDA1KQotICAgICAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uOjpj
cmVhdGUoY3NzVVJMVmFsdWUsIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSkpOworICAgICAgICAg
ICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9u
OjpjcmVhdGUoY3NzVVJMVmFsdWUsIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSkpOwogICAgICAg
ICAgICAgfQogI2VuZGlmCiAgICAgICAgIH0KQEAgLTE3MjAsMTggKzE3MjYsMTggQEAgdGVtcGxh
dGUgPEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgp
IGNvbnN0LCB2b2lkIChSZW4KIGNsYXNzIEFwcGx5UHJvcGVydHlFeGNsdXNpb25TaGFwZSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNz
UmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0
aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAg
ICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsKKyAgICAgICAg
ICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCAwKTsKICAgICAgICAgICAgIC8vIEZJWE1F
IEJ1ZyAxMDI1NzE6IExheW91dCBmb3IgdGhlIHZhbHVlICdvdXRzaWRlLXNoYXBlJyBpcyBub3Qg
eWV0IGltcGxlbWVudGVkCiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZU91dHNpZGVTaGFwZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRz
aWRlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgRXhj
bHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOwogICAgICAgICAgICAgZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU2hhcGUoKSkgewotICAgICAgICAgICAgICAgIFJlZlB0
cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0
ZVNoYXBlVmFsdWUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIHByaW1pdGl2ZVZh
bHVlLT5nZXRTaGFwZVZhbHVlKCkpKTsKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBzaGFwZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgIFJlZlB0
cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0
ZVNoYXBlVmFsdWUoYmFzaWNTaGFwZUZvclZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZS0+Z2V0
U2hhcGVWYWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwg
c2hhcGUucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE3
NDYsMjEgKzE3NTIsMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElP
TikKIGNsYXNzIEFwcGx5UHJvcGVydHlJbWFnZVJlc29sdXRpb24gewogcHVibGljOgotICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRp
b25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29s
dXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFn
ZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNv
dXJjZT46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAg
ICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRl
clN0eWxlOjppbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVy
U3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaGVyaXRWYWx1ZShw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRC
YXNlPGZsb2F0LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJT
dHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1h
Z2VSZXNvbHV0aW9uPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZl
cik7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3Vy
Y2UsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25T
b3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29s
dXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46
OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9w
ZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VS
ZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFn
ZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3Rh
dGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHls
ZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRp
b24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUlu
aGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsK
LSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwg
JlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJj
ZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlv
blNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBw
bHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6Omlt
YWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0
SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpp
bml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQs
IHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQs
ICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJ
bWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRp
b24+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRl
clN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJl
bmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJj
ZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbml0
aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVs
dEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25T
bmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlv
blNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVz
b2x1dGlvblNuYXA+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAg
ICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJl
c29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFwcGx5SW5pdGlhbFZhbHVl
KHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYg
KCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3ODAsOSAr
MTc4Niw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXNv
bHV0aW9uID0gcHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRFBQWCk7CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHNvdXJjZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNuYXAoc25hcCk7Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvbihyZXNvbHV0aW9uKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHNvdXJjZSk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNuYXAoc25hcCk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvbihyZXNvbHV0aW9uKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
QnVpbGRlci5oCmluZGV4IDRmZmU4NTIzNGMxM2QwZmJiMTQ0NmUwNjg4MWM5ZjdmZWZjNzA2N2Iu
LmIyY2M0ZWUzNWZlZWRhZWFkNzVlN2NhNDA1NThlNDQwZGY3MTgwODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgU3R5bGVCdWlsZGVyX2gK
IAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCkBAIC0zMywxOCArMzQsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
U1NWYWx1ZTsKIGNsYXNzIFN0eWxlQnVpbGRlcjsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKIGNs
YXNzIFByb3BlcnR5SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5oZXJp
dEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKik7Ci0gICAgdHlwZWRlZiB2
b2lkICgqSW5pdGlhbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKik7Ci0g
ICAgdHlwZWRlZiB2b2lkICgqQXBwbHlGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciosIENTU1ZhbHVlKik7CisgICAgdHlwZWRlZiB2b2lkICgqSW5oZXJpdEZ1bmN0aW9uKShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYpOworICAgIHR5cGVkZWYgdm9pZCAo
KkluaXRpYWxGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmKTsK
KyAgICB0eXBlZGVmIHZvaWQgKCpBcHBseUZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYsIENTU1ZhbHVlKik7CiAgICAgUHJvcGVydHlIYW5kbGVyKCkgOiBtX2lu
aGVyaXQoMCksIG1faW5pdGlhbCgwKSwgbV9hcHBseSgwKSB7IH0KICAgICBQcm9wZXJ0eUhhbmRs
ZXIoSW5oZXJpdEZ1bmN0aW9uIGluaGVyaXQsIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsLCBBcHBs
eUZ1bmN0aW9uIGFwcGx5KSA6IG1faW5oZXJpdChpbmhlcml0KSwgbV9pbml0aWFsKGluaXRpYWwp
LCBtX2FwcGx5KGFwcGx5KSB7IH0KLSAgICB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgY29uc3QgeyBB
U1NFUlQobV9pbmhlcml0KTsgKCptX2luaGVyaXQpKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIp
OyB9Ci0gICAgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIGNvbnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7
ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsgfQotICAgIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBs
eSkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOyB9CisgICAgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSkgY29uc3QgeyBBU1NFUlQobV9pbmhlcml0KTsgKCptX2luaGVyaXQpKHByb3BlcnR5
SUQsIHN0YXRlKTsgfQorICAgIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpIGNvbnN0IHsgQVNTRVJUKG1f
aW5pdGlhbCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdGF0ZSk7IH0KKyAgICB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBs
eSkocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsgfQogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5oZXJpdCAmJiBtX2luaXRpYWwgJiYgbV9hcHBseTsgfQogICAgIEluaGVy
aXRGdW5jdGlvbiBpbmhlcml0RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2luaGVyaXQ7IH0K
ICAgICBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbEZ1bmN0aW9uKCkgeyByZXR1cm4gbV9pbml0aWFs
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggNmU3MzlhMzg1OTg5ZjQ3
Y2FmYWZhODg4Mzc2Nzc2NGZmN2M5YmQyZS4uYjJlNTllNmNhNTNmYzUzZDk4YTFjZjBjZGM0YjAx
NzhiZjhhMGU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNDcsNiAr
NDcsNyBAQAogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2luY2x1ZGUgIkNTU1N1cHBvcnRz
UnVsZS5oIgogI2luY2x1ZGUgIkNTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NUb1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaWYgRU5BQkxFKENT
U19WQVJJQUJMRVMpCiAjaW5jbHVkZSAiQ1NTVmFyaWFibGVWYWx1ZS5oIgpAQCAtMTk2LDE0ICsx
OTcsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogI2RlZmluZSBIQU5ETEVfSU5I
RVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSB7IFwKLSAgICBtX3N0YXRlLnN0eWxl
KCktPnNldCMjUHJvcChtX3N0YXRlLnBhcmVudFN0eWxlKCktPnByb3AoKSk7IFwKKyAgICBzdGF0
ZS5zdHlsZSgpLT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50U3R5bGUoKS0+cHJvcCgpKTsgIFwKICAg
ICByZXR1cm47IFwKIH0KIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChwcm9w
LCBQcm9wKSBcCiBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbml0aWFsKSB7
IFwKLSAgICBtX3N0YXRlLnN0eWxlKCktPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMj
UHJvcCgpKTsgXAorICAgIHN0YXRlLnN0eWxlKCktPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5p
dGlhbCMjUHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCkBAIC0yMjUsNyArMjI2LDYgQEAg
c3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQogICAgIHJl
dHVybiByaWdodFRvTGVmdERlY2wuZ2V0KCk7CiB9CiAKLQogaW5saW5lIFN0YXRpY0NTU1J1bGVM
aXN0KiBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6ZW5zdXJlUnVsZUxpc3QoKQogewogICAgIGlmICgh
bV9ydWxlTGlzdCkKQEAgLTI3MSw3ICsyNzEsNiBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29s
dmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCiAg
ICAgLCBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcihWaWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZShkb2N1bWVudCkpCiAjZW5kaWYKICAgICAsIG1fc3R5bGVCdWlsZGVyKFN0eWxlQnVpbGRlcjo6
c2hhcmVkU3R5bGVCdWlsZGVyKCkpCi0gICAgLCBtX3N0eWxlTWFwKHRoaXMpCiB7CiAgICAgRWxl
bWVudCogcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKIApAQCAtNDU1LDIzICs0
NTQsMjIgQEAgaW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1
bGVzKCkKIAogYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBm
YWxzZTsKIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBN
YXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0
Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewogICAgIEFT
U0VSVChtYXRjaFJlcXVlc3QucnVsZVNldCk7Ci0gICAgQVNTRVJUKG1fc3RhdGUuZWxlbWVudCgp
KTsKKyAgICBBU1NFUlQoc3RhdGUuZWxlbWVudCgpKTsKIAotICAgIFN0YXRlJiBzdGF0ZSA9IG1f
c3RhdGU7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsKICAgICBjb25z
dCBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGUuc3R5bGVkRWxlbWVudCgpOwog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHNldWRvSWQgPSBlbGVtZW50LT5zaGFkb3dQc2V1ZG9J
ZCgpOwogICAgIGlmICghcHNldWRvSWQuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChzdHls
ZWRFbGVtZW50KTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVx
dWVzdC5ydWxlU2V0LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwg
bWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVs
ZXMocHNldWRvSWQuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIH0KIAog
I2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50
KCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVs
ZVNldC0+Y3VlUHNldWRvUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0
LT5jdWVQc2V1ZG9SdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAjZW5kaWYKICAg
ICAvLyBDaGVjayB3aGV0aGVyIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGFyZSBhcHBsaWNhYmxlIGlu
IHRoZSBjdXJyZW50IHRyZWUgc2NvcGUuIENyaXRlcmlhIGZvciB0aGlzOgogICAgIC8vIGEpIGl0
J3MgYSBVQSBydWxlCkBAIC00ODcsNDQgKzQ4NSw0MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNv
bGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxl
UgogICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFn
LCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0
IHRoZSBidWZmZXIuCiAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCi0gICAgICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+aWRSdWxlcyhlbGVtZW50
LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdl
KTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVl
c3QucnVsZVNldC0+aWRSdWxlcyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwo
KSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICAgICBpZiAoc3R5bGVkRWxlbWVudCAmJiBz
dHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jbGFzc1J1
bGVzKHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVlc3Qs
IHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3Rh
dGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jbGFzc1J1bGVzKHN0eWxlZEVsZW1lbnQtPmNsYXNz
TmFtZXMoKVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgfQogCiAg
ICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmxpbmtQc2V1ZG9DbGFzc1J1bGVzKCksIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+bGlua1BzZXVkb0NsYXNzUnVsZXMoKSwgbWF0
Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIGlmIChTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNG
b2N1c1BzZXVkb0NsYXNzKGVsZW1lbnQpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRj
aFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1h
dGNoUmVxdWVzdC5ydWxlU2V0LT50YWdSdWxlcyhlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkp
LCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT51bml2ZXJzYWxSdWxlcygpLCBtYXRjaFJlcXVlc3Qs
IHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwg
bWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVl
c3QsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBt
YXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgp
KSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
TGlzdChzdGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCksIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVs
ZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yUmVnaW9uKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVl
c3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewotICAgIGlmICghbV9zdGF0ZS5yZWdpb25Gb3JT
dHlsaW5nKCkpCisgICAgaWYgKCFzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHVuc2lnbmVkIHNpemUgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdp
b25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkgewogICAgICAgICBjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0
b3IgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5h
dChpKS5zZWxlY3RvcjsKLSAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2Vs
ZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKS0+
bm9kZSgpKSkpIHsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0
b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCktPm5vZGUo
KSkpKSB7CiAgICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IG1hdGNoUmVxdWVzdC5y
dWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7
CiAgICAgICAgICAgICBBU1NFUlQocmVnaW9uUnVsZXMpOwotICAgICAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBtYXRjaFJlcXVlc3QuaW5jbHVk
ZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVSYW5nZSk7CisgICAgICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBt
YXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVS
YW5nZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFu
ZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVz
dWx0JiByZXN1bHQpCiB7Ci0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBWZWN0b3I8
Y29uc3QgUnVsZURhdGEqLCAzMj4mIG1hdGNoZWRSdWxlcyA9IHN0YXRlLm1hdGNoZWRSdWxlcygp
OwogICAgIGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAgc29ydE1hdGNoZWRSdWxlcyhzdGF0ZSk7CiAKICAg
ICBpZiAoc3RhdGUubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUnVsZXMuc2l6ZSgpOyAr
K2kpCkBAIC01NDAsMTkgKzUzNywxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFu
c2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAgIH0KIH0KIAotdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVk
QXV0aG9yUnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFE
T1dfRE9NKQogICAgIGlmICghbV9zY29wZVJlc29sdmVyKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBl
bGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNpc3RlbnQpLgotICAgIGlm
IChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+
ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX3N0YXRlLmVsZW1lbnQoKSkpIHsKLSAgICAgICAgYm9v
bCBhcHBseUF1dGhvclN0eWxlcyA9IG1fc3RhdGUuZWxlbWVudCgpLT50cmVlU2NvcGUoKS0+YXBw
bHlBdXRob3JTdHlsZXMoKTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyLT5oYXNTY29wZWRTdHls
ZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lzdGVuY3koc3RhdGUuZWxl
bWVudCgpKSkgeworICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gc3RhdGUuZWxlbWVu
dCgpLT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKICAgICAgICAgYm9vbCBkb2N1
bWVudFNjb3BlID0gdHJ1ZTsKICAgICAgICAgdW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29wZVJl
c29sdmVyLT5zdGFja1NpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNj
b3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFy
KCk7CisgICAgICAgICAgICBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgICAgICAg
ICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxOwogCiAgICAgICAgICAgICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0
YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7CkBAIC01
NjcsMTEwICs1NjQsMTEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JS
dWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiAKICAgICAgICAgICAg
IE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QoZnJhbWUubV9ydWxlU2V0LCBpbmNsdWRlRW1wdHlS
dWxlcywgZnJhbWUubV9zY29wZSk7CiAgICAgICAgICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0g
cmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICAgICAgICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICAgICAg
ICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgICAgICAgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAg
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHN0YXRlLCBtYXRjaFJlcXVlc3Qs
IHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3Rh
dGUsIHJlc3VsdCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtYXRjaEhvc3RSdWxlcyhyZXN1
bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaEhvc3RSdWxlcyhzdGF0ZSwgcmVzdWx0
LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CiAgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1
bGVzKTsKICNlbmRpZgogfQogCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJp
bmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkKK2lubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6
OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoU3RhdGUmIHN0YXRlKQogewog
I2lmIEVOQUJMRShTSEFET1dfRE9NKQotICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9z
Y29wZVJlc29sdmVyLT5zdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fc3Rh
dGUuZWxlbWVudCgpKTsKKyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVSZXNv
bHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhzdGF0ZS5lbGVtZW50
KCkpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICNlbmRpZgogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hdGNoSG9zdFJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcykKIHsKICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBBU1NFUlQo
bV9zY29wZVJlc29sdmVyKTsKIAotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsK
KyAgICBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAg
IFZlY3RvcjxSdWxlU2V0Kj4gbWF0Y2hlZFJ1bGVzOwotICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0
Y2hIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7CisgICAgbV9zY29w
ZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhzdGF0ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7
CiAgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAg
ICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdl
KCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVs
ZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1fc3RhdGUuZWxlbWVudCgpKSwgcnVsZVJh
bmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIE1hdGNoUmVxdWVzdCht
YXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIHN0YXRlLmVsZW1lbnQoKSks
IHJ1bGVSYW5nZSk7CiAgICAgfQotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1
bHQpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKICNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsK
ICAgICBVTlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOwogI2VuZGlmCiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVz
KFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cykKIHsKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CisgICAgc3RhdGUubWF0
Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0g
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICBpZiAoIW1fc3RhdGUu
ZWxlbWVudCgpKQorICAgIGlmICghc3RhdGUuZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgogICAgIE1hdGNoUmVxdWVzdCBtYXRj
aFJlcXVlc3QobV9ydWxlU2V0cy5hdXRob3JTdHlsZSgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAg
ICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7
Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsK
KyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2Up
OworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHN0YXRlLCBtYXRjaFJlcXVlc3Qs
IHJ1bGVSYW5nZSk7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgVmVjdG9yPE1hdGNoUmVx
dWVzdD4gbWF0Y2hSZXF1ZXN0czsKICAgICBtX3J1bGVTZXRzLnNoYWRvd0Rpc3RyaWJ1dGVkUnVs
ZXMoKS5jb2xsZWN0TWF0Y2hSZXF1ZXN0cyhpbmNsdWRlRW1wdHlSdWxlcywgbWF0Y2hSZXF1ZXN0
cyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaFJlcXVlc3RzLnNpemUoKTsgKytp
KQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3RzW2ldLCBydWxlUmFu
Z2UpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgbWF0Y2hSZXF1ZXN0c1tp
XSwgcnVsZVJhbmdlKTsKICNlbmRpZgogCi0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVz
KHJlc3VsdCk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQp
OwogCi0gICAgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKKyAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKHN0YXRlLCByZXN1bHQsIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaFVzZXJSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgaWYgKCFtX3J1bGVTZXRzLnVzZXJTdHlsZSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigp
OworICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAKICAgICByZXN1bHQucmFuZ2Vz
Lmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogICAg
IE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9ydWxlU2V0cy51c2VyU3R5bGUoKSwgaW5jbHVk
ZUVtcHR5UnVsZXMpOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLnVz
ZXJSdWxlUmFuZ2UoKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3QsIHJ1
bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0
LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHN0YXRlLCBtYXRjaFJlcXVl
c3QsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oc3RhdGUs
IG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKIAotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcyhyZXN1bHQpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVz
dWx0KTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQm
IHJlc3VsdCwgUnVsZVNldCogcnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxl
cyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQogewot
ICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKKyAgICBzdGF0ZS5tYXRjaGVkUnVs
ZXMoKS5jbGVhcigpOwogICAgIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSA9IHJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2Ug
PSByZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdlKCk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMo
TWF0Y2hSZXF1ZXN0KHJ1bGVzKSwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
cyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KHJ1bGVzKSwgcnVsZVJhbmdlKTsKIAotICAgIHNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcyhzdGF0ZSwgcmVzdWx0KTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGNvbnN0IE1h
dGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KFN0YXRlJiBzdGF0ZSwgY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1
ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIC8vIEluIHNvbWUgY2Fz
ZXMgd2UgbWF5IGVuZCB1cCBsb29raW5nIHVwIHN0eWxlIGZvciByYW5kb20gZWxlbWVudHMgaW4g
dGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2ZSB0cmVlIHJlc29sdmUuCiAgICAgLy8gQW5jZXN0b3Ig
aWRlbnRpZmllciBmaWx0ZXIgd29uJ3QgYmUgdXAtdG8tZGF0ZSBpbiB0aGF0IGNhc2UgYW5kIHdl
IGNhbid0IHVzZSB0aGUgZmFzdCBwYXRoLgogICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1f
c2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoc3RhdGUucGFyZW50Tm9kZSgp
KSAmJiBtYXRjaFJlcXVlc3QuYmVoYXZpb3JBdEJvdW5kYXJ5ID09IFNlbGVjdG9yQ2hlY2tlcjo6
RG9lc05vdENyb3NzQm91bmRhcnk7CkBAIC02ODQsNyArNjgzLDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiog
cnVsZXMsIGMKICAgICAgICAgU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwogICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwogICAg
ICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgICAgIGlmIChydWxl
TWF0Y2hlcyhydWxlRGF0YSwgbWF0Y2hSZXF1ZXN0LnNjb3BlLCBkeW5hbWljUHNldWRvLCBtYXRj
aFJlcXVlc3QuYmVoYXZpb3JBdEJvdW5kYXJ5KSkgeworICAgICAgICBpZiAocnVsZU1hdGNoZXMo
c3RhdGUsIHJ1bGVEYXRhLCBtYXRjaFJlcXVlc3Quc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIG1hdGNo
UmVxdWVzdC5iZWhhdmlvckF0Qm91bmRhcnkpKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVs
ZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1k
ZWJ1ZyBtb2RlLgogICAgICAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGll
cyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKICAgICAgICAgICAgIGlmICghcHJvcGVydGllcyB8fCAo
cHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFtYXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMp
KSB7CkBAIC03MTIsNyArNzExLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAg
ICAgICAgICAgICAgcnVsZVJhbmdlLmZpcnN0UnVsZUluZGV4ID0gcnVsZVJhbmdlLmxhc3RSdWxl
SW5kZXg7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9m
IG1hdGNoZWQgcnVsZXMuCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRNYXRjaGVkUnVsZSgm
cnVsZURhdGEpOworICAgICAgICAgICAgICAgIHN0YXRlLmFkZE1hdGNoZWRSdWxlKCZydWxlRGF0
YSk7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1
bGUoY29va2llLCB0cnVlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KQEAgLTcyOCwzMSArNzI3LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUnVsZXMo
Y29uc3QgUnVsZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0YSogcjIpCiAgICAgcmV0dXJuIChzcGVj
aWZpY2l0eTEgPT0gc3BlY2lmaWNpdHkyKSA/IHIxLT5wb3NpdGlvbigpIDwgcjItPnBvc2l0aW9u
KCkgOiBzcGVjaWZpY2l0eTEgPCBzcGVjaWZpY2l0eTI7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZl
cjo6c29ydE1hdGNoZWRSdWxlcygpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRNYXRjaGVkUnVs
ZXMoU3RhdGUmIHN0YXRlKQogewotICAgIHN0ZDo6c29ydChtX3N0YXRlLm1hdGNoZWRSdWxlcygp
LmJlZ2luKCksIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuZW5kKCksIGNvbXBhcmVSdWxlcyk7Cisg
ICAgc3RkOjpzb3J0KHN0YXRlLm1hdGNoZWRSdWxlcygpLmJlZ2luKCksIHN0YXRlLm1hdGNoZWRS
dWxlcygpLmVuZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRp
ZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcykKIHsKLSAgICBtYXRj
aFVBUnVsZXMocmVzdWx0KTsKKyAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiAKICAg
ICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KICAgICBpZiAobV9tYXRjaEF1dGhv
ckFuZFVzZXJTdHlsZXMpCi0gICAgICAgIG1hdGNoVXNlclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwor
ICAgICAgICBtYXRjaFVzZXJSdWxlcyhzdGF0ZSwgcmVzdWx0LCBmYWxzZSk7CiAKICAgICAvLyBO
b3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25h
bCBhdHRyaWJ1dGVzIG1hcHBlZCBmcm9tIEhUTUwuCi0gICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxl
bWVudCgpKSB7Ci0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0
YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAg
aWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9w
ZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpKTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQg
ZGVjbGFyYXRpb25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFu
IGFkZGl0aW9uYWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8g
YWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9u
IHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0
eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlvbmFs
UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9uYWxQcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAotICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVt
ZW50KCktPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVu
dCgpLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAg
ICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0YXRl
LnN0eWxlZEVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlz
QXV0byk7CisgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxF
bGVtZW50KHN0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRv
QXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAgICAg
ICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlvbiA9PSBMVFIgPyBs
ZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOwogICAg
ICAgICB9CkBAIC03NjAsMjEgKzc1OSwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxs
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAg
IAogICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5leHQuCiAgICAgaWYg
KG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJl
c3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHN0YXRlLCByZXN1bHQsIGZh
bHNlKTsKIAogICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KLSAg
ICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50
KCkgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCkpIHsKKyAgICBpZiAo
bV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgc3RhdGUuc3R5bGVkRWxlbWVudCgpICYmIHN0
YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKSkgewogICAgICAgICAvLyBJbmxpbmUg
c3R5bGUgaXMgaW1tdXRhYmxlIGFzIGxvbmcgYXMgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4K
ICAgICAgICAgLy8gRklYTUU6IE1lZGlhIGNvbnRyb2wgc2hhZG93IHRyZWVzIHNlZW0gdG8gaGF2
ZSBwcm9ibGVtcyB3aXRoIGNhY2hpbmcuCi0gICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hl
YWJsZSA9ICFtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKS0+aXNNdXRhYmxl
KCkgJiYgIW1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0luU2hhZG93VHJlZSgpOworICAgICAg
ICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5p
bmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0lu
U2hhZG93VHJlZSgpOwogICAgICAgICAvLyBGSVhNRTogQ29uc3RpZnkuCi0gICAgICAgIGFkZEVs
ZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5s
aW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CisgICAgICAgIGFkZEVsZW1lbnRT
dHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxl
KCksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOwogICAgIH0KIAogI2lmIEVOQUJMRShTVkcpCiAg
ICAgLy8gTm93IGNoZWNrIFNNSUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0eWxlLgotICAgIGlmIChp
bmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9z
dGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxl
bWVudCgpKQotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGlj
X2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlM
U3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICovKTsKKyAgICBpZiAoaW5j
bHVkZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIHN0YXRl
LnN0eWxlZEVsZW1lbnQoKSAmJiBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgp
KQorICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudCo+KHN0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmFuaW1hdGVkU01JTFN0eWxlUHJv
cGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShpbmNsdWRlU01JTFByb3BlcnRpZXMpOwogI2VuZGlmCkBAIC03OTYsMTQgKzc5NSwxMiBA
QCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aW5pdEVsZW1lbnQoRWxlbWVudCog
ZSkKICAgICBtX2VsZW1lbnRMaW5rU3RhdGUgPSBlID8gZS0+ZG9jdW1lbnQoKS0+dmlzaXRlZExp
bmtTdGF0ZSgpLT5kZXRlcm1pbmVMaW5rU3RhdGUoZSkgOiBOb3RJbnNpZGVMaW5rOwogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudChFbGVtZW50KiBlKQoraW5saW5l
IHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoU3RhdGUmIHN0YXRlLCBFbGVtZW50KiBl
KQogewotICAgIGlmIChtX3N0YXRlLmVsZW1lbnQoKSAhPSBlKSB7Ci0gICAgICAgIG1fc3RhdGUu
aW5pdEVsZW1lbnQoZSk7Ci0gICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9j
dW1lbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlv
blNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKLSAgICAgICAgICAgIGUtPmRvY3VtZW50KCkt
PnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwotICAgICAgICB9Cisg
ICAgc3RhdGUuaW5pdEVsZW1lbnQoZSk7CisgICAgaWYgKGUgJiYgZSA9PSBlLT5kb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKSkgeworICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXREaXJlY3Rp
b25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7CisgICAgICAgIGUtPmRvY3VtZW50KCktPnNl
dFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwogICAgIH0KIH0KIApAQCAt
ODk1LDI2ICs4OTIsMjIgQEAgTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChF
bGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW4KICAgICByZXR1cm4gMDsK
IH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVs
ZVNldChSdWxlU2V0KiBydWxlU2V0KQorYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzUnVsZVNldChFbGVtZW50KiBlLCBSdWxlU2V0KiBydWxlU2V0KQogewog
ICAgIGlmICghcnVsZVNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RhdGUubWF0
Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKIAotICAgIG1fc3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNr
ZXI6OlNoYXJpbmdSdWxlcyk7CisgICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQoKSk7CisgICAgc3Rh
dGUuaW5pdEVsZW1lbnQoZSk7CisgICAgc3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNo
YXJpbmdSdWxlcyk7CiAgICAgaW50IGZpcnN0UnVsZUluZGV4ID0gLTEsIGxhc3RSdWxlSW5kZXgg
PSAtMTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlKGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUlu
ZGV4KTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocnVsZVNldCksIHJ1
bGVSYW5nZSk7Ci0gICAgbV9zdGF0ZS5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5n
U3R5bGUpOwotICAgIGlmIChtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgTWF0Y2hSZXF1
ZXN0KHJ1bGVTZXQpLCBydWxlUmFuZ2UpOworICAgIHJldHVybiAhc3RhdGUubWF0Y2hlZFJ1bGVz
KCkuaXNFbXB0eSgpOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRo
Q29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVy
OjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woY29uc3QgU3RhdGUmIHN0YXRlLCBTdHlsZWRFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAogewotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7
CiAgICAgSFRNTElucHV0RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5w
dXRFbGVtZW50KCk7CiAgICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBz
dGF0ZS5lbGVtZW50KCktPnRvSW5wdXRFbGVtZW50KCk7CiAKQEAgLTk2OCw5ICs5NjEsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVu
dCkKICAgICByZXR1cm4gZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQo
ZWxlbWVudCktPmhhc0RpcmVjdGlvbkF1dG8oKTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpz
aGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxl
ZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OnNo
YXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3Qg
U3RhdGUmIHN0YXRlLCBTdHlsZWRFbGVtZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25zdAogewot
ICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgaWYgKHN0YXRlLmVsZW1lbnQo
KS0+ZWxlbWVudERhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5lbGVtZW50RGF0YSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmli
dXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJp
YnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQpAQCAtMTAxMCwxMCArMTAwMiw5IEBAIGJvb2wgU3R5
bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0
cmlidXRlcyhTdHlsZWRFCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZl
cjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0
Citib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChjb25zdCBTdGF0
ZSYgc3RhdGUsIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICBjb25zdCBTdGF0ZSYgc3Rh
dGUgPSBtX3N0YXRlOwogCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTA0Myw3ICsxMDM0LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0
aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRl
bnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGVsZW1lbnQpKQorICAgIGlmICghc2hhcmlu
Z0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhzdGF0ZSwgZWxl
bWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25h
bFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5h
ZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTA2NCw3ICsxMDU1LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0
eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoaXND
b250cm9sICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdp
dGhDb250cm9sKGVsZW1lbnQpKQorICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVX
aXRoQ29udHJvbChzdGF0ZSwgZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChzdHlsZS0+dHJhbnNpdGlvbnMoKSB8fCBzdHlsZS0+YW5pbWF0aW9ucygpKQpAQCAtMTEw
NCwxMiArMTA5NSwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxl
bWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1pbmxpbmUgU3R5bGVkRWxlbWVudCogU3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHls
ZVNoYXJpbmcoTm9kZSogbm9kZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAoraW5saW5lIFN0eWxl
ZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvbnN0
IFN0YXRlJiBzdGF0ZSwgTm9kZSogbm9kZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAogewogICAg
IGZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAg
aWYgKCFub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KHN0YXRpY19jYXN0PFN0eWxlZEVsZW1l
bnQqPihub2RlKSkpCisgICAgICAgIGlmIChjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoc3RhdGUs
IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKSkpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgaWYgKGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0xMTE3LDkgKzExMDgsOCBAQCBpbmxpbmUgU3R5bGVkRWxlbWVudCog
U3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSogbm9kZSwgdW5z
aQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7CiB9CiAKLVJl
bmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCitSZW5kZXJTdHls
ZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoU3RhdGUmIHN0YXRlKQogewotICAg
IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgaWYgKCFzdGF0ZS5zdHlsZWRFbGVtZW50KCkg
fHwgIXN0YXRlLnBhcmVudFN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMTUyLDcg
KzExNDIsNyBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUo
KQogICAgIFN0eWxlZEVsZW1lbnQqIHNoYXJlRWxlbWVudCA9IDA7CiAgICAgTm9kZSogY291c2lu
TGlzdCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hp
bGUgKGNvdXNpbkxpc3QpIHsKLSAgICAgICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JT
dHlsZVNoYXJpbmcoY291c2luTGlzdCwgY291bnQpOworICAgICAgICBzaGFyZUVsZW1lbnQgPSBm
aW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhzdGF0ZSwgY291c2luTGlzdCwgY291bnQpOwogICAg
ICAgICBpZiAoc2hhcmVFbGVtZW50KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNvdXNp
bkxpc3QgPSBsb2NhdGVDb3VzaW5MaXN0KGNvdXNpbkxpc3QtPnBhcmVudEVsZW1lbnQoKSwgdmlz
aXRlZE5vZGVDb3VudCk7CkBAIC0xMTYzLDEzICsxMTUzLDEzIEBAIFJlbmRlclN0eWxlKiBTdHls
ZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
Ly8gQ2FuJ3Qgc2hhcmUgaWYgc2libGluZyBydWxlcyBhcHBseS4gVGhpcyBpcyBjaGVja2VkIGF0
IHRoZSBlbmQgYXMgaXQgc2hvdWxkIHJhcmVseSBmYWlsLgotICAgIGlmIChzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3J1bGVTZXRzLnNpYmxpbmcoKSkpCisgICAgaWYgKHN0
eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KHN0YXRlLmVsZW1lbnQoKSwgbV9ydWxl
U2V0cy5zaWJsaW5nKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBDYW4ndCBzaGFyZSBp
ZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1h
dGNoZXNSdWxlU2V0KG1fcnVsZVNldHMudW5jb21tb25BdHRyaWJ1dGUoKSkpCisgICAgaWYgKHN0
eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KHN0YXRlLmVsZW1lbnQoKSwgbV9ydWxl
U2V0cy51bmNvbW1vbkF0dHJpYnV0ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gQ2Fu
J3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxlcyBhcHBseS4KLSAgICBpZiAoc3R5bGVTaGFyaW5nQ2Fu
ZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpKQorICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVN
YXRjaGVzSG9zdFJ1bGVzKHN0YXRlKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gVHJhY2tp
bmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMg
bWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KICAgICBpZiAocGFy
ZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50KCktPnBhcmVudEVsZW1lbnQo
KSkpCkBAIC0xMTc3LDcgKzExNjcsNyBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9j
YXRlU2hhcmVkU3R5bGUoKQogICAgIHJldHVybiBzaGFyZUVsZW1lbnQtPnJlbmRlclN0eWxlKCk7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1
bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNo
UmVzdWx0JiByZXN1bHQpCiB7CiAgICAgTWF0Y2hpbmdVQVJ1bGVzU2NvcGUgc2NvcGU7CiAKQEAg
LTExODYsMTUgKzExNzYsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCkKICAgICAgICAgcmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CiAg
ICAgUnVsZVNldCogdXNlckFnZW50U3R5bGVTaGVldCA9IG1fbWVkaXVtLT5tZWRpYVR5cGVNYXRj
aFNwZWNpZmljKCJwcmludCIpCiAgICAgICAgID8gQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZh
dWx0UHJpbnRTdHlsZSA6IENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFN0eWxlOwotICAg
IG1hdGNoVUFSdWxlcyhyZXN1bHQsIHVzZXJBZ2VudFN0eWxlU2hlZXQpOworICAgIG1hdGNoVUFS
dWxlcyhzdGF0ZSwgcmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKIAogICAgIC8vIEluIHF1
aXJrcyBtb2RlLCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSBxdWlya3MgdXNlciBhZ2VudCBzaGVl
dC4KICAgICBpZiAoZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCi0gICAgICAgIG1hdGNoVUFS
dWxlcyhyZXN1bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFF1aXJrc1N0eWxlKTsK
KyAgICAgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCByZXN1bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0
czo6ZGVmYXVsdFF1aXJrc1N0eWxlKTsKIAogICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBz
b3VyY2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSks
IHRoZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCiAg
ICAgaWYgKGRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKQotICAgICAgICBtYXRjaFVBUnVsZXMo
cmVzdWx0LCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OnZpZXdTb3VyY2VTdHlsZSgpKTsKKyAgICAg
ICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCByZXN1bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6dmll
d1NvdXJjZVN0eWxlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRTdHlsZXNGb3JQYWdpbmF0aW9u
TW9kZShQYWdpbmF0aW9uOjpNb2RlIHBhZ2luYXRpb25Nb2RlLCBSZW5kZXJTdHlsZSogc3R5bGUp
CkBAIC0xMzkyLDI1ICsxMzgyLDI4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAgICAgICAg
IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwogICAgIH0KIAotICAgIFN0YXRlJiBzdGF0
ZSA9IG1fc3RhdGU7Ci0gICAgaW5pdEVsZW1lbnQoZWxlbWVudCk7CisgICAgU3RhdGUgc3RhdGUo
ZG9jdW1lbnQoKSk7CisgICAgaW5pdEVsZW1lbnQoc3RhdGUsIGVsZW1lbnQpOwogICAgIHN0YXRl
LmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZWxlbWVudCwgZGVmYXVsdFBhcmVudCwg
Tk9QU0VVRE8sIHJlZ2lvbkZvclN0eWxpbmcpOwogICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0g
QWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgp
KSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxvY2F0ZVNoYXJlZFN0eWxl
KCk7CisgICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxvY2F0ZVNoYXJlZFN0eWxl
KHN0YXRlKTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAgICAgcmV0dXJuIHNo
YXJlZFN0eWxlOwogICAgIH0KIAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY2xvbmVGb3JQYXJl
bnQ7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZTsKIAogICAgIGlmIChzdGF0ZS5wYXJl
bnRTdHlsZSgpKSB7Ci0gICAgICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUo
KSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxl
KCksIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0Jv
dW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOworICAgICAgICBzdHls
ZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHN0
YXRlLnBhcmVudFN0eWxlKCksIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0
eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXRlLnNldFN0eWxlKGRlZmF1bHRTdHlsZUZvckVs
ZW1lbnQoKSk7Ci0gICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0
YXRlLnN0eWxlKCkpOworICAgICAgICBzdHlsZSA9IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsK
KyAgICAgICAgY2xvbmVGb3JQYXJlbnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3R5bGUuZ2V0KCkp
OwogICAgICAgICBzdGF0ZS5zZXRQYXJlbnRTdHlsZShjbG9uZUZvclBhcmVudC5nZXQoKSk7CiAg
ICAgfQorICAgIHN0YXRlLnNldFN0eWxlKHN0eWxlKTsKKwogICAgIC8vIGNvbnRlbnRlZGl0YWJs
ZSBhdHRyaWJ1dGUgKGltcGxlbWVudGVkIGJ5IC13ZWJraXQtdXNlci1tb2RpZnkpIHNob3VsZAog
ICAgIC8vIGJlIHByb3BhZ2F0ZWQgZnJvbSBzaGFkb3cgaG9zdCB0byBkaXN0cmlidXRlZCBub2Rl
LgogICAgIGlmIChzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoKSkgewpAQCAtMTQz
OCwxNiArMTQzMSwxNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogCiAgICAgTWF0Y2hSZXN1
bHQgbWF0Y2hSZXN1bHQ7CiAgICAgaWYgKG1hdGNoaW5nQmVoYXZpb3IgPT0gTWF0Y2hPbmx5VXNl
ckFnZW50UnVsZXMpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhtYXRjaFJlc3VsdCk7CisgICAgICAg
IG1hdGNoVUFSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQpOwogICAgIGVsc2UKLSAgICAgICAgbWF0
Y2hBbGxSdWxlcyhtYXRjaFJlc3VsdCwgbWF0Y2hpbmdCZWhhdmlvciAhPSBNYXRjaEFsbFJ1bGVz
RXhjbHVkaW5nU01JTCk7CisgICAgICAgIG1hdGNoQWxsUnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0
LCBtYXRjaGluZ0JlaGF2aW9yICE9IE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKTsKIAotICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQpOworICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXMoc3RhdGUsIG1hdGNoUmVzdWx0LCBlbGVtZW50KTsKIAogICAgIC8v
IENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25z
IChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxl
KCksIHN0YXRlLnBhcmVudFN0eWxlKCksIGVsZW1lbnQpOwotCi0gICAgc3RhdGUuY2xlYXIoKTsg
Ly8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgorICAgIGFkanVzdFJlbmRlclN0eWxl
KHN0YXRlLCBzdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUoKSwgZWxlbWVudCk7CiAKICAg
ICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKQEAgLTE0NTUsNDMgKzE0
NDYsNDAgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JF
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKICAgICByZXR1cm4gc3RhdGUudGFrZVN0
eWxlKCk7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxl
Rm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVL
ZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCitQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKFN0YXRlJiBz
dGF0ZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVLZXlmcmFt
ZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCiB7CiAgICAgTWF0Y2hS
ZXN1bHQgcmVzdWx0OwogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQogICAgICAgICBh
ZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOwogCi0g
ICAgQVNTRVJUKCFtX3N0YXRlLnN0eWxlKCkpOwotCi0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0
ZTsKLQogICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKLSAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJT
dHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKSk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHls
ZSA9IFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUpOworICAgIHN0YXRlLnNldFN0eWxl
KHN0eWxlKTsKICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAKICAgICAvLyBXZSBk
b24ndCBuZWVkIHRvIGJvdGhlciB3aXRoICFpbXBvcnRhbnQuIFNpbmNlIHRoZXJlIGlzIG9ubHkg
ZXZlciBvbmUKICAgICAvLyBkZWNsLCB0aGVyZSdzIG5vdGhpbmcgdG8gb3ZlcnJpZGUuIFNvIGp1
c3QgYWRkIHRoZSBmaXJzdCBwcm9wZXJ0aWVzLgogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZh
bHNlOwogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAgICAg
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwg
cmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGlu
aGVyaXRlZE9ubHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFk
IGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KHN0
YXRlKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRl
Y2lkZWQgb24gdGhlIGZvbnQtc2l6ZQogICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkK
LSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVI
ZWlnaHRWYWx1ZSgpKTsKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlM
aW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKICAgICAvLyBOb3cgZG8gcmVz
dCBvZiB0aGUgcHJvcGVydGllcy4KICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAg
ICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHJlc3Vs
dCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0
ZWRPbmx5KTsKKyAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3Bl
cnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGly
dGllZCBieSBvbmUgb2YgdGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywKICAgICAvLyBnbyBh
aGVhZCBhbmQgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUuCi0gICAgdXBkYXRlRm9udCgpOworICAg
IHVwZGF0ZUZvbnQoc3RhdGUpOwogCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVm
ZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAg
bG9hZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogICAgIAogICAgIC8vIEFkZCBhbGwgdGhlIGFu
aW1hdGluZyBwcm9wZXJ0aWVzIHRvIHRoZSBrZXlmcmFtZS4KICAgICBpZiAoY29uc3QgU3R5bGVQ
cm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiA9IGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpIHsK
QEAgLTE1MjgsMTUgKzE1MTYsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxl
c0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwKIAogICAgIC8v
IENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxlIGZvciBlYWNoIGtleWZyYW1lCiAgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+JiBrZXlmcmFtZXMgPSBrZXlmcmFt
ZXNSdWxlLT5rZXlmcmFtZXMoKTsKKyAgICBTdGF0ZSBzdGF0ZShkb2N1bWVudCgpKTsKKyAgICBp
bml0RWxlbWVudChzdGF0ZSwgZSk7CisgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1
bWVudCgpLCBlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIC8vIEFwcGx5IHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUu
IFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxl
bWVudAotICAgICAgICBpbml0RWxlbWVudChlKTsKLSAgICAgICAgbV9zdGF0ZS5pbml0Rm9yU3R5
bGVSZXNvbHZlKGRvY3VtZW50KCksIGUpOwotCiAgICAgICAgIGNvbnN0IFN0eWxlS2V5ZnJhbWUq
IGtleWZyYW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwogCiAgICAgICAgIEtleWZyYW1lVmFsdWUg
a2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHls
ZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwga2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAg
ICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVt
ZW50U3R5bGUsIGtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAKICAgICAgICAgLy8gQWRkIHRo
aXMga2V5ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRpbWVzCiAgICAgICAg
IFZlY3RvcjxmbG9hdD4ga2V5czsKQEAgLTE1NTYsNyArMTU0NCw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVy
U3R5bGUqIGVsCiAgICAgICAgICAgICB6ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIw
JSIpOwogICAgICAgICB9CiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAw
KTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1l
bnRTdHlsZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBr
ZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHls
ZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwogICAgICAgICBsaXN0Lmlu
c2VydChrZXlmcmFtZVZhbHVlKTsKICAgICB9CiAKQEAgLTE1NjgsNyArMTU1Niw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29u
c3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgICAgICAgICBodW5kcmVkUGVyY2VudEtleWZyYW1lLT5z
ZXRLZXlUZXh0KCIxMDAlIik7CiAgICAgICAgIH0KICAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlm
cmFtZVZhbHVlKDEsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9y
S2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZh
bHVlKSk7CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShz
dGF0ZSwgZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVl
KSk7CiAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOwogICAgIH0KIH0KQEAgLTE1
NzksMjQgKzE1NjcsMjIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6
cHNldWRvU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIGNvbnN0IFAKICAgICBpZiAoIWUpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLQotICAgIGlu
aXRFbGVtZW50KGUpOwotCi0gICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgp
LCBlLCBwYXJlbnRTdHlsZSwgcHNldWRvU3R5bGVSZXF1ZXN0KTsKKyAgICBTdGF0ZSBzdGF0ZShk
b2N1bWVudCgpKTsKKyAgICBpbml0RWxlbWVudChzdGF0ZSwgZSk7CisgICAgc3RhdGUuaW5pdEZv
clN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCBwYXJlbnRTdHlsZSk7CiAgICAgc3RhdGUuc2V0
U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKLSAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0
RnJvbShtX3N0YXRlLnBhcmVudFN0eWxlKCkpOworICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRG
cm9tKHN0YXRlLnBhcmVudFN0eWxlKCkpOwogCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBz
ZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMs
IGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZwogICAgIC8vIHRob3NlIHJ1bGVzLgogCiAgICAgLy8g
Q2hlY2sgVUEsIHVzZXIgYW5kIGF1dGhvciBydWxlcy4KICAgICBNYXRjaFJlc3VsdCBtYXRjaFJl
c3VsdDsKLSAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOworICAgIG1hdGNoVUFSdWxlcyhz
dGF0ZSwgbWF0Y2hSZXN1bHQpOwogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
KSB7Ci0gICAgICAgIG1hdGNoVXNlclJ1bGVzKG1hdGNoUmVzdWx0LCBmYWxzZSk7Ci0gICAgICAg
IG1hdGNoQXV0aG9yUnVsZXMobWF0Y2hSZXN1bHQsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hVc2Vy
UnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVs
ZXMoc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKG1hdGNoUmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKQEAgLTE2MDQsMTMgKzE1OTAsMTMgQEAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVt
ZW50KEVsZW1lbnQqIGUsIGNvbnN0IFAKIAogICAgIHN0YXRlLnN0eWxlKCktPnNldFN0eWxlVHlw
ZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhtYXRjaFJlc3VsdCwgZSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwg
bWF0Y2hSZXN1bHQsIGUpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRp
c3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRq
dXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpLCAwKTsK
KyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50
U3R5bGUoKSwgMCk7CiAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2Vk
IGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBsb2FkUGVu
ZGluZ1Jlc291cmNlcyhzdGF0ZSk7CiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJl
c29sdmVyKCk7CiAKQEAgLTE2MjAsMTIgKzE2MDYsMTMgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIGNvbnN0
IFAKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdl
KGludCBwYWdlSW5kZXgpCiB7Ci0gICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3Vt
ZW50KCksIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0
eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KKyAgICBTdGF0ZSBzdGF0ZShk
b2N1bWVudCgpKTsKKyAgICBzdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwg
YmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KIAotICAgIG1fc3RhdGUuc2V0U3R5bGUoUmVu
ZGVyU3R5bGU6OmNyZWF0ZSgpKTsKLSAgICBtX3N0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKG1f
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHls
ZTo6Y3JlYXRlKCkpOworICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUoKSk7CiAKLSAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVmdFBhZ2UocGFn
ZUluZGV4KTsKKyAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVmdFBhZ2Uoc3RhdGUsIHBhZ2VJ
bmRleCk7CiAgICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsK
ICAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7CiAgICAgCkBAIC0x
NjM0LDQyICsxNjIxLDQzIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwg
bV9ydWxlU2V0cy51c2VyU3R5bGUoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICAvLyBP
bmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBh
cyBwZXIgdGhlIEhUTUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3J1bGVT
ZXRzLmF1dGhvclN0eWxlKCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbV9zdGF0ZS5z
ZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CisgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwog
ICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVT
KQotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4ocmVzdWx0
LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRl
ZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4o
c3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxLCBpbmhlcml0ZWRPbmx5KTsKICNlbmRpZgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
SGlnaFByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAs
IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAog
ICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5v
dy4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CiAKICAgICAvLyBM
aW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250
LXNpemUuCi0gICAgaWYgKG1fc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCi0gICAgICAgIGFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSgp
KTsKKyAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCisgICAgICAgIGFwcGx5UHJvcGVy
dHkoc3RhdGUsIENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkp
OwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHJl
c3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhl
cml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVy
dGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3Vy
Y2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygp
OworICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKHN0YXRlKTsKIAogICAgIGRvY3VtZW50KCktPmRp
ZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgot
ICAgIHJldHVybiBtX3N0YXRlLnRha2VTdHlsZSgpOworICAgIHJldHVybiBzdGF0ZS50YWtlU3R5
bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVs
dFN0eWxlRm9yRWxlbWVudCgpCiB7Ci0gICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6
Y3JlYXRlKCkpOworICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOworICAgIHN0YXRlLnNldFN0
eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CiAgICAgLy8gTWFrZSBzdXJlIG91ciBmb250cyBh
cmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVudCBz
dHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpKSB7
Ci0gICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworICAgICAgICBpbml0aWFs
aXplRm9udFN0eWxlKHN0YXRlLCBzZXR0aW5ncyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPmZv
bnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAgIH0gZWxzZQotICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPmZvbnQo
KS51cGRhdGUoMCk7CiAKLSAgICByZXR1cm4gbV9zdGF0ZS50YWtlU3R5bGUoKTsKKyAgICByZXR1
cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlRm9yVGV4dChUZXh0KiB0ZXh0Tm9kZSkKQEAgLTE3NjQsNyArMTc1Miw3
IEBAIHN0YXRpYyBib29sIGlzRGlzcGxheUZsZXhpYmxlQm94KEVEaXNwbGF5IGRpc3BsYXkpCiAg
ICAgcmV0dXJuIGRpc3BsYXkgPT0gRkxFWCB8fCBkaXNwbGF5ID09IElOTElORV9GTEVYOwogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50ICplKQordm9pZCBTdHlsZVJlc29s
dmVyOjphZGp1c3RSZW5kZXJTdHlsZShTdGF0ZSYgc3RhdGUsIFJlbmRlclN0eWxlKiBzdHlsZSwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50ICplKQogewogICAgIEFTU0VSVChwYXJl
bnRTdHlsZSk7CiAKQEAgLTE5NTcsNyArMTk0NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRq
dXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
CiAKICAgICAvLyBMZXQgdGhlIHRoZW1lIGFsc28gaGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0
aGUgc3R5bGUuCiAgICAgaWYgKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRl
clRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywgc3R5bGUsIGUsIG1fc3Rh
dGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3RhdGUuYm9yZGVyRGF0YSgpLCBtX3N0YXRlLmJhY2tn
cm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICBSZW5kZXJU
aGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBzdGF0ZS5o
YXNVQUFwcGVhcmFuY2UoKSwgc3RhdGUuYm9yZGVyRGF0YSgpLCBzdGF0ZS5iYWNrZ3JvdW5kRGF0
YSgpLCBzdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0
LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgogICAgIGlmIChz
dHlsZS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKQEAgLTIwMzgsMTggKzIwMjYsMTgg
QEAgc3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShSZW5kZXJTdHlsZSogc3R5
bGUpCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQordm9pZCBTdHlsZVJlc29sdmVy
Ojp1cGRhdGVGb250KFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1fc3RhdGUuZm9udERpcnR5
KCkpCisgICAgaWYgKCFzdGF0ZS5mb250RGlydHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3Rh
dGUuc3R5bGUoKTsKLSAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3Rh
dGUucGFyZW50U3R5bGUoKSk7Ci0gICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0eWxlLCBtX3N0YXRl
LnBhcmVudFN0eWxlKCkpOworICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1c3Qoc3RhdGUpOworICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0YXRlLnN0eWxlKCk7CisgICAgY2hlY2tGb3JHZW5lcmlj
RmFtaWx5Q2hhbmdlKHN0YXRlLCBzdHlsZSwgc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgY2hl
Y2tGb3Jab29tQ2hhbmdlKHN0YXRlLCBzdHlsZSwgc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAg
Y2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSk7CiAgICAgc3R5bGUtPmZvbnQoKS51cGRh
dGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fc3RhdGUuc2V0Rm9udERpcnR5KGZhbHNlKTsKKyAg
ICBzdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwogfQogCiBQYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCB1bnNpZ25l
ZCBydWxlc1RvSW5jbHVkZSkKQEAgLTIwNjIsMzkgKzIwNTAsMzQgQEAgUGFzc1JlZlB0cjxDU1NS
dWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVu
dCogZSwgUHMKICAgICBpZiAoIWUgfHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xv
YWRlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fc3RhdGUuc2V0TW9kZShTZWxlY3Rv
ckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CisgICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQoKSk7
CisgICAgc3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAK
LSAgICBpbml0RWxlbWVudChlKTsKLSAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9j
dW1lbnQoKSwgZSwgMCwgcHNldWRvSWQpOworICAgIGluaXRFbGVtZW50KHN0YXRlLCBlKTsKKyAg
ICBzdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUsIDAsIHBzZXVkb0lkKTsK
IAogICAgIE1hdGNoUmVzdWx0IGR1bW15OwogICAgIGlmIChydWxlc1RvSW5jbHVkZSAmIFVBQW5k
VXNlckNTU1J1bGVzKSB7CiAgICAgICAgIC8vIEZpcnN0IHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhl
IHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgICAgIG1hdGNoVUFSdWxlcyhkdW1teSk7CisgICAgICAg
IG1hdGNoVUFSdWxlcyhzdGF0ZSwgZHVtbXkpOwogCiAgICAgICAgIC8vIE5vdyB3ZSBjaGVjayB1
c2VyIHNoZWV0IHJ1bGVzLgogICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMp
Ci0gICAgICAgICAgICBtYXRjaFVzZXJSdWxlcyhkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0
eUNTU1J1bGVzKTsKKyAgICAgICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0YXRlLCBkdW1teSwgcnVs
ZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKICAgICB9CiAKICAgICBpZiAobV9tYXRjaEF1
dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7
Ci0gICAgICAgIG1fc3RhdGUuc2V0U2FtZU9yaWdpbk9ubHkoIShydWxlc1RvSW5jbHVkZSAmIENy
b3NzT3JpZ2luQ1NTUnVsZXMpKTsKKyAgICAgICAgc3RhdGUuc2V0U2FtZU9yaWdpbk9ubHkoIShy
dWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsKIAogICAgICAgICAvLyBDaGVj
ayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KLSAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhk
dW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKLQotICAgICAgICBtX3N0YXRl
LnNldFNhbWVPcmlnaW5Pbmx5KGZhbHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0
ZSwgZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CiAgICAgfQogCi0gICAg
bV9zdGF0ZS5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotCi0gICAg
cmV0dXJuIG1fc3RhdGUudGFrZVJ1bGVMaXN0KCk7CisgICAgcmV0dXJuIHN0YXRlLnRha2VSdWxl
TGlzdCgpOwogfQogCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhjb25z
dCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9J
ZCYgZHluYW1pY1BzZXVkbywgU2VsZWN0b3JDaGVja2VyOjpCZWhhdmlvckF0Qm91bmRhcnkgYmVo
YXZpb3JBdEJvdW5kYXJ5KQoraW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNoZXMo
Y29uc3QgU3RhdGUmIHN0YXRlLCBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgU2VsZWN0b3JDaGVja2Vy
OjpCZWhhdmlvckF0Qm91bmRhcnkgYmVoYXZpb3JBdEJvdW5kYXJ5KQogewotICAgIFN0YXRlJiBz
dGF0ZSA9IG1fc3RhdGU7Ci0KICAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVj
dG9yKCkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMgbm90IGluY2x1
ZGUgYW55IHBzZXVkbyBlbGVtZW50cy4KICAgICAgICAgaWYgKHN0YXRlLnBzZXVkb1N0eWxlUmVx
dWVzdCgpLnBzZXVkb0lkICE9IE5PUFNFVURPKQpAQCAtMjEwNSw5ICsyMDg4LDEwIEBAIGlubGlu
ZSBib29sIFN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0
YSwgY29uc3QgQ29udGFpbmVyCiAgICAgICAgICAgICBpZiAoIXJ1bGVEYXRhLmhhc011bHRpcGFy
dFNlbGVjdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRh
ZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKHN0YXRlLmVsZW1lbnQoKSwgcnVsZURh
dGEuc2VsZWN0b3IoKS0+dGFnUU5hbWUoKSkpCisgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7CisgICAgICAgIGlmIChzZWxlY3Rvci0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnICYmICFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMo
c3RhdGUuZWxlbWVudCgpLCBzZWxlY3Rvci0+dGFnUU5hbWUoKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoIHNlbGVjdG9yQ2hlY2tl
ckZhc3RQYXRoKHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQoKSk7CisgICAgICAg
IFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoIHNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoKHNlbGVjdG9y
LCBzdGF0ZS5lbGVtZW50KCkpOwogICAgICAgICBpZiAoIXNlbGVjdG9yQ2hlY2tlckZhc3RQYXRo
Lm1hdGNoZXNSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcigpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC0yMTM2LDcgKzIxMjAsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNr
UmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZQog
ICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQo
KSwgbV9zdGF0ZS5tb2RlKCkpOworICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIo
ZG9jdW1lbnQoKSwgU2VsZWN0b3JDaGVja2VyOjpRdWVyeWluZ1J1bGVzKTsKICAgICBmb3IgKGNv
bnN0IENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMgPSBDU1NTZWxlY3Rvckxp
c3Q6Om5leHQocykpIHsKICAgICAgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5n
Q29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29udGV4dChzLCByZWdpb25FbGVtZW50LCBTZWxlY3Rv
ckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVkKTsKICAgICAgICAgUHNldWRvSWQgaWdub3Jl
RHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwpAQCAtMjE2MSw5ICsyMTQ1LDkgQEAgTGVuZ3RoIFN0
eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSwgUmUKIH0KIAogdGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6OlN0eWxlQXBwbGlj
YXRpb25QYXNzIHBhc3M+Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhjb25z
dCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJ
bXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHByb3Bl
cnR5V2hpdGVsaXN0VHlwZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKFN0
YXRlJiBzdGF0ZSwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxl
KiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFByb3BlcnR5V2hp
dGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCiB7Ci0gICAgQVNTRVJUKChwcm9wZXJ0
eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IG1fc3RhdGUucmVn
aW9uRm9yU3R5bGluZygpKTsKKyAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQ
cm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgc3RhdGUucmVnaW9uRm9yU3R5bGluZygpKTsKICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgcnVsZSwgdGhpcyk7CiAKICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlDb3VudCgpOwpA
QCAtMjE5MSw3ICsyMTc1LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMo
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWwKICAgICAgICAgY2Fz
ZSBWYXJpYWJsZURlZmluaXRpb25zOgogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJv
cGVydHlWYXJpYWJsZSA8IGZpcnN0Q1NTUHJvcGVydHksIENTU192YXJpYWJsZV9pc19iZWZvcmVf
Zmlyc3RfcHJvcGVydHkpOwogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5
VmFyaWFibGUpCi0gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1
cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgY3Vy
cmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
ICAgICAgICAgY2FzZSBIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzOgpAQCAtMjIwNCwyNiArMjE4OCwy
NSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3Bl
cnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogI2VuZGlmCiAgICAgICAgICAgICAvLyBnaXZl
IHNwZWNpYWwgcHJpb3JpdHkgdG8gZm9udC14eHgsIGNvbG9yIHByb3BlcnRpZXMsIGV0YwogICAg
ICAgICAgICAgaWYgKHByb3BlcnR5IDwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAg
ICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOworICAg
ICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGN1cnJlbnQuaWQoKSwgY3VycmVudC52
YWx1ZSgpKTsKICAgICAgICAgICAgIC8vIHdlIGFwcGx5IGxpbmUtaGVpZ2h0IGxhdGVyCiAgICAg
ICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoY3VycmVudC52YWx1ZSgpKTsK
KyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoY3VycmVudC52YWx1ZSgp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvd1ByaW9yaXR5UHJvcGVydGll
czoKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAg
ICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBjdXJyZW50LmlkKCksIGN1
cnJlbnQudmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRQcm9jZXNzUnVsZShjb29raWUpOwogfQogCiB0ZW1wbGF0ZSA8U3R5bGVSZXNv
bHZlcjo6U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wg
aXNJbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVk
T25seSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhTdGF0ZSYg
c3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbCBpc0ltcG9ydGFudCwg
aW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KQogewogICAg
IGlmIChzdGFydEluZGV4ID09IC0xKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdGF0ZSYgc3Rh
dGUgPSBtX3N0YXRlOwogICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgIT0gTm90
SW5zaWRlTGluaykgewogICAgICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJ
bmRleDsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hl
ZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXTsKQEAgLTIyMzIs
NyArMjIxNSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhj
b25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wKICAgICAgICAgICAgIHN0YXRlLnNl
dEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaExpbmspOwogICAgICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZShsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0
ZWQpOwogCi0gICAgICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRp
ZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9y
dGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPiht
YXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CisgICAgICAgICAgICBhcHBseVByb3Bl
cnRpZXM8cGFzcz4oc3RhdGUsIG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1h
dGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHksIHN0
YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFByb3BlcnRpZXMud2hpdGVs
aXN0VHlwZSkpOwogICAgICAgICB9CiAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSh0cnVlKTsKICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZShmYWxzZSk7CkBAIC0yMjQwLDcgKzIyMjMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0
LCBib29sCiAgICAgfQogICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4
OyArK2kpIHsKICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0
aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07Ci0gICAgICAgIGFwcGx5UHJv
cGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJl
c3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5
cGUpKTsKKyAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KHN0YXRlLCBtYXRjaGVkUHJvcGVy
dGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1w
b3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+
KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICB9CiB9CiAKQEAgLTIzNDAs
MTAgKzIzMjMsOSBAQCBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXND
YWNoZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBSZQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQordm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIEFT
U0VSVChlbGVtZW50KTsKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIHVuc2lnbmVk
IGNhY2hlSGFzaCA9IG1hdGNoUmVzdWx0LmlzQ2FjaGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9w
ZXJ0aWVzSGFzaChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5kYXRhKCksIG1hdGNoUmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkgOiAwOwogICAgIGJvb2wgYXBwbHlJbmhlcml0
ZWRPbmx5ID0gZmFsc2U7CiAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNh
Y2hlSXRlbSA9IDA7CkBAIC0yMzY3LDEwICsyMzQ5LDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNv
bnN0CiAKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICAvLyBGaXJzdCBhcHBseSBhbGwg
dmFyaWFibGUgZGVmaW5pdGlvbnMsIGFzIHRoZXkgbWF5IGJlIHVzZWQgZHVyaW5nIGFwcGxpY2F0
aW9uIG9mIGxhdGVyIHByb3BlcnRpZXMuCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJp
YWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxh
c3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBh
cHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVE
ZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVB
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7
CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwg
bWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJp
YWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBs
eUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZp
bml0aW9ucz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmly
c3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOwogI2VuZGlmCiAKICAgICAvLyBOb3cgd2UgaGF2ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVs
ZXMgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLiBXYWxrIHRoZSBydWxlcyBhbmQgYXBwbHkKQEAg
LTIzNzgsMTAgKzIzNjAsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAvLyBUaGUg
b3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3Jp
dHkgaW1wb3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKICAgICAvLyBhbmQgKDQpIG5v
cm1hbCBpbXBvcnRhbnQuCiAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwotICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQs
IGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBs
eUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5
UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1
dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRp
ZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVz
dWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxz
ZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhl
cml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3Bl
cnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0
QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVy
aXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVy
dGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
c2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+
KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxl
LCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKIAog
ICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpICE9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkgewogICAgICAgICBzdGF0ZS5z
ZXRGb250RGlydHkodHJ1ZSk7CkBAIC0yMzg5LDMwICsyMzcxLDMwIEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsIGNvbnN0CiAgICAgfQogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFo
ZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250
KHN0YXRlKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdl
IGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KICAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVl
KCkpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5s
aW5lSGVpZ2h0VmFsdWUoKSk7CisgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3Bl
cnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCiAgICAgLy8gTWFueSBw
cm9wZXJ0aWVzIGRlcGVuZCBvbiB0aGUgZm9udC4gSWYgaXQgY2hhbmdlcyB3ZSBqdXN0IGFwcGx5
IGFsbCBwcm9wZXJ0aWVzLgogICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJT
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9u
KCkpCiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogCiAgICAgLy8gTm93IGRv
IHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJl
c3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBh
cHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3Jp
dHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVy
aXRlZE9ubHkpOwogICAgIAogICAgIC8vIENhY2hlIG91ciBib3JkZXIgYW5kIGJhY2tncm91bmQg
c28gdGhhdCB3ZSBjYW4gZXhhbWluZSB0aGVtIGxhdGVyLgogICAgIHN0YXRlLmNhY2hlQm9yZGVy
QW5kQmFja2dyb3VuZCgpOwogICAgIAogICAgIC8vIE5vdyBkbyB0aGUgYXV0aG9yIGFuZCB1c2Vy
IG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBhbGwgdGhlICFpbXBvcnRhbnQgcHJvcGVy
dGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4o
bWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSArIDEsIG1h
dGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25s
eSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1h
dGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRj
aFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0
LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUs
IGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlv
cml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0VUFSdWxlICsgMSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgp
IC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExv
d1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQ
cmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFw
cGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0
eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
LmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKICAgIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQg
YnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworICAgIGxvYWRQZW5k
aW5nUmVzb3VyY2VzKHN0YXRlKTsKICAgICAKICAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgp
KTsKICAgICAKQEAgLTI0ODIsMTAgKzI0NjQsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLAog
ICAgIH0KIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjppc0xlZnRQYWdlKGludCBwYWdlSW5kZXgp
IGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoU3RhdGUmIHN0YXRlLCBpbnQg
cGFnZUluZGV4KSBjb25zdAogewogICAgIGJvb2wgaXNGaXJzdFBhZ2VMZWZ0ID0gZmFsc2U7Ci0g
ICAgaWYgKCFtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpKQorICAgIGlmICghc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkpCiAgICAgICAgIGlzRmlyc3RQYWdlTGVmdCA9IHRydWU7CiAKICAgICByZXR1cm4g
KHBhZ2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAxIDogMCkpICUgMjsKQEAgLTI1MDMsMTgg
KzI0ODUsMzEgQEAgU3RyaW5nIFN0eWxlUmVzb2x2ZXI6OnBhZ2VOYW1lKGludCAvKiBwYWdlSW5k
ZXggKi8pIGNvbnN0CiAgICAgcmV0dXJuICIiOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgUmVu
ZGVyU3R5bGUqIHN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5V2l0aE51
bGxDaGVjayhTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
IHsKLSAgICBpbml0RWxlbWVudCgwKTsKLSAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUo
ZG9jdW1lbnQoKSwgMCwgc3R5bGUpOwotICAgIG1fc3RhdGUuc2V0U3R5bGUoc3R5bGUpOwotICAg
IGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwgdmFsdWUpOworICAgIGlmICghdmFsdWUp
CisgICAgICAgIHJldHVybjsKKyAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBpZCwgdmFsdWUpOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
Rm9udFByb3BlcnR5VG9TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFN0eWxlUHJvcGVy
dHlTZXQqIHBhcnNlZFN0eWxlKQogewotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgYXBwbHlQcm9w
ZXJ0eShpZCwgdmFsdWUpOworICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOworICAgIHN0YXRl
LmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgMCwgc3R5bGUpOworICAgIHN0YXRlLnNl
dFN0eWxlKHN0eWxlKTsKKworICAgIGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKHN0YXRlLCBD
U1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCkpOworICAgIGFwcGx5UHJvcGVydHlXaXRoTnVsbENo
ZWNrKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpLmdldCgpKTsKKyAgICBhcHBseVByb3BlcnR5
V2l0aE51bGxDaGVjayhzdGF0ZSwgQ1NTUHJvcGVydHlGb250VmFyaWFudCwgcGFyc2VkU3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudCkuZ2V0KCkpOworICAg
IGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQs
IHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCku
Z2V0KCkpOworCisgICAgLy8gQXMgZGVzY3JpYmVkIGluIEJVRzY2MjkxLCBzZXR0aW5nIGZvbnQt
c2l6ZSBhbmQgbGluZS1oZWlnaHQgb24gYSBmb250IG1heSBlbnRhaWwgYSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZSBjYWxsLAorICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhl
IGZvbnRNZXRyaWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhlcndp
c2UgYSBjcmFzaCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85
NjEyMikuCisgICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxscyBiZWxvdyB1cGRhdGUgdGhlIGZv
bnRNZXRyaWNzIGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0aW5nIG9mIGZvbnQtc2l6ZSBhbmQg
bGluZS1oZWlnaHQuCisgICAgdXBkYXRlRm9udChzdGF0ZSk7CisgICAgYXBwbHlQcm9wZXJ0eVdp
dGhOdWxsQ2hlY2soc3RhdGUsIENTU1Byb3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpLmdldCgpKTsKKyAgICB1cGRhdGVG
b250KHN0YXRlKTsKKyAgICBhcHBseVByb3BlcnR5V2l0aE51bGxDaGVjayhzdGF0ZSwgQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKIH0KIAogaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRM
aW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKQEAgLTI2MTcsMTAgKzI2MTIsNiBAQCBpbmxp
bmUgYm9vbCBTdHlsZVJlc29sdmVyOjppc1ZhbGlkQ3VlU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkKQogLy8gd2lkdGgvaGVpZ2h0L2JvcmRlci9wYWRkaW5nLy4uLiBmcm9tIHRoZSBSZW5k
ZXJTdHlsZSAtPiBmb3IgU1ZHIHRoZXNlIHZhbHVlcyB3b3VsZCBuZXZlciBzY2FsZSwKIC8vIGlm
IHdlJ2QgcGFzcyBhIDEuMCB6b29tIGZhY3RvciBldmVyeWh3ZXJlLiBTbyB3ZSBvbmx5IHBhc3Mg
YSB6b29tIGZhY3RvciBvZiAxLjAgZm9yIHNwZWNpZmljCiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJl
IE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRl
ci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KLWJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9v
bVJ1bGVzKCkKLXsKLSAgICByZXR1cm4gbV9zdGF0ZS5lbGVtZW50KCkgJiYgbV9zdGF0ZS5lbGVt
ZW50KCktPmlzU1ZHRWxlbWVudCgpOwotfQogCiBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tC
cmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgY29uc3QgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlLCBMZW5ndGgmIHdvcmtpbmdMZW5ndGgpCiB7CkBAIC0yNzM4LDkg
KzI3MjksOSBAQCBzdGF0aWMgYm9vbCBoYXNWYXJpYWJsZVJlZmVyZW5jZShDU1NWYWx1ZSogdmFs
dWUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVW
YXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpw
YWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucykKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJp
bmc+ID4mIGtub3duRXhwcmVzc2lvbnMpCiB7Ci0gICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5SUQs
IFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxl
cygqbV9zdGF0ZS5zdHlsZSgpLT52YXJpYWJsZXMoKSkpOworICAgIHN0ZDo6cGFpcjxDU1NQcm9w
ZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQsIHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdW
YXJpYWJsZXMoKnN0YXRlLnN0eWxlKCktPnZhcmlhYmxlcygpKSk7CiAKICAgICBpZiAoa25vd25F
eHByZXNzaW9ucy5jb250YWlucyhleHByZXNzaW9uKSkKICAgICAgICAgcmV0dXJuOyAvLyBjeWNs
ZSBkZXRlY3RlZC4KQEAgLTI3NTUsMjQgKzI3NDYsMjMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpy
ZXNvbHZlVmFyaWFibGVzKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9y
PHMKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0U2V0LT5wcm9wZXJ0eUNvdW50
KCk7IGkrKykgewogICAgICAgICBTdHlsZVByb3BlcnR5U2V0OjpQcm9wZXJ0eVJlZmVyZW5jZSBw
cm9wZXJ0eSA9IHJlc3VsdFNldC0+cHJvcGVydHlBdChpKTsKICAgICAgICAgaWYgKHByb3BlcnR5
LmlkKCkgIT0gQ1NTUHJvcGVydHlWYXJpYWJsZSAmJiBoYXNWYXJpYWJsZVJlZmVyZW5jZShwcm9w
ZXJ0eS52YWx1ZSgpKSkKLSAgICAgICAgICAgIHJlc29sdmVWYXJpYWJsZXMocHJvcGVydHkuaWQo
KSwgcHJvcGVydHkudmFsdWUoKSwga25vd25FeHByZXNzaW9ucyk7CisgICAgICAgICAgICByZXNv
bHZlVmFyaWFibGVzKHN0YXRlLCBwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpLCBrbm93
bkV4cHJlc3Npb25zKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShw
cm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVy
dHkoc3RhdGUsIHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCkpOwogICAgIH0KIH0KICNl
bmRpZgogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KFN0
YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewogI2lmIEVO
QUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlmIChpZCAhPSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYm
IGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHZhbHVlKSkgewogICAgICAgICBWZWN0b3I8c3RkOjpwYWly
PENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiBrbm93bkV4cHJlc3Npb25zOwotICAgICAgICByZXNv
bHZlVmFyaWFibGVzKGlkLCB2YWx1ZSwga25vd25FeHByZXNzaW9ucyk7CisgICAgICAgIHJlc29s
dmVWYXJpYWJsZXMoc3RhdGUsIGlkLCB2YWx1ZSwga25vd25FeHByZXNzaW9ucyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAg
ICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJp
dGVkVmFsdWUoKTsKICAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgp
IHx8ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwog
CkBAIC0yODAyLDExICsyNzkyLDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY29uc3QgUHJvcGVydHlI
YW5kbGVyJiBoYW5kbGVyID0gbV9zdHlsZUJ1aWxkZXIucHJvcGVydHlIYW5kbGVyKGlkKTsKICAg
ICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpIHsKICAgICAgICAgaWYgKGlzSW5oZXJpdCkKLSAgICAg
ICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUoaWQsIHRoaXMpOworICAgICAgICAgICAg
aGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShpZCwgc3RhdGUpOwogICAgICAgICBlbHNlIGlmIChp
c0luaXRpYWwpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKGlkLCB0aGlz
KTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUoaWQsIHN0YXRlKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKGlkLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUoaWQsIHN0YXRlLCB2YWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI4MzgsMTkgKzI4MjgsMTkgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKICAgICAgICAg
ICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGl0ZW0tPmlzR3JhZGllbnRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVh
dGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHls
ZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShz
dGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4oaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jl
c29sdmVkKHN0YXRlKS5nZXQoKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVH
ZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUq
PihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAj
aWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVt
LT5pc0ltYWdlU2V0VmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0
YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVl
KHN0YXRlLCBDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUq
PihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAj
ZW5kaWYKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJ
bWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29u
dGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNf
Y2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0
ZSwgQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkp
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTUyLDcgKzI5NDIs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNG
YW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZh
bWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQo
cGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKLSAgICAgICAgICAgIHNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdGUuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIApAQCAtMjk2MiwxMSArMjk1MiwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVy
aWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZQogICAgICAgICAgICAgLy8gdG8gbm9uLW1v
bm9zcGFjZS4KICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAm
JiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQotICAgICAgICAgICAgICAg
IHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50
KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwg
ZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0
aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9u
dERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOwogICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoaW5pdGlhbERlc2MuZ2VuZXJpY0ZhbWlseSgp
KTsKICAgICAgICAgICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKS5mYW1pbHlJc0Vt
cHR5KCkpCiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0aWFs
RGVzYy5maXJzdEZhbWlseSgpKTsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzA0MSw5
ICszMDMxLDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgLy8gSWYgY3VyckZhbWlseSBpcyBub24t
emVybyB0aGVuIHdlIHNldCBhdCBsZWFzdCBvbmUgZmFtaWx5IG9uIHRoaXMgZGVzY3JpcHRpb24u
CiAgICAgICAgIGlmIChjdXJyRmFtaWx5KSB7CiAgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0
aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUo
KSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkKLSAgICAgICAgICAgICAgICBzZXRG
b250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBD
U1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsICFvbGRG
YW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkpOworICAgICAgICAgICAgICAgIHNldEZvbnRTaXpl
KHN0YXRlLCBmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBD
U1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsICFvbGRG
YW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkpOwogCi0gICAgICAgICAgICBzZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0zMDY4LDEzICszMDU4LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUucGFyZW50U3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KHN0YXRl
LnBhcmVudFN0eWxlKCktPnNwZWNpZmllZExpbmVIZWlnaHQoKSk7CiAgICAgICAgICAgICBzdGF0
ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAg
ICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwogICAgICAgICAg
ICAgQVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwg
dGhpcyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBz
ZXR0aW5ncwogICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKKyAgICAgICAg
ICAgIGluaXRpYWxpemVGb250U3R5bGUoc3RhdGUsIHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZSkgewogICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGlu
ZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAgICAgICAgICAgICBz
dGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CkBAIC0zMDkzLDI3ICszMDgzLDI3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250
KGRvY3VtZW50KCktPnByaW50aW5nKCkgfHwgIXNldHRpbmdzLT5zY3JlZW5Gb250U3Vic3RpdHV0
aW9uRW5hYmxlZCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgem9vbSBmYWN0
b3IuCi0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRD
b21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBm
b250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmll
ZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKLSAgICAgICAgICAgICAgICBzZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3Vt
ZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBm
b250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCBzdGF0ZS51c2VTVkdab29tUnVsZXMoKSkp
OworICAgICAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1
ZSgpKSB7CiAgICAgICAgICAgICBGb250VmFsdWUqIGZvbnQgPSBzdGF0aWNfY2FzdDxGb250VmFs
dWUqPih2YWx1ZSk7CiAgICAgICAgICAgICBpZiAoIWZvbnQtPnN0eWxlIHx8ICFmb250LT52YXJp
YW50IHx8ICFmb250LT53ZWlnaHQKICAgICAgICAgICAgICAgICB8fCAhZm9udC0+c2l6ZSB8fCAh
Zm9udC0+bGluZUhlaWdodCB8fCAhZm9udC0+ZmFtaWx5KQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsIGZvbnQt
PnN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250
VmFyaWFudCwgZm9udC0+dmFyaWFudC5nZXQoKSk7Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgZm9udC0+d2VpZ2h0LmdldCgpKTsKKyAgICAgICAgICAg
IGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5n
ZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHko
c3RhdGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCwgZm9udC0+d2VpZ2h0LmdldCgpKTsKICAgICAg
ICAgICAgIC8vIFRoZSBwcmV2aW91cyBwcm9wZXJ0aWVzIGNhbiBkaXJ0eSBvdXIgZm9udCBidXQg
dGhleSBkb24ndCB0cnkgdG8gcmVhZCB0aGUgZm9udCdzCiAgICAgICAgICAgICAvLyBwcm9wZXJ0
aWVzIGJhY2ssIHdoaWNoIGlzIHNhZmUuIEhvd2V2ZXIgaWYgZm9udC1zaXplIGlzIHVzaW5nIHRo
ZSAnZXgnIHVuaXQsIGl0IHdpbGwKICAgICAgICAgICAgIC8vIG5lZWQgcXVlcnkgdGhlIGRpcnRp
ZWQgZm9udCdzIHgtaGVpZ2h0IHRvIGdldCB0aGUgY29tcHV0ZWQgc2l6ZS4gVG8gYmUgc2FmZSBp
biB0aGlzCiAgICAgICAgICAgICAvLyBjYXNlLCBsZXQncyBqdXN0IHVwZGF0ZSB0aGUgZm9udCBu
b3cuCi0gICAgICAgICAgICB1cGRhdGVGb250KCk7Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udFNpemUsIGZvbnQtPnNpemUuZ2V0KCkpOworICAgICAgICAgICAgdXBk
YXRlRm9udChzdGF0ZSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKIAogICAgICAgICAgICAgc3RhdGUuc2V0
TGluZUhlaWdodFZhbHVlKGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCkpOwogCi0gICAgICAgICAgICBh
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsK
KyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udEZhbWlseSwg
Zm9udC0+ZmFtaWx5LmdldCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAKQEAgLTMx
NDQsNyArMzEzNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBTaGFkb3dTdHlsZSBzaGFk
b3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0eWxlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKICAgICAgICAgICAgIENvbG9yIGNvbG9yOwogICAg
ICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JG
cm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAgICAgIGNv
bG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNvbG9yLmdldCgpKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0eWxlKCkpCiAgICAgICAgICAgICAgICAgY29s
b3IgPSBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpOwogCkBAIC0zMTczLDcgKzMxNjMsOCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+
b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2Vu
dENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSk7CiAgICAgICAgIE5pbmVQaWVjZUltYWdl
IG1hc2s7CiAgICAgICAgIG1hc2suc2V0TWFza0RlZmF1bHRzKCk7Ci0gICAgICAgIG1fc3R5bGVN
YXAubWFwTmluZVBpZWNlSW1hZ2UoaWQsIHJlZmxlY3RWYWx1ZS0+bWFzaygpLCBtYXNrKTsKKyAg
ICAgICAgQ1NTVG9TdHlsZU1hcCBzdHlsZU1hcChzdGF0ZSk7CisgICAgICAgIHN0eWxlTWFwLm1h
cE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAg
IHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CkBAIC0zMjY1LDE0ICszMjU2LDE0IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMb2NhbGUocHJpbWl0
aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVj
dGlvbihzdGF0ZS5zdHlsZSgpLT5sb2NhbGUoKSkpOwotICAgICAgICBzZXRGb250RGVzY3JpcHRp
b24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRTaXplQWRqdXN0OiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKHRleHRTaXplQWRqdXN0LCBUZXh0U2l6ZUFkanVzdCkKICAgICAgICAgaWYgKCFwcmlt
aXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHNldFRleHRTaXplQWRqdXN0KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlQXV0byk7CisgICAgICAgIHN0YXRlLnNldFRleHRTaXplQWRqdXN0KHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0byk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpAQCAtMzM5OSw3ICszMzkw
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgQ29sb3IgY29sID0gY29sb3JGcm9tUHJpbWl0aXZl
VmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0NTQs
NyArMzQ0NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIG5l
d0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0
ZS5zdHlsZSgpLT5kaXJlY3Rpb24oKSwgc3RhdGUuc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CiAg
ICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5
KG5ld0lkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KHN0YXRlLCBuZXdJ
ZCwgdmFsdWUpOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0cmV0Y2g6CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVBhZ2U6CkBAIC0zNDg0LDcgKzM0NzUsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh3cml0aW5nTW9kZSwgV3JpdGluZ01v
ZGUpOwogICAgICAgICAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAg
c2V0V3JpdGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFdy
aXRpbmdNb2RlKCpwcmltaXRpdmVWYWx1ZSk7CiAKICAgICAgICAgLy8gRklYTUU6IEl0IGlzIG5v
dCBvayB0byBtb2RpZnkgZG9jdW1lbnQgc3RhdGUgd2hpbGUgYXBwbHlpbmcgc3R5bGUuCiAgICAg
ICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3Vt
ZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQpAQCAtMzQ5Niw3ICszNDg3LDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dE9yaWVudGF0aW9uLCBU
ZXh0T3JpZW50YXRpb24pOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAg
ICAgIHNldFRleHRPcmllbnRhdGlvbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc3Rh
dGUuc2V0VGV4dE9yaWVudGF0aW9uKCpwcmltaXRpdmVWYWx1ZSk7CiAKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTM1MTksNyArMzUxMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgLy8gQ1NTIEZv
bnRzIE1vZHVsZSBMZXZlbCAzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJl
U2V0dGluZ3M6IHsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICBzZXRGb250RGVz
Y3JpcHRpb24oc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1
cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihzdGF0
ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM1MzgsNyArMzUyOSw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZvbnRGZWF0dXJlKGZl
YXR1cmUtPnRhZygpLCBmZWF0dXJlLT52YWx1ZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEZlYXR1cmVTZXR0aW5ncyhzZXR0aW5ncy5yZWxlYXNlKCkpOwotICAg
ICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUu
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTM1NDYsNyArMzUzNyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChm
aWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAg
ICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucykpCisgICAgICAgIGlmIChjcmVhdGVG
aWx0ZXJPcGVyYXRpb25zKHN0YXRlLCB2YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKSkKICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEZpbHRlcihvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM4NjcsNzIg
KzM4NTgsNzIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBkZWZhdWx0OgogI2lmIEVOQUJMRShTVkcpCiAg
ICAgICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMKLSAgICAgICAgYXBwbHlTVkdQcm9wZXJ0
eShpZCwgdmFsdWUpOworICAgICAgICBhcHBseVNWR1Byb3BlcnR5KHN0YXRlLCBpZCwgdmFsdWUp
OwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBD
U1NWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0
eWxlSW1hZ2UoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSog
dmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VW
YWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUo
c3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4odmFsdWUpKTsKIAog
ICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAgICAgICAgaWYgKHZh
bHVlLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBl
bmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPih2
YWx1ZSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKTsKLSAgICAgICAg
cmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gZ2Vu
ZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NT
R3JhZGllbnRWYWx1ZSo+KHZhbHVlKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoc3RhdGUp
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0
ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPih2YWx1ZSkp
OwogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgIGlmICh2YWx1ZS0+aXNJ
bWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBzZXRPclBlbmRpbmdGcm9tVmFsdWUocHJv
cGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPih2YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8
Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7CiAjZW5kaWYKIAogICAgIGlmICh2YWx1ZS0+aXND
dXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFs
dWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUqPih2YWx1ZSkpOwor
ICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwg
c3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CiAKICAgICByZXR1cm4g
MDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1ZSogdmFs
dWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGlu
Z0Zyb21WYWx1ZShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdl
VmFsdWUqIHZhbHVlKQogewogICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5j
YWNoZWRPclBlbmRpbmdJbWFnZSgpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5n
SW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHBy
b3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5z
ZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCi1Q
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2
YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc1BlbmRpbmco
KSkgewotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVy
dHksIHZhbHVlKTsKKyAgICAgICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChw
cm9wZXJ0eSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gU3R5bGVQZW5kaW5nSW1hZ2U6OmNyZWF0
ZSh2YWx1ZSk7CiAgICAgfQogICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUo
dmFsdWUpOwogfQogCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi1QYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBDU1NJbWFnZVNldFZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKFN0YXRlJiBzdGF0ZSwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1ZSogdmFsdWUpCiB7Ci0gICAgUmVm
UHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRv
Y3VtZW50KCkpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRP
clBlbmRpbmdJbWFnZVNldChzdGF0ZS5kb2N1bWVudCgpKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1h
Z2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVy
dGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVh
c2UoKTsKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6
OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NDdXJz
b3JJbWFnZVZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZl
cjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxl
SW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50KCkpOwor
ICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFn
ZShzdGF0ZS5kb2N1bWVudCgpKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0lt
YWdlKCkpCi0gICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9w
ZXJ0eSwgdmFsdWUpOworICAgICAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0
KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KIAotdm9p
ZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KCkKK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdChTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IHN0YXRlLnN0eWxlKCk7CiAKICAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTM5NDIsMTggKzM5MzMsMTggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpj
aGVja0ZvclRleHRTaXplQWRqdXN0KCkKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5l
d0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29t
Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQordm9p
ZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoU3RhdGUmIHN0YXRlLCBSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAoc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0
aW9uKGNoaWxkRm9udCk7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBjaGls
ZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKKyAgICBzZXRGb250U2l6ZShzdGF0ZSwgbmV3Rm9udERl
c2NyaXB0aW9uLCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKICAgICBzdHlsZS0+c2V0Rm9u
dERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZl
cjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNG
YW1pbHlDaGFuZ2UoU3RhdGUmIHN0YXRlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSkKIHsKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKIApAQCAtMzk4NywxMSArMzk3OCwxMSBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSog
c3R5bGUsIFJlbmRlclN0eWxlKgogICAgIH0KIAogICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250
RGVzY3JpcHRpb24oY2hpbGRGb250KTsKLSAgICBzZXRGb250U2l6ZShuZXdGb250RGVzY3JpcHRp
b24sIHNpemUpOworICAgIHNldEZvbnRTaXplKHN0YXRlLCBuZXdGb250RGVzY3JpcHRpb24sIHNp
emUpOwogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsK
IH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdzKiBz
ZXR0aW5ncykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTdGF0ZSYg
c3RhdGUsIFNldHRpbmdzKiBzZXR0aW5ncykKIHsKICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNj
cmlwdGlvbjo6U3RhbmRhcmRGYW1pbHkpOwpAQCAtNDAwMywxNiArMzk5NCwxNiBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqIHNldHRpbmdzKQogICAg
ICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1pbHkoMCk7CiAgICAg
fQogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENT
U1ZhbHVlWHhTbWFsbCArIDEpOwotICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9u
dFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSkpOwotICAg
IG1fc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVI
ZWlnaHQoKSk7Ci0gICAgbV9zdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7Ci0gICAgc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgc2V0Rm9udFNpemUoc3RhdGUsIGZv
bnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlTWVk
aXVtLCBmYWxzZSkpOworICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgw
KTsKKyAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKIH0KIAot
dm9pZCBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgZmxvYXQgc2l6ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoU3Rh
dGUmIHN0YXRlLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkK
IHsKICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRT
aXplKGRvY3VtZW50KCksIG1fc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1
dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzdGF0ZS5k
b2N1bWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUo
KSwgc2l6ZSwgc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCkpKTsKIH0KIAogZmxvYXQgU3R5bGVSZXNv
bHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50
LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmll
ZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKQpAQCAtNDIxMCwxMiArNDIwMSwxMSBAQCBib29s
IFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1l
bnQoQ1NTUHJpbWl0aXZlVmFsdQogICAgIH0KIH0KIAotQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBib29sIGZvclZp
c2l0ZWRMaW5rKSBjb25zdAorQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZl
VmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NQcmltaXRpdmVWYWx1
ZSogdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspCiB7CiAgICAgaWYgKHZhbHVlLT5pc1JHQkNv
bG9yKCkpCiAgICAgICAgIHJldHVybiBDb2xvcih2YWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7CiAK
LSAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIGludCBpZGVudCA9IHZhbHVl
LT5nZXRJZGVudCgpOwogICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICBjYXNlIDA6CkBAIC00NTYx
LDkgKzQ1NTEsOCBAQCBzdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRl
ck9wZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NTRmlsdGVyVmFsdQogfQogCiAjaWYgRU5BQkxFKENT
U19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGlu
Z1NWR0RvY3VtZW50cygpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1l
bnRzKFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIGlm
ICghc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50
cygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00NTkwLDI5ICs0NTc5LDI5IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi1TdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6c3R5
bGVTaGFkZXIoQ1NTVmFsdWUqIHZhbHVlKQorU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OnN0
eWxlU2hhZGVyKFN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1
ZS0+aXNXZWJLaXRDU1NTaGFkZXJWYWx1ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5k
aW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUq
Pih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9t
VmFsdWUoc3RhdGUsIHN0YXRpY19jYXN0PFdlYktpdENTU1NoYWRlclZhbHVlKj4odmFsdWUpKTsK
ICAgICByZXR1cm4gMDsKIH0KIAotU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9y
UGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFdlYktpdENTU1NoYWRlclZhbHVlKiB2YWx1ZSkK
K1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZy
b21WYWx1ZShTdGF0ZSYgc3RhdGUsIFdlYktpdENTU1NoYWRlclZhbHVlKiB2YWx1ZSkKIHsKICAg
ICBTdHlsZVNoYWRlciogc2hhZGVyID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ1NoYWRlcigpOwog
ICAgIGlmIChzaGFkZXIgJiYgc2hhZGVyLT5pc1BlbmRpbmdTaGFkZXIoKSkKLSAgICAgICAgbV9z
dGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyh0cnVlKTsKKyAgICAgICAgc3RhdGUuc2V0SGFzUGVu
ZGluZ1NoYWRlcnModHJ1ZSk7CiAgICAgcmV0dXJuIHNoYWRlcjsKIH0KIAotdm9pZCBTdHlsZVJl
c29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMoKQordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVu
ZGluZ1NoYWRlcnMoU3RhdGUmIHN0YXRlKQogewotICAgIGlmICghbV9zdGF0ZS5zdHlsZSgpLT5o
YXNGaWx0ZXIoKSB8fCAhbV9zdGF0ZS5oYXNQZW5kaW5nU2hhZGVycygpKQorICAgIGlmICghc3Rh
dGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgIXN0YXRlLmhhc1BlbmRpbmdTaGFkZXJzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAg
ICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBzdGF0ZS5kb2N1
bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0YXRlLnN0eWxlKCktPm11dGFi
bGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRp
b24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5zdHlsZSgpLT5tdXRhYmxlRmlsdGVyKCku
b3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRp
b25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRl
ck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJP
cGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkg
ewpAQCAtNDYyOSw3ICs0NjE4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1No
YWRlcnMoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIG1fc3RhdGUuc2V0
SGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpOworICAgIHN0YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJz
KGZhbHNlKTsKIH0KIAogc3RhdGljIGJvb2wgc29ydFBhcmFtZXRlcnNCeU5hbWVDb21wYXJhdG9y
KGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBhLCBjb25zdCBSZWZQdHI8Q3Vz
dG9tRmlsdGVyUGFyYW1ldGVyPiYgYikKQEAgLTQ2NjcsMTYgKzQ2NTYsMTYgQEAgUGFzc1JlZlB0
cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVy
TnVtYmVyUGFyYW1ldGUKICAgICByZXR1cm4gbnVtYmVyUGFyYW1ldGVyLnJlbGVhc2UoKTsKIH0K
IAotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNl
Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFs
dWVMaXN0KiB2YWx1ZXMpCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVS
ZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoU3RhdGUmIHN0YXRl
LCBjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVzKQogewogICAgIFJlZlB0
cjxDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRlciA9IEN1
c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwogICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZh
bHVlcywgbV9zdGF0ZS5zdHlsZSgpLCBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0
aW9ucyk7CisgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMsIHN0YXRlLnN0eWxl
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucyk7CiAgICAgdHJhbnNmb3Jt
UGFyYW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMpOwogICAgIHJldHVybiB0cmFuc2Zv
cm1QYXJhbWV0ZXIucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFt
ZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29uc3QgU3Ry
aW5nJiBuYW1lLCBDU1NWYWx1ZSogcGFyYW1ldGVyVmFsdWUpCitQYXNzUmVmUHRyPEN1c3RvbUZp
bHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIo
U3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJWYWx1
ZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhcmFtZXRlcnMgdHlwZXMgcGFy
c2luZy4KICAgICAvLyBib29sZWFuczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc2NDM4CkBAIC00Njk5LDcgKzQ2ODgsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
clBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29u
cwogICAgIC8vIGFyZSB0cmFuc2Zvcm1zLiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFt
ZXRlciB3aWxsCiAgICAgLy8gcmV0dXJuIDAgaWYgdGhhdCBhc3N1bXB0aW9uIGlzIGluY29ycmVj
dC4KICAgICBpZiAodmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApLT5pc1dlYktpdENT
U1RyYW5zZm9ybVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBwYXJzZUN1c3RvbUZpbHRlclRyYW5z
Zm9ybVBhcmFtZXRlcihuYW1lLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4gcGFyc2VDdXN0b21G
aWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoc3RhdGUsIG5hbWUsIHZhbHVlcyk7CiAKICAgICAvLyBX
ZSBjYW4gaGF2ZSBvbmx5IGFycmF5cyBvZiBib29sZWFucyBvciBudW1iZXJzLCBzbyB1c2UgdGhl
IGZpcnN0IHZhbHVlIHRvIGNob29zZSBiZXR3ZWVuIHRob3NlIHR3by4KICAgICAvLyBXZSBuZWVk
IHVwIHRvIDQgdmFsdWVzIChhbGwgYm9vbGVhbnMgb3IgYWxsIG51bWJlcnMpLgpAQCAtNDcxNiw3
ICs0NzA1LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2
ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNvbnMKICAgICByZXR1cm4gMDsKIH0KIAot
Ym9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFs
dWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVy
TGlzdCkKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0
KFN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdCYgcGFyYW1ldGVyTGlzdCkKIHsKICAgICBIYXNoU2V0PFN0cmluZz4ga25vd25Q
YXJhbWV0ZXJOYW1lczsKICAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvciBwYXJhbWV0ZXJJdGVyYXRv
cihwYXJhbWV0ZXJzVmFsdWUpOwpAQCAtNDc0MSw3ICs0NzMwLDcgQEAgYm9vbCBTdHlsZVJlc29s
dmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFtZXRlcnNW
YWx1ZSwgQ3UKICAgICAgICAgaWYgKCFpdGVyYXRvci5oYXNNb3JlKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1l
dGVyPiBwYXJhbWV0ZXIgPSBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihuYW1lLCBpdGVyYXRv
ci52YWx1ZSgpKTsKKyAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyYW1l
dGVyID0gcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoc3RhdGUsIG5hbWUsIGl0ZXJhdG9yLnZh
bHVlKCkpOwogICAgICAgICBpZiAoIXBhcmFtZXRlcikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgcGFyYW1ldGVyTGlzdC5hcHBlbmQocGFyYW1ldGVyLnJlbGVhc2UoKSk7CkBA
IC00NzYwLDcgKzQ3NDksNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5
bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aAogICAgIHJldHVybiAw
OwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6
Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aElubGluZVN5bnRheChXZWJLaXRDU1NGaWx0
ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4g
U3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aElubGluZVN5bnRh
eChTdGF0ZSYgc3RhdGUsIFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKIHsKICAg
ICBDU1NWYWx1ZSogc2hhZGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMCk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc2hhZGVyc1Zh
bHVlLT5pc1ZhbHVlTGlzdCgpKTsKQEAgLTQ3NjksNyArNDc1OCw3IEBAIFBhc3NSZWZQdHI8Q3Vz
dG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVy
YXRpb25XaXRoCiAgICAgdW5zaWduZWQgc2hhZGVyc0xpc3RMZW5ndGggPSBzaGFkZXJzTGlzdC0+
bGVuZ3RoKCk7CiAgICAgQVNTRVJUKHNoYWRlcnNMaXN0TGVuZ3RoKTsKIAotICAgIFJlZlB0cjxT
dHlsZVNoYWRlcj4gdmVydGV4U2hhZGVyID0gc3R5bGVTaGFkZXIoc2hhZGVyc0xpc3QtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gdmVydGV4U2hh
ZGVyID0gc3R5bGVTaGFkZXIoc3RhdGUsIHNoYWRlcnNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDApKTsKICAgICBSZWZQdHI8U3R5bGVTaGFkZXI+IGZyYWdtZW50U2hhZGVyOwogICAgIEN1
c3RvbUZpbHRlclByb2dyYW1UeXBlIHByb2dyYW1UeXBlID0gUFJPR1JBTV9UWVBFX0JMRU5EU19F
TEVNRU5UX1RFWFRVUkU7CiAgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbU1peFNldHRpbmdzIG1peFNl
dHRpbmdzOwpAQCAtNDc4Miw3ICs0NzcxLDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVy
YXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGgKICAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKG1peEZ1bmN0aW9uKTsKIAog
ICAgICAgICAgICAgQVNTRVJUKG1peEZ1bmN0aW9uLT5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBm
cmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAg
ICAgZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNoYWRlcihzdGF0ZSwgaXRlcmF0b3IudmFsdWUoKSk7
CiAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CiAKICAgICAgICAgICAgIEFTU0VSVCht
aXhGdW5jdGlvbi0+bGVuZ3RoKCkgPD0gMyk7CkBAIC00Nzk4LDcgKzQ3ODcsNyBAQCBQYXNzUmVm
UHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmls
dGVyT3BlcmF0aW9uV2l0aAogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgcHJvZ3JhbVR5cGUgPSBQUk9HUkFNX1RZUEVfTk9fRUxFTUVOVF9URVhUVVJFOwotICAg
ICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNoYWRlcihmcmFnbWVudFNoYWRlck9yTWl4
RnVuY3Rpb24pOworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNoYWRlcihzdGF0
ZSwgZnJhZ21lbnRTaGFkZXJPck1peEZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0KICAgICAK
QEAgLTQ4NTQsMjMgKzQ4NDMsMjMgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+
IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGgKICAgICAgICAg
cGFyYW1ldGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMik7
CiAgICAgCiAgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJMaXN0OwotICAg
IGlmIChwYXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChw
YXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQorICAgIGlmIChwYXJhbWV0ZXJzVmFsdWUg
JiYgIXBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChzdGF0ZSwgcGFyYW1ldGVyc1ZhbHVl
LCBwYXJhbWV0ZXJMaXN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgUmVmUHRyPFN0
eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bTo6Y3JlYXRlKHZlcnRleFNoYWRlci5yZWxlYXNlKCksIGZyYWdtZW50U2hhZGVyLnJlbGVhc2Uo
KSwgcHJvZ3JhbVR5cGUsIG1peFNldHRpbmdzLCBtZXNoVHlwZSk7CiAgICAgcmV0dXJuIEN1c3Rv
bUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKHByb2dyYW0ucmVsZWFzZSgpLCBwYXJhbWV0ZXJMaXN0
LCBtZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hUeXBlKTsKIH0KIAotUGFzc1JlZlB0cjxDdXN0
b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJh
dGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCitQYXNzUmVmUHRyPEN1c3Rv
bUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uKFN0YXRlJiBzdGF0ZSwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVlKQogewog
ICAgIEFTU0VSVChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkpOwogICAgIGJvb2wgaXNBdFJ1bGVSZWZl
cmVuY2VTeW50YXggPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKS0+aXNQ
cmltaXRpdmVWYWx1ZSgpOwotICAgIHJldHVybiBpc0F0UnVsZVJlZmVyZW5jZVN5bnRheCA/IGNy
ZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhBdFJ1bGVSZWZlcmVuY2VTeW50YXgoZmlsdGVy
VmFsdWUpIDogY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aElubGluZVN5bnRheChmaWx0
ZXJWYWx1ZSk7CisgICAgcmV0dXJuIGlzQXRSdWxlUmVmZXJlbmNlU3ludGF4ID8gY3JlYXRlQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVsZVJlZmVyZW5jZVN5bnRheChmaWx0ZXJWYWx1ZSkg
OiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KHN0YXRlLCBmaWx0
ZXJWYWx1ZSk7CiB9CiAKICNlbmRpZgogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRl
ck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVy
U3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKK2Jvb2wg
U3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdGF0ZSYgc3RhdGUsIENTU1Zh
bHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUs
IEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCiB7CiAgICAgQVNTRVJUKG91dE9wZXJh
dGlvbnMuaXNFbXB0eSgpKTsKICAgICAKQEAgLTQ5MDMsNyArNDg5Miw3IEBAIGJvb2wgU3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVy
U3R5bGUqIHN0eWxlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBp
ZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewotICAgICAgICAg
ICAgUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gY3JlYXRlQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uKGZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDdXN0b21G
aWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihz
dGF0ZSwgZmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgaWYgKCFvcGVyYXRpb24pCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgCkBAIC00OTIxLDEyICs0OTEwLDEy
IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSog
aW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHN2Z0RvY3VtZW50VmFsdWUg
PSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKj4oYXJndW1lbnQpOwotICAg
ICAgICAgICAgS1VSTCB1cmwgPSBtX3N0YXRlLmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2Z0Rv
Y3VtZW50VmFsdWUtPnVybCgpKTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gc3RhdGUuZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwogCiAgICAgICAgICAg
ICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBSZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgdXJsLmZyYWdt
ZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAgICAgIGlmIChTVkdVUklS
ZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCks
IG1fc3RhdGUuZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6
OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIHN0YXRlLmRv
Y3VtZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdmdEb2N1bWVudFZhbHVlLT5sb2Fk
UmVxdWVzdGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUucGVuZGluZ1NWR0RvY3Vt
ZW50cygpLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuc2V0KG9wZXJhdGlvbi5nZXQo
KSwgc3ZnRG9jdW1lbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ZnRG9jdW1l
bnRWYWx1ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uLT5zZXRDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShhZG9wdFB0cihuZXcgQ2FjaGVkU1ZH
RG9jdW1lbnRSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQoKSkp
KTsKICAgICAgICAgICAgIH0KQEAgLTUwMTAsNyArNDk5OSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZl
cjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUq
IHN0eWxlCiAgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5j
b21wdXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvcikgOiAwOwogICAg
ICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAg
ICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShz
dGF0ZSwgaXRlbS0+Y29sb3IuZ2V0KCkpOwogCiAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5hcHBlbmQoRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGxvY2F0aW9u
LCBibHVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCwgb3Bl
cmF0aW9uVHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MDI4LDkgKzUwMTcsOSBAQCBi
b29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFs
dWUsIFJlbmRlclN0eWxlKiBzdHlsZQogCiAjZW5kaWYKIAotUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5k
aW5nSW1hZ2UpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nSW1hZ2UoU3RhdGUmIHN0YXRlLCBTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlKQog
ewotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3Rh
dGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBzdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpOwogCiAgICAgaWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgp
KSB7CiAgICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNz
c0ltYWdlVmFsdWUoKTsKQEAgLTUwNTgsMjkgKzUwNDcsMjkgQEAgUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBw
ZW5kaW4KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGlu
Z0ltYWdlcygpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKFN0YXRlJiBz
dGF0ZSkKIHsKLSAgICBpZiAobV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuaXNFbXB0
eSgpKQorICAgIGlmIChzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRl
cmF0b3I6OktleXMgZW5kID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5kKCku
a2V5cygpOwotICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9y
OjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuYmVnaW4oKS5rZXlz
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25z
dF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5k
KCkua2V5cygpOworICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJh
dG9yOjpLZXlzIGl0ID0gc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmJlZ2luKCkua2V5
cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJv
cGVydHkgPSAqaXQ7CiAKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZTogewotICAgICAgICAgICAgZm9yIChG
aWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3RhdGUuc3R5bGUoKS0+YWNjZXNzQmFja2dy
b3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91
bmRMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3Vu
ZExheWVyID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3Jv
dW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSAmJiBiYWNrZ3JvdW5k
TGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIGJh
Y2tncm91bmRMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHls
ZVBlbmRpbmdJbWFnZSo+KGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRl
LCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGJhY2tncm91bmRMYXllci0+aW1hZ2Uo
KSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OiB7Ci0gICAgICAgICAgICBmb3IgKENvbnRlbnRE
YXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0YXRlLnN0eWxl
KCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0
YS0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9
IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihzdGF0ZS5zdHlsZSgpLT5jb250ZW50RGF0YSgpKTsg
Y29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVudERhdGEtPm5leHQoKSkgewogICAgICAg
ICAgICAgICAgIGlmIChjb250ZW50RGF0YS0+aXNJbWFnZSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNv
bnRlbnREYXRhKS0+aW1hZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc1Bl
bmRpbmdJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFn
ZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGlu
Z0ltYWdlKj4oaW1hZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUlt
YWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChs
b2FkZWRJbWFnZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxJbWFn
ZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5zZXRJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNl
KCkpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC01MDg5LDQ2ICs1MDc4LDQ2IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAgICAgICAg
aWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0YXRlLnN0eWxlKCktPmN1cnNvcnMoKSkg
eworICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBzdGF0ZS5zdHlsZSgp
LT5jdXJzb3JzKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1
cnNvckxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIEN1cnNvckRhdGEm
IGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVudEN1cnNvci5pbWFnZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdl
KHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0
YXRlLCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdlKSkpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUlt
YWdlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgp
ICYmIG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkK
LSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldExpc3RTdHlsZUltYWdlKGxvYWRQ
ZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxl
KCktPmxpc3RTdHlsZUltYWdlKCkpKSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+
bGlzdFN0eWxlSW1hZ2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpLT5pc1Bl
bmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpc3RTdHls
ZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0lt
YWdlKj4oc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJj
ZTogewotICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2Uo
KSAmJiBtX3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdl
KCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRCb3JkZXJJbWFnZVNvdXJj
ZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0
ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgaWYgKHN0YXRl
LnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkgJiYgc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1h
Z2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRlLCBzdGF0aWNf
Y2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNl
KCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewotICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlv
biogcmVmbGVjdGlvbiA9IG1fc3RhdGUuc3R5bGUoKS0+Ym94UmVmbGVjdCgpKSB7CisgICAgICAg
ICAgICBpZiAoU3R5bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gc3RhdGUuc3R5bGUoKS0+Ym94
UmVmbGVjdCgpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJ
bWFnZSA9IHJlZmxlY3Rpb24tPm1hc2soKTsKICAgICAgICAgICAgICAgICBpZiAobWFza0ltYWdl
LmltYWdlKCkgJiYgbWFza0ltYWdlLmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRp
bmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgp
KSk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9
IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4o
bWFza0ltYWdlLmltYWdlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0
TWFzayhOaW5lUGllY2VJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCksIG1hc2tJbWFnZS5pbWFn
ZVNsaWNlcygpLCBtYXNrSW1hZ2UuZmlsbCgpLCBtYXNrSW1hZ2UuYm9yZGVyU2xpY2VzKCksIG1h
c2tJbWFnZS5vdXRzZXQoKSwgbWFza0ltYWdlLmhvcml6b250YWxSdWxlKCksIG1hc2tJbWFnZS52
ZXJ0aWNhbFJ1bGUoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlKCktPm1h
c2tCb3hJbWFnZVNvdXJjZSgpICYmIG1fc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNl
KCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5z
ZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBl
bmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7Cisg
ICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkgJiYgc3Rh
dGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5k
aW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oc3RhdGUuc3R5
bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOiB7Ci0gICAgICAg
ICAgICBmb3IgKEZpbGxMYXllciogbWFza0xheWVyID0gbV9zdGF0ZS5zdHlsZSgpLT5hY2Nlc3NN
YXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0gbWFza0xheWVyLT5uZXh0KCkpIHsK
KyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBzdGF0ZS5zdHlsZSgpLT5h
Y2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0gbWFza0xheWVyLT5uZXh0
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAobWFza0xheWVyLT5pbWFnZSgpICYmIG1hc2tMYXll
ci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgbWFza0xh
eWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0lt
YWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkpOworICAgICAgICAgICAgICAgICAgICBtYXNrTGF5
ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVu
ZGluZ0ltYWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTUxMzcsMjIgKzUxMjYsMjIgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBt
X3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5jbGVhcigpOworICAgIHN0YXRlLnBlbmRp
bmdJbWFnZVByb3BlcnRpZXMoKS5jbGVhcigpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Omxv
YWRQZW5kaW5nUmVzb3VyY2VzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNv
dXJjZXMoU3RhdGUmIHN0YXRlKQogewogICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVy
ZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ0ltYWdlcygpOworICAgIGxvYWRQ
ZW5kaW5nSW1hZ2VzKHN0YXRlKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAvLyBT
dGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBs
b2FkUGVuZGluZ1NoYWRlcnMoKTsKKyAgICBsb2FkUGVuZGluZ1NoYWRlcnMoc3RhdGUpOwogI2Vu
ZGlmCiAgICAgCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQogICAgIC8v
IFN0YXJ0IGxvYWRpbmcgdGhlIFNWRyBEb2N1bWVudHMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxl
LgotICAgIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCk7CisgICAgbG9hZFBlbmRpbmdTVkdEb2N1
bWVudHMoc3RhdGUpOwogI2VuZGlmCiB9CiAKQEAgLTUyMDQsOCArNTE5Myw2IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZE1lbWJlcihtX2luc3BlY3RvckNTU09NV3JhcHBl
cnMpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc2NvcGVSZXNvbHZlciwgInNjb3BlUmVzb2x2ZXIi
KTsKIAotICAgIGluZm8uYWRkTWVtYmVyKG1fc3RhdGUsICJzdGF0ZSIpOwotCiAgICAgLy8gRklY
TUU6IG1vdmUgdGhpcyB0byBhIHBsYWNlIHdoZXJlIGl0IHdvdWxkIGJlIGNhbGxlZCBvbmx5IG9u
Y2U/CiAgICAgaW5mby5hZGRNZW1iZXIoQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0U3R5
bGUsICJkZWZhdWx0U3R5bGUiKTsKICAgICBpbmZvLmFkZE1lbWJlcihDU1NEZWZhdWx0U3R5bGVT
aGVldHM6OmRlZmF1bHRRdWlya3NTdHlsZSwgImRlZmF1bHRRdWlya3NTdHlsZSIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggNDJjOTVjOTFmZDg0ZTNmMmEzYmFlNjYxMTE1MTI0
NjJlOGYwMjM5Ny4uOWU4MmJmYWI3ZjI0N2E1ZWMyNDBmMDJlM2ZlMzI0NjcxMzYzNmM0NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0yMyw3ICsyMyw2IEBACiAjZGVmaW5lIFN0
eWxlUmVzb2x2ZXJfaAogCiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKLSNpbmNsdWRlICJDU1NU
b1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRSdWxlU2V0cy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU09NV3JhcHBlcnMuaCIKQEAgLTE5
MywxMyArMTkyLDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqLCBDU1NGb250U2VsZWN0b3IqID0gMCk7CiAK
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0eWxlKCk7
IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnBhcmVudFN0eWxlKCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpOyB9Ci0gICAgRWxlbWVudCog
ZWxlbWVudCgpIHsgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCgpOyB9CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50KCkgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIFN0eWxlU2NvcGVSZXNvbHZlciog
c2NvcGVSZXNvbHZlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVSZXNvbHZlci5nZXQoKTsgfQot
ICAgIGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Tm9k
ZSgpOyB9CiAKICAgICAvLyBGSVhNRTogSXQgY291bGQgYmUgYmV0dGVyIHRvIGNhbGwgbV9ydWxl
U2V0cy5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cygpIGRpcmVjdGx5IGFmdGVyIHdlIGZhY3RvciBT
dHlsZVJzb2x2ZXIgZnVydGhlci4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA4ODkwCkBAIC0yMjUsMTcgKzIxOSwxOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX3Njb3BlUmVzb2x2ZXIuZ2V0KCk7CiAgICAgfQogI2VuZGlmCisgICAgY2xhc3Mg
U3RhdGU7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7Ci0gICAg
UmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7Ci0gICAgYm9vbCBzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7Ci0gICAgYm9vbCBzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCk7CisgICAgdm9pZCBpbml0RWxlbWVudChTdGF0ZSYs
IEVsZW1lbnQqKTsKKyAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoU3RhdGUmKTsK
KyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KEVsZW1lbnQqLCBS
dWxlU2V0Kik7CisgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVz
KFN0YXRlJik7CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVu
c2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKLSAgICBTdHlsZWRFbGVtZW50KiBmaW5k
U2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKLSAg
ICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KikgY29uc3Q7Cisg
ICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoY29uc3QgU3RhdGUm
LCBOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKKyAgICBib29sIGNhblNoYXJlU3R5bGVX
aXRoRWxlbWVudChjb25zdCBTdGF0ZSYsIFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKIAotICAgIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBTdHlsZUtleWZyYW1lKiwgS2V5ZnJhbWVWYWx1ZSYpOworICAgIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoU3RhdGUmLCBjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVlJik7CiAKIHB1YmxpYzoKICAgICAv
LyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBiYWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRj
aGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9yIGEgcHNldWRvLWVsZW1lbnQpLgpAQCAtMjU4LDI1
ICsyNTMsMjEgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQgbGVnYWN5Rm9udFNpemUoRG9jdW1l
bnQqLCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKTsK
IAogcHVibGljOgotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCwg
Q1NTVmFsdWUqLCBSZW5kZXJTdHlsZSopOworICAgIHZvaWQgYXBwbHlGb250UHJvcGVydHlUb1N0
eWxlKFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCopOwogCi0gICAgdm9pZCBh
cHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLQot
ICAgIHZvaWQgdXBkYXRlRm9udCgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0
aW5ncyopOworICAgIHZvaWQgdXBkYXRlRm9udChTdGF0ZSYpOworICAgIHZvaWQgaW5pdGlhbGl6
ZUZvbnRTdHlsZShTdGF0ZSYsIFNldHRpbmdzKik7CiAKICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29t
cHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBmbG9hdCB6b29tRmFjdG9yLCBi
b29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRNaW5pbXVtRm9y
Rm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSk7CiAKLSAgICB2b2lkIHNldEZv
bnRTaXplKEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOworICAgIHN0YXRpYyB2b2lkIHNl
dEZvbnRTaXplKFN0YXRlJiwgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7CiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERv
Y3VtZW50KiwgUmVuZGVyU3R5bGUqLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZp
ZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcyk7CiAKIHB1YmxpYzoKLSAgICBib29sIHVzZVNW
R1pvb21SdWxlcygpOwotCiAgICAgc3RhdGljIGJvb2wgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJ
c0Rlcml2ZWRGcm9tRWxlbWVudChDU1NQcmltaXRpdmVWYWx1ZSopOwotICAgIENvbG9yIGNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGlu
ayA9IGZhbHNlKSBjb25zdDsKKyAgICBzdGF0aWMgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUoY29uc3QgU3RhdGUmLCBDU1NQcmltaXRpdmVWYWx1ZSosIGJvb2wgZm9yVmlzaXRlZExpbmsg
PSBmYWxzZSk7CiAKICAgICBib29sIGhhc1NlbGVjdG9yRm9ySWQoY29uc3QgQXRvbWljU3RyaW5n
JikgY29uc3Q7CiAgICAgYm9vbCBoYXNTZWxlY3RvckZvckNsYXNzKGNvbnN0IEF0b21pY1N0cmlu
ZyYpIGNvbnN0OwpAQCAtMzA0LDM0ICsyOTUsMzQgQEAgcHVibGljOgogICAgIHZvaWQgaW52YWxp
ZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
LSAgICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRl
clN0eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBGaWx0ZXJPcGVyYXRpb25z
JiBvdXRPcGVyYXRpb25zKTsKKyAgICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoU3RhdGUm
LCBDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiBy
b290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwogI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKLSAgICBTdHlsZVNoYWRlciogc3R5bGVTaGFkZXIoQ1NTVmFsdWUqKTsKLSAg
ICBTdHlsZVNoYWRlciogY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0
Q1NTU2hhZGVyVmFsdWUqKTsKLSAgICBib29sIHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dChDU1NWYWx1ZSosIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmKTsKLSAgICBQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29uc3Qg
U3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSopOworICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihT
dGF0ZSYsIENTU1ZhbHVlKik7CisgICAgU3R5bGVTaGFkZXIqIGNhY2hlZE9yUGVuZGluZ1N0eWxl
U2hhZGVyRnJvbVZhbHVlKFN0YXRlJiwgV2ViS2l0Q1NTU2hhZGVyVmFsdWUqKTsKKyAgICBib29s
IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChTdGF0ZSYsIENTU1ZhbHVlKiwgQ3VzdG9t
RmlsdGVyUGFyYW1ldGVyTGlzdCYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1l
dGVyPiBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihTdGF0ZSYsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgQ1NTVmFsdWUqKTsKICAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFy
c2VDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVl
TGlzdCopOwogICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3Rv
bUZpbHRlck51bWJlclBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCop
OwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRl
clRyYW5zZm9ybVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCopOwor
ICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclRy
YW5zZm9ybVBhcmFtZXRlcihTdGF0ZSYsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0
Kik7CiAgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZUN1c3RvbUZp
bHRlck9wZXJhdGlvbldpdGhBdFJ1bGVSZWZlcmVuY2VTeW50YXgoV2ViS2l0Q1NTRmlsdGVyVmFs
dWUqKTsKLSAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uV2l0aElubGluZVN5bnRheChXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOwot
ICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJP
cGVyYXRpb24oV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKLSAgICB2b2lkIGxvYWRQZW5kaW5nU2hh
ZGVycygpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGVDdXN0
b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KFN0YXRlJiwgV2ViS2l0Q1NTRmlsdGVy
VmFsdWUqKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uKFN0YXRlJiwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKKyAgICB2
b2lkIGxvYWRQZW5kaW5nU2hhZGVycyhTdGF0ZSYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNWRykK
LSAgICB2b2lkIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCk7CisgICAgdm9pZCBsb2FkUGVuZGlu
Z1NWR0RvY3VtZW50cyhTdGF0ZSYpOwogI2VuZGlmCiAjZW5kaWYgLy8gRU5BQkxFKENTU19GSUxU
RVJTKQogCi0gICAgdm9pZCBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworICAgIHZvaWQgbG9hZFBl
bmRpbmdSZXNvdXJjZXMoU3RhdGUmKTsKIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGZ1bmN0aW9u
IGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1
cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAotICAgIHZvaWQgY2hl
Y2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7
CisgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoU3RhdGUmLCBSZW5kZXJTdHls
ZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0Zvclpvb21DaGFu
Z2UoU3RhdGUmLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAg
dm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KFN0YXRlJik7CiAKLSAgICB2b2lkIGFkanVzdFJl
bmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUsIEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFN0YXRlJiwgUmVu
ZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVu
dCopOwogCiAgICAgc3RydWN0IFJ1bGVSYW5nZSB7CiAgICAgICAgIFJ1bGVSYW5nZShpbnQmIGZp
cnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpOiBmaXJzdFJ1bGVJbmRleChmaXJzdFJ1
bGVJbmRleCksIGxhc3RSdWxlSW5kZXgobGFzdFJ1bGVJbmRleCkgeyB9CkBAIC0zNzksMjUgKzM3
MCwyNSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKE1h
dGNoUmVzdWx0JiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxl
KiA9IDAsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxs
LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdoaXRlbGlzdE5vbmUpOwogICAgIHZv
aWQgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhNYXRjaFJlc3VsdCYsIGNvbnN0IFN0eWxlUHJv
cGVydHlTZXQqLCBib29sIGlzQ2FjaGVhYmxlID0gdHJ1ZSk7CiAKLSAgICB2b2lkIG1hdGNoQWxs
UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcyk7Ci0gICAgdm9p
ZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmKTsKLSAgICB2b2lkIG1hdGNoVUFSdWxlcyhNYXRj
aFJlc3VsdCYsIFJ1bGVTZXQqKTsKLSAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1
bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKE1h
dGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9pZCBtYXRjaFNjb3Bl
ZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAg
dm9pZCBtYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OworICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhTdGF0ZSYsIE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNs
dWRlU01JTFByb3BlcnRpZXMpOworICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKFN0YXRlJiwgTWF0Y2hS
ZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoVUFSdWxlcyhTdGF0ZSYsIE1hdGNoUmVzdWx0JiwgUnVs
ZVNldCopOworICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhTdGF0ZSYsIE1hdGNoUmVzdWx0Jiwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhTdGF0ZSYs
IE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaFNj
b3BlZEF1dGhvclJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzKTsKKyAgICB2b2lkIG1hdGNoSG9zdFJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQmLCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKIAotICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoY29u
c3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7Ci0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKLSAgICB2b2lk
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgY29u
c3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdS
dWxlcyhTdGF0ZSYsIGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOworICAgIHZvaWQg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oU3RhdGUmLCBjb25zdCBNYXRjaFJlcXVlc3Qm
LCBSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChTdGF0
ZSYsIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBjb25zdCBNYXRjaFJlcXVlc3QmLCBSdWxlUmFu
Z2UmKTsKIAogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29u
c3Q7Ci0gICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgdm9pZCBzb3J0QW5kVHJhbnNm
ZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMo
U3RhdGUmKTsKKyAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhTdGF0ZSYsIE1h
dGNoUmVzdWx0Jik7CiAKLSAgICBib29sIHJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiwgY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVkb0lkJiwgU2VsZWN0b3JDaGVja2VyOjpCZWhh
dmlvckF0Qm91bmRhcnkgPSBTZWxlY3RvckNoZWNrZXI6OkRvZXNOb3RDcm9zc0JvdW5kYXJ5KTsK
KyAgICBib29sIHJ1bGVNYXRjaGVzKGNvbnN0IFN0YXRlJiwgY29uc3QgUnVsZURhdGEmLCBjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmLCBTZWxlY3RvckNoZWNrZXI6OkJlaGF2
aW9yQXRCb3VuZGFyeSA9IFNlbGVjdG9yQ2hlY2tlcjo6RG9lc05vdENyb3NzQm91bmRhcnkpOwog
ICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2Vs
ZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwotICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJv
cGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQqKTsKKyAgICB2b2lkIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVs
ZW1lbnQqKTsKICAgICBlbnVtIFN0eWxlQXBwbGljYXRpb25QYXNzIHsKICNpZiBFTkFCTEUoQ1NT
X1ZBUklBQkxFUykKICAgICAgICAgVmFyaWFibGVEZWZpbml0aW9ucywKQEAgLTQwNiwxMSArMzk3
LDExIEBAIHByaXZhdGU6CiAgICAgICAgIExvd1ByaW9yaXR5UHJvcGVydGllcwogICAgIH07CiAg
ICAgdGVtcGxhdGUgPFN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Ci0gICAgdm9pZCBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgYm9vbCBpbXBvcnRhbnQsIGludCBz
dGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSk7CisgICAgdm9pZCBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0YXRlJiwgY29uc3QgTWF0Y2hSZXN1bHQmLCBib29sIGlt
cG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5
KTsKICAgICB0ZW1wbGF0ZSA8U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KLSAgICB2b2lkIGFw
cGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1
bGUqLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFByb3BlcnR5V2hpdGVs
aXN0VHlwZSA9IFByb3BlcnR5V2hpdGVsaXN0Tm9uZSk7CisgICAgdm9pZCBhcHBseVByb3BlcnRp
ZXMoU3RhdGUmLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUq
LCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFByb3BlcnR5V2hpdGVsaXN0
VHlwZSA9IFByb3BlcnR5V2hpdGVsaXN0Tm9uZSk7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMp
Ci0gICAgdm9pZCByZXNvbHZlVmFyaWFibGVzKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgVmVj
dG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMp
OworICAgIHZvaWQgcmVzb2x2ZVZhcmlhYmxlcyhTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU1Zh
bHVlKiwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhw
cmVzc2lvbnMpOwogI2VuZGlmCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFJlZ2lvblN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCk7CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQpAQCAtNDIwLDgg
KzQxMSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9y
PFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLCBjb25zdCBWZWN0b3I8U3R5bGVSdWxlUGFn
ZSo+JiwgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBh
Z2VOYW1lKTsKICAgICBTZXR0aW5ncyogZG9jdW1lbnRTZXR0aW5ncygpIHsgcmV0dXJuIG1fZG9j
dW1lbnQtPnNldHRpbmdzKCk7IH0KIAotICAgIGJvb2wgaXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4
KSBjb25zdDsKLSAgICBib29sIGlzUmlnaHRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0IHsgcmV0
dXJuICFpc0xlZnRQYWdlKHBhZ2VJbmRleCk7IH0KKyAgICBib29sIGlzTGVmdFBhZ2UoU3RhdGUm
LCBpbnQgcGFnZUluZGV4KSBjb25zdDsKKyAgICBib29sIGlzUmlnaHRQYWdlKFN0YXRlJiBzdGF0
ZSwgaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2Uoc3RhdGUsIHBhZ2VJ
bmRleCk7IH0KICAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwogICAg
IFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKIApAQCAtNDMxLDE2ICs0MjIs
MTcgQEAgcHJpdmF0ZToKICAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsK
IAogcHVibGljOgorCiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxD
U1NWYWx1ZT4gPiBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpICYmIEVOQUJMRShTVkcpCiAgICAgdHlwZWRlZiBIYXNoTWFwPEZpbHRlck9wZXJhdGlvbios
IFJlZlB0cjxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlPiA+IFBlbmRpbmdTVkdEb2N1bWVudE1h
cDsKICNlbmRpZgotCiAgICAgY2xhc3MgU3RhdGUgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTdGF0ZSk7CiAgICAgcHVibGljOgotICAgICAgICBTdGF0ZSgpCi0gICAgICAgIDogbV9l
bGVtZW50KDApCisgICAgICAgIFN0YXRlKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICAgICAgOiBt
X2RvY3VtZW50KGRvY3VtZW50KQorICAgICAgICAsIG1fZWxlbWVudCgwKQogICAgICAgICAsIG1f
c3R5bGVkRWxlbWVudCgwKQogICAgICAgICAsIG1fcGFyZW50Tm9kZSgwKQogICAgICAgICAsIG1f
cGFyZW50U3R5bGUoMCkKQEAgLTQ2Nyw3ICs0NTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQg
aW5pdEZvclN0eWxlUmVzb2x2ZShEb2N1bWVudCosIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSAwLCBjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmID0gUHNldWRvU3R5bGVSZXF1
ZXN0KE5PUFNFVURPKSwgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7CiAgICAg
ICAgIHZvaWQgY2xlYXIoKTsKIAotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCk7IH0KKyAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgICAgICBFbGVtZW50KiBlbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CiAgICAgICAgIFN0eWxlZEVsZW1lbnQq
IHN0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlZEVsZW1lbnQ7IH0KICAgICAg
ICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkgeyBtX3N0eWxl
ID0gc3R5bGU7IH0KQEAgLTUyOCwxMSArNTIwLDEwIEBAIHB1YmxpYzoKIAogICAgICAgICBWZWN0
b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4mIG1hdGNoZWRSdWxlcygpIHsgcmV0dXJuIG1fbWF0Y2hl
ZFJ1bGVzOyB9CiAgICAgICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1
bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CisgICAgICAgIGJvb2wgdXNlU1ZH
Wm9vbVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdF
bGVtZW50KCk7IH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgLy8gRklYTUUoYnVn
IDEwODU2Myk6IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJldmlldywgdGhlc2UgbWVtYmVyCi0gICAg
ICAgIC8vIHZhcmlhYmxlcyBhcmUgcHVibGljLiBIb3dldmVyIHdlIHNob3VsZCBhZGQgbWV0aG9k
cyB0byBhY2Nlc3MKLSAgICAgICAgLy8gdGhlc2UgdmFyaWFibGVzLgorICAgICAgICBEb2N1bWVu
dCogbV9kb2N1bWVudDsKICAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgICAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7CiAgICAgICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVk
RWxlbWVudDsKQEAgLTU3OCwzMCArNTY5LDE4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBSZW5k
ZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZh
aWxhYmxlOyB9CiAKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJv
cGVydHlJRCwgQ1NTVmFsdWUqKTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9y
UGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7Ci0gICAgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1
ZShTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU0ltYWdlVmFsdWUqKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmLCBD
U1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKik7CiAjaWYgRU5BQkxFKENTU19J
TUFHRV9TRVQpCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VTZXRWYWx1ZSopOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IHNldE9yUGVuZGluZ0Zyb21WYWx1ZShTdGF0ZSYsIENTU1Byb3BlcnR5
SUQsIENTU0ltYWdlU2V0VmFsdWUqKTsKICNlbmRpZgotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdl
VmFsdWUqKTsKLQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKTsgfQotICAgIGJv
b2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpOyB9CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKFN0YXRlJiwgQ1NTUHJv
cGVydHlJRCwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSopOwogCiAgICAgc3RhdGljIExlbmd0aCBjb252
ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0
eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7CiAgICAgc3RhdGljIExlbmd0
aCBjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwg
UmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsKIAotICAgIENT
U1RvU3R5bGVNYXAqIHN0eWxlTWFwKCkgeyByZXR1cm4gJm1fc3R5bGVNYXA7IH0KICAgICBJbnNw
ZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkgeyByZXR1cm4gbV9p
bnNwZWN0b3JDU1NPTVdyYXBwZXJzOyB9Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0YXRlLmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBt
X3N0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgdm9pZCBzZXRGb250RGVzY3Jp
cHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQotICAgIHZvaWQgc2V0Wm9vbShm
bG9hdCBmKSB7IG1fc3RhdGUuc2V0Wm9vbShmKTsgfQotICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9v
bShmbG9hdCBmKSB7IG1fc3RhdGUuc2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgIHZvaWQgc2V0
VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1fc3RhdGUuc2V0VGV4dFNpemVBZGp1c3QoYik7IH0K
LSAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fc3Rh
dGUuc2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9Ci0gICAgdm9pZCBzZXRUZXh0T3JpZW50
YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX3N0YXRlLnNldFRleHRP
cmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAgICAgCkBAIC02MTEsMTYgKzU5MCwx
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAKIHBy
aXZhdGU6Ci0gICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCop
IGNvbnN0OworICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGNvbnN0IFN0YXRlJiwg
U3R5bGVkRWxlbWVudCopIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQsIENTU1ZhbHVlKik7CisgICAgdm9pZCBhcHBseVByb3BlcnR5V2l0aE51bGxDaGVjayhT
dGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAgdm9pZCBhcHBseVByb3BlcnR5
KFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAogI2lmIEVOQUJMRShTVkcpCi0g
ICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAg
dm9pZCBhcHBseVNWR1Byb3BlcnR5KGNvbnN0IFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFs
dWUqKTsKICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBsb2FkUGVuZGluZ0lt
YWdlKFN0eWxlUGVuZGluZ0ltYWdlKik7Ci0gICAgdm9pZCBsb2FkUGVuZGluZ0ltYWdlcygpOwor
ICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZFBlbmRpbmdJbWFnZShTdGF0ZSYsIFN0eWxl
UGVuZGluZ0ltYWdlKik7CisgICAgdm9pZCBsb2FkUGVuZGluZ0ltYWdlcyhTdGF0ZSYpOwogCiAg
ICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0
Y2hlZFByb3BlcnRpZXMqLCB1bnNpZ25lZCBzaXplKTsKICAgICBzdHJ1Y3QgTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZUl0ZW0gewpAQCAtNjM4LDcgKzYxOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
d2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoVGltZXI8U3R5bGVSZXNvbHZlcj4qKTsKIAogICAg
IGJvb2wgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJikg
Y29uc3Q7Ci0gICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3Rp
bmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIHNoYXJpbmdDYW5k
aWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3QgU3RhdGUmLCBT
dHlsZWRFbGVtZW50KikgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcDsKIApAQCAtNjY1LDExICs2NDUsOCBAQCBwcml2
YXRlOgogICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7CiAKICAgICBPd25Q
dHI8U3R5bGVTY29wZVJlc29sdmVyPiBtX3Njb3BlUmVzb2x2ZXI7Ci0gICAgQ1NTVG9TdHlsZU1h
cCBtX3N0eWxlTWFwOwogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMgbV9pbnNwZWN0b3JDU1NP
TVdyYXBwZXJzOwogCi0gICAgU3RhdGUgbV9zdGF0ZTsKLQogICAgIGZyaWVuZCBjbGFzcyBTdHls
ZUJ1aWxkZXI7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRjaGVkUHJvcGVy
dGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAppbmRleCA0NDJjMTllNmI1MzczYWY2N2I1NjFhZDJiY2JiMmEwMjA0ODNj
ZmVkLi4zNzBiZWRjYTdkNTM5NTA3MTU1NzY4NTliN2M4NzYxNTY5YzM1MjE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKQEAgLTIwNjQsMTggKzIwNjQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAKICAgICAvLyBOb3cgbWFwIHRoZSBm
b250IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KICAgICBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyID0gY2FudmFzKCktPnN0eWxlUmVzb2x2ZXIoKTsKLSAgICBzdHlsZVJl
c29sdmVyLT5hcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNl
ZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCks
IG5ld1N0eWxlLmdldCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJy
ZW50U3R5bGUoQ1NTUHJvcGVydHlGb250U3R5bGUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxlKS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+
YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIHBhcnNl
ZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpLmdldCgp
KTsKLSAgICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJv
cGVydHlGb250V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKLQotICAgIC8vIEFzIGRlc2NyaWJlZCBpbiBCVUc2NjI5
MSwgc2V0dGluZyBmb250LXNpemUgYW5kIGxpbmUtaGVpZ2h0IG9uIGEgZm9udCBtYXkgZW50YWls
IGEgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhEb3VibGUgY2FsbCwKLSAgICAvLyB3
aGljaCBhc3N1bWVzIHRoZSBmb250TWV0cmljcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgYWZmZWN0
ZWQgZm9udCwgb3RoZXJ3aXNlIGEgY3Jhc2ggb2NjdXJzIChzZWUgaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9jaGFuZ2VzZXQvOTYxMjIpLgotICAgIC8vIFRoZSB1cGRhdGVGb250KCkgY2FsbHMgYmVs
b3cgdXBkYXRlIHRoZSBmb250TWV0cmljcyBhbmQgZW5zdXJlIHRoZSBwcm9wZXIgc2V0dGluZyBv
ZiBmb250LXNpemUgYW5kIGxpbmUtaGVpZ2h0LgotICAgIHN0eWxlUmVzb2x2ZXItPnVwZGF0ZUZv
bnQoKTsKLSAgICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NT
UHJvcGVydHlGb250U2l6ZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlGb250U2l6ZSkuZ2V0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXItPnVwZGF0ZUZvbnQoKTsK
LSAgICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQpLmdldCgpKTsKKyAgICBzdHlsZVJlc29sdmVyLT5hcHBseUZvbnRQcm9wZXJ0
eVRvU3R5bGUobmV3U3R5bGUuZ2V0KCksIHBhcnNlZFN0eWxlLmdldCgpKTsKIAogICAgIG1vZGlm
aWFibGVTdGF0ZSgpLm1fZm9udCA9IG5ld1N0eWxlLT5mb250KCk7CiAgICAgbW9kaWZpYWJsZVN0
YXRlKCkubV9mb250LnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191396</attachid>
            <date>2013-03-04 21:22:45 -0800</date>
            <delta_ts>2013-03-04 21:22:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109909-20130305141851.patch</filename>
            <type>text/plain</type>
            <size>239888</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NzAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzdkNWM1NTM3MWE3ODdj
YzJhODA3OWRmZTM0OTYyNTAyOTgxZmNlYS4uYTYzNjI2NDUzMDJhYzQ1YzAyMjY1NmQ1MDQ0MGJh
N2Q0NDFmNjNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAxMy0wMi0xNSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmFjdG9yaW5n
XSBNYWtlIG1fc3RhdGUgYW4gb24tc3RhY2sgb2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk5MDkKKworICAgICAgICBSZXZpZXdlZCBieSBB
bnR0aSBLb2l2aXN0by4KKworICAgICAgICBNb2RlIG1fc3RhdGUsIGFuIGluc3RhbmNlIG9mIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlLCBhbiBvbi1zdGFjayBvYmplY3QuCisgICAgICAgIFRoZSBzdGF0
ZSBpcyBvbmx5IHJlcXVpcmVkIGluIHN0eWxlRm9yRWxlbWVudCwgc3R5bGVGb3JLZXlmcmFtZSBh
bmQKKyAgICAgICAgc28gb24uIE5vIG5lZWQgdG8ga2VlcCB0aGUgc3RhdGUgb3V0c2lkZSBvZiB0
aG9zZSBtZXRob2RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYmVjYXVzZSBqdXN0IHJlZmFj
dG9yaW5nLgorCisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udmVydFRvTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OmJhc2ljU2hh
cGVGb3JWYWx1ZSk6CisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJlc29sdmVyKiB3aXRoIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNv
bHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAgICAgKENTU0dy
YWRpZW50VmFsdWUpOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJlc29sdmVyKiB3aXRoIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
U3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxl
TWFwOjpzdHlsZUltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0eWxl
TWFwKToKKyAgICAgICAgKENTU1RvU3R5bGVNYXApOgorICAgICAgICBSZXBsYWNlZCBTdHlsZVJl
c29sdmVyKiB3aXRoIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJi4KKyAgICAgICAgKiBjc3MvU1ZHQ1NT
U3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KToKKyAgICAgICAgUmVwbGFjZWQgbV9zdGF0ZSB3aXRoIHN0YXRlIHdoaWNo
IGlzIGdpdmVuIGFzIGFuIGFyZ3VtZW50IG9mCisgICAgICAgIGFwcGx5U1ZHUHJvcGVydHkuCisg
ICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5RXhwYW5kaW5nOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5RXhwYW5kaW5nOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5RXhwYW5kaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseUluaXRpYWxWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHQ6OmFwcGx5VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU51bWJlcjo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5U3R5bGVJbWFnZTo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjpjb252ZXJ0VG9MZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEaXJlY3Rpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5U3RyaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlCb3JkZXJSYWRpdXM6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRM
aWdhdHVyZXM6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBs
eUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2VNb2RpZmllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvdW50ZXI6OmVtcHR5RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvdW50ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDb3VudGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDdXJzb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDdXJzb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDdXJzb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eVRleHRBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5VGV4dERlY29yYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6YXBw
bHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBo
YXNpc1N0eWxlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlB
bmltYXRpb246Om1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QW5pbWF0aW9u
OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QW5p
bWF0aW9uOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5QW5pbWF0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlPdXRsaW5lU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVJlc2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5VmVydGljYWxBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0aW86OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlJbml0aWFsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjpyZXNldEVmZmVjdGl2
ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OmFwcGx5SW5oZXJp
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjphcHBseUluaXRp
YWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6YXBwbHlWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6aXNWYWxpZERpc3Bs
YXlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6YXBwbHlJ
bmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmFw
cGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwUGF0aDo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RXhjbHVzaW9uU2hh
cGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVz
b2x1dGlvbjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgICog
Y3NzL1N0eWxlQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQcm9wZXJ0
eUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjphcHBseUluaGVy
aXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6OmFwcGx5SW5pdGlh
bFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIFJlcGxhY2VkIFN0eWxlUmVzb2x2ZXIqIHdpdGggU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6CisgICAg
ICAgIFJlbW92ZWQgbV9zdHlsZU1hcC4gTm93IG1fc3R5bGVNYXAgaXMgYW4gb24tc3RhY2sgb2Jq
ZWN0LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c29ydE1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
aGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hh
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
dHlsZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVu
ZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0
ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzZXRGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpzdHlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZp
bHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIEp1c3QgcmVwbGFjZWQg
bV9zdGF0ZSB3aXRoIHN0YXRlIGFuZCBhZGRlZCBvbmUgbW9yZSBwYXJhbWV0ZXIgdG8KKyAgICAg
ICAgcHJvdmlkZSB0aGUgc3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIFNpbmNlIG1fc3RhdGUgd2FzIHJlbW92ZWQsIHJl
bW92ZWQgYSBjb2RlIGZvciByZXBvcnRpbmcgbV9zdGF0ZSdzCisgICAgICAgIG1lbW9yeSB1c2Fn
ZS4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppc1JpZ2h0UGFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRvY3VtZW50KToKKyAgICAgICAgU2luY2UgU3Rh
dGU6Om1fZWxlbWVudCBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZSAoc29tZXRpbWVzLCAwKSwKKyAg
ICAgICAgYWRkZWQgbV9kb2N1bWVudCB0byBTdGF0ZSBhbmQgbW9kaWZpZWQgdG8gcmV0dXJuIHRo
ZSBtX2RvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnVz
ZVNWR1pvb21SdWxlcyk6CisgICAgICAgIE1vdmVkIFN0eWxlUmVzb2x2ZXIgdG8gU3RhdGUuCisg
ICAgICAgIChTdGF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0Rm9udCk6CisgICAgICAgIE1vdmVkIHRoZSBjb2RlLCB1cGRhdGluZyBhIHN0eWxlIGJ5IHVz
aW5nIGEgZ2l2ZW4gU3R5bGVQcm9wZXJ0eVNldCwKKyAgICAgICAgdG8gU3R5bGVSZXNvbHZlci4K
KwogMjAxMy0wMy0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAg
ICAgICAgIFN1cHBvcnQgV2ViU3BlZWNoIC0gU3BlZWNoIFN5bnRoZXNpcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCmluZGV4IDNhOGY3OTUzYjZmOTZiMDEyZjg0
MzIzN2EyZTEyYTBmZGY0Y2IxMjEuLmFhNmI3NGYyOWJhZmEyM2RhMjAxY2VlNjBkODg5MGQwM2Uw
NWNmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAKQEAg
LTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJDU1NCYXNpY1NoYXBlcy5oIgogI2luY2x1ZGUgIkNT
U1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKLSNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTAw
LDEyICs5OSwxMiBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvckJhc2ljU2hhcGUoY29u
c3QgQmFzaWNTaGFwZSogYmFzaWNTaGFwZSkKICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWU8UGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiA+KGJhc2ljU2hhcGVWYWx1ZS5yZWxl
YXNlKCkpOwogfQogCi1zdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChjb25zdCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCitzdGF0aWMg
TGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUs
IENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRU
b0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgRml4ZWRGbG9hdENvbnZlcnNpb24gfCBQ
ZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICByZXR1cm4gdmFsdWUtPmNv
bnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgRml4ZWRGbG9hdENvbnZlcnNp
b24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpKTsKIH0KIAotUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9y
VmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTQmFzaWNT
aGFwZSogYmFzaWNTaGFwZVZhbHVlKQorUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBl
Rm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBjb25zdCBDU1NCYXNp
Y1NoYXBlKiBiYXNpY1NoYXBlVmFsdWUpCiB7CiAgICAgUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2lj
U2hhcGU7CiAKQEAgLTExNCwxNCArMTEzLDE0IEBAIFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFz
aWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvCiAg
ICAgICAgIGNvbnN0IENTU0Jhc2ljU2hhcGVSZWN0YW5nbGUqIHJlY3RWYWx1ZSA9IHN0YXRpY19j
YXN0PGNvbnN0IENTU0Jhc2ljU2hhcGVSZWN0YW5nbGUgKj4oYmFzaWNTaGFwZVZhbHVlKTsKICAg
ICAgICAgUmVmUHRyPEJhc2ljU2hhcGVSZWN0YW5nbGU+IHJlY3QgPSBCYXNpY1NoYXBlUmVjdGFu
Z2xlOjpjcmVhdGUoKTsKIAotICAgICAgICByZWN0LT5zZXRYKGNvbnZlcnRUb0xlbmd0aChzdHls
ZVJlc29sdmVyLCByZWN0VmFsdWUtPngoKSkpOwotICAgICAgICByZWN0LT5zZXRZKGNvbnZlcnRU
b0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPnkoKSkpOwotICAgICAgICByZWN0LT5z
ZXRXaWR0aChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdFZhbHVlLT53aWR0aCgp
KSk7Ci0gICAgICAgIHJlY3QtPnNldEhlaWdodChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZl
ciwgcmVjdFZhbHVlLT5oZWlnaHQoKSkpOworICAgICAgICByZWN0LT5zZXRYKGNvbnZlcnRUb0xl
bmd0aChzdGF0ZSwgcmVjdFZhbHVlLT54KCkpKTsKKyAgICAgICAgcmVjdC0+c2V0WShjb252ZXJ0
VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+eSgpKSk7CisgICAgICAgIHJlY3QtPnNldFdpZHRo
KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT53aWR0aCgpKSk7CisgICAgICAgIHJl
Y3QtPnNldEhlaWdodChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+aGVpZ2h0KCkp
KTsKICAgICAgICAgaWYgKHJlY3RWYWx1ZS0+cmFkaXVzWCgpKSB7Ci0gICAgICAgICAgICByZWN0
LT5zZXRDb3JuZXJSYWRpdXNYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFs
dWUtPnJhZGl1c1goKSkpOworICAgICAgICAgICAgcmVjdC0+c2V0Q29ybmVyUmFkaXVzWChjb252
ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+cmFkaXVzWCgpKSk7CiAgICAgICAgICAgICBp
ZiAocmVjdFZhbHVlLT5yYWRpdXNZKCkpCi0gICAgICAgICAgICAgICAgcmVjdC0+c2V0Q29ybmVy
UmFkaXVzWShjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdFZhbHVlLT5yYWRpdXNZ
KCkpKTsKKyAgICAgICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNZKGNvbnZlcnRUb0xl
bmd0aChzdGF0ZSwgcmVjdFZhbHVlLT5yYWRpdXNZKCkpKTsKICAgICAgICAgfQogICAgICAgICBi
YXNpY1NoYXBlID0gcmVjdC5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTMwLDkgKzEy
OSw5IEBAIFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvCiAgICAgICAgIGNvbnN0IENTU0Jhc2ljU2hh
cGVDaXJjbGUqIGNpcmNsZVZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQmFzaWNTaGFwZUNp
cmNsZSAqPihiYXNpY1NoYXBlVmFsdWUpOwogICAgICAgICBSZWZQdHI8QmFzaWNTaGFwZUNpcmNs
ZT4gY2lyY2xlID0gQmFzaWNTaGFwZUNpcmNsZTo6Y3JlYXRlKCk7CiAKLSAgICAgICAgY2lyY2xl
LT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBjaXJjbGVWYWx1ZS0+
Y2VudGVyWCgpKSk7Ci0gICAgICAgIGNpcmNsZS0+c2V0Q2VudGVyWShjb252ZXJ0VG9MZW5ndGgo
c3R5bGVSZXNvbHZlciwgY2lyY2xlVmFsdWUtPmNlbnRlclkoKSkpOwotICAgICAgICBjaXJjbGUt
PnNldFJhZGl1cyhjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgY2lyY2xlVmFsdWUtPnJh
ZGl1cygpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0Q2VudGVyWChjb252ZXJ0VG9MZW5ndGgoc3Rh
dGUsIGNpcmNsZVZhbHVlLT5jZW50ZXJYKCkpKTsKKyAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJZ
KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgY2lyY2xlVmFsdWUtPmNlbnRlclkoKSkpOworICAgICAg
ICBjaXJjbGUtPnNldFJhZGl1cyhjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGNpcmNsZVZhbHVlLT5y
YWRpdXMoKSkpOwogCiAgICAgICAgIGJhc2ljU2hhcGUgPSBjaXJjbGUucmVsZWFzZSgpOwogICAg
ICAgICBicmVhazsKQEAgLTE0MSwxMCArMTQwLDEwIEBAIFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4g
YmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNv
CiAgICAgICAgIGNvbnN0IENTU0Jhc2ljU2hhcGVFbGxpcHNlKiBlbGxpcHNlVmFsdWUgPSBzdGF0
aWNfY2FzdDxjb25zdCBDU1NCYXNpY1NoYXBlRWxsaXBzZSAqPihiYXNpY1NoYXBlVmFsdWUpOwog
ICAgICAgICBSZWZQdHI8QmFzaWNTaGFwZUVsbGlwc2U+IGVsbGlwc2UgPSBCYXNpY1NoYXBlRWxs
aXBzZTo6Y3JlYXRlKCk7CiAKLSAgICAgICAgZWxsaXBzZS0+c2V0Q2VudGVyWChjb252ZXJ0VG9M
ZW5ndGgoc3R5bGVSZXNvbHZlciwgZWxsaXBzZVZhbHVlLT5jZW50ZXJYKCkpKTsKLSAgICAgICAg
ZWxsaXBzZS0+c2V0Q2VudGVyWShjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgZWxsaXBz
ZVZhbHVlLT5jZW50ZXJZKCkpKTsKLSAgICAgICAgZWxsaXBzZS0+c2V0UmFkaXVzWChjb252ZXJ0
VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgZWxsaXBzZVZhbHVlLT5yYWRpdXNYKCkpKTsKLSAgICAg
ICAgZWxsaXBzZS0+c2V0UmFkaXVzWShjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgZWxs
aXBzZVZhbHVlLT5yYWRpdXNZKCkpKTsKKyAgICAgICAgZWxsaXBzZS0+c2V0Q2VudGVyWChjb252
ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1ZS0+Y2VudGVyWCgpKSk7CisgICAgICAgIGVs
bGlwc2UtPnNldENlbnRlclkoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBlbGxpcHNlVmFsdWUtPmNl
bnRlclkoKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNYKGNvbnZlcnRUb0xlbmd0aChz
dGF0ZSwgZWxsaXBzZVZhbHVlLT5yYWRpdXNYKCkpKTsKKyAgICAgICAgZWxsaXBzZS0+c2V0UmFk
aXVzWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1ZS0+cmFkaXVzWSgpKSk7CiAK
ICAgICAgICAgYmFzaWNTaGFwZSA9IGVsbGlwc2UucmVsZWFzZSgpOwogICAgICAgICBicmVhazsK
QEAgLTE1Niw3ICsxNTUsNyBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JW
YWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjbwogICAgICAgICBwb2x5
Z29uLT5zZXRXaW5kUnVsZShwb2x5Z29uVmFsdWUtPndpbmRSdWxlKCkpOwogICAgICAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiA+JiB2YWx1ZXMgPSBwb2x5Z29uVmFs
dWUtPnZhbHVlcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNp
emUoKTsgaSArPSAyKQotICAgICAgICAgICAgcG9seWdvbi0+YXBwZW5kUG9pbnQoY29udmVydFRv
TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHZhbHVlcy5hdChpKS5nZXQoKSksIGNvbnZlcnRUb0xlbmd0
aChzdHlsZVJlc29sdmVyLCB2YWx1ZXMuYXQoaSArIDEpLmdldCgpKSk7CisgICAgICAgICAgICBw
b2x5Z29uLT5hcHBlbmRQb2ludChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHZhbHVlcy5hdChpKS5n
ZXQoKSksIGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgdmFsdWVzLmF0KGkgKyAxKS5nZXQoKSkpOwog
CiAgICAgICAgIGJhc2ljU2hhcGUgPSBwb2x5Z29uLnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaAppbmRleCBkMzYwN2U5MDk5
MjljMzQxYjBjMDY5ZDNlNWNlYjYxZjEzZjExNzE5Li5lNTYzMjA2ODc2OGE2NzAxZjgwM2ZiMmFm
ZWY1NDg5ODUzMWQxMWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFw
ZUZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25z
LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgQmFzaWNTaGFwZUZ1bmN0aW9uc19oCiAjZGVm
aW5lIEJhc2ljU2hhcGVGdW5jdGlvbnNfaAogCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3
LDEwICszOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJhc2ljU2hhcGU7CiBjbGFz
cyBDU1NCYXNpY1NoYXBlOwogY2xhc3MgQ1NTVmFsdWU7Ci1jbGFzcyBTdHlsZVJlc29sdmVyOwog
CiBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvckJhc2ljU2hhcGUoY29uc3QgQmFzaWNTaGFw
ZSopOwotUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5
bGVSZXNvbHZlciosIGNvbnN0IENTU0Jhc2ljU2hhcGUqKTsKK1Bhc3NSZWZQdHI8QmFzaWNTaGFw
ZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiwgY29uc3Qg
Q1NTQmFzaWNTaGFwZSopOwogCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVu
dFZhbHVlLmNwcAppbmRleCA4ZjE2OGFiNzJjZTMwNzU2ZGUwMzQxNzg0ZGY4MDBmZDM3NjBiZjJl
Li5lNTY1ZWZmNWFlNDE4ODM2ZjVkZWQyMTQ3NzlhMDQ4Y2VlZGI5OGRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAi
SW50U2l6ZUhhc2guaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVt
ZW50YXRpb25WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBA
IC0xMTUsMTEgKzExNCwxMSBAQCBzdHJ1Y3QgR3JhZGllbnRTdG9wIHsKICAgICB7IH0KIH07CiAK
LVBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRX
aXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKK1Bhc3NSZWZQ
dHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVz
UmVzb2x2ZWQoU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogewogICAgIGJvb2wgZGVyaXZl
ZCA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0b3BzLnNpemUoKTsg
aSsrKQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJ
c0Rlcml2ZWRGcm9tRWxlbWVudChtX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpKSB7CisgICAgICAg
IGlmIChTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21F
bGVtZW50KG1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSkpIHsKICAgICAgICAgICAgIG1fc3RvcHNb
aV0ubV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID0gdHJ1ZTsKICAgICAgICAgICAgIGRlcml2
ZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzgsNyArMTM3LDcgQEAgUGFzc1Jl
ZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHls
ZXNSZXNvbHZlZChTdHlsZVIKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVzdWx0LT5tX3N0b3BzLnNpemUoKTsgaSsrKQotICAgICAgICByZXN1bHQtPm1fc3RvcHNbaV0u
bV9yZXNvbHZlZENvbG9yID0gc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUo
cmVzdWx0LT5tX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpOworICAgICAgICByZXN1bHQtPm1fc3Rv
cHNbaV0ubV9yZXNvbHZlZENvbG9yID0gU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZl
VmFsdWUoc3RhdGUsIHJlc3VsdC0+bV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKTsKIAogICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmgKaW5kZXggOGUxYzc3YjY0MTEwZDk5NjdkMzcyMWIxY2FmYzA1ZjI5ZjgxMTUyZi4uNDU5ODFl
MmU1NmFmZTMxYzFmODc2ZjgwMTRhMGUyYThjZDg4ZDFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JhZGllbnRWYWx1ZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDU1NJbWFnZUdl
bmVyYXRvclZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIApAQCAtODksNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBrbm93blRv
QmVPcGFxdWUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKICAgICB2b2lkIGxvYWRTdWJp
bWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKSB7IH0KLSAgICBQYXNzUmVmUHRyPENTU0dyYWRp
ZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZXIqKTsKKyAg
ICBQYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVk
KFN0eWxlUmVzb2x2ZXI6OlN0YXRlJik7CiAKIHByb3RlY3RlZDoKICAgICBDU1NHcmFkaWVudFZh
bHVlKENsYXNzVHlwZSBjbGFzc1R5cGUsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdCwgQ1NTR3Jh
ZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NUb1N0eWxlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcApp
bmRleCA3MjFmZDhlOTAxYjVlYmJmMWNmNmNkNzQ5ZmE4ZjUzZjFjZmJhNDliLi5mZGMwNGNhZmQz
MDZkYTk2ODAwZTBhZTM2YWU4NzY2Mjc3YzFmYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuY3BwCkBAIC00MywyMiArNDMsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5k
ZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6c3R5bGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3Jl
c29sdmVyLT5zdHlsZSgpOworICAgIHJldHVybiBtX3N0YXRlLnN0eWxlKCk7CiB9CiAgICAgCiBS
ZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fcmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKTsKKyAgICByZXR1cm4gbV9z
dGF0ZS5yb290RWxlbWVudFN0eWxlKCk7CiB9CiAKIGJvb2wgQ1NTVG9TdHlsZU1hcDo6dXNlU1ZH
Wm9vbVJ1bGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+dXNlU1ZHWm9vbVJ1
bGVzKCk7CisgICAgcmV0dXJuIG1fc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCk7CiB9CiAgICAgCiBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1RvU3R5bGVNYXA6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fcmVzb2x2
ZXItPnN0eWxlSW1hZ2UocHJvcGVydHlJZCwgdmFsdWUpOworICAgIHJldHVybiBTdHlsZVJlc29s
dmVyOjpzdHlsZUltYWdlKG1fc3RhdGUsIHByb3BlcnR5SWQsIHZhbHVlKTsKIH0KIAogdm9pZCBD
U1NUb1N0eWxlTWFwOjptYXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIq
IGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVG9TdHlsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaAppbmRl
eCAzY2IxMjE1MGE4NDNlOGE0OGUzOWE1YjU0MTM1NzU5Mjk0YzQxNjczLi43Zjg3MjBhNDg2Yzky
Y2E0YzMwYWY2NDM0ZGU4Zjk4ZGI3ZTJkYmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVG9TdHlsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFw
LmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNp
bmNsdWRlICJMZW5ndGhCb3guaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiIAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMyLDcgKzMzLDYgQEAgY2xhc3MgQ1NTVmFsdWU7CiBjbGFz
cyBBbmltYXRpb247CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFN0eWxlSW1hZ2U7Ci1jbGFz
cyBTdHlsZVJlc29sdmVyOwogY2xhc3MgTmluZVBpZWNlSW1hZ2U7CiAKIGNsYXNzIENTU1RvU3R5
bGVNYXAgewpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBDU1NUb1N0eWxlTWFwIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIENTU1RvU3R5bGVNYXAoU3R5bGVS
ZXNvbHZlciogcmVzb2x2ZXIpIDogbV9yZXNvbHZlcihyZXNvbHZlcikgeyB9CisgICAgQ1NTVG9T
dHlsZU1hcChTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpIDogbV9zdGF0ZShzdGF0ZSkgeyB9
CiAKICAgICB2b2lkIG1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllcios
IENTU1ZhbHVlKik7CiAgICAgdm9pZCBtYXBGaWxsQ2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5
ZXIqLCBDU1NWYWx1ZSopOwpAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgogICAgIC8vIGR1cmlu
ZyB0aGUgcmVzb2x2ZS4KICAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NT
UHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAotICAgIFN0eWxlUmVzb2x2ZXIqIG1fcmVzb2x2ZXI7
CisgICAgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIG1fc3RhdGU7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggZDFlOWM2MGQzYjlkZWQ3ZTIw
ZmM3NjVlOWM3N2E0MzE2ZTNiNmQxMy4uOTI2YzY5MWE4YmY0Njg2ZGExOGM5NWE0OGM2MTNiMjFl
NjZjYjY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcApA
QCAtMTAyLDE0ICsxMDIsMTMgQEAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFs
dWUoU1ZHQ29sb3IqIHN2Z0NvbG9yLCBjb25zdCBDb2xvciYgZmdDb2xvcikKICAgICByZXR1cm4g
Y29sb3I7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkoY29uc3QgU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSAwOwogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAg
ICAgICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOwogCi0gICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBTVkdSZW5kZXJT
dHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3NTVkdTdHlsZSgpOwogCiAgICAg
Ym9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVk
VmFsdWUoKTsKQEAgLTIzMSwxNiArMjMwLDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAgICAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHls
ZSgpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFyZW50U3R5
bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludENvbG9yKCksIHN2
Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICAgICAg
c3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBz
dmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWlu
dFVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWlu
dFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRDb2xvcigpLCBTVkdSZW5k
ZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50
VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludENvbG9yKCksIFNWR1JlbmRl
clN0eWxlOjppbml0aWFsRmlsbFBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1
ZS0+aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0g
c3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUt
PnNldEZpbGxQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NT
VmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCks
IGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFp
bnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0
ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNDgs
MTYgKzI0NywxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
aXNJbmhlcml0KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1Bh
cmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50
VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHls
ZS0+c3Ryb2tlUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUt
PnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFR5cGUoKSwgc3ZnUGFy
ZW50U3R5bGUtPnN0cm9rZVBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50
VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQ
YWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludENvbG9yKCksIFNW
R1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAg
ICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFs
U3Ryb2tlUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRDb2xv
cigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VXJpKCksIHN0YXRlLmFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFp
bnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29s
b3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSks
IHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dFN0cm9rZVBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NW
YWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmkoKSwg
c3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtNTcwLDcgKzU2OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAg
ICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSA6IDA7CiAgICAgICAgICAg
ICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKLSAgICAgICAgICAg
ICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBjb2xvciA9IFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7CiAKICAgICAgICAgICAgIC8vIC13ZWJr
aXQtc3ZnLXNoYWRvdyBkb2VzIHNob3VsZCBub3QgaGF2ZSBhIHNwcmVhZCBvciBzdHlsZQogICAg
ICAgICAgICAgQVNTRVJUKCFpdGVtLT5zcHJlYWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVy
LmNwcAppbmRleCA0ZDg3OGIyZTliMzI1ZTI1ZWUzNmFkOGNiZjJiMjAwZjJmMzgyMTBhLi4xYmI2
MTA0ZWY5ZTJhNjhlMzdhYWUyZDFjYzgwZGQyMWJiNDIyODFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVCdWlsZGVyLmNwcApAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVk
ZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApAQCAtNjEsNyArNjAsNyBAQCBjbGFzcyBBcHBseVBy
b3BlcnR5RXhwYW5kaW5nIHsKIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlE
IGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGlj
IGlubGluZSB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgaWYgKGlkID09IENT
U1Byb3BlcnR5SW52YWxpZCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTY5LDIwICs2OCwyMCBA
QCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgdGFibGUgPSBTdHlsZUJ1aWxk
ZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpOwogICAgICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXIm
IGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQpOwogICAgICAgICBpZiAoaGFuZGxl
ci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRW
YWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAg
ICAgYXBwbHlJbmhlcml0VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsK
LSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyKTsKLSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPG9uZT4ocHJvcGVydHlJRCwg
c3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0YXRl
KTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0YXRlKTsK
KyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3RhdGUpOworICAg
ICAgICBhcHBseUluaGVyaXRWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUp
CiAgICAgewogICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtOTAsMjAgKzg5LDIwIEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgU3R5
bGVCdWlsZGVyJiB0YWJsZSA9IFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CiAg
ICAgICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFu
ZGxlcihpZCk7CiAgICAgICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGhh
bmRsZXIuYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAg
ICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
OjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxvbmU+KHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTx0d28+
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTx0
aHJlZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZh
bHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaXRp
YWxWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJ
bml0aWFsVmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5pdGlh
bFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaXRpYWxWYWx1
ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxm
b3VyPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZpdmU+
KHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJ
RCBpZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
ICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5SW52YWxpZCkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTExMSwxOSArMTEwLDE5IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgU3R5bGVCdWls
ZGVyJiB0YWJsZSA9IFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CiAgICAgICAg
IGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFuZGxlcihp
ZCk7CiAgICAgICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGhhbmRsZXIu
YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgICAg
ICBoYW5kbGVyLmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghZXhwYW5k
VmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXBwbHlWYWx1ZTxvbmU+KHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTx0d28+
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTx0
aHJlZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBseVZh
bHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBw
bHlWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAg
IGFwcGx5VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBhcHBs
eVZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1
ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTxm
b3VyPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPGZpdmU+
KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhh
bmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhl
cml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CiB9OwpAQCAtMTM0
LDkgKzEzMyw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHls
ZSogc3R5bGUsIFNldHRlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZh
bHVlKTsgfQogICAgIHN0YXRpYyBHZXR0ZXJUeXBlIHZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSkg
eyByZXR1cm4gKHN0eWxlLT4qZ2V0dGVyRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgSW5pdGlh
bFR5cGUgaW5pdGlhbCgpIHsgcmV0dXJuICgqaW5pdGlhbEZ1bmN0aW9uKSgpOyB9Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikgeyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCB2YWx1ZShz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSB7
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGluaXRpYWwoKSk7IH0KLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqLCBDU1NWYWx1
ZSopIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkgeyBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCB2
YWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpIHsgc2V0
VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW5pdGlhbCgpKTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmLCBDU1NWYWx1ZSopIHsg
fQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFBy
b3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFw
cGx5VmFsdWUpOyB9CiB9OwogCkBAIC0xNDQsMTAgKzE0MywxMCBAQCB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2V0dGVyVHlwZSwgR2V0dGVyVHlwZSAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbiko
KSBjb25zdAogY2xhc3MgQXBwbHlQcm9wZXJ0eURlZmF1bHQgewogcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgU2V0dGVyVHlwZSB2YWx1ZSkgeyAo
c3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksICpzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhh
bmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTYwLDE2ICsxNTksMTYgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIE51bWJlclR5cGUsIE51bWJlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVy
RnVuY3Rpb24pKCkgY29uc3QKIGNsYXNzIEFwcGx5UHJvcGVydHlOdW1iZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTnVtYmVyVHlwZSB2
YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IGlkTWFwc1RvTWludXNPbmUpCi0gICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAtMSk7CisgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCAtMSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZTxOdW1iZXJUeXBl
PihDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgc2V0VmFsdWUo
c3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlPE51bWJlclR5cGU+KENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhh
bmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTgxLDcgKzE4MCw3IEBAIHB1YmxpYzoK
IHRlbXBsYXRlIDxTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBj
b25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiksIFN0eWxlSW1hZ2UqICgqaW5pdGlhbEZ1bmN0aW9uKSgpLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5PgogY2xhc3MgQXBwbHlQcm9wZXJ0eVN0eWxlSW1hZ2UgewogcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4q
c2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVl
KSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdGF0ZS5zdHlsZSgpLT4q
c2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3RhdGUsIHByb3BlcnR5
LCB2YWx1ZSkpOyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
ICAgICB7CiAgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURl
ZmF1bHRCYXNlPFN0eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiwgc2V0dGVyRnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVh
dGVIYW5kbGVyKCk7CkBAIC0xOTgsMjggKzE5NywyOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgaGFzQXV0byhSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+Kmhhc0F1dG9G
dW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyB2b2lkIHNldEF1dG8oUmVuZGVyU3R5bGUqIHN0eWxl
KSB7IChzdHlsZS0+KnNldEF1dG9GdW5jdGlvbikoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBpZiAoaGFzQXV0byhzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSkKLSAgICAgICAgICAgIHNldEF1dG8oc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSk7CisgICAgICAgIGlmIChoYXNBdXRvKHN0YXRlLnBhcmVudFN0eWxlKCkp
KQorICAgICAgICAgICAgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgdmFsdWUoc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgdmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpIHsgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsgfQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSkgeyBzZXRBdXRvKHN0YXRlLnN0eWxlKCkpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gYXV0b0lkZW50aXR5KQotICAgICAgICAgICAgc2V0QXV0byhzdHls
ZVJlc29sdmVyLT5zdHlsZSgpKTsKKyAgICAgICAgICAgIHNldEF1dG8oc3RhdGUuc3R5bGUoKSk7
CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBOdW1iZXIpCi0gICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgZWxz
ZSBpZiAodmFsdWVUeXBlID09IENvbXB1dGVMZW5ndGgpCi0gICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCks
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOworICAgICAgICAgICAg
c2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVl
LCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtMjI3LDI3ICsyMjYsMjcg
QEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5Q2xpcCB7CiBwcml2YXRlOgotICAgIHN0
YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xl
bmd0aChTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50
ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8
IEF1dG9Db252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5y
b290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSk7CisgICAgICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNv
bnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IEF1dG9D
b252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRl
LnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAg
ICB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCk7CisgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHN0YXRlLnBh
cmVudFN0eWxlKCk7CiAgICAgICAgIGlmICghcGFyZW50U3R5bGUtPmhhc0NsaXAoKSkKLSAgICAg
ICAgICAgIHJldHVybiBhcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVy
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChwYXJlbnRTdHlsZS0+
Y2xpcFRvcCgpLCBwYXJlbnRTdHlsZS0+Y2xpcFJpZ2h0KCksIHBhcmVudFN0eWxlLT5jbGlwQm90
dG9tKCksIHBhcmVudFN0eWxlLT5jbGlwTGVmdCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBhcHBseUluaXRp
YWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENs
aXAocGFyZW50U3R5bGUtPmNsaXBUb3AoKSwgcGFyZW50U3R5bGUtPmNsaXBSaWdodCgpLCBwYXJl
bnRTdHlsZS0+Y2xpcEJvdHRvbSgpLCBwYXJlbnRTdHlsZS0+Y2xpcExlZnQoKSk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0
aCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7
CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5n
dGgoKSwgTGVuZ3RoKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNl
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjU1LDE1ICsyNTQsMTUgQEAgcHVi
bGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAoUmVjdCogcmVj
dCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRSZWN0VmFsdWUoKSkgewotICAgICAgICAgICAgTGVuZ3Ro
IHRvcCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT50b3AoKSk7Ci0gICAg
ICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVj
dC0+cmlnaHQoKSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvTGVuZ3Ro
KHN0eWxlUmVzb2x2ZXIsIHJlY3QtPmJvdHRvbSgpKTsKLSAgICAgICAgICAgIExlbmd0aCBsZWZ0
ID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPmxlZnQoKSk7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHRvcCwgcmlnaHQsIGJvdHRvbSwg
bGVmdCk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKHRy
dWUpOworICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVj
dC0+dG9wKCkpOworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvTGVuZ3RoKHN0
YXRlLCByZWN0LT5yaWdodCgpKTsKKyAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0
VG9MZW5ndGgoc3RhdGUsIHJlY3QtPmJvdHRvbSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBsZWZ0
ID0gY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0LT5sZWZ0KCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q2xpcCh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKICAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5n
dGgoKSwgTGVuZ3RoKCkpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
SGFzQ2xpcChmYWxzZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKExlbmd0
aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yODEsNDAg
KzI4MCw0MCBAQCB0ZW1wbGF0ZSA8Q29sb3JJbmhlcml0IGluaGVyaXRDb2xvckZyb21QYXJlbnQs
CiAgICAgICAgICAgQ29sb3IgKCppbml0aWFsRnVuY3Rpb24pKCkgPSAmZGVmYXVsdEluaXRpYWxD
b2xvcj4KIGNsYXNzIEFwcGx5UHJvcGVydHlDb2xvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewogICAgICAgICAvLyBWaXNpdGVk
IGxpbmsgc3R5bGUgY2FuIG5ldmVyIGV4cGxpY2l0bHkgaW5oZXJpdCBmcm9tIHBhcmVudCB2aXNp
dGVkIGxpbmsgc3R5bGUgc28gbm8gc2VwYXJhdGUgZ2V0dGVycyBhcmUgbmVlZGVkLgotICAgICAg
ICBDb2xvciBjb2xvciA9IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT4qZ2V0dGVyRnVu
Y3Rpb24pKCk7Ci0gICAgICAgIGFwcGx5Q29sb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBjb2xvci5p
c1ZhbGlkKCkgPyBjb2xvciA6IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT4qZGVmYXVs
dEZ1bmN0aW9uKSgpKTsKKyAgICAgICAgQ29sb3IgY29sb3IgPSAoc3RhdGUucGFyZW50U3R5bGUo
KS0+KmdldHRlckZ1bmN0aW9uKSgpOworICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3RhdGUsIGNv
bG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogKHN0YXRlLnBhcmVudFN0eWxlKCktPipkZWZhdWx0RnVu
Y3Rpb24pKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlKQogICAgIHsKLSAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIGlu
aXRpYWxGdW5jdGlvbigpKTsKKyAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0YXRlLCBpbml0aWFs
RnVuY3Rpb24oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChpbmhlcml0
Q29sb3JGcm9tUGFyZW50ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Q3VycmVudGNvbG9yKQotICAgICAgICAgICAgYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBhcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlE
LCBzdGF0ZSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIt
PmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQotICAgICAgICAgICAgICAgIChzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGVS
ZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQotICAgICAgICAgICAg
ICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbiko
c3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUsIC8q
IGZvclZpc2l0ZWRMaW5rICovIHRydWUpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+
KnNldHRlckZ1bmN0aW9uKShTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShz
dGF0ZSwgcHJpbWl0aXZlVmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCisgICAgICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCkt
Pip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShTdHlsZVJlc29sdmVyOjpjb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIHRy
dWUpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5Q29sb3JWYWx1
ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjb25zdCBDb2xvciYgY29sb3IpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlDb2xvclZhbHVlKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogICAgIHsKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQotICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoY29sb3IpOwotICAgICAgICBpZiAoc3R5bGVSZXNv
bHZlci0+YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQotICAgICAgICAgICAgKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShjb2xvcik7
CisgICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKKyAgICAg
ICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsKKyAgICAgICAg
aWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKKyAgICAgICAgICAg
IChzdGF0ZS5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoY29sb3IpOwogICAg
IH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJu
IFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwg
JmFwcGx5VmFsdWUpOyB9CkBAIC0zMjMsMTEgKzMyMiwxMSBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8
VGV4dERpcmVjdGlvbiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9p
ZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoVGV4dERpcmVjdGlvbiksIFRleHREaXJl
Y3Rpb24gKCppbml0aWFsRnVuY3Rpb24pKCk+CiBjbGFzcyBBcHBseVByb3BlcnR5RGlyZWN0aW9u
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24sIGdldHRlckZ1bmN0aW9uLCBUZXh0
RGlyZWN0aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgaW5pdGlhbEZ1bmN0aW9u
Pjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCk7Ci0gICAgICAgIGlm
IChlbGVtZW50ICYmIHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSA9PSBlbGVtZW50LT5kb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4
dERpcmVjdGlvbiwgZ2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIHNldHRlckZ1bmN0aW9u
LCBUZXh0RGlyZWN0aW9uLCBpbml0aWFsRnVuY3Rpb24+OjphcHBseVZhbHVlKHByb3BlcnR5SUQs
IHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50
KCk7CisgICAgICAgIGlmIChlbGVtZW50ICYmIHN0YXRlLmVsZW1lbnQoKSA9PSBlbGVtZW50LT5k
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKICAgICAgICAgICAgIGVsZW1lbnQtPmRvY3Vt
ZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOwogICAgIH0KIApA
QCAtMzU0LDcgKzM1Myw3IEBAIHRlbXBsYXRlIDxMZW5ndGggKFJlbmRlclN0eWxlOjoqZ2V0dGVy
RnVuY3Rpb24pKCkgY29uc3QsCiBjbGFzcyBBcHBseVByb3BlcnR5TGVuZ3RoIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0aCB2YWx1
ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTM2MiwzOSArMzYxLDM5IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7CiAgICAgICAgIGlmIChub25lRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgICAgIGlmIChub25lVW5kZWZpbmVkKQotICAg
ICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChVbmRl
ZmluZWQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgo
VW5kZWZpbmVkKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIHNldFZh
bHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAobGVn
YWN5SW50cmluc2ljRW5hYmxlZCkgewogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlSW50cmluc2ljKQotICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChJbnRyaW5zaWMpKTsKKyAgICAgICAgICAg
ICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoSW50cmluc2ljKSk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU1pbklu
dHJpbnNpYykKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBMZW5ndGgoTWluSW50cmluc2ljKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUu
c3R5bGUoKSwgTGVuZ3RoKE1pbkludHJpbnNpYykpOwogICAgICAgICB9CiAgICAgICAgIGlmIChp
bnRyaW5zaWNFbmFibGVkKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50KQotICAgICAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5Db250ZW50KSk7CisgICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1pbkNvbnRlbnQpKTsKICAg
ICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
V2Via2l0TWF4Q29udGVudCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBMZW5ndGgoTWF4Q29udGVudCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIExlbmd0aChNYXhDb250ZW50KSk7CiAgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZpbGxBdmFpbGFi
bGUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVu
Z3RoKEZpbGxBdmFpbGFibGUpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHls
ZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRGaXRDb250ZW50KQotICAgICAg
ICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChGaXRDb250
ZW50KSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKEZp
dENvbnRlbnQpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhdXRvRW5hYmxlZCAmJiBwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7CisgICAgICAgICAgICBzZXRW
YWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoKSk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgICAg
ICBsZW5ndGguc2V0UXVpcmsocHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1ZSgpKTsKLSAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGxlbmd0aCk7CisgICAgICAg
ICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBsZW5ndGgpOwogICAgICAgICB9IGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKSwgUGVyY2VudCkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CiAgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0
aCgpKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0Nh
bGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdl
TGVuZ3RoKCkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZl
VmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKICAgICB9CiAKICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtNDA5LDE2ICs0MDgsMTYgQEAgdGVt
cGxhdGUgPFN0cmluZ0lkZW50QmVoYXZpb3IgaWRlbnRCZWhhdmlvciwgY29uc3QgQXRvbWljU3Ry
aW5nJiAoUmVuZGVyU3R5bGU6OioKIGNsYXNzIEFwcGx5UHJvcGVydHlTdHJpbmcgewogcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlm
ICgoaWRlbnRCZWhhdmlvciA9PSBNYXBOb25lVG9OdWxsICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHx8IChpZGVudEJlaGF2aW9yID09
IE1hcEF1dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVB
dXRvKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIG51bGxB
dG9tKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIG51bGxBdG9tKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
cHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAgICAgc2V0VmFsdWUo
c3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwogICAgIH0K
ICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTQz
MSw3ICs0MzAsNyBAQCB0ZW1wbGF0ZSA8TGVuZ3RoU2l6ZSAoUmVuZGVyU3R5bGU6OipnZXR0ZXJG
dW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OgogY2xhc3MgQXBwbHlQcm9wZXJ0
eUJvcmRlclJhZGl1cyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVy
U3R5bGUqIHN0eWxlLCBMZW5ndGhTaXplIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9u
KSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDQ4LDE3ICs0NDcsMTcgQEAgcHVi
bGljOgogICAgICAgICBlbHNlIGlmIChwYWlyLT5maXJzdCgpLT5pc1ZpZXdwb3J0UGVyY2VudGFn
ZUxlbmd0aCgpKQogICAgICAgICAgICAgcmFkaXVzV2lkdGggPSBwYWlyLT5maXJzdCgpLT52aWV3
cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAgZWxzZSBpZiAocGFpci0+Zmlyc3QoKS0+
aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHJhZGl1c1dp
ZHRoID0gTGVuZ3RoKChwYWlyLT5maXJzdCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgICAg
ICByYWRpdXNXaWR0aCA9IExlbmd0aCgocGFpci0+Zmlyc3QoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRv
Q2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUu
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
YWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICByYWRpdXNX
aWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSk7CiAgICAgICAgIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAg
ICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgocGFpci0+c2Vjb25kKCktPmdldERvdWJsZVZhbHVl
KCksIFBlcmNlbnQpOwogICAgICAgICBlbHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNWaWV3cG9y
dFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNl
Y29uZCgpLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAgZWxzZSBpZiAocGFp
ci0+c2Vjb25kKCktPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAg
ICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5jc3NDYWxjVmFsdWUo
KS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
KSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5j
c3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwor
ICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPmNvbXB1dGVMZW5ndGg8
TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGludCB3aWR0aCA9IHJhZGl1c1dpZHRo
LnZhbHVlKCk7CiAgICAgICAgIGludCBoZWlnaHQgPSByYWRpdXNIZWlnaHQudmFsdWUoKTsKICAg
ICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQpAQCAtNDY5LDcgKzQ2OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcmFkaXVzSGVpZ2h0OyAvLyBOdWxsIG91
dCB0aGUgb3RoZXIgdmFsdWUuCiAKICAgICAgICAgTGVuZ3RoU2l6ZSBzaXplKHJhZGl1c1dpZHRo
LCByYWRpdXNIZWlnaHQpOwotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBzaXplKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgc2l6ZSk7CiAgICAgfQog
ICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtNTAz
LDExICs1MDIsMTEgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsCiAgICAgICAgICAgdm9pZCAoQ1NT
VG9TdHlsZU1hcDo6Km1hcEZpbGxGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwg
Q1NTVmFsdWUqKT4KIGNsYXNzIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXIgewogcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAg
RmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xh
eWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdGF0ZS5z
dHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIEZpbGxMYXllciogcHJl
dkNoaWxkID0gMDsKLSAgICAgICAgY29uc3QgRmlsbExheWVyKiBjdXJyUGFyZW50ID0gKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipsYXllcnNGdW5jdGlvbikoKTsKKyAgICAgICAgY29u
c3QgRmlsbExheWVyKiBjdXJyUGFyZW50ID0gKHN0YXRlLnBhcmVudFN0eWxlKCktPipsYXllcnNG
dW5jdGlvbikoKTsKICAgICAgICAgd2hpbGUgKGN1cnJQYXJlbnQgJiYgKGN1cnJQYXJlbnQtPip0
ZXN0RnVuY3Rpb24pKCkpIHsKICAgICAgICAgICAgIGlmICghY3VyckNoaWxkKSB7CiAgICAgICAg
ICAgICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IGxheWVyLiovCkBAIC01MjcsMTggKzUyNiwx
OSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZpbGxMYXllciogY3VyckNoaWxk
ID0gKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKKyAg
ICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3RhdGUuc3R5bGUoKS0+KmFjY2Vzc0xheWVy
c0Z1bmN0aW9uKSgpOwogICAgICAgICAoY3VyckNoaWxkLT4qc2V0RnVuY3Rpb24pKCgqaW5pdGlh
bEZ1bmN0aW9uKShmaWxsTGF5ZXJUeXBlKSk7CiAgICAgICAgIGZvciAoY3VyckNoaWxkID0gY3Vy
ckNoaWxkLT5uZXh0KCk7IGN1cnJDaGlsZDsgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCkp
CiAgICAgICAgICAgICAoY3VyckNoaWxkLT4qY2xlYXJGdW5jdGlvbikoKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKLSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5ZXIq
IGN1cnJDaGlsZCA9IChzdGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CiAg
ICAgICAgIEZpbGxMYXllciogcHJldkNoaWxkID0gMDsKKyAgICAgICAgQ1NTVG9TdHlsZU1hcCBz
dHlsZU1hcChzdGF0ZSk7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKQogI2lmIEVO
QUJMRShDU1NfSU1BR0VfU0VUKQogICAgICAgICAmJiAhdmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgp
CkBAIC01NTIsMTIgKzU1MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGN1cnJD
aGlsZCA9IG5ldyBGaWxsTGF5ZXIoZmlsbExheWVyVHlwZSk7CiAgICAgICAgICAgICAgICAgICAg
IHByZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZpbGxGdW5jdGlvbiko
cHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSkpOworICAgICAgICAgICAgICAgIChzdHlsZU1hcC4qbWFwRmlsbEZ1bmN0aW9uKShwcm9wZXJ0
eUlkLCBjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7CiAg
ICAgICAgICAgICAgICAgcHJldkNoaWxkID0gY3VyckNoaWxkOwogICAgICAgICAgICAgICAgIGN1
cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPiptYXBGaWxsRnVu
Y3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWUpOworICAgICAgICAgICAgKHN0eWxl
TWFwLiptYXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWUpOwogICAg
ICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7CiAgICAgICAgIH0KICAgICAg
ICAgd2hpbGUgKGN1cnJDaGlsZCkgewpAQCAtNTgzLDcgKzU4Myw3IEBAIHRlbXBsYXRlIDx0eXBl
bmFtZSBULAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGggewogcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgVCB2YWx1ZSkgeyAoc3R5
bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIC8v
IG5vdGU6IENTU1Byb3BlcnR5TGV0dGVyL1dvcmRTcGFjaW5nIHJpZ2h0IG5vdyBzZXRzIHRvIHpl
cm8gaWYgaXQncyBub3QgYSBwcmltaXRpdmUgdmFsdWUgZm9yIHNvbWUgcmVhc29uLi4uCiAgICAg
ICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKQEAgLTYwMiwxMyArNjAyLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgfSBlbHNlIGlmICh0aGlja25lc3NFbmFibGVkICYmIGlkZW50ID09
IENTU1ZhbHVlVGhpY2spIHsKICAgICAgICAgICAgIGxlbmd0aCA9IDU7CiAgICAgICAgIH0gZWxz
ZSBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVJbnZhbGlkKSB7Ci0gICAgICAgICAgICBmbG9hdCB6b29t
ID0gKHN2Z1pvb21FbmFibGVkICYmIHN0eWxlUmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlcygpKSA/
IDEuMGYgOiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAg
ICAgICBmbG9hdCB6b29tID0gKHN2Z1pvb21FbmFibGVkICYmIHN0YXRlLnVzZVNWR1pvb21SdWxl
cygpKSA/IDEuMGYgOiBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKICAgICAgICAg
ICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQgdGhhdCB3YXMgPj0gMSBzaG91bGQgbm90IGJlIGFs
bG93ZWQgdG8gZmFsbCBiZWxvdyAxLgogICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyBib3JkZXIg
bGluZXMgZnJvbSB2YW5pc2hpbmcuCi0gICAgICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1
ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVy
LT5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOworICAgICAgICAgICAgbGVuZ3RoID0gcHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpLCB6b29tKTsKICAgICAgICAgICAgIGlmICh6b29tIDwgMS4wZiAmJiBsZW5ndGgg
PCAxLjApIHsKLSAgICAgICAgICAgICAgICBUIG9yaWdpbmFsTGVuZ3RoID0gcHJpbWl0aXZlVmFs
dWUtPmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjApOworICAgICAgICAgICAgICAgIFQgb3JpZ2luYWxM
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCksIDEuMCk7CiAgICAgICAgICAgICAgICAgaWYgKG9yaWdp
bmFsTGVuZ3RoID49IDEuMCkKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMS4wOwogICAg
ICAgICAgICAgfQpAQCAtNjE4LDcgKzYxOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGxlbmd0
aCA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLCBsZW5ndGgpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBsZW5ndGgpOwog
ICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsK
QEAgLTYzMCwyOCArNjMwLDI4IEBAIHB1YmxpYzoKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBUIChG
b250RGVzY3JpcHRpb246OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoRm9udERlc2Ny
aXB0aW9uOjoqc2V0dGVyRnVuY3Rpb24pKFQpLCBUIGluaXRpYWxWYWx1ZT4KIGNsYXNzIEFwcGx5
UHJvcGVydHlGb250IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgKGZvbnREZXNj
cmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKChzdHlsZVJlc29sdmVyLT5wYXJlbnRGb250RGVzY3Jp
cHRpb24oKS4qZ2V0dGVyRnVuY3Rpb24pKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAoZm9u
dERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlv
bigpLipnZXR0ZXJGdW5jdGlvbikoKSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlh
bFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
cjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKShpbml0aWFsVmFsdWUpOwot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0g
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5m
b250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAoZm9udERlc2NyaXB0aW9uLipz
ZXR0ZXJGdW5jdGlvbikoKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBw
bHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC02
NzYsNTAgKzY3Niw1MCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc2l6ZSAvIDEuMmY7CiAg
ICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRl
KQogICAgIHsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAgICAgZmxvYXQgc2l6
ZSA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUo
KTsKIAogICAgICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29y
ZFNpemUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkua2V5
d29yZFNpemUoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNj
cmlwdGlvbiwgc2l6ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShzdGF0ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS5rZXl3b3JkU2l6ZSgpKTsKKyAgICAgICAgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUo
c3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZsb2F0IHNpemUgPSBzdHlsZVJlc29sdmVyLT5m
b250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRp
dW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0
aW9uKCk7CisgICAgICAgIGZsb2F0IHNpemUgPSBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktl
eXdvcmQoc3RhdGUuZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51
c2VGaXhlZERlZmF1bHRTaXplKCkpOwogCiAgICAgICAgIGlmIChzaXplIDwgMCkKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NT
VmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIFN0eWxl
UmVzb2x2ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIHNpemUpOworICAg
ICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9u
KCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgwKTsKICAgICAgICAg
ZmxvYXQgcGFyZW50U2l6ZSA9IDA7CiAgICAgICAgIGJvb2wgcGFyZW50SXNBYnNvbHV0ZVNpemUg
PSBmYWxzZTsKICAgICAgICAgZmxvYXQgc2l6ZSA9IDA7CiAKLSAgICAgICAgaWYgKHN0eWxlUmVz
b2x2ZXItPnBhcmVudFN0eWxlKCkpIHsKLSAgICAgICAgICAgIHBhcmVudFNpemUgPSBzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7
Ci0gICAgICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7CisgICAgICAgIGlm
IChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7CisgICAgICAgICAgICBwYXJlbnRTaXplID0gc3RhdGUu
cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAg
ICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVz
Y3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlu
dCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CkBAIC03MzMsNyArNzMzLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVYeExhcmdlOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4
eExhcmdlOgotICAgICAgICAgICAgICAgIHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZv
cktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnREZXNjcmlwdGlv
bi51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICAgICAgICAgIHNpemUgPSBTdHlsZVJl
c29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQoc3RhdGUuZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnRE
ZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOwogICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShpZGVudCAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoK
QEAgLTc1MSwxMyArNzUxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICEocHJpbWl0aXZlVmFsdWUtPmlzUGVy
Y2VudGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKSk7CiAg
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICAg
ICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIDEu
MCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPGZsb2F0PihzdGF0ZS5wYXJlbnRTdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCksIDEuMCwgdHJ1ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQ
ZXJjZW50YWdlKCkpCiAgICAgICAgICAgICAgICAgc2l6ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0
RmxvYXRWYWx1ZSgpICogcGFyZW50U2l6ZSkgLyAxMDAuMGY7CiAgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAg
ICAgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0Nh
bGNWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290
RWxlbWVudFN0eWxlKCkpLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKKyAgICAgICAgICAgICAgICBz
aXplID0gcHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5w
YXJlbnRTdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpLT5ldmFsdWF0ZShwYXJlbnRT
aXplKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVy
Y2VudGFnZUxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHNpemUgPSB2YWx1ZUZvckxlbmd0aChw
cmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCksIDAsIHN0eWxlUmVzb2x2
ZXItPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IHZh
bHVlRm9yTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSwg
MCwgc3RhdGUuZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTc2OSw4ICs3NjksOCBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIENhcCBmb250IHNpemUgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCBkb2Vz
bid0IGhhcHBlbi4KICAgICAgICAgc2l6ZSA9IG1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCBz
aXplKTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRp
b24sIHNpemUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoc3RhdGUs
IGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03NzksMTIg
Kzc3OSwxMiBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlGb250V2VpZ2h0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZv
bnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTc5OCw3ICs3OTgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KCpw
cmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5k
bGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTgwOSwzMCArODA5LDMwIEBAIHB1YmxpYzoK
IAogY2xhc3MgQXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAg
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNv
bHZlci0+cGFyZW50Rm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAg
ICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5w
YXJlbnRGb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uY29tbW9u
TGlnYXR1cmVzU3RhdGUoKSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9u
YXJ5TGlnYXR1cmVzU3RhdGUocGFyZW50Rm9udERlc2NyaXB0aW9uLmRpc2NyZXRpb25hcnlMaWdh
dHVyZXNTdGF0ZSgpKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdh
dHVyZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRl
KCkpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSkKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHls
ZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1h
bExpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25h
cnlMaWdhdHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsK
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShGb250
RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKIAotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUu
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgY29tbW9uTGlnYXR1
cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwogICAgICAg
ICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNT
dGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CkBAIC04NzgsMTEg
Kzg3OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24o
KTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnRE
ZXNjcmlwdGlvbigpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVz
U3RhdGUoY29tbW9uTGlnYXR1cmVzU3RhdGUpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSk7
CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUoaGlz
dG9yaWNhbExpZ2F0dXJlc1N0YXRlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRs
ZXIgY3JlYXRlSGFuZGxlcigpCkBAIC04OTgsMTMgKzg5OCwxNCBAQCB0ZW1wbGF0ZSA8Qm9yZGVy
SW1hZ2VUeXBlIGJvcmRlckltYWdlVHlwZSwKICAgICAgICAgICB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlckZ1bmN0aW9uKShjb25zdCBOaW5lUGllY2VJbWFnZSYpPgogY2xhc3MgQXBwbHlQcm9w
ZXJ0eUJvcmRlckltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgTmluZVBp
ZWNlSW1hZ2UgaW1hZ2U7CiAgICAgICAgIGlmIChib3JkZXJJbWFnZVR5cGUgPT0gQm9yZGVyTWFz
aykKICAgICAgICAgICAgIGltYWdlLnNldE1hc2tEZWZhdWx0cygpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZShwcm9wZXJ0eSwgdmFsdWUsIGlt
YWdlKTsKLSAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbiko
aW1hZ2UpOworICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRlKTsKKyAgICAgICAg
c3R5bGVNYXAubWFwTmluZVBpZWNlSW1hZ2UocHJvcGVydHksIHZhbHVlLCBpbWFnZSk7CisgICAg
ICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKGltYWdlKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtOTIxLDI5ICs5MjIs
MjkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW5saW5lIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBn
ZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2Ug
PyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2UoKTsgfQogICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IE5pbmVQ
aWVjZUltYWdlJiB2YWx1ZSkgeyByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLT5z
ZXRCb3JkZXJJbWFnZSh2YWx1ZSkgOiBzdHlsZS0+c2V0TWFza0JveEltYWdlKHZhbHVlKTsgfQog
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAg
IHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpKSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRz
ZXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShnZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShn
ZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBSZXBlYXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5UmVwZWF0RnJvbShnZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5
UmVwZWF0RnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIGltYWdlLmNvcHlJbWFnZVNs
aWNlc0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOworICAgICAg
ICAgICAgaW1hZ2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHls
ZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAg
ICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdl
dFZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgTmluZVBp
ZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSkpOworICAgICAg
ICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5zdHlsZSgpKSk7CiAgICAgICAg
IHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRzZXQ6CiAgICAgICAgICAgICBp
bWFnZS5zZXRPdXRzZXQoTGVuZ3RoQm94KDApKTsKQEAgLTk2MiwyNyArOTYzLDI4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyh0eXBlID09IEJvcmRlckltYWdl
ID8gTGVuZ3RoQm94KExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSksIExl
bmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSkpIDogTGVuZ3RoQm94KCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBp
bWFnZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGlt
YWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNl
SW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOworICAgICAgICBDU1NUb1N0eWxl
TWFwIHN0eWxlTWFwKHN0YXRlKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAg
ICBjYXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLnNldE91dHNldChzdHlsZVJlc29sdmVy
LT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAg
IGltYWdlLnNldE91dHNldChzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlcGVhdDoKLSAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KHZhbHVlLCBp
bWFnZSk7CisgICAgICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2YWx1
ZSwgaW1hZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2xpY2U6Ci0gICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVNsaWNl
KHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZVNs
aWNlKHZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWR0
aDoKLSAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZVJlc29sdmVyLT5zdHls
ZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAgIGltYWdl
LnNldEJvcmRlclNsaWNlcyhzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwg
aW1hZ2UpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUlu
aXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC05OTEsNyArOTkzLDcgQEAgcHVibGljOgog
dGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQsIFN0eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6Kmdl
dHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9u
KShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5bGVJbWFnZSogKCppbml0aWFsRnVuY3Rpb24p
KCk+CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2UgewogcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4q
c2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UoaWQsIHZhbHVlKSk7IH0K
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVy
RnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3RhdGUsIGlkLCB2YWx1ZSkpOyB9
CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CiAgICAg
ICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFN0
eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiwgc2V0dGVy
RnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7
CkBAIC0xMDAzLDExICsxMDA1LDExIEBAIGVudW0gQ291bnRlckJlaGF2aW9yIHtJbmNyZW1lbnQg
PSAwLCBSZXNldH07CiB0ZW1wbGF0ZSA8Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlvcj4K
IGNsYXNzIEFwcGx5UHJvcGVydHlDb3VudGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBl
bXB0eUZ1bmN0aW9uKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKSB7IH0KLSAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGVtcHR5RnVuY3Rpb24oQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVy
aXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAg
ewotICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwotICAgICAgICBDb3VudGVyRGlyZWN0aXZl
TWFwJiBwYXJlbnRNYXAgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hY2Nlc3NDb3Vu
dGVyRGlyZWN0aXZlcygpOworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdGF0
ZS5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAgICAgICBDb3VudGVyRGly
ZWN0aXZlTWFwJiBwYXJlbnRNYXAgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hY2Nlc3NDb3VudGVy
RGlyZWN0aXZlcygpOwogCiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRl
cmF0b3IgSXRlcmF0b3I7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5lbmQoKTsK
QEAgLTEwMjAsMTQgKzEwMjIsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0
YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKIAotICAgICAgICBDb3VudGVyRGlyZWN0
aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0
aXZlcygpOworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdGF0ZS5zdHlsZSgp
LT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwogICAgICAgICB0eXBlZGVmIENvdW50ZXJEaXJl
Y3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogCiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1h
cC5lbmQoKTsKQEAgLTEwNjMsNDIgKzEwNjUsNDIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVBy
b3BlcnR5Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1
cnNvcihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7Ci0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvckxpc3Qoc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKS0+Y3Vyc29ycygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKHN0
YXRlLnBhcmVudFN0eWxlKCktPmN1cnNvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Q3Vyc29yTGlzdChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jdXJzb3JzKCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvcigp
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvcigpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xl
YXJDdXJzb3JMaXN0KCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgp
OwogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAgICAgICAgIENTU1Zh
bHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKICAgICAg
ICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEN1cnNvcihDVVJTT1JfQVVUTyk7CisgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRDdXJzb3IoQ1VSU09SX0FVVE8pOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlz
dC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+
aXNDdXJzb3JJbWFnZVZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlKj4oaXRlbSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQo
c3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpKSkgLy8gRWxlbWVudHMgd2l0aCBTVkcgY3Vyc29ycyBh
cmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgc3R5bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1h
Z2UoQ1NTUHJvcGVydHlDdXJzb3IsIGltYWdlKSwgaW1hZ2UtPmhvdFNwb3QoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoc3RhdGUuZWxl
bWVudCgpKSkgLy8gRWxlbWVudHMgd2l0aCBTVkcgY3Vyc29ycyBhcmUgbm90IGFsbG93ZWQgdG8g
c2hhcmUgc3R5bGUuCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRV
bmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+YWRkQ3Vyc29yKFN0
eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3RhdGUsIENTU1Byb3BlcnR5Q3Vyc29yLCBpbWFnZSks
IGltYWdlLT5ob3RTcG90KCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpw
cmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzSWRlbnQoKSAmJiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jdXJzb3IoKSAhPSBFQ3Vy
c29yKCpwcmltaXRpdmVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzSWRlbnQoKSAmJiBzdGF0ZS5zdHlsZSgpLT5jdXJzb3IoKSAhPSBFQ3Vyc29y
KCpwcmltaXRpdmVWYWx1ZSkpCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vy
c29yKCpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTExMDcsNyArMTEw
OSw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRBbGlnbiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTExMTUsMTMgKzExMTcsMTMgQEAgcHVibGljOgogICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgIT0gQ1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBU
QVNUQVJUKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWdu
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IExFRlQgOiBSSUdIVCk7Ci0gICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPnRleHRBbGlnbigpID09IFRBRU5EKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IFJJR0hUIDogTEVGVCk7CisgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRUZXh0QWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAo
c3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFTVEFSVCkKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGlnbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyBMRUZUIDogUklHSFQpOworICAgICAgICBlbHNlIGlmIChzdGF0
ZS5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQUVORCkKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFRleHRBbGlnbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBSSUdIVCA6IExFRlQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKS0+dGV4dEFsaWduKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4
dEFsaWduKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpKTsKICAgICB9CiAgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xMTMyLDcgKzEx
MzQsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlvbiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEVUZXh0RGVjb3JhdGlvbiB0ID0gUmVuZGVy
U3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbigpOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlz
dEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKQEAgLTExNDAs
NyArMTE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSk7CiAgICAgICAgICAgICB0IHw9ICpz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogICAgICAgICB9Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHREZWNvcmF0aW9uKHQpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvbih0KTsKICAgICB9CiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xMTUxLDcgKzExNTMsNyBA
QCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMTE2MiwxNSArMTE2NCwxNSBAQCBwdWJsaWM6CiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAg
ICAgICAgIGxpbmVIZWlnaHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKTsKICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAg
IGRvdWJsZSBtdWx0aXBsaWVyID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpOwotICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnRleHRTaXplQWRq
dXN0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gc3R5bGVSZXNvbHZl
ci0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0g
c3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICAgICAgaWYgKHN0YXRlLnN0
eWxlKCktPnRleHRTaXplQWRqdXN0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZy
YW1lID0gc3RhdGUuZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgICAgICAgICAgICAgbXVs
dGlwbGllciAqPSBmcmFtZS0+dGV4dFpvb21GYWN0b3IoKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUo
KSwgbXVsdGlwbGllcik7CisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlKCksIG11bHRpcGxpZXIpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5p
c1BlcmNlbnRhZ2UoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ugc2hvdWxk
IG5vdCBiZSByZXN0cmljdGVkIHRvIGFuIGludGVnZXIgaGVyZS4KLSAgICAgICAgICAgIGxpbmVI
ZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnRTaXplKCkgKiBwcmlt
aXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKKyAgICAgICAgICAgIGxp
bmVIZWlnaHQgPSBMZW5ndGgoKHN0YXRlLnN0eWxlKCktPmZvbnRTaXplKCkgKiBwcmltaXRpdmVW
YWx1ZS0+Z2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKICAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IG51bWJl
ciBhbmQgcGVyY2VudGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdHlwZSBvZiBM
ZW5ndGggKGllLiBGaXhlZCBvciBQZXJjZW50KS4KICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBM
ZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7
CkBAIC0xMTc4LDcgKzExODAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0g
cHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dExpbmVIZWlnaHQobGluZUhlaWdodCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVI
ZWlnaHQobGluZUhlaWdodCk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3Jl
YXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTI2NSwxMSArMTI2NywxMSBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKSB7
IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYpIHsgfQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnJlc2V0UGFnZVNpemVUeXBlKCk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnJlc2V0UGFnZVNpemVUeXBlKCk7CiAgICAgICAgIExlbmd0
aCB3aWR0aDsKICAgICAgICAgTGVuZ3RoIGhlaWdodDsKICAgICAgICAgUGFnZVNpemVUeXBlIHBh
Z2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPOwpAQCAtMTI4NSw4ICsxMjg3LDggQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9CiAgICAgICAgICAgICAgICAgaWYgKCFz
ZWNvbmQtPmlzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB3aWR0aCA9IGZpcnN0LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKLSAgICAgICAg
ICAgICAgICBoZWlnaHQgPSBzZWNvbmQtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOworICAgICAg
ICAgICAgICAgIHdpZHRoID0gZmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworICAgICAgICAgICAgICAgIGhlaWdodCA9
IHNlY29uZC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8v
IDxwYWdlLXNpemU+IDxvcmllbnRhdGlvbj4KICAgICAgICAgICAgICAgICAvLyBUaGUgdmFsdWUg
b3JkZXIgaXMgZ3VhcmFudGVlZC4gU2VlIENTU1BhcnNlcjo6cGFyc2VTaXplUGFyYW1ldGVyLgpA
QCAtMTMwNCw3ICsxMzA2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc0xlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gPGxlbmd0aD4KICAgICAgICAg
ICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7Ci0gICAgICAgICAgICAg
ICAgd2lkdGggPSBoZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUo
KSk7CisgICAgICAgICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUo
KSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIDA6CkBAIC0xMzMw
LDI5ICsxMzMyLDI5IEBAIHB1YmxpYzoKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRQYWdl
U2l6ZVR5cGUocGFnZVNpemVUeXBlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0UGFnZVNpemUoTGVuZ3RoU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdlU2l6ZVR5cGUpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRQYWdlU2l6ZShMZW5ndGhTaXplKHdpZHRoLCBoZWlnaHQpKTsKICAgICB9CiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlI
YW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1
ZSk7IH0KIH07CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0ZpbGwoKSk7Ci0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzTWFyaygpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpLT50ZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNp
c0ZpbGwoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoc3Rh
dGUucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0
RW1waGFzaXNDdXN0b21NYXJrKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5p
dGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzRmlsbChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0Zp
bGwoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01h
cmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNNYXJrKCkpOwotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKFJlbmRlclN0eWxl
Ojppbml0aWFsVGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzRmlsbChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0Zp
bGwoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoUmVuZGVy
U3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNNYXJrKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhh
c2lzQ3VzdG9tTWFyaygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZh
bHVlLT5pc1ZhbHVlTGlzdCgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBz
dGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CkBAIC0xMzY2LDExICsxMzY4LDExIEBA
IHB1YmxpYzoKIAogICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCp2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNNYXJrKCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc01hcmsoKnZhbHVlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVs
bEF0b20pOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9t
TWFyayhudWxsQXRvbSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTM3
OSwyMCArMTM4MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSkgewotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxs
RmlsbGVkKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0N1c3RvbSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHByaW1pdGl2ZVZhbHVlLT5n
ZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7CisgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcmtDdXN0b20pOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRpdmVW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21N
YXJrKG51bGxBdG9tKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3Vz
dG9tTWFyayhudWxsQXRvbSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlT3BlbikgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQXV0byk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCpwcmltaXRpdmVW
YWx1ZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRl
eHRFbXBoYXNpc01hcmtBdXRvKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbEZp
bGxlZCk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNNYXJrKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqcHJpbWl0aXZlVmFsdWUpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0xNDE1LDE0ICsxNDE3LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Ym9vbCB0ZXN0KGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uKSB7IHJldHVybiAoYW5pbWF0aW9u
LT4qdGVzdEZ1bmN0aW9uKSgpOyB9CiAgICAgc3RhdGljIHZvaWQgY2xlYXIoQW5pbWF0aW9uKiBh
bmltYXRpb24pIHsgKGFuaW1hdGlvbi0+KmNsZWFyRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMg
VCBpbml0aWFsKCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24pKCk7IH0KLSAgICBzdGF0aWMg
dm9pZCBtYXAoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQW5pbWF0aW9uKiBhbmltYXRp
b24sIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZ1
bmN0aW9uKShhbmltYXRpb24sIHZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lkIG1hcChTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUsIEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFs
dWUpIAorICAgIHsKKyAgICAgICAgQ1NTVG9TdHlsZU1hcCBzdHlsZU1hcChzdGF0ZSk7CisgICAg
ICAgIChzdHlsZU1hcC4qbWFwRnVuY3Rpb24pKGFuaW1hdGlvbiwgdmFsdWUpOworICAgIH0KICAg
ICBzdGF0aWMgQW5pbWF0aW9uTGlzdCogYWNjZXNzQW5pbWF0aW9ucyhSZW5kZXJTdHlsZSogc3R5
bGUpIHsgcmV0dXJuIChzdHlsZS0+KmFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpOyB9CiAgICAg
c3RhdGljIGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFuaW1hdGlvbnMoUmVuZGVyU3R5bGUqIHN0eWxl
KSB7IHJldHVybiAoc3R5bGUtPippbW11dGFibGVBbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKTsg
fQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29s
dmVyLT5zdHlsZSgpKTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50TGlzdCA9
IGFuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSk7CisgICAgICAgIEFuaW1h
dGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOworICAgICAg
ICBjb25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnRMaXN0ID0gYW5pbWF0aW9ucyhzdGF0ZS5wYXJl
bnRTdHlsZSgpKTsKICAgICAgICAgc2l6ZV90IGkgPSAwLCBwYXJlbnRTaXplID0gcGFyZW50TGlz
dCA/IHBhcmVudExpc3QtPnNpemUoKSA6IDA7CiAgICAgICAgIGZvciAoIDsgaSA8IHBhcmVudFNp
emUgJiYgdGVzdChwYXJlbnRMaXN0LT5hbmltYXRpb24oaSkpOyArK2kpIHsKICAgICAgICAgICAg
IGlmIChsaXN0LT5zaXplKCkgPD0gaSkKQEAgLTE0MzYsOSArMTQ0Miw5IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGNsZWFyKGxpc3QtPmFuaW1hdGlvbihpKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQog
ICAgIHsKLSAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nl
c3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBpZiAobGlzdC0+aXNFbXB0eSgp
KQogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwogICAgICAg
ICBzZXRWYWx1ZShsaXN0LT5hbmltYXRpb24oMCksIGluaXRpYWwoKSk7CkBAIC0xNDQ4LDIyICsx
NDU0LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNsZWFyKGxpc3QtPmFuaW1hdGlvbihpKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBh
Y2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOworICAgICAgICBBbmltYXRp
b25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAg
c2l6ZV90IGNoaWxkSW5kZXggPSAwOwogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkp
IHsKICAgICAgICAgICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYW4gYW5p
bWF0aW9uLCBjcmVhdGluZyBuZXcgYW5pbWF0aW9ucyBhcyBuZWVkZWQuICovCiAgICAgICAgICAg
ICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2
YW5jZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkSW5kZXggPD0gbGlzdC0+c2l6ZSgp
KQogICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7
Ci0gICAgICAgICAgICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3QtPmFuaW1hdGlvbihjaGls
ZEluZGV4KSwgaS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtYXAoc3RhdGUsIGxpc3QtPmFu
aW1hdGlvbihjaGlsZEluZGV4KSwgaS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICArK2NoaWxk
SW5kZXg7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
bGlzdC0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246
OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIG1hcChzdHlsZVJlc29sdmVyLCBsaXN0LT5hbmltYXRp
b24oY2hpbGRJbmRleCksIHZhbHVlKTsKKyAgICAgICAgICAgIG1hcChzdGF0ZSwgbGlzdC0+YW5p
bWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZSk7CiAgICAgICAgICAgICBjaGlsZEluZGV4ID0gMTsK
ICAgICAgICAgfQogICAgICAgICBmb3IgKCA7IGNoaWxkSW5kZXggPCBsaXN0LT5zaXplKCk7ICsr
Y2hpbGRJbmRleCkgewpAQCAtMTQ3NywyMiArMTQ4MywyMiBAQCBwdWJsaWM6CiAKIGNsYXNzIEFw
cGx5UHJvcGVydHlPdXRsaW5lU3R5bGUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAg
ICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6
Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRs
aW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxp
bmVTdHlsZUlzQXV0bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVu
ZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91
dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHls
ZT46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpv
dXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGlu
ZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5l
U3R5bGVJc0F1dG8+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAg
ICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6
b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxl
LCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJ
bmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7
Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVy
U3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpz
ZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlh
bE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxl
UmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxl
LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6
OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3Jk
ZXJTdHlsZT46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwor
ICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0
eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0
T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxP
dXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7
CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJT
dHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGlu
ZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6
YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8
T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJ
c0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRv
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseVZhbHVlKHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURl
ZmF1bHQ8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0
eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVS
ZXNvbHZlciwgdmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxPdXRsaW5lSXNB
dXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJl
bmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJT
dHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwg
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlclN0eWxl
LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6
OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3Jk
ZXJTdHlsZT46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9w
ZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBs
eVZhbHVlKTsgfQpAQCAtMTUwMCw3ICsxNTA2LDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVBy
b3BlcnR5UmVzaXplIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUxMiwxMyAr
MTUxOCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86Ci0gICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNl
dHRpbmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKKyAgICAgICAg
ICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBzdGF0ZS5kb2N1bWVudCgpLT5zZXR0aW5ncygp
KQogICAgICAgICAgICAgICAgIHIgPSBzZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCkg
PyBSRVNJWkVfQk9USCA6IFJFU0laRV9OT05FOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByID0gKnByaW1pdGl2ZVZhbHVlOwogICAgICAgICB9Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFJlc2l6ZShyKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0UmVzaXplKHIpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhh
bmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNTMwLDcgKzE1MzYsNyBAQCBwdWJsaWM6CiAKIGNs
YXNzIEFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWduIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
ICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMTUzOCw5ICsxNTQ0LDkgQEAgcHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpCi0gICAgICAg
ICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbigqcHJp
bWl0aXZlVmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldFZlcnRp
Y2FsQWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5n
dGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRl
ZENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4
ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZl
cnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0
ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0x
NTUyLDMyICsxNTU4LDMyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUFzcGVjdFJh
dGlvIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSkKICAgICB7Ci0gICAgICAgIGlmICghc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aGFz
QXNwZWN0UmF0aW8oKSkKKyAgICAgICAgaWYgKCFzdGF0ZS5wYXJlbnRTdHlsZSgpLT5oYXNBc3Bl
Y3RSYXRpbygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihzdHlsZVJlc29sdmVyLT5wYXJlbnRT
dHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihzdHlsZVJlc29sdmVyLT5wYXJlbnRT
dHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0SGFzQXNwZWN0UmF0aW8odHJ1ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVj
dFJhdGlvRGVub21pbmF0b3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9EZW5vbWlu
YXRvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3Io
c3RhdGUucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyhSZW5kZXJTdHlsZTo6
aW5pdGlhbEhhc0FzcGVjdFJhdGlvKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0
aW9EZW5vbWluYXRvcigpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNw
ZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb051bWVyYXRv
cigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oUmVuZGVyU3R5
bGU6OmluaXRpYWxIYXNBc3BlY3RSYXRpbygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
QXNwZWN0UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVu
b21pbmF0b3IoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJh
dG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzQXNwZWN0UmF0aW9WYWx1ZSgp
KSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRp
byhmYWxzZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyhm
YWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgQ1NTQXNwZWN0
UmF0aW9WYWx1ZSogYXNwZWN0UmF0aW9WYWx1ZSA9IHN0YXRpY19jYXN0PENTU0FzcGVjdFJhdGlv
VmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0Fz
cGVjdFJhdGlvKHRydWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3Bl
Y3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUtPmRlbm9taW5hdG9yVmFsdWUoKSk7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9y
KGFzcGVjdFJhdGlvVmFsdWUtPm51bWVyYXRvclZhbHVlKCkpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5kZW5vbWluYXRvclZhbHVl
KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihhc3Bl
Y3RSYXRpb1ZhbHVlLT5udW1lcmF0b3JWYWx1ZSgpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJv
cGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTU4OCw0OCArMTU5NCw0OCBAQCBwdWJs
aWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlab29tIHsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZv
aWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAg
c3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSkKICAgICB7CiAgICAgICAgIC8vIFJlc2V0IHRoZSB6b29tIGluIGVmZmVjdC4gVGhpcyBhbGxv
d3MgdGhlIHNldFpvb20gbWV0aG9kIHRvIGFjY3VyYXRlbHkgY29tcHV0ZSBhIG5ldyB6b29tIGlu
IGVmZmVjdC4KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0aXZlWm9vbShzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpID8gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICBzdGF0
ZS5zZXRFZmZlY3RpdmVab29tKHN0YXRlLnBhcmVudFN0eWxlKCkgPyBzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAg
fQogCiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUp
CiAgICAgewotICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+
em9vbSgpKTsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKKyAgICAgICAgc3Rh
dGUuc2V0Wm9vbShzdGF0ZS5wYXJlbnRTdHlsZSgpLT56b29tKCkpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgcmVz
ZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgcmVzZXRFZmZlY3Rp
dmVab29tKHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlh
bFpvb20oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwogICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShz
dHlsZVJlc29sdmVyKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVy
U3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0
YXRlKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29t
KCkpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlUmVzZXQpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpv
b20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgICAgICBzdGF0
ZS5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAg
ICAgIHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogICAgICAgICB9
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRG9jdW1lbnQp
IHsKLSAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCktPnpvb20oKSA6IFJl
bmRlclN0eWxlOjppbml0aWFsWm9vbSgpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0
RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpv
b20oZG9jWm9vbSk7CisgICAgICAgICAgICBmbG9hdCBkb2Nab29tID0gc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpID8gc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHls
ZTo6aW5pdGlhbFpvb20oKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oZG9j
Wm9vbSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRab29tKGRvY1pvb20pOwogICAgICAgICB9IGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgewotICAgICAgICAgICAgcmVz
ZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgcmVzZXRFZmZlY3Rp
dmVab29tKHN0YXRlKTsKICAgICAgICAgICAgIGlmIChmbG9hdCBwZXJjZW50ID0gcHJpbWl0aXZl
VmFsdWUtPmdldEZsb2F0VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRab29tKHBlcmNlbnQgLyAxMDAuMGYpOworICAgICAgICAgICAgICAgIHN0YXRlLnNldFpvb20o
cGVyY2VudCAvIDEwMC4wZik7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
TnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVy
KTsKKyAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CiAgICAgICAgICAgICBp
ZiAoZmxvYXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkKLSAgICAg
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKG51bWJlcik7CisgICAgICAgICAgICAg
ICAgc3RhdGUuc2V0Wm9vbShudW1iZXIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjQxLDQy
ICsxNjQ3LDQyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eURpc3BsYXkgewogcHJp
dmF0ZToKLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBFRGlzcGxheSBkaXNwbGF5UHJvcGVydHlWYWx1ZSkKKyAg
ICBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJlc29sdmVyOjpT
dGF0ZSYgc3RhdGUsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZhbHVlKQogICAgIHsKICNpZiBF
TkFCTEUoU1ZHKQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpICYmIHN0eWxl
UmVzb2x2ZXItPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50
KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0ZS5zdHlsZSgpLT5z
dHlsZVR5cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgIHJldHVybiAoZGlzcGxheVByb3Bl
cnR5VmFsdWUgPT0gSU5MSU5FIHx8IGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IEJMT0NLIHx8IGRp
c3BsYXlQcm9wZXJ0eVZhbHVlID09IE5PTkUpOwogI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFN
KHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgICAgICBV
TlVTRURfUEFSQU0oZGlzcGxheVByb3BlcnR5VmFsdWUpOwogI2VuZGlmCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSBzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT5kaXNwbGF5KCk7Ci0gICAgICAgIGlmICghaXNWYWxpZERpc3Bs
YXlWYWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKKyAgICAgICAgRURpc3BsYXkgZGlzcGxh
eSA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmRpc3BsYXkoKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlk
RGlzcGxheVZhbHVlKHN0YXRlLCBkaXNwbGF5KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldERpc3BsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEaXNwbGF5KCkp
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KFJlbmRlclN0eWxlOjppbml0aWFs
RGlzcGxheSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEVEaXNw
bGF5IGRpc3BsYXkgPSAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAK
LSAgICAgICAgaWYgKCFpc1ZhbGlkRGlzcGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkp
KQorICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3RhdGUsIGRpc3BsYXkpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldERp
c3BsYXkoZGlzcGxheSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxh
eSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
QEAgLTE2ODksMjEgKzE2OTUsMjEgQEAgdGVtcGxhdGUgPENsaXBQYXRoT3BlcmF0aW9uKiAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGUKIGNsYXNzIEFw
cGx5UHJvcGVydHlDbGlwUGF0aCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUo
UmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiB2YWx1ZSkg
eyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgMCk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgMCk7
CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgU2hhcGVDbGlwUGF0
aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBwcmlt
aXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBl
Rm9yVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKSk7CiAgICAg
ICAgICAgICB9CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsK
ICAgICAgICAgICAgICAgICBTdHJpbmcgY3NzVVJMVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBLVVJMIHVybCA9IHN0eWxlUmVzb2x2ZXIt
PmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGNzc1VSTFZhbHVlKTsKKyAgICAgICAgICAgICAgICBL
VVJMIHVybCA9IHN0YXRlLmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGNzc1VSTFZhbHVlKTsKICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgZG9lc24ndCB3b3JrIHdpdGggZm9yd2FyZCBvciBl
eHRlcm5hbCBTVkcgcmVmZXJlbmNlcyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MDQwNSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBSZWZlcmVuY2VDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGNzc1VSTFZhbHVl
LCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCBSZWZlcmVuY2VDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGNzc1VSTFZh
bHVlLCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCkpKTsKICAgICAgICAgICAgIH0KICNlbmRpZgog
ICAgICAgICB9CkBAIC0xNzIwLDE4ICsxNzI2LDE4IEBAIHRlbXBsYXRlIDxFeGNsdXNpb25TaGFw
ZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVu
CiBjbGFzcyBBcHBseVByb3BlcnR5RXhjbHVzaW9uU2hhcGUgewogcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxFeGNsdXNpb25T
aGFwZVZhbHVlPiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUo
c3RhdGUuc3R5bGUoKSwgMCk7CiAgICAgICAgICAgICAvLyBGSVhNRSBCdWcgMTAyNTcxOiBMYXlv
dXQgZm9yIHRoZSB2YWx1ZSAnb3V0c2lkZS1zaGFwZScgaXMgbm90IHlldCBpbXBsZW1lbnRlZAog
ICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVPdXRzaWRlU2hhcGUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOworICAg
ICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIEV4Y2x1c2lvblNoYXBlVmFsdWU6
OmNyZWF0ZU91dHNpZGVWYWx1ZSgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc1NoYXBlKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVW
YWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2lj
U2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1
ZSgpKSk7Ci0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
c2hhcGUucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVW
YWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2lj
U2hhcGVGb3JWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOwor
ICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzQ2LDIxICsxNzUyLDIxIEBA
IHB1YmxpYzoKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCiBjbGFzcyBBcHBseVBy
b3BlcnR5SW1hZ2VSZXNvbHV0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVy
U3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVu
ZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNl
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBseUluaGVy
aXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0
eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNv
bHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJl
c29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJ
bWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVS
ZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRl
clN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVz
b2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFw
cGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6
OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5
bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBseUluaGVyaXRWYWx1
ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJ
bWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIElt
YWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwg
SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9u
U25hcD46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBw
bHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlv
biwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRl
clN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVy
dHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJv
cGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW1h
Z2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6
c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46OmFwcGx5SW5pdGlhbFZhbHVlKHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJh
c2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25TbmFw
LCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNu
YXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1
dGlvblNuYXA+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsK
LSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVuZGVyU3R5bGU6Omlt
YWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBm
bG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6YXBwbHlJbml0aWFs
VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVydHlE
ZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNv
bHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0SW1h
Z2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5
SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1
dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0
aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29s
dXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBw
bHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBseVByb3BlcnR5
RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwg
JlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0
ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVM
aXN0KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNzgwLDkgKzE3ODYsOSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbiA9IHByaW1pdGl2
ZVZhbHVlLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFgpOwogICAg
ICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlv
blNvdXJjZShzb3VyY2UpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRJbWFn
ZVJlc29sdXRpb25TbmFwKHNuYXApOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2UpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJ
bWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5
SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaAppbmRleCA0
ZmZlODUyMzRjMTNkMGZiYjE0NDZlMDY4ODFjOWY3ZmVmYzcwNjdiLi5iMmNjNGVlMzVmZWVkYWVh
ZDc1ZTdjYTQwNTU4ZTQ0MGRmNzE4MDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCkBA
IC0yNiw2ICsyNiw3IEBACiAjZGVmaW5lIFN0eWxlQnVpbGRlcl9oCiAKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtMzMsMTgg
KzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTVmFsdWU7CiBjbGFzcyBT
dHlsZUJ1aWxkZXI7Ci1jbGFzcyBTdHlsZVJlc29sdmVyOwogCiBjbGFzcyBQcm9wZXJ0eUhhbmRs
ZXIgewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkluaGVyaXRGdW5jdGlvbikoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciopOwotICAgIHR5cGVkZWYgdm9pZCAoKkluaXRpYWxGdW5j
dGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopOwotICAgIHR5cGVkZWYgdm9pZCAo
KkFwcGx5RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqLCBDU1NWYWx1ZSop
OworICAgIHR5cGVkZWYgdm9pZCAoKkluaGVyaXRGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlcjo6U3RhdGUmKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpJbml0aWFsRnVuY3Rpb24p
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJik7CisgICAgdHlwZWRlZiB2b2lk
ICgqQXBwbHlGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmLCBD
U1NWYWx1ZSopOwogICAgIFByb3BlcnR5SGFuZGxlcigpIDogbV9pbmhlcml0KDApLCBtX2luaXRp
YWwoMCksIG1fYXBwbHkoMCkgeyB9CiAgICAgUHJvcGVydHlIYW5kbGVyKEluaGVyaXRGdW5jdGlv
biBpbmhlcml0LCBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbCwgQXBwbHlGdW5jdGlvbiBhcHBseSkg
OiBtX2luaGVyaXQoaW5oZXJpdCksIG1faW5pdGlhbChpbml0aWFsKSwgbV9hcHBseShhcHBseSkg
eyB9Ci0gICAgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIGNvbnN0IHsgQVNTRVJUKG1faW5oZXJpdCk7
ICgqbV9pbmhlcml0KShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsgfQotICAgIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKSBjb25zdCB7IEFTU0VSVChtX2luaXRpYWwpOyAoKm1faW5pdGlhbCkocHJv
cGVydHlJRCwgc3R5bGVSZXNvbHZlcik7IH0KLSAgICB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBwbHkpOyAoKm1fYXBwbHkpKHByb3BlcnR5SUQsIHN0
eWxlUmVzb2x2ZXIsIHZhbHVlKTsgfQorICAgIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpIGNvbnN0IHsg
QVNTRVJUKG1faW5oZXJpdCk7ICgqbV9pbmhlcml0KShwcm9wZXJ0eUlELCBzdGF0ZSk7IH0KKyAg
ICB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlcjo6U3RhdGUmIHN0YXRlKSBjb25zdCB7IEFTU0VSVChtX2luaXRpYWwpOyAoKm1faW5p
dGlhbCkocHJvcGVydHlJRCwgc3RhdGUpOyB9CisgICAgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSog
dmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBwbHkpOyAoKm1fYXBwbHkpKHByb3BlcnR5SUQsIHN0
YXRlLCB2YWx1ZSk7IH0KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2luaGVy
aXQgJiYgbV9pbml0aWFsICYmIG1fYXBwbHk7IH0KICAgICBJbmhlcml0RnVuY3Rpb24gaW5oZXJp
dEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbmhlcml0OyB9CiAgICAgSW5pdGlhbEZ1bmN0
aW9uIGluaXRpYWxGdW5jdGlvbigpIHsgcmV0dXJuIG1faW5pdGlhbDsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGQxNjUxZDVkOTViZjMxM2UwOTcwM2EwNDI5YWRkOWM1
ZDliYzIwMjMuLmQ4OWM4NWRiYWMxZjA4ZDFjZWNhOGRlOGUzZjI2NjFmOWRhYmY4ODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRl
ICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NTdXBwb3J0c1J1bGUuaCIKICNpbmNsdWRl
ICJDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgog
I2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogI2lu
Y2x1ZGUgIkNTU1ZhcmlhYmxlVmFsdWUuaCIKQEAgLTE5NiwxNCArMTk3LDE0IEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkg
XAogaWYgKGlzSW5oZXJpdCkgeyBcCi0gICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXQjI1Byb3AobV9z
dGF0ZS5wYXJlbnRTdHlsZSgpLT5wcm9wKCkpOyBcCisgICAgc3RhdGUuc3R5bGUoKS0+c2V0IyNQ
cm9wKHN0YXRlLnBhcmVudFN0eWxlKCktPnByb3AoKSk7ICBcCiAgICAgcmV0dXJuOyBcCiB9CiAK
ICNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAogSEFORExF
X0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5pdGlhbCkgeyBcCi0gICAgbV9zdGF0ZS5z
dHlsZSgpLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1Byb3AoKSk7IFwKKyAgICBz
dGF0ZS5zdHlsZSgpLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1Byb3AoKSk7IFwK
ICAgICByZXR1cm47IFwKIH0KIApAQCAtMjI1LDcgKzIyNiw2IEBAIHN0YXRpYyBTdHlsZVByb3Bl
cnR5U2V0KiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKICAgICByZXR1cm4gcmlnaHRUb0xlZnRE
ZWNsLmdldCgpOwogfQogCi0KIGlubGluZSBTdGF0aWNDU1NSdWxlTGlzdCogU3R5bGVSZXNvbHZl
cjo6U3RhdGU6OmVuc3VyZVJ1bGVMaXN0KCkKIHsKICAgICBpZiAoIW1fcnVsZUxpc3QpCkBAIC0y
NzEsNyArMjcxLDYgQEAgU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCogZG9j
dW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQogICAgICwgbV92aWV3cG9ydFN0
eWxlUmVzb2x2ZXIoVmlld3BvcnRTdHlsZVJlc29sdmVyOjpjcmVhdGUoZG9jdW1lbnQpKQogI2Vu
ZGlmCiAgICAgLCBtX3N0eWxlQnVpbGRlcihTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRl
cigpKQotICAgICwgbV9zdHlsZU1hcCh0aGlzKQogewogICAgIEVsZW1lbnQqIHJvb3QgPSBkb2N1
bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAKQEAgLTQ1NSwyMyArNDU0LDIyIEBAIGlubGluZSBi
b29sIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCiAKIGJvb2wgTWF0
Y2hpbmdVQVJ1bGVzU2NvcGU6Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7CiAKLXZvaWQgU3R5
bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRj
aFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hS
ZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKICAgICBBU1NFUlQobWF0Y2hSZXF1ZXN0
LnJ1bGVTZXQpOwotICAgIEFTU0VSVChtX3N0YXRlLmVsZW1lbnQoKSk7CisgICAgQVNTRVJUKHN0
YXRlLmVsZW1lbnQoKSk7CiAKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCk7CiAgICAgY29uc3QgU3R5bGVkRWxlbWVudCog
c3R5bGVkRWxlbWVudCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKTsKICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHBzZXVkb0lkID0gZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKICAgICBpZiAoIXBz
ZXVkb0lkLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQoc3R5bGVkRWxlbWVudCk7Ci0gICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+c2hh
ZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVs
ZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRj
aFJlcXVlc3QucnVsZVNldC0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwo
KSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCiAgICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQotICAgICAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVkb1J1
bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+Y3VlUHNldWRvUnVsZXMo
KSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogI2VuZGlmCiAgICAgLy8gQ2hlY2sgd2hldGhl
ciBvdGhlciB0eXBlcyBvZiBydWxlcyBhcmUgYXBwbGljYWJsZSBpbiB0aGUgY3VycmVudCB0cmVl
IHNjb3BlLiBDcml0ZXJpYSBmb3IgdGhpczoKICAgICAvLyBhKSBpdCdzIGEgVUEgcnVsZQpAQCAt
NDg3LDQ0ICs0ODUsNDMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
cyhjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVIKICAgICAvLyBXZSBuZWVk
IHRvIGNvbGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcg
ZWxzZSBpbnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgogICAg
IGlmIChlbGVtZW50LT5oYXNJRCgpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmlkUnVsZXMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29s
dXRpb24oKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmlkUnVs
ZXMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3Qs
IHJ1bGVSYW5nZSk7CiAgICAgaWYgKHN0eWxlZEVsZW1lbnQgJiYgc3R5bGVkRWxlbWVudC0+aGFz
Q2xhc3MoKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0eWxlZEVsZW1lbnQt
PmNsYXNzTmFtZXMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y2xhc3NSdWxlcyhzdHlsZWRFbGVtZW50
LT5jbGFzc05hbWVzKClbaV0uaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAg
ICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3Qu
cnVsZVNldC0+Y2xhc3NSdWxlcyhzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKClbaV0uaW1wbCgp
KSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIH0KIAogICAgIGlmIChlbGVtZW50LT5p
c0xpbmsoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVz
dC5ydWxlU2V0LT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5n
ZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hSZXF1
ZXN0LnJ1bGVTZXQtPmxpbmtQc2V1ZG9DbGFzc1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJh
bmdlKTsKICAgICBpZiAoU2VsZWN0b3JDaGVja2VyOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhl
bGVtZW50KSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVz
dC5ydWxlU2V0LT5mb2N1c1BzZXVkb0NsYXNzUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFu
Z2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNl
dC0+dGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBy
dWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3Qu
cnVsZVNldC0+dW5pdmVyc2FsUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxl
U2V0LT5mb2N1c1BzZXVkb0NsYXNzUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwor
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVT
ZXQtPnRhZ1J1bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwg
cnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNo
UmVxdWVzdC5ydWxlU2V0LT51bml2ZXJzYWxSdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5n
ZSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdp
b24oY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdl
KQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihTdGF0
ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1
bGVSYW5nZSkKIHsKLSAgICBpZiAoIW1fc3RhdGUucmVnaW9uRm9yU3R5bGluZygpKQorICAgIGlm
ICghc3RhdGUucmVnaW9uRm9yU3R5bGluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNp
Z25lZCBzaXplID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVs
ZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
ICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yID0gbWF0Y2hSZXF1ZXN0
LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3I7Ci0g
ICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCktPm5vZGUoKSkpKSB7CisgICAg
ICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4oc3RhdGUucmVnaW9uRm9yU3R5bGluZygpLT5ub2RlKCkpKSkgewogICAgICAgICAg
ICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25T
ZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOwogICAgICAgICAgICAgQVNT
RVJUKHJlZ2lvblJ1bGVzKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNo
UmVxdWVzdChyZWdpb25SdWxlcywgbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzLCBtYXRj
aFJlcXVlc3Quc2NvcGUpLCBydWxlUmFuZ2UpOworICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMoc3RhdGUsIE1hdGNoUmVxdWVzdChyZWdpb25SdWxlcywgbWF0Y2hSZXF1ZXN0LmluY2x1
ZGVFbXB0eVJ1bGVzLCBtYXRjaFJlcXVlc3Quc2NvcGUpLCBydWxlUmFuZ2UpOwogICAgICAgICB9
CiAgICAgfQogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJh
bnNmZXJNYXRjaGVkUnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewot
ICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwg
MzI+JiBtYXRjaGVkUnVsZXMgPSBzdGF0ZS5tYXRjaGVkUnVsZXMoKTsKICAgICBpZiAobWF0Y2hl
ZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc29ydE1hdGNoZWRSdWxl
cygpOworICAgIHNvcnRNYXRjaGVkUnVsZXMoc3RhdGUpOwogCiAgICAgaWYgKHN0YXRlLm1vZGUo
KSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQpAQCAtNTQwLDE5ICs1
MzcsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMo
TWF0Y2hSZXN1bHQmIHJlc3VsdCkKICAgICB9CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0
Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKFN0YXRl
JiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsK
ICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBpZiAo
IW1fc2NvcGVSZXNvbHZlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2ggc2NvcGVk
IGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVi
dWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KLSAgICBpZiAobV9zY29wZVJlc29sdmVy
LT5oYXNTY29wZWRTdHlsZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lz
dGVuY3kobV9zdGF0ZS5lbGVtZW50KCkpKSB7Ci0gICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHls
ZXMgPSBtX3N0YXRlLmVsZW1lbnQoKS0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7
CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJl
c29sdmVyLT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5KHN0YXRlLmVsZW1lbnQoKSkpIHsKKyAgICAg
ICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9IHN0YXRlLmVsZW1lbnQoKS0+dHJlZVNjb3BlKCkt
PmFwcGx5QXV0aG9yU3R5bGVzKCk7CiAgICAgICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7
CiAgICAgICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tTaXpl
KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsraSkgewot
ICAgICAgICAgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOworICAgICAgICAgICAg
c3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZXMu
bGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAog
ICAgICAgICAgICAgY29uc3QgU3R5bGVTY29wZVJlc29sdmVyOjpTdGFja0ZyYW1lJiBmcmFtZSA9
IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFtZUF0KGkpOwpAQCAtNTY3LDExMCArNTY0LDExMiBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQm
IHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogCiAgICAgICAgICAgICBNYXRjaFJlcXVlc3QgbWF0
Y2hSZXF1ZXN0KGZyYW1lLm1fcnVsZVNldCwgaW5jbHVkZUVtcHR5UnVsZXMsIGZyYW1lLm1fc2Nv
cGUpOwogICAgICAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0
aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJl
cXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJl
Z2lvbihtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgICAgICAgICBzb3J0QW5kVHJhbnNm
ZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbihzdGF0ZSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAg
ICAgICAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgbWF0Y2hIb3N0UnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlS
dWxlcyk7CisgICAgbWF0Y2hIb3N0UnVsZXMoc3RhdGUsIHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVs
ZXMpOwogI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShy
ZXN1bHQpOwogICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7CiAjZW5kaWYKIH0K
IAotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hl
c0hvc3RSdWxlcygpCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5k
aWRhdGVNYXRjaGVzSG9zdFJ1bGVzKFN0YXRlJiBzdGF0ZSkKIHsKICNpZiBFTkFCTEUoU0hBRE9X
X0RPTSkKLSAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5
bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX3N0YXRlLmVsZW1lbnQoKSk7Cisg
ICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoc3RhdGUuZWxlbWVudCgpKTsKICNlbHNlCiAgICAg
cmV0dXJuIGZhbHNlOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAjZW5kaWYKIH0KIAotdm9p
ZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhT
dGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
CiB7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgQVNTRVJUKG1fc2NvcGVSZXNvbHZlcik7
CiAKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CisgICAgc3RhdGUubWF0Y2hl
ZFJ1bGVzKCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICBWZWN0b3I8UnVsZVNldCo+
IG1hdGNoZWRSdWxlczsKLSAgICBtX3Njb3BlUmVzb2x2ZXItPm1hdGNoSG9zdFJ1bGVzKG1fc3Rh
dGUuZWxlbWVudCgpLCBtYXRjaGVkUnVsZXMpOworICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hI
b3N0UnVsZXMoc3RhdGUuZWxlbWVudCgpLCBtYXRjaGVkUnVsZXMpOwogICAgIGlmIChtYXRjaGVk
UnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7CiAgICAgICAgIFJ1bGVSYW5nZSBy
dWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwotICAgICAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QobWF0Y2hlZFJ1bGVzLmF0KGktMSksIGluY2x1
ZGVFbXB0eVJ1bGVzLCBtX3N0YXRlLmVsZW1lbnQoKSksIHJ1bGVSYW5nZSk7CisgICAgICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzKHN0YXRlLCBNYXRjaFJlcXVlc3QobWF0Y2hlZFJ1bGVzLmF0KGkt
MSksIGluY2x1ZGVFbXB0eVJ1bGVzLCBzdGF0ZS5lbGVtZW50KCkpLCBydWxlUmFuZ2UpOwogICAg
IH0KLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBzb3J0QW5k
VHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiAjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CiAgICAgVU5VU0VEX1BBUkFN
KGluY2x1ZGVFbXB0eVJ1bGVzKTsKICNlbmRpZgogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhTdGF0ZSYgc3RhdGUsIE1h
dGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7Ci0gICAgbV9zdGF0
ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOworICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFy
KCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxOwogCi0gICAgaWYgKCFtX3N0YXRlLmVsZW1lbnQoKSkKKyAgICBp
ZiAoIXN0YXRlLmVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2ggZ2xv
YmFsIGF1dGhvciBydWxlcy4KICAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fcnVsZVNl
dHMuYXV0aG9yU3R5bGUoKSwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIFJ1bGVSYW5nZSBydWxl
UmFuZ2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwotICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0ZvclJlZ2lvbihtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXMoc3RhdGUsIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbihzdGF0ZSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogI2lm
IEVOQUJMRShTSEFET1dfRE9NKQogICAgIFZlY3RvcjxNYXRjaFJlcXVlc3Q+IG1hdGNoUmVxdWVz
dHM7CiAgICAgbV9ydWxlU2V0cy5zaGFkb3dEaXN0cmlidXRlZFJ1bGVzKCkuY29sbGVjdE1hdGNo
UmVxdWVzdHMoaW5jbHVkZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdHMpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbWF0Y2hSZXF1ZXN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0c1tpXSwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIG1hdGNoUmVxdWVzdHNbaV0sIHJ1bGVSYW5nZSk7CiAj
ZW5kaWYKIAotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIHNv
cnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIAotICAgIG1hdGNoU2Nv
cGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgbWF0Y2hTY29w
ZWRBdXRob3JSdWxlcyhzdGF0ZSwgcmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiB9CiAKLXZv
aWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9v
bCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMo
U3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVz
KQogewogICAgIGlmICghbV9ydWxlU2V0cy51c2VyU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKKyAgICBzdGF0ZS5tYXRj
aGVkUnVsZXMoKS5jbGVhcigpOwogCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUgPSBy
ZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKICAgICBNYXRjaFJlcXVlc3QgbWF0
Y2hSZXF1ZXN0KG1fcnVsZVNldHMudXNlclN0eWxlKCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAg
ICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy51c2VyUnVsZVJhbmdlKCk7Ci0g
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwor
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1
bGVSYW5nZSk7CiAKLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAg
ICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQq
IHJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoU3RhdGUmIHN0YXRlLCBN
YXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKIHsKLSAgICBtX3N0YXRlLm1hdGNo
ZWRSdWxlcygpLmNsZWFyKCk7CisgICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAg
ICAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuc2l6ZSgpIC0gMTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5V
QVJ1bGVSYW5nZSgpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChydWxl
cyksIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIE1hdGNoUmVx
dWVzdChydWxlcyksIHJ1bGVSYW5nZSk7CiAKLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVs
ZXMocmVzdWx0KTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3Vs
dCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNo
UmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChTdGF0ZSYgc3RhdGUsIGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qIHJ1bGVzLCBjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBy
dWxlUmFuZ2UpCiB7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3Rh
dGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1heSBlbmQgdXAg
bG9va2luZyB1cCBzdHlsZSBmb3IgcmFuZG9tIGVsZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgYSBy
ZWN1cnNpdmUgdHJlZSByZXNvbHZlLgogICAgIC8vIEFuY2VzdG9yIGlkZW50aWZpZXIgZmlsdGVy
IHdvbid0IGJlIHVwLXRvLWRhdGUgaW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2UgdGhlIGZh
c3QgcGF0aC4KICAgICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX3NlbGVjdG9yRmlsdGVyLnBh
cmVudFN0YWNrSXNDb25zaXN0ZW50KHN0YXRlLnBhcmVudE5vZGUoKSkgJiYgbWF0Y2hSZXF1ZXN0
LmJlaGF2aW9yQXRCb3VuZGFyeSA9PSBTZWxlY3RvckNoZWNrZXI6OkRvZXNOb3RDcm9zc0JvdW5k
YXJ5OwpAQCAtNjg0LDcgKzY4Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjCiAgICAgICAg
IFN0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUoKTsKICAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bE1hdGNoUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlzKTsKICAgICAgICAgUHNldWRvSWQgZHlu
YW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgICAgICBpZiAocnVsZU1hdGNoZXMocnVsZURhdGEs
IG1hdGNoUmVxdWVzdC5zY29wZSwgZHluYW1pY1BzZXVkbywgbWF0Y2hSZXF1ZXN0LmJlaGF2aW9y
QXRCb3VuZGFyeSkpIHsKKyAgICAgICAgaWYgKHJ1bGVNYXRjaGVzKHN0YXRlLCBydWxlRGF0YSwg
bWF0Y2hSZXF1ZXN0LnNjb3BlLCBkeW5hbWljUHNldWRvLCBtYXRjaFJlcXVlc3QuYmVoYXZpb3JB
dEJvdW5kYXJ5KSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRp
ZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAg
ICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMgPSBydWxlLT5wcm9wZXJ0
aWVzKCk7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwgKHByb3BlcnRpZXMtPmlzRW1w
dHkoKSAmJiAhbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzKSkgewpAQCAtNzEyLDcgKzcx
MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNv
bnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjCiAgICAgICAgICAgICAgICAgICAgIHJ1bGVS
YW5nZS5maXJzdFJ1bGVJbmRleCA9IHJ1bGVSYW5nZS5sYXN0UnVsZUluZGV4OwogCiAgICAgICAg
ICAgICAgICAgLy8gQWRkIHRoaXMgcnVsZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgot
ICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkTWF0Y2hlZFJ1bGUoJnJ1bGVEYXRhKTsKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5hZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEpOwogICAgICAgICAgICAg
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgdHJ1ZSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC03MjgsMzEgKzcy
NywzMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVJ1bGVzKGNvbnN0IFJ1bGVEYXRhKiBy
MSwgY29uc3QgUnVsZURhdGEqIHIyKQogICAgIHJldHVybiAoc3BlY2lmaWNpdHkxID09IHNwZWNp
ZmljaXR5MikgPyByMS0+cG9zaXRpb24oKSA8IHIyLT5wb3NpdGlvbigpIDogc3BlY2lmaWNpdHkx
IDwgc3BlY2lmaWNpdHkyOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRNYXRjaGVkUnVs
ZXMoKQordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKFN0YXRlJiBzdGF0ZSkK
IHsKLSAgICBzdGQ6OnNvcnQobV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5iZWdpbigpLCBtX3N0YXRl
Lm1hdGNoZWRSdWxlcygpLmVuZCgpLCBjb21wYXJlUnVsZXMpOworICAgIHN0ZDo6c29ydChzdGF0
ZS5tYXRjaGVkUnVsZXMoKS5iZWdpbigpLCBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5lbmQoKSwgY29t
cGFyZVJ1bGVzKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNo
UmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKQordm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaEFsbFJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwg
Ym9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCiB7Ci0gICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCk7
CisgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCByZXN1bHQpOwogCiAgICAgLy8gTm93IHdlIGNoZWNr
IHVzZXIgc2hlZXQgcnVsZXMuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQot
ICAgICAgICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hVc2Vy
UnVsZXMoc3RhdGUsIHJlc3VsdCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNoZWNrIGF1dGhvciBy
dWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2VudGF0aW9uYWwgYXR0cmlidXRlcyBtYXBw
ZWQgZnJvbSBIVE1MLgotICAgIGlmIChtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKSkgewotICAgICAg
ICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50
KCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworICAgIGlmIChzdGF0ZS5zdHlsZWRF
bGVtZW50KCkpIHsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0
YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CiAKICAg
ICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9uYWwgbWFwcGVkIGRlY2xhcmF0aW9ucy4KICAg
ICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxscyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBl
ZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCiAgICAgICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1
dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUgZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11
bHRpcGxlIGF0dHJpYnV0ZXMuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVz
dWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKCkpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwg
c3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUoKSk7CiAKLSAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0hUTUxFbGVt
ZW50KCkpIHsKKyAgICAgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNIVE1MRWxlbWVu
dCgpKSB7CiAgICAgICAgICAgICBib29sIGlzQXV0bzsKLSAgICAgICAgICAgIFRleHREaXJlY3Rp
b24gdGV4dERpcmVjdGlvbiA9IHRvSFRNTEVsZW1lbnQobV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkp
LT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAgICAgICAg
ICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChzdGF0ZS5zdHls
ZWRFbGVtZW50KCkpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8p
OwogICAgICAgICAgICAgaWYgKGlzQXV0bykKICAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUHJv
cGVydGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmlnaHREZWNsYXJh
dGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKICAgICAgICAgfQpAQCAtNzYwLDIx
ICs3NTksMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0
JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWUKICAgICAKICAgICAvLyBDaGVjayB0
aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcykKLSAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhyZXN1bHQsIGZhbHNlKTsKKyAg
ICAgICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0ZSwgcmVzdWx0LCBmYWxzZSk7CiAKICAgICAvLyBO
b3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCi0gICAgaWYgKG1fbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpICYmIG1fc3RhdGUuc3R5
bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzICYmIHN0YXRlLnN0eWxlZEVsZW1lbnQoKSAmJiBzdGF0ZS5zdHlsZWRFbGVtZW50
KCktPmlubGluZVN0eWxlKCkpIHsKICAgICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJs
ZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCiAgICAgICAgIC8vIEZJWE1F
OiBNZWRpYSBjb250cm9sIHNoYWRvdyB0cmVlcyBzZWVtIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBj
YWNoaW5nLgotICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9zdGF0ZS5z
dHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFtX3N0YXRlLnN0
eWxlZEVsZW1lbnQoKS0+aXNJblNoYWRvd1RyZWUoKTsKKyAgICAgICAgYm9vbCBpc0lubGluZVN0
eWxlQ2FjaGVhYmxlID0gIXN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKS0+aXNN
dXRhYmxlKCkgJiYgIXN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNJblNoYWRvd1RyZWUoKTsKICAg
ICAgICAgLy8gRklYTUU6IENvbnN0aWZ5LgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0
aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCksIGlzSW5s
aW5lU3R5bGVDYWNoZWFibGUpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJl
c3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLCBpc0lubGluZVN0eWxl
Q2FjaGVhYmxlKTsKICAgICB9CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIE5vdyBjaGVjayBT
TUlMIGFuaW1hdGlvbiBvdmVycmlkZSBzdHlsZS4KLSAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0
aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVu
dCgpICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAg
YWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQq
PihtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygp
LCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CisgICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGll
cyAmJiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBzdGF0ZS5zdHlsZWRFbGVtZW50KCkg
JiYgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgYWRkRWxl
bWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzdGF0
ZS5zdHlsZWRFbGVtZW50KCkpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2Ug
LyogaXNDYWNoZWFibGUgKi8pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaW5jbHVkZVNNSUxQ
cm9wZXJ0aWVzKTsKICNlbmRpZgpAQCAtNzk2LDE0ICs3OTUsMTIgQEAgaW5saW5lIHZvaWQgU3R5
bGVSZXNvbHZlcjo6U3RhdGU6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCiAgICAgbV9lbGVtZW50
TGlua1N0YXRlID0gZSA/IGUtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3RhdGUoKS0+ZGV0ZXJt
aW5lTGlua1N0YXRlKGUpIDogTm90SW5zaWRlTGluazsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmluaXRFbGVtZW50KFN0YXRlJiBzdGF0ZSwgRWxlbWVudCogZSkKIHsKLSAgICBpZiAobV9z
dGF0ZS5lbGVtZW50KCkgIT0gZSkgewotICAgICAgICBtX3N0YXRlLmluaXRFbGVtZW50KGUpOwot
ICAgICAgICBpZiAoZSAmJiBlID09IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSB7
Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxl
bWVudChmYWxzZSk7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNl
dE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKLSAgICAgICAgfQorICAgIHN0YXRlLmluaXRFbGVt
ZW50KGUpOworICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkpIHsKKyAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVs
ZW1lbnQoZmFsc2UpOworICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9u
RG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKICAgICB9CiB9CiAKQEAgLTg5NSwyNiArODkyLDIyIEBA
IE5vZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1
bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VuCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgU3R5bGVS
ZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoUnVsZVNldCogcnVs
ZVNldCkKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1
bGVTZXQoRWxlbWVudCogZSwgUnVsZVNldCogcnVsZVNldCkKIHsKICAgICBpZiAoIXJ1bGVTZXQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFy
KCk7CiAKLSAgICBtX3N0YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpTaGFyaW5nUnVsZXMp
OworICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOworICAgIHN0YXRlLmluaXRFbGVtZW50KGUp
OworICAgIHN0YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpTaGFyaW5nUnVsZXMpOwogICAg
IGludCBmaXJzdFJ1bGVJbmRleCA9IC0xLCBsYXN0UnVsZUluZGV4ID0gLTE7CiAgICAgUnVsZVJh
bmdlIHJ1bGVSYW5nZShmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0gICAgY29sbGVj
dE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVTZXQpLCBydWxlUmFuZ2UpOwotICAgIG1f
c3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKLSAgICBpZiAo
bV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIE1hdGNoUmVxdWVzdChydWxlU2V0KSwgcnVs
ZVJhbmdlKTsKKyAgICByZXR1cm4gIXN0YXRlLm1hdGNoZWRSdWxlcygpLmlzRW1wdHkoKTsKIH0K
IAotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxl
bWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdp
dGhDb250cm9sKGNvbnN0IFN0YXRlJiBzdGF0ZSwgU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29u
c3QKIHsKLSAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwogICAg
IEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpLT50
b0lucHV0RWxlbWVudCgpOwogCkBAIC05NjgsOSArOTYxLDggQEAgc3RhdGljIGlubGluZSBib29s
IGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGVs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5oYXNEaXJl
Y3Rpb25BdXRvKCk7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhh
c0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50KiBzaGFyaW5n
Q2FuZGlkYXRlKSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFz
SWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGNvbnN0IFN0YXRlJiBzdGF0ZSwgU3R5
bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0ZSkgY29uc3QKIHsKLSAgICBjb25zdCBTdGF0ZSYg
c3RhdGUgPSBtX3N0YXRlOwogICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmVsZW1lbnREYXRhKCkg
PT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFu
Z0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6Omxh
bmdBdHRyKSkKQEAgLTEwMTAsMTAgKzEwMDIsOSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJp
bmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVX
aXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBTdHlsZVJlc29s
dmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoY29uc3QgU3RhdGUmIHN0YXRlLCBTdHlsZWRF
bGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1l
bnQtPnJlbmRlclN0eWxlKCk7Ci0gICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAog
ICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDMsNyArMTAzNCw3
IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxl
bWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghc2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0
aW5nQXR0cmlidXRlcyhlbGVtZW50KSkKKyAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVu
dGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoc3RhdGUsIGVsZW1lbnQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpICE9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRkaXRpb25hbFByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNjQsNyAr
MTA1NSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0
eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKGlzQ29udHJvbCAhPSBzdGF0ZS5l
bGVtZW50KCktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50
KSkKKyAgICBpZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woc3RhdGUs
IGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoc3R5bGUtPnRyYW5z
aXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkKQEAgLTExMDQsMTIgKzEwOTUsMTIgQEAg
Ym9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIFN0eWxlZEVs
ZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5v
ZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKK2lubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJl
c29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhjb25zdCBTdGF0ZSYgc3RhdGUsIE5v
ZGUqIG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKIHsKICAgICBmb3IgKDsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgIGlmICghbm9kZS0+aXNTdHls
ZWRFbGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGNhblNoYXJl
U3R5bGVXaXRoRWxlbWVudChzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSkpKQorICAg
ICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KHN0YXRlLCBzdGF0aWNfY2FzdDxTdHls
ZWRFbGVtZW50Kj4obm9kZSkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChjb3Vu
dCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAt
MTExNyw5ICsxMTA4LDggQEAgaW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZp
bmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5vZGUsIHVuc2kKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOwogfQogCi1SZW5kZXJTdHlsZSogU3R5bGVS
ZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQorUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6
OmxvY2F0ZVNoYXJlZFN0eWxlKFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBTdGF0ZSYgc3RhdGUgPSBt
X3N0YXRlOwogICAgIGlmICghc3RhdGUuc3R5bGVkRWxlbWVudCgpIHx8ICFzdGF0ZS5wYXJlbnRT
dHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTE1Miw3ICsxMTQyLDcgQEAgUmVuZGVy
U3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICBTdHlsZWRFbGVt
ZW50KiBzaGFyZUVsZW1lbnQgPSAwOwogICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5zdHls
ZWRFbGVtZW50KCktPnByZXZpb3VzU2libGluZygpOwogICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7
Ci0gICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNp
bkxpc3QsIGNvdW50KTsKKyAgICAgICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHls
ZVNoYXJpbmcoc3RhdGUsIGNvdXNpbkxpc3QsIGNvdW50KTsKICAgICAgICAgaWYgKHNoYXJlRWxl
bWVudCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjb3VzaW5MaXN0ID0gbG9jYXRlQ291
c2luTGlzdChjb3VzaW5MaXN0LT5wYXJlbnRFbGVtZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOwpA
QCAtMTE2MywxMyArMTE1MywxMyBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRl
U2hhcmVkU3R5bGUoKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENhbid0IHNoYXJlIGlm
IHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMgaXMgY2hlY2tlZCBhdCB0aGUgZW5kIGFzIGl0IHNo
b3VsZCByYXJlbHkgZmFpbC4KLSAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1
bGVTZXQobV9ydWxlU2V0cy5zaWJsaW5nKCkpKQorICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzUnVsZVNldChzdGF0ZS5lbGVtZW50KCksIG1fcnVsZVNldHMuc2libGluZygpKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVz
IGFwcGx5LgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3J1
bGVTZXRzLnVuY29tbW9uQXR0cmlidXRlKCkpKQorICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzUnVsZVNldChzdGF0ZS5lbGVtZW50KCksIG1fcnVsZVNldHMudW5jb21tb25BdHRy
aWJ1dGUoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIENhbid0IHNoYXJlIGlmIEBob3N0
IEAtcnVsZXMgYXBwbHkuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0
UnVsZXMoKSkKKyAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhz
dGF0ZSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJl
cXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRo
ZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCiAgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50
c1NoYXJpbmcoc3RhdGUuZWxlbWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQpAQCAtMTE3Nyw3ICsx
MTY3LDcgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkK
ICAgICByZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogfQogCi12b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQordm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFVBUnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQog
ewogICAgIE1hdGNoaW5nVUFSdWxlc1Njb3BlIHNjb3BlOwogCkBAIC0xMTg2LDE1ICsxMTc2LDE1
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQp
CiAgICAgICAgIHJlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOwogICAgIFJ1bGVTZXQqIHVzZXJB
Z2VudFN0eWxlU2hlZXQgPSBtX21lZGl1bS0+bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQi
KQogICAgICAgICA/IENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFByaW50U3R5bGUgOiBD
U1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRTdHlsZTsKLSAgICBtYXRjaFVBUnVsZXMocmVz
dWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKKyAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3Vs
dCwgdXNlckFnZW50U3R5bGVTaGVldCk7CiAKICAgICAvLyBJbiBxdWlya3MgbW9kZSwgd2UgbWF0
Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCiAgICAgaWYgKGRvY3Vt
ZW50KCktPmluUXVpcmtzTW9kZSgpKQotICAgICAgICBtYXRjaFVBUnVsZXMocmVzdWx0LCBDU1NE
ZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRRdWlya3NTdHlsZSk7CisgICAgICAgIG1hdGNoVUFS
dWxlcyhzdGF0ZSwgcmVzdWx0LCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRRdWlya3NT
dHlsZSk7CiAKICAgICAvLyBJZiBkb2N1bWVudCB1c2VzIHZpZXcgc291cmNlIHN0eWxlcyAoaW4g
dmlldyBzb3VyY2UgbW9kZSBvciBpbiB4bWwgdmlld2VyIG1vZGUpLCB0aGVuIHdlIG1hdGNoIHJ1
bGVzIGZyb20gdGhlIHZpZXcgc291cmNlIHN0eWxlIHNoZWV0LgogICAgIGlmIChkb2N1bWVudCgp
LT5pc1ZpZXdTb3VyY2UoKSkKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgQ1NTRGVmYXVs
dFN0eWxlU2hlZXRzOjp2aWV3U291cmNlU3R5bGUoKSk7CisgICAgICAgIG1hdGNoVUFSdWxlcyhz
dGF0ZSwgcmVzdWx0LCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OnZpZXdTb3VyY2VTdHlsZSgpKTsK
IH0KIAogc3RhdGljIHZvaWQgc2V0U3R5bGVzRm9yUGFnaW5hdGlvbk1vZGUoUGFnaW5hdGlvbjo6
TW9kZSBwYWdpbmF0aW9uTW9kZSwgUmVuZGVyU3R5bGUqIHN0eWxlKQpAQCAtMTM5MiwyNSArMTM4
MiwyOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogICAgICAgICByZXR1cm4gc19zdHlsZU5v
dFlldEF2YWlsYWJsZTsKICAgICB9CiAKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAg
IGluaXRFbGVtZW50KGVsZW1lbnQpOworICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOworICAg
IGluaXRFbGVtZW50KHN0YXRlLCBlbGVtZW50KTsKICAgICBzdGF0ZS5pbml0Rm9yU3R5bGVSZXNv
bHZlKGRvY3VtZW50KCksIGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQsIE5PUFNFVURPLCByZWdpb25G
b3JTdHlsaW5nKTsKICAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5n
ICYmICFzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoKSkgewotICAgICAgICBSZW5k
ZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOworICAgICAgICBSZW5k
ZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZShzdGF0ZSk7CiAgICAgICAg
IGlmIChzaGFyZWRTdHlsZSkKICAgICAgICAgICAgIHJldHVybiBzaGFyZWRTdHlsZTsKICAgICB9
CiAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNsb25lRm9yUGFyZW50OworICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGU7CiAKICAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUoKSkgewotICAg
ICAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOwotICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHlsZSgpLCBpc0F0U2hhZG93Qm91
bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0
eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKKyAgICAgICAgc3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlKCk7CisgICAgICAgIHN0eWxlLT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHlsZSgp
LCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3Vu
ZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkpOwotICAgICAg
ICBjbG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdGF0ZS5zdHlsZSgpKTsKKyAg
ICAgICAgc3R5bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCk7CisgICAgICAgIGNsb25lRm9y
UGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlLmdldCgpKTsKICAgICAgICAgc3RhdGUu
c2V0UGFyZW50U3R5bGUoY2xvbmVGb3JQYXJlbnQuZ2V0KCkpOwogICAgIH0KKyAgICBzdGF0ZS5z
ZXRTdHlsZShzdHlsZSk7CisKICAgICAvLyBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIChpbXBs
ZW1lbnRlZCBieSAtd2Via2l0LXVzZXItbW9kaWZ5KSBzaG91bGQKICAgICAvLyBiZSBwcm9wYWdh
dGVkIGZyb20gc2hhZG93IGhvc3QgdG8gZGlzdHJpYnV0ZWQgbm9kZS4KICAgICBpZiAoc3RhdGUu
ZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkpIHsKQEAgLTE0MzgsMTYgKzE0MzEsMTQgQEAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKIAogICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0Owog
ICAgIGlmIChtYXRjaGluZ0JlaGF2aW9yID09IE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzKQotICAg
ICAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOworICAgICAgICBtYXRjaFVBUnVsZXMoc3Rh
dGUsIG1hdGNoUmVzdWx0KTsKICAgICBlbHNlCi0gICAgICAgIG1hdGNoQWxsUnVsZXMobWF0Y2hS
ZXN1bHQsIG1hdGNoaW5nQmVoYXZpb3IgIT0gTWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NNSUwpOwor
ICAgICAgICBtYXRjaEFsbFJ1bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCwgbWF0Y2hpbmdCZWhhdmlv
ciAhPSBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCk7CiAKLSAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KHN0YXRlLCBtYXRjaFJlc3VsdCwgZWxlbWVudCk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5
bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4
dXBzKS4KLSAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRT
dHlsZSgpLCBlbGVtZW50KTsKLQotICAgIHN0YXRlLmNsZWFyKCk7IC8vIENsZWFyIG91dCBmb3Ig
dGhlIG5leHQgcmVzb2x2ZS4KKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZSwgc3R5bGUuZ2V0
KCksIHN0YXRlLnBhcmVudFN0eWxlKCksIGVsZW1lbnQpOwogCiAgICAgZG9jdW1lbnQoKS0+ZGlk
QWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCkBAIC0xNDU1LDQzICsxNDQ2LDQwIEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBl
bGVtZW50LCBSZW5kZXJTCiAgICAgcmV0dXJuIHN0YXRlLnRha2VTdHlsZSgpOwogfQogCi1QYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0
IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1l
LCBLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlbmRl
clN0eWxlKiBlbGVtZW50U3R5bGUsIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlm
cmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQogewogICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKICAg
ICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRp
ZXMocmVzdWx0LCBrZXlmcmFtZS0+cHJvcGVydGllcygpKTsKIAotICAgIEFTU0VSVCghbV9zdGF0
ZS5zdHlsZSgpKTsKLQotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0KICAgICAvLyBDcmVh
dGUgdGhlIHN0eWxlCi0gICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1l
bnRTdHlsZSkpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y2xvbmUoZWxlbWVudFN0eWxlKTsKKyAgICBzdGF0ZS5zZXRTdHlsZShzdHlsZSk7CiAgICAgc3Rh
dGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3Ro
ZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8g
ZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3Qg
cHJvcGVydGllcy4KICAgICBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAgICBpZiAoa2V5
ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdo
UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisgICAgICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAs
IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAog
ICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5v
dy4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CiAKICAgICAvLyBM
aW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250
LXNpemUKICAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCi0gICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7Cisg
ICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUu
bGluZUhlaWdodFZhbHVlKCkpOwogCiAgICAgLy8gTm93IGRvIHJlc3Qgb2YgdGhlIHByb3BlcnRp
ZXMuCiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisgICAgICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgcmVz
dWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVy
aXRlZE9ubHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRo
ZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsCiAgICAgLy8gZ28gYWhlYWQgYW5kIHVwZGF0ZSBp
dCBhIHNlY29uZCB0aW1lLgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KHN0YXRl
KTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBz
dHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworICAgIGxvYWRQZW5kaW5nUmVzb3Vy
Y2VzKHN0YXRlKTsKICAgICAKICAgICAvLyBBZGQgYWxsIHRoZSBhbmltYXRpbmcgcHJvcGVydGll
cyB0byB0aGUga2V5ZnJhbWUuCiAgICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxl
RGVjbGFyYXRpb24gPSBrZXlmcmFtZS0+cHJvcGVydGllcygpKSB7CkBAIC0xNTI4LDE1ICsxNTE2
LDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxl
bWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAKICAgICAvLyBDb25zdHJ1Y3QgYW5kIHBv
cHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQogICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3R5bGVLZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVz
KCk7CisgICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQoKSk7CisgICAgaW5pdEVsZW1lbnQoc3RhdGUs
IGUpOworICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgewogICAgICAg
ICAvLyBBcHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxp
ZmllZCB2ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQKLSAgICAgICAgaW5p
dEVsZW1lbnQoZSk7Ci0gICAgICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVu
dCgpLCBlKTsKLQogICAgICAgICBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSA9IGtleWZy
YW1lc1tpXS5nZXQoKTsKIAogICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMCwg
MCk7Ci0gICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVt
ZW50U3R5bGUsIGtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtleWZyYW1lVmFs
dWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShzdGF0ZSwgZWxlbWVudFN0eWxlLCBrZXlmcmFt
ZSwga2V5ZnJhbWVWYWx1ZSkpOwogCiAgICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHN0eWxl
IHRvIGFsbCB0aGUgaW5kaWNhdGVkIGtleSB0aW1lcwogICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtl
eXM7CkBAIC0xNTU2LDcgKzE1NDQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5
bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogICAgICAg
ICAgICAgemVyb1BlcmNlbnRLZXlmcmFtZS0+c2V0S2V5VGV4dCgiMCUiKTsKICAgICAgICAgfQog
ICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMCwgMCk7Ci0gICAgICAgIGtleWZy
YW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIHplcm9QZXJj
ZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRT
dHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5bGUsIHplcm9QZXJjZW50S2V5
ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKICAgICAgICAgbGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1
ZSk7CiAgICAgfQogCkBAIC0xNTY4LDcgKzE1NTYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Omtl
eWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBl
bAogICAgICAgICAgICAgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZS0+c2V0S2V5VGV4dCgiMTAwJSIp
OwogICAgICAgICB9CiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgxLCAwKTsK
LSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRT
dHlsZSwgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBr
ZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHls
ZSwgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwogICAgICAgICBsaXN0
Lmluc2VydChrZXlmcmFtZVZhbHVlKTsKICAgICB9CiB9CkBAIC0xNTc5LDI0ICsxNTY3LDIyIEBA
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxl
bWVudChFbGVtZW50KiBlLCBjb25zdCBQCiAgICAgaWYgKCFlKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0KLSAgICBpbml0RWxlbWVudChlKTsKLQor
ICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOworICAgIGluaXRFbGVtZW50KHN0YXRlLCBlKTsK
ICAgICBzdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUsIHBhcmVudFN0eWxl
LCBwc2V1ZG9TdHlsZVJlcXVlc3QpOwogICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpj
cmVhdGUoKSk7Ci0gICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20obV9zdGF0ZS5wYXJlbnRT
dHlsZSgpKTsKKyAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHls
ZSgpKTsKIAogICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4gYW55
IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1lIHdh
bGtpbmcKICAgICAvLyB0aG9zZSBydWxlcy4KIAogICAgIC8vIENoZWNrIFVBLCB1c2VyIGFuZCBh
dXRob3IgcnVsZXMuCiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7Ci0gICAgbWF0Y2hVQVJ1
bGVzKG1hdGNoUmVzdWx0KTsKKyAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0KTsK
IAogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgewotICAgICAgICBtYXRjaFVz
ZXJSdWxlcyhtYXRjaFJlc3VsdCwgZmFsc2UpOwotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKG1h
dGNoUmVzdWx0LCBmYWxzZSk7CisgICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0YXRlLCBtYXRjaFJl
c3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHN0YXRlLCBtYXRjaFJlc3Vs
dCwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5pc0VtcHR5KCkpCkBAIC0xNjA0LDEzICsxNTkwLDEzIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBjb25z
dCBQCiAKICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRTdHlsZVR5cGUocHNldWRvU3R5bGVSZXF1ZXN0
LnBzZXVkb0lkKTsKIAotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGUp
OworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoc3RhdGUsIG1hdGNoUmVzdWx0LCBlKTsKIAog
ICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29y
YXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRl
LnN0eWxlKCksIG1fc3RhdGUucGFyZW50U3R5bGUoKSwgMCk7CisgICAgYWRqdXN0UmVuZGVyU3R5
bGUoc3RhdGUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCksIDApOwogCiAgICAg
Ly8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAg
IGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUp
OwogCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCkBAIC0xNjIw
LDEyICsxNjA2LDEzIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBz
ZXVkb1N0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBjb25zdCBQCiAKIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogewot
ICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBkb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0
aGUgZG9jdW1lbnQgc3R5bGUuCisgICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQoKSk7CisgICAgc3Rh
dGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBkb2N1bWVudCgpLT5kb2N1bWVudEVs
ZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1l
bnQgc3R5bGUuCiAKLSAgICBtX3N0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7
Ci0gICAgbV9zdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShtX3N0YXRlLnJvb3RFbGVtZW50U3R5
bGUoKSk7CisgICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKKyAgICBz
dGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwogCi0g
ICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBhZ2VJbmRleCk7CisgICAgY29uc3Qg
Ym9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHN0YXRlLCBwYWdlSW5kZXgpOwogICAgIGNvbnN0IGJv
b2wgaXNGaXJzdCA9IGlzRmlyc3RQYWdlKHBhZ2VJbmRleCk7CiAgICAgY29uc3QgU3RyaW5nIHBh
Z2UgPSBwYWdlTmFtZShwYWdlSW5kZXgpOwogICAgIApAQCAtMTYzNCw0MiArMTYyMSw0MyBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBh
Z2VJbmRleCkKICAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fcnVsZVNldHMudXNlclN0eWxl
KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xv
YmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMgcGVyIHRoZSBIVE1MNSBzcGVj
LgogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9ydWxlU2V0cy5hdXRob3JTdHlsZSgpLCBp
c0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDAp
OworICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKICAgICBib29sIGluaGVyaXRlZE9u
bHkgPSBmYWxzZTsKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKLSAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCByZXN1bHQsIGZhbHNl
LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7
CiAjZW5kaWYKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRp
ZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAx
LCBpbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0
eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBn
b3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgp
OworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdo
ZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX3N0
YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
TGluZUhlaWdodCwgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CisgICAgaWYgKHN0YXRlLmxp
bmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAotICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1bHQs
IGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVk
T25seSk7CiAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRo
aXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBsb2FkUGVuZGluZ1Jl
c291cmNlcyhzdGF0ZSk7CiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVy
KCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdGF0ZS50
YWtlU3R5bGUoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKQog
ewotICAgIG1fc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKKyAgICBTdGF0
ZSBzdGF0ZShkb2N1bWVudCgpKTsKKyAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCkpOwogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdl
IGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNldHRp
bmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkgewotICAgICAgICBpbml0aWFsaXpl
Rm9udFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBk
YXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzdGF0ZSwg
c2V0dGluZ3MpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxl
Y3RvcigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBk
YXRlKDApOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKDApOwogCi0gICAg
cmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CisgICAgcmV0dXJuIHN0YXRlLnRha2VTdHlsZSgp
OwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclRl
eHQoVGV4dCogdGV4dE5vZGUpCkBAIC0xNzY0LDcgKzE3NTIsNyBAQCBzdGF0aWMgYm9vbCBpc0Rp
c3BsYXlGbGV4aWJsZUJveChFRGlzcGxheSBkaXNwbGF5KQogICAgIHJldHVybiBkaXNwbGF5ID09
IEZMRVggfHwgZGlzcGxheSA9PSBJTkxJTkVfRkxFWDsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVy
OjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSwgRWxlbWVudCAqZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5
bGUoU3RhdGUmIHN0YXRlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSwgRWxlbWVudCAqZSkKIHsKICAgICBBU1NFUlQocGFyZW50U3R5bGUpOwogCkBAIC0xOTU3
LDcgKzE5NDUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRl
clN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQogCiAgICAgLy8gTGV0IHRoZSB0
aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhlIHN0eWxlLgogICAgIGlmIChz
dHlsZS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSgp
LCBtX3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBtX3N0YXRl
LmJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgc3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIHN0
YXRlLmJvcmRlckRhdGEoKSwgc3RhdGUuYmFja2dyb3VuZERhdGEoKSwgc3RhdGUuYmFja2dyb3Vu
ZENvbG9yKCkpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxl
LCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc1BzZXVkb1N0eWxl
KEZJUlNUX0xFVFRFUikpCkBAIC0yMDM4LDE4ICsyMDI2LDE4IEBAIHN0YXRpYyB2b2lkIGNoZWNr
Rm9yT3JpZW50YXRpb25DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlKQogICAgIHN0eWxlLT5zZXRG
b250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29s
dmVyOjp1cGRhdGVGb250KCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udChTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLmZvbnREaXJ0eSgpKQorICAgIGlmICghc3RhdGUu
Zm9udERpcnR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1
c3QoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3N0YXRlLnN0eWxlKCk7Ci0gICAgY2hl
Y2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwot
ICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAg
ICBjaGVja0ZvclRleHRTaXplQWRqdXN0KHN0YXRlKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBzdGF0ZS5zdHlsZSgpOworICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdGF0ZSwg
c3R5bGUsIHN0YXRlLnBhcmVudFN0eWxlKCkpOworICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdGF0
ZSwgc3R5bGUsIHN0YXRlLnBhcmVudFN0eWxlKCkpOwogICAgIGNoZWNrRm9yT3JpZW50YXRpb25D
aGFuZ2Uoc3R5bGUpOwogICAgIHN0eWxlLT5mb250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsK
LSAgICBtX3N0YXRlLnNldEZvbnREaXJ0eShmYWxzZSk7CisgICAgc3RhdGUuc2V0Rm9udERpcnR5
KGZhbHNlKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUpCkBA
IC0yMDYyLDM5ICsyMDUwLDM0IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2
ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzCiAgICAgaWYgKCFl
IHx8ICFlLT5kb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBtX3N0YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5n
UnVsZXMpOworICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOworICAgIHN0YXRlLnNldE1vZGUo
U2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpOwogCi0gICAgaW5pdEVsZW1lbnQoZSk7
Ci0gICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUsIDAsIHBzZXVk
b0lkKTsKKyAgICBpbml0RWxlbWVudChzdGF0ZSwgZSk7CisgICAgc3RhdGUuaW5pdEZvclN0eWxl
UmVzb2x2ZShkb2N1bWVudCgpLCBlLCAwLCBwc2V1ZG9JZCk7CiAKICAgICBNYXRjaFJlc3VsdCBk
dW1teTsKICAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykgewogICAg
ICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0Lgot
ICAgICAgICBtYXRjaFVBUnVsZXMoZHVtbXkpOworICAgICAgICBtYXRjaFVBUnVsZXMoc3RhdGUs
IGR1bW15KTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KICAg
ICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICAgICAgbWF0Y2hV
c2VyUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAg
ICAgICBtYXRjaFVzZXJSdWxlcyhzdGF0ZSwgZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlD
U1NSdWxlcyk7CiAgICAgfQogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYm
IChydWxlc1RvSW5jbHVkZSAmIEF1dGhvckNTU1J1bGVzKSkgewotICAgICAgICBtX3N0YXRlLnNl
dFNhbWVPcmlnaW5Pbmx5KCEocnVsZXNUb0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKSk7
CisgICAgICAgIHN0YXRlLnNldFNhbWVPcmlnaW5Pbmx5KCEocnVsZXNUb0luY2x1ZGUgJiBDcm9z
c09yaWdpbkNTU1J1bGVzKSk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhv
ciBzaGVldHMuCi0gICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRl
ICYgRW1wdHlDU1NSdWxlcyk7Ci0KLSAgICAgICAgbV9zdGF0ZS5zZXRTYW1lT3JpZ2luT25seShm
YWxzZSk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoc3RhdGUsIGR1bW15LCBydWxlc1RvSW5j
bHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogICAgIH0KIAotICAgIG1fc3RhdGUuc2V0TW9kZShTZWxl
Y3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKLQotICAgIHJldHVybiBtX3N0YXRlLnRha2VS
dWxlTGlzdCgpOworICAgIHJldHVybiBzdGF0ZS50YWtlUnVsZUxpc3QoKTsKIH0KIAotaW5saW5l
IGJvb2wgU3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRh
LCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIFNl
bGVjdG9yQ2hlY2tlcjo6QmVoYXZpb3JBdEJvdW5kYXJ5IGJlaGF2aW9yQXRCb3VuZGFyeSkKK2lu
bGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKGNvbnN0IFN0YXRlJiBzdGF0ZSwg
Y29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgUHNl
dWRvSWQmIGR5bmFtaWNQc2V1ZG8sIFNlbGVjdG9yQ2hlY2tlcjo6QmVoYXZpb3JBdEJvdW5kYXJ5
IGJlaGF2aW9yQXRCb3VuZGFyeSkKIHsKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotCiAg
ICAgaWYgKHJ1bGVEYXRhLmhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpKSB7CiAgICAgICAgIC8v
IFdlIGtub3cgdGhpcyBzZWxlY3RvciBkb2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8gZWxlbWVu
dHMuCiAgICAgICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHlsZVJlcXVlc3QoKS5wc2V1ZG9JZCAhPSBO
T1BTRVVETykKQEAgLTIxMDUsOSArMjA4OCwxMCBAQCBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVy
OjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lcgog
ICAgICAgICAgICAgaWYgKCFydWxlRGF0YS5oYXNNdWx0aXBhcnRTZWxlY3RvcigpKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChydWxlRGF0YS5z
ZWxlY3RvcigpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgJiYgIVNlbGVjdG9yQ2hlY2tl
cjo6dGFnTWF0Y2hlcyhzdGF0ZS5lbGVtZW50KCksIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZ1FO
YW1lKCkpKQorICAgICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5z
ZWxlY3RvcigpOworICAgICAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKHN0YXRlLmVsZW1lbnQoKSwgc2Vs
ZWN0b3ItPnRhZ1FOYW1lKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBT
ZWxlY3RvckNoZWNrZXJGYXN0UGF0aCBzZWxlY3RvckNoZWNrZXJGYXN0UGF0aChydWxlRGF0YS5z
ZWxlY3RvcigpLCBzdGF0ZS5lbGVtZW50KCkpOworICAgICAgICBTZWxlY3RvckNoZWNrZXJGYXN0
UGF0aCBzZWxlY3RvckNoZWNrZXJGYXN0UGF0aChzZWxlY3Rvciwgc3RhdGUuZWxlbWVudCgpKTsK
ICAgICAgICAgaWYgKCFzZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5tYXRjaGVzUmlnaHRtb3N0QXR0
cmlidXRlU2VsZWN0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjEzNiw3
ICsyMTIwLDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0
IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWUKICAgICBpZiAoIXJlZ2lvblNlbGVj
dG9yIHx8ICFyZWdpb25FbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTZWxl
Y3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KCksIG1fc3RhdGUubW9kZSgpKTsK
KyAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KCksIFNlbGVjdG9y
Q2hlY2tlcjo6UXVlcnlpbmdSdWxlcyk7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogcyA9
IHJlZ2lvblNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKSB7CiAgICAg
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVj
a2luZ0NvbnRleHQocywgcmVnaW9uRWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0
Y2hEaXNhYmxlZCk7CiAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BT
RVVETzsKQEAgLTIxNjEsOSArMjE0NSw5IEBAIExlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0
VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlCiB9CiAK
IHRlbXBsYXRlIDxTdHlsZVJlc29sdmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCog
cHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVy
aXRlZE9ubHksIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCit2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0ltcG9y
dGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlX
aGl0ZWxpc3RUeXBlKQogewotICAgIEFTU0VSVCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9IFBy
b3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSk7Cisg
ICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdp
b24pIHx8IHN0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nl
c3NSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwogCiAgICAgdW5zaWduZWQgcHJvcGVydHlD
b3VudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsKQEAgLTIxOTEsNyArMjE3NSw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsCiAgICAgICAgIGNhc2UgVmFyaWFibGVEZWZpbml0aW9u
czoKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKENTU1Byb3BlcnR5VmFyaWFibGUgPCBmaXJz
dENTU1Byb3BlcnR5LCBDU1NfdmFyaWFibGVfaXNfYmVmb3JlX2ZpcnN0X3Byb3BlcnR5KTsKICAg
ICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKQotICAgICAgICAg
ICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOworICAg
ICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGN1cnJlbnQuaWQoKSwgY3VycmVudC52
YWx1ZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgIGNhc2UgSGlnaFBy
aW9yaXR5UHJvcGVydGllczoKQEAgLTIyMDQsMjYgKzIxODgsMjUgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywg
U3R5bGVSdWwKICNlbmRpZgogICAgICAgICAgICAgLy8gZ2l2ZSBzcGVjaWFsIHByaW9yaXR5IHRv
IGZvbnQteHh4LCBjb2xvciBwcm9wZXJ0aWVzLCBldGMKICAgICAgICAgICAgIGlmIChwcm9wZXJ0
eSA8IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5
KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhcHBseVBy
b3BlcnR5KHN0YXRlLCBjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAg
ICAvLyB3ZSBhcHBseSBsaW5lLWhlaWdodCBsYXRlcgogICAgICAgICAgICAgZWxzZSBpZiAocHJv
cGVydHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIG1fc3RhdGUu
c2V0TGluZUhlaWdodFZhbHVlKGN1cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgc3Rh
dGUuc2V0TGluZUhlaWdodFZhbHVlKGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBMb3dQcmlvcml0eVByb3BlcnRpZXM6CiAgICAgICAgICAgICBpZiAo
cHJvcGVydHkgPiBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShzdGF0ZSwgY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwogICAg
ICAgICB9CiAgICAgfQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHJvY2Vzc1J1
bGUoY29va2llKTsKIH0KIAogdGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6OlN0eWxlQXBwbGljYXRp
b25QYXNzIHBhc3M+Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMo
Y29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sIGlzSW1wb3J0YW50LCBpbnQgc3Rh
cnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRjaFJl
c3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wgaXNJbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQg
ZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSkKIHsKICAgICBpZiAoc3RhcnRJbmRleCA9PSAt
MSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBp
ZiAoc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAg
ICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewogICAgICAg
ICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hS
ZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07CkBAIC0yMjMyLDcgKzIyMTUsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1h
dGNoUmVzdWx0LCBib29sCiAgICAgICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUobGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rKTsKICAg
ICAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUobGlua01h
dGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKTsKIAotICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0aWVzPHBhc3M+KG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCks
IG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHks
IHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFByb3BlcnRpZXMud2hp
dGVsaXN0VHlwZSkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KHN0YXRlLCBt
YXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVs
ZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdo
aXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICAgICAg
fQogICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7CiAg
ICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwpA
QCAtMjI0MCw3ICsyMjIzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbAogICAgIH0KICAgICBm
b3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CiAgICAgICAgIGNv
bnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzW2ldOwotICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4obWF0Y2hl
ZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ld
LCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxp
c3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CisgICAgICAgIGFwcGx5
UHJvcGVydGllczxwYXNzPihzdGF0ZSwgbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQo
KSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25s
eSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53
aGl0ZWxpc3RUeXBlKSk7CiAgICAgfQogfQogCkBAIC0yMzQwLDEwICsyMzIzLDkgQEAgc3RhdGlj
IGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgUmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRj
aGVkUHJvcGVydGllcyhTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICB1bnNpZ25lZCBjYWNoZUhhc2ggPSBtYXRjaFJl
c3VsdC5pc0NhY2hlYWJsZSA/IGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2gobWF0Y2hSZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuZGF0YSgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkpIDogMDsKICAgICBib29sIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAg
IGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBjYWNoZUl0ZW0gPSAwOwpAQCAtMjM2
NywxMCArMjM0OSwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogCiAjaWYgRU5BQkxFKENT
U19WQVJJQUJMRVMpCiAgICAgLy8gRmlyc3QgYXBwbHkgYWxsIHZhcmlhYmxlIGRlZmluaXRpb25z
LCBhcyB0aGV5IG1heSBiZSB1c2VkIGR1cmluZyBhcHBsaWNhdGlvbiBvZiBsYXRlciBwcm9wZXJ0
aWVzLgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0
Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFy
aWFibGVEZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5m
aXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJ
bmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5p
dGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVs
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
LSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVz
dWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwg
MCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+
KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9y
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3Rh
dGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRj
aFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICNlbmRpZgogCiAgICAg
Ly8gTm93IHdlIGhhdmUgYWxsIG9mIHRoZSBtYXRjaGVkIHJ1bGVzIGluIHRoZSBhcHByb3ByaWF0
ZSBvcmRlci4gV2FsayB0aGUgcnVsZXMgYW5kIGFwcGx5CkBAIC0yMzc4LDEwICsyMzYwLDEwIEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJl
c3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgLy8gVGhlIG9yZGVyIGlzICgxKSBoaWdoLXBy
aW9yaXR5IG5vdCBpbXBvcnRhbnQsICgyKSBoaWdoLXByaW9yaXR5IGltcG9ydGFudCwgKDMpIG5v
cm1hbCBub3QgaW1wb3J0YW50CiAgICAgLy8gYW5kICg0KSBub3JtYWwgaW1wb3J0YW50LgogICAg
IHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVz
dWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5s
YXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0
eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hS
ZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVz
dWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJl
c3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQs
IHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
Lmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAKICAgICBpZiAoY2FjaGVJdGVtICYm
IGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdGF0ZS5zdHlsZSgp
LT5lZmZlY3RpdmVab29tKCkpIHsKICAgICAgICAgc3RhdGUuc2V0Rm9udERpcnR5KHRydWUpOwpA
QCAtMjM4OSwzMCArMjM3MSwzMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIH0KIAog
ICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5v
dy4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CiAKICAgICAvLyBM
aW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250
LXNpemUuCiAgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQotICAgICAgICBhcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwor
ICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRl
LmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE1hbnkgcHJvcGVydGllcyBkZXBlbmQgb24g
dGhlIGZvbnQuIElmIGl0IGNoYW5nZXMgd2UganVzdCBhcHBseSBhbGwgcHJvcGVydGllcy4KICAg
ICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpICE9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpKQogICAgICAgICBhcHBseUlu
aGVyaXRlZE9ubHkgPSBmYWxzZTsKIAogICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5
IFVBIHByb3BlcnRpZXMuCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVBy
b3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFS
dWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
KyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUs
IG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRj
aFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICAKICAg
ICAvLyBDYWNoZSBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIHNvIHRoYXQgd2UgY2FuIGV4YW1p
bmUgdGhlbSBsYXRlci4KICAgICBzdGF0ZS5jYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKICAg
ICAKICAgICAvLyBOb3cgZG8gdGhlIGF1dGhvciBhbmQgdXNlciBub3JtYWwgcHJpb3JpdHkgcHJv
cGVydGllcyBhbmQgYWxsIHRoZSAhaW1wb3J0YW50IHByb3BlcnRpZXMuCi0gICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RB
dXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFw
cGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0
eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
QVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkp
OworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0
ZSwgbWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSArIDEs
IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVk
T25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+
KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9y
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihz
dGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxl
LCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwor
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwg
bWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAKICAgICAv
LyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAg
bG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7
CiAgICAgCiAgICAgQVNTRVJUKCFzdGF0ZS5mb250RGlydHkoKSk7CiAgICAgCkBAIC0yNDgyLDEw
ICsyNDY0LDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZl
Y3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywKICAgICB9CiB9CiAKLWJvb2wgU3R5
bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAorYm9vbCBTdHlsZVJl
c29sdmVyOjppc0xlZnRQYWdlKFN0YXRlJiBzdGF0ZSwgaW50IHBhZ2VJbmRleCkgY29uc3QKIHsK
ICAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IGZhbHNlOwotICAgIGlmICghbV9zdGF0ZS5yb290
RWxlbWVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICBpZiAoIXN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICBp
c0ZpcnN0UGFnZUxlZnQgPSB0cnVlOwogCiAgICAgcmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJz
dFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CkBAIC0yNTAzLDE4ICsyNDg1LDMxIEBAIFN0cmluZyBT
dHlsZVJlc29sdmVyOjpwYWdlTmFtZShpbnQgLyogcGFnZUluZGV4ICovKSBjb25zdAogICAgIHJl
dHVybiAiIjsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9TdHlsZShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2soU3RhdGUmIHN0YXRl
LCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7Ci0gICAgaW5pdEVsZW1lbnQo
MCk7Ci0gICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIDAsIHN0eWxl
KTsKLSAgICBtX3N0YXRlLnNldFN0eWxlKHN0eWxlKTsKLSAgICBhcHBseVByb3BlcnR5VG9DdXJy
ZW50U3R5bGUoaWQsIHZhbHVlKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm47Cisg
ICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgaWQsIHZhbHVlKTsKIH0KIAotdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseUZvbnRQcm9wZXJ0eVRvU3R5bGUo
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwYXJzZWRTdHlsZSkK
IHsKLSAgICBpZiAodmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoaWQsIHZhbHVlKTsKKyAg
ICBTdGF0ZSBzdGF0ZShkb2N1bWVudCgpKTsKKyAgICBzdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZl
KGRvY3VtZW50KCksIDAsIHN0eWxlKTsKKyAgICBzdGF0ZS5zZXRTdHlsZShzdHlsZSk7CisKKyAg
ICBhcHBseVByb3BlcnR5V2l0aE51bGxDaGVjayhzdGF0ZSwgQ1NTUHJvcGVydHlGb250RmFtaWx5
LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkp
LmdldCgpKTsKKyAgICBhcHBseVByb3BlcnR5V2l0aE51bGxDaGVjayhzdGF0ZSwgQ1NTUHJvcGVy
dHlGb250U3R5bGUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
Rm9udFN0eWxlKS5nZXQoKSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2soc3RhdGUs
IENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpLmdldCgpKTsKKyAgICBhcHBseVByb3BlcnR5V2l0aE51
bGxDaGVjayhzdGF0ZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKKworICAgIC8vIEFz
IGRlc2NyaWJlZCBpbiBCVUc2NjI5MSwgc2V0dGluZyBmb250LXNpemUgYW5kIGxpbmUtaGVpZ2h0
IG9uIGEgZm9udCBtYXkgZW50YWlsIGEgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhE
b3VibGUgY2FsbCwKKyAgICAvLyB3aGljaCBhc3N1bWVzIHRoZSBmb250TWV0cmljcyBhcmUgYXZh
aWxhYmxlIGZvciB0aGUgYWZmZWN0ZWQgZm9udCwgb3RoZXJ3aXNlIGEgY3Jhc2ggb2NjdXJzIChz
ZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvOTYxMjIpLgorICAgIC8vIFRoZSB1
cGRhdGVGb250KCkgY2FsbHMgYmVsb3cgdXBkYXRlIHRoZSBmb250TWV0cmljcyBhbmQgZW5zdXJl
IHRoZSBwcm9wZXIgc2V0dGluZyBvZiBmb250LXNpemUgYW5kIGxpbmUtaGVpZ2h0LgorICAgIHVw
ZGF0ZUZvbnQoc3RhdGUpOworICAgIGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKHN0YXRlLCBD
U1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eUZvbnRTaXplKS5nZXQoKSk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CisgICAgYXBw
bHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2soc3RhdGUsIENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFy
c2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQo
KSk7CiB9CiAKIGlubGluZSBib29sIGlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQpCkBAIC0yNjE3LDEwICsyNjEyLDYgQEAgaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZl
cjo6aXNWYWxpZEN1ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKIC8vIHdpZHRoL2hl
aWdodC9ib3JkZXIvcGFkZGluZy8uLi4gZnJvbSB0aGUgUmVuZGVyU3R5bGUgLT4gZm9yIFNWRyB0
aGVzZSB2YWx1ZXMgd291bGQgbmV2ZXIgc2NhbGUsCiAvLyBpZiB3ZSdkIHBhc3MgYSAxLjAgem9v
bSBmYWN0b3IgZXZlcnlod2VyZS4gU28gd2Ugb25seSBwYXNzIGEgem9vbSBmYWN0b3Igb2YgMS4w
IGZvciBzcGVjaWZpYwogLy8gcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgYWxsb3dlZCB0byBzY2Fs
ZSB3aXRoaW4gYSB6b29tZWQgU1ZHIGRvY3VtZW50IChsZXR0ZXIvd29yZC1zcGFjaW5nL2ZvbnQt
c2l6ZSkuCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxlcygpCi17Ci0gICAgcmV0
dXJuIG1fc3RhdGUuZWxlbWVudCgpICYmIG1fc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQo
KTsKLX0KIAogc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwg
TGVuZ3RoJiB3b3JraW5nTGVuZ3RoKQogewpAQCAtMjczOCw5ICsyNzI5LDkgQEAgc3RhdGljIGJv
b2wgaGFzVmFyaWFibGVSZWZlcmVuY2UoQ1NTVmFsdWUqIHZhbHVlKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBT
dHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVW
YXJpYWJsZXMoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUs
IFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Np
b25zKQogewotICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Npb24o
aWQsIHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMoKm1fc3RhdGUuc3R5bGUoKS0+
dmFyaWFibGVzKCkpKTsKKyAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBleHBy
ZXNzaW9uKGlkLCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCpzdGF0ZS5zdHls
ZSgpLT52YXJpYWJsZXMoKSkpOwogCiAgICAgaWYgKGtub3duRXhwcmVzc2lvbnMuY29udGFpbnMo
ZXhwcmVzc2lvbikpCiAgICAgICAgIHJldHVybjsgLy8gY3ljbGUgZGV0ZWN0ZWQuCkBAIC0yNzU1
LDI0ICsyNzQ2LDIzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxzCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlc3VsdFNldC0+cHJvcGVydHlDb3VudCgpOyBpKyspIHsKICAgICAgICAg
U3R5bGVQcm9wZXJ0eVNldDo6UHJvcGVydHlSZWZlcmVuY2UgcHJvcGVydHkgPSByZXN1bHRTZXQt
PnByb3BlcnR5QXQoaSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpICE9IENTU1Byb3BlcnR5
VmFyaWFibGUgJiYgaGFzVmFyaWFibGVSZWZlcmVuY2UocHJvcGVydHkudmFsdWUoKSkpCi0gICAg
ICAgICAgICByZXNvbHZlVmFyaWFibGVzKHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCks
IGtub3duRXhwcmVzc2lvbnMpOworICAgICAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhzdGF0ZSwg
cHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFsdWUoKSwga25vd25FeHByZXNzaW9ucyk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQoKSwgcHJvcGVy
dHkudmFsdWUoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBwcm9wZXJ0eS5p
ZCgpLCBwcm9wZXJ0eS52YWx1ZSgpKTsKICAgICB9CiB9CiAjZW5kaWYKIAotdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykK
ICAgICBpZiAoaWQgIT0gQ1NTUHJvcGVydHlWYXJpYWJsZSAmJiBoYXNWYXJpYWJsZVJlZmVyZW5j
ZSh2YWx1ZSkpIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJp
bmc+ID4ga25vd25FeHByZXNzaW9uczsKLSAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhpZCwgdmFs
dWUsIGtub3duRXhwcmVzc2lvbnMpOworICAgICAgICByZXNvbHZlVmFyaWFibGVzKHN0YXRlLCBp
ZCwgdmFsdWUsIGtub3duRXhwcmVzc2lvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIGJvb2wgaXNJbmhlcml0ID0g
c3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7CiAgICAgYm9v
bCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLnBhcmVudE5v
ZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKIApAQCAtMjgwMiwxMSArMjc5Miwx
MSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IG1f
c3R5bGVCdWlsZGVyLnByb3BlcnR5SGFuZGxlcihpZCk7CiAgICAgaWYgKGhhbmRsZXIuaXNWYWxp
ZCgpKSB7CiAgICAgICAgIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5
SW5oZXJpdFZhbHVlKGlkLCB0aGlzKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0
VmFsdWUoaWQsIHN0YXRlKTsKICAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQotICAgICAgICAg
ICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShpZCwgdGhpcyk7CisgICAgICAgICAgICBoYW5k
bGVyLmFwcGx5SW5pdGlhbFZhbHVlKGlkLCBzdGF0ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShpZCwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgaGFu
ZGxlci5hcHBseVZhbHVlKGlkLCBzdGF0ZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0yODM4LDE5ICsyODI4LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAg
Q1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlz
SW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLT5p
c0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dy
YWRpZW50VmFsdWUqPihpdGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0
KCkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGll
bnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChzdGF0ZSkuZ2V0KCkp
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0
ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwog
ICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfSU1BR0Vf
U0VUKQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNl
dFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgQ1NTUHJvcGVydHlD
b250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwog
ICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5n
RnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+
KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIENTU1Byb3BlcnR5Q29udGVu
dCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAg
ICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMjk1Miw3ICsyOTQyLDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KHBhcmVudEZvbnREZXNj
cmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEZhbWlseShwYXJlbnRGb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKSk7CiAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZpZWRGb250KHBhcmVudEZvbnREZXNjcmlwdGlv
bi5pc1NwZWNpZmllZEZvbnQoKSk7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTI5NjIs
MTEgKzI5NTIsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRq
dXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5lcmljIGZhbWlseSBjaGFuZ2UgZnJv
bSBtb25vc3BhY2UKICAgICAgICAgICAgIC8vIHRvIG5vbi1tb25vc3BhY2UuCiAgICAgICAgICAg
ICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVz
ZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVz
Y3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwg
KyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNlKSk7CisgICAgICAgICAg
ICAgICAgc2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3
b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3Jk
U2l6ZSgpIC0gMSwgZmFsc2UpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5l
cmljRmFtaWx5KGluaXRpYWxEZXNjLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBpZiAo
IWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5SXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKSk7
Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAg
ICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTMwNDEsOSArMzAzMSw5IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgIC8vIElmIGN1cnJGYW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQg
bGVhc3Qgb25lIGZhbWlseSBvbiB0aGlzIGRlc2NyaXB0aW9uLgogICAgICAgICBpZiAoY3VyckZh
bWlseSkgewogICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYm
IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZp
eGVkRGVmYXVsdFNpemUpCi0gICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0
aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9u
dERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVs
dFNpemUpKTsKKyAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0
aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9u
dERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVs
dFNpemUpKTsKIAotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CisgICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzA2OCwxMyArMzA1OCwx
MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zcGVj
aWZpZWRMaW5lSGVpZ2h0KCkpOwogICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVl
KDApOwotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Cisg
ICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwpIHsKICAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKTsKICAgICAgICAgICAgIEFTU0VSVChzZXR0aW5ncyk7
IC8vIElmIHdlJ3JlIGRvaW5nIHN0eWxlIHJlc29sdXRpb24sIHRoaXMgZG9jdW1lbnQgc2hvdWxk
IGFsd2F5cyBiZSBpbiBhIGZyYW1lIGFuZCB0aHVzIGhhdmUgc2V0dGluZ3MKICAgICAgICAgICAg
IGlmICghc2V0dGluZ3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaW5p
dGlhbGl6ZUZvbnRTdHlsZShzZXR0aW5ncyk7CisgICAgICAgICAgICBpbml0aWFsaXplRm9udFN0
eWxlKHN0YXRlLCBzZXR0aW5ncyk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUp
IHsKICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZh
bHVlKDApOwpAQCAtMzA5MywyNyArMzA4MywyNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudCgpLT5wcmludGlu
ZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQoKSk7CiAKICAg
ICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFjdG9yLgotICAgICAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNp
ZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJz
b2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVzZVNWR1pvb21S
dWxlcygpKSk7Ci0gICAgICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShn
ZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBzdGF0ZS5zdHlsZSgp
LCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNp
ZmllZFNpemUoKSwgc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkgewogICAgICAgICAgICAg
Rm9udFZhbHVlKiBmb250ID0gc3RhdGljX2Nhc3Q8Rm9udFZhbHVlKj4odmFsdWUpOwogICAgICAg
ICAgICAgaWYgKCFmb250LT5zdHlsZSB8fCAhZm9udC0+dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0
CiAgICAgICAgICAgICAgICAgfHwgIWZvbnQtPnNpemUgfHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwg
IWZvbnQtPmZhbWlseSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Ci0gICAg
ICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlh
bnQuZ2V0KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWln
aHQsIGZvbnQtPndlaWdodC5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRl
LCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOworICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250VmFyaWFudCwgZm9udC0+dmFyaWFu
dC5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZv
bnRXZWlnaHQsIGZvbnQtPndlaWdodC5nZXQoKSk7CiAgICAgICAgICAgICAvLyBUaGUgcHJldmlv
dXMgcHJvcGVydGllcyBjYW4gZGlydHkgb3VyIGZvbnQgYnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJl
YWQgdGhlIGZvbnQncwogICAgICAgICAgICAgLy8gcHJvcGVydGllcyBiYWNrLCB3aGljaCBpcyBz
YWZlLiBIb3dldmVyIGlmIGZvbnQtc2l6ZSBpcyB1c2luZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxs
CiAgICAgICAgICAgICAvLyBuZWVkIHF1ZXJ5IHRoZSBkaXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0
byBnZXQgdGhlIGNvbXB1dGVkIHNpemUuIFRvIGJlIHNhZmUgaW4gdGhpcwogICAgICAgICAgICAg
Ly8gY2FzZSwgbGV0J3MganVzdCB1cGRhdGUgdGhlIGZvbnQgbm93LgotICAgICAgICAgICAgdXBk
YXRlRm9udCgpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXpl
LCBmb250LT5zaXplLmdldCgpKTsKKyAgICAgICAgICAgIHVwZGF0ZUZvbnQoc3RhdGUpOworICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+
c2l6ZS5nZXQoKSk7CiAKICAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShmb250
LT5saW5lSGVpZ2h0LmdldCgpKTsKIAotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVBy
b3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTQ0LDcgKzMxMzQsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBpdGVtLT5zdHls
ZSAmJiBpdGVtLT5zdHlsZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQgOiBO
b3JtYWw7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5j
b2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0
ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlKHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7CiAgICAgICAgICAgICBlbHNlIGlm
IChzdGF0ZS5zdHlsZSgpKQogICAgICAgICAgICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUoKS0+
Y29sb3IoKTsKIApAQCAtMzE3Myw3ICszMTYzLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5jb252ZXJ0VG9M
ZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3Vs
YXRlZENvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
em9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwogICAgICAgICBtYXNr
LnNldE1hc2tEZWZhdWx0cygpOwotICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdl
KGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CisgICAgICAgIENTU1RvU3R5bGVNYXAg
c3R5bGVNYXAoc3RhdGUpOworICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShpZCwg
cmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOwogICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNr
KG1hc2spOwogCiAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFJlZmxlY3QocmVmbGVjdGlv
bi5yZWxlYXNlKCkpOwpAQCAtMzI2NSwxNCArMzI1NiwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdW
YWx1ZSgpKTsKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRl
LnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oc3RhdGUuc3R5bGUoKS0+
bG9jYWxlKCkpKTsKLSAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2l6ZUFk
anVzdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0ZXh0U2l6ZUFkanVz
dCwgVGV4dFNpemVBZGp1c3QpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgIXByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzZXRU
ZXh0U2l6ZUFkanVzdChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8p
OworICAgICAgICBzdGF0ZS5zZXRUZXh0U2l6ZUFkanVzdChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZUF1dG8pOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2lmIEVOQUJM
RShEQVNIQk9BUkRfU1VQUE9SVCkKQEAgLTMzOTksNyArMzM5MCw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICBDb2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSk7Cisg
ICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRp
dmVWYWx1ZSk7CiAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRhcEhpZ2hsaWdodENvbG9yKGNv
bCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDU0LDcgKzM0NDUsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5Ojpy
ZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgc3RhdGUuc3R5bGUoKS0+ZGlyZWN0aW9u
KCksIHN0YXRlLnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOwogICAgICAgICBBU1NFUlQobmV3SWQg
IT0gaWQpOwotICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOworICAg
ICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0eShzdGF0ZSwgbmV3SWQsIHZhbHVlKTsKICAgICB9CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdl
OgpAQCAtMzQ4NCw3ICszNDc1LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUwod3JpdGluZ01vZGUsIFdyaXRpbmdNb2RlKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHNldFdyaXRpbmdNb2RlKCpwcmlt
aXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRXcml0aW5nTW9kZSgqcHJpbWl0aXZl
VmFsdWUpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3Qgb2sgdG8gbW9kaWZ5IGRvY3Vt
ZW50IHN0YXRlIHdoaWxlIGFwcGx5aW5nIHN0eWxlLgogICAgICAgICBpZiAoc3RhdGUuZWxlbWVu
dCgpICYmIHN0YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1l
bnQoKSkKQEAgLTM0OTYsNyArMzQ4Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMKHRleHRPcmllbnRhdGlvbiwgVGV4dE9yaWVudGF0aW9uKTsKIAog
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICBzZXRUZXh0T3JpZW50YXRp
b24oKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFRleHRPcmllbnRhdGlv
bigqcHJpbWl0aXZlVmFsdWUpOwogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTE5LDcg
KzM1MTAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIC8vIENTUyBGb250cyBNb2R1bGUgTGV2ZWwgMwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250RmVhdHVyZVNldHRpbmdzOiB7CiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZU5vcm1hbCkgewotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKHN0YXRlLnN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxGZWF0dXJlU2V0dGluZ3MoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oc3RhdGUuc3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCkBAIC0zNTM4LDcgKzM1MjksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgc2V0dGluZ3MtPmFwcGVuZChGb250RmVhdHVyZShmZWF0dXJlLT50YWcoKSwgZmVhdHVy
ZS0+dmFsdWUoKSkpOwogICAgICAgICB9CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGZWF0
dXJlU2V0dGluZ3Moc2V0dGluZ3MucmVsZWFzZSgpKTsKLSAgICAgICAgc2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNTQ2LDcgKzM1
MzcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXI6IHsK
ICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmlsdGVyLCBGaWx0ZXIpOwogICAg
ICAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGlmIChjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCksIG9wZXJhdGlvbnMpKQorICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhzdGF0
ZSwgdmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0
aW9ucykpCiAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zODc1LDcyICszODY2LDcyIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgZGVmYXVsdDoKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAvLyBUcnkgdGhlIFNW
RyBwcm9wZXJ0aWVzCi0gICAgICAgIGFwcGx5U1ZHUHJvcGVydHkoaWQsIHZhbHVlKTsKKyAgICAg
ICAgYXBwbHlTVkdQcm9wZXJ0eShzdGF0ZSwgaWQsIHZhbHVlKTsKICNlbmRpZgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogfQogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6
OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQorUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKFN0YXRlJiBzdGF0
ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2
YWx1ZS0+aXNJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdGcm9t
VmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPih2YWx1ZSkpOworICAg
ICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3Rh
dGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CiAKICAgICBpZiAodmFsdWUtPmlzSW1h
Z2VHZW5lcmF0b3JWYWx1ZSgpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNHcmFkaWVudFZhbHVl
KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3Bl
cnR5LCBzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4odmFsdWUpLT5ncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBl
bmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUqPih2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21W
YWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPih2YWx1
ZSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHN0YXRlKS5nZXQoKSk7CisgICAgICAgIHJl
dHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNf
Y2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4odmFsdWUpKTsKICAgICB9CiAKICNpZiBFTkFC
TEUoQ1NTX0lNQUdFX1NFVCkKICAgICBpZiAodmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpKQotICAg
ICAgICByZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxD
U1NJbWFnZVNldFZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zy
b21WYWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPih2
YWx1ZSkpOwogI2VuZGlmCiAKICAgICBpZiAodmFsdWUtPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKQot
ICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNf
Y2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGN1cnNv
ck9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0N1cnNv
ckltYWdlVmFsdWUqPih2YWx1ZSkpOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8
U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmIHN0
YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKIHsKICAg
ICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2Uo
KTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1f
c3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAg
ICAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7
CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShTdGF0
ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUq
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsKLSAgICAgICAgbV9zdGF0
ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAg
IHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOwogICAgIH0KICAg
ICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKIH0KIAogI2lmIEVO
QUJMRShDU1NfSU1BR0VfU0VUKQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
OjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VT
ZXRWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNl
dE9yUGVuZGluZ0Zyb21WYWx1ZShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IENTU0ltYWdlU2V0VmFsdWUqIHZhbHVlKQogewotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFn
ZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZVNldChkb2N1bWVudCgpKTsKKyAgICBSZWZQ
dHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoc3Rh
dGUuZG9jdW1lbnQoKSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgp
KQotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHks
IHZhbHVlKTsKKyAgICAgICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9w
ZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAjZW5kaWYKIAot
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjdXJzb3JPclBlbmRpbmdGcm9t
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogdmFsdWUp
CitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zy
b21WYWx1ZShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0N1cnNvcklt
YWdlVmFsdWUqIHZhbHVlKQogewotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVl
LT5jYWNoZWRPclBlbmRpbmdJbWFnZShkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8U3R5bGVJbWFn
ZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2Uoc3RhdGUuZG9jdW1lbnQoKSk7
CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3N0
YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAg
ICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwog
ICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hl
Y2tGb3JUZXh0U2l6ZUFkanVzdCgpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNp
emVBZGp1c3QoU3RhdGUmIHN0YXRlKQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3Rh
dGUuc3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdGF0ZS5zdHlsZSgpOwogCiAg
ICAgaWYgKHN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpKQogICAgICAgICByZXR1cm47CkBAIC0zOTUw
LDE4ICszOTQxLDE4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVz
dCgpCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSog
c3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hl
Y2tGb3Jab29tQ2hhbmdlKFN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkgPT0g
cGFyZW50U3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29u
c3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7
CiAgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOwotICAg
IHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRGb250LnNwZWNpZmllZFNpemUo
KSk7CisgICAgc2V0Rm9udFNpemUoc3RhdGUsIG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRGb250
LnNwZWNpZmllZFNpemUoKSk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250
RGVzY3JpcHRpb24pOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0Zh
bWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFN0YXRlJiBz
dGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAg
ICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCk7CiAKQEAgLTM5OTUsMTEgKzM5ODYsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVj
a0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSoK
ICAgICB9CiAKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9u
dCk7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICBzZXRG
b250U2l6ZShzdGF0ZSwgbmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKICAgICBzdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNv
bHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGluZ3MpCit2b2lkIFN0eWxl
UmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU3RhdGUmIHN0YXRlLCBTZXR0aW5ncyogc2V0
dGluZ3MpCiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFt
aWx5KTsKQEAgLTQwMTEsMTYgKzQwMDIsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFs
aXplRm9udFN0eWxlKFNldHRpbmdzKiBzZXR0aW5ncykKICAgICAgICAgZm9udERlc2NyaXB0aW9u
LmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwogICAgIH0KICAgICBmb250RGVzY3JpcHRp
b24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsK
LSAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1
bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKLSAgICBtX3N0YXRlLnN0eWxlKCktPnNl
dExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotICAgIG1fc3Rh
dGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwotICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOworICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIGZvbnRT
aXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKKyAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdo
dCgpKTsKKyAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CisgICAgc3RhdGUuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6
c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUp
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKFN0YXRlJiBzdGF0ZSwgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCiB7CiAgICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0
YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VT
Vkdab29tUnVsZXMoKSkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0
Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoc3RhdGUuZG9jdW1lbnQoKSwgc3RhdGUuc3R5
bGUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHN0YXRlLnVzZVNW
R1pvb21SdWxlcygpKSk7CiB9CiAKIGZsb2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6
ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1bWVudCwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pv
b21SdWxlcykKQEAgLTQyMTgsMTIgKzQyMDksMTEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KENTU1ByaW1pdGl2ZVZhbHUK
ICAgICB9CiB9CiAKLUNvbG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykgY29uc3QKK0Nv
bG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBib29sIGZvclZp
c2l0ZWRMaW5rKQogewogICAgIGlmICh2YWx1ZS0+aXNSR0JDb2xvcigpKQogICAgICAgICByZXR1
cm4gQ29sb3IodmFsdWUtPmdldFJHQkEzMlZhbHVlKCkpOwogCi0gICAgY29uc3QgU3RhdGUmIHN0
YXRlID0gbV9zdGF0ZTsKICAgICBpbnQgaWRlbnQgPSB2YWx1ZS0+Z2V0SWRlbnQoKTsKICAgICBz
d2l0Y2ggKGlkZW50KSB7CiAgICAgY2FzZSAwOgpAQCAtNDU2OSw5ICs0NTU5LDggQEAgc3RhdGlj
IEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBlKFdl
YktpdENTU0ZpbHRlclZhbHUKIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxF
KFNWRykKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKQordm9p
ZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyhTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBpZiAoIXN0YXRlLnN0eWxlKCktPmhh
c0ZpbHRlcigpIHx8IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtNDU5OCwyOSArNDU4NywyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFE
RVJTKQotU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKENTU1ZhbHVlKiB2
YWx1ZSkKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYWRlcihTdGF0ZSYgc3Rh
dGUsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzV2ViS2l0Q1NTU2hhZGVy
VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZh
bHVlKHN0YXRpY19jYXN0PFdlYktpdENTU1NoYWRlclZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIGNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKHN0YXRlLCBzdGF0aWNf
Y2FzdDxXZWJLaXRDU1NTaGFkZXJWYWx1ZSo+KHZhbHVlKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAK
LVN0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZy
b21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWYWx1ZSogdmFsdWUpCitTdHlsZVNoYWRlciogU3R5bGVS
ZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoU3RhdGUmIHN0YXRl
LCBXZWJLaXRDU1NTaGFkZXJWYWx1ZSogdmFsdWUpCiB7CiAgICAgU3R5bGVTaGFkZXIqIHNoYWRl
ciA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdTaGFkZXIoKTsKICAgICBpZiAoc2hhZGVyICYmIHNo
YWRlci0+aXNQZW5kaW5nU2hhZGVyKCkpCi0gICAgICAgIG1fc3RhdGUuc2V0SGFzUGVuZGluZ1No
YWRlcnModHJ1ZSk7CisgICAgICAgIHN0YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJzKHRydWUpOwog
ICAgIHJldHVybiBzaGFkZXI7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdT
aGFkZXJzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKFN0YXRlJiBz
dGF0ZSkKIHsKLSAgICBpZiAoIW1fc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgIW1fc3Rh
dGUuaGFzUGVuZGluZ1NoYWRlcnMoKSkKKyAgICBpZiAoIXN0YXRlLnN0eWxlKCktPmhhc0ZpbHRl
cigpIHx8ICFzdGF0ZS5oYXNQZW5kaW5nU2hhZGVycygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRlLmRv
Y3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0
ZXJPcGVyYXRpb25zID0gbV9zdGF0ZS5zdHlsZSgpLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9u
cygpOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRp
b25zID0gc3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewog
ICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJP
cGVyYXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRp
b25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKQEAgLTQ2MzcsNyArNDYyNiw3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KLSAgICBtX3N0YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJzKGZh
bHNlKTsKKyAgICBzdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyhmYWxzZSk7CiB9CiAKIHN0YXRp
YyBib29sIHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29tcGFyYXRvcihjb25zdCBSZWZQdHI8Q3VzdG9t
RmlsdGVyUGFyYW1ldGVyPiYgYSwgY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4m
IGIpCkBAIC00Njc1LDE2ICs0NjY0LDE2IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1l
dGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlCiAgICAg
cmV0dXJuIG51bWJlclBhcmFtZXRlci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9y
bVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVzKQorUGFz
c1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9t
RmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKFN0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBuYW1l
LCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykKIHsKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVHJhbnNm
b3JtUGFyYW1ldGVyPiB0cmFuc2Zvcm1QYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1Q
YXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnM7Ci0gICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMsIG1fc3RhdGUuc3R5bGUo
KSwgbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpOworICAgIGNyZWF0ZVRy
YW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCksIG9wZXJhdGlvbnMpOwogICAgIHRyYW5zZm9ybVBhcmFtZXRlci0+c2V0T3BlcmF0
aW9ucyhvcGVyYXRpb25zKTsKICAgICByZXR1cm4gdHJhbnNmb3JtUGFyYW1ldGVyLnJlbGVhc2Uo
KTsKIH0KIAotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6
OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUq
IHBhcmFtZXRlclZhbHVlKQorUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxl
UmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKFN0YXRlJiBzdGF0ZSwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSogcGFyYW1ldGVyVmFsdWUpCiB7CiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCBvdGhlciBwYXJhbWV0ZXJzIHR5cGVzIHBhcnNpbmcuCiAgICAgLy8gYm9vbGVh
bnM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQzOApAQCAtNDcw
Nyw3ICs0Njk2LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVz
b2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNvbnMKICAgICAvLyBhcmUgdHJhbnNm
b3Jtcy4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIgd2lsbAogICAgIC8vIHJl
dHVybiAwIGlmIHRoYXQgYXNzdW1wdGlvbiBpcyBpbmNvcnJlY3QuCiAgICAgaWYgKHZhbHVlcy0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKS0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQot
ICAgICAgICByZXR1cm4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIobmFtZSwg
dmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1l
dGVyKHN0YXRlLCBuYW1lLCB2YWx1ZXMpOwogCiAgICAgLy8gV2UgY2FuIGhhdmUgb25seSBhcnJh
eXMgb2YgYm9vbGVhbnMgb3IgbnVtYmVycywgc28gdXNlIHRoZSBmaXJzdCB2YWx1ZSB0byBjaG9v
c2UgYmV0d2VlbiB0aG9zZSB0d28uCiAgICAgLy8gV2UgbmVlZCB1cCB0byA0IHZhbHVlcyAoYWxs
IGJvb2xlYW5zIG9yIGFsbCBudW1iZXJzKS4KQEAgLTQ3MjQsNyArNDcxMyw3IEBAIFBhc3NSZWZQ
dHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRl
clBhcmFtZXRlcihjb25zCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6
cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUs
IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlckxpc3QpCitib29sIFN0eWxlUmVz
b2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChTdGF0ZSYgc3RhdGUsIENTU1Zh
bHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRl
ckxpc3QpCiB7CiAgICAgSGFzaFNldDxTdHJpbmc+IGtub3duUGFyYW1ldGVyTmFtZXM7CiAgICAg
Q1NTVmFsdWVMaXN0SXRlcmF0b3IgcGFyYW1ldGVySXRlcmF0b3IocGFyYW1ldGVyc1ZhbHVlKTsK
QEAgLTQ3NDksNyArNDczOCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0
ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1CiAgICAgICAgIGlm
ICghaXRlcmF0b3IuaGFzTW9yZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAKLSAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyYW1ldGVyID0gcGFy
c2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIobmFtZSwgaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAg
IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9tRmls
dGVyUGFyYW1ldGVyKHN0YXRlLCBuYW1lLCBpdGVyYXRvci52YWx1ZSgpKTsKICAgICAgICAgaWYg
KCFwYXJhbWV0ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHBhcmFtZXRl
ckxpc3QuYXBwZW5kKHBhcmFtZXRlci5yZWxlYXNlKCkpOwpAQCAtNDc2OCw3ICs0NzU3LDcgQEAg
UGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1
c3RvbUZpbHRlck9wZXJhdGlvbldpdGgKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxD
dXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9w
ZXJhdGlvbldpdGhJbmxpbmVTeW50YXgoV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVl
KQorUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgoU3RhdGUmIHN0YXRlLCBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCiB7CiAgICAgQ1NTVmFsdWUqIHNoYWRlcnNW
YWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOwogICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNoYWRlcnNWYWx1ZS0+aXNWYWx1ZUxpc3QoKSk7
CkBAIC00Nzc3LDcgKzQ3NjYsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4g
U3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aAogICAgIHVuc2ln
bmVkIHNoYWRlcnNMaXN0TGVuZ3RoID0gc2hhZGVyc0xpc3QtPmxlbmd0aCgpOwogICAgIEFTU0VS
VChzaGFkZXJzTGlzdExlbmd0aCk7CiAKLSAgICBSZWZQdHI8U3R5bGVTaGFkZXI+IHZlcnRleFNo
YWRlciA9IHN0eWxlU2hhZGVyKHNoYWRlcnNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDAp
KTsKKyAgICBSZWZQdHI8U3R5bGVTaGFkZXI+IHZlcnRleFNoYWRlciA9IHN0eWxlU2hhZGVyKHN0
YXRlLCBzaGFkZXJzTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CiAgICAgUmVmUHRy
PFN0eWxlU2hhZGVyPiBmcmFnbWVudFNoYWRlcjsKICAgICBDdXN0b21GaWx0ZXJQcm9ncmFtVHlw
ZSBwcm9ncmFtVHlwZSA9IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9URVhUVVJFOwogICAg
IEN1c3RvbUZpbHRlclByb2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5nczsKQEAgLTQ3OTAsNyAr
NDc3OSw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVy
OjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoCiAgICAgICAgICAgICBDU1NWYWx1ZUxp
c3RJdGVyYXRvciBpdGVyYXRvcihtaXhGdW5jdGlvbik7CiAKICAgICAgICAgICAgIEFTU0VSVCht
aXhGdW5jdGlvbi0+bGVuZ3RoKCkpOwotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHls
ZVNoYWRlcihpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0g
c3R5bGVTaGFkZXIoc3RhdGUsIGl0ZXJhdG9yLnZhbHVlKCkpOwogICAgICAgICAgICAgaXRlcmF0
b3IuYWR2YW5jZSgpOwogCiAgICAgICAgICAgICBBU1NFUlQobWl4RnVuY3Rpb24tPmxlbmd0aCgp
IDw9IDMpOwpAQCAtNDgwNiw3ICs0Nzk1LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVy
YXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGgKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHByb2dyYW1UeXBlID0g
UFJPR1JBTV9UWVBFX05PX0VMRU1FTlRfVEVYVFVSRTsKLSAgICAgICAgICAgIGZyYWdtZW50U2hh
ZGVyID0gc3R5bGVTaGFkZXIoZnJhZ21lbnRTaGFkZXJPck1peEZ1bmN0aW9uKTsKKyAgICAgICAg
ICAgIGZyYWdtZW50U2hhZGVyID0gc3R5bGVTaGFkZXIoc3RhdGUsIGZyYWdtZW50U2hhZGVyT3JN
aXhGdW5jdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC00ODYyLDIzICs0ODUxLDIz
IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVh
dGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoCiAgICAgICAgIHBhcmFtZXRlcnNWYWx1ZSA9IGZp
bHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpOwogICAgIAogICAgIEN1c3RvbUZp
bHRlclBhcmFtZXRlckxpc3QgcGFyYW1ldGVyTGlzdDsKLSAgICBpZiAocGFyYW1ldGVyc1ZhbHVl
ICYmICFwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QocGFyYW1ldGVyc1ZhbHVlLCBwYXJh
bWV0ZXJMaXN0KSkKKyAgICBpZiAocGFyYW1ldGVyc1ZhbHVlICYmICFwYXJzZUN1c3RvbUZpbHRl
clBhcmFtZXRlckxpc3Qoc3RhdGUsIHBhcmFtZXRlcnNWYWx1ZSwgcGFyYW1ldGVyTGlzdCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIAogICAgIFJlZlB0cjxTdHlsZUN1c3RvbUZpbHRlclByb2dy
YW0+IHByb2dyYW0gPSBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZSh2ZXJ0ZXhTaGFk
ZXIucmVsZWFzZSgpLCBmcmFnbWVudFNoYWRlci5yZWxlYXNlKCksIHByb2dyYW1UeXBlLCBtaXhT
ZXR0aW5ncywgbWVzaFR5cGUpOwogICAgIHJldHVybiBDdXN0b21GaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZShwcm9ncmFtLnJlbGVhc2UoKSwgcGFyYW1ldGVyTGlzdCwgbWVzaFJvd3MsIG1lc2hDb2x1
bW5zLCBtZXNoVHlwZSk7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBT
dHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0Q1NTRmlsdGVy
VmFsdWUqIGZpbHRlclZhbHVlKQorUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0
eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihTdGF0ZSYgc3RhdGUsIFdl
YktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKIHsKICAgICBBU1NFUlQoZmlsdGVyVmFs
dWUtPmxlbmd0aCgpKTsKICAgICBib29sIGlzQXRSdWxlUmVmZXJlbmNlU3ludGF4ID0gZmlsdGVy
VmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCktPmlzUHJpbWl0aXZlVmFsdWUoKTsKLSAg
ICByZXR1cm4gaXNBdFJ1bGVSZWZlcmVuY2VTeW50YXggPyBjcmVhdGVDdXN0b21GaWx0ZXJPcGVy
YXRpb25XaXRoQXRSdWxlUmVmZXJlbmNlU3ludGF4KGZpbHRlclZhbHVlKSA6IGNyZWF0ZUN1c3Rv
bUZpbHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgoZmlsdGVyVmFsdWUpOworICAgIHJldHVy
biBpc0F0UnVsZVJlZmVyZW5jZVN5bnRheCA/IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldp
dGhBdFJ1bGVSZWZlcmVuY2VTeW50YXgoZmlsdGVyVmFsdWUpIDogY3JlYXRlQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uV2l0aElubGluZVN5bnRheChzdGF0ZSwgZmlsdGVyVmFsdWUpOwogfQogCiAjZW5k
aWYKIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVl
KiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZp
bHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCitib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZUZpbHRlck9wZXJhdGlvbnMoU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBv
dXRPcGVyYXRpb25zKQogewogICAgIEFTU0VSVChvdXRPcGVyYXRpb25zLmlzRW1wdHkoKSk7CiAg
ICAgCkBAIC00OTExLDcgKzQ5MDAsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRl
ck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgPT0g
RmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKLSAgICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0
ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihmaWx0
ZXJWYWx1ZSk7CisgICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBvcGVy
YXRpb24gPSBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oc3RhdGUsIGZpbHRlclZhbHVlKTsK
ICAgICAgICAgICAgIGlmICghb3BlcmF0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIApAQCAtNDkyOSwxMiArNDkxOCwxMiBAQCBib29sIFN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxl
KiBzdHlsZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBXZWJLaXRD
U1NTVkdEb2N1bWVudFZhbHVlKiBzdmdEb2N1bWVudFZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0
Q1NTU1ZHRG9jdW1lbnRWYWx1ZSo+KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIEtVUkwgdXJsID0g
bV9zdGF0ZS5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1bWVudFZhbHVlLT51cmwoKSk7
CisgICAgICAgICAgICBLVVJMIHVybCA9IHN0YXRlLmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2
Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKIAogICAgICAgICAgICAgUmVmUHRyPFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjcmVh
dGUoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSwgb3Bl
cmF0aW9uVHlwZSk7Ci0gICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0V4dGVybmFs
VVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBtX3N0YXRlLmRvY3VtZW50KCkp
KSB7CisgICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0V4dGVybmFsVVJJUmVmZXJl
bmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBzdGF0ZS5kb2N1bWVudCgpKSkgewogICAgICAg
ICAgICAgICAgIGlmICghc3ZnRG9jdW1lbnRWYWx1ZS0+bG9hZFJlcXVlc3RlZCgpKQotICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5zZXQob3BlcmF0aW9u
LmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUucGVu
ZGluZ1NWR0RvY3VtZW50cygpLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUp
OwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0Rv
Y3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+c2V0Q2FjaGVkU1ZHRG9j
dW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKHN2
Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50KCkpKSk7CiAgICAgICAgICAgICB9CkBA
IC01MDE4LDcgKzUwMDcsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJh
dGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAgICAgICAgICAg
aW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0
eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAgIENvbG9yIGNvbG9y
OwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0g
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAg
ICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNvbG9yLmdl
dCgpKTsKIAogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKERyb3BT
aGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsb2NhdGlvbiwgYmx1ciwgY29sb3IuaXNWYWxp
ZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQsIG9wZXJhdGlvblR5cGUpKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNTAzNiw5ICs1MDI1LDkgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpj
cmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5
bGUKIAogI2VuZGlmCiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9h
ZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlKQorUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0YXRlJiBzdGF0
ZSwgU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbmdJbWFnZSkKIHsKLSAgICBDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRlLmRvY3VtZW50KCktPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291
cmNlTG9hZGVyID0gc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKIAog
ICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFsdWUoKSkgewogICAgICAgICBDU1NJbWFn
ZVZhbHVlKiBpbWFnZVZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCk7CkBAIC01
MDY2LDI5ICs1MDU1LDI5IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluCiAgICAgcmV0dXJuIDA7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQordm9pZCBTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyhTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKG1f
c3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmlzRW1wdHkoKSkKKyAgICBpZiAoc3RhdGUu
cGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1f
c3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmVuZCgpLmtleXMoKTsKLSAgICBmb3IgKFBl
bmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IG1fc3RhdGUu
cGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5k
ID0gc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmVuZCgpLmtleXMoKTsKKyAgICBmb3Ig
KFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IHN0YXRl
LnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5iZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgY3VycmVudFByb3BlcnR5ID0gKml0OwogCiAgICAg
ICAgIHN3aXRjaCAoY3VycmVudFByb3BlcnR5KSB7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5k
TGF5ZXIgPSBtX3N0YXRlLnN0eWxlKCktPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dy
b3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewor
ICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IHN0YXRlLnN0eWxl
KCktPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5k
TGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChi
YWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1Bl
bmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldElt
YWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNr
Z3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRM
YXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVQ
ZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Q29udGVudDogewotICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBj
b25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdGF0ZS5zdHlsZSgpLT5jb250ZW50RGF0YSgpKTsg
Y29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVudERhdGEtPm5leHQoKSkgeworICAgICAg
ICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnRE
YXRhKj4oc3RhdGUuc3R5bGUoKS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50
RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY29udGVu
dERhdGEtPmlzSW1hZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBpbWFn
ZSA9IHN0YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPmltYWdlKCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9h
ZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBs
b2FkUGVuZGluZ0ltYWdlKHN0YXRlLCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGlt
YWdlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGVkSW1hZ2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRl
bnREYXRhKS0+c2V0SW1hZ2UobG9hZGVkSW1hZ2UucmVsZWFzZSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtNTA5Nyw0NiArNTA4Niw0NiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQ
ZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlDdXJzb3I6IHsKLSAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJz
b3JMaXN0ID0gbV9zdGF0ZS5zdHlsZSgpLT5jdXJzb3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChD
dXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gc3RhdGUuc3R5bGUoKS0+Y3Vyc29ycygpKSB7CiAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJzb3JMaXN0LT5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50Q3Vyc29yID0gY3Vy
c29yTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBpbWFn
ZSA9IGN1cnJlbnRDdXJzb3IuaW1hZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRDdXJzb3Iuc2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBl
bmRpbmdJbWFnZSo+KGltYWdlKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRDdXJzb3Iuc2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAgICAg
aWYgKG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRlLnN0eWxlKCkt
Pmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9z
dGF0ZS5zdHlsZSgpLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19j
YXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgp
KSkpOworICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkgJiYg
c3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0lt
YWdlKHN0YXRlLCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0eWxlKCkt
Pmxpc3RTdHlsZUltYWdlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlm
IChtX3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZSgp
LT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAg
IG1fc3RhdGUuc3R5bGUoKS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShz
dGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1h
Z2VTb3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFn
ZVNvdXJjZSgpICYmIHN0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGlu
Z0ltYWdlKCkpCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm9yZGVySW1hZ2VT
b3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxl
Y3Q6IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0
YXRlLnN0eWxlKCktPmJveFJlZmxlY3QoKSkgeworICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVj
dGlvbiogcmVmbGVjdGlvbiA9IHN0YXRlLnN0eWxlKCktPmJveFJlZmxlY3QoKSkgewogICAgICAg
ICAgICAgICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0aW9uLT5t
YXNrKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2tJbWFnZS5pbWFnZSgpICYmIG1hc2tJbWFn
ZS5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0
cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8
U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOworICAgICAgICAgICAgICAg
ICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0
YXRlLCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7
CiAgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2soTmluZVBpZWNlSW1hZ2Uo
bG9hZGVkSW1hZ2UucmVsZWFzZSgpLCBtYXNrSW1hZ2UuaW1hZ2VTbGljZXMoKSwgbWFza0ltYWdl
LmZpbGwoKSwgbWFza0ltYWdlLmJvcmRlclNsaWNlcygpLCBtYXNrSW1hZ2Uub3V0c2V0KCksIG1h
c2tJbWFnZS5ob3Jpem9udGFsUnVsZSgpLCBtYXNrSW1hZ2UudmVydGljYWxSdWxlKCkpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOiB7
Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAm
JiBtX3N0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgp
KQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0TWFza0JveEltYWdlU291cmNl
KGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRl
LnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgaWYgKHN0YXRl
LnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIHN0YXRlLnN0eWxlKCktPm1hc2tCb3hJ
bWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRlLCBzdGF0
aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNv
dXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIq
IG1hc2tMYXllciA9IG1fc3RhdGUuc3R5bGUoKS0+YWNjZXNzTWFza0xheWVycygpOyBtYXNrTGF5
ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKEZp
bGxMYXllciogbWFza0xheWVyID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzTWFza0xheWVycygpOyBt
YXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdlKCktPmlzUGVuZGlu
Z0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1hc2tMYXllci0+c2V0SW1hZ2UobG9hZFBl
bmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tMYXllci0+aW1h
Z2UoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbWFza0xheWVyLT5zZXRJbWFnZShsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRlLCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tMYXll
ci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC01MTQ1LDIyICs1MTM0LDIyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdJbWFnZXMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzKCkuY2xlYXIoKTsKKyAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCku
Y2xlYXIoKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcygp
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3VyY2VzKFN0YXRlJiBzdGF0ZSkK
IHsKICAgICAvLyBTdGFydCBsb2FkaW5nIGltYWdlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUu
Ci0gICAgbG9hZFBlbmRpbmdJbWFnZXMoKTsKKyAgICBsb2FkUGVuZGluZ0ltYWdlcyhzdGF0ZSk7
CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgc2hh
ZGVycyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7
CisgICAgbG9hZFBlbmRpbmdTaGFkZXJzKHN0YXRlKTsKICNlbmRpZgogICAgIAogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKICAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBT
VkcgRG9jdW1lbnRzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1NW
R0RvY3VtZW50cygpOworICAgIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKHN0YXRlKTsKICNlbmRp
ZgogfQogCkBAIC01MjEyLDggKzUyMDEsNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAg
aW5mby5hZGRNZW1iZXIobV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzKTsKICAgICBpbmZvLmFkZE1l
bWJlcihtX3Njb3BlUmVzb2x2ZXIsICJzY29wZVJlc29sdmVyIik7CiAKLSAgICBpbmZvLmFkZE1l
bWJlcihtX3N0YXRlLCAic3RhdGUiKTsKLQogICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gYSBw
bGFjZSB3aGVyZSBpdCB3b3VsZCBiZSBjYWxsZWQgb25seSBvbmNlPwogICAgIGluZm8uYWRkTWVt
YmVyKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFN0eWxlLCAiZGVmYXVsdFN0eWxlIik7
CiAgICAgaW5mby5hZGRNZW1iZXIoQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0UXVpcmtz
U3R5bGUsICJkZWZhdWx0UXVpcmtzU3R5bGUiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
CmluZGV4IDQyYzk1YzkxZmQ4NGUzZjJhM2JhZTY2MTExNTEyNDYyZThmMDIzOTcuLjllODJiZmFi
N2YyNDdhNWVjMjQwZjAyZTNmZTMyNDY3MTM2MzZjNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaApAQCAtMjMsNyArMjMsNiBAQAogI2RlZmluZSBTdHlsZVJlc29sdmVyX2gKIAogI2lu
Y2x1ZGUgIkNTU1J1bGVMaXN0LmgiCi0jaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmgiCkBAIC0xOTMsMTMgKzE5Miw4IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckRvY3VtZW50
KERvY3VtZW50KiwgQ1NTRm9udFNlbGVjdG9yKiA9IDApOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHlsZSgpOyB9Ci0gICAgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRTdHlsZSgpOyB9Ci0g
ICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKTsgfQotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSB7IHJldHVybiBt
X3N0YXRlLmVsZW1lbnQoKTsgfQogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIHsgcmV0dXJuIG1f
ZG9jdW1lbnQ7IH0KICAgICBTdHlsZVNjb3BlUmVzb2x2ZXIqIHNjb3BlUmVzb2x2ZXIoKSBjb25z
dCB7IHJldHVybiBtX3Njb3BlUmVzb2x2ZXIuZ2V0KCk7IH0KLSAgICBib29sIGhhc1BhcmVudE5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnBhcmVudE5vZGUoKTsgfQogCiAgICAgLy8gRklY
TUU6IEl0IGNvdWxkIGJlIGJldHRlciB0byBjYWxsIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5
bGVTaGVldHMoKSBkaXJlY3RseSBhZnRlciB3ZSBmYWN0b3IgU3R5bGVSc29sdmVyIGZ1cnRoZXIu
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODg5MApA
QCAtMjI1LDE3ICsyMTksMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zY29wZVJlc29s
dmVyLmdldCgpOwogICAgIH0KICNlbmRpZgorICAgIGNsYXNzIFN0YXRlOwogCiBwcml2YXRlOgot
ICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwotICAgIFJlbmRlclN0eWxlKiBsb2NhdGVT
aGFyZWRTdHlsZSgpOwotICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQoUnVsZVNldCopOwotICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RS
dWxlcygpOworICAgIHZvaWQgaW5pdEVsZW1lbnQoU3RhdGUmLCBFbGVtZW50Kik7CisgICAgUmVu
ZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKFN0YXRlJik7CisgICAgYm9vbCBzdHlsZVNoYXJp
bmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChFbGVtZW50KiwgUnVsZVNldCopOworICAgIGJvb2wg
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhTdGF0ZSYpOwogICAgIE5vZGUq
IGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVD
b3VudCkgY29uc3Q7Ci0gICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJp
bmcoTm9kZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7Ci0gICAgYm9vbCBjYW5TaGFyZVN0eWxl
V2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCopIGNvbnN0OworICAgIFN0eWxlZEVsZW1lbnQqIGZp
bmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvbnN0IFN0YXRlJiwgTm9kZSosIHVuc2lnbmVkJiBj
b3VudCkgY29uc3Q7CisgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoY29uc3QgU3Rh
dGUmLCBTdHlsZWRFbGVtZW50KikgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFt
ZSosIEtleWZyYW1lVmFsdWUmKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZv
cktleWZyYW1lKFN0YXRlJiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZUtleWZyYW1l
KiwgS2V5ZnJhbWVWYWx1ZSYpOwogCiBwdWJsaWM6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxs
IGdpdmUgYmFjayB0aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBlbGVt
ZW50IChvciBhIHBzZXVkby1lbGVtZW50KS4KQEAgLTI1OCwyNSArMjUzLDIxIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgaW50IGxlZ2FjeUZvbnRTaXplKERvY3VtZW50KiwgaW50IHBpeGVsRm9udFNp
emUsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSk7CiAKIHB1YmxpYzoKLSAgICB2b2lk
IGFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgUmVuZGVyU3R5
bGUqKTsKKyAgICB2b2lkIGFwcGx5Rm9udFByb3BlcnR5VG9TdHlsZShSZW5kZXJTdHlsZSosIGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqKTsKIAotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVu
dFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0KLSAgICB2b2lkIHVwZGF0ZUZvbnQo
KTsKLSAgICB2b2lkIGluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqKTsKKyAgICB2b2lkIHVw
ZGF0ZUZvbnQoU3RhdGUmKTsKKyAgICB2b2lkIGluaXRpYWxpemVGb250U3R5bGUoU3RhdGUmLCBT
ZXR0aW5ncyopOwogCiAgICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZp
ZWRTaXplKERvY3VtZW50KiwgZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwg
ZmxvYXQgc3BlY2lmaWVkU2l6ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXplID0gVXNlU21hcnRN
aW5pbXVtRm9yRm9udEZpemUpOwogCi0gICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRp
b24mLCBmbG9hdCBzaXplKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRGb250U2l6ZShTdGF0ZSYsIEZv
bnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBmbG9h
dCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIFJlbmRlclN0eWxl
KiwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkda
b29tUnVsZXMpOwogCiBwdWJsaWM6Ci0gICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKTsKLQogICAg
IHN0YXRpYyBib29sIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQo
Q1NTUHJpbWl0aXZlVmFsdWUqKTsKLSAgICBDb2xvciBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShD
U1NQcmltaXRpdmVWYWx1ZSosIGJvb2wgZm9yVmlzaXRlZExpbmsgPSBmYWxzZSkgY29uc3Q7Cisg
ICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0YXRlJiwgQ1NT
UHJpbWl0aXZlVmFsdWUqLCBib29sIGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpOwogCiAgICAgYm9v
bCBoYXNTZWxlY3RvckZvcklkKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwogICAgIGJvb2wg
aGFzU2VsZWN0b3JGb3JDbGFzcyhjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKQEAgLTMwNCwz
NCArMjk1LDM0IEBAIHB1YmxpYzoKICAgICB2b2lkIGludmFsaWRhdGVNYXRjaGVkUHJvcGVydGll
c0NhY2hlKCk7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgYm9vbCBjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVu
ZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7Cisg
ICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFN0YXRlJiwgQ1NTVmFsdWUqIGluVmFsdWUs
IFJlbmRlclN0eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBGaWx0ZXJPcGVy
YXRpb25zJiBvdXRPcGVyYXRpb25zKTsKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgU3R5
bGVTaGFkZXIqIHN0eWxlU2hhZGVyKENTU1ZhbHVlKik7Ci0gICAgU3R5bGVTaGFkZXIqIGNhY2hl
ZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFdlYktpdENTU1NoYWRlclZhbHVlKik7Ci0g
ICAgYm9vbCBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqLCBDdXN0b21G
aWx0ZXJQYXJhbWV0ZXJMaXN0Jik7Ci0gICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0
ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFs
dWUqKTsKKyAgICBTdHlsZVNoYWRlciogc3R5bGVTaGFkZXIoU3RhdGUmLCBDU1NWYWx1ZSopOwor
ICAgIFN0eWxlU2hhZGVyKiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShTdGF0
ZSYsIFdlYktpdENTU1NoYWRlclZhbHVlKik7CisgICAgYm9vbCBwYXJzZUN1c3RvbUZpbHRlclBh
cmFtZXRlckxpc3QoU3RhdGUmLCBDU1NWYWx1ZSosIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3Qm
KTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0
ZXJQYXJhbWV0ZXIoU3RhdGUmLCBjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKik7CiAgICAg
UGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyQXJyYXlQ
YXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKICAgICBQYXNzUmVm
UHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0
ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKLSAgICBQYXNzUmVmUHRyPEN1
c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIo
Y29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKKyAgICBQYXNzUmVmUHRyPEN1c3Rv
bUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoU3Rh
dGUmLCBjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCopOwogICAgIFBhc3NSZWZQdHI8
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoQXRS
dWxlUmVmZXJlbmNlU3ludGF4KFdlYktpdENTU0ZpbHRlclZhbHVlKik7Ci0gICAgUGFzc1JlZlB0
cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhJ
bmxpbmVTeW50YXgoV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKLSAgICBQYXNzUmVmUHRyPEN1c3Rv
bUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYktpdENTU0Zp
bHRlclZhbHVlKik7Ci0gICAgdm9pZCBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKKyAgICBQYXNzUmVm
UHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0
aElubGluZVN5bnRheChTdGF0ZSYsIFdlYktpdENTU0ZpbHRlclZhbHVlKik7CisgICAgUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihT
dGF0ZSYsIFdlYktpdENTU0ZpbHRlclZhbHVlKik7CisgICAgdm9pZCBsb2FkUGVuZGluZ1NoYWRl
cnMoU3RhdGUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShTVkcpCi0gICAgdm9pZCBsb2FkUGVuZGlu
Z1NWR0RvY3VtZW50cygpOworICAgIHZvaWQgbG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoU3RhdGUm
KTsKICNlbmRpZgogI2VuZGlmIC8vIEVOQUJMRShDU1NfRklMVEVSUykKIAotICAgIHZvaWQgbG9h
ZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKFN0YXRl
Jik7CiAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1cCB0aGUgZGVmYXVs
dCBmb250IHNpemUgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdlbmVyaWMgZm9udCBm
YW1pbHkgaGFzIGNoYW5nZWQuIC1kd2gKLSAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNo
YW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgdm9pZCBj
aGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
OwotICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOworICAgIHZvaWQgY2hlY2tGb3JH
ZW5lcmljRmFtaWx5Q2hhbmdlKFN0YXRlJiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpOworICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFN0YXRlJiwgUmVuZGVyU3R5
bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6
ZUFkanVzdChTdGF0ZSYpOwogCi0gICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHls
ZSogc3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7Cisg
ICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShTdGF0ZSYsIFJlbmRlclN0eWxlKiBzdHlsZVRvQWRq
dXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKIAogICAgIHN0cnVjdCBS
dWxlUmFuZ2UgewogICAgICAgICBSdWxlUmFuZ2UoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBs
YXN0UnVsZUluZGV4KTogZmlyc3RSdWxlSW5kZXgoZmlyc3RSdWxlSW5kZXgpLCBsYXN0UnVsZUlu
ZGV4KGxhc3RSdWxlSW5kZXgpIHsgfQpAQCAtMzc5LDI1ICszNzAsMjUgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCBhZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaFJlc3VsdCYsIGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogPSAwLCB1bnNpZ25lZCBsaW5r
TWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCwgUHJvcGVydHlXaGl0ZWxpc3RU
eXBlID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKICAgICB2b2lkIGFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiwgYm9vbCBpc0Nh
Y2hlYWJsZSA9IHRydWUpOwogCi0gICAgdm9pZCBtYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0Jiwg
Ym9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpOwotICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNo
UmVzdWx0Jik7Ci0gICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmLCBSdWxlU2V0Kik7
Ci0gICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcyk7Ci0gICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJl
c3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMo
TWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoQWxs
UnVsZXMoU3RhdGUmLCBNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKTsK
KyAgICB2b2lkIG1hdGNoVUFSdWxlcyhTdGF0ZSYsIE1hdGNoUmVzdWx0Jik7CisgICAgdm9pZCBt
YXRjaFVBUnVsZXMoU3RhdGUmLCBNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqKTsKKyAgICB2b2lkIG1h
dGNoQXV0aG9yUnVsZXMoU3RhdGUmLCBNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMpOworICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoU3RhdGUmLCBNYXRjaFJlc3VsdCYsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhTdGF0
ZSYsIE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRj
aEhvc3RSdWxlcyhTdGF0ZSYsIE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7
CiAKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1
bGVSYW5nZSYpOwotICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oY29uc3Qg
TWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7Ci0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1
bGVSYW5nZSYpOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoU3RhdGUmLCBjb25zdCBN
YXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yUmVnaW9uKFN0YXRlJiwgY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7CisgICAg
dm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoU3RhdGUmLCBjb25zdCBWZWN0b3I8UnVs
ZURhdGE+KiwgY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7CiAKICAgICBib29sIGZh
c3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwotICAgIHZvaWQgc29ydE1h
dGNoZWRSdWxlcygpOwotICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNo
UmVzdWx0Jik7CisgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKFN0YXRlJik7CisgICAgdm9pZCBz
b3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoU3RhdGUmLCBNYXRjaFJlc3VsdCYpOwogCi0gICAg
Ym9vbCBydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNj
b3BlLCBQc2V1ZG9JZCYsIFNlbGVjdG9yQ2hlY2tlcjo6QmVoYXZpb3JBdEJvdW5kYXJ5ID0gU2Vs
ZWN0b3JDaGVja2VyOjpEb2VzTm90Q3Jvc3NCb3VuZGFyeSk7CisgICAgYm9vbCBydWxlTWF0Y2hl
cyhjb25zdCBTdGF0ZSYsIGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2Nv
cGUsIFBzZXVkb0lkJiwgU2VsZWN0b3JDaGVja2VyOjpCZWhhdmlvckF0Qm91bmRhcnkgPSBTZWxl
Y3RvckNoZWNrZXI6OkRvZXNOb3RDcm9zc0JvdW5kYXJ5KTsKICAgICBib29sIGNoZWNrUmVnaW9u
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdp
b25FbGVtZW50KTsKLSAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hS
ZXN1bHQmLCBjb25zdCBFbGVtZW50Kik7CisgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KFN0YXRlJiwgY29uc3QgTWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVtZW50Kik7CiAgICAgZW51bSBT
dHlsZUFwcGxpY2F0aW9uUGFzcyB7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgICAg
IFZhcmlhYmxlRGVmaW5pdGlvbnMsCkBAIC00MDYsMTEgKzM5NywxMSBAQCBwcml2YXRlOgogICAg
ICAgICBMb3dQcmlvcml0eVByb3BlcnRpZXMKICAgICB9OwogICAgIHRlbXBsYXRlIDxTdHlsZUFw
cGxpY2F0aW9uUGFzcyBwYXNzPgotICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25z
dCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZElu
ZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOworICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGll
cyhTdGF0ZSYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgYm9vbCBpbXBvcnRhbnQsIGludCBzdGFydElu
ZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSk7CiAgICAgdGVtcGxhdGUgPFN0
eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Ci0gICAgdm9pZCBhcHBseVByb3BlcnRpZXMoY29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiwgYm9vbCBpc0ltcG9ydGFu
dCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdo
aXRlbGlzdE5vbmUpOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKFN0YXRlJiwgY29uc3QgU3R5
bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiwgYm9vbCBpc0ltcG9ydGFudCwg
Ym9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdoaXRl
bGlzdE5vbmUpOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQotICAgIHZvaWQgcmVzb2x2ZVZh
cmlhYmxlcyhDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJv
cGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKTsKKyAgICB2b2lkIHJlc29sdmVW
YXJpYWJsZXMoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFZlY3RvcjxzdGQ6OnBh
aXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKTsKICNlbmRpZgog
ICAgIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQp
OwogI2lmIEVOQUJMRShWSURFT19UUkFDSykKQEAgLTQyMCw4ICs0MTEsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1h
dGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYsIGJvb2wgaXNMZWZ0UGFn
ZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CiAgICAgU2V0dGlu
Z3MqIGRvY3VtZW50U2V0dGluZ3MoKSB7IHJldHVybiBtX2RvY3VtZW50LT5zZXR0aW5ncygpOyB9
CiAKLSAgICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgYm9vbCBp
c1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShwYWdl
SW5kZXgpOyB9CisgICAgYm9vbCBpc0xlZnRQYWdlKFN0YXRlJiwgaW50IHBhZ2VJbmRleCkgY29u
c3Q7CisgICAgYm9vbCBpc1JpZ2h0UGFnZShTdGF0ZSYgc3RhdGUsIGludCBwYWdlSW5kZXgpIGNv
bnN0IHsgcmV0dXJuICFpc0xlZnRQYWdlKHN0YXRlLCBwYWdlSW5kZXgpOyB9CiAgICAgYm9vbCBp
c0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKICAgICBTdHJpbmcgcGFnZU5hbWUoaW50
IHBhZ2VJbmRleCkgY29uc3Q7CiAKQEAgLTQzMSwxNiArNDIyLDE3IEBAIHByaXZhdGU6CiAgICAg
S2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZyYW1lc1J1bGVNYXA7CiAKIHB1YmxpYzoKKwogICAgIHR5
cGVkZWYgSGFzaE1hcDxDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+ID4gUGVuZGluZ0lt
YWdlUHJvcGVydHlNYXA7CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQog
ICAgIHR5cGVkZWYgSGFzaE1hcDxGaWx0ZXJPcGVyYXRpb24qLCBSZWZQdHI8V2ViS2l0Q1NTU1ZH
RG9jdW1lbnRWYWx1ZT4gPiBQZW5kaW5nU1ZHRG9jdW1lbnRNYXA7CiAjZW5kaWYKLQogICAgIGNs
YXNzIFN0YXRlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhdGUpOwogICAgIHB1
YmxpYzoKLSAgICAgICAgU3RhdGUoKQotICAgICAgICA6IG1fZWxlbWVudCgwKQorICAgICAgICBT
dGF0ZShEb2N1bWVudCogZG9jdW1lbnQpCisgICAgICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkK
KyAgICAgICAgLCBtX2VsZW1lbnQoMCkKICAgICAgICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkKICAg
ICAgICAgLCBtX3BhcmVudE5vZGUoMCkKICAgICAgICAgLCBtX3BhcmVudFN0eWxlKDApCkBAIC00
NjcsNyArNDU5LDcgQEAgcHVibGljOgogICAgICAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUo
RG9jdW1lbnQqLCBFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgY29uc3Qg
UHNldWRvU3R5bGVSZXF1ZXN0JiA9IFBzZXVkb1N0eWxlUmVxdWVzdChOT1BTRVVETyksIFJlbmRl
clJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IDApOwogICAgICAgICB2b2lkIGNsZWFyKCk7CiAK
LSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LT5k
b2N1bWVudCgpOyB9CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZG9jdW1lbnQ7IH0KICAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudDsgfQogICAgICAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZWRFbGVtZW50OyB9CiAgICAgICAgIHZvaWQgc2V0U3R5bGUoUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpIHsgbV9zdHlsZSA9IHN0eWxlOyB9CkBAIC01Mjgs
MTEgKzUyMCwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwg
MzI+JiBtYXRjaGVkUnVsZXMoKSB7IHJldHVybiBtX21hdGNoZWRSdWxlczsgfQogICAgICAgICB2
b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVz
LmFwcGVuZChydWxlKTsgfQorICAgICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0IHsg
cmV0dXJuIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOyB9CiAgICAgICAg
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIEZJWE1FKGJ1ZyAxMDg1NjMpOiB0byBtYWtlIGl0
IGVhc2llciB0byByZXZpZXcsIHRoZXNlIG1lbWJlcgotICAgICAgICAvLyB2YXJpYWJsZXMgYXJl
IHB1YmxpYy4gSG93ZXZlciB3ZSBzaG91bGQgYWRkIG1ldGhvZHMgdG8gYWNjZXNzCi0gICAgICAg
IC8vIHRoZXNlIHZhcmlhYmxlcy4KKyAgICAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAg
ICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0
eWxlOwogICAgICAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7CkBAIC01NzgsMzAg
KzU2OSwxOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0
QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCi0gICAgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7
Ci0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NT
UHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOwotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdl
KFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmLCBDU1NQcm9wZXJ0
eUlELCBDU1NJbWFnZVZhbHVlKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZSopOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENT
U0ltYWdlU2V0VmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRP
clBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVl
Kik7CiAjZW5kaWYKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVuZGluZ0Zy
b21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVlKik7Ci0KLSAgICBib29s
IGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCk7IH0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1
cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU0N1cnNvcklt
YWdlVmFsdWUqKTsKIAogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvSW50TGVuZ3RoKENTU1By
aW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3Vi
bGUgbXVsdGlwbGllciA9IDEpOwogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5n
dGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5
bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7CiAKLSAgICBDU1NUb1N0eWxlTWFwKiBzdHlsZU1h
cCgpIHsgcmV0dXJuICZtX3N0eWxlTWFwOyB9CiAgICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYg
aW5zcGVjdG9yQ1NTT01XcmFwcGVycygpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVy
czsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1
cm4gbV9zdGF0ZS5mb250RGVzY3JpcHRpb24oKTsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRGb250RGVz
Y3JpcHRpb24oKTsgfQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7IH0KLSAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX3N0YXRlLnNl
dFpvb20oZik7IH0KLSAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX3N0YXRl
LnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wg
YikgeyBtX3N0YXRlLnNldFRleHRTaXplQWRqdXN0KGIpOyB9Ci0gICAgdm9pZCBzZXRXcml0aW5n
TW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRlLnNldFdyaXRpbmdNb2RlKHdy
aXRpbmdNb2RlKTsgfQotICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlv
biB0ZXh0T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVu
dGF0aW9uKTsgfQogICAgIAogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyopIGNvbnN0OwogICAgIApAQCAtNjExLDE2ICs1OTAsMTcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogCiBwcml2YXRlOgotICAgIGJvb2wgY2Fu
U2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGNh
blNoYXJlU3R5bGVXaXRoQ29udHJvbChjb25zdCBTdGF0ZSYsIFN0eWxlZEVsZW1lbnQqKSBjb25z
dDsKIAotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwor
ICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2soU3RhdGUmLCBDU1NQcm9wZXJ0eUlE
LCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShTdGF0ZSYsIENTU1Byb3BlcnR5
SUQsIENTU1ZhbHVlKik7CiAKICNpZiBFTkFCTEUoU1ZHKQotICAgIHZvaWQgYXBwbHlTVkdQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0
eShjb25zdCBTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAjZW5kaWYKIAotICAg
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFn
ZSopOwotICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3RhdGUmLCBTdHlsZVBlbmRpbmdJbWFnZSopOworICAg
IHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoU3RhdGUmKTsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBj
b21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiwgdW5z
aWduZWQgc2l6ZSk7CiAgICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtIHsKQEAg
LTYzOCw3ICs2MTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3dlZXBNYXRjaGVkUHJvcGVydGll
c0NhY2hlKFRpbWVyPFN0eWxlUmVzb2x2ZXI+Kik7CiAKICAgICBib29sIGNsYXNzTmFtZXNBZmZl
Y3RlZEJ5UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYpIGNvbnN0OwotICAgIGJvb2wgc2hh
cmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRF
bGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5
bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGNvbnN0IFN0YXRlJiwgU3R5bGVkRWxlbWVudCopIGNvbnN0
OwogCiAgICAgdW5zaWduZWQgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VM
YXN0U3dlZXA7CiAKQEAgLTY2NSwxMSArNjQ1LDggQEAgcHJpdmF0ZToKICAgICBjb25zdCBTdHls
ZUJ1aWxkZXImIG1fc3R5bGVCdWlsZGVyOwogCiAgICAgT3duUHRyPFN0eWxlU2NvcGVSZXNvbHZl
cj4gbV9zY29wZVJlc29sdmVyOwotICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKICAgICBJ
bnNwZWN0b3JDU1NPTVdyYXBwZXJzIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsKIAotICAgIFN0
YXRlIG1fc3RhdGU7Ci0KICAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOwogICAgIGZyaWVu
ZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVk
UHJvcGVydGllcyYpOwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hlZFBy
b3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXgg
NDQyYzE5ZTZiNTM3M2FmNjdiNTYxYWQyYmNiYjJhMDIwNDgzY2ZlZC4uMzcwYmVkY2E3ZDUzOTUw
NzE1NTc2ODU5YjdjODc2MTU2OWMzNTIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0yMDY0LDE4ICsy
MDY0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3Ry
aW5nJiBuZXdGb250KQogCiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFu
ZHMgaW50byB0aGUgc3R5bGUuCiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGNh
bnZhcygpLT5zdHlsZVJlc29sdmVyKCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0
eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgpLCBuZXdTdHlsZS5nZXQoKSk7Ci0g
ICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5
Rm9udFN0eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZv
bnRTdHlsZSkuZ2V0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJl
bnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50KS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZl
ci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcGFy
c2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQo
KSk7Ci0KLSAgICAvLyBBcyBkZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXpl
IGFuZCBsaW5lLWhlaWdodCBvbiBhIGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVl
Ojpjb21wdXRlTGVuZ3RoRG91YmxlIGNhbGwsCi0gICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUgZm9u
dE1ldHJpY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBh
IGNyYXNoIG9jY3VycyAoc2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIy
KS4KLSAgICAvLyBUaGUgdXBkYXRlRm9udCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9udE1l
dHJpY3MgYW5kIGVuc3VyZSB0aGUgcHJvcGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBsaW5l
LWhlaWdodC4KLSAgICBzdHlsZVJlc29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNv
bHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFNpemUsIHBh
cnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpLmdldCgp
KTsKLSAgICBzdHlsZVJlc29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+
YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2Vk
U3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7
CisgICAgc3R5bGVSZXNvbHZlci0+YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKG5ld1N0eWxlLmdl
dCgpLCBwYXJzZWRTdHlsZS5nZXQoKSk7CiAKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2ZvbnQg
PSBuZXdTdHlsZS0+Zm9udCgpOwogICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udC51cGRhdGUo
c3R5bGVSZXNvbHZlci0+Zm9udFNlbGVjdG9yKCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>