<?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>61144</bug_id>
          
          <creation_ts>2011-05-19 14:31:03 -0700</creation_ts>
          <short_desc>Merge ScrollAnimatorChromiumMac.mm back to ScrollAnimatorMac</short_desc>
          <delta_ts>2011-12-20 16:26:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>74915</dependson>
          <blocked>74375</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sailesh Agrawal">sail</reporter>
          <assigned_to name="Sailesh Agrawal">sail</assigned_to>
          <cc>asvitkine</cc>
    
    <cc>bdakin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jamesr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thakis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>406652</commentid>
    <comment_count>0</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-19 14:31:03 -0700</bug_when>
    <thetext>This bug is to track the work to merge ScrollAnimatorChromiumMac.mm back to ScrollAnimatorMac. This file was forked for the overlay scrollbar work (see bug 59753).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461879</commentid>
    <comment_count>1</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2011-09-03 18:58:49 -0700</bug_when>
    <thetext>I believe this was blocked on us enabling smooth scrolling. I enabled smooth scrolling, so this should be good to go now.

Let me know if you want to do it yourself, or if you want me to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462563</commentid>
    <comment_count>2</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-09-06 08:53:04 -0700</bug_when>
    <thetext>&gt; Let me know if you want to do it yourself, or if you want me to do it.

Feel free to work on this if you like.
Otherwise I&apos;ll probably work on this in a month or so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515698</commentid>
    <comment_count>3</comment_count>
      <attachid>118000</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-06 00:09:57 -0800</bug_when>
    <thetext>Created attachment 118000
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515700</commentid>
    <comment_count>4</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-06 00:14:32 -0800</bug_when>
    <thetext>bdakin: please review
asvitkine: I tried rubber banding on 10.7 and everything looked ok to me
thakis, jamesr: FYI

So far I&apos;ve tested the following:
- Chrome on 10.6 and 10.7
- Safari on 10.6

I&apos;ll be testing Safari on 10.7 tomorrow. Try bots pending. In particular, I&apos;ll keep an eye out on 10.5 bots to make sure I don&apos;t regress bug 66577.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515887</commentid>
    <comment_count>5</comment_count>
    <who name="">asvitkine</who>
    <bug_when>2011-12-06 07:03:48 -0800</bug_when>
    <thetext>&gt; Source/WebCore/platform/mac/NSScrollerImpDetails.mm:3
&gt; + * Copyright (C) 2011 oogle Inc. All Rights Reserved.

oogle Inc. ?

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:48
&gt; +#if !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MAX_ALLOWED &lt; MAC_OS_X_VERSION_10_6

Should this be using the WebKit macros (BUILDING_ON_*) instead?


Otherwise, LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516051</commentid>
    <comment_count>6</comment_count>
      <attachid>118074</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-06 11:11:22 -0800</bug_when>
    <thetext>Created attachment 118074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516053</commentid>
    <comment_count>7</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-06 11:13:12 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Source/WebCore/platform/mac/NSScrollerImpDetails.mm:3
&gt; &gt; + * Copyright (C) 2011 oogle Inc. All Rights Reserved.
&gt; 
&gt; oogle Inc. ?

Fixed.

&gt; &gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:48
&gt; &gt; +#if !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MAX_ALLOWED &lt; MAC_OS_X_VERSION_10_6
&gt; 
&gt; Should this be using the WebKit macros (BUILDING_ON_*) instead?

Yep, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516066</commentid>
    <comment_count>8</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-06 11:24:15 -0800</bug_when>
    <thetext>Pending try jobs:
http://build.chromium.org/p/tryserver.chromium/builders/mac_layout/builds/125
http://build.chromium.org/p/tryserver.chromium/builders/mac_layout_rel/builds/54</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516075</commentid>
    <comment_count>9</comment_count>
      <attachid>118000</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-12-06 11:28:15 -0800</bug_when>
    <thetext>Comment on attachment 118000
Patch

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

I have to r- because I really don&apos;t understand why you are getting rid of the #if USE(SCROLLBAR_PAINTER) statement. It is the precedent to keep code related to new APIs from running at all on old platforms.

&gt; Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.h:34
&gt; +class ScrollbarThemeChromiumMac : public ScrollbarThemeMac {

I am taking your word for it that this is the right thing to do. As you know, I am not a Chromium platform expert, so I have a hard time evaluating this particular part of the patch, so I am just taking it for granted that this is correct. If a Chromium person could weigh in on this part, that would be ideal.

&gt; Source/WebCore/platform/mac/NSScrollerImpDetails.h:32
&gt; +#if (defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD))

This confuses me, and is the reason for the r-. Why are you defining these things on Leopard and SnowLeopard? They should definitely not be defined there. Overlay scrollbars are a concept new to Lion, and the old platforms should not be aware of these things. The precedent in the code is to only do new stuff on new platforms, not to define dummy versions for all platforms.

&gt; Source/WebCore/platform/mac/NSScrollerImpDetails.mm:33
&gt; +bool isScrollbarOverlayAPIAvailable()

This function isn&apos;t necessary. The #if USE(SCROLLBAR_PAINTER) is definitely the way to do this, in my opinion.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:48
&gt; +#if !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MAX_ALLOWED &lt; MAC_OS_X_VERSION_10_6

Again, this shouldn&apos;t be necessary. None of this code should be running on pre-Lion systems.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:-560
&gt; -#if USE(SCROLLBAR_PAINTER)

Why is it okay to just remove some of these #if USE statements and replace others with if (isScrollbarOverlayAPIAvailable())? But again, I seriously object to the removal of the #is USE anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516090</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-06 11:36:35 -0800</bug_when>
    <thetext>For Chromium we don&apos;t build a different binary for Leopard/Snow Leopard/Lion, instead we build the same code and use runtime checks to decide the behavior - for example draw overlay scrollbars when running on Lion.

In other bits of the code with this issue we&apos;ve added helper functions that on Apple Mac builds compile down to a simple &apos;return true&apos; or &apos;return false&apos; depending on the BUILDING_ON_... macro and on chromium do the runtime check. Would that be appropriate here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516091</commentid>
    <comment_count>11</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-06 11:36:48 -0800</bug_when>
    <thetext>Thanks for the quick review Beth!

&gt; &gt; Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.h:34
&gt; &gt; +class ScrollbarThemeChromiumMac : public ScrollbarThemeMac {
&gt; 
&gt; I am taking your word for it that this is the right thing to do. As you know, I am not a Chromium platform expert, so I have a hard time evaluating this particular part of the patch, so I am just taking it for granted that this is correct. If a Chromium person could weigh in on this part, that would be ideal.

Sounds good. I&apos;ll get a Chromium person to review all the Chromium specific bits.

&gt; &gt; Source/WebCore/platform/mac/NSScrollerImpDetails.h:32
&gt; &gt; +#if (defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD))
&gt; 
&gt; This confuses me, and is the reason for the r-. Why are you defining these things on Leopard and SnowLeopard? They should definitely not be defined there. Overlay scrollbars are a concept new to Lion, and the old platforms should not be aware of these things. The precedent in the code is to only do new stuff on new platforms, not to define dummy versions for all platforms.

Sorry for the confusion, I should have put this in the ChangeLog.

For Chromium we have a single build that runs on all 3 platforms. Instead of using #define&apos;s we check for existence of APIs at runtime. I agree that this is slightly more code but it&apos;s not that much worse. We cache the existence of the API in a static variable (see NSScrollerImpDetails.mm:isScrollbarOverlayAPIAvailable()). Afterwards everything is exactly the same as with the #ifdef code.

If you would like I could change isScrollbarOverlayAPIAvailable() to be something like this:
#if !PLATFORM(CHROMIUM)
#define isScrollbarOverlayAPIAvailable() (true)
#else
#define isScrollbarOverlayAPIAvailable() (/* do runtime check here */)
#endif

Thanks!
Sailesh</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516206</commentid>
    <comment_count>12</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-12-06 13:41:59 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; For Chromium we don&apos;t build a different binary for Leopard/Snow Leopard/Lion, instead we build the same code and use runtime checks to decide the behavior - for example draw overlay scrollbars when running on Lion.
&gt; 

Ah! Okay! Thank you for explaining. I have never come across this before, though I suppose that seems rather surprising now that I understand.

&gt; In other bits of the code with this issue we&apos;ve added helper functions that on Apple Mac builds compile down to a simple &apos;return true&apos; or &apos;return false&apos; depending on the BUILDING_ON_... macro and on chromium do the runtime check. Would that be appropriate here?

I do think this would be more appropriate here. 

Maybe this is not a good idea, but something else that comes to mind is this…would it be possible to keep the ifdef and have it always set to true on Chromium so that the code is compiled in appropriately, and then use a runtime check to know whether to opt into it? I haven&apos;t fully fleshed out this though, and maybe it just doesn&apos;t make sense…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516211</commentid>
    <comment_count>13</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-06 13:45:57 -0800</bug_when>
    <thetext>&gt; Maybe this is not a good idea, but something else that comes to mind is this…would it be possible to keep the ifdef and have it always set to true on Chromium so that the code is compiled in appropriately, and then use a runtime check to know whether to opt into it? I haven&apos;t fully fleshed out this though, and maybe it just doesn&apos;t make sense…

I think this would be difficult in places where we do things like
  #if USE(SCROLLBAR_PAINTER)
      // do overlay scrollbar work
  #else
      // do non-overlay scrollbar work
  #endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516225</commentid>
    <comment_count>14</comment_count>
    <who name="">asvitkine</who>
    <bug_when>2011-12-06 13:59:23 -0800</bug_when>
    <thetext>&gt; If you would like I could change isScrollbarOverlayAPIAvailable() to be something like this:
&gt; #if !PLATFORM(CHROMIUM)
&gt; #define isScrollbarOverlayAPIAvailable() (true)
&gt; #else
&gt; #define isScrollbarOverlayAPIAvailable() (/* do runtime check here */)
&gt; #endif

This should be equivalent to the ifdef for modern compilers, which will be able to optimize the other branch away.

Though, you probably want to have the !PLATFORM(CHROMIUM) branch be based on USE(SCROLLBAR_PAINTER).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516760</commentid>
    <comment_count>15</comment_count>
      <attachid>118235</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-07 11:07:26 -0800</bug_when>
    <thetext>Created attachment 118235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516761</commentid>
    <comment_count>16</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-07 11:08:48 -0800</bug_when>
    <thetext>I&apos;ve replaced the runtime checks for !PLATFORM(CHROMIUM) with a simpler return true/false statement.

I tested Chromium and Safari on 10.6 and 10.7. New try jobs pending.

Please take another look. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516780</commentid>
    <comment_count>17</comment_count>
      <attachid>118235</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-07 11:35:27 -0800</bug_when>
    <thetext>Comment on attachment 118235
Patch

Attachment 118235 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10767147</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521252</commentid>
    <comment_count>18</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-14 13:40:38 -0800</bug_when>
    <thetext>Ping!
Hey Beth, could you take another look?
The cr-linux failure looks like a flake. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521536</commentid>
    <comment_count>19</comment_count>
      <attachid>118235</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-12-14 18:00:26 -0800</bug_when>
    <thetext>Comment on attachment 118235
Patch

Hi Sailesh, sorry for the delay. I was trying to figure out a way to avoid having ScrollerPainter-related member variables in pre-Lion builds. I guess there&apos;s no way around that though. Looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521549</commentid>
    <comment_count>20</comment_count>
      <attachid>118235</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-14 18:08:05 -0800</bug_when>
    <thetext>Comment on attachment 118235
Patch

Rejecting attachment 118235 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
245 (offset 9 lines).
Hunk #11 succeeded at 264 (offset 9 lines).
Hunk #12 succeeded at 273 (offset 9 lines).
Hunk #13 succeeded at 415 (offset 9 lines).
Hunk #14 succeeded at 435 (offset 9 lines).
Hunk #15 succeeded at 455 (offset 9 lines).
Hunk #16 FAILED at 471.
2 out of 16 hunks FAILED -- saving rejects to file Source/WebCore/platform/mac/ScrollbarThemeMac.mm.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Beth Dakin&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/10910048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524272</commentid>
    <comment_count>21</comment_count>
      <attachid>119944</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-19 16:29:58 -0800</bug_when>
    <thetext>Created attachment 119944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524298</commentid>
    <comment_count>22</comment_count>
      <attachid>119952</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-19 16:52:51 -0800</bug_when>
    <thetext>Created attachment 119952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524302</commentid>
    <comment_count>23</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-19 16:56:00 -0800</bug_when>
    <thetext>Beth could you take another look, had to fix merge conflict in xcode project.

The previous patch also resolved merge conflicts due to all the scroll animator / theme code changes that happened 2 weeks ago.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524303</commentid>
    <comment_count>24</comment_count>
      <attachid>119952</attachid>
    <who name="Nico Weber">thakis</who>
    <bug_when>2011-12-19 16:57:05 -0800</bug_when>
    <thetext>Comment on attachment 119952
Patch

you already had an r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524343</commentid>
    <comment_count>25</comment_count>
      <attachid>119952</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 18:01:32 -0800</bug_when>
    <thetext>Comment on attachment 119952
Patch

Clearing flags on attachment: 119952

Committed r103291: &lt;http://trac.webkit.org/changeset/103291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524344</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 18:01:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524666</commentid>
    <comment_count>27</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-20 10:18:13 -0800</bug_when>
    <thetext>Reverted because this patch broke fast/events/touch/gesture/gesture-scroll.html for Chromium on Mac 10.5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524695</commentid>
    <comment_count>28</comment_count>
      <attachid>120046</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-20 11:12:27 -0800</bug_when>
    <thetext>Created attachment 120046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524697</commentid>
    <comment_count>29</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-20 11:15:13 -0800</bug_when>
    <thetext>Fixed the 10.5 regression by reapply fix for bug 66577.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524866</commentid>
    <comment_count>30</comment_count>
      <attachid>120046</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-20 15:14:15 -0800</bug_when>
    <thetext>Comment on attachment 120046
Patch

Clearing flags on attachment: 120046

Committed r103354: &lt;http://trac.webkit.org/changeset/103354&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524867</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-20 15:14:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524915</commentid>
    <comment_count>32</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-12-20 15:57:15 -0800</bug_when>
    <thetext>This broke the build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524945</commentid>
    <comment_count>33</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-12-20 16:26:25 -0800</bug_when>
    <thetext>rniwa checked in the following change to fix the build:
http://trac.webkit.org/changeset/103363</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118000</attachid>
            <date>2011-12-06 00:09:57 -0800</date>
            <delta_ts>2011-12-07 11:07:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61144-20111206000955.patch</filename>
            <type>text/plain</type>
            <size>153499</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM3MjlkMjJiYzljZDhj
ZWNlZjA1MzAxZTA0YjBjMTMyYmIyOWVjOC4uODRlY2QwMjhmYmIzYjc1MjRkNmY0Mzg0OTc3NjU0
MWM2NTBhM2U2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDExLTEyLTA2ICBTYWls
ZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBNZXJnZSBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjLm1tIGJhY2sgdG8gU2Nyb2xsQW5pbWF0b3JNYWMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTQ0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXQgYSBoaWdoIGxldmVsIHRo
ZSBtYWluIGNoYW5nZXMgYXJlOgorICAgICAgICAgICAgLSByZXBsYWNlICNpZmRlZnMgaW4gU2Ny
b2xsQW5pbWF0b3JNYWMgYW5kIFNjcm9sbGJhclRoZW1lTWFjIHdpdGggcnVuIHRpbWUgY2hlY2tz
CisgICAgICAgICAgICAtIGRlbGV0ZSBkdXBsaWNhdGUgY29kZSBpbiBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjLiBLZWVwIHRoZSBwYWludCBjb2RlIHNpbmNlIGl0IGRvZXMgdGlja21hcmtzIGFu
ZCBTS0lBIHN0dWZmLgorICAgICAgICAgICAgLSBkZWxldGUgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYyBzaW5jZSBTY3JvbGxBbmltYXRvck1hYyBkb2VzIHRoZSBleGFjdCBzYW1lIHRoaW5nCisg
ICAgICAgICAgICAtIGRlbGV0ZSBTY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMg
c2luY2UgTlNTY3JvbGxlckltcERldGFpbHMgZG9lcyB0aGUgc2FtZSB0aGluZworCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gSnVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW06IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFj
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3Zlcmxh
eVV0aWxpdGllc0Nocm9taXVtTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJQYWludGVyUGFpbnRUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludCk6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFj
L05TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWNvbW1lbmRl
ZFNjcm9sbGVyU3R5bGUpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAgICAg
ICAgKHN1cHBvcnRzVUlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3Jl
OjptYWNTY3JvbGxiYXJUaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6U2Nyb2xsQW5pbWF0b3JNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JN
YWM6On5TY3JvbGxBbmltYXRvck1hYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yTWFjOjpjb250ZW50QXJlYVdpbGxQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUVudGVyZWRTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVkU2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsU3RhcnRMaXZl
UmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50c1Jl
c2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxFbmRMaXZl
UmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJl
YURpZFNob3cpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRB
cmVhRGlkSGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkQmVn
aW5TY3JvbGxHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpk
aWRFbmRTY3JvbGxHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJh
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y2FuY2VsQW5pbWF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c25hcFJ1YmJlckJhbmQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNldElzQWN0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp1cGRhdGVTY3JvbGxlclN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFp
bnRUaW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06CisgICAgICAgICgr
W1dlYlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgYXBwZWFyYW5jZVByZWZzQ2hhbmdlZDpdKToKKyAg
ICAgICAgKCtbV2ViU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciBiZWhhdmlvclByZWZzQ2hhbmdlZDpd
KToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUFycm93UGxhY2VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjpyZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnRlckZvclNjcm9sbGJhcik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6U2Nyb2xsYmFyVGhlbWVNYWMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnNjcm9sbGJhclRoaWNrbmVzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6dXNlc092ZXJsYXlTY3JvbGxiYXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjp1cGRhdGVTY3JvbGxiYXJPdmVy
bGF5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6Omhhc0J1dHRv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6Omhhc1RodW1iKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1dHRvblJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lTWFjOjptaW5pbXVtVGh1bWJMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVNYWM6OnNjcm9sbGJhclBhcnRUb0hJUHJlc3NlZFN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjp1cGRhdGVFbmFibGVkU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFyUGFpbnRlclBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lTWFjOjpwYWludCk6CisKIDIwMTEtMTItMDMgIEFuZHJlYXMgS2xpbmcg
IDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydCBhY2NpZGVu
dGFsIGNoYW5nZSBmcm9tIHIxMDE5MzIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCmluZGV4IDIyYTQ4YzBmNGNlNGU0MmQzOTdkMDQ3M2U5ZjdmY2RlN2QxZGFiZDcuLmUwZWMw
MDFjM2I0NzI5MjhiM2FiMzAyMjM5NTVjZmNkYjE4NDRhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0xMjU5LDEzICsxMjU5LDEzIEBACiAgICAgICAgICAgICAg
ICMgc3VjaCBhczoKICAgICAgICAgICAgICAgIyBjb20uZ29vZ2xlLkNocm9tZVtdIG9iamNbXTog
Q2xhc3MgU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciBpcyBpbXBsZW1lbnRlZCBpbiBib3RoIC4uLi9H
b29nbGUgQ2hyb21lLmFwcC9Db250ZW50cy9WZXJzaW9ucy8uLi4vR29vZ2xlIENocm9tZSBIZWxw
ZXIuYXBwL0NvbnRlbnRzL01hY09TLy4uLy4uLy4uL0dvb2dsZSBDaHJvbWUgRnJhbWV3b3JrLmZy
YW1ld29yay9Hb29nbGUgQ2hyb21lIEZyYW1ld29yayBhbmQgL1N5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvV2ViS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvV2ViQ29yZS5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9XZWJDb3JlLiBPbmUgb2YgdGhlIHR3byB3aWxsIGJlIHVzZWQuIFdo
aWNoIG9uZSBpcyB1bmRlZmluZWQuCiAgICAgICAgICAgICAgICdXZWJDYXNjYWRlTGlzdD1DaHJv
bWl1bVdlYkNvcmVPYmpDV2ViQ2FzY2FkZUxpc3QnLAotICAgICAgICAgICAgICAnU2Nyb2xsYmFy
UHJlZnNPYnNlcnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcics
CisgICAgICAgICAgICAgICdXZWJTY3JvbGxiYXJQcmVmc09ic2VydmVyPUNocm9taXVtV2ViQ29y
ZU9iakNXZWJTY3JvbGxiYXJQcmVmc09ic2VydmVyJywKICAgICAgICAgICAgICAgJ1dlYkNvcmVS
ZW5kZXJUaGVtZU5vdGlmaWNhdGlvbk9ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNXZWJDb3Jl
UmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJGb250
Q2FjaGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYkZvbnRDYWNoZScsCi0gICAgICAgICAgICAgICdT
Y3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsQW5p
bWF0aW9uSGVscGVyRGVsZWdhdGUnLAotICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJEZWxlZ2F0ZScsCi0gICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU9
Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZScsCi0gICAgICAgICAg
ICAgICdTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQ
YXJ0QW5pbWF0aW9uJywKKyAgICAgICAgICAgICAgJ1dlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRl
bGVnYXRlPUNocm9taXVtV2ViQ29yZU9iakNXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0
ZScsCisgICAgICAgICAgICAgICdXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRl
PUNocm9taXVtV2ViQ29yZU9iakNXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRl
JywKKyAgICAgICAgICAgICAgJ1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZT1DaHJvbWl1bVdl
YkNvcmVPYmpDV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlJywKKyAgICAgICAgICAgICAgJ1dl
YlNjcm9sbGJhclBhcnRBbmltYXRpb249Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYlNjcm9sbGJhclBh
cnRBbmltYXRpb24nLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMn
OiBbCiAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2FwcGxl
X3dlYmtpdCcsCkBAIC0xNTMzLDcgKzE1MzMsMTEgQEAKICAgICAgICAgICAgIFsnaW5jbHVkZScs
ICdwbGF0Zm9ybS9tYWMvQmxvY2tFeGNlcHRpb25zXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2lu
Y2x1ZGUnLCAncGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjXFwubW0kJ10sCiAgICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dFxcLm1t
JCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1w
RGV0YWlsc1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9Q
dXJnZWFibGVCdWZmZXJNYWNcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjXFwubW0kJ10sCisgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyXFwu
bW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0
ZW1JbnRlcmZhY2VcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9t
YWMvV2ViQ29yZVRleHRSZW5kZXJlclxcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywg
J3BsYXRmb3JtL3RleHQvbWFjL1NoYXBlQXJhYmljXFwuYyQnXSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCAyZmY2MjUwMDY3OTE4OGUwYTMwOTE5OTU2YzdjYWI1NjQ2ZjM2NWYxLi5lNTU5ODkxMTc2ZTRm
ODlhZDFmMzY5ZjlmZmI3YWJlMTU2M2QzNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zMjgzLDEw
ICszMjgzLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cExpc3RCb3gu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51UHJpdmF0ZS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5j
cHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWMuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYy5tbScsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFy
T3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5tbScsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4
LmNwcCcsCkBAIC00MTAwLDYgKzQwOTYsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9M
b2NhbGl6ZWRTdHJpbmdzTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvTG9nZ2lu
Z01hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL01JTUVUeXBlUmVnaXN0cnlNYWMu
bW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvTlNTY3JvbGxlckltcERldGFpbHMubW0nLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkSGVscGVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9t
YWMvUGxhdGZvcm1DbG9ja0NBLmNwcCcsCkBAIC00MTExLDYgKzQxMDksOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL21hYy9TY2hlZHVsZVBhaXJNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3JvbGxF
bGFzdGljaXR5Q29udHJvbGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvU2Nyb2xs
RWxhc3RpY2l0eUNvbnRyb2xsZXIubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3Jv
bGxWaWV3TWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVN
YWMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA0OTZkZDkwZWM2MTcyZGM2NWFhNzUwYWU1YjU2NjU1YzA2OWU5M2Q4Li5jNzFjNjNmNTZi
MWNjZjMxYTE5ZjNhYjlhYTEyNDg5NzA1NDBhYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODc2LDYgKzQ4NzYsNyBAQAog
CQlCNjU2NjI3MTEyMEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjU2NjI2RjEyMEIxMjI3
MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5jcHAgKi87IH07CiAJCUI2OTFDMUY5MTIwNkQ0
QTAwMDI1RDk4MCAvKiBJREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZBMzExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJh
c2UuY3BwICovOyB9OwogCQlCNzFGRTZERjExMDkxQ0IzMDBEQUVGNzcgLyogUHJpbnRDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzc2RDQz
QTExMDQ1MjVEMDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjcyQjE1OEExNDhEQjUyOTAwQUI0NzFBIC8q
IE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjcyQjE1ODkxNDhEQjUyOTAwQUI0NzFBIC8qIE5TU2Nyb2xsZXJJbXBE
ZXRhaWxzLm1tICovOyB9OwogCQlCNzM0QjE4MTExOUI5OTExMDA2NTg3QkQgLyogRm9udFRyYW5z
Y29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjczNEIxODAxMTlCOTkxMTAwNjU4N0JEIC8qIEZvbnRUcmFuc2NvZGVyLmNwcCAqLzsgfTsKIAkJ
QjczNEIxODMxMTlCOTkxRDAwNjU4N0JEIC8qIEZvbnRUcmFuc2NvZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzM0QjE4MjExOUI5OTFEMDA2NTg3
QkQgLyogRm9udFRyYW5zY29kZXIuaCAqLzsgfTsKIAkJQjc3NkQ0M0QxMTA0NTI3NTAwQkVCMEVD
IC8qIFByaW50Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNwcCAq
LzsgfTsKQEAgLTEyMTYxLDYgKzEyMTYyLDcgQEAKIAkJQjY1NjYyNkQxMjBCMTE2QjAwNkVBODVD
IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjY1NjYyNkUxMjBCMTIyNzAwNkVBODVDIC8qIEpTSURCVHJh
bnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJUcmFuc2Fj
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNjU2NjI2RjEyMEIxMjI3MDA2
RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0lEQlRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQjcyQjE1ODkxNDhEQjUyOTAwQUI0NzFBIC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTlNTY3JvbGxlckltcERl
dGFpbHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI3MzRCMTgwMTE5Qjk5MTEw
MDY1ODdCRCAvKiBGb250VHJhbnNjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGb250VHJhbnNjb2Rlci5jcHA7IHBhdGggPSB0cmFuc2NvZGVyL0ZvbnRUcmFu
c2NvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjczNEIxODIxMTlCOTkx
RDAwNjU4N0JEIC8qIEZvbnRUcmFuc2NvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZvbnRUcmFuc2NvZGVyLmg7IHBhdGggPSB0cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI3NzZENDNBMTEwNDUyNUQwMEJFQjBF
QyAvKiBQcmludENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJp
bnRDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTQ2NSw2ICsxNTQ2
Nyw3IEBACiAJCQkJNjU3RURBMEExMzg1Q0JEODAwNEUwNjQ1IC8qIE1lbW9yeVByZXNzdXJlSGFu
ZGxlck1hYy5tbSAqLywKIAkJCQlCQzc3MkM1RDBDNEVCMzQ0MDA4MzI4NUYgLyogTUlNRVR5cGVS
ZWdpc3RyeU1hYy5tbSAqLywKIAkJCQk5MzUwMEYzMTEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3Jv
bGxlckltcERldGFpbHMuaCAqLywKKwkJCQlCNzJCMTU4OTE0OERCNTI5MDBBQjQ3MUEgLyogTlNT
Y3JvbGxlckltcERldGFpbHMubW0gKi8sCiAJCQkJQTdEM0M1MjMwQjU3NkI0QjAwMkNBNDUwIC8q
IFBhc3RlYm9hcmRIZWxwZXIuaCAqLywKIAkJCQk0QjI3MDk4MTBBRjJFNUUwMDA2NTEyN0YgLyog
UGFzdGVib2FyZE1hYy5tbSAqLywKIAkJCQk5MzVDNDc2RjA5QUM0RDczMDBBNkFBQjQgLyogUGxh
dGZvcm1Nb3VzZUV2ZW50TWFjLm1tICovLApAQCAtMjc2MTksNiArMjc2MjIsNyBAQAogCQkJCTZF
M0ZBRDM4MTQ3MzNGNDAwMEU0MjMwNiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTZFM0ZBRThFMTQ3MzNGREIwMEU0MjMwNiAvKiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNjU1NDEzQTE0ODk4MTFDMDAw
REZDNUQgLyogS2V5RXZlbnRJT1MubW0gaW4gU291cmNlcyAqLywKKwkJCQlCNzJCMTU4QTE0OERC
NTI5MDBBQjQ3MUEgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0gaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZiODQ5
Y2YyODQyNzA0ZDMwMGY5ZTc3MzVlMDQxYjc1MzExYTEzZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Y19oCi0jZGVmaW5lIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaAotCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgotI2luY2x1ZGUgIlNjcm9sbGJhck92ZXJsYXlV
dGlsaXRpZXNDaHJvbWl1bU1hYy5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotCi0jaWZkZWYgX19PQkpDX18KLUBjbGFzcyBTY3JvbGxBbmltYXRpb25I
ZWxwZXJEZWxlZ2F0ZTsKLUBjbGFzcyBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7Ci1AY2xhc3Mg
U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsKLUBjbGFzcyBTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGU7Ci0jZWxzZQotY2xhc3MgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7
Ci1jbGFzcyBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7Ci1jbGFzcyBTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlckRlbGVnYXRlOwotY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2Nyb2xsYmFyOwotCi1jbGFzcyBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKFNjcm9sbGFibGVBcmVh
Kik7Ci0gICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYygpOwotCi0gICAgdmly
dHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxU
b09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwotCi0jaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYpIE9WRVJSSURFOwotI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2Vz
dHVyZUV2ZW50Jik7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIGNhbmNlbEFu
aW1hdGlvbnMoKTsKLQotICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9h
dFBvaW50JiBuZXdQb3NpdGlvbik7Ci0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWChm
bG9hdCBkZWx0YVgpOwotICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkoZmxvYXQgZGVs
dGFZKTsKLQotICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlv
bihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbik7Ci0KLSAgICB2b2lkIHNldElzRHJhd2lu
Z0ludG9MYXllcihib29sIGIpIHsgbV9kcmF3aW5nSW50b0xheWVyID0gYjsgfQotICAgIGJvb2wg
aXNEcmF3aW5nSW50b0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nSW50b0xheWVyOyB9
Ci0KLSAgICBib29sIGhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdCB7IHJldHVybiBt
X2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0Fj
dGl2ZSgpOwotCi0jaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsZXJTdHlsZSgpOwotCi0gICAgYm9vbCBzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUo
KSBjb25zdDsKLSAgICB2b2lkIHN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotICAgIHZvaWQg
c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRWaXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYpOwotCi1wcml2YXRlOgotICAgIFJldGFp
blB0cjxpZD4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXI7Ci0gICAgUmV0YWluUHRyPFNjcm9sbEFu
aW1hdGlvbkhlbHBlckRlbGVnYXRlPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwot
Ci0jaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQotICAgIFJldGFpblB0cjxXS1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyUmVmPiBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyOwotICAg
IFJldGFpblB0cjxTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlPiBtX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7Ci0gICAgUmV0YWluUHRyPGlkPiBtX3Njcm9sbGJh
clBhaW50ZXJEZWxlZ2F0ZTsKLQotICAgIHZvaWQgaW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJG
aXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiopOwotICAgIFRpbWVyPFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM+IG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXI7Ci0jZW5k
aWYKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7Ci0gICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIG1v
dXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3Zl
ZEluQ29udGVudEFyZWEoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2ZVJl
c2l6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1Jlc2l6ZWQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVu
dEFyZWFEaWRTaG93KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlk
ZSgpIGNvbnN0OwotICAgIHZvaWQgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3Q7Ci0gICAg
dm9pZCBkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxS
ZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
QWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2ls
bFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0KLSAgICB2b2lkIHNldE5l
ZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZShib29sIG5lZWRzVXBkYXRlKSB7IG1fbmVlZHNTY3JvbGxl
clN0eWxlVXBkYXRlID0gbmVlZHNVcGRhdGU7IH0KLSAgICBib29sIG5lZWRzU2Nyb2xsZXJTdHls
ZVVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlOyB9Ci0K
LSAgICBmbG9hdCBhZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7
Ci0gICAgZmxvYXQgYWRqdXN0U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQpIGNvbnN0
OwotICAgIEZsb2F0UG9pbnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBG
bG9hdFBvaW50JikgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgYm9v
bCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSBjb25zdDsKLSAgICBib29sIGFsbG93c0hvcml6
b250YWxTdHJldGNoaW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBwaW5uZWRJbkRpcmVjdGlvbihmbG9h
dCBkZWx0YVgsIGZsb2F0IGRlbHRhWSk7Ci0gICAgdm9pZCBzbmFwUnViYmVyQmFuZCgpOwotICAg
IHZvaWQgc25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM+Kik7Ci0gICAgdm9pZCBzbW9vdGhTY3JvbGxXaXRoRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50Jik7Ci0gICAgdm9pZCBiZWdpblNjcm9sbEdlc3R1cmUoKTsKLSAgICB2b2lkIGVu
ZFNjcm9sbEdlc3R1cmUoKTsKLQotICAgIGJvb2wgbV9pblNjcm9sbEdlc3R1cmU7Ci0gICAgYm9v
bCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzczsKLSAgICBib29sIG1faWdub3JlTW9tZW50dW1T
Y3JvbGxzOwotCi0gICAgYm9vbCBtX3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25MZWZ0OwotICAg
IGJvb2wgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uUmlnaHQ7Ci0gICAgaW50IG1fY3VtdWxh
dGl2ZUhvcml6b250YWxTY3JvbGw7Ci0gICAgYm9vbCBtX2RpZEN1bXVsYXRpdmVIb3Jpem9udGFs
U2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25PZlBpbjsKLQotICAgIENGVGltZUlu
dGVydmFsIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIEZsb2F0U2l6ZSBtX292
ZXJmbG93U2Nyb2xsRGVsdGE7Ci0gICAgRmxvYXRTaXplIG1fc3RyZXRjaFNjcm9sbEZvcmNlOwot
ICAgIEZsb2F0U2l6ZSBtX21vbWVudHVtVmVsb2NpdHk7Ci0KLSAgICAvLyBSdWJiZXIgYmFuZCBz
dGF0ZS4KLSAgICBDRlRpbWVJbnRlcnZhbCBtX3N0YXJ0VGltZTsKLSAgICBGbG9hdFNpemUgbV9z
dGFydFN0cmV0Y2g7Ci0gICAgRmxvYXRQb2ludCBtX29yaWdPcmlnaW47Ci0gICAgRmxvYXRTaXpl
IG1fb3JpZ1ZlbG9jaXR5OwotICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+IG1f
c25hcFJ1YmJlckJhbmRUaW1lcjsKLSNlbmRpZgotICAgIGJvb2wgbV9kcmF3aW5nSW50b0xheWVy
OwotICAgIGJvb2wgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkOwotICAgIGJvb2wgbV9uZWVk
c1Njcm9sbGVyU3R5bGVVcGRhdGU7Ci0gICAgSW50UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1i
UmVjdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDUwNGNlODg2YzM0ZjgyYWEzN2M2ZWM5NjM5N2ZiNjU1NGM1NGE4
NTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbQor
KysgL2Rldi9udWxsCkBAIC0xLDEzNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL3N5
c2N0bC5oPgotCi0jaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oIgotCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgot
I2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIK
LSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgiCi0jaW5jbHVkZSAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0jaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotI2lm
ICFkZWZpbmVkKE1BQ19PU19YX1ZFUlNJT05fMTBfNikgfHwgTUFDX09TX1hfVkVSU0lPTl9NQVhf
QUxMT1dFRCA8IE1BQ19PU19YX1ZFUlNJT05fMTBfNgotQHByb3RvY29sIE5TQW5pbWF0aW9uRGVs
ZWdhdGUKLUBlbmQKLQotQGludGVyZmFjZSBOU1Byb2Nlc3NJbmZvIChTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjRXh0KQotLSAoTlNUaW1lSW50ZXJ2YWwpc3lzdGVtVXB0aW1lOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gTlNQcm9jZXNzSW5mbyAoU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hY0V4
dCkKLS0gKE5TVGltZUludGVydmFsKXN5c3RlbVVwdGltZQotewotICAgIC8vIEdldCBob3cgbG9u
ZyBzeXN0ZW0gaGFzIGJlZW4gdXAuIEZvdW5kIGJ5IGxvb2tpbmcgZ2V0dGluZyAiYm9vdHRpbWUi
IGZyb20gdGhlIGtlcm5lbC4KLSAgICBzdGF0aWMgc3RydWN0IHRpbWV2YWwgYm9vdHRpbWUgPSB7
MH07Ci0gICAgaWYgKCFib290dGltZS50dl9zZWMpIHsKLSAgICAgICAgaW50IG1pYlsyXSA9IHtD
VExfS0VSTiwgS0VSTl9CT09UVElNRX07Ci0gICAgICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKGJv
b3R0aW1lKTsKLSAgICAgICAgaWYgKC0xID09IHN5c2N0bChtaWIsIDIsICZib290dGltZSwgJnNp
emUsIDAsIDApKQotICAgICAgICAgICAgYm9vdHRpbWUudHZfc2VjID0gMDsKLSAgICB9Ci0gICAg
c3RydWN0IHRpbWV2YWwgbm93OwotICAgIGlmIChib290dGltZS50dl9zZWMgJiYgLTEgIT0gZ2V0
dGltZW9mZGF5KCZub3csIDApKSB7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsIHVwdGltZTsKLSAg
ICAgICAgdGltZXJzdWIoJm5vdywgJmJvb3R0aW1lLCAmdXB0aW1lKTsKLSAgICAgICAgTlNUaW1l
SW50ZXJ2YWwgcmVzdWx0ID0gdXB0aW1lLnR2X3NlYyArICh1cHRpbWUudHZfdXNlYyAvIDFFKzYp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLUBlbmQK
LSNlbmRpZgotCi1AaW50ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxBbmltYXRpb25IZWxwZXJEZXRh
aWxzKQotLSAoaWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQpZGVsZWdhdGU7Ci0tICh2b2lkKV9zdG9w
UnVuOwotLSAoQk9PTClfaXNBbmltYXRpbmc7Ci0tIChOU1BvaW50KXRhcmdldE9yaWdpbjsKLS0g
KENHRmxvYXQpX3Byb2dyZXNzOwotQGVuZAotCi1AaW50ZXJmYWNlIFNjcm9sbEFuaW1hdGlvbkhl
bHBlckRlbGVnYXRlIDogTlNPYmplY3QKLXsKLSAgICBXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjKiBfYW5pbWF0b3I7Ci19Ci0tIChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvcjsKLUBlbmQK
LQotc3RhdGljIE5TU2l6ZSBhYnMoTlNTaXplIHNpemUpCi17Ci0gICAgTlNTaXplIGZpbmFsU2l6
ZSA9IHNpemU7Ci0gICAgaWYgKGZpbmFsU2l6ZS53aWR0aCA8IDApCi0gICAgICAgIGZpbmFsU2l6
ZS53aWR0aCA9IC1maW5hbFNpemUud2lkdGg7Ci0gICAgaWYgKGZpbmFsU2l6ZS5oZWlnaHQgPCAw
KQotICAgICAgICBmaW5hbFNpemUuaGVpZ2h0ID0gLWZpbmFsU2l6ZS5oZWlnaHQ7Ci0gICAgcmV0
dXJuIGZpbmFsU2l6ZTsgICAgCi19Ci0KLUBpbXBsZW1lbnRhdGlvbiBTY3JvbGxBbmltYXRpb25I
ZWxwZXJEZWxlZ2F0ZQotCi0tIChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvcgotewotICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
X2FuaW1hdG9yID0gc2Nyb2xsQW5pbWF0b3I7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWQKLXsKLSAgICBfYW5pbWF0b3IgPSAwOwotfQotCi0t
IChOU1JlY3QpYm91bmRzCi17Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAgIHJldHVybiBO
U1plcm9SZWN0OwotCi0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24gPSBf
YW5pbWF0b3ItPmN1cnJlbnRQb3NpdGlvbigpOwotICAgIHJldHVybiBOU01ha2VSZWN0KGN1cnJl
bnRQb3NpdGlvbi54KCksIGN1cnJlbnRQb3NpdGlvbi55KCksIDAsIDApOwotfQotCi0tICh2b2lk
KV9pbW1lZGlhdGVTY3JvbGxUb1BvaW50OihOU1BvaW50KW5ld1Bvc2l0aW9uCi17Ci0gICAgaWYg
KCFfYW5pbWF0b3IpCi0gICAgICAgIHJldHVybjsKLSAgICBfYW5pbWF0b3ItPmltbWVkaWF0ZVNj
cm9sbFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24obmV3UG9zaXRpb24pOwotfQotCi0tIChOU1Bv
aW50KV9waXhlbEFsaWduUHJvcG9zZWRTY3JvbGxQb3NpdGlvbjooTlNQb2ludCluZXdPcmlnaW4K
LXsKLSAgICByZXR1cm4gbmV3T3JpZ2luOwotfQotCi0tIChOU1NpemUpY29udmVydFNpemVUb0Jh
c2U6KE5TU2l6ZSlzaXplCi17Ci0gICAgcmV0dXJuIGFicyhzaXplKTsKLX0KLQotLSAoTlNTaXpl
KWNvbnZlcnRTaXplRnJvbUJhc2U6KE5TU2l6ZSlzaXplCi17Ci0gICAgcmV0dXJuIGFicyhzaXpl
KTsKLX0KLQotLSAoTlNTaXplKWNvbnZlcnRTaXplVG9CYWNraW5nOihOU1NpemUpc2l6ZQotewot
ICAgIHJldHVybiBhYnMoc2l6ZSk7Ci19Ci0KLS0gKE5TU2l6ZSljb252ZXJ0U2l6ZUZyb21CYWNr
aW5nOihOU1NpemUpc2l6ZQotewotICAgIHJldHVybiBhYnMoc2l6ZSk7Ci19Ci0KLS0gKGlkKXN1
cGVydmlldwotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKGlkKWRvY3VtZW50Vmlldwotewot
ICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKGlkKXdpbmRvdwotewotICAgIHJldHVybiBuaWw7Ci19
Ci0KLS0gKHZvaWQpX3JlY3Vyc2l2ZVJlY29tcHV0ZVRvb2xUaXBzCi17Ci19Ci0KLUBlbmQKLQot
I2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLQotQGludGVyZmFjZSBTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3QKLXsKLSAgICBXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7Ci19Ci0tIChpZClpbml0V2l0aFNjcm9sbEFu
aW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRv
cjsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVs
ZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IKLXsKLSAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfYW5p
bWF0b3IgPSBzY3JvbGxBbmltYXRvcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClz
Y3JvbGxBbmltYXRvckRlc3Ryb3llZAotewotICAgIF9hbmltYXRvciA9IDA7Ci19Ci0KLS0gKE5T
UmVjdCljb250ZW50QXJlYVJlY3RGb3JTY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFp
cgotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwotICAgIGlmICghX2FuaW1h
dG9yKQotICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKLQotICAgIFdlYkNvcmU6OkludFNpemUg
Y29udGVudHNTaXplID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5jb250ZW50c1NpemUo
KTsKLSAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCBjb250ZW50c1NpemUud2lkdGgoKSwgY29u
dGVudHNTaXplLmhlaWdodCgpKTsKLX0KLQotLSAoQk9PTClpbkxpdmVSZXNpemVGb3JTY3JvbGxl
ckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpcgotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxl
ckltcFBhaXIpOwotICAgIGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAg
ICByZXR1cm4gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKTsKLX0K
LQotLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5Db250ZW50QXJlYUZvclNjcm9sbGVySW1wUGFp
cjooaWQpc2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFp
cik7Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKLQot
ICAgIHJldHVybiBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmN1cnJlbnRNb3VzZVBvc2l0
aW9uKCk7Ci19Ci0KLS0gKE5TUG9pbnQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBh
aXIgY29udmVydENvbnRlbnRQb2ludDooTlNQb2ludClwb2ludEluQ29udGVudEFyZWEgdG9TY3Jv
bGxlckltcDooaWQpc2Nyb2xsZXJJbXAKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQ
YWlyKTsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50Owot
Ci0gICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAwOwotICAgIGlmICh3a1Njcm9s
bGJhclBhaW50ZXJJc0hvcml6b250YWwoKFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3JvbGxlcklt
cCkpCi0gICAgICAgIHNjcm9sbGJhciA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+aG9y
aXpvbnRhbFNjcm9sbGJhcigpOwotICAgIGVsc2UgCi0gICAgICAgIHNjcm9sbGJhciA9IF9hbmlt
YXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+dmVydGljYWxTY3JvbGxiYXIoKTsKLQotICAgIC8vIEl0
IGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBudWxsIHNjcm9sbGJhciBoZXJlIHNpbmNlIGl0IGlzIHBv
c3NpYmxlIGZvciB0aGlzIGRlbGVnYXRlCi0gICAgLy8gbWV0aG9kIHRvIGJlIGNhbGxlZCBiZXR3
ZWVuIHRoZSBtb21lbnQgd2hlbiBhIHNjcm9sbGJhciBoYXMgYmVlbiBzZXQgdG8gMCBhbmQgdGhl
Ci0gICAgLy8gbW9tZW50IHdoZW4gaXRzIGRlc3RydWN0b3IgaGFzIGJlZW4gY2FsbGVkLiBXZSBz
aG91bGQgcHJvYmFibHkgZGUtY291cGxlIHNvbWUKLSAgICAvLyBvZiB0aGUgY2xlYW4tdXAgd29y
ayBpbiBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKCkgdG8g
YXZvaWQgdGhpcwotICAgIC8vIGlzc3VlLgotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6SW50UG9pbnQoKTsKLSAgICAKLSAgICByZXR1cm4gc2Nyb2xsYmFyLT5j
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KFdlYkNvcmU6OkludFBvaW50KHBvaW50SW5Db250ZW50
QXJlYSkpOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWly
IHNldENvbnRlbnRBcmVhTmVlZHNEaXNwbGF5SW5SZWN0OihOU1JlY3QpcmVjdAotewotICAgIFVO
VVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwotICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKLX0K
LQotLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciB1cGRhdGVTY3Jv
bGxlclN0eWxlRm9yTmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlOihOU1Njcm9sbGVyU3R5bGUp
bmV3UmVjb21tZW5kZWRTY3JvbGxlclN0eWxlCi17Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJTdHlsZSgo
V0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZilzY3JvbGxlckltcFBhaXIsIG5ld1JlY29t
bWVuZGVkU2Nyb2xsZXJTdHlsZSk7Ci0gICAgX2FuaW1hdG9yLT51cGRhdGVTY3JvbGxlclN0eWxl
KCk7Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIDogTlNB
bmltYXRpb24KLXsKLSAgICBSZXRhaW5QdHI8V0tTY3JvbGxiYXJQYWludGVyUmVmPiBfc2Nyb2xs
ZXJQYWludGVyOwotICAgIFdlYkNvcmU6OlNjcm9sbGJhclBhcnQgX3BhcnQ7Ci0gICAgV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOwotICAgIENHRmxvYXQgX2lu
aXRpYWxBbHBoYTsKLSAgICBDR0Zsb2F0IF9uZXdBbHBoYTsKLX0KLS0gKGlkKWluaXRXaXRoU2Ny
b2xsYmFyUGFpbnRlcjooV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0
OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0KXBhcnQgc2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yIGFuaW1hdGVBbHBoYVRvOihD
R0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbjsKLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFNjcm9sbGJhclBhcnRBbmltYXRpb24KLQotLSAoaWQpaW5pdFdp
dGhTY3JvbGxiYXJQYWludGVyOihXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQYWludGVy
IHBhcnQ6KFdlYkNvcmU6OlNjcm9sbGJhclBhcnQpcGFydCBzY3JvbGxBbmltYXRvcjooV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IgYW5pbWF0ZUFscGhh
VG86KENHRmxvYXQpbmV3QWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17
Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aER1cmF0aW9uOmR1cmF0aW9uIGFuaW1hdGlvbkN1
cnZlOk5TQW5pbWF0aW9uRWFzZUluT3V0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgCi0gICAgX3Njcm9sbGVyUGFpbnRlciA9IHNjcm9sbGVyUGFpbnRlcjsKLSAg
ICBfcGFydCA9IHBhcnQ7Ci0gICAgX2FuaW1hdG9yID0gc2Nyb2xsQW5pbWF0b3I7Ci0gICAgX2lu
aXRpYWxBbHBoYSA9IF9wYXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCA/IHdrU2Nyb2xsYmFyUGFp
bnRlcktub2JBbHBoYShfc2Nyb2xsZXJQYWludGVyLmdldCgpKSA6IHdrU2Nyb2xsYmFyUGFpbnRl
clRyYWNrQWxwaGEoX3Njcm9sbGVyUGFpbnRlci5nZXQoKSk7Ci0gICAgX25ld0FscGhhID0gbmV3
QWxwaGE7Ci0gICAgCi0gICAgcmV0dXJuIHNlbGY7ICAgIAotfQotCi0tICh2b2lkKXNldEN1cnJl
bnRQcm9ncmVzczooTlNBbmltYXRpb25Qcm9ncmVzcylwcm9ncmVzcwotewotICAgIFtzdXBlciBz
ZXRDdXJyZW50UHJvZ3Jlc3M6cHJvZ3Jlc3NdOwotCi0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENHRmxvYXQgY3VycmVudEFscGhhOwotICAgIGlmIChfaW5pdGlh
bEFscGhhID4gX25ld0FscGhhKQotICAgICAgICBjdXJyZW50QWxwaGEgPSAxIC0gcHJvZ3Jlc3M7
Ci0gICAgZWxzZQotICAgICAgICBjdXJyZW50QWxwaGEgPSBwcm9ncmVzczsKLSAgICAKLSAgICBp
ZiAoX3BhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0KQotICAgICAgICB3a1NldFNjcm9sbGJhclBh
aW50ZXJLbm9iQWxwaGEoX3Njcm9sbGVyUGFpbnRlci5nZXQoKSwgY3VycmVudEFscGhhKTsKLSAg
ICBlbHNlCi0gICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoX3Njcm9sbGVy
UGFpbnRlci5nZXQoKSwgY3VycmVudEFscGhhKTsKLQotICAgIC8vIEludmFsaWRhdGUgdGhlIHNj
cm9sbGJhcnMgc28gdGhhdCB0aGV5IHBhaW50IHRoZSBhbmltYXRpb24KLSAgICBpZiAoV2ViQ29y
ZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFy
ZWEoKS0+dmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPmlu
dmFsaWRhdGVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCksIHZlcnRpY2FsU2Nyb2xsYmFyLT5oZWlnaHQoKSkpOwotICAgIGlmIChXZWJDb3JlOjpT
Y3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVh
KCktPmhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+
aW52YWxpZGF0ZVJlY3QoV2ViQ29yZTo6SW50UmVjdCgwLCAwLCBob3Jpem9udGFsU2Nyb2xsYmFy
LT53aWR0aCgpLCBob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSkpOwotfQotCi0tICh2b2lk
KXNjcm9sbEFuaW1hdG9yRGVzdHJveWVkCi17Ci0gICAgW3NlbGYgc3RvcEFuaW1hdGlvbl07Ci0g
ICAgX2FuaW1hdG9yID0gMDsKLX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIFNjcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0PE5TQW5pbWF0aW9uRGVsZWdhdGU+Ci17Ci0gICAgV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOwotCi0gICAgUmV0YWluUHRy
PFNjcm9sbGJhclBhcnRBbmltYXRpb24+IF92ZXJ0aWNhbEtub2JBbmltYXRpb247Ci0gICAgUmV0
YWluUHRyPFNjcm9sbGJhclBhcnRBbmltYXRpb24+IF9ob3Jpem9udGFsS25vYkFuaW1hdGlvbjsK
LQotICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdmVydGljYWxUcmFja0Fu
aW1hdGlvbjsKLSAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX2hvcml6b250
YWxUcmFja0FuaW1hdGlvbjsKLX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOwotLSAodm9pZClj
YW5jZWxBbmltYXRpb25zOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gU2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlCi0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAg
X2FuaW1hdG9yID0gc2Nyb2xsQW5pbWF0b3I7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpY2FuY2VsQW5pbWF0aW9ucwotewotICAgIFtfdmVydGljYWxLbm9iQW5pbWF0aW9uLmdldCgp
IHN0b3BBbmltYXRpb25dOwotICAgIFtfaG9yaXpvbnRhbEtub2JBbmltYXRpb24uZ2V0KCkgc3Rv
cEFuaW1hdGlvbl07Ci0gICAgW192ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uLmdldCgpIHN0b3BBbmlt
YXRpb25dOwotICAgIFtfaG9yaXpvbnRhbFRyYWNrQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRp
b25dOwotfQotCi0tIChOU1JlY3QpY29udmVydFJlY3RUb0JhY2tpbmc6KE5TUmVjdClhUmVjdAot
ewotICAgIHJldHVybiBhUmVjdDsKLX0KLQotLSAoTlNSZWN0KWNvbnZlcnRSZWN0RnJvbUJhY2tp
bmc6KE5TUmVjdClhUmVjdAotewotICAgIHJldHVybiBhUmVjdDsKLX0KLQotI2lmICFQTEFURk9S
TShDSFJPTUlVTSkKLS0gKENBTGF5ZXIgKilsYXllcgotewotICAgIGlmICghX2FuaW1hdG9yKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIGlmICghX2FuaW1hdG9yLT5pc0RyYXdpbmdJbnRvTGF5
ZXIoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBh
dHRlbXB0IHRvIHJldHVybiBhbiBhY3R1YWwgbGF5ZXIuCi0gICAgc3RhdGljIENBTGF5ZXIgKmR1
bW15TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOwotICAgIHJldHVybiBkdW1teUxheWVy
OwotfQotI2VuZGlmCi0KLS0gKHZvaWQpc2V0VXBBbmltYXRpb246KFJldGFpblB0cjxTY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uPiYpc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6
KFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Ny
b2xsYmFyUGFydClwYXJ0IGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9u
OihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3Jv
bGxlZCB0aGUgcGFnZSwgdGhlbiB0aGUgc2Nyb2xsYmFycyBtdXN0IGJlIGFuaW1hdGVkIGhlcmUu
IAotICAgIC8vIFRoaXMgb3ZlcnJpZGVzIHRoZSBlYXJseSByZXR1cm5zLgotICAgIGJvb2wgbXVz
dEFuaW1hdGUgPSBfYW5pbWF0b3ItPmhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKTsKLQotICAg
IGlmIChfYW5pbWF0b3ItPnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpICYmICFtdXN0QW5p
bWF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKF9hbmltYXRvci0+c2Nyb2xsYWJsZUFy
ZWEoKS0+c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSAmJiAhbXVzdEFuaW1hdGUpIHsK
LSAgICAgICAgX2FuaW1hdG9yLT5zdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGFyZSBkZWZpbml0ZWx5
IGdvaW5nIHRvIGFuaW1hdGUgbm93LCBzbyBzdG9wIHRoZSB0aW1lci4KLSAgICBfYW5pbWF0b3It
PnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5
IGFuaW1hdGluZywgc3RvcAotICAgIGlmIChzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uKSB7Ci0gICAg
ICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOwotICAgICAg
ICBzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uID0gbmlsOwotICAgIH0KLQotICAgIGlmIChwYXJ0ID09
IFdlYkNvcmU6OlRodW1iUGFydCAmJiAhd2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKHNj
cm9sbGVyUGFpbnRlcikpIHsKLSAgICAgICAgaWYgKG5ld0FscGhhID09IDEpIHsKLSAgICAgICAg
ICAgIEludFJlY3QgdGh1bWJSZWN0ID0gSW50UmVjdCh3a1Njcm9sbGJhclBhaW50ZXJLbm9iUmVj
dChzY3JvbGxlclBhaW50ZXIpKTsKLSAgICAgICAgICAgIF9hbmltYXRvci0+c2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KHRodW1iUmVjdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
X2FuaW1hdG9yLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoSW50UmVjdCgpKTsKLSAgICB9
Ci0KLSAgICBbTlNBbmltYXRpb25Db250ZXh0IGJlZ2luR3JvdXBpbmddOwotICAgIFtbTlNBbmlt
YXRpb25Db250ZXh0IGN1cnJlbnRDb250ZXh0XSBzZXREdXJhdGlvbjpkdXJhdGlvbl07Ci0gICAg
c2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5hZG9wdE5TKFtbU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBh
bGxvY10gaW5pdFdpdGhTY3JvbGxiYXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFydDpwYXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yOl9hbmltYXRvciAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYW5pbWF0ZUFscGhhVG86bmV3QWxwaGEgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOmR1cmF0
aW9uXSk7Ci0gICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24uZ2V0KCkgc2V0QW5pbWF0aW9uQmxv
Y2tpbmdNb2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmddOwotICAgIFtzY3JvbGxiYXJQYXJ0QW5p
bWF0aW9uLmdldCgpIHN0YXJ0QW5pbWF0aW9uXTsKLSAgICBbTlNBbmltYXRpb25Db250ZXh0IGVu
ZEdyb3VwaW5nXTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAgYW5p
bWF0ZUtub2JBbHBoYVRvOihDR0Zsb2F0KW5ld0tub2JBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50
ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHNjcm9sbGVyUGFpbnRlciA9IChXS1Njcm9sbGJh
clBhaW50ZXJSZWYpc2Nyb2xsZXJJbXA7Ci0gICAgaWYgKHdrU2Nyb2xsYmFyUGFpbnRlcklzSG9y
aXpvbnRhbChzY3JvbGxlclBhaW50ZXIpKQotICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpf
aG9yaXpvbnRhbEtub2JBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBw
YXJ0OldlYkNvcmU6OlRodW1iUGFydCBhbmltYXRlQWxwaGFUbzpuZXdLbm9iQWxwaGEgZHVyYXRp
b246ZHVyYXRpb25dOwotICAgIGVsc2UKLSAgICAgICAgW3NlbGYgc2V0VXBBbmltYXRpb246X3Zl
cnRpY2FsS25vYkFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6
V2ViQ29yZTo6VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpk
dXJhdGlvbl07Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wIGFuaW1h
dGVUcmFja0FscGhhVG86KENHRmxvYXQpbmV3VHJhY2tBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50
ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHNjcm9sbGVyUGFpbnRlciA9IChXS1Njcm9sbGJh
clBhaW50ZXJSZWYpc2Nyb2xsZXJJbXA7Ci0gICAgaWYgKHdrU2Nyb2xsYmFyUGFpbnRlcklzSG9y
aXpvbnRhbChzY3JvbGxlclBhaW50ZXIpKQotICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpf
aG9yaXpvbnRhbFRyYWNrQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIg
cGFydDpXZWJDb3JlOjpCYWNrVHJhY2tQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld1RyYWNrQWxwaGEg
ZHVyYXRpb246ZHVyYXRpb25dOwotICAgIGVsc2UKLSAgICAgICAgW3NlbGYgc2V0VXBBbmltYXRp
b246X3ZlcnRpY2FsVHJhY2tBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRl
ciBwYXJ0OldlYkNvcmU6OkJhY2tUcmFja1BhcnQgYW5pbWF0ZUFscGhhVG86bmV3VHJhY2tBbHBo
YSBkdXJhdGlvbjpkdXJhdGlvbl07Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXA6KGlkKXNjcm9s
bGVySW1wIG92ZXJsYXlTY3JvbGxlclN0YXRlQ2hhbmdlZFRvOihOU1VJbnRlZ2VyKW5ld092ZXJs
YXlTY3JvbGxlclN0YXRlCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wKTsKLSAgICBV
TlVTRURfUEFSQU0obmV3T3ZlcmxheVNjcm9sbGVyU3RhdGUpOwotfQotCi0tICh2b2lkKXNjcm9s
bEFuaW1hdG9yRGVzdHJveWVkCi17Ci0gICAgX2FuaW1hdG9yID0gMDsKLSAgICBbX3ZlcnRpY2Fs
S25vYkFuaW1hdGlvbi5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07Ci0gICAgW19ob3Jp
em9udGFsS25vYkFuaW1hdGlvbi5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07Ci0gICAg
W192ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsK
LSAgICBbX2hvcml6b250YWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ry
b3llZF07Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKLXsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoc2Nyb2xsYWJs
ZUFyZWEpKTsKLX0KLQotc3RhdGljIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIGNocm9taXVt
U2Nyb2xsYmFyVGhlbWUoKQotewotICAgIFNjcm9sbGJhclRoZW1lKiBzY3JvbGxiYXJUaGVtZSA9
IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwotICAgIHJldHVybiAhc2Nyb2xsYmFyVGhlbWUtPmlz
TW9ja1RoZW1lKCkgPyBzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4oc2Ny
b2xsYmFyVGhlbWUpIDogMDsKLX0KLQotU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYyhTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCi0gICAg
OiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BB
SU5URVIpCi0gICAgLCBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyKHRoaXMsICZTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKQotI2Vu
ZGlmCi0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICwgbV9pblNjcm9sbEdlc3R1cmUo
ZmFsc2UpCi0gICAgLCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyhmYWxzZSkKLSAgICAsIG1f
aWdub3JlTW9tZW50dW1TY3JvbGxzKGZhbHNlKQotICAgICwgbV9sYXN0TW9tZW50dW1TY3JvbGxU
aW1lc3RhbXAoMCkKLSAgICAsIG1fc3RhcnRUaW1lKDApCi0gICAgLCBtX3NuYXBSdWJiZXJCYW5k
VGltZXIodGhpcywgJlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJCYW5kVGlt
ZXJGaXJlZCkKLSNlbmRpZgotICAgICwgbV9kcmF3aW5nSW50b0xheWVyKGZhbHNlKQotICAgICwg
bV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKGZhbHNlKQotICAgICwgbV9uZWVkc1Njcm9sbGVy
U3R5bGVVcGRhdGUoZmFsc2UpCi17Ci0gICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0
ZS5hZG9wdE5TKFtbU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRo
U2Nyb2xsQW5pbWF0b3I6dGhpc10pOwotICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmFkb3B0
TlMoW1tOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsQW5pbWF0aW9uSGVscGVyIikgYWxsb2Nd
IGluaXRXaXRoRGVsZWdhdGU6bV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKV0p
OwotCi0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAgICAg
IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0
aGlzXSk7Ci0gICAgICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgPSB3a01ha2VTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlcihtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdh
dGUuZ2V0KCkpOwotICAgICAgICBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtb
U2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRo
aXNdKTsKLSAgICB9Ci19Ci0KLVNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6On5TY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKCkKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxh
YmxlKCkpIHsKLSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5n
ZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07Ci0gICAgICAgIFsoaWQpbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV9zY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotICAg
ICAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRv
ckRlc3Ryb3llZF07Ci0gICAgfQotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCi17Ci0gICAgbV9o
YXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKLQotI2lmICFFTkFCTEUoU01PT1RIX1ND
Uk9MTElORykKLSAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwg
Z3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwotI2VuZGlmCi0KLSAgICBpZiAoIVtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJBcHBsZVNjcm9s
bEFuaW1hdGlvbkVuYWJsZWQiXSB8fCAhbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3JF
bmFibGVkKCkpCi0gICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0
aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7Ci0KLSAgICBpZiAoZ3JhbnVsYXJp
dHkgPT0gU2Nyb2xsQnlQaXhlbCkKLSAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3Jv
bGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKLQotICAgIGZs
b2F0IGN1cnJlbnRQb3MgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9j
dXJyZW50UG9zWCA6IG1fY3VycmVudFBvc1k7Ci0gICAgZmxvYXQgbmV3UG9zID0gc3RkOjptYXg8
ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0PihjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3JpZW50YXRp
b24pKSksIDApOwotICAgIGlmIChjdXJyZW50UG9zID09IG5ld1BvcykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgTlNQb2ludCBuZXdQb2ludDsKLSAgICBpZiAoW21fc2Nyb2xsQW5pbWF0
aW9uSGVscGVyLmdldCgpIF9pc0FuaW1hdGluZ10pIHsKLSAgICAgICAgTlNQb2ludCB0YXJnZXRP
cmlnaW4gPSBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkgdGFyZ2V0T3JpZ2luXTsKLSAg
ICAgICAgbmV3UG9pbnQgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gTlNN
YWtlUG9pbnQobmV3UG9zLCB0YXJnZXRPcmlnaW4ueSkgOiBOU01ha2VQb2ludCh0YXJnZXRPcmln
aW4ueCwgbmV3UG9zKTsKLSAgICB9IGVsc2UgewotICAgICAgICBuZXdQb2ludCA9IG9yaWVudGF0
aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBOU01ha2VQb2ludChuZXdQb3MsIG1fY3VycmVu
dFBvc1kpIDogTlNNYWtlUG9pbnQobV9jdXJyZW50UG9zWCwgbmV3UG9zKTsKLSAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+ZGlkU3RhcnRBbmltYXRlZFNjcm9sbCgpOwotICAgIH0KLSAgICBbbV9z
Y3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkgc2Nyb2xsVG9Qb2ludDpuZXdQb2ludF07Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xs
VG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKLXsKLSAg
ICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkgX3N0b3BSdW5dOwotICAgIGltbWVkaWF0
ZVNjcm9sbFRvUG9pbnQob2Zmc2V0KTsKLX0KLQotZmxvYXQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6YWRqdXN0U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQgcG9zaXRpb24pIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9D
b250ZW50RWRnZSgpKQotICAgICAgICByZXR1cm4gcG9zaXRpb247Ci0KLSAgICByZXR1cm4gbWF4
PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1Np
emUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZVdpZHRoKCkpLCAwKTsKLX0K
LQotZmxvYXQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsWVBvc2l0aW9u
SWZOZWNlc3NhcnkoZmxvYXQgcG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3Njcm9sbGFi
bGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpKQotICAgICAgICByZXR1
cm4gcG9zaXRpb247Ci0KLSAgICByZXR1cm4gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9u
LCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJs
ZUFyZWEtPnZpc2libGVIZWlnaHQoKSksIDApOwotfQotCi1GbG9hdFBvaW50IFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxv
YXRQb2ludCYgcG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5j
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpKQotICAgICAgICByZXR1cm4gcG9zaXRp
b247Ci0KLSAgICBmbG9hdCBuZXdYID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLngo
KSwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJs
ZUFyZWEtPnZpc2libGVXaWR0aCgpKSwgMCk7Ci0gICAgZmxvYXQgbmV3WSA9IG1heDxmbG9hdD4o
bWluPGZsb2F0Pihwb3NpdGlvbi55KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgp
LmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUhlaWdodCgpKSwgMCk7Ci0KLSAg
ICByZXR1cm4gRmxvYXRQb2ludChuZXdYLCBuZXdZKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIG5l
d1Bvc2l0aW9uKQotewotICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3NpdGlvbiA9IGFkanVzdFNj
cm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRpb24pOwotIAotICAgIG1fY3VycmVudFBv
c1ggPSBhZGp1c3RlZFBvc2l0aW9uLngoKTsKLSAgICBtX2N1cnJlbnRQb3NZID0gYWRqdXN0ZWRQ
b3NpdGlvbi55KCk7Ci0gICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZmxvYXQgZGVs
dGFYKQotewotICAgIGZsb2F0IG5ld1Bvc1ggPSBhZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vz
c2FyeShtX2N1cnJlbnRQb3NYICsgZGVsdGFYKTsKLSAgICAKLSAgICBpZiAobmV3UG9zWCA9PSBt
X2N1cnJlbnRQb3NYKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9jdXJyZW50UG9zWCA9
IG5ld1Bvc1g7Ci0gICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkoZmxvYXQgZGVsdGFZ
KQotewotICAgIGZsb2F0IG5ld1Bvc1kgPSBhZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2Fy
eShtX2N1cnJlbnRQb3NZICsgZGVsdGFZKTsKLSAgICAKLSAgICBpZiAobmV3UG9zWSA9PSBtX2N1
cnJlbnRQb3NZKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9jdXJyZW50UG9zWSA9IG5l
d1Bvc1k7Ci0gICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlv
bihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKLXsKLSAgICBBU1NFUlQobV9zY3JvbGxB
bmltYXRpb25IZWxwZXIpOwotICAgIENHRmxvYXQgcHJvZ3Jlc3MgPSBbbV9zY3JvbGxBbmltYXRp
b25IZWxwZXIuZ2V0KCkgX3Byb2dyZXNzXTsKLSAgICAKLSAgICBpbW1lZGlhdGVTY3JvbGxUb1Bv
aW50KG5ld1Bvc2l0aW9uKTsKLQotICAgIGlmIChwcm9ncmVzcyA+PSAxLjApCi0gICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPmRpZENvbXBsZXRlQW5pbWF0ZWRTY3JvbGwoKTsKLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpub3RpZnlQb3NpdGlvbkNoYW5nZWQoKQotewotICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tDb250ZW50
QXJlYVNjcm9sbGVkKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotICAgIFNj
cm9sbEFuaW1hdG9yOjpub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9pZCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0Ci17Ci0gICAg
aWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRB
cmVhV2lsbFBhaW50KG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkg
Y29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAg
ICAgIHdrTW91c2VFbnRlcmVkQ29udGVudEFyZWEobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFeGl0
ZWRDb250ZW50QXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2
YWlsYWJsZSgpKQotICAgICAgICB3a01vdXNlRXhpdGVkQ29udGVudEFyZWEobV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBjb25zdAotewotICAgIGlmIChpc1Njcm9s
bGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tNb3VzZU1vdmVkSW5Db250ZW50
QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxsU3RhcnRMaXZlUmVzaXplKCkKLXsKLSAgICBpZiAo
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIHdrV2lsbFN0YXJ0TGl2
ZVJlc2l6ZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50c1Jlc2l6ZWQoKSBjb25zdAotewotICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tDb250ZW50
QXJlYVJlc2l6ZWQobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0KLXZv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbEVuZExpdmVSZXNpemUoKQotewotICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tXaWxsRW5k
TGl2ZVJlc2l6ZShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZFNob3coKSBjb25zdAot
ewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tD
b250ZW50QXJlYURpZFNob3cobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkg
Y29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAg
ICAgIHdrQ29udGVudEFyZWFEaWRIaWRlKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0
KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEJlZ2luU2Nyb2xs
R2VzdHVyZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJs
ZSgpKQotICAgICAgICB3a0RpZEJlZ2luU2Nyb2xsR2VzdHVyZShtX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpk
aWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5
QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIHdrRGlkRW5kU2Nyb2xsR2VzdHVyZShtX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsK
LSAgICBpZiAoIWlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgIGlmIChTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKiB0aGVtZSA9
IGNocm9taXVtU2Nyb2xsYmFyVGhlbWUoKSkgewotICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJS
ZWYgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAg
ICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG1fc2Nyb2xsYmFyUGFp
bnRlckRlbGVnYXRlLmdldCgpKTsKLSAgICAgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRy
b2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgcGFpbnRlciwgZmFsc2Up
OwotICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCi0gICAgICAg
ICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEocGFpbnRlciwgMSk7Ci0gICAgfQot
fQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFyT3Zl
cmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYyogdGhlbWUgPSBjaHJvbWl1bVNjcm9sbGJhclRoZW1lKCkpIHsKLSAg
ICAgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNj
cm9sbGJhcihzY3JvbGxiYXIpOwotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0
ZShwYWludGVyLCBuaWwpOwotICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxl
cihtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBuaWwsIGZhbHNlKTsKLSAgICB9
Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFyT3Zl
cmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYyogdGhlbWUgPSBjaHJvbWl1bVNjcm9sbGJhclRoZW1lKCkpIHsKLSAg
ICAgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNj
cm9sbGJhcihzY3JvbGxiYXIpOwotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0
ZShwYWludGVyLCBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSk7Ci0gICAgICAgIHdr
U2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXIuZ2V0KCksIHBhaW50ZXIsIHRydWUpOwotICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+
aW5MaXZlUmVzaXplKCkpCi0gICAgICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxw
aGEocGFpbnRlciwgMSk7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQot
ewotICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKiB0aGVtZSA9IGNocm9t
aXVtU2Nyb2xsYmFyVGhlbWUoKSkgewotICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFp
bnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgICAgIHdr
U2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG5pbCk7Ci0gICAgICAgIHdrU2V0
UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIu
Z2V0KCksIG5pbCwgdHJ1ZSk7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmNhbmNlbEFuaW1hdGlvbnMoKQotewotICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdl
TG9hZCA9IGZhbHNlOwotCi0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgp
KSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSkKLSAgICAgICAg
ICAgIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKLSAgICB9Ci19Ci0KLSNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCi0KLXN0YXRpYyBjb25zdCBmbG9hdCBzY3JvbGxWZWxvY2l0eVpl
cm9pbmdUaW1lb3V0ID0gMC4xMGY7Ci1zdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZFN0aWZm
bmVzcyA9IDIwOwotc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3Ry
ZXRjaFJhdGlvID0gMTsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kTWluaW11bVJlcXVp
cmVkRGVsdGFCZWZvcmVTdHJldGNoID0gMTA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFu
ZEFtcGxpdHVkZSA9IDAuMzFmOwotc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRQZXJpb2Qg
PSAxLjZmOwotCi1zdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGlu
aXRpYWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlhbFZlbG9jaXR5LCBmbG9hdCBlbGFwc2VkVGltZSkK
LXsKLSAgICBmbG9hdCBhbXBsaXR1ZGUgPSBydWJiZXJiYW5kQW1wbGl0dWRlOwotICAgIGZsb2F0
IHBlcmlvZCA9IHJ1YmJlcmJhbmRQZXJpb2Q7Ci0gICAgZmxvYXQgY3JpdGljYWxEYW1wZW5pbmdG
YWN0b3IgPSBleHBmKCgtZWxhcHNlZFRpbWUgKiBydWJiZXJiYW5kU3RpZmZuZXNzKSAvIHBlcmlv
ZCk7Ci0gICAgICAgICAgICAgCi0gICAgcmV0dXJuIChpbml0aWFsUG9zaXRpb24gKyAoLWluaXRp
YWxWZWxvY2l0eSAqIGVsYXBzZWRUaW1lICogYW1wbGl0dWRlKSkgKiBjcml0aWNhbERhbXBlbmlu
Z0ZhY3RvcjsKLX0KLQotc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShm
bG9hdCBkZWx0YSkKLXsKLSAgICBmbG9hdCBzdGlmZm5lc3MgPSBzdGQ6Om1heChydWJiZXJiYW5k
U3RpZmZuZXNzLCAxLjBmKTsKLSAgICByZXR1cm4gZGVsdGEgLyBzdGlmZm5lc3M7Ci19Ci0KLXN0
YXRpYyBmbG9hdCByZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoZmxvYXQgZGVsdGEpCi17Ci0g
ICAgcmV0dXJuIGRlbHRhICogcnViYmVyYmFuZFN0aWZmbmVzczsKLX0KLQotc3RhdGljIGZsb2F0
IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpCi17Ci0gICAgc3RhdGljIGZsb2F0IG11bHRpcGxpZXIg
PSAtMTsKLSAgICBpZiAobXVsdGlwbGllciA8IDApIHsKLSAgICAgICAgbXVsdGlwbGllciA9IFtb
TlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGZsb2F0Rm9yS2V5OkAiTlNTY3Jv
bGxXaGVlbE11bHRpcGxpZXIiXTsKLSAgICAgICAgaWYgKG11bHRpcGxpZXIgPD0gMCkKLSAgICAg
ICAgICAgIG11bHRpcGxpZXIgPSAxOwotICAgIH0KLSAgICByZXR1cm4gbXVsdGlwbGllcjsKLX0K
LQotc3RhdGljIGlubGluZSBib29sIGlzU2Nyb2xsaW5nTGVmdEFuZFNob3VsZE5vdFJ1YmJlckJh
bmQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBTY3JvbGxhYmxlQXJlYSog
c2Nyb2xsYWJsZUFyZWEpCi17Ci0gICAgcmV0dXJuIHdoZWVsRXZlbnQuZGVsdGFYKCkgPiAwICYm
ICFzY3JvbGxhYmxlQXJlYS0+c2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbExlZnQp
OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTY3JvbGxpbmdSaWdodEFuZFNob3VsZE5vdFJ1
YmJlckJhbmQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBTY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWEpCi17Ci0gICAgcmV0dXJuIHdoZWVsRXZlbnQuZGVsdGFYKCkg
PCAwICYmICFzY3JvbGxhYmxlQXJlYS0+c2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9s
bFJpZ2h0KTsKLX0KLQotYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpoYW5kbGVXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBtX2hh
dmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOwotCi0gICAgaWYgKCF3aGVlbEV2ZW50Lmhh
c1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoKSkKLSAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9y
OjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMg
c29tZXdoYXQgcm91bmRhYm91dCBoYWNrIHRvIGFsbG93IGZvcndhcmRpbmcgd2hlZWwgZXZlbnRz
Ci0gICAgLy8gdXAgdG8gdGhlIHBhcmVudCBzY3JvbGxhYmxlIGFyZWEuIEl0IHRha2VzIGFkdmFu
dGFnZSBvZiB0aGUgZmFjdCB0aGF0Ci0gICAgLy8gdGhlIGJhc2UgY2xhc3MgaW1wbGVtZW5hdGF0
aW9uIG9mIGhhbmRsZVdoZWVsRXZlbnQgd2lsbCBub3QgYWNjZXB0IHRoZQotICAgIC8vIHdoZWVs
IGV2ZW50IGlmIHRoZXJlIGlzIG5vd2hlcmUgdG8gc2Nyb2xsLgotICAgIGlmIChmYWJzZih3aGVl
bEV2ZW50LmRlbHRhWSgpKSA+PSBmYWJzZih3aGVlbEV2ZW50LmRlbHRhWCgpKSkgewotICAgICAg
ICBpZiAoIWFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpKQotICAgICAgICAgICAgcmV0dXJuIFNj
cm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmICghYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSkKLSAgICAgICAgICAg
IHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFy
KCkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgc2Nyb2xsYmFyLCB3ZSBhZ2dyZWdh
dGUgdGhlIHdoZWVsIGV2ZW50cyB0byBnZXQgYW4KLSAgICAgICAgICAgIC8vIG92ZXJhbGwgdHJl
bmQgb2YgdGhlIHNjcm9sbC4gSWYgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc2Nyb2xsIGlzIGV2ZXIK
LSAgICAgICAgICAgIC8vIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YgdGhlIHBpbiBsb2Nh
dGlvbiwgdGhlbiB3ZSBzd2l0Y2ggdGhlCi0gICAgICAgICAgICAvLyBib29sZWFuLCBhbmQgcnVi
YmVyIGJhbmQuIFRoYXQgaXMsIGlmIHdlIHdlcmUgcGlubmVkIHRvIHRoZSBsZWZ0LAotICAgICAg
ICAgICAgLy8gYW5kIHdlIGVuZGVkIHVwIHNjcm9sbGluZyB0byB0aGUgcmlnaHQsIHdlIHJ1YmJl
ciBiYW5kLgotICAgICAgICAgICAgbV9jdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbCArPSB3aGVl
bEV2ZW50LmRlbHRhWCgpOwotICAgICAgICAgICAgaWYgKG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5u
ZWRPbkxlZnQgJiYgbV9jdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbCA8IDApCi0gICAgICAgICAg
ICAgICAgbV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbEV2ZXJTd2l0Y2hUb09wcG9zaXRl
RGlyZWN0aW9uT2ZQaW4gPSB0cnVlOwotICAgICAgICAgICAgaWYgKG1fc2Nyb2xsZXJJbml0aWFs
bHlQaW5uZWRPblJpZ2h0ICYmIG1fY3VtdWxhdGl2ZUhvcml6b250YWxTY3JvbGwgPiAwKQotICAg
ICAgICAgICAgICAgIG1fZGlkQ3VtdWxhdGl2ZUhvcml6b250YWxTY3JvbGxFdmVyU3dpdGNoVG9P
cHBvc2l0ZURpcmVjdGlvbk9mUGluID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFm
dGVyIGEgZ2VzdHVyZSBiZWdpbnMsIHdlIGdvIHRocm91Z2g6Ci0gICAgICAgIC8vIDErIFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlTm9uZQotICAgICAgICAvLyAwKyBQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZUNoYW5nZWQKLSAgICAgICAgLy8gMSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkIGlm
IHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgY2hhbmdlZCBldmVudAotICAgICAgICBpZiAod2hlZWxF
dmVudC5tb21lbnR1bVBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lICYmICFt
X2RpZEN1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rp
b25PZlBpbikgewotICAgICAgICAgICAgaWYgKChpc1Njcm9sbGluZ0xlZnRBbmRTaG91bGROb3RS
dWJiZXJCYW5kKHdoZWVsRXZlbnQsIG1fc2Nyb2xsYWJsZUFyZWEpICYmCi0gICAgICAgICAgICAg
ICAgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uTGVmdCAmJgotICAgICAgICAgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRp
b24oKSkgfHwKLSAgICAgICAgICAgICAgICAoaXNTY3JvbGxpbmdSaWdodEFuZFNob3VsZE5vdFJ1
YmJlckJhbmQod2hlZWxFdmVudCwgbV9zY3JvbGxhYmxlQXJlYSkgJiYKLSAgICAgICAgICAgICAg
ICBtX3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25SaWdodCAmJgotICAgICAgICAgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NYXhpbXVtUG9zaXRp
b24oKSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdo
ZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBib29sIGlzTW9tZW50dW1TY3JvbGxFdmVudCA9ICh3aGVlbEV2ZW50Lm1vbWVudHVtUGhh
c2UoKSAhPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpOwotICAgIGlmIChtX2lnbm9yZU1v
bWVudHVtU2Nyb2xscyAmJiAoaXNNb21lbnR1bVNjcm9sbEV2ZW50IHx8IG1fc25hcFJ1YmJlckJh
bmRUaW1lci5pc0FjdGl2ZSgpKSkgewotICAgICAgICBpZiAod2hlZWxFdmVudC5tb21lbnR1bVBo
YXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCkgewotICAgICAgICAgICAgbV9p
Z25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzbW9vdGhTY3Jv
bGxXaXRoRXZlbnQod2hlZWxFdmVudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3Jt
R2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCi17Ci0gICAgaWYgKGdlc3R1cmVFdmVudC50eXBl
KCkgPT0gUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbEJlZ2luVHlwZSkKLSAgICAgICAgYmVn
aW5TY3JvbGxHZXN0dXJlKCk7Ci0gICAgZWxzZSBpZiAoZ2VzdHVyZUV2ZW50LnR5cGUoKSA9PSBQ
bGF0Zm9ybUdlc3R1cmVFdmVudDo6U2Nyb2xsRW5kVHlwZSkKLSAgICAgICAgZW5kU2Nyb2xsR2Vz
dHVyZSgpOwotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnBpbm5lZEluRGly
ZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQotewotICAgIEZsb2F0U2l6ZSBsaW1p
dERlbHRhOwotICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKLSAgICAg
ICAgaWYgKGRlbHRhWSA8IDApIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Ny
b2xsIHVwLiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSB0b3AKLSAgICAgICAg
ICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50
UmVjdCgpLnkoKSArICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGRv
d24uICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGJvdHRvbQotICAgICAgICAg
ICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCku
aGVpZ2h0KCkgLSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WSgp
ICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKSk7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKGRlbHRhWCAhPSAwKSB7Ci0gICAgICAgIGlmIChkZWx0YVggPCAwKSB7Ci0g
ICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiAgTWFrZSBzdXJlIHdl
IGFyZSBub3QgcGlubmVkIHRvIHRoZSBsZWZ0Ci0gICAgICAgICAgICBsaW1pdERlbHRhLnNldFdp
ZHRoKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLngoKSArIG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCByaWdodC4gIE1ha2Ugc3VyZSB3ZSBhcmUg
bm90IHBpbm5lZCB0byB0aGUgcmlnaHQKLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgo
bV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIChtX3Njcm9sbGFibGVB
cmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5tYXhYKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3Jv
bGxPcmlnaW4oKS54KCkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoKGRlbHRh
WCAhPSAwIHx8IGRlbHRhWSAhPSAwKSAmJiAobGltaXREZWx0YS53aWR0aCgpIDwgMSAmJiBsaW1p
dERlbHRhLmhlaWdodCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphbGxvd3NWZXJ0aWNh
bFN0cmV0Y2hpbmcoKSBjb25zdAotewotICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+dmVy
dGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRv
bWF0aWM6IHsKLSAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVh
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0g
bV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICAgICAgcmV0dXJuICgo
KHZTY3JvbGxlciAmJiB2U2Nyb2xsZXItPmVuYWJsZWQoKSkgfHwgKCFoU2Nyb2xsZXIgfHwgIWhT
Y3JvbGxlci0+ZW5hYmxlZCgpKSkpOwotICAgIH0KLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlO
b25lOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxs
b3dlZDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKLSAgICBj
YXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6IHsKLSAgICAgICAgU2Nyb2xsYmFyKiBoU2Ny
b2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAg
IFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxi
YXIoKTsKLSAgICAgICAgcmV0dXJuICgoKGhTY3JvbGxlciAmJiBoU2Nyb2xsZXItPmVuYWJsZWQo
KSkgfHwgKCF2U2Nyb2xsZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKSkpOwotICAgIH0KLSAg
ICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNtb290aFNjcm9sbFdpdGhFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgbV9oYXZlU2Nyb2xsZWRT
aW5jZVBhZ2VMb2FkID0gdHJ1ZTsKLQotICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3Jv
bGxEZWx0YS53aWR0aCgpOwotICAgIGZsb2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YS5oZWlnaHQoKTsKLQotICAgIC8vIFJlc2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1h
eSBkZWNpZGUgdG8gcmVtb3ZlIGRlbHRhIGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50
byBvdmVyZmxvdy4KLSAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKLQot
ICAgIGZsb2F0IGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQuZGVsdGFYKCk7Ci0g
ICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVkgPSAtd2hlZWxFdmVudC5kZWx0YVkoKTsKLQot
ICAgIGRlbHRhWCArPSBldmVudENvYWxlc2NlZERlbHRhWDsKLSAgICBkZWx0YVkgKz0gZXZlbnRD
b2FsZXNjZWREZWx0YVk7Ci0KLSAgICAvLyBTbGlnaHRseSBwcmVmZXIgc2Nyb2xsaW5nIHZlcnRp
Y2FsbHkgYnkgYXBwbHlpbmcgdGhlID0gY2FzZSB0byBkZWx0YVkKLSAgICBpZiAoZmFic2YoZGVs
dGFZKSA+PSBmYWJzZihkZWx0YVgpKQotICAgICAgICBkZWx0YVggPSAwOwotICAgIGVsc2UKLSAg
ICAgICAgZGVsdGFZID0gMDsKLQotICAgIGJvb2wgaXNWZXJ0aWNhbGx5U3RyZXRjaGVkID0gZmFs
c2U7Ci0gICAgYm9vbCBpc0hvcml6b250YWxseVN0cmV0Y2hlZCA9IGZhbHNlOwotICAgIGJvb2wg
c2hvdWxkU3RyZXRjaCA9IGZhbHNlOwotICAgIAotICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9
IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7Ci0KLSAgICBpc0hvcml6b250YWxs
eVN0cmV0Y2hlZCA9IHN0cmV0Y2hBbW91bnQud2lkdGgoKTsKLSAgICBpc1ZlcnRpY2FsbHlTdHJl
dGNoZWQgPSBzdHJldGNoQW1vdW50LmhlaWdodCgpOwotCi0gICAgUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2UgcGhhc2UgPSB3aGVlbEV2ZW50Lm1vbWVudHVtUGhhc2UoKTsKLQotICAgIC8vIElmIHdl
IGFyZSBzdGFydGluZyBtb21lbnR1bSBzY3JvbGxpbmcgdGhlbiBkbyBzb21lIHNldHVwLgotICAg
IGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgKHBoYXNlID09IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlQmVnYW4gfHwgcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFu
Z2VkKSkKLSAgICAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSB0cnVlOwotCi0gICAg
Q0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKSAtIG1fbGFz
dE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8fCBt
X21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgewotICAgICAgICBpZiAobV9sYXN0TW9tZW50dW1T
Y3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID4gMCAmJiB0aW1lRGVsdGEgPCBzY3JvbGxWZWxv
Y2l0eVplcm9pbmdUaW1lb3V0KSB7Ci0gICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkuc2V0
V2lkdGgoZXZlbnRDb2FsZXNjZWREZWx0YVggLyAoZmxvYXQpdGltZURlbHRhKTsKLSAgICAgICAg
ICAgIG1fbW9tZW50dW1WZWxvY2l0eS5zZXRIZWlnaHQoZXZlbnRDb2FsZXNjZWREZWx0YVkgLyAo
ZmxvYXQpdGltZURlbHRhKTsKLSAgICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0
YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAo
KTsKLSAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCkgewotICAgICAgICAgICAg
aWYgKCFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiBwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgs
IDApKSB7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25s
eSBpbiB0aGUgdmVydGljYWwuCi0gICAgICAgICAgICAgICAgaWYgKGRlbHRhWSAhPSAwICYmIChm
YWJzZihkZWx0YVggLyBkZWx0YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0
aW8pKQotICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZv
cmVTdHJldGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5z
ZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Ny
b2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsKLSAgICAgICAgICAgIC8vIFN0cmV0Y2hp
bmcgb25seSBpbiB0aGUgaG9yaXpvbnRhbC4KLSAgICAgICAgICAgIGlmIChwaW5uZWRJbkRpcmVj
dGlvbigwLCBkZWx0YVkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlbHRhWCAhPSAwICYmIChm
YWJzZihkZWx0YVkgLyBkZWx0YVgpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0
aW8pKQotICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGZhYnNmKGRlbHRhWSkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZv
cmVTdHJldGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5z
ZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVsdGFZKTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93
U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gTm90IHN0cmV0Y2hpbmcgYXQgYWxsIHlldC4KLSAgICAg
ICAgICAgIGlmIChwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERl
bHRhQmVmb3JlU3RyZXRjaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Nj
cm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFY
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRh
LnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGVsdGFYICE9IDAgfHwgZGVs
dGFZICE9IDApIHsKLSAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRpY2FsbHlT
dHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7Ci0gICAgICAgICAgICBpZiAo
ZGVsdGFZICE9IDApIHsKLSAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0
aXBsaWVyKCk7Ci0gICAgICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkoZGVsdGFZ
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkZWx0YVggIT0gMCkgewotICAgICAg
ICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLSAgICAgICAgICAg
ICAgICBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWChkZWx0YVgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGlu
ZygpKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICBldmVu
dENvYWxlc2NlZERlbHRhWCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChkZWx0YVggIT0g
MCkgJiYgIWlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkICYmICFwaW5uZWRJbkRpcmVjdGlvbihkZWx0
YVgsIDApKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGll
cigpOwotCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNj
cm9sbEJ5RGVsdGFYKGRlbHRhWCk7Ci0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7Ci0KLSAgICAgICAgICAg
ICAgICBkZWx0YVggPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoIWFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpKSB7Ci0gICAgICAgICAgICAgICAgZGVs
dGFZID0gMDsKLSAgICAgICAgICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IDA7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKChkZWx0YVkgIT0gMCkgJiYgIWlzVmVydGljYWxseVN0cmV0Y2hl
ZCAmJiAhcGlubmVkSW5EaXJlY3Rpb24oMCwgZGVsdGFZKSkgewotICAgICAgICAgICAgICAgIGRl
bHRhWSAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLQotICAgICAgICAgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsK
LSAgICAgICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShkZWx0YVkpOwotICAgICAg
ICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRl
bnRFZGdlKHRydWUpOwotCi0gICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9z
Y3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKLSAgICAgICAgCi0gICAgICAgICAgICBp
ZiAobV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHBp
bm5lZEluRGlyZWN0aW9uKGV2ZW50Q29hbGVzY2VkRGVsdGFYLCBldmVudENvYWxlc2NlZERlbHRh
WSkgfHwgKGZhYnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFYKSArIGZhYnNmKGV2ZW50Q29hbGVzY2Vk
RGVsdGFZKSA8PSAwKSkgJiYgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXApIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICBzbmFwUnViYmVyQmFuZCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgobV9zdHJl
dGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICBtX3N0cmV0Y2hT
Y3JvbGxGb3JjZS5zZXRIZWlnaHQobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkgKyBkZWx0
YVkpOwotCi0gICAgICAgICAgICBGbG9hdFNpemUgZGFtcGVkRGVsdGEoY2VpbGYoZWxhc3RpY0Rl
bHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkpKSwgY2VpbGYo
ZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgp
KSkpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBvcmlnT3JpZ2luID0gKG1fc2Nyb2xsYWJsZUFy
ZWEtPnZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5z
Y3JvbGxPcmlnaW4oKSkgLSBzdHJldGNoQW1vdW50OwotICAgICAgICAgICAgRmxvYXRQb2ludCBu
ZXdPcmlnaW4gPSBvcmlnT3JpZ2luICsgZGFtcGVkRGVsdGE7Ci0KLSAgICAgICAgICAgIGlmIChv
cmlnT3JpZ2luICE9IG5ld09yaWdpbikgewotICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKLSAgICAgICAg
ICAgICAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld09yaWdpbik7Ci0gICAgICAgICAgICAg
ICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2Uo
dHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9tb21l
bnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VF
bmRlZCkgewotICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAg
ICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOwotICAgICAgICBtX2xhc3RNb21l
bnR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmJlZ2luU2Nyb2xsR2VzdHVyZSgpCi17Ci0gICAgZGlkQmVnaW5TY3JvbGxH
ZXN0dXJlKCk7Ci0KLSAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOwotICAg
IG1faW5TY3JvbGxHZXN0dXJlID0gdHJ1ZTsKLSAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVz
cyA9IGZhbHNlOwotICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7Ci0gICAgbV9s
YXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSAwOwotICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9
IEZsb2F0U2l6ZSgpOwotICAgIG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPbkxlZnQgPSBtX3Nj
cm9sbGFibGVBcmVhLT5pc0hvcml6b250YWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9u
KCk7Ci0gICAgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uUmlnaHQgPSBtX3Njcm9sbGFibGVB
cmVhLT5pc0hvcml6b250YWxTY3JvbGxlclBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCk7Ci0gICAg
bV9jdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbCA9IDA7Ci0gICAgbV9kaWRDdW11bGF0aXZlSG9y
aXpvbnRhbFNjcm9sbEV2ZXJTd2l0Y2hUb09wcG9zaXRlRGlyZWN0aW9uT2ZQaW4gPSBmYWxzZTsK
LSAgICAKLSAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVy
aGFuZ0Ftb3VudCgpOwotICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmRE
ZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50LndpZHRoKCkpKTsKLSAgICBtX3N0cmV0
Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0
Y2hBbW91bnQuaGVpZ2h0KCkpKTsKLQotICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0
U2l6ZSgpOwotICAgIAotICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkK
LSAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjplbmRTY3JvbGxHZXN0dXJlKCkKLXsKLSAgICBkaWRFbmRTY3Jv
bGxHZXN0dXJlKCk7Ci0KLSAgICBzbmFwUnViYmVyQmFuZCgpOwotfQotCi12b2lkIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJCYW5kKCkKLXsKLSAgICBDRlRpbWVJbnRlcnZh
bCB0aW1lRGVsdGEgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0g
LSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKLSAgICBpZiAobV9sYXN0TW9tZW50dW1T
Y3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVv
dXQpCi0gICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotCi0gICAgbV9p
blNjcm9sbEdlc3R1cmUgPSBmYWxzZTsKLQotICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIu
aXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGFydFRpbWUgPSBbTlNEYXRl
IHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07Ci0gICAgbV9zdGFydFN0cmV0Y2ggPSBG
bG9hdFNpemUoKTsKLSAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgbV9vcmln
VmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKLQotICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdGFy
dFJlcGVhdGluZygxLjAvNjAuMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dh
cmRaZXJvKGZsb2F0IG51bSkKLXsKLSAgICByZXR1cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAu
NWYpIDogZmxvb3JmKG51bSArIDAuNWYpOwotfQotCi1zdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5k
VG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZmxvYXQgbnVtKQotewotICAgIGZsb2F0IHJvdW5kZWRO
dW0gPSByb3VuZGYobnVtKTsKLSAgICBpZiAoZmFicyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1
KQotICAgICAgICBudW0gPSByb3VuZGVkTnVtOwotCi0gICAgcmV0dXJuIHJvdW5kVG93YXJkWmVy
byhudW0pOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJC
YW5kVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiopCi17Ci0gICAg
aWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xs
cykgewotICAgICAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbTlNEYXRlIHRpbWVJbnRl
cnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0gLSBtX3N0YXJ0VGltZTsKLQotICAgICAgICBpZiAobV9z
dGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkpIHsKLSAgICAgICAgICAgIG1fc3RhcnRTdHJldGNo
ID0gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKLSAgICAgICAgICAgIGlmICht
X3N0YXJ0U3RyZXRjaCA9PSBGbG9hdFNpemUoKSkgeyAgICAKLSAgICAgICAgICAgICAgICBtX3Nu
YXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOwotICAgICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9s
bEZvcmNlID0gRmxvYXRTaXplKCk7Ci0gICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwot
ICAgICAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0gICAgICAgICAg
ICAgICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQb2ludCgpOwotICAgICAgICAgICAgICAgIG1fb3Jp
Z1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZFN0YXJ0UnViYmVy
QmFuZChyb3VuZGVkSW50U2l6ZShtX3N0YXJ0U3RyZXRjaCkpOwotCi0gICAgICAgICAgICBtX29y
aWdPcmlnaW4gPSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRp
b24oKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIG1fc3RhcnRTdHJldGNo
OwotICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBtX21vbWVudHVtVmVsb2NpdHk7Ci0KLSAg
ICAgICAgICAgIC8vIEp1c3QgbGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBwcmVmZXIgdmVydGljYWwg
cnViYmVyYmFuZGluZwotICAgICAgICAgICAgaWYgKGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LmhlaWdo
dCgpKSA+PSBmYWJzZihtX29yaWdWZWxvY2l0eS53aWR0aCgpKSkKLSAgICAgICAgICAgICAgICBt
X29yaWdWZWxvY2l0eS5zZXRXaWR0aCgwKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
RG9uJ3QgcnViYmVyLWJhbmQgaG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNj
cm9sbCBob3Jpem9udGFsbHkKLSAgICAgICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9z
Y3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgICAgICAgICAgaWYgKCFo
U2Nyb2xsZXIgfHwgIWhTY3JvbGxlci0+ZW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIG1fb3Jp
Z1ZlbG9jaXR5LnNldFdpZHRoKDApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBEb24n
dCBydWJiZXItYmFuZCB2ZXJ0aWNhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBo
b3Jpem9udGFsbHkKLSAgICAgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxh
YmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICAgICAgICAgIGlmICghdlNjcm9sbGVy
IHx8ICF2U2Nyb2xsZXItPmVuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0
eS5zZXRIZWlnaHQoMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdFBvaW50IGRlbHRhKHJv
dW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3Rh
cnRTdHJldGNoLndpZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAoZmxvYXQpdGltZURl
bHRhKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJk
WmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1t
X29yaWdWZWxvY2l0eS5oZWlnaHQoKSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsKLQotICAgICAgICBp
ZiAoZmFicyhkZWx0YS54KCkpID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEpIHsKLSAgICAg
ICAgICAgIEZsb2F0UG9pbnQgbmV3T3JpZ2luID0gbV9vcmlnT3JpZ2luICsgZGVsdGE7Ci0KLSAg
ICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRl
bnRFZGdlKGZhbHNlKTsKLSAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3Jp
Z2luKTsKLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxp
bmdUb0NvbnRlbnRFZGdlKHRydWUpOwotCi0gICAgICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRj
aCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVs
YXN0aWNEZWx0YShuZXdTdHJldGNoLndpZHRoKCkpKTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFNj
cm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRj
aC5oZWlnaHQoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW1tZWRpYXRlU2Ny
b2xsVG9Qb2ludChtX29yaWdPcmlnaW4pOwotCi0gICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT5kaWRDb21wbGV0ZVJ1YmJlckJhbmQocm91bmRlZEludFNpemUobV9zdGFydFN0cmV0Y2gpKTsK
LQotICAgICAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKLSAgICAgICAgICAg
IG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRTaXplKCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxv
YXRTaXplKCk7Ci0gICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAg
ICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVm
ZXJlbmNlRGF0ZV07Ci0gICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0gICAg
fQotfQotI2VuZGlmCi0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0SXNBY3Rp
dmUoKQotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAg
ICAgICBpZiAobmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKCkpCi0gICAgICAgICAgICB1cGRhdGVT
Y3JvbGxlclN0eWxlKCk7Ci0gICAgfQotfQotCi0jaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVS
KQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp1cGRhdGVTY3JvbGxlclN0eWxlKCkK
LXsKLSAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpIHsKLSAgICAg
ICAgc2V0TmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKHRydWUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyogbWFjVGhlbWUgPSBjaHJvbWl1
bVNjcm9sbGJhclRoZW1lKCk7Ci0gICAgaWYgKCFtYWNUaGVtZSkgewotICAgICAgICBzZXROZWVk
c1Njcm9sbGVyU3R5bGVVcGRhdGUoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaW50IG5ld1N0eWxlID0gd2tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKG1fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotCi0gICAgaWYgKFNjcm9sbGJhciogdmVy
dGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpKSB7
Ci0gICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgV0tT
Y3JvbGxiYXJQYWludGVyUmVmIG9sZFZlcnRpY2FsUGFpbnRlciA9IHdrVmVydGljYWxTY3JvbGxi
YXJQYWludGVyRm9yQ29udHJvbGxlcihtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgp
KTsKLSAgICAgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIG5ld1ZlcnRpY2FsUGFpbnRlciA9IHdr
TWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihvbGRWZXJ0aWNhbFBhaW50ZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmFsc2UpOwotICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRlckZvclNj
cm9sbGJhcih2ZXJ0aWNhbFNjcm9sbGJhciwgbmV3VmVydGljYWxQYWludGVyKTsKLSAgICAgICAg
d2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlci5nZXQoKSwgbmV3VmVydGljYWxQYWludGVyLCBmYWxzZSk7Ci0KLSAgICAgICAgLy8gVGhl
IGRpZmZlcmVudCBzY3JvbGxiYXIgc3R5bGVzIGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBz
byB3ZSBtdXN0IHJlLXNldCB0aGUgCi0gICAgICAgIC8vIGZyYW1lUmVjdCB0byB0aGUgbmV3IHRo
aWNrbmVzcywgYW5kIHRoZSByZS1sYXlvdXQgYmVsb3cgd2lsbCBlbnN1cmUgdGhlIHBvc2l0aW9u
Ci0gICAgICAgIC8vIGFuZCBsZW5ndGggYXJlIHByb3Blcmx5IHVwZGF0ZWQuCi0gICAgICAgIGlu
dCB0aGlja25lc3MgPSBtYWNUaGVtZS0+c2Nyb2xsYmFyVGhpY2tuZXNzKHZlcnRpY2FsU2Nyb2xs
YmFyLT5jb250cm9sU2l6ZSgpKTsKLSAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1l
UmVjdChJbnRSZWN0KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7Ci0gICAgfQotCi0gICAg
aWYgKFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCktPmhv
cml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZh
bGlkYXRlKCk7Ci0KLSAgICAgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIG9sZEhvcml6b250YWxQ
YWludGVyID0gd2tIb3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIobV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRl
clJlZiBuZXdIb3Jpem9udGFsUGFpbnRlciA9IHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFp
bnRlcihvbGRIb3Jpem9udGFsUGFpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld1N0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9s
bGJhci0+Y29udHJvbFNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUp
OwotICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcihob3Jpem9udGFs
U2Nyb2xsYmFyLCBuZXdIb3Jpem9udGFsUGFpbnRlcik7Ci0gICAgICAgIHdrU2V0UGFpbnRlckZv
clBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5l
d0hvcml6b250YWxQYWludGVyLCB0cnVlKTsKLQotICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNj
cm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUt
c2V0IHRoZSAKLSAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQg
dGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KLSAgICAgICAgLy8g
YW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9
IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3MoaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29udHJv
bFNpemUoKSk7Ci0gICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRS
ZWN0KDAsIDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7Ci0gICAgfQotCi0gICAgLy8gSWYgbmVl
ZHNTY3JvbGxlclN0eWxlVXBkYXRlKCkgaXMgdHJ1ZSwgdGhlbiB0aGUgcGFnZSBpcyByZXN0b3Jp
bmcgZnJvbSB0aGUgcGFnZSBjYWNoZSwgYW5kIAotICAgIC8vIGEgcmVsYXlvdXQgd2lsbCBoYXBw
ZW4gb24gaXRzIG93bi4gT3RoZXJ3aXNlLCB3ZSBtdXN0IGluaXRpYXRlIGEgcmUtbGF5b3V0IG91
cnNlbHZlcy4KLSAgICBzY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxiYXJTdHlsZUNoYW5nZWQobmV3
U3R5bGUsICFuZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUoKSk7Ci0KLSAgICBzZXROZWVkc1Njcm9s
bGVyU3R5bGVVcGRhdGUoZmFsc2UpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpCi17Ci0gICAgbV9pbml0aWFsU2Nyb2xsYmFy
UGFpbnRUaW1lci5zdGFydE9uZVNob3QoMC4xKTsKLX0KLQotYm9vbCBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjpzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLmlzQWN0aXZlKCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKQotewot
ICAgIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3RvcCgpOwotfQotCi12b2lkIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQoVGlt
ZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKQotewotICAgIHdrU2Nyb2xsYmFyUGFpbnRl
ckZvcmNlRmxhc2hTY3JvbGxlcnMobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7
Ci19Ci0jZW5kaWYKLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzZXRWaXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYgc2Nyb2xsZXJUaHVtYikKLXsKLSAgICBJ
bnRSZWN0IHJlY3RJblZpZXdDb29yZGluYXRlcyA9IHNjcm9sbGVyVGh1bWI7Ci0gICAgaWYgKFNj
cm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNj
cm9sbGJhcigpKQotICAgICAgICByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB2ZXJ0aWNhbFNjcm9s
bGJhci0+Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsZXJUaHVtYik7Ci0KLSAgICBpZiAo
cmVjdEluVmlld0Nvb3JkaW5hdGVzID09IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRWaXNpYmxlU2Nyb2xsZXJU
aHVtYlJlY3QocmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKLSAgICBtX3Zpc2libGVTY3JvbGxlclRo
dW1iUmVjdCA9IHJlY3RJblZpZXdDb29yZGluYXRlczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
YmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM3ZjI2YTg0NDVmZDY5MjViODBiMDE2ZDE4MDM5MWVl
NjQxZDdlYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVz
Q2hyb21pdW1NYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxi
YXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWNfaAotI2RlZmluZSBTY3JvbGxiYXJPdmVybGF5
VXRpbGl0aWVzQ2hyb21pdW1NYWNfaAotCi0jaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQot
Ci0vLyBQdWJsaWMgQVBJcyBub3QgYXZhaWxhYmxlIG9uIHZlcnNpb25zIG9mIE1hYyBvbiB3aGlj
aCB3ZSBidWlsZAotI2lmIChkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKSkKLWVudW0gewotICAgIE5TU2Nyb2xsZXJTdHlsZUxl
Z2FjeSAgICAgICA9IDAsCi0gICAgTlNTY3JvbGxlclN0eWxlT3ZlcmxheSAgICAgID0gMQotfTsK
LQotI2lmZGVmIF9fT0JKQ19fCi10eXBlZGVmIE5TSW50ZWdlciBOU1Njcm9sbGVyU3R5bGU7Ci0j
ZW5kaWYKLSNlbmRpZgotCi10eXBlZGVmIHVpbnQzMiB3a1Njcm9sbGVyU3R5bGU7Ci0KLSNpZmRl
ZiBfX09CSkNfXwotQGNsYXNzIE5TU2Nyb2xsZXJJbXA7Ci1AY2xhc3MgTlNTY3JvbGxlckltcFBh
aXI7Ci0jZWxzZQotY2xhc3MgTlNTY3JvbGxlckltcDsKLWNsYXNzIE5TU2Nyb2xsZXJJbXBQYWly
OwotI2VuZGlmCi0KLXR5cGVkZWYgTlNTY3JvbGxlckltcCogV0tTY3JvbGxiYXJQYWludGVyUmVm
OwotdHlwZWRlZiBOU1Njcm9sbGVySW1wUGFpciogV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
clJlZjsKLQotYm9vbCBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKTsKLQotLy8gU2Ny
b2xsYmFyIFBhaW50ZXIKLWJvb2wgd2tTY3JvbGxiYXJQYWludGVyVXNlc092ZXJsYXlTY3JvbGxl
cnModm9pZCk7Ci1ib29sIHdrU2Nyb2xsYmFyUGFpbnRlcklzSG9yaXpvbnRhbChXS1Njcm9sbGJh
clBhaW50ZXJSZWYpOwotQ0dGbG9hdCB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoV0tTY3Jv
bGxiYXJQYWludGVyUmVmKTsKLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyU2V0T3ZlcmxheVN0YXRl
KFdLU2Nyb2xsYmFyUGFpbnRlclJlZiwgaW50IG92ZXJsYXlTY3JvbGxlclN0YXRlKTsKLXZvaWQg
d2tTY3JvbGxiYXJQYWludGVyUGFpbnQoV0tTY3JvbGxiYXJQYWludGVyUmVmLCBib29sIGVuYWJs
ZWQsIGRvdWJsZSB2YWx1ZSwgQ0dGbG9hdCBwcm9wb3J0aW9uLCBOU1JlY3QgZnJhbWVSZWN0KTsK
LXZvaWQgd2tTY3JvbGxiYXJQYWludGVyUGFpbnRUcmFjayhXS1Njcm9sbGJhclBhaW50ZXJSZWYs
IGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIE5TUmVjdCBm
cmFtZVJlY3QpOwotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJQYWludEtub2IoV0tTY3JvbGxiYXJQ
YWludGVyUmVmKTsKLWludCB3a1Njcm9sbGJhck1pbmltdW1UaHVtYkxlbmd0aChXS1Njcm9sbGJh
clBhaW50ZXJSZWYpOwotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShXS1Njcm9s
bGJhclBhaW50ZXJSZWYsIGlkIHNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSk7Ci12b2lkIHdrU2Ny
b2xsYmFyUGFpbnRlclNldEVuYWJsZWQoV0tTY3JvbGxiYXJQYWludGVyUmVmLCBib29sIGVuYWJs
ZWQpOwotQ0dGbG9hdCB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKFdLU2Nyb2xsYmFyUGFp
bnRlclJlZik7Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUGFpbnRlcihp
bnQgY29udHJvbFNpemUsIGJvb2wgaXNIb3Jpem9udGFsKTsKLWludCB3a1Njcm9sbGJhclRoaWNr
bmVzcyhpbnQgY29udHJvbFNpemUpOwotaW50IHdrU2Nyb2xsYmFyTWluaW11bVRvdGFsTGVuZ3Ro
TmVlZGVkRm9yVGh1bWIoV0tTY3JvbGxiYXJQYWludGVyUmVmKTsKLUNHUmVjdCB3a1Njcm9sbGJh
clBhaW50ZXJLbm9iUmVjdChXS1Njcm9sbGJhclBhaW50ZXJSZWYpOwotV0tTY3JvbGxiYXJQYWlu
dGVyUmVmIHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihXS1Njcm9sbGJhclBhaW50
ZXJSZWYgb2xkUGFpbnRlciwgaW50IG5ld1N0eWxlLCBpbnQgY29udHJvbFNpemUsIGJvb2wgaXNI
b3Jpem9udGFsKTsKLXZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKFdLU2Nyb2xs
YmFyUGFpbnRlclJlZiwgQ0dGbG9hdCk7Ci12b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRlclRyYWNr
QWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmLCBDR0Zsb2F0KTsKLQotZW51bSB7Ci0gICAgd2tT
Y3JvbGxlcktub2JTdHlsZURlZmF1bHQgPSAwLAotICAgIHdrU2Nyb2xsZXJLbm9iU3R5bGVEYXJr
ID0gMSwKLSAgICB3a1Njcm9sbGVyS25vYlN0eWxlTGlnaHQgPSAyCi19OwotdHlwZWRlZiB1aW50
MzIgd2tTY3JvbGxlcktub2JTdHlsZTsKLWV4dGVybiB2b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
cktub2JTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJSZWYsIHdrU2Nyb2xsZXJLbm9iU3R5bGUpOwot
Ci0vLyBTY3JvbGxiYXIgUGFpbnRlciBDb250cm9sbGVyCi1XS1Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyUmVmIHdrTWFrZVNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyKGlkIHBhaW50ZXJDb250
cm9sbGVyRGVsZWdhdGUpOwotdm9pZCB3a0NvbnRlbnRBcmVhU2Nyb2xsZWQoV0tTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrQ29udGVudEFyZWFXaWxsUGFpbnQoV0tTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrTW91c2VFbnRlcmVkQ29udGVudEFy
ZWEoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrTW91c2VFeGl0ZWRD
b250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKLXZvaWQgd2tNb3Vz
ZU1vdmVkSW5Db250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKLXZv
aWQgd2tXaWxsU3RhcnRMaXZlUmVzaXplKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYp
Owotdm9pZCB3a0NvbnRlbnRBcmVhUmVzaXplZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
UmVmKTsKLXZvaWQgd2tXaWxsRW5kTGl2ZVJlc2l6ZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyUmVmKTsKLXZvaWQgd2tDb250ZW50QXJlYURpZFNob3coV0tTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlclJlZik7Ci12b2lkIHdrQ29udGVudEFyZWFEaWRIaWRlKFdLU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a0RpZEJlZ2luU2Nyb2xsR2VzdHVyZShXS1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyUmVmKTsKLXZvaWQgd2tEaWRFbmRTY3JvbGxHZXN0dXJlKFdLU2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJGb3Jj
ZUZsYXNoU2Nyb2xsZXJzKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3
a1NldFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUoV0tTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlclJlZiwgd2tTY3JvbGxlclN0eWxlIG5ld1N0eWxlKTsKLXZvaWQgd2tTZXRQYWludGVy
Rm9yUGFpbnRlckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiwgV0tT
Y3JvbGxiYXJQYWludGVyUmVmLCBib29sIGlzSG9yaXpvbnRhbCk7Ci1XS1Njcm9sbGJhclBhaW50
ZXJSZWYgd2tWZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKFdLU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJSZWYpOwotV0tTY3JvbGxiYXJQYWludGVyUmVmIHdrSG9yaXpvbnRh
bFNjcm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJSZWYpOwotd2tTY3JvbGxlclN0eWxlIHdrU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJTdHls
ZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKLQotI2VuZGlmIC8vIFVTRShXS19T
Q1JPTExCQVJfUEFJTlRFUikKLQotI2VuZGlmIC8vIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXND
aHJvbWl1bU1hY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YjAxZDRhYjVkNTgxN2I1OTVmY2I4
ODA2MjE0NDYzODFjNjRjY2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3Zlcmxh
eVV0aWxpdGllc0Nocm9taXVtTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi0KLSNpbmNs
dWRlICJTY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCIKLSNpbmNsdWRlICJT
Y3JvbGxUeXBlcy5oIgotI2luY2x1ZGUgPENvY29hL0NvY29hLmg+Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgdXRpbGl0aWVzIHRvIGRyYXcgb3Zlcmxh
eSBzY3JvbGxiYXJzLiBUaGVyZSBhcmUgbm8gcHVibGljCi0vLyBBUElzIHlldCBvbiB0aGUgTWFj
IHRvIGRyYXcgb3ZlcmxheSBzY3JvbGxiYXJzIHNvIHdlIHVzZSBwcml2YXRlIEFQSXMgdGhhdAot
Ly8gd2UgbG9vayB1cCBhdCBydW50aW1lLiBJZiB0aGUgcHJpdmF0ZSBBUElzIGRvbid0IGV4aXN0
IHRoZW4gdGhlIHdrTWFrZSoKLS8vIGZ1bmN0aW9ucyB3aWxsIHJldHVybiBuaWwuCi0vLwotLy8g
Tm90ZSwgdGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyBjb3BpZWQgZnJvbSBXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmguCi0vLyBVc2luZyB0aGUgc2FtZSBuYW1lcyBtYWtlcyB0aGUgY29kZSBl
YXNpZXIgdG8gbWFpbnRhaW4uCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBQdWJsaWMg
QVBJcyBub3QgYXZhaWxhYmxlIG9uIHZlcnNpb25zIG9mIE1hYyBvbiB3aGljaCB3ZSBidWlsZAot
I2lmIChkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKSkKLUBpbnRlcmZhY2UgTlNTY3JvbGxlciAoTlNPYmplY3QpCi0rIChOU1Nj
cm9sbGVyU3R5bGUpcHJlZmVycmVkU2Nyb2xsZXJTdHlsZTsKLUBlbmQKLSNlbmRpZgotCi0vLyBU
aGVzZSBhcmUgcHJpdmF0ZSBBUElzIHRvIGRyYXcgb3ZlcmxheSBzY3JvbGxiYXJzLgotQGludGVy
ZmFjZSBOU1Njcm9sbGVySW1wIDogTlNPYmplY3QKLQotKyAoaWQpc2Nyb2xsZXJJbXBXaXRoU3R5
bGU6KE5TU2Nyb2xsZXJTdHlsZSlzdHlsZQotICAgICAgICAgICAgICAgY29udHJvbFNpemU6KE5T
Q29udHJvbFNpemUpc2l6ZQotICAgICAgICAgICAgICAgIGhvcml6b250YWw6KEJPT0wpaG9yaXpv
bnRhbAotICAgICAgcmVwbGFjaW5nU2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVyOwotCi1AcHJvcGVy
dHkgQ0dGbG9hdCBrbm9iQWxwaGE7Ci1AcHJvcGVydHkgQ0dGbG9hdCB0cmFja0FscGhhOwotQHBy
b3BlcnR5IENHRmxvYXQga25vYlByb3BvcnRpb247Ci1AcHJvcGVydHkgTlNJbnRlZ2VyIGtub2JT
dHlsZTsKLUBwcm9wZXJ0eShnZXR0ZXI9aXNFbmFibGVkKSBCT09MIGVuYWJsZWQ7Ci1AcHJvcGVy
dHkoZ2V0dGVyPWlzSG9yaXpvbnRhbCkgQk9PTCBob3Jpem9udGFsOwotQHByb3BlcnR5IGRvdWJs
ZSBkb3VibGVWYWx1ZTsKLUBwcm9wZXJ0eShhc3NpZ24pIGlkIGRlbGVnYXRlOwotCi0tIChDR0Zs
b2F0KWtub2JNaW5MZW5ndGg7Ci0tIChDR0Zsb2F0KXRyYWNrT3ZlcmxhcEVuZEluc2V0OwotLSAo
Q0dGbG9hdClrbm9iT3ZlcmxhcEVuZEluc2V0OwotLSAoQ0dGbG9hdCl0cmFja0VuZEluc2V0Owot
LSAoQ0dGbG9hdClrbm9iRW5kSW5zZXQ7Ci0tIChDR0Zsb2F0KXRyYWNrQm94V2lkdGg7Ci0tIChD
R0Zsb2F0KXRyYWNrV2lkdGg7Ci0tICh2b2lkKXNldEJvdW5kc1NpemU6KE5TU2l6ZSlzaXplOwot
LSAodm9pZClkcmF3S25vYlNsb3RJblJlY3Q6KE5TUmVjdClyZWN0Ci0gICAgICAgICAgICAgICAg
IGhpZ2hsaWdodDooQk9PTClmbGFnOwotLSAodm9pZClkcmF3S25vYjsKLS0gKHZvaWQpc2V0T3Zl
cmxheVNjcm9sbGVyU3RhdGU6KE5TU2Nyb2xsZXJTdHlsZSlzdGF0ZQotICAgICAgICAgICAgICAg
Zm9yY2VJbW1lZGlhdGVseTooQk9PTClmbGFnOwotLSAodm9pZClzZXREZWxlZ2F0ZTooaWQpZGVs
ZWdhdGU7Ci0tIChOU1JlY3QpcmVjdEZvclBhcnQ6KE5TVUludGVnZXIpYXJnMTsKLQotQGVuZAot
Ci0vLyBUaGVzZSBhcmUgcHJpdmF0ZSBBUElzIHRvIG1hbmFnZSBvdmVybGF5IHNjcm9sbGJhcnMu
Ci1AaW50ZXJmYWNlIE5TU2Nyb2xsZXJJbXBQYWlyIDogTlNPYmplY3QKLQotQHByb3BlcnR5IE5T
U2Nyb2xsZXJTdHlsZSBzY3JvbGxlclN0eWxlOwotQHByb3BlcnR5KHJldGFpbikgTlNTY3JvbGxl
ckltcCAqaG9yaXpvbnRhbFNjcm9sbGVySW1wOwotQHByb3BlcnR5KHJldGFpbikgTlNTY3JvbGxl
ckltcCAqdmVydGljYWxTY3JvbGxlckltcDsKLUBwcm9wZXJ0eShhc3NpZ24pIGlkIGRlbGVnYXRl
OwotCi0tICh2b2lkKWhpZGVPdmVybGF5U2Nyb2xsZXJzOwotLSAodm9pZClmbGFzaFNjcm9sbGVy
czsKLS0gKHZvaWQpY29udGVudEFyZWFTY3JvbGxlZDsKLS0gKHZvaWQpY29udGVudEFyZWFXaWxs
RHJhdzsKLS0gKHZvaWQpY29udGVudEFyZWFEaWRIaWRlOwotLSAodm9pZCl3aW5kb3dPcmRlcmVk
T3V0OwotLSAodm9pZCl3aW5kb3dPcmRlcmVkSW47Ci0tICh2b2lkKW1vdXNlRW50ZXJlZENvbnRl
bnRBcmVhOwotLSAodm9pZCltb3VzZU1vdmVkSW5Db250ZW50QXJlYTsKLS0gKHZvaWQpbW91c2VF
eGl0ZWRDb250ZW50QXJlYTsKLS0gKHZvaWQpc3RhcnRMaXZlUmVzaXplOwotLSAodm9pZCljb250
ZW50QXJlYURpZFJlc2l6ZTsKLS0gKHZvaWQpZW5kTGl2ZVJlc2l6ZTsKLS0gKHZvaWQpYmVnaW5T
Y3JvbGxHZXN0dXJlOwotLSAodm9pZCllbmRTY3JvbGxHZXN0dXJlOwotCi1AZW5kCi0KLXN0YXRp
YyBDbGFzcyBsb29rVXBOU1Njcm9sbGVySW1wQ2xhc3MoKQotewotICAgIHN0YXRpYyBDbGFzcyBy
ZXN1bHQgPSBOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAiKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1zdGF0aWMgQ2xhc3MgbG9va1VwTlNTY3JvbGxlckltcFBhaXJDbGFzcygp
Ci17Ci0gICAgc3RhdGljIENsYXNzIHJlc3VsdCA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3Jv
bGxlckltcFBhaXIiKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgTlNDb250cm9s
U2l6ZSBzY3JvbGxiYXJDb250cm9sU2l6ZVRvTlNDb250cm9sU2l6ZShpbnQgY29udHJvbFNpemUp
Ci17Ci0gICAgcmV0dXJuIGNvbnRyb2xTaXplID09IFdlYkNvcmU6OlJlZ3VsYXJTY3JvbGxiYXIg
PyBOU1JlZ3VsYXJDb250cm9sU2l6ZSA6IE5TU21hbGxDb250cm9sU2l6ZTsKLX0KLQotc3RhdGlj
IE5TU2Nyb2xsZXJTdHlsZSBwcmVmZXJyZWRTY3JvbGxlclN0eWxlKCkKLXsKLSAgICBpZiAoW05T
U2Nyb2xsZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwcmVmZXJyZWRTY3JvbGxlclN0
eWxlKV0pCi0gICAgICAgIHJldHVybiBbTlNTY3JvbGxlciBwcmVmZXJyZWRTY3JvbGxlclN0eWxl
XTsKLSAgICByZXR1cm4gTlNTY3JvbGxlclN0eWxlTGVnYWN5OwotfQotCi1ib29sIHdrU2Nyb2xs
YmFyUGFpbnRlclVzZXNPdmVybGF5U2Nyb2xsZXJzKHZvaWQpCi17Ci0gICAgcmV0dXJuIHByZWZl
cnJlZFNjcm9sbGVyU3R5bGUoKSA9PSBOU1Njcm9sbGVyU3R5bGVPdmVybGF5OwotfQotCi1ib29s
IHdrU2Nyb2xsYmFyUGFpbnRlcklzSG9yaXpvbnRhbChXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFp
bnRlcikKLXsKLSAgICByZXR1cm4gW3BhaW50ZXIgaXNIb3Jpem9udGFsXTsKLX0KLQotQ0dGbG9h
dCB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50
ZXIpCi17Ci0gICAgcmV0dXJuIFtwYWludGVyIGtub2JBbHBoYV07Ci19Ci0KLXZvaWQgd2tTY3Jv
bGxiYXJQYWludGVyU2V0T3ZlcmxheVN0YXRlKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVy
LCBpbnQgb3ZlcmxheVNjcm9sbGVyU3RhdGUpCi17Ci0gICAgW3BhaW50ZXIgc2V0T3ZlcmxheVNj
cm9sbGVyU3RhdGU6b3ZlcmxheVNjcm9sbGVyU3RhdGUKLSAgICAgICAgICAgICAgICAgICAgZm9y
Y2VJbW1lZGlhdGVseTpZRVNdOwotfQotCi12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50KFdL
U2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCBib29sIGVuYWJsZWQsIGRvdWJsZSB2YWx1ZSwg
Q0dGbG9hdCBwcm9wb3J0aW9uLCBOU1JlY3QgZnJhbWVSZWN0KQotewotICAgIHdrU2Nyb2xsYmFy
UGFpbnRlclBhaW50VHJhY2socGFpbnRlciwgZW5hYmxlZCwgdmFsdWUsIHByb3BvcnRpb24sIGZy
YW1lUmVjdCk7Ci0gICAgd2tTY3JvbGxiYXJQYWludGVyUGFpbnRLbm9iKHBhaW50ZXIpOwotfQot
Ci12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50VHJhY2soV0tTY3JvbGxiYXJQYWludGVyUmVm
IHBhaW50ZXIsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3BvcnRpb24s
IE5TUmVjdCBmcmFtZVJlY3QpCi17Ci0gICAgW3BhaW50ZXIgc2V0RW5hYmxlZDplbmFibGVkXTsK
LSAgICBbcGFpbnRlciBzZXRCb3VuZHNTaXplOmZyYW1lUmVjdC5zaXplXTsKLSAgICBbcGFpbnRl
ciBzZXREb3VibGVWYWx1ZTp2YWx1ZV07Ci0gICAgW3BhaW50ZXIgc2V0S25vYlByb3BvcnRpb246
cHJvcG9ydGlvbl07Ci0KLSAgICBpZiAoW3BhaW50ZXIgaXNIb3Jpem9udGFsXSkKLSAgICAgICAg
ZnJhbWVSZWN0LnNpemUuaGVpZ2h0ID0gW3BhaW50ZXIgdHJhY2tXaWR0aF07Ci0gICAgZWxzZQot
ICAgICAgICBmcmFtZVJlY3Quc2l6ZS53aWR0aCA9IFtwYWludGVyIHRyYWNrV2lkdGhdOwotICAg
IGZyYW1lUmVjdC5vcmlnaW4gPSBOU1plcm9Qb2ludDsKLQotICAgIFtwYWludGVyIGRyYXdLbm9i
U2xvdEluUmVjdDpmcmFtZVJlY3QgaGlnaGxpZ2h0Ok5PXTsKLX0KLQotdm9pZCB3a1Njcm9sbGJh
clBhaW50ZXJQYWludEtub2IoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIpCi17Ci0gICAg
W3BhaW50ZXIgZHJhd0tub2JdOwotfQotCi1pbnQgd2tTY3JvbGxiYXJNaW5pbXVtVGh1bWJMZW5n
dGgoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIpCi17Ci0gICAgcmV0dXJuIFtwYWludGVy
IGtub2JNaW5MZW5ndGhdOwotfQotCi12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRl
KFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCBpZCBzY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUpCi17Ci0gICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6c2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRl
XTsKLX0KLQotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJTZXRFbmFibGVkKFdLU2Nyb2xsYmFyUGFp
bnRlclJlZiBwYWludGVyLCBib29sIGVuYWJsZWQpCi17Ci0gICAgW3BhaW50ZXIgc2V0RW5hYmxl
ZDplbmFibGVkXTsKLX0KLQotQ0dGbG9hdCB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKFdL
U2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyKQotewotICAgIHJldHVybiBbcGFpbnRlciB0cmFj
a0FscGhhXTsKLX0KLQotV0tTY3JvbGxiYXJQYWludGVyUmVmIHdrTWFrZVNjcm9sbGJhclBhaW50
ZXIoaW50IGNvbnRyb2xTaXplLCBib29sIGlzSG9yaXpvbnRhbCkKLXsKLSAgICByZXR1cm4gd2tN
YWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKG5pbCwgcHJlZmVycmVkU2Nyb2xsZXJTdHls
ZSgpLCBjb250cm9sU2l6ZSwgaXNIb3Jpem9udGFsKTsKLX0KLQotaW50IHdrU2Nyb2xsYmFyVGhp
Y2tuZXNzKGludCBjb250cm9sU2l6ZSkKLXsKLSAgICByZXR1cm4gW3drTWFrZVNjcm9sbGJhclBh
aW50ZXIoY29udHJvbFNpemUsIGZhbHNlKSB0cmFja0JveFdpZHRoXTsKLX0KLQotaW50IHdrU2Ny
b2xsYmFyTWluaW11bVRvdGFsTGVuZ3RoTmVlZGVkRm9yVGh1bWIoV0tTY3JvbGxiYXJQYWludGVy
UmVmIHBhaW50ZXIpCi17Ci0gICAgcmV0dXJuIFtwYWludGVyIGtub2JNaW5MZW5ndGhdICsKLSAg
ICAgICAgICAgW3BhaW50ZXIgdHJhY2tPdmVybGFwRW5kSW5zZXRdICsKLSAgICAgICAgICAgW3Bh
aW50ZXIga25vYk92ZXJsYXBFbmRJbnNldF0gKwotICAgICAgICAgICAoW3BhaW50ZXIgdHJhY2tF
bmRJbnNldF0gKyBbcGFpbnRlciBrbm9iRW5kSW5zZXRdKSAqIDI7Ci19Ci0KLVdLU2Nyb2xsYmFy
UGFpbnRlclJlZiB3a1ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIHJldHVybiBbY29u
dHJvbGxlciB2ZXJ0aWNhbFNjcm9sbGVySW1wXTsKLX0KLQotV0tTY3JvbGxiYXJQYWludGVyUmVm
IHdrSG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKFdLU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsKLSAgICByZXR1cm4gW2NvbnRyb2xsZXIg
aG9yaXpvbnRhbFNjcm9sbGVySW1wXTsKLX0KLQotd2tTY3JvbGxlclN0eWxlIHdrU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNv
bnRyb2xsZXIpCi17Ci0gICAgcmV0dXJuIFtjb250cm9sbGVyIHNjcm9sbGVyU3R5bGVdOwotfQot
Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVy
KFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBvbGRQYWludGVyLCBpbnQgbmV3U3R5bGUsIGludCBjb250
cm9sU2l6ZSwgYm9vbCBpc0hvcml6b250YWwpCi17Ci0gICAgaWYgKCFpc1Njcm9sbGJhck92ZXJs
YXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW2xvb2tV
cE5TU2Nyb2xsZXJJbXBDbGFzcygpIHNjcm9sbGVySW1wV2l0aFN0eWxlOm5ld1N0eWxlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sU2l6ZTpz
Y3JvbGxiYXJDb250cm9sU2l6ZVRvTlNDb250cm9sU2l6ZShjb250cm9sU2l6ZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsOmlzSG9y
aXpvbnRhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjaW5n
U2Nyb2xsZXJJbXA6b2xkUGFpbnRlcl07Ci19Ci0KLXZvaWQgd2tTZXRQYWludGVyRm9yUGFpbnRl
ckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyLCBX
S1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgYm9vbCBpc0hvcml6b250YWwpCi17Ci0gICAg
aWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgW2NvbnRyb2xsZXIgc2V0SG9yaXpvbnRhbFNjcm9s
bGVySW1wOnBhaW50ZXJdOwotICAgIGVsc2UKLSAgICAgICAgW2NvbnRyb2xsZXIgc2V0VmVydGlj
YWxTY3JvbGxlckltcDpwYWludGVyXTsKLX0KLQotdm9pZCB3a1NldFNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyU3R5bGUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBwYWludGVyLCB3
a1Njcm9sbGVyU3R5bGUgbmV3U3R5bGUpCi17Ci0gICAgW3BhaW50ZXIgc2V0U2Nyb2xsZXJTdHls
ZTpuZXdTdHlsZV07Ci19Ci0KLUNHUmVjdCB3a1Njcm9sbGJhclBhaW50ZXJLbm9iUmVjdChXS1Nj
cm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICByZXR1cm4gTlNSZWN0VG9DR1JlY3Qo
W3BhaW50ZXIgcmVjdEZvclBhcnQ6TlNTY3JvbGxlcktub2JdKTsKLX0KLQotdm9pZCB3a1NldFNj
cm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIENH
RmxvYXQgYWxwaGEpCi17Ci0gICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOmFscGhhXTsKLX0KLQot
dm9pZCB3a1NldFNjcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZiBwYWludGVyLCBDR0Zsb2F0IGFscGhhKQotewotICAgIFtwYWludGVyIHNldFRyYWNrQWxwaGE6
YWxwaGFdOwotfQotCi12b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JTdHlsZShXS1Njcm9s
bGJhclBhaW50ZXJSZWYgcGFpbnRlciwgd2tTY3JvbGxlcktub2JTdHlsZSBzdHlsZSkKLXsKLSAg
ICBbcGFpbnRlciBzZXRLbm9iU3R5bGU6c3R5bGVdOwotfQotCi1XS1Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyUmVmIHdrTWFrZVNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyKGlkIHBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGUpCi17Ci0gICAgaWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFp
bGFibGUoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBOU1Njcm9sbGVySW1wUGFpciogY29u
dHJvbGxlciA9IFtbW2xvb2tVcE5TU2Nyb2xsZXJJbXBQYWlyQ2xhc3MoKSBhbGxvY10gaW5pdF0g
YXV0b3JlbGVhc2VdOwotICAgIFtjb250cm9sbGVyIHNldERlbGVnYXRlOnBhaW50ZXJDb250cm9s
bGVyRGVsZWdhdGVdOwotICAgIFtjb250cm9sbGVyIHNldFNjcm9sbGVyU3R5bGU6cHJlZmVycmVk
U2Nyb2xsZXJTdHlsZSgpXTsKLSAgICByZXR1cm4gY29udHJvbGxlcjsKLX0KLQotdm9pZCB3a0Nv
bnRlbnRBcmVhU2Nyb2xsZWQoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9s
bGVyKQotewotICAgIFtjb250cm9sbGVyIGNvbnRlbnRBcmVhU2Nyb2xsZWRdOwotfQotCi12b2lk
IHdrQ29udGVudEFyZWFXaWxsUGFpbnQoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBj
b250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIGNvbnRlbnRBcmVhV2lsbERyYXddOwotfQot
Ci12b2lkIHdrTW91c2VFbnRlcmVkQ29udGVudEFyZWEoV0tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIG1vdXNlRW50ZXJlZENvbnRl
bnRBcmVhXTsKLX0KLQotdm9pZCB3a01vdXNlRXhpdGVkQ29udGVudEFyZWEoV0tTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIG1vdXNl
RXhpdGVkQ29udGVudEFyZWFdOwotfQotCi12b2lkIHdrTW91c2VNb3ZlZEluQ29udGVudEFyZWEo
V0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250
cm9sbGVyIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhXTsKLX0KLQotdm9pZCB3a1dpbGxTdGFydExp
dmVSZXNpemUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewot
ICAgIFtjb250cm9sbGVyIHN0YXJ0TGl2ZVJlc2l6ZV07Ci19Ci0KLXZvaWQgd2tDb250ZW50QXJl
YVJlc2l6ZWQoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewot
ICAgIFtjb250cm9sbGVyIGNvbnRlbnRBcmVhRGlkUmVzaXplXTsKLX0KLQotdm9pZCB3a1dpbGxF
bmRMaXZlUmVzaXplKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikK
LXsKLSAgICBbY29udHJvbGxlciBlbmRMaXZlUmVzaXplXTsKLX0KLQotdm9pZCB3a0NvbnRlbnRB
cmVhRGlkU2hvdyhXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17
Ci0gICAgW2NvbnRyb2xsZXIgd2luZG93T3JkZXJlZEluXTsKLX0KLQotdm9pZCB3a0NvbnRlbnRB
cmVhRGlkSGlkZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17
Ci0gICAgW2NvbnRyb2xsZXIgd2luZG93T3JkZXJlZE91dF07Ci19Ci0KLXZvaWQgd2tEaWRCZWdp
blNjcm9sbEdlc3R1cmUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVy
KQotewotICAgIFtjb250cm9sbGVyIGJlZ2luU2Nyb2xsR2VzdHVyZV07Ci19Ci0KLXZvaWQgd2tE
aWRFbmRTY3JvbGxHZXN0dXJlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJv
bGxlcikKLXsKLSAgICBbY29udHJvbGxlciBlbmRTY3JvbGxHZXN0dXJlXTsKLX0KLQotdm9pZCB3
a1Njcm9sbGJhclBhaW50ZXJGb3JjZUZsYXNoU2Nyb2xsZXJzKFdLU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsKLSAgICBbY29udHJvbGxlciBoaWRlT3ZlcmxheVNj
cm9sbGVyc107Ci0gICAgW2NvbnRyb2xsZXIgZmxhc2hTY3JvbGxlcnNdOwotfQotCi1ib29sIGlz
U2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpCi17Ci0gICAgc3RhdGljIGJvb2wgYXBpQXZh
aWxhYmxlID0gW2xvb2tVcE5TU2Nyb2xsZXJJbXBDbGFzcygpIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Ioc2Nyb2xsZXJJbXBXaXRoU3R5bGU6Y29udHJvbFNpemU6aG9yaXpvbnRhbDpyZXBs
YWNpbmdTY3JvbGxlckltcDopXSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFts
b29rVXBOU1Njcm9sbGVySW1wUGFpckNsYXNzKCkgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6
QHNlbGVjdG9yKHNjcm9sbGVyU3R5bGUpXTsKLSAgICByZXR1cm4gYXBpQXZhaWxhYmxlOwotfQot
Ci0jZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yy5oCmluZGV4IGNjOWEzMDhlZTIzMDAyNWU1NTQ5ZGY4MjAzMTMzYjdlM2FlZTJiMGIuLjQxYTE5
OGUzZjg0MjBjODQ4OTQ1ZmI4NDc0NGRkYjcwMDI0Y2Q2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjLmgKQEAgLTI3LDYzICsyNywyMiBAQAogI2lmbmRlZiBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjX2gKICNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hY19oCiAKLSNpbmNsdWRlICJT
Y3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCIKLSNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZS5oIgotCi0vLyBUaGlzIGZpbGUgKGFuZCBpdHMgYXNzb2NpYXRlZCAu
bW0gZmlsZSkgaXMgYSBjbG9uZSBvZiBTY3JvbGxiYXJUaGVtZU1hYy5oLgotLy8gU2VlIHRoZSAu
bW0gZmlsZSBmb3IgZGV0YWlscy4KKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZU1hYy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMgOiBw
dWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgeworY2xhc3MgU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYyA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZU1hYyB7CiBwdWJsaWM6CiAgICAgU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bU1hYygpOwogICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWMoKTsKIAotICAgIHZvaWQgcHJlZmVyZW5jZXNDaGFuZ2VkKCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlRW5hYmxlZFN0YXRlKFNjcm9sbGJhciopOwotCiAgICAgdmlydHVhbCBib29s
IHBhaW50KFNjcm9sbGJhciosIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCk7CiAKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Ny
b2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgdXNlc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXIqKTsKLQotICAgIHZpcnR1YWwg
ZG91YmxlIGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpOwotICAgIHZpcnR1YWwgZG91Ymxl
IGF1dG9zY3JvbGxUaW1lckRlbGF5KCk7Ci0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhckJ1dHRvbnNQ
bGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVy
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwotCi0gICAgdm9pZCBzZXROZXdQYWludGVyRm9yU2Nyb2xs
YmFyKFNjcm9sbGJhciosIFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7Ci0gICAgV0tTY3JvbGxiYXJQ
YWludGVyUmVmIHBhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0KICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRPdmVyaGFuZ0FyZWFzKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0JiB2ZXJ0
aWNhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKICAgICAKLXByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXIqKTsKLSAgICB2aXJ0
dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyKik7Ci0KLSAgICB2aXJ0dWFsIEludFJlY3QgYmFj
a0J1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZh
bHNlKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiwg
U2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIEludFJl
Y3QgdHJhY2tSZWN0KFNjcm9sbGJhciosIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7Ci0KLSAgICB2
aXJ0dWFsIGludCBtYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkgeyByZXR1cm4gNDA7IH0KLQotICAg
IHZpcnR1YWwgaW50IG1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXIqKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREcmFnRG9jdW1lbnRJbnN0ZWFkT2ZU
aHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLQogcHJpdmF0ZToK
ICAgICB2b2lkIHBhaW50R2l2ZW5UaWNrbWFya3MoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFy
KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpOwogCi1wcml2YXRlOgog
ICAgIFJlZlB0cjxQYXR0ZXJuPiBtX292ZXJoYW5nUGF0dGVybjsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1N
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjLm1tCmluZGV4IDg0ZDVmZTFjNDkxOGNlN2RjOTMzZWVmMDY1ZjFjNDQ4YTQ5MDhh
YWUuLmY5MzY0MTg2ZmNmMzVlM2NhMGU5NmUxYTk3NDNlYjI5Y2Q3OTVlMDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1N
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYy5tbQpAQCAtMjcsMTA4ICsyNywyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaCIKIAotI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUg
Ik5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCi0j
aW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oIgorI2luY2x1ZGUgIlNjcm9sbEFu
aW1hdG9yTWFjLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgPENhcmJvbi9D
YXJib24uaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogI2lmIFVTRShTS0lBKQog
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJza2lhL2V4dC9za2lh
X3V0aWxzX21hYy5oIgogI2VuZGlmCiAKLQotCi0vLyBGSVhNRTogVGhlcmUgYXJlIHJlcGFpbnRp
bmcgcHJvYmxlbXMgZHVlIHRvIEFxdWEgc2Nyb2xsIGJhciBidXR0b25zJyB2aXN1YWwgb3ZlcmZs
b3cuCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
Ly8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLmggZmlsZSkgaXMgYSBjbG9uZSBvZiBT
Y3JvbGxiYXJUaGVtZU1hYy5tbS4KLS8vIEJlY2F1c2Ugd2Ugd2FudCB0byBkcmF3IHRpY2ttYXJr
cyBpbiB0aGUgc2Nyb2xsYmFyLCB3ZSBtdXN0IG1haW50YWluIGEgZm9yay4KLS8vIFBsZWFzZSBt
YWludGFpbiB0aGlzIGZpbGUgYnkgcGVyZm9ybWluZyBwYXJhbGxlbCBjaGFuZ2VzIHRvIGl0Lgot
Ly8KLS8vIFRoZSBvbmx5IGNoYW5nZXMgZnJvbSBTY3JvbGxiYXJUaGVtZU1hYyBzaG91bGQgYmU6
Ci0vLyAtIFRoZSBjbGFzc25hbWUgY2hhbmdlIGZyb20gU2Nyb2xsYmFyVGhlbWVNYWMgdG8gU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bU1hYy4KLS8vIC0gSW4gcGFpbnQoKSB0aGUgY29kZSB0byBwYWlu
dCB0aGUgdHJhY2ssIHRpY2ttYXJrcywgYW5kIHRodW1iIHNlcGFyYXRlbHkuCi0vLyAtIEluIHBh
aW50KCkgdGhlIHRodW1iIGlzIGRyYXduIHZpYSBDaHJvbWVCcmlkZ2UvV2ViVGhlbWVFbmdpbmUu
Ci0vLyAtIFZhcmlvdXMgZnVuY3Rpb25zIHRoYXQgd2VyZSBzcGxpdCB1c2luZyAjaWYgVVNFKFdL
X1NDUk9MTEJBUl9QQUlOVEVSKQotLy8gICBoYXZlIGJlZW4gY29tYmluZWQgdXNpbmcgcnVudGlt
ZSBjaGVja3MgaW5zdGVhZC4KLS8vCi0vLyBGb3IgYWxsIG90aGVyIGRpZmZlcmVuY2VzLCBpZiBp
dCB3YXMgaW50cm9kdWNlZCBpbiB0aGlzIGZpbGUsIHRoZW4gdGhlCi0vLyBtYWludGFpbmVyIGZv
cmdvdCB0byBpbmNsdWRlIGl0IGluIHRoZSBsaXN0OyBvdGhlcndpc2UgaXQgaXMgYW4gdXBkYXRl
IHRoYXQKLS8vIHNob3VsZCBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIGZpbGUgYnV0IHdhcyBu
b3QuCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNoTWFwPFNjcm9sbGJhcios
IFJldGFpblB0cjxXS1Njcm9sbGJhclBhaW50ZXJSZWY+ID4gU2Nyb2xsYmFyUGFpbnRlck1hcDsK
LQotc3RhdGljIFNjcm9sbGJhclBhaW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCi17Ci0gICAgc3Rh
dGljIFNjcm9sbGJhclBhaW50ZXJNYXAqIG1hcCA9IG5ldyBTY3JvbGxiYXJQYWludGVyTWFwOwot
ICAgIHJldHVybiBtYXA7Ci19Ci0KLX0KLQotQGludGVyZmFjZSBTY3JvbGxiYXJQcmVmc09ic2Vy
dmVyIDogTlNPYmplY3QKLXsKLX0KLQotKyAodm9pZClyZWdpc3RlckFzT2JzZXJ2ZXI7Ci0rICh2
b2lkKWFwcGVhcmFuY2VQcmVmc0NoYW5nZWQ6KE5TTm90aWZpY2F0aW9uKil0aGVOb3RpZmljYXRp
b247Ci0rICh2b2lkKWJlaGF2aW9yUHJlZnNDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiopdGhlTm90
aWZpY2F0aW9uOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQcmVmc09ic2Vy
dmVyCi0KLSsgKHZvaWQpYXBwZWFyYW5jZVByZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24qKXVu
dXNlZE5vdGlmaWNhdGlvbgotewotICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24p
OwotCi0gICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7
Ci0gICAgaWYgKHRoZW1lLT5pc01vY2tUaGVtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBz
dGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4odGhlbWUpLT5wcmVmZXJlbmNl
c0NoYW5nZWQoKTsKLSAgICBpZiAoc2Nyb2xsYmFyTWFwKCktPmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHNjcm9sbGJh
ck1hcCgpLT5lbmQoKTsKLSAgICBmb3IgKFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGl0
ID0gc2Nyb2xsYmFyTWFwKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBp
dC0+Zmlyc3QtPnN0eWxlQ2hhbmdlZCgpOwotICAgICAgICBpdC0+Zmlyc3QtPmludmFsaWRhdGUo
KTsKLSAgICB9Ci19Ci0KLSsgKHZvaWQpYmVoYXZpb3JQcmVmc0NoYW5nZWQ6KE5TTm90aWZpY2F0
aW9uKil1bnVzZWROb3RpZmljYXRpb24KLXsKLSAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZp
Y2F0aW9uKTsKLQotICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpOwotICAgIGlmICh0aGVtZS0+aXNNb2NrVGhlbWUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyo+KHRoZW1lKS0+cHJl
ZmVyZW5jZXNDaGFuZ2VkKCk7Ci19Ci0KLSsgKHZvaWQpcmVnaXN0ZXJBc09ic2VydmVyCi17Ci0g
ICAgW1tOU0Rpc3RyaWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9i
c2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGFwcGVhcmFuY2VQcmVmc0NoYW5nZWQ6KSBu
YW1lOkAiQXBwbGVBcXVhU2Nyb2xsQmFyVmFyaWFudENoYW5nZWQiIG9iamVjdDpuaWwgc3VzcGVu
c2lvbkJlaGF2aW9yOk5TTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZlckltbWVk
aWF0ZWx5XTsKLSAgICBbW05TRGlzdHJpYnV0ZWROb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoYmVoYXZpb3JQcmVmc0No
YW5nZWQ6KSBuYW1lOkAiQXBwbGVOb1JlZGlzcGxheUFwcGVhcmFuY2VQcmVmZXJlbmNlQ2hhbmdl
ZCIgb2JqZWN0Om5pbCBzdXNwZW5zaW9uQmVoYXZpb3I6TlNOb3RpZmljYXRpb25TdXNwZW5zaW9u
QmVoYXZpb3JDb2FsZXNjZV07Ci19Ci0KLUBlbmQKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBT
Y3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKQEAgLTEzNywzMzMg
KzUwLDE3IEBAIFNjcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQog
ICAgIHJldHVybiAmdGhlbWU7CiB9CiAKLS8vIEZJWE1FOiBHZXQgdGhlc2UgbnVtYmVycyBmcm9t
IENvcmVVSS4KLXN0YXRpYyBpbnQgY1Njcm9sbGJhclRoaWNrbmVzc1tdID0geyAxNSwgMTEgfTsK
LXN0YXRpYyBpbnQgY1JlYWxCdXR0b25MZW5ndGhbXSA9IHsgMjgsIDIxIH07Ci1zdGF0aWMgaW50
IGNCdXR0b25JbnNldFtdID0geyAxNCwgMTEgfTsKLXN0YXRpYyBpbnQgY0J1dHRvbkhpdEluc2V0
W10gPSB7IDMsIDIgfTsKLS8vIGNSZWFsQnV0dG9uTGVuZ3RoIC0gY0J1dHRvbkluc2V0Ci1zdGF0
aWMgaW50IGNCdXR0b25MZW5ndGhbXSA9IHsgMTQsIDEwIH07Ci1zdGF0aWMgaW50IGNUaHVtYk1p
bkxlbmd0aFtdID0geyAyNiwgMjAgfTsKLQotc3RhdGljIGludCBjT3V0ZXJCdXR0b25MZW5ndGhb
XSA9IHsgMTYsIDE0IH07IC8vIFRoZSBvdXRlciBidXR0b24gaW4gYSBkb3VibGUgYnV0dG9uIHBh
aXIgaXMgYSBiaXQgYmlnZ2VyLgotc3RhdGljIGludCBjT3V0ZXJCdXR0b25PdmVybGFwID0gMjsK
LQotc3RhdGljIGZsb2F0IGdJbml0aWFsQnV0dG9uRGVsYXkgPSAwLjVmOwotc3RhdGljIGZsb2F0
IGdBdXRvc2Nyb2xsQnV0dG9uRGVsYXkgPSAwLjA1ZjsKLXN0YXRpYyBib29sIGdKdW1wT25UcmFj
a0NsaWNrID0gZmFsc2U7Ci1zdGF0aWMgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBnQnV0dG9u
UGxhY2VtZW50ID0gaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkgPyBTY3JvbGxiYXJC
dXR0b25zTm9uZSA6IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQ7Ci0KLXN0YXRpYyB2b2lkIHVw
ZGF0ZUFycm93UGxhY2VtZW50KCkKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TU3RyaW5nICpidXR0b25QbGFjZW1l
bnQgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBvYmplY3RGb3JLZXk6
QCJBcHBsZVNjcm9sbEJhclZhcmlhbnQiXTsKLSAgICBpZiAoW2J1dHRvblBsYWNlbWVudCBpc0Vx
dWFsVG9TdHJpbmc6QCJTaW5nbGUiXSkKLSAgICAgICAgZ0J1dHRvblBsYWNlbWVudCA9IFNjcm9s
bGJhckJ1dHRvbnNTaW5nbGU7Ci0gICAgZWxzZSBpZiAoW2J1dHRvblBsYWNlbWVudCBpc0VxdWFs
VG9TdHJpbmc6QCJEb3VibGVNaW4iXSkKLSAgICAgICAgZ0J1dHRvblBsYWNlbWVudCA9IFNjcm9s
bGJhckJ1dHRvbnNEb3VibGVTdGFydDsKLSAgICBlbHNlIGlmIChbYnV0dG9uUGxhY2VtZW50IGlz
RXF1YWxUb1N0cmluZzpAIkRvdWJsZUJvdGgiXSkKLSAgICAgICAgZ0J1dHRvblBsYWNlbWVudCA9
IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOwotICAgIGVsc2UKLSAgICAgICAgZ0J1dHRvblBs
YWNlbWVudCA9IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQ7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYzo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
Ci17Ci0gICAgYm9vbCBpc0hvcml6b250YWwgPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgc2Nyb2xsYmFy
UGFpbnRlciA9IHdrTWFrZVNjcm9sbGJhclBhaW50ZXIoc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
LCBpc0hvcml6b250YWwpOwotICAgIHNjcm9sbGJhck1hcCgpLT5hZGQoc2Nyb2xsYmFyLCBzY3Jv
bGxiYXJQYWludGVyKTsKLSAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2Nyb2xsYmFyKTsKLSAgICB1
cGRhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoc2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBTY3JvbGxi
YXJUaGVtZUNocm9taXVtTWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQotewotICAgIHNjcm9sbGJhck1hcCgpLT5yZW1vdmUoc2Nyb2xsYmFyKTsKLX0KLQotdm9p
ZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpzZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBXS1Njcm9sbGJhclBhaW50ZXJSZWYgbmV3UGFpbnRlcikKLXsK
LSAgICBzY3JvbGxiYXJNYXAoKS0+c2V0KHNjcm9sbGJhciwgbmV3UGFpbnRlcik7Ci0gICAgdXBk
YXRlRW5hYmxlZFN0YXRlKHNjcm9sbGJhcik7Ci0gICAgdXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKHNjcm9sbGJhcik7Ci19Ci0KLVdLU2Nyb2xsYmFyUGFpbnRlclJlZiBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtTWFjOjpwYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQot
ewotICAgIHJldHVybiBzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCk7Ci19Ci0K
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMoKQog
ewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsK
LSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgICAgIC8vIExvYWQgdGhlIGxpbmVu
IHBhdHRlcm4gaW1hZ2UgdXNlZCBmb3Igb3ZlcmhhbmcgZHJhd2luZy4KLSAgICAgICAgUmVmUHRy
PEltYWdlPiBwYXR0ZXJuSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm92ZXJo
YW5nUGF0dGVybiIpOwotICAgICAgICBtX292ZXJoYW5nUGF0dGVybiA9IFBhdHRlcm46OmNyZWF0
ZShwYXR0ZXJuSW1hZ2UsIHRydWUsIHRydWUpOwotCi0gICAgICAgIFtTY3JvbGxiYXJQcmVmc09i
c2VydmVyIHJlZ2lzdGVyQXNPYnNlcnZlcl07Ci0gICAgICAgIHByZWZlcmVuY2VzQ2hhbmdlZCgp
OwotICAgIH0KKyAgICAvLyBMb2FkIHRoZSBsaW5lbiBwYXR0ZXJuIGltYWdlIHVzZWQgZm9yIG92
ZXJoYW5nIGRyYXdpbmcuCisgICAgUmVmUHRyPEltYWdlPiBwYXR0ZXJuSW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm92ZXJoYW5nUGF0dGVybiIpOworICAgIG1fb3ZlcmhhbmdQ
YXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHBhdHRlcm5JbWFnZSwgdHJ1ZSwgdHJ1ZSk7CiB9CiAK
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6On5TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKCkK
IHsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwcmVmZXJlbmNlc0NoYW5n
ZWQoKQotewotICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c107Ci0gICAgW2RlZmF1bHRzIHN5bmNocm9uaXplXTsKLSAgICB1
cGRhdGVBcnJvd1BsYWNlbWVudCgpOwotICAgIGdJbml0aWFsQnV0dG9uRGVsYXkgPSBbZGVmYXVs
dHMgZmxvYXRGb3JLZXk6QCJOU1Njcm9sbGVyQnV0dG9uRGVsYXkiXTsKLSAgICBnQXV0b3Njcm9s
bEJ1dHRvbkRlbGF5ID0gW2RlZmF1bHRzIGZsb2F0Rm9yS2V5OkAiTlNTY3JvbGxlckJ1dHRvblBl
cmlvZCJdOwotICAgIGdKdW1wT25UcmFja0NsaWNrID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6QCJB
cHBsZVNjcm9sbGVyUGFnaW5nQmVoYXZpb3IiXTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lQ2hy
b21pdW1NYWM6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSkKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAg
ICAgIHJldHVybiB3a1Njcm9sbGJhclRoaWNrbmVzcyhjb250cm9sU2l6ZSk7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm4gY1Njcm9sbGJhclRoaWNrbmVzc1tjb250cm9sU2l6ZV07Ci19Ci0KLWJv
b2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dXNlc092ZXJsYXlTY3JvbGxiYXJzKCkgY29u
c3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAg
IHJldHVybiB3a1Njcm9sbGJhclBhaW50ZXJVc2VzT3ZlcmxheVNjcm9sbGVycygpOwotICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIHdrU2Nyb2xsZXJL
bm9iU3R5bGUgdG9TY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKFNjcm9sbGJhck92ZXJsYXlTdHls
ZSBzdHlsZSkKLXsKLSAgICBzd2l0Y2ggKHN0eWxlKSB7Ci0gICAgY2FzZSBTY3JvbGxiYXJPdmVy
bGF5U3R5bGVEYXJrOgotICAgICAgICByZXR1cm4gd2tTY3JvbGxlcktub2JTdHlsZURhcms7Ci0g
ICAgY2FzZSBTY3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDoKLSAgICAgICAgcmV0dXJuIHdrU2Ny
b2xsZXJLbm9iU3R5bGVMaWdodDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gd2tTY3Jv
bGxlcktub2JTdHlsZURlZmF1bHQ7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lQ2hy
b21pdW1NYWM6OnVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJh
cikKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAg
ICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKHBhaW50ZXJGb3JTY3JvbGxiYXIoc2Ny
b2xsYmFyKSwgdG9TY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKHNjcm9sbGJhci0+c2Nyb2xsYWJs
ZUFyZWEoKS0+c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkpKTsKLSAgICB9Ci19Ci0KLWRvdWJsZSBT
Y3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjppbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKQot
ewotICAgIHJldHVybiBnSW5pdGlhbEJ1dHRvbkRlbGF5OwotfQotCi1kb3VibGUgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYzo6YXV0b3Njcm9sbFRpbWVyRGVsYXkoKQotewotICAgIHJldHVybiBn
QXV0b3Njcm9sbEJ1dHRvbkRlbGF5OwotfQotCi1TY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmJ1dHRvbnNQbGFjZW1lbnQoKSBjb25zdAotewotICAg
IHJldHVybiBnQnV0dG9uUGxhY2VtZW50OwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWM6Omhhc0J1dHRvbnMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNj
cm9sbGJhci0+ZW5hYmxlZCgpICYmIGdCdXR0b25QbGFjZW1lbnQgIT0gU2Nyb2xsYmFyQnV0dG9u
c05vbmUKLSAgICAgICAgICAgICAmJiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIKLSAgICAgICAgICAgICA/IHNjcm9sbGJhci0+d2lkdGgoKQotICAgICAg
ICAgICAgIDogc2Nyb2xsYmFyLT5oZWlnaHQoKSkgPj0gMiAqIChjUmVhbEJ1dHRvbkxlbmd0aFtz
Y3JvbGxiYXItPmNvbnRyb2xTaXplKCldIC0gY0J1dHRvbkhpdEluc2V0W3Njcm9sbGJhci0+Y29u
dHJvbFNpemUoKV0pOwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6Omhhc1Ro
dW1iKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGludCBtaW5MZW5ndGhGb3JUaHVtYjsK
LSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIG1pbkxl
bmd0aEZvclRodW1iID0gd2tTY3JvbGxiYXJNaW5pbXVtVG90YWxMZW5ndGhOZWVkZWRGb3JUaHVt
YihzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCkpOwotICAgIGVsc2UKLSAgICAg
ICAgbWluTGVuZ3RoRm9yVGh1bWIgPSAyICogY0J1dHRvbkluc2V0W3Njcm9sbGJhci0+Y29udHJv
bFNpemUoKV0gKyBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIDE7
Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpICYmIChzY3JvbGxiYXItPm9yaWVudGF0
aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/Ci0gICAgICAgICAgICAgc2Nyb2xsYmFyLT53
aWR0aCgpIDoKLSAgICAgICAgICAgICBzY3JvbGxiYXItPmhlaWdodCgpKSA+PSBtaW5MZW5ndGhG
b3JUaHVtYjsKLX0KLQotc3RhdGljIEludFJlY3QgYnV0dG9uUmVwYWludFJlY3QoY29uc3QgSW50
UmVjdCYgYnV0dG9uUmVjdCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9s
bGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplLCBib29sIHN0YXJ0KQotewotICAgIEFTU0VSVChn
QnV0dG9uUGxhY2VtZW50ICE9IFNjcm9sbGJhckJ1dHRvbnNOb25lKTsKLQotICAgIEludFJlY3Qg
cGFpbnRSZWN0KGJ1dHRvblJlY3QpOwotICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKSB7Ci0gICAgICAgIHBhaW50UmVjdC5zZXRXaWR0aChjUmVhbEJ1dHRvbkxlbmd0
aFtjb250cm9sU2l6ZV0pOwotICAgICAgICBpZiAoIXN0YXJ0KQotICAgICAgICAgICAgcGFpbnRS
ZWN0LnNldFgoYnV0dG9uUmVjdC54KCkgLSAoY1JlYWxCdXR0b25MZW5ndGhbY29udHJvbFNpemVd
IC0gYnV0dG9uUmVjdC53aWR0aCgpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcGFpbnRSZWN0
LnNldEhlaWdodChjUmVhbEJ1dHRvbkxlbmd0aFtjb250cm9sU2l6ZV0pOwotICAgICAgICBpZiAo
IXN0YXJ0KQotICAgICAgICAgICAgcGFpbnRSZWN0LnNldFkoYnV0dG9uUmVjdC55KCkgLSAoY1Jl
YWxCdXR0b25MZW5ndGhbY29udHJvbFNpemVdIC0gYnV0dG9uUmVjdC5oZWlnaHQoKSkpOwotICAg
IH0KLQotICAgIHJldHVybiBwYWludFJlY3Q7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bU1hYzo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJh
clBhcnQgcGFydCwgYm9vbCBwYWludGluZykKLXsKLSAgICBJbnRSZWN0IHJlc3VsdDsKLQotICAg
IGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgJiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9
PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFy
QnV0dG9uc0RvdWJsZUVuZCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAocGFy
dCA9PSBCYWNrQnV0dG9uRW5kUGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJh
ckJ1dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zRG91
YmxlU3RhcnQgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNTaW5nbGUp
KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJh
clRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwotICAgIGJvb2wgb3V0ZXJCdXR0
b24gPSBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgJiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9
PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNj
cm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoKTsKLSAgICBpZiAob3V0ZXJCdXR0b24pIHsKLSAgICAg
ICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQot
ICAgICAgICAgICAgcmVzdWx0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55
KCksIGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgKHBhaW50
aW5nID8gY091dGVyQnV0dG9uT3ZlcmxhcCA6IDApLCB0aGlja25lc3MpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXIt
PnkoKSwgdGhpY2tuZXNzLCBjT3V0ZXJCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6
ZSgpXSArIChwYWludGluZyA/IGNPdXRlckJ1dHRvbk92ZXJsYXAgOiAwKSk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8gT3VyIHJlcGFpbnQgcmVjdCBpcyBzbGlnaHRs
eSBsYXJnZXIsIHNpbmNlIHdlIGFyZSBhIGJ1dHRvbiB0aGF0IGlzIGFkamFjZW50IHRvIHRoZSB0
cmFjay4KLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIpIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0
ID8gc2Nyb2xsYmFyLT54KCkgOiBzY3JvbGxiYXItPngoKSArIHNjcm9sbGJhci0+d2lkdGgoKSAt
IGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldIC0gY0J1dHRvbkxl
bmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldOwotICAgICAgICByZXN1bHQgPSBJbnRSZWN0
KHN0YXJ0LCBzY3JvbGxiYXItPnkoKSwgY0J1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xT
aXplKCldLCB0aGlja25lc3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBzdGFydCA9IHBh
cnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCA/IHNjcm9sbGJhci0+eSgpIDogc2Nyb2xsYmFyLT55
KCkgKyBzY3JvbGxiYXItPmhlaWdodCgpIC0gY091dGVyQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+
Y29udHJvbFNpemUoKV0gLSBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV07
Ci0gICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHN0YXJ0LCB0aGlja25l
c3MsIGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSk7Ci0gICAgfQotCi0g
ICAgaWYgKHBhaW50aW5nKQotICAgICAgICByZXR1cm4gYnV0dG9uUmVwYWludFJlY3QocmVzdWx0
LCBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSwgcGFy
dCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbnRS
ZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcpCi17Ci0gICAg
SW50UmVjdCByZXN1bHQ7Ci0KLSAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCAm
JiAoYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNOb25lIHx8IGJ1dHRvbnNQ
bGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQpKQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotCi0gICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAmJiAo
YnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFj
ZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlRW5kIHx8IGJ1dHRvbnNQbGFjZW1lbnQo
KSA9PSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQot
ICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpKTsKLSAgICBpbnQgb3V0ZXJCdXR0b25MZW5ndGggPSBjT3V0ZXJCdXR0b25MZW5ndGhb
c2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXTsKLSAgICBpbnQgYnV0dG9uTGVuZ3RoID0gY0J1dHRv
bkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldOwotCi0gICAgYm9vbCBvdXRlckJ1dHRv
biA9IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgJiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9
PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlRW5kIHx8IGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3Jv
bGxiYXJCdXR0b25zRG91YmxlQm90aCk7Ci0gICAgaWYgKG91dGVyQnV0dG9uKSB7Ci0gICAgICAg
IGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewot
ICAgICAgICAgICAgcmVzdWx0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSArIHNjcm9sbGJhci0+
d2lkdGgoKSAtIG91dGVyQnV0dG9uTGVuZ3RoLCBzY3JvbGxiYXItPnkoKSwgb3V0ZXJCdXR0b25M
ZW5ndGgsIHRoaWNrbmVzcyk7Ci0gICAgICAgICAgICBpZiAocGFpbnRpbmcpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LmluZmxhdGVYKGNPdXRlckJ1dHRvbk92ZXJsYXApOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcmVzdWx0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xs
YmFyLT55KCkgKyBzY3JvbGxiYXItPmhlaWdodCgpIC0gb3V0ZXJCdXR0b25MZW5ndGgsIHRoaWNr
bmVzcywgb3V0ZXJCdXR0b25MZW5ndGgpOwotICAgICAgICAgICAgaWYgKHBhaW50aW5nKQotICAg
ICAgICAgICAgICAgIHJlc3VsdC5pbmZsYXRlWShjT3V0ZXJCdXR0b25PdmVybGFwKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGlmIChzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBpbnQgc3Rh
cnQgPSBwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0ID8gc2Nyb2xsYmFyLT54KCkgKyBzY3Jv
bGxiYXItPndpZHRoKCkgLSBidXR0b25MZW5ndGggOiBzY3JvbGxiYXItPngoKSArIG91dGVyQnV0
dG9uTGVuZ3RoOwotICAgICAgICByZXN1bHQgPSBJbnRSZWN0KHN0YXJ0LCBzY3JvbGxiYXItPnko
KSwgYnV0dG9uTGVuZ3RoLCB0aGlja25lc3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBz
dGFydCA9IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgPyBzY3JvbGxiYXItPnkoKSArIHNj
cm9sbGJhci0+aGVpZ2h0KCkgLSBidXR0b25MZW5ndGggOiBzY3JvbGxiYXItPnkoKSArIG91dGVy
QnV0dG9uTGVuZ3RoOwotICAgICAgICByZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBz
dGFydCwgdGhpY2tuZXNzLCBidXR0b25MZW5ndGgpOwotICAgIH0KLSAgICBpZiAocGFpbnRpbmcp
Ci0gICAgICAgIHJldHVybiBidXR0b25SZXBhaW50UmVjdChyZXN1bHQsIHNjcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSwgc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpLCBwYXJ0ID09IEZvcndhcmRCdXR0
b25TdGFydFBhcnQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYzo6dHJhY2tSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIHBh
aW50aW5nKQotewotICAgIGlmIChwYWludGluZyB8fCAhaGFzQnV0dG9ucyhzY3JvbGxiYXIpKQot
ICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKLQotICAgIEludFJlY3QgcmVz
dWx0OwotICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpKTsKLSAgICBpbnQgc3RhcnRXaWR0aCA9IDA7Ci0gICAgaW50IGVuZFdpZHRo
ID0gMDsKLSAgICBpbnQgb3V0ZXJCdXR0b25MZW5ndGggPSBjT3V0ZXJCdXR0b25MZW5ndGhbc2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpXTsKLSAgICBpbnQgYnV0dG9uTGVuZ3RoID0gY0J1dHRvbkxl
bmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldOwotICAgIGludCBkb3VibGVCdXR0b25MZW5n
dGggPSBvdXRlckJ1dHRvbkxlbmd0aCArIGJ1dHRvbkxlbmd0aDsKLSAgICBzd2l0Y2ggKGJ1dHRv
bnNQbGFjZW1lbnQoKSkgewotICAgICAgICBjYXNlIFNjcm9sbGJhckJ1dHRvbnNTaW5nbGU6Ci0g
ICAgICAgICAgICBzdGFydFdpZHRoID0gYnV0dG9uTGVuZ3RoOwotICAgICAgICAgICAgZW5kV2lk
dGggPSBidXR0b25MZW5ndGg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTY3Jv
bGxiYXJCdXR0b25zRG91YmxlU3RhcnQ6Ci0gICAgICAgICAgICBzdGFydFdpZHRoID0gZG91Ymxl
QnV0dG9uTGVuZ3RoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2Nyb2xsYmFy
QnV0dG9uc0RvdWJsZUVuZDoKLSAgICAgICAgICAgIGVuZFdpZHRoID0gZG91YmxlQnV0dG9uTGVu
Z3RoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2Nyb2xsYmFyQnV0dG9uc0Rv
dWJsZUJvdGg6Ci0gICAgICAgICAgICBzdGFydFdpZHRoID0gZG91YmxlQnV0dG9uTGVuZ3RoOwot
ICAgICAgICAgICAgZW5kV2lkdGggPSBkb3VibGVCdXR0b25MZW5ndGg7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGludCB0b3RhbFdpZHRoID0gc3RhcnRXaWR0aCArIGVuZFdpZHRoOwotICAgIGlmIChzY3JvbGxi
YXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJu
IEludFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBzdGFydFdpZHRoLCBzY3JvbGxiYXItPnkoKSwgc2Ny
b2xsYmFyLT53aWR0aCgpIC0gdG90YWxXaWR0aCwgdGhpY2tuZXNzKTsKLSAgICByZXR1cm4gSW50
UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCkgKyBzdGFydFdpZHRoLCB0aGlja25l
c3MsIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSB0b3RhbFdpZHRoKTsKLX0KLQotaW50IFNjcm9sbGJh
clRoZW1lQ2hyb21pdW1NYWM6Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXIqIHNjcm9sbGJh
cikKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAg
IHJldHVybiB3a1Njcm9sbGJhck1pbmltdW1UaHVtYkxlbmd0aChzY3JvbGxiYXJNYXAoKS0+Z2V0
KHNjcm9sbGJhcikuZ2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGNUaHVtYk1pbkxl
bmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldOwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1l
Q2hyb21pdW1NYWM6OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBldnQpCi17Ci0gICAgaWYgKGV2dC5idXR0b24oKSAhPSBMZWZ0QnV0dG9u
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGdKdW1wT25UcmFja0NsaWNrKQotICAg
ICAgICByZXR1cm4gIWV2dC5hbHRLZXkoKTsKLSAgICByZXR1cm4gZXZ0LmFsdEtleSgpOwotfQot
Ci1ib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnNob3VsZERyYWdEb2N1bWVudEluc3Rl
YWRPZlRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCi17
Ci0gICAgcmV0dXJuIGV2ZW50LmFsdEtleSgpOwotfQotCi1zdGF0aWMgaW50IHNjcm9sbGJhclBh
cnRUb0hJUHJlc3NlZFN0YXRlKFNjcm9sbGJhclBhcnQgcGFydCkKLXsKLSAgICBzd2l0Y2ggKHBh
cnQpIHsKLSAgICAgICAgY2FzZSBCYWNrQnV0dG9uU3RhcnRQYXJ0OgotICAgICAgICAgICAgcmV0
dXJuIGtUaGVtZVRvcE91dHNpZGVBcnJvd1ByZXNzZWQ7Ci0gICAgICAgIGNhc2UgQmFja0J1dHRv
bkVuZFBhcnQ6Ci0gICAgICAgICAgICByZXR1cm4ga1RoZW1lVG9wT3V0c2lkZUFycm93UHJlc3Nl
ZDsgLy8gVGhpcyBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UuICBGb3Igc29tZSByZWFzb24gdGhl
IG91dHNpZGUgY29uc3RhbnQgaXMgcmVxdWlyZWQuCi0gICAgICAgIGNhc2UgRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydDoKLSAgICAgICAgICAgIHJldHVybiBrVGhlbWVUb3BJbnNpZGVBcnJvd1ByZXNz
ZWQ7Ci0gICAgICAgIGNhc2UgRm9yd2FyZEJ1dHRvbkVuZFBhcnQ6Ci0gICAgICAgICAgICByZXR1
cm4ga1RoZW1lQm90dG9tT3V0c2lkZUFycm93UHJlc3NlZDsKLSAgICAgICAgY2FzZSBUaHVtYlBh
cnQ6Ci0gICAgICAgICAgICByZXR1cm4ga1RoZW1lVGh1bWJQcmVzc2VkOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiBzdGF0aWMgUGxhdGZvcm1T
dXBwb3J0OjpUaGVtZVBhaW50U3RhdGUgc2Nyb2xsYmFyU3RhdGVUb1RoZW1lU3RhdGUoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKCFzY3JvbGxiYXItPmVuYWJsZWQoKSkKQEAgLTQ3
NiwxMyArNzMsMjcgQEAgc3RhdGljIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQYWludFN0YXRlIHNj
cm9sbGJhclN0YXRlVG9UaGVtZVN0YXRlKFNjcm9sbGJhciogc2MKICAgICByZXR1cm4gUGxhdGZv
cm1TdXBwb3J0OjpTdGF0ZUFjdGl2ZTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjp1cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitzdGF0aWMgdm9p
ZCBzY3JvbGxiYXJQYWludGVyUGFpbnRUcmFjayhTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBh
aW50ZXIsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIENH
UmVjdCBmcmFtZVJlY3QpCiB7Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJs
ZSgpKSB7Ci0gICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldEVuYWJsZWQoc2Nyb2xsYmFyTWFw
KCktPmdldChzY3JvbGxiYXIpLmdldCgpLCBzY3JvbGxiYXItPmVuYWJsZWQoKSk7Ci0gICAgfQor
ICAgIFtzY3JvbGxiYXJQYWludGVyIHNldEVuYWJsZWQ6ZW5hYmxlZF07CisgICAgW3Njcm9sbGJh
clBhaW50ZXIgc2V0Qm91bmRzU2l6ZTogTlNTaXplRnJvbUNHU2l6ZShmcmFtZVJlY3Quc2l6ZSld
OworICAgIFtzY3JvbGxiYXJQYWludGVyIHNldERvdWJsZVZhbHVlOnZhbHVlXTsKKyAgICBbc2Ny
b2xsYmFyUGFpbnRlciBzZXRLbm9iUHJvcG9ydGlvbjpwcm9wb3J0aW9uXTsKKworICAgIC8vIFRo
ZSBzY3JvbGxiYXIncyBmcmFtZVJlY3QgaW5jbHVkZXMgYSBzaWRlIGluc2V0IGZvciBvdmVybGF5
IHNjcm9sbGVycywgc28gd2UgaGF2ZSB0byB1c2UgdGhlIAorICAgIC8vIHRyYWNrV2lkdGggZm9y
IGRyYXdLbm9iU2xvdEluUmVjdAorICAgIE5TUmVjdCB0cmFja1JlY3Q7CisgICAgaWYgKFtzY3Jv
bGxiYXJQYWludGVyIGlzSG9yaXpvbnRhbF0pCisgICAgICAgIHRyYWNrUmVjdCA9IE5TTWFrZVJl
Y3QoMCwgMCwgZnJhbWVSZWN0LnNpemUud2lkdGgsIFtzY3JvbGxiYXJQYWludGVyIHRyYWNrV2lk
dGhdKTsKKyAgICBlbHNlCisgICAgICAgIHRyYWNrUmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgW3Nj
cm9sbGJhclBhaW50ZXIgdHJhY2tXaWR0aF0sIGZyYW1lUmVjdC5zaXplLmhlaWdodCk7CisgICAg
W3Njcm9sbGJhclBhaW50ZXIgZHJhd0tub2JTbG90SW5SZWN0OnRyYWNrUmVjdCBoaWdobGlnaHQ6
Tk9dOwogfQogCisvLyBPdmVycmlkZSBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQoKSB0byBhZGQg
c3VwcG9ydCBmb3IgdGhlIGZvbGxvd2luZzoKKy8vICAgICAtIGRyYXdpbmcgdXNpbmcgUGxhdGZv
cm1TdXBwb3J0IGZ1bmN0aW9ucworLy8gICAgIC0gZHJhd2luZyB0aWNrbWFya3MKKy8vICAgICAt
IFNraWEgc3BlY2lmaWMgY2hhbmdlcwogYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpw
YWludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQogewogICAgIC8vIEdldCB0aGUgdGlja21hcmtzIGZvciB0
aGUgZnJhbWV2aWV3LgpAQCAtNTEwLDcgKzEyMSw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29u
CiAgICAgICAgICAgICAgICAgdmFsdWUgPSAwOwogICAgICAgICB9CiAKLSAgICAgICAgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYyogc2Nyb2xsQW5pbWF0b3IgPSBzdGF0aWNfY2FzdDxTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjKj4oc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxB
bmltYXRvcigpKTsKKyAgICAgICAgU2Nyb2xsQW5pbWF0b3JNYWMqIHNjcm9sbEFuaW1hdG9yID0g
c3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0b3JNYWMqPihzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVh
KCktPnNjcm9sbEFuaW1hdG9yKCkpOwogI2lmICFVU0UoU0tJQSkKICAgICAgICAgc2Nyb2xsQW5p
bWF0b3ItPnNldElzRHJhd2luZ0ludG9MYXllcihjb250ZXh0LT5pc0NBTGF5ZXJDb250ZXh0KCkp
OwogI2Vsc2UKQEAgLTUyMCwyMyArMTMxLDIzIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29uCiAg
ICAgICAgIENHRmxvYXQgb2xkS25vYkFscGhhID0gMDsKICAgICAgICAgQ0dGbG9hdCBvbGRUcmFj
a0FscGhhID0gMDsKICAgICAgICAgYm9vbCBoYXNUaWNrbWFya3MgPSB0aWNrbWFya3Muc2l6ZSgp
ID4gMCAmJiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXI7Cisg
ICAgICAgIFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciA9IHBhaW50ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKICAgICAgICAgaWYgKGhhc1RpY2ttYXJrcykgewotICAgICAgICAg
IG9sZEtub2JBbHBoYSA9IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShwYWludGVyRm9yU2Ny
b2xsYmFyKHNjcm9sbGJhcikpOwotICAgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JB
bHBoYShwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhciksIDEuMCk7Ci0gICAgICAgICAgb2xk
VHJhY2tBbHBoYSA9IHdrU2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEocGFpbnRlckZvclNjcm9s
bGJhcihzY3JvbGxiYXIpKTsKLSAgICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJUcmFja0Fs
cGhhKHBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSwgMS4wKTsKKyAgICAgICAgICAgIG9s
ZEtub2JBbHBoYSA9IFtzY3JvbGxiYXJQYWludGVyIGtub2JBbHBoYV07CisgICAgICAgICAgICBb
c2Nyb2xsYmFyUGFpbnRlciBzZXRLbm9iQWxwaGE6MS4wXTsKKyAgICAgICAgICAgIG9sZFRyYWNr
QWxwaGEgPSBbc2Nyb2xsYmFyUGFpbnRlciB0cmFja0FscGhhXTsKKyAgICAgICAgICAgIFtzY3Jv
bGxiYXJQYWludGVyIHNldFRyYWNrQWxwaGE6MS4wXTsKICAgICAgICAgfQogCiAgICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAgICAgICAgIGNv
bnRleHQtPmNsaXAoZGFtYWdlUmVjdCk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShzY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLngoKSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkpOwogICAg
ICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KGNvbnRleHQpOwot
ICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgc2Nyb2xsYmFyUGFpbnRlciA9IHNjcm9sbGJh
ck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKTsKLSAgICAgICAgd2tTY3JvbGxiYXJQYWludGVy
UGFpbnRUcmFjayhzY3JvbGxiYXJQYWludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcm9sbGJhci0+ZW5hYmxlZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChzdGF0aWNfY2FzdDxDR0Zsb2F0PihzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIC0gb3Zlcmhh
bmcpIC8gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICAgICAgc2Nyb2xsYmFyUGFp
bnRlclBhaW50VHJhY2soc2Nyb2xsYmFyUGFpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsYmFyLT5lbmFibGVkKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAtIG92ZXJoYW5n
KSAvIHNjcm9sbGJhci0+dG90YWxTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwogCiAgICAgICAgIEludFJlY3QgdGlja21h
cmtUcmFja1JlY3QoSW50UG9pbnQoKSwgdHJhY2tSZWN0KHNjcm9sbGJhciwgZmFsc2UpLnNpemUo
KSk7CiAgICAgICAgIGlmICh0aWNrbWFya1RyYWNrUmVjdC53aWR0aCgpIDw9IDEwKSB7CkBAIC01
NTAsMTMgKzE2MSwxNCBAQCBib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGNvbgogICAgICAgICB9CiAgICAg
ICAgIHBhaW50R2l2ZW5UaWNrbWFya3MoY29udGV4dCwgc2Nyb2xsYmFyLCB0aWNrbWFya1RyYWNr
UmVjdCwgdGlja21hcmtzKTsKIAotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJQYWludEtub2Io
c2Nyb2xsYmFyUGFpbnRlcik7CisgICAgICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkKKyAg
ICAgICAgICAgIFtzY3JvbGxiYXJQYWludGVyIGRyYXdLbm9iXTsKIAogICAgICAgICBzY3JvbGxB
bmltYXRvci0+c2V0SXNEcmF3aW5nSW50b0xheWVyKGZhbHNlKTsKIAogICAgICAgICBpZiAoaGFz
VGlja21hcmtzKSB7Ci0gICAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHNj
cm9sbGJhclBhaW50ZXIsIG9sZEtub2JBbHBoYSk7Ci0gICAgICAgICAgd2tTZXRTY3JvbGxiYXJQ
YWludGVyVHJhY2tBbHBoYShzY3JvbGxiYXJQYWludGVyLCBvbGRUcmFja0FscGhhKTsKKyAgICAg
ICAgICAgIFtzY3JvbGxiYXJQYWludGVyIHNldEtub2JBbHBoYTpvbGRLbm9iQWxwaGFdOworICAg
ICAgICAgICAgW3Njcm9sbGJhclBhaW50ZXIgc2V0VHJhY2tBbHBoYTpvbGRUcmFja0FscGhhXTsK
ICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvTlNTY3JvbGxlckltcERldGFpbHMuaAppbmRleCBjZTExNDZkMzBkZDc5
ZmNiYThjMmMwMjFiMzhjNzBmNTdhNTY0MDc2Li4zYThiMTFjZjhjZDEyMzIwYzI1ZGNlNGFmMzY3
MjUxMDZmMWE1ZTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNT
Y3JvbGxlckltcERldGFpbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNT
Y3JvbGxlckltcERldGFpbHMuaApAQCAtMjgsNyArMjgsMjggQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQorLy8gUHVibGljIEFQSXMgbm90IGF2
YWlsYWJsZSBvbiB2ZXJzaW9ucyBvZiBNYWMgb24gd2hpY2ggd2UgYnVpbGQKKyNpZiAoZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkpCitlbnVtIHsKKyAgICBOU1Njcm9sbGVyU3R5bGVMZWdhY3kgICAgICAgPSAwLAorICAgIE5T
U2Nyb2xsZXJTdHlsZU92ZXJsYXkgICAgICA9IDEKK307Cit0eXBlZGVmIE5TSW50ZWdlciBOU1Nj
cm9sbGVyU3R5bGU7CisKK2VudW0geworICAgIE5TU2Nyb2xsZXJLbm9iU3R5bGVEZWZhdWx0ID0g
MCwKKyAgICBOU1Njcm9sbGVyS25vYlN0eWxlRGFyayA9IDEsCisgICAgTlNTY3JvbGxlcktub2JT
dHlsZUxpZ2h0ID0gMgorfTsKK3R5cGVkZWYgTlNJbnRlZ2VyIE5TU2Nyb2xsZXJLbm9iU3R5bGU7
CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKSkKK0BpbnRlcmZhY2UgTlNTY3JvbGxlcihOU09iamVj
dCkKKysgKE5TU2Nyb2xsZXJTdHlsZSlwcmVmZXJyZWRTY3JvbGxlclN0eWxlOworQGVuZAorI2Vu
ZGlmCisKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFNjcm9sbGJhclBhaW50ZXIpCiArIChpZClzY3Jv
bGxlckltcFdpdGhTdHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1Njcm9sbGVyU3R5bGUgY29udHJv
bFNpemU6KE5TQ29udHJvbFNpemUpbmV3Q29udHJvbFNpemUgaG9yaXpvbnRhbDooQk9PTClob3Jp
em9udGFsIHJlcGxhY2luZ1Njcm9sbGVySW1wOihpZClwcmV2aW91czsKIC0gKENHRmxvYXQpa25v
YkFscGhhOwpAQCAtODEsNiArMTAyLDEzIEBACiAtICh2b2lkKWJlZ2luU2Nyb2xsR2VzdHVyZTsK
IC0gKHZvaWQpZW5kU2Nyb2xsR2VzdHVyZTsKIEBlbmQKLSNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCk7CisKK05TU2Ny
b2xsZXJTdHlsZSByZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKTsKKworfQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWls
cy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zNGJkNWFiODk3NjE2NmUxOWUxYmJjZTA4ODZjODRiYWEzYjlhMDFiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJ
bXBEZXRhaWxzLm1tCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIG9v
Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTlNTY3Jv
bGxlckltcERldGFpbHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpCit7CisgICAgc3RhdGljIGJvb2wgYXBpQXZhaWxhYmxl
OworICAgIHN0YXRpYyBib29sIHNob3VsZEluaXRpYWxpemUgPSB0cnVlOworICAgIGlmIChzaG91
bGRJbml0aWFsaXplKSB7CisgICAgICAgIHNob3VsZEluaXRpYWxpemUgPSBmYWxzZTsKKyAgICAg
ICAgQ2xhc3Mgc2Nyb2xsZXJJbXBDbGFzcyA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxl
ckltcCIpOworICAgICAgICBDbGFzcyBzY3JvbGxlckltcFBhaXJDbGFzcyA9IE5TQ2xhc3NGcm9t
U3RyaW5nKEAiTlNTY3JvbGxlckltcFBhaXIiKTsKKyAgICAgICAgYXBpQXZhaWxhYmxlID0gW3Nj
cm9sbGVySW1wQ2xhc3MgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzY3JvbGxlckltcFdp
dGhTdHlsZTpjb250cm9sU2l6ZTpob3Jpem9udGFsOnJlcGxhY2luZ1Njcm9sbGVySW1wOildCisg
ICAgICAgICAgICAgICAgICAgICAgICYmIFtzY3JvbGxlckltcFBhaXJDbGFzcyBpbnN0YW5jZXNS
ZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2Nyb2xsZXJTdHlsZSldOworICAgIH0KKyAgICBy
ZXR1cm4gYXBpQXZhaWxhYmxlOworfQorCitOU1Njcm9sbGVyU3R5bGUgcmVjb21tZW5kZWRTY3Jv
bGxlclN0eWxlKCkgeworICAgIGlmIChbTlNTY3JvbGxlciByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHByZWZlcnJlZFNjcm9sbGVyU3R5bGUpXSkKKyAgICAgICAgcmV0dXJuIFtOU1Njcm9s
bGVyIHByZWZlcnJlZFNjcm9sbGVyU3R5bGVdOworICAgIHJldHVybiBOU1Njcm9sbGVyU3R5bGVM
ZWdhY3k7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLmgKaW5kZXggOTg0ZGYwOGEyMjY5MDczMDRiOGIxZmQ5MTBhMjlmOTE4ZGJlYjJh
Zi4uY2Q2NDY4OWVkMTRiZDdkYzYzMzEwMjQ5MGNjNzcwMjU0MTg0ZTc5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKQEAgLTQ2LDkgKzQ2
LDcgQEAgY2xhc3MgV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsKIGNsYXNz
IFdlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKICNlbmRpZgogCi0jaWYgVVNFKFNDUk9MTEJB
Ul9QQUlOVEVSKQogdHlwZWRlZiBpZCBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlcjsKLSNlbmRp
ZgogCiAjaWYgIUVOQUJMRShSVUJCRVJfQkFORElORykKIGNsYXNzIFNjcm9sbEVsYXN0aWNpdHlD
b250cm9sbGVyQ2xpZW50IHsgfTsKQEAgLTg5LDEzICs4NywxMSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2V0SXNBY3RpdmUoKTsKIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikK
ICAgICB2b2lkIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKIAogICAgIGJvb2wgc2Nyb2xsYmFyUGFp
bnRUaW1lcklzQWN0aXZlKCkgY29uc3Q7CiAgICAgdm9pZCBzdGFydFNjcm9sbGJhclBhaW50VGlt
ZXIoKTsKICAgICB2b2lkIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0jZW5kaWYKIAogICAg
IHZvaWQgc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmKTsKIApAQCAt
MTAzLDE0ICs5OSwxMiBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZD4gbV9zY3JvbGxBbmlt
YXRpb25IZWxwZXI7CiAgICAgUmV0YWluUHRyPFdlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVn
YXRlPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwogCi0jaWYgVVNFKFNDUk9MTEJB
Ul9QQUlOVEVSKQogICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlcj4gbV9z
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJEZWxlZ2F0ZT4gbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVn
YXRlOwogICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU+IG1fc2Nyb2xs
YmFyUGFpbnRlckRlbGVnYXRlOwogCiAgICAgdm9pZCBpbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1l
ckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yTWFjPiopOwogICAgIFRpbWVyPFNjcm9sbEFuaW1h
dG9yTWFjPiBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyOwotI2VuZGlmCiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBj
b250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCmluZGV4IDVlMmQyMTFhZDJkYjYzNThhNjk1MGM0
NzI4MmRhMDM5YjMxZTRmOWEuLmFlZTNhY2NkODg3MTAyMTdiMzJmOTMzZDRhMDQwZjdiMmM3OWIy
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JN
YWMubW0KQEAgLTQ1LDE0ICs0NSwyMSBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQorI2lmICFkZWZp
bmVkKE1BQ19PU19YX1ZFUlNJT05fMTBfNikgfHwgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dF
RCA8IE1BQ19PU19YX1ZFUlNJT05fMTBfNgorQHByb3RvY29sIE5TQW5pbWF0aW9uRGVsZWdhdGUK
K0BlbmQKKworQGludGVyZmFjZSBOU1Byb2Nlc3NJbmZvIChTY3JvbGxBbmltYXRvck1hY0V4dCkK
Ky0gKE5TVGltZUludGVydmFsKXN5c3RlbVVwdGltZTsKK0BlbmQKKyNlbmRpZgorCiBzdGF0aWMg
Ym9vbCBzdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3MoKQogewogICAgIC8vIEZJWE1F
OiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBTY3Jv
bGxiYXJQYWludGVyIHN1cHBvcnQgdGhpcyBwYXJ0IG9mIHRoZSBBUEkuCiAgICAgc3RhdGljIGJv
b2wgZ2xvYmFsU3VwcG9ydHNVSVN0YXRlVHJhbnNpdGlvblByb2dyZXNzID0gW05TQ2xhc3NGcm9t
U3RyaW5nKEAiTlNTY3JvbGxlckltcCIpIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihtb3VzZUVudGVyZWRTY3JvbGxlcildOwogICAgIHJldHVybiBnbG9iYWxTdXBwb3J0c1VJ
U3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3M7CiB9Ci0jZW5kaWYKIAogQGludGVyZmFjZSBOU09iamVj
dCAoU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGV0YWlscykKIC0gKGlkKWluaXRXaXRoRGVsZWdhdGU6
KGlkKWRlbGVnYXRlOwpAQCAtMTU4LDggKzE2NSw2IEBAIHN0YXRpYyBOU1NpemUgYWJzKE5TU2l6
ZSBzaXplKQogCiBAZW5kCiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0KIEBpbnRlcmZh
Y2UgV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0CiB7CiAg
ICAgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWMqIF9hbmltYXRvcjsKQEAgLTM5NCw2ICszOTks
NyBAQCBlbnVtIEZlYXR1cmVUb0FuaW1hdGUgewogICAgIHJldHVybiBhUmVjdDsKIH0KIAorI2lm
ICFQTEFURk9STShDSFJPTUlVTSkKIC0gKENBTGF5ZXIgKilsYXllcgogewogICAgIGlmICghX2Fu
aW1hdG9yKQpAQCAtNDA1LDYgKzQxMSw3IEBAIGVudW0gRmVhdHVyZVRvQW5pbWF0ZSB7CiAgICAg
c3RhdGljIENBTGF5ZXIgKmR1bW15TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOwogICAg
IHJldHVybiBkdW1teUxheWVyOwogfQorI2VuZGlmCiAKIC0gKE5TUG9pbnQpbW91c2VMb2NhdGlv
bkluU2Nyb2xsZXJGb3JTY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAKIHsKQEAgLTU0OCw4ICs1
NTUsNiBAQCBlbnVtIEZlYXR1cmVUb0FuaW1hdGUgewogCiBAZW5kCiAKLSNlbmRpZiAvLyBVU0Uo
U0NST0xMQkFSX1BBSU5URVIpCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc093blB0cjxT
Y3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Ny
b2xsYWJsZUFyZWEpCkBAIC01NTcsMTkgKzU2MiwxNSBAQCBQYXNzT3duUHRyPFNjcm9sbEFuaW1h
dG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YQogICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JNYWMoc2Nyb2xsYWJsZUFy
ZWEpKTsKIH0KIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHN0YXRpYyBTY3JvbGxiYXJU
aGVtZU1hYyogbWFjU2Nyb2xsYmFyVGhlbWUoKQogewogICAgIFNjcm9sbGJhclRoZW1lKiBzY3Jv
bGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwogICAgIHJldHVybiAhc2Nyb2xs
YmFyVGhlbWUtPmlzTW9ja1RoZW1lKCkgPyBzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+
KHNjcm9sbGJhclRoZW1lKSA6IDA7CiB9Ci0jZW5kaWYKIAogU2Nyb2xsQW5pbWF0b3JNYWM6OlNj
cm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKICAgICA6IFNj
cm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikK
ICAgICAsIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIodGhpcywgJlNjcm9sbEFuaW1hdG9y
TWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKQotI2VuZGlmCiAjaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQogICAgICwgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcih0aGlz
KQogICAgICwgbV9zbmFwUnViYmVyQmFuZFRpbWVyKHRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6
c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKQpAQCAtNTgxLDI2ICs1ODIsMjUgQEAgU2Nyb2xsQW5p
bWF0b3JNYWM6OlNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YSkKICAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmFkb3B0TlMoW1tXZWJTY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0
aGlzXSk7CiAgICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuYWRvcHROUyhbW05TQ2xhc3NGcm9t
U3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxwZXIiKSBhbGxvY10gaW5pdFdpdGhEZWxlZ2F0
ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpXSk7CiAKLSNpZiBVU0UoU0NS
T0xMQkFSX1BBSU5URVIpCi0gICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRl
LmFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBp
bml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKLSAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyID0gW1tbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVySW1wUGFpciIpIGFsbG9j
XSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIu
Z2V0KCkgc2V0RGVsZWdhdGU6bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdl
dCgpXTsKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRTY3JvbGxl
clN0eWxlOndrUmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCldOwotCi0gICAgbV9zY3JvbGxiYXJQ
YWludGVyRGVsZWdhdGUuYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxv
Y10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3Jv
bGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgbV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKKyAgICAgICAg
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciA9IFtbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNT
Y3JvbGxlckltcFBhaXIiKSBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBbbV9z
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTptX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCldOworICAgICAgICBbbV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlci5nZXQoKSBzZXRTY3JvbGxlclN0eWxlOnJlY29tbWVuZGVkU2Nyb2xsZXJT
dHlsZSgpXTsKKyAgICAgICAgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuYWRvcHROUyhbW1dl
YlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0
aGlzXSk7CisgICAgfQogfQogCiBTY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFuaW1hdG9yTWFj
KCkKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0
KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckRl
bGVnYXRlLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKLSAgICBbbV9zY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07Ci0gICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92
ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCkg
c2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBbbV9zY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgICAgICBbbV9z
Y3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3ll
ZF07CisgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgfQogfQogCiBib29s
IFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0
aXBsaWVyKQpAQCAtNzA4LDEzICs3MDgsMTMgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1t
ZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW4KIAog
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKCkKIHsKLSNpZiBV
U0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hl
biBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgcGFnZSBjYWNoZSwgYnV0IHRoZSBwYWdlIAotICAg
IC8vIGlzbid0IHJlYWxseSBzY3JvbGxpbmcgaW4gdGhhdCBjYXNlLiBXZSBzaG91bGQgb25seSBw
YXNzIHRoZSBtZXNzYWdlIG9uIHRvIHRoZQotICAgIC8vIFNjcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyIHdoZW4gd2UncmUgcmVhbGx5IHNjcm9sbGluZyBvbiBhbiBhY3RpdmUgcGFnZS4KLSAgICBp
ZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKLSAgICAgICAgW21fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgY29udGVudEFyZWFTY3JvbGxlZF07Ci0jZW5kaWYK
KyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgLy8g
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgcGFn
ZSBjYWNoZSwgYnV0IHRoZSBwYWdlIAorICAgICAgICAvLyBpc24ndCByZWFsbHkgc2Nyb2xsaW5n
IGluIHRoYXQgY2FzZS4gV2Ugc2hvdWxkIG9ubHkgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0aGUK
KyAgICAgICAgLy8gU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgd2hlbiB3ZSdyZSByZWFsbHkg
c2Nyb2xsaW5nIG9uIGFuIGFjdGl2ZSBwYWdlLgorICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEo
KS0+aXNPbkFjdGl2ZVBhZ2UoKSkKKyAgICAgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpIGNvbnRlbnRBcmVhU2Nyb2xsZWRdOworICAgIH0KICAgICBTY3JvbGxBbmlt
YXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKQEAgLTcyMiwxOTggKzcyMiwxNzUg
QEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAog
ewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAg
cmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlci5nZXQoKSBjb250ZW50QXJlYVdpbGxEcmF3XTsKLSNlbmRpZgorICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgY29udGVudEFyZWFXaWxsRHJhd107CiB9CiAKIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3QKIHsKICAg
ICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJldHVy
bjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkgbW91c2VFbnRlcmVkQ29udGVudEFyZWFdOwotI2VuZGlmCisgICAgaWYg
KGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlci5nZXQoKSBtb3VzZUVudGVyZWRDb250ZW50QXJlYV07CiB9CiAKIHZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdAogewog
ICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0
dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSBtb3VzZUV4aXRlZENvbnRlbnRBcmVhXTsKLSNlbmRpZgorICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VFeGl0ZWRDb250ZW50QXJlYV07CiB9CiAKIHZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3QKIHsK
ICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJl
dHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VNb3ZlZEluQ29udGVudEFyZWFdOwotI2VuZGlmCisgICAg
aWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBtb3VzZU1vdmVkSW5Db250ZW50QXJlYV07CiB9CiAK
IHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikgY29uc3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3Rp
dmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0g
ICAgaWYgKCFzdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3MoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyogdGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVt
ZSgpKSB7Ci0gICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHRoZW1lLT5wYWludGVy
Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgICAgIFtwYWludGVyIG1vdXNlRW50ZXJlZFNj
cm9sbGVyXTsKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAg
ICAgICAgaWYgKCFzdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3MoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKFNjcm9sbGJhclRoZW1lTWFjKiB0aGVtZSA9IG1hY1Nj
cm9sbGJhclRoZW1lKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9
IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgICAgICBbcGFp
bnRlciBtb3VzZUVudGVyZWRTY3JvbGxlcl07CisgICAgICAgIH0KICAgICB9Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAog
ewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAg
cmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBpZiAoIXN1cHBvcnRzVUlT
dGF0ZVRyYW5zaXRpb25Qcm9ncmVzcygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKFNjcm9s
bGJhclRoZW1lTWFjKiB0aGVtZSA9IG1hY1Njcm9sbGJhclRoZW1lKCkpIHsKLSAgICAgICAgU2Ny
b2xsYmFyUGFpbnRlciBwYWludGVyID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xs
YmFyKTsKLSAgICAgICAgW3BhaW50ZXIgbW91c2VFeGl0ZWRTY3JvbGxlcl07CisgICAgaWYgKGlz
U2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7CisgICAgICAgIGlmICghc3VwcG9ydHNV
SVN0YXRlVHJhbnNpdGlvblByb2dyZXNzKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmIChTY3JvbGxiYXJUaGVtZU1hYyogdGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpKSB7Cisg
ICAgICAgICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNj
cm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICAgICAgW3BhaW50ZXIgbW91c2VFeGl0ZWRTY3Jv
bGxlcl07CisgICAgICAgIH0KICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxi
YXIpOwotI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxTdGFydExpdmVS
ZXNpemUoKQogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkK
ICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzdGFydExpdmVSZXNpemVdOwotI2VuZGlmCisg
ICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzdGFydExpdmVSZXNpemVdOwogfQogCiB2b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50c1Jlc2l6ZWQoKSBjb25zdAogewogICAgIGlmICgh
c2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lm
IFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSBjb250ZW50QXJlYURpZFJlc2l6ZV07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxi
YXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpIGNvbnRlbnRBcmVhRGlkUmVzaXplXTsKIH0KIAogdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUoKQogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEo
KS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJf
UEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBlbmRMaXZl
UmVzaXplXTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUo
KSkKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgZW5kTGl2ZVJl
c2l6ZV07CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygp
IGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQog
ICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHdpbmRvd09yZGVyZWRJbl07Ci0jZW5kaWYKKyAg
ICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHdpbmRvd09yZGVyZWRJbl07CiB9CiAKIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlkSGlkZSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0j
aWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyLmdldCgpIHdpbmRvd09yZGVyZWRPdXRdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFy
T3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlci5nZXQoKSB3aW5kb3dPcmRlcmVkT3V0XTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVB
cmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBVU0UoU0NST0xM
QkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgYmVn
aW5TY3JvbGxHZXN0dXJlXTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElB
dmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkg
YmVnaW5TY3JvbGxHZXN0dXJlXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkRW5k
U2Nyb2xsR2VzdHVyZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09u
QWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVS
KQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGVuZFNjcm9sbEdlc3R1
cmVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQor
ICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBlbmRTY3JvbGxHZXN0
dXJlXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQot
ICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyogdGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpKSB7
Ci0gICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Ny
b2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgICAgIFtwYWludGVyIHNldERlbGVnYXRlOm1fc2Nyb2xs
YmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsKLSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkgc2V0VmVydGljYWxTY3JvbGxlckltcDpwYWludGVyXTsKLSAgICAgICAg
aWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQotICAgICAgICAgICAgW3BhaW50
ZXIgc2V0S25vYkFscGhhOjFdOworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFi
bGUoKSkgeworICAgICAgICBpZiAoU2Nyb2xsYmFyVGhlbWVNYWMqIHRoZW1lID0gbWFjU2Nyb2xs
YmFyVGhlbWUoKSkgeworICAgICAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gdGhl
bWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIFtwYWludGVy
IHNldERlbGVnYXRlOm1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsKKyAgICAgICAg
ICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldFZlcnRpY2FsU2Nyb2xs
ZXJJbXA6cGFpbnRlcl07CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZl
UmVzaXplKCkpCisgICAgICAgICAgICAgICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOworICAg
ICAgICB9CiAgICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRp
ZgogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQot
ICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyogdGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpKSB7
Ci0gICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Ny
b2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgICAgIFtwYWludGVyIHNldERlbGVnYXRlOm5pbF07Ci0g
ICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldFZlcnRpY2FsU2Ny
b2xsZXJJbXA6bmlsXTsKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkp
IHsKKyAgICAgICAgaWYgKFNjcm9sbGJhclRoZW1lTWFjKiB0aGVtZSA9IG1hY1Njcm9sbGJhclRo
ZW1lKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHRoZW1lLT5w
YWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgICAgICBbcGFpbnRlciBzZXRE
ZWxlZ2F0ZTpuaWxdOworICAgICAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIu
Z2V0KCkgc2V0VmVydGljYWxTY3JvbGxlckltcDpuaWxdOworICAgICAgICB9CiAgICAgfQotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRpZgogfQogCiB2b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBpZiAoU2Nyb2xsYmFyVGhl
bWVNYWMqIHRoZW1lID0gbWFjU2Nyb2xsYmFyVGhlbWUoKSkgewotICAgICAgICBTY3JvbGxiYXJQ
YWludGVyIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwot
ICAgICAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTptX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5n
ZXQoKV07Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldEhv
cml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKLSAgICAgICAgaWYgKHNjcm9sbGFibGVBcmVh
KCktPmluTGl2ZVJlc2l6ZSgpKQotICAgICAgICAgICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFd
OworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBp
ZiAoU2Nyb2xsYmFyVGhlbWVNYWMqIHRoZW1lID0gbWFjU2Nyb2xsYmFyVGhlbWUoKSkgeworICAg
ICAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gdGhlbWUtPnBhaW50ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIFtwYWludGVyIHNldERlbGVnYXRlOm1fc2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsKKyAgICAgICAgICAgIFttX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyLmdldCgpIHNldEhvcml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsK
KyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAgICAg
ICAgICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07CisgICAgICAgIH0KICAgICB9Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2VuZGlmCiB9CiAKIHZvaWQgU2Ny
b2xsQW5pbWF0b3JNYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciog
c2Nyb2xsYmFyKQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBpZiAoU2Nyb2xs
YmFyVGhlbWVNYWMqIHRoZW1lID0gbWFjU2Nyb2xsYmFyVGhlbWUoKSkgewotICAgICAgICBTY3Jv
bGxiYXJQYWludGVyIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxi
YXIpOwotICAgICAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6bmls
XTsKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAg
aWYgKFNjcm9sbGJhclRoZW1lTWFjKiB0aGVtZSA9IG1hY1Njcm9sbGJhclRoZW1lKCkpIHsKKyAg
ICAgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Ny
b2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgICAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpuaWxd
OworICAgICAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0SG9y
aXpvbnRhbFNjcm9sbGVySW1wOm5pbF07CisgICAgICAgIH0KICAgICB9Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OmNhbmNlbEFuaW1hdGlvbnMoKQogewogICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9h
ZCA9IGZhbHNlOwogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIGlmIChzY3JvbGxi
YXJQYWludFRpbWVySXNBY3RpdmUoKSkKLSAgICAgICAgc3RvcFNjcm9sbGJhclBhaW50VGltZXIo
KTsKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgY2FuY2VsQW5pbWF0aW9u
c107Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsK
KyAgICAgICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQorICAgICAgICAgICAg
c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckRl
bGVnYXRlLmdldCgpIGNhbmNlbEFuaW1hdGlvbnNdOworICAgIH0KIH0KIAogI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKQEAgLTEyOTIsNiArMTI2OSw5IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OmVuZFNjcm9sbEdlc3R1cmUoKQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnVi
YmVyQmFuZCgpCiB7CisgICAgaWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW1tOU1By
b2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdIC0gbV9zY3JvbGxFbGFzdGljaXR5
Q29udHJvbGxlci5tX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKICAgICBpZiAobV9zY3Jv
bGxFbGFzdGljaXR5Q29udHJvbGxlci5tX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCAmJiB0
aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCkKICAgICAgICAgbV9zY3Jv
bGxFbGFzdGljaXR5Q29udHJvbGxlci5tX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsK
QEAgLTE0MDEsMTUgKzEzODEsMTcgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c25hcFJ1YmJl
ckJhbmRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yTWFjPiopCiAKIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OnNldElzQWN0aXZlKCkKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIp
Ci0gICAgaWYgKG5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSgpKQotICAgICAgICB1cGRhdGVTY3Jv
bGxlclN0eWxlKCk7Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxh
YmxlKCkpIHsKKyAgICAgICAgaWYgKG5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSgpKQorICAgICAg
ICAgICAgdXBkYXRlU2Nyb2xsZXJTdHlsZSgpOworICAgIH0KIH0KIAotI2lmIFVTRShTQ1JPTExC
QVJfUEFJTlRFUikKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5bGUo
KQogeworICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkg
ewogICAgICAgICBzZXROZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUodHJ1ZSk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTE0ODMsMTIgKzE0NjUsMTMgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c3Rv
cFNjcm9sbGJhclBhaW50VGltZXIoKQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFs
U2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yTWFjPiopCiB7Ci0g
ICAgLy8gVG8gZm9yY2UgdGhlIHNjcm9sbGJhcnMgdG8gZmxhc2gsIHdlIGhhdmUgdG8gY2FsbCBo
aWRlIGZpcnN0LiBPdGhlcndpc2UsIHRoZSBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlcgotICAg
IC8vIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHNjcm9sbGJhcnMgYXJlIGFscmVhZHkgc2hvd2luZyBh
bmQgYmFpbCBlYXJseS4KLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBo
aWRlT3ZlcmxheVNjcm9sbGVyc107Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIu
Z2V0KCkgZmxhc2hTY3JvbGxlcnNdOworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFp
bGFibGUoKSkgeworICAgICAgICAvLyBUbyBmb3JjZSB0aGUgc2Nyb2xsYmFycyB0byBmbGFzaCwg
d2UgaGF2ZSB0byBjYWxsIGhpZGUgZmlyc3QuIE90aGVyd2lzZSwgdGhlIFNjcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyCisgICAgICAgIC8vIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHNjcm9sbGJhcnMg
YXJlIGFscmVhZHkgc2hvd2luZyBhbmQgYmFpbCBlYXJseS4KKyAgICAgICAgW21fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgaGlkZU92ZXJsYXlTY3JvbGxlcnNdOworICAgICAgICBb
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBmbGFzaFNjcm9sbGVyc107CisgICAg
fQogfQotI2VuZGlmCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNldFZpc2libGVTY3JvbGxl
clRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3JvbGxlclRodW1iKQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIu
aAppbmRleCBiNjBiNDY0ZDgyMmJmMDY4NmIwNDYyZTQzZmY1NDgxOTczMGNlODllLi4zYzU2OTJj
NGUyYmJjN2IwYjc0MzI2MDhlMWY0Y2FiZDVjNzVkMWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaApAQCAt
MjgsOCArMjgsOCBAQAogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogCi0jaW5jbHVkZSA8
V2ViQ29yZS9GbG9hdFBvaW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmgKaW5kZXggMzk3MmNjNGY0MmM1
YjBiN2IzNTViNTVjNGYyOTE0MTY5ZGUxMjY0ZC4uMDFhODNmMjhmYTRkNDhkOWQ0ZDZhYzA0ODc4
ZjRiMzJiM2JiMDhjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbGJhclRoZW1lTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bGJhclRoZW1lTWFjLmgKQEAgLTI4LDkgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lQ29tcG9zaXRlLmgiCiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiB0eXBlZGVmIGlk
IFNjcm9sbGJhclBhaW50ZXI7Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01
OSwxMCArNTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFy
KFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9s
bGJhciopOwogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogICAgIHZvaWQgc2V0TmV3UGFp
bnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYWludGVyKTsKICAgICBTY3Jv
bGxiYXJQYWludGVyIHBhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0jZW5kaWYKIAog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciopOwpAQCAt
NzgsNiArNzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdmlydHVhbCBib29sIHNob3VsZENl
bnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAg
dmlydHVhbCBib29sIHNob3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKFNjcm9sbGJhcios
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIGludCBzY3JvbGxiYXJQYXJ0VG9ISVBy
ZXNzZWRTdGF0ZShTY3JvbGxiYXJQYXJ0KTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQppbmRleCBkNzgyYjViOTVkNGU5NTJh
ZTc0MThjNmU2YTdiZDVlZjYzNjVhMTczLi4wNGNlMzk1MWE0NmNhOWQ2NzQ1YTg1MDExNzRmNmQ1
NDQzOGI5MWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
YmFyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJh
clRoZW1lTWFjLm1tCkBAIC00NSwxMSArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogdHlw
ZWRlZiBIYXNoTWFwPFNjcm9sbGJhciosIFJldGFpblB0cjxTY3JvbGxiYXJQYWludGVyPiA+IFNj
cm9sbGJhclBhaW50ZXJNYXA7Ci0jZWxzZQotdHlwZWRlZiBIYXNoU2V0PFNjcm9sbGJhcio+IFNj
cm9sbGJhclBhaW50ZXJNYXA7Ci0jZW5kaWYKIAogc3RhdGljIFNjcm9sbGJhclBhaW50ZXJNYXAq
IHNjcm9sbGJhck1hcCgpCiB7CkBAIC03NSwxOCArNzEsMTcgQEAgc3RhdGljIFNjcm9sbGJhclBh
aW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlm
aWNhdGlvbik7CiAKKyAgICBTY3JvbGxiYXJUaGVtZSogdGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6
dGhlbWUoKTsKKyAgICBpZiAodGhlbWUtPmlzTW9ja1RoZW1lKCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCkpLT5wcmVmZXJlbmNlc0NoYW5nZWQoKTsKICAgICBpZiAoc2Nyb2xsYmFyTWFwKCktPmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJh
dG9yIGVuZCA9IHNjcm9sbGJhck1hcCgpLT5lbmQoKTsKICAgICBmb3IgKFNjcm9sbGJhclBhaW50
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYmFyTWFwKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKICAgICAgICAgaXQtPmZpcnN0LT5z
dHlsZUNoYW5nZWQoKTsKICAgICAgICAgaXQtPmZpcnN0LT5pbnZhbGlkYXRlKCk7Ci0jZWxzZQot
ICAgICAgICAoKml0KS0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgICAgICgqaXQpLT5pbnZhbGlkYXRl
KCk7Ci0jZW5kaWYKICAgICB9CiB9CiAKQEAgLTk0LDYgKzg5LDEwIEBAIHN0YXRpYyBTY3JvbGxi
YXJQYWludGVyTWFwKiBzY3JvbGxiYXJNYXAoKQogewogICAgIFVOVVNFRF9QQVJBTSh1bnVzZWRO
b3RpZmljYXRpb24pOwogCisgICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhl
bWU6OnRoZW1lKCk7CisgICAgaWYgKHRoZW1lLT5pc01vY2tUaGVtZSgpKQorICAgICAgICByZXR1
cm47CisKICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KFNjcm9sbGJhclRoZW1l
Ojp0aGVtZSgpKS0+cHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiB9CiAKQEAgLTEwNywyMiArMTA2LDIy
IEBAIHN0YXRpYyBTY3JvbGxiYXJQYWludGVyTWFwKiBzY3JvbGxiYXJNYXAoKQogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiBTY3JvbGxiYXJUaGVtZSog
U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFNjcm9sbGJhclRoZW1lTWFjLCB0aGVtZSwgKCkpOwogICAgIHJldHVybiAmdGhlbWU7CiB9Cisj
ZW5kaWYKIAogLy8gRklYTUU6IEdldCB0aGVzZSBudW1iZXJzIGZyb20gQ29yZVVJLgogc3RhdGlj
IGludCBjUmVhbEJ1dHRvbkxlbmd0aFtdID0geyAyOCwgMjEgfTsKIHN0YXRpYyBpbnQgY0J1dHRv
bkhpdEluc2V0W10gPSB7IDMsIDIgfTsKIC8vIGNSZWFsQnV0dG9uTGVuZ3RoIC0gY0J1dHRvbklu
c2V0CiBzdGF0aWMgaW50IGNCdXR0b25MZW5ndGhbXSA9IHsgMTQsIDEwIH07Ci0jaWYgIVVTRShT
Q1JPTExCQVJfUEFJTlRFUikKIHN0YXRpYyBpbnQgY1Njcm9sbGJhclRoaWNrbmVzc1tdID0geyAx
NSwgMTEgfTsKIHN0YXRpYyBpbnQgY0J1dHRvbkluc2V0W10gPSB7IDE0LCAxMSB9Owogc3RhdGlj
IGludCBjVGh1bWJNaW5MZW5ndGhbXSA9IHsgMjYsIDIwIH07Ci0jZW5kaWYKIAogc3RhdGljIGlu
dCBjT3V0ZXJCdXR0b25MZW5ndGhbXSA9IHsgMTYsIDE0IH07IC8vIFRoZSBvdXRlciBidXR0b24g
aW4gYSBkb3VibGUgYnV0dG9uIHBhaXIgaXMgYSBiaXQgYmlnZ2VyLgogc3RhdGljIGludCBjT3V0
ZXJCdXR0b25PdmVybGFwID0gMjsKQEAgLTEzMSwxNyArMTMwLDEzIEBAIHN0YXRpYyBmbG9hdCBn
SW5pdGlhbEJ1dHRvbkRlbGF5ID0gMC41ZjsKIHN0YXRpYyBmbG9hdCBnQXV0b3Njcm9sbEJ1dHRv
bkRlbGF5ID0gMC4wNWY7CiBzdGF0aWMgYm9vbCBnSnVtcE9uVHJhY2tDbGljayA9IGZhbHNlOwog
Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotc3RhdGljIFNjcm9sbGJhckJ1dHRvbnNQbGFj
ZW1lbnQgZ0J1dHRvblBsYWNlbWVudCA9IFNjcm9sbGJhckJ1dHRvbnNOb25lOwotI2Vsc2UKIHN0
YXRpYyBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxi
YXJCdXR0b25zRG91YmxlRW5kOwotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHVwZGF0ZUFycm93UGxh
Y2VtZW50KCkKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgcmV0dXJuOwotI2Vu
ZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBOU1N0cmluZyAqYnV0dG9uUGxhY2VtZW50ID0gW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OkAiQXBwbGVTY3JvbGxCYXJWYXJp
YW50Il07CiAgICAgaWYgKFtidXR0b25QbGFjZW1lbnQgaXNFcXVhbFRvU3RyaW5nOkAiU2luZ2xl
Il0pCiAgICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlOwpA
QCAtMTU3LDE1ICsxNTIsMTUgQEAgc3RhdGljIHZvaWQgdXBkYXRlQXJyb3dQbGFjZW1lbnQoKQog
CiB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjpyZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNj
cm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgYm9vbCBpc0hvcml6
b250YWwgPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsK
LSAgICBTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIgPSBbTlNDbGFzc0Zyb21TdHJp
bmcoQCJOU1Njcm9sbGVySW1wIikgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6d2tSZWNvbW1lbmRlZFNj
cm9sbGVyU3R5bGUoKSBjb250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSlzY3JvbGxiYXItPmNvbnRy
b2xTaXplKCkgaG9yaXpvbnRhbDppc0hvcml6b250YWwgcmVwbGFjaW5nU2Nyb2xsZXJJbXA6bmls
XTsKLSAgICBzY3JvbGxiYXJNYXAoKS0+YWRkKHNjcm9sbGJhciwgc2Nyb2xsYmFyUGFpbnRlcik7
Ci0gICAgdXBkYXRlRW5hYmxlZFN0YXRlKHNjcm9sbGJhcik7Ci0gICAgdXBkYXRlU2Nyb2xsYmFy
T3ZlcmxheVN0eWxlKHNjcm9sbGJhcik7Ci0jZWxzZQotICAgIHNjcm9sbGJhck1hcCgpLT5hZGQo
c2Nyb2xsYmFyKTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFi
bGUoKSkgeworICAgICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAgICBTY3JvbGxiYXJQYWludGVyIHNj
cm9sbGJhclBhaW50ZXIgPSBbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVySW1wIikgc2Ny
b2xsZXJJbXBXaXRoU3R5bGU6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgY29udHJvbFNpemU6
KE5TQ29udHJvbFNpemUpc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpIGhvcml6b250YWw6aXNIb3Jp
em9udGFsIHJlcGxhY2luZ1Njcm9sbGVySW1wOm5pbF07CisgICAgICAgIHNjcm9sbGJhck1hcCgp
LT5hZGQoc2Nyb2xsYmFyLCBzY3JvbGxiYXJQYWludGVyKTsKKyAgICAgICAgdXBkYXRlRW5hYmxl
ZFN0YXRlKHNjcm9sbGJhcik7CisgICAgICAgIHVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShz
Y3JvbGxiYXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNjcm9sbGJhck1hcCgpLT5hZGQoc2Ny
b2xsYmFyLCBuaWwpOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6dW5yZWdp
c3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKQEAgLTE3Myw3ICsxNjgsNiBAQCB2
b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQogICAgIHNjcm9sbGJhck1hcCgpLT5yZW1vdmUoc2Nyb2xsYmFyKTsKIH0KIAotI2lm
IFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnNldE5ld1Bh
aW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhaW50ZXIg
bmV3UGFpbnRlcikKIHsKICAgICBzY3JvbGxiYXJNYXAoKS0+c2V0KHNjcm9sbGJhciwgbmV3UGFp
bnRlcik7CkBAIC0xODUsMTMgKzE3OSwxMyBAQCBTY3JvbGxiYXJQYWludGVyIFNjcm9sbGJhclRo
ZW1lTWFjOjpwYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAg
IHJldHVybiBzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCk7CiB9Ci0jZW5kaWYK
IAogU2Nyb2xsYmFyVGhlbWVNYWM6OlNjcm9sbGJhclRoZW1lTWFjKCkKIHsKICAgICBzdGF0aWMg
Ym9vbCBpbml0aWFsaXplZDsKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgIGluaXRp
YWxpemVkID0gdHJ1ZTsKKyAgICAgICAgZ0J1dHRvblBsYWNlbWVudCA9IGlzU2Nyb2xsYmFyT3Zl
cmxheUFQSUF2YWlsYWJsZSgpID8gU2Nyb2xsYmFyQnV0dG9uc05vbmUgOiBTY3JvbGxiYXJCdXR0
b25zRG91YmxlRW5kOwogICAgICAgICBbV2ViU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciByZWdpc3Rl
ckFzT2JzZXJ2ZXJdOwogICAgICAgICBwcmVmZXJlbmNlc0NoYW5nZWQoKTsKICAgICB9CkBAIC0y
MTMsMjYgKzIwNywyMyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjpwcmVmZXJlbmNlc0NoYW5n
ZWQoKQogCiBpbnQgU2Nyb2xsYmFyVGhlbWVNYWM6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxi
YXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIp
Ci0gICAgU2Nyb2xsYmFyUGFpbnRlciBzY3JvbGxiYXJQYWludGVyID0gW05TQ2xhc3NGcm9tU3Ry
aW5nKEAiTlNTY3JvbGxlckltcCIpIHNjcm9sbGVySW1wV2l0aFN0eWxlOndrUmVjb21tZW5kZWRT
Y3JvbGxlclN0eWxlKCkgY29udHJvbFNpemU6Y29udHJvbFNpemUgaG9yaXpvbnRhbDpOTyByZXBs
YWNpbmdTY3JvbGxlckltcDpuaWxdOwotICAgIHJldHVybiBbc2Nyb2xsYmFyUGFpbnRlciB0cmFj
a0JveFdpZHRoXTsKLSNlbHNlCi0gICAgcmV0dXJuIGNTY3JvbGxiYXJUaGlja25lc3NbY29udHJv
bFNpemVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgp
KSB7CisgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciA9IFtOU0NsYXNz
RnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAiKSBzY3JvbGxlckltcFdpdGhTdHlsZTpyZWNvbW1l
bmRlZFNjcm9sbGVyU3R5bGUoKSBjb250cm9sU2l6ZTpjb250cm9sU2l6ZSBob3Jpem9udGFsOk5P
IHJlcGxhY2luZ1Njcm9sbGVySW1wOm5pbF07CisgICAgICAgIHJldHVybiBbc2Nyb2xsYmFyUGFp
bnRlciB0cmFja0JveFdpZHRoXTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGNTY3JvbGxi
YXJUaGlja25lc3NbY29udHJvbFNpemVdOwogfQogCiBib29sIFNjcm9sbGJhclRoZW1lTWFjOjp1
c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdAogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRF
UikKLSAgICByZXR1cm4gd2tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSA9PSBOU1Njcm9sbGVy
U3R5bGVPdmVybGF5OwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKKyAgICBpZiAo
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiByZWNvbW1l
bmRlZFNjcm9sbGVyU3R5bGUoKSA9PSBOU1Njcm9sbGVyU3R5bGVPdmVybGF5OworICAgIGVsc2UK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1cGRh
dGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0jaWYgVVNF
KFNDUk9MTEJBUl9QQUlOVEVSKQogICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHBhaW50
ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKICAgICBzd2l0Y2ggKHNjcm9sbGJhci0+c2Nyb2xs
YWJsZUFyZWEoKS0+c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkpIHsKICAgICBjYXNlIFNjcm9sbGJh
ck92ZXJsYXlTdHlsZURlZmF1bHQ6CkBAIC0yNDUsOSArMjM2LDYgQEAgdm9pZCBTY3JvbGxiYXJU
aGVtZU1hYzo6dXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQogICAgICAgICBbcGFpbnRlciBzZXRLbm9iU3R5bGU6TlNTY3JvbGxlcktub2JTdHlsZUxpZ2h0
XTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xs
YmFyKTsKLSNlbmRpZgogfQogCiBkb3VibGUgU2Nyb2xsYmFyVGhlbWVNYWM6OmluaXRpYWxBdXRv
c2Nyb2xsVGltZXJEZWxheSgpCkBAIC0yNjcsNyArMjU1LDcgQEAgU2Nyb2xsYmFyQnV0dG9uc1Bs
YWNlbWVudCBTY3JvbGxiYXJUaGVtZU1hYzo6YnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0CiAKIGJv
b2wgU2Nyb2xsYmFyVGhlbWVNYWM6Omhhc0J1dHRvbnMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7
Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpICYmIGdCdXR0b25QbGFjZW1lbnQgIT0g
U2Nyb2xsYmFyQnV0dG9uc05vbmUKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFibGVkKCkgJiYg
YnV0dG9uc1BsYWNlbWVudCgpICE9IFNjcm9sbGJhckJ1dHRvbnNOb25lCiAgICAgICAgICAgICAg
JiYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyCiAgICAg
ICAgICAgICAgPyBzY3JvbGxiYXItPndpZHRoKCkKICAgICAgICAgICAgICA6IHNjcm9sbGJhci0+
aGVpZ2h0KCkpID49IDIgKiAoY1JlYWxCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6
ZSgpXSAtIGNCdXR0b25IaXRJbnNldFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldKTsKQEAgLTI3
NiwxMyArMjY0LDEyIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6Omhhc0J1dHRvbnMoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCiBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpoYXNUaHVtYihTY3JvbGxi
YXIqIHNjcm9sbGJhcikKIHsKICAgICBpbnQgbWluTGVuZ3RoRm9yVGh1bWI7Ci0jaWYgVVNFKFND
Uk9MTEJBUl9QQUlOVEVSKQotICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJh
ck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKTsKLSAgICBtaW5MZW5ndGhGb3JUaHVtYiA9IFtw
YWludGVyIGtub2JNaW5MZW5ndGhdICsgW3BhaW50ZXIgdHJhY2tPdmVybGFwRW5kSW5zZXRdICsg
W3BhaW50ZXIga25vYk92ZXJsYXBFbmRJbnNldF0KLSAgICAgICAgKyAyICogKFtwYWludGVyIHRy
YWNrRW5kSW5zZXRdICsgW3BhaW50ZXIga25vYkVuZEluc2V0XSk7Ci0jZWxzZQotICAgIG1pbkxl
bmd0aEZvclRodW1iID0gMiAqIGNCdXR0b25JbnNldFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCld
ICsgY1RodW1iTWluTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyAxOwotI2VuZGlm
CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7CisgICAgICAgIFNj
cm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5n
ZXQoKTsKKyAgICAgICAgbWluTGVuZ3RoRm9yVGh1bWIgPSBbcGFpbnRlciBrbm9iTWluTGVuZ3Ro
XSArIFtwYWludGVyIHRyYWNrT3ZlcmxhcEVuZEluc2V0XSArIFtwYWludGVyIGtub2JPdmVybGFw
RW5kSW5zZXRdCisgICAgICAgICAgICArIDIgKiAoW3BhaW50ZXIgdHJhY2tFbmRJbnNldF0gKyBb
cGFpbnRlciBrbm9iRW5kSW5zZXRdKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbWluTGVuZ3RoRm9y
VGh1bWIgPSAyICogY0J1dHRvbkluc2V0W3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyBjVGh1
bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIDE7CiAgICAgcmV0dXJuIHNj
cm9sbGJhci0+ZW5hYmxlZCgpICYmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhciA/IAogICAgICAgICAgICAgIHNjcm9sbGJhci0+d2lkdGgoKSA6IAogICAg
ICAgICAgICAgIHNjcm9sbGJhci0+aGVpZ2h0KCkpID49IG1pbkxlbmd0aEZvclRodW1iOwpAQCAt
MjkwLDcgKzI3Nyw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6Omhhc1RodW1iKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKQogCiBzdGF0aWMgSW50UmVjdCBidXR0b25SZXBhaW50UmVjdChjb25zdCBJ
bnRSZWN0JiBidXR0b25SZWN0LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Ny
b2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUsIGJvb2wgc3RhcnQpCiB7Ci0gICAgQVNTRVJU
KGdCdXR0b25QbGFjZW1lbnQgIT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUpOworICAgIEFTU0VSVChi
dXR0b25zUGxhY2VtZW50KCkgIT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUpOwogCiAgICAgSW50UmVj
dCBwYWludFJlY3QoYnV0dG9uUmVjdCk7CiAgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIpIHsKQEAgLTQxOSwxMSArNDA2LDEwIEBAIEludFJlY3QgU2Nyb2xsYmFyVGhl
bWVNYWM6OnRyYWNrUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9vbCBwYWludGluZykKIAog
aW50IFNjcm9sbGJhclRoZW1lTWFjOjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIHJldHVybiBbc2Nyb2xs
YmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpIGtub2JNaW5MZW5ndGhdOwotI2Vsc2UKLSAg
ICByZXR1cm4gY1RodW1iTWluTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV07Ci0jZW5k
aWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHJl
dHVybiBbc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpIGtub2JNaW5MZW5ndGhd
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGNUaHVtYk1pbkxlbmd0aFtzY3JvbGxiYXItPmNv
bnRyb2xTaXplKCldOwogfQogCiBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpzaG91bGRDZW50ZXJP
blRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQpAQCAtNDQw
LDcgKzQyNiw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6OnNob3VsZERyYWdEb2N1bWVudElu
c3RlYWRPZlRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmCiAgICAgcmV0dXJuIGV2ZW50LmFs
dEtleSgpOwogfQogCi1zdGF0aWMgaW50IHNjcm9sbGJhclBhcnRUb0hJUHJlc3NlZFN0YXRlKFNj
cm9sbGJhclBhcnQgcGFydCkKK2ludCBTY3JvbGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyUGFydFRv
SElQcmVzc2VkU3RhdGUoU2Nyb2xsYmFyUGFydCBwYXJ0KQogewogICAgIHN3aXRjaCAocGFydCkg
ewogICAgICAgICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6CkBAIC00NjAsMTQgKzQ0NiwxMCBA
QCBzdGF0aWMgaW50IHNjcm9sbGJhclBhcnRUb0hJUHJlc3NlZFN0YXRlKFNjcm9sbGJhclBhcnQg
cGFydCkKIAogdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbc2Ny
b2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpIHNldEVuYWJsZWQ6c2Nyb2xsYmFyLT5l
bmFibGVkKCldOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRpZgor
ICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW3Njcm9s
bGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSBzZXRFbmFibGVkOnNjcm9sbGJhci0+ZW5h
YmxlZCgpXTsKIH0KIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHN0YXRpYyB2b2lkIHNj
cm9sbGJhclBhaW50ZXJQYWludChTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIsIGJv
b2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIENHUmVjdCBmcmFt
ZVJlY3QpCiB7CiAgICAgW3Njcm9sbGJhclBhaW50ZXIgc2V0RW5hYmxlZDplbmFibGVkXTsKQEAg
LTQ4OSw0NyArNDcxLDQ2IEBAIHN0YXRpYyB2b2lkIHNjcm9sbGJhclBhaW50ZXJQYWludChTY3Jv
bGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIsIGJvb2wgZW5hYmxlCiAgICAgaWYgKGVuYWJs
ZWQpCiAgICAgICAgIFtzY3JvbGxiYXJQYWludGVyIGRyYXdLbm9iXTsKIH0KLSNlbmRpZgogCiBi
b29sIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQogewotI2lmIFVT
RShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBmbG9hdCB2YWx1ZSA9IDA7Ci0gICAgZmxvYXQgb3Zl
cmhhbmcgPSAwOworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewor
ICAgICAgICBmbG9hdCB2YWx1ZSA9IDA7CisgICAgICAgIGZsb2F0IG92ZXJoYW5nID0gMDsKIAot
ICAgIGlmIChzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSA8IDApIHsKLSAgICAgICAgLy8gU2Nyb2xs
ZWQgcGFzdCB0aGUgdG9wLgotICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAgIG92ZXJoYW5nID0g
LXNjcm9sbGJhci0+Y3VycmVudFBvcygpOwotICAgIH0gZWxzZSBpZiAoc2Nyb2xsYmFyLT52aXNp
YmxlU2l6ZSgpICsgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgPiBzY3JvbGxiYXItPnRvdGFsU2l6
ZSgpKSB7Ci0gICAgICAgIC8vIFNjcm9sbGVkIHBhc3QgdGhlIGJvdHRvbS4KLSAgICAgICAgdmFs
dWUgPSAxOwotICAgICAgICBvdmVyaGFuZyA9IHNjcm9sbGJhci0+Y3VycmVudFBvcygpICsgc2Ny
b2xsYmFyLT52aXNpYmxlU2l6ZSgpIC0gc2Nyb2xsYmFyLT50b3RhbFNpemUoKTsKLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBXaXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgc2Nyb2xsYWJsZSBhcmVh
LgotICAgICAgICBpbnQgbWF4aW11bSA9IHNjcm9sbGJhci0+bWF4aW11bSgpOwotICAgICAgICBp
ZiAobWF4aW11bSA+IDApCi0gICAgICAgICAgICB2YWx1ZSA9IHNjcm9sbGJhci0+Y3VycmVudFBv
cygpIC8gbWF4aW11bTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAoc2Nyb2xsYmFyLT5jdXJy
ZW50UG9zKCkgPCAwKSB7CisgICAgICAgICAgICAvLyBTY3JvbGxlZCBwYXN0IHRoZSB0b3AuCiAg
ICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgICAgICBvdmVyaGFuZyA9IC1zY3JvbGxiYXIt
PmN1cnJlbnRQb3MoKTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxiYXItPnZpc2libGVTaXpl
KCkgKyBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSA+IHNjcm9sbGJhci0+dG90YWxTaXplKCkpIHsK
KyAgICAgICAgICAgIC8vIFNjcm9sbGVkIHBhc3QgdGhlIGJvdHRvbS4KKyAgICAgICAgICAgIHZh
bHVlID0gMTsKKyAgICAgICAgICAgIG92ZXJoYW5nID0gc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkg
KyBzY3JvbGxiYXItPnZpc2libGVTaXplKCkgLSBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIHNj
cm9sbGFibGUgYXJlYS4KKyAgICAgICAgICAgIGludCBtYXhpbXVtID0gc2Nyb2xsYmFyLT5tYXhp
bXVtKCk7CisgICAgICAgICAgICBpZiAobWF4aW11bSA+IDApCisgICAgICAgICAgICAgICAgdmFs
dWUgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAvIG1heGltdW07CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBTY3JvbGxBbmltYXRvck1hYyogc2Nyb2xsQW5pbWF0b3IgPSBzdGF0aWNfY2FzdDxTY3JvbGxB
bmltYXRvck1hYyo+KHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsQW5pbWF0b3Io
KSk7CisgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5zZXRJc0RyYXdpbmdJbnRvTGF5ZXIoY29udGV4
dC0+aXNDQUxheWVyQ29udGV4dCgpKTsKKyAgICAgICAgCisgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CisgICAgICAgIGNvbnRleHQtPmNsaXAo
ZGFtYWdlUmVjdCk7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShzY3JvbGxiYXItPmZyYW1l
UmVjdCgpLngoKSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkpOworICAgICAgICBMb2NhbEN1
cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KGNvbnRleHQpOworICAgICAgICBzY3Jv
bGxiYXJQYWludGVyUGFpbnQoc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmVuYWJsZWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdGF0aWNfY2FzdDxDR0Zsb2F0PihzY3JvbGxiYXItPnZpc2libGVTaXpl
KCkpIC0gb3ZlcmhhbmcpIC8gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CisKKyAgICAgICAgc2Ny
b2xsQW5pbWF0b3ItPnNldElzRHJhd2luZ0ludG9MYXllcihmYWxzZSk7CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KLSAgICAKLSAgICBTY3JvbGxBbmltYXRvck1hYyogc2Nyb2xsQW5pbWF0
b3IgPSBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRvck1hYyo+KHNjcm9sbGJhci0+c2Nyb2xsYWJs
ZUFyZWEoKS0+c2Nyb2xsQW5pbWF0b3IoKSk7Ci0gICAgc2Nyb2xsQW5pbWF0b3ItPnNldElzRHJh
d2luZ0ludG9MYXllcihjb250ZXh0LT5pc0NBTGF5ZXJDb250ZXh0KCkpOwotICAgIAotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7Ci0gICAgY29udGV4
dC0+Y2xpcChkYW1hZ2VSZWN0KTsKLSAgICBjb250ZXh0LT50cmFuc2xhdGUoc2Nyb2xsYmFyLT5m
cmFtZVJlY3QoKS54KCksIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgpKTsKLSAgICBMb2NhbEN1
cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KGNvbnRleHQpOwotICAgIHNjcm9sbGJh
clBhaW50ZXJQYWludChzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT5lbmFibGVkKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0
YXRpY19jYXN0PENHRmxvYXQ+KHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgLSBvdmVyaGFuZykg
LyBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cm9sbGJhci0+ZnJhbWVSZWN0KCkpOwotCi0gICAgc2Nyb2xsQW5pbWF0b3ItPnNldElzRHJhd2lu
Z0ludG9MYXllcihmYWxzZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKIAogICAgIEhJVGhl
bWVUcmFja0RyYXdJbmZvIHRyYWNrSW5mbzsKICAgICB0cmFja0luZm8udmVyc2lvbiA9IDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118074</attachid>
            <date>2011-12-06 11:11:22 -0800</date>
            <delta_ts>2011-12-07 11:07:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61144-20111206111121.patch</filename>
            <type>text/plain</type>
            <size>154404</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM3MjlkMjJiYzljZDhj
ZWNlZjA1MzAxZTA0YjBjMTMyYmIyOWVjOC4uODA3M2YyYTdlMmZlMGExZDU3NGEwM2E5MmYzYWJh
ZWMyMzc3OWI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDExLTEyLTA2ICBTYWls
ZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBNZXJnZSBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjLm1tIGJhY2sgdG8gU2Nyb2xsQW5pbWF0b3JNYWMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTQ0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXQgYSBoaWdoIGxldmVsIHRo
ZSBtYWluIGNoYW5nZXMgYXJlOgorICAgICAgICAgICAgLSByZXBsYWNlICNpZmRlZnMgaW4gU2Ny
b2xsQW5pbWF0b3JNYWMgYW5kIFNjcm9sbGJhclRoZW1lTWFjIHdpdGggcnVuIHRpbWUgY2hlY2tz
CisgICAgICAgICAgICAtIGRlbGV0ZSBkdXBsaWNhdGUgY29kZSBpbiBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjLiBLZWVwIHRoZSBwYWludCBjb2RlIHNpbmNlIGl0IGRvZXMgdGlja21hcmtzIGFu
ZCBTS0lBIHN0dWZmLgorICAgICAgICAgICAgLSBkZWxldGUgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYyBzaW5jZSBTY3JvbGxBbmltYXRvck1hYyBkb2VzIHRoZSBleGFjdCBzYW1lIHRoaW5nCisg
ICAgICAgICAgICAtIGRlbGV0ZSBTY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMg
c2luY2UgTlNTY3JvbGxlckltcERldGFpbHMgZG9lcyB0aGUgc2FtZSB0aGluZworCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gSnVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW06IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFj
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3Zlcmxh
eVV0aWxpdGllc0Nocm9taXVtTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJQYWludGVyUGFpbnRUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludCk6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL0VtcHR5UHJvdG9jb2xEZWZpbml0aW9ucy5oOiBBZGRlZCBOU0FuaW1hdGlvbkRl
bGVnYXRlCisgICAgICAgICogcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmg6IEFk
ZGVkIC1bTlNTY3JvbGxlciBwcmVmZXJyZWRTY3JvbGxlclN0eWxlXSwgaXNTY3JvbGxiYXJPdmVy
bGF5QVBJQXZhaWxhYmxlKCksIGFuZCByZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvTlNTY3JvbGxlckltcERldGFpbHMubW06IEFkZGVkIGltcGxlbWVu
dGF0aW9uIGZvciBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSwgYW5kIHJlY29tbWVu
ZGVkU2Nyb2xsZXJTdHlsZSgpLgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxiYXJPdmVybGF5
QVBJQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHls
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmg6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tOgorICAgICAgICAoc3VwcG9ydHNV
SVN0YXRlVHJhbnNpdGlvblByb2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Om1hY1Njcm9sbGJh
clRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmlt
YXRvck1hYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFu
aW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlQ
b3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNv
bnRlbnRBcmVhV2lsbFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRTY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxTdGFydExpdmVSZXNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRzUmVzaXplZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlkU2hvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEVuZFNjcm9sbEdl
c3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRp
Y2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp3aWxs
UmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JNYWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjYW5jZWxBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnViYmVyQmFuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c2V0SXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5oOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKCtbV2ViU2Nyb2xsYmFy
UHJlZnNPYnNlcnZlciBhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOl0pOgorICAgICAgICAoK1tXZWJT
Y3JvbGxiYXJQcmVmc09ic2VydmVyIGJlaGF2aW9yUHJlZnNDaGFuZ2VkOl0pOgorICAgICAgICAo
V2ViQ29yZTo6dXBkYXRlQXJyb3dQbGFjZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWVNYWM6OnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lTWFjOjpwYWludGVyRm9yU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lTWFjOjpTY3JvbGxiYXJUaGVtZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lTWFjOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6aGFzQnV0dG9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6aGFzVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6YnV0dG9uUmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVN
YWM6Om1pbmltdW1UaHVtYkxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZU1hYzo6c2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZUVuYWJsZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JvbGxiYXJQYWludGVyUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVNYWM6OnBhaW50KToKKwogMjAxMS0xMi0wMyAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0IGFjY2lkZW50YWwgY2hhbmdlIGZy
b20gcjEwMTkzMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggMjJh
NDhjMGY0Y2U0ZTQyZDM5N2QwNDczZTlmN2ZjZGU3ZDFkYWJkNy4uZTBlYzAwMWMzYjQ3MjkyOGIz
YWIzMDIyMzk1NWNmY2RiMTg0NGEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAKQEAgLTEyNTksMTMgKzEyNTksMTMgQEAKICAgICAgICAgICAgICAgIyBzdWNoIGFzOgog
ICAgICAgICAgICAgICAjIGNvbS5nb29nbGUuQ2hyb21lW10gb2JqY1tdOiBDbGFzcyBTY3JvbGxi
YXJQcmVmc09ic2VydmVyIGlzIGltcGxlbWVudGVkIGluIGJvdGggLi4uL0dvb2dsZSBDaHJvbWUu
YXBwL0NvbnRlbnRzL1ZlcnNpb25zLy4uLi9Hb29nbGUgQ2hyb21lIEhlbHBlci5hcHAvQ29udGVu
dHMvTWFjT1MvLi4vLi4vLi4vR29vZ2xlIENocm9tZSBGcmFtZXdvcmsuZnJhbWV3b3JrL0dvb2ds
ZSBDaHJvbWUgRnJhbWV3b3JrIGFuZCAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9XZWJLaXQu
ZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9XZWJDb3JlLmZyYW1ld29yay9WZXJzaW9u
cy9BL1dlYkNvcmUuIE9uZSBvZiB0aGUgdHdvIHdpbGwgYmUgdXNlZC4gV2hpY2ggb25lIGlzIHVu
ZGVmaW5lZC4KICAgICAgICAgICAgICAgJ1dlYkNhc2NhZGVMaXN0PUNocm9taXVtV2ViQ29yZU9i
akNXZWJDYXNjYWRlTGlzdCcsCi0gICAgICAgICAgICAgICdTY3JvbGxiYXJQcmVmc09ic2VydmVy
PUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQcmVmc09ic2VydmVyJywKKyAgICAgICAgICAg
ICAgJ1dlYlNjcm9sbGJhclByZWZzT2JzZXJ2ZXI9Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYlNjcm9s
bGJhclByZWZzT2JzZXJ2ZXInLAogICAgICAgICAgICAgICAnV2ViQ29yZVJlbmRlclRoZW1lTm90
aWZpY2F0aW9uT2JzZXJ2ZXI9Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYkNvcmVSZW5kZXJUaGVtZU5v
dGlmaWNhdGlvbk9ic2VydmVyJywKICAgICAgICAgICAgICAgJ1dlYkZvbnRDYWNoZT1DaHJvbWl1
bVdlYkNvcmVPYmpDV2ViRm9udENhY2hlJywKLSAgICAgICAgICAgICAgJ1Njcm9sbEFuaW1hdGlv
bkhlbHBlckRlbGVnYXRlPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxBbmltYXRpb25IZWxwZXJE
ZWxlZ2F0ZScsCi0gICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVn
YXRlPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRl
JywKLSAgICAgICAgICAgICAgJ1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNv
cmVPYmpDU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlJywKLSAgICAgICAgICAgICAgJ1Njcm9sbGJh
clBhcnRBbmltYXRpb249Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclBhcnRBbmltYXRpb24n
LAorICAgICAgICAgICAgICAnV2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU9Q2hyb21p
dW1XZWJDb3JlT2JqQ1dlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlJywKKyAgICAgICAg
ICAgICAgJ1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU9Q2hyb21pdW1XZWJD
b3JlT2JqQ1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUnLAorICAgICAgICAg
ICAgICAnV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlPUNocm9taXVtV2ViQ29yZU9iakNXZWJT
Y3JvbGxiYXJQYWludGVyRGVsZWdhdGUnLAorICAgICAgICAgICAgICAnV2ViU2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbj1DaHJvbWl1bVdlYkNvcmVPYmpDV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbics
CiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKICAgICAgICAg
ICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvYXBwbGVfd2Via2l0JywKQEAg
LTE1MzMsNyArMTUzMywxMSBAQAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21h
Yy9CbG9ja0V4Y2VwdGlvbnNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0
Zm9ybS9tYWMvS2lsbFJpbmdNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0XFwubW0kJ10sCisgICAgICAg
ICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzXFwubW0k
J10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL1B1cmdlYWJsZUJ1ZmZl
ck1hY1xcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvU2Ny
b2xsYmFyVGhlbWVNYWNcXC5tbSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWNcXC5tbSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScs
ICdwbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJcXC5tbSQnXSwKICAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZVxc
Lm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9XZWJDb3JlVGV4
dFJlbmRlcmVyXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vdGV4
dC9tYWMvU2hhcGVBcmFiaWNcXC5jJCddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDJmZjYyNTAwNjc5
MTg4ZTBhMzA5MTk5NTZjN2NhYjU2NDZmMzY1ZjEuLmU1NTk4OTExNzZlNGY4OWFkMWYzNjlmOWZm
YjdhYmUxNTYzZDM0NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTMyODMsMTAgKzMyODMsNiBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTGlzdEJveC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVQcml2YXRlLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oJywKLSAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1t
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0
aWVzQ2hyb21pdW1NYWMuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
YmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwJywKQEAgLTQx
MDAsNiArNDA5Niw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0xvY2FsaXplZFN0cmlu
Z3NNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9Mb2dnaW5nTWFjLm1tJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9tYWMvTUlNRVR5cGVSZWdpc3RyeU1hYy5tbScsCisgICAgICAg
ICAgICAncGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbScsCiAgICAgICAgICAgICAncGxh
dGZvcm0vbWFjL1Bhc3RlYm9hcmRIZWxwZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFj
L1Bhc3RlYm9hcmRNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9QbGF0Zm9ybUNs
b2NrQ0EuY3BwJywKQEAgLTQxMTEsNiArNDEwOSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
bWFjL1NjaGVkdWxlUGFpck1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Njcm9s
bEFuaW1hdG9yTWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250
cm9sbGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29u
dHJvbGxlci5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0n
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0nLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ5NmRkOTBl
YzYxNzJkYzY1YWE3NTBhZTViNTY2NTVjMDY5ZTkzZDguLmM3MWM2M2Y1NmIxY2NmMzFhMTlmM2Fi
OWFhMTI0ODk3MDU0MGFhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4NzYsNiArNDg3Niw3IEBACiAJCUI2NTY2MjcxMTIw
QjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NTY2MjZGMTIwQjEyMjcwMDZFQTg1QyAvKiBK
U0lEQlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKIAkJQjY5MUMxRjkxMjA2RDRBMDAwMjVEOTgwIC8q
IElEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1ODVBNkEzMTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5jcHAgKi87IH07
CiAJCUI3MUZFNkRGMTEwOTFDQjMwMERBRUY3NyAvKiBQcmludENvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3NzZENDNBMTEwNDUyNUQwMEJF
QjBFQyAvKiBQcmludENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlCNzJCMTU4QTE0OERCNTI5MDBBQjQ3MUEgLyogTlNTY3JvbGxlcklt
cERldGFpbHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNzJCMTU4OTE0OERCNTI5MDBBQjQ3MUEgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0gKi87
IH07CiAJCUI3MzRCMTgxMTE5Qjk5MTEwMDY1ODdCRCAvKiBGb250VHJhbnNjb2Rlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzM0QjE4MDExOUI5
OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3BwICovOyB9OwogCQlCNzM0QjE4MzExOUI5
OTFEMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3MzRCMTgyMTE5Qjk5MUQwMDY1ODdCRCAvKiBGb250VHJh
bnNjb2Rlci5oICovOyB9OwogCQlCNzc2RDQzRDExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3
NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRleHQuY3BwICovOyB9OwpAQCAtMTIx
NjEsNiArMTIxNjIsNyBAQAogCQlCNjU2NjI2RDEyMEIxMTZCMDA2RUE4NUMgLyogSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCNjU2NjI2RTEyMEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQlRyYW5zYWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI2NTY2MjZGMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lE
QlRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
SURCVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNzJCMTU4
OTE0OERCNTI5MDBBQjQ3MUEgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOU1Njcm9sbGVySW1wRGV0YWlscy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjczNEIxODAxMTlCOTkxMTAwNjU4N0JEIC8qIEZv
bnRUcmFuc2NvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZv
bnRUcmFuc2NvZGVyLmNwcDsgcGF0aCA9IHRyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNzM0QjE4MjExOUI5OTFEMDA2NTg3QkQgLyog
Rm9udFRyYW5zY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRm9udFRy
YW5zY29kZXIuaDsgcGF0aCA9IHRyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjc3NkQ0M0ExMTA0NTI1RDAwQkVCMEVDIC8qIFByaW50Q29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmludENvbnRleHQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDY1LDYgKzE1NDY3LDcgQEAKIAkJCQk2
NTdFREEwQTEzODVDQkQ4MDA0RTA2NDUgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVyTWFjLm1tICov
LAogCQkJCUJDNzcyQzVEMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1t
ICovLAogCQkJCTkzNTAwRjMxMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWls
cy5oICovLAorCQkJCUI3MkIxNTg5MTQ4REI1MjkwMEFCNDcxQSAvKiBOU1Njcm9sbGVySW1wRGV0
YWlscy5tbSAqLywKIAkJCQlBN0QzQzUyMzBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhl
bHBlci5oICovLAogCQkJCTRCMjcwOTgxMEFGMkU1RTAwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkTWFj
Lm1tICovLAogCQkJCTkzNUM0NzZGMDlBQzRENzMwMEE2QUFCNCAvKiBQbGF0Zm9ybU1vdXNlRXZl
bnRNYWMubW0gKi8sCkBAIC0yNzYxOSw2ICsyNzYyMiw3IEBACiAJCQkJNkUzRkFEMzgxNDczM0Y0
MDAwRTQyMzA2IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNkUzRkFFOEUxNDczM0ZEQjAwRTQyMzA2IC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2NTU0MTNBMTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlF
dmVudElPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUI3MkIxNThBMTQ4REI1MjkwMEFCNDcxQSAv
KiBOU1Njcm9sbGVySW1wRGV0YWlscy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmI4NDljZjI4NDI3MDRkMzAw
ZjllNzczNWUwNDFiNzUzMTFhMTNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjX2gKLSNkZWZpbmUg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hY19oCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0j
aW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlNj
cm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9t
aXVtTWFjLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0KLSNpZmRlZiBfX09CSkNfXwotQGNsYXNzIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
OwotQGNsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKLUBjbGFzcyBTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlckRlbGVnYXRlOwotQGNsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsK
LSNlbHNlCi1jbGFzcyBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKLWNsYXNzIFNjcm9s
bGJhclBhaW50ZXJEZWxlZ2F0ZTsKLWNsYXNzIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVs
ZWdhdGU7Ci1jbGFzcyBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7Ci0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBTY3JvbGxiYXI7Ci0KLWNsYXNzIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgewotcHVibGljOgotICAgIGV4cGxp
Y2l0IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoU2Nyb2xsYWJsZUFyZWEqKTsKLSAgICB2aXJ0
dWFsIH5TY3JvbGxBbmltYXRvckNocm9taXVtTWFjKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2Ny
b2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwg
ZmxvYXQgbXVsdGlwbGllcik7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCi0gICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JikgT1ZFUlJJREU7Ci0jaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQotICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsK
LSNlbmRpZgotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpOwot
Ci0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bv
c2l0aW9uKTsKLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGZsb2F0IGRlbHRhWCk7
Ci0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBkZWx0YVkpOwotCi0gICAg
dm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIG5ld1Bvc2l0aW9uKTsKLQotICAgIHZvaWQgc2V0SXNEcmF3aW5nSW50b0xheWVyKGJv
b2wgYikgeyBtX2RyYXdpbmdJbnRvTGF5ZXIgPSBiOyB9Ci0gICAgYm9vbCBpc0RyYXdpbmdJbnRv
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdJbnRvTGF5ZXI7IH0KLQotICAgIGJvb2wg
aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNldElzQWN0aXZlKCk7Ci0KLSNp
ZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxlclN0eWxl
KCk7Ci0KLSAgICBib29sIHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0OwotICAg
IHZvaWQgc3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0gICAgdm9pZCBzdG9wU2Nyb2xsYmFy
UGFpbnRUaW1lcigpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1i
UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPiBtX3Nj
cm9sbEFuaW1hdGlvbkhlbHBlcjsKLSAgICBSZXRhaW5QdHI8U2Nyb2xsQW5pbWF0aW9uSGVscGVy
RGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7Ci0KLSNpZiBVU0UoV0tf
U0NST0xMQkFSX1BBSU5URVIpCi0gICAgUmV0YWluUHRyPFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJSZWY+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPFNj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJEZWxlZ2F0ZTsKLSAgICBSZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlOwotCi0gICAgdm9pZCBpbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRpbWVyPFNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+Kik7Ci0gICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYz4gbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKLSNlbmRpZgotICAgIAotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRl
cmVkQ29udGVudEFyZWEoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250
ZW50QXJlYSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJl
YSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCk7Ci0gICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRzUmVzaXplZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB3
aWxsRW5kTGl2ZVJlc2l6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZFNob3co
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgY29uc3Q7Ci0g
ICAgdm9pZCBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGRpZEVuZFNj
cm9sbEdlc3R1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2Fs
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFs
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlSG9yaXpv
bnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLQotICAgIHZvaWQgc2V0TmVlZHNTY3JvbGxlclN0
eWxlVXBkYXRlKGJvb2wgbmVlZHNVcGRhdGUpIHsgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUg
PSBuZWVkc1VwZGF0ZTsgfQotICAgIGJvb2wgbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKCkgY29u
c3QgeyByZXR1cm4gbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGU7IH0KLQotICAgIGZsb2F0IGFk
anVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsKLSAgICBmbG9hdCBh
ZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7Ci0gICAgRmxvYXRQ
b2ludCBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBib29sIGFsbG93c1ZlcnRp
Y2FsU3RyZXRjaGluZygpIGNvbnN0OwotICAgIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hp
bmcoKSBjb25zdDsKLSAgICBib29sIHBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxv
YXQgZGVsdGFZKTsKLSAgICB2b2lkIHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgdm9pZCBzbmFwUnVi
YmVyQmFuZFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKTsKLSAg
ICB2b2lkIHNtb290aFNjcm9sbFdpdGhFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsK
LSAgICB2b2lkIGJlZ2luU2Nyb2xsR2VzdHVyZSgpOwotICAgIHZvaWQgZW5kU2Nyb2xsR2VzdHVy
ZSgpOwotCi0gICAgYm9vbCBtX2luU2Nyb2xsR2VzdHVyZTsKLSAgICBib29sIG1fbW9tZW50dW1T
Y3JvbGxJblByb2dyZXNzOwotICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHM7Ci0KLSAg
ICBib29sIG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPbkxlZnQ7Ci0gICAgYm9vbCBtX3Njcm9s
bGVySW5pdGlhbGx5UGlubmVkT25SaWdodDsKLSAgICBpbnQgbV9jdW11bGF0aXZlSG9yaXpvbnRh
bFNjcm9sbDsKLSAgICBib29sIG1fZGlkQ3VtdWxhdGl2ZUhvcml6b250YWxTY3JvbGxFdmVyU3dp
dGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9mUGluOwotCi0gICAgQ0ZUaW1lSW50ZXJ2YWwgbV9sYXN0
TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7Ci0gICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxE
ZWx0YTsKLSAgICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xsRm9yY2U7Ci0gICAgRmxvYXRTaXpl
IG1fbW9tZW50dW1WZWxvY2l0eTsKLQotICAgIC8vIFJ1YmJlciBiYW5kIHN0YXRlLgotICAgIENG
VGltZUludGVydmFsIG1fc3RhcnRUaW1lOwotICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsK
LSAgICBGbG9hdFBvaW50IG1fb3JpZ09yaWdpbjsKLSAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2Np
dHk7Ci0gICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9zbmFwUnViYmVyQmFu
ZFRpbWVyOwotI2VuZGlmCi0gICAgYm9vbCBtX2RyYXdpbmdJbnRvTGF5ZXI7Ci0gICAgYm9vbCBt
X2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7Ci0gICAgYm9vbCBtX25lZWRzU2Nyb2xsZXJTdHls
ZVVwZGF0ZTsKLSAgICBJbnRSZWN0IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0OwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNTA0Y2U4ODZjMzRmODJhYTM3YzZlYzk2Mzk3ZmI2NTU0YzU0YTg1My4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tCisrKyAvZGV2L251bGwK
QEAgLTEsMTM0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+Ci0KLSNp
bmNsdWRlICJTY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgiCi0KLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAiU2Ny
b2xsYWJsZUFyZWEuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaCIKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KLSNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0jaWYgIWRlZmluZWQoTUFD
X09TX1hfVkVSU0lPTl8xMF82KSB8fCBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEIDwgTUFD
X09TX1hfVkVSU0lPTl8xMF82Ci1AcHJvdG9jb2wgTlNBbmltYXRpb25EZWxlZ2F0ZQotQGVuZAot
Ci1AaW50ZXJmYWNlIE5TUHJvY2Vzc0luZm8gKFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNFeHQp
Ci0tIChOU1RpbWVJbnRlcnZhbClzeXN0ZW1VcHRpbWU7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBOU1Byb2Nlc3NJbmZvIChTY3JvbGxBbmltYXRvckNocm9taXVtTWFjRXh0KQotLSAoTlNUaW1l
SW50ZXJ2YWwpc3lzdGVtVXB0aW1lCi17Ci0gICAgLy8gR2V0IGhvdyBsb25nIHN5c3RlbSBoYXMg
YmVlbiB1cC4gRm91bmQgYnkgbG9va2luZyBnZXR0aW5nICJib290dGltZSIgZnJvbSB0aGUga2Vy
bmVsLgotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBib290dGltZSA9IHswfTsKLSAgICBpZiAo
IWJvb3R0aW1lLnR2X3NlYykgewotICAgICAgICBpbnQgbWliWzJdID0ge0NUTF9LRVJOLCBLRVJO
X0JPT1RUSU1FfTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoYm9vdHRpbWUpOwotICAg
ICAgICBpZiAoLTEgPT0gc3lzY3RsKG1pYiwgMiwgJmJvb3R0aW1lLCAmc2l6ZSwgMCwgMCkpCi0g
ICAgICAgICAgICBib290dGltZS50dl9zZWMgPSAwOwotICAgIH0KLSAgICBzdHJ1Y3QgdGltZXZh
bCBub3c7Ci0gICAgaWYgKGJvb3R0aW1lLnR2X3NlYyAmJiAtMSAhPSBnZXR0aW1lb2ZkYXkoJm5v
dywgMCkpIHsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgdXB0aW1lOwotICAgICAgICB0aW1lcnN1
Yigmbm93LCAmYm9vdHRpbWUsICZ1cHRpbWUpOwotICAgICAgICBOU1RpbWVJbnRlcnZhbCByZXN1
bHQgPSB1cHRpbWUudHZfc2VjICsgKHVwdGltZS50dl91c2VjIC8gMUUrNik7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotQGVuZAotI2VuZGlmCi0KLUBp
bnRlcmZhY2UgTlNPYmplY3QgKFNjcm9sbEFuaW1hdGlvbkhlbHBlckRldGFpbHMpCi0tIChpZClp
bml0V2l0aERlbGVnYXRlOihpZClkZWxlZ2F0ZTsKLS0gKHZvaWQpX3N0b3BSdW47Ci0tIChCT09M
KV9pc0FuaW1hdGluZzsKLS0gKE5TUG9pbnQpdGFyZ2V0T3JpZ2luOwotLSAoQ0dGbG9hdClfcHJv
Z3Jlc3M7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUg
OiBOU09iamVjdAotewotICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9h
bmltYXRvcjsKLX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOwotQGVuZAotCi1zdGF0aWMgTlNT
aXplIGFicyhOU1NpemUgc2l6ZSkKLXsKLSAgICBOU1NpemUgZmluYWxTaXplID0gc2l6ZTsKLSAg
ICBpZiAoZmluYWxTaXplLndpZHRoIDwgMCkKLSAgICAgICAgZmluYWxTaXplLndpZHRoID0gLWZp
bmFsU2l6ZS53aWR0aDsKLSAgICBpZiAoZmluYWxTaXplLmhlaWdodCA8IDApCi0gICAgICAgIGZp
bmFsU2l6ZS5oZWlnaHQgPSAtZmluYWxTaXplLmhlaWdodDsKLSAgICByZXR1cm4gZmluYWxTaXpl
OyAgICAKLX0KLQotQGltcGxlbWVudGF0aW9uIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
Ci0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfYW5pbWF0b3IgPSBz
Y3JvbGxBbmltYXRvcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzY3JvbGxBbmlt
YXRvckRlc3Ryb3llZAotewotICAgIF9hbmltYXRvciA9IDA7Ci19Ci0KLS0gKE5TUmVjdClib3Vu
ZHMKLXsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci0K
LSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IF9hbmltYXRvci0+Y3Vy
cmVudFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIE5TTWFrZVJlY3QoY3VycmVudFBvc2l0aW9uLngo
KSwgY3VycmVudFBvc2l0aW9uLnkoKSwgMCwgMCk7Ci19Ci0KLS0gKHZvaWQpX2ltbWVkaWF0ZVNj
cm9sbFRvUG9pbnQ6KE5TUG9pbnQpbmV3UG9zaXRpb24KLXsKLSAgICBpZiAoIV9hbmltYXRvcikK
LSAgICAgICAgcmV0dXJuOwotICAgIF9hbmltYXRvci0+aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZv
clNjcm9sbEFuaW1hdGlvbihuZXdQb3NpdGlvbik7Ci19Ci0KLS0gKE5TUG9pbnQpX3BpeGVsQWxp
Z25Qcm9wb3NlZFNjcm9sbFBvc2l0aW9uOihOU1BvaW50KW5ld09yaWdpbgotewotICAgIHJldHVy
biBuZXdPcmlnaW47Ci19Ci0KLS0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFzZTooTlNTaXplKXNp
emUKLXsKLSAgICByZXR1cm4gYWJzKHNpemUpOwotfQotCi0tIChOU1NpemUpY29udmVydFNpemVG
cm9tQmFzZTooTlNTaXplKXNpemUKLXsKLSAgICByZXR1cm4gYWJzKHNpemUpOwotfQotCi0tIChO
U1NpemUpY29udmVydFNpemVUb0JhY2tpbmc6KE5TU2l6ZSlzaXplCi17Ci0gICAgcmV0dXJuIGFi
cyhzaXplKTsKLX0KLQotLSAoTlNTaXplKWNvbnZlcnRTaXplRnJvbUJhY2tpbmc6KE5TU2l6ZSlz
aXplCi17Ci0gICAgcmV0dXJuIGFicyhzaXplKTsKLX0KLQotLSAoaWQpc3VwZXJ2aWV3Ci17Ci0g
ICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoaWQpZG9jdW1lbnRWaWV3Ci17Ci0gICAgcmV0dXJuIG5p
bDsKLX0KLQotLSAoaWQpd2luZG93Ci17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClf
cmVjdXJzaXZlUmVjb21wdXRlVG9vbFRpcHMKLXsKLX0KLQotQGVuZAotCi0jaWYgVVNFKFdLX1ND
Uk9MTEJBUl9QQUlOVEVSKQotCi1AaW50ZXJmYWNlIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWdhdGUgOiBOU09iamVjdAotewotICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWMqIF9hbmltYXRvcjsKLX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZQotCi0tIChp
ZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjKilzY3JvbGxBbmltYXRvcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIF9hbmltYXRvciA9IHNjcm9s
bEFuaW1hdG9yOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNjcm9sbEFuaW1hdG9y
RGVzdHJveWVkCi17Ci0gICAgX2FuaW1hdG9yID0gMDsKLX0KLQotLSAoTlNSZWN0KWNvbnRlbnRB
cmVhUmVjdEZvclNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAg
IHJldHVybiBOU1plcm9SZWN0OwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUg
PSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmNvbnRlbnRzU2l6ZSgpOwotICAgIHJldHVy
biBOU01ha2VSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVp
Z2h0KCkpOwotfQotCi0tIChCT09MKWluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1wUGFpcjooaWQp
c2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0g
ICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIHJldHVybiBfYW5p
bWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpOwotfQotCi0tIChOU1BvaW50
KW1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxl
ckltcFBhaXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBpZiAo
IV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwotCi0gICAgcmV0dXJuIF9h
bmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKLX0KLQot
LSAoTlNQb2ludClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciBjb252ZXJ0Q29u
dGVudFBvaW50OihOU1BvaW50KXBvaW50SW5Db250ZW50QXJlYSB0b1Njcm9sbGVySW1wOihpZClz
Y3JvbGxlckltcAotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwotICAgIGlm
ICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7Ci0KLSAgICBXZWJDb3Jl
OjpTY3JvbGxiYXIqIHNjcm9sbGJhciA9IDA7Ci0gICAgaWYgKHdrU2Nyb2xsYmFyUGFpbnRlcklz
SG9yaXpvbnRhbCgoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wKSkKLSAgICAgICAg
c2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xs
YmFyKCk7Ci0gICAgZWxzZSAKLSAgICAgICAgc2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxh
YmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotCi0gICAgLy8gSXQgaXMgcG9zc2libGUg
dG8gaGF2ZSBhIG51bGwgc2Nyb2xsYmFyIGhlcmUgc2luY2UgaXQgaXMgcG9zc2libGUgZm9yIHRo
aXMgZGVsZWdhdGUKLSAgICAvLyBtZXRob2QgdG8gYmUgY2FsbGVkIGJldHdlZW4gdGhlIG1vbWVu
dCB3aGVuIGEgc2Nyb2xsYmFyIGhhcyBiZWVuIHNldCB0byAwIGFuZCB0aGUKLSAgICAvLyBtb21l
bnQgd2hlbiBpdHMgZGVzdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQuIFdlIHNob3VsZCBwcm9iYWJs
eSBkZS1jb3VwbGUgc29tZQotICAgIC8vIG9mIHRoZSBjbGVhbi11cCB3b3JrIGluIFNjcm9sbGJh
clRoZW1lQ2hyb21pdW1NYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoKSB0byBhdm9pZCB0aGlzCi0g
ICAgLy8gaXNzdWUuCi0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBXZWJDb3Jl
OjpJbnRQb2ludCgpOwotICAgIAotICAgIHJldHVybiBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXcoV2ViQ29yZTo6SW50UG9pbnQocG9pbnRJbkNvbnRlbnRBcmVhKSk7Ci19Ci0K
LS0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgc2V0Q29udGVudEFy
ZWFOZWVkc0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHNj
cm9sbGVySW1wUGFpcik7Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3QpOwotfQotCi0tICh2b2lkKXNj
cm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIHVwZGF0ZVNjcm9sbGVyU3R5bGVGb3JO
ZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSluZXdSZWNvbW1lbmRl
ZFNjcm9sbGVyU3R5bGUKLXsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgd2tTZXRTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKChXS1Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyUmVmKXNjcm9sbGVySW1wUGFpciwgbmV3UmVjb21tZW5kZWRTY3JvbGxl
clN0eWxlKTsKLSAgICBfYW5pbWF0b3ItPnVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKLX0KLQotQGVu
ZAotCi1AaW50ZXJmYWNlIFNjcm9sbGJhclBhcnRBbmltYXRpb24gOiBOU0FuaW1hdGlvbgotewot
ICAgIFJldGFpblB0cjxXS1Njcm9sbGJhclBhaW50ZXJSZWY+IF9zY3JvbGxlclBhaW50ZXI7Ci0g
ICAgV2ViQ29yZTo6U2Nyb2xsYmFyUGFydCBfcGFydDsKLSAgICBXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7Ci0gICAgQ0dGbG9hdCBfaW5pdGlhbEFscGhhOwot
ICAgIENHRmxvYXQgX25ld0FscGhhOwotfQotLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXJQYWludGVy
OihXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdlYkNvcmU6OlNj
cm9sbGJhclBhcnQpcGFydCBzY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IgYW5pbWF0ZUFscGhhVG86KENHRmxvYXQpbmV3QWxw
aGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOwotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gU2Nyb2xsYmFyUGFydEFuaW1hdGlvbgotCi0tIChpZClpbml0V2l0aFNjcm9sbGJhclBh
aW50ZXI6KFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29y
ZTo6U2Nyb2xsYmFyUGFydClwYXJ0IHNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvciBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdClu
ZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRXaXRoRHVyYXRpb246ZHVyYXRpb24gYW5pbWF0aW9uQ3VydmU6TlNBbmltYXRp
b25FYXNlSW5PdXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAK
LSAgICBfc2Nyb2xsZXJQYWludGVyID0gc2Nyb2xsZXJQYWludGVyOwotICAgIF9wYXJ0ID0gcGFy
dDsKLSAgICBfYW5pbWF0b3IgPSBzY3JvbGxBbmltYXRvcjsKLSAgICBfaW5pdGlhbEFscGhhID0g
X3BhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ID8gd2tTY3JvbGxiYXJQYWludGVyS25vYkFscGhh
KF9zY3JvbGxlclBhaW50ZXIuZ2V0KCkpIDogd2tTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShf
c2Nyb2xsZXJQYWludGVyLmdldCgpKTsKLSAgICBfbmV3QWxwaGEgPSBuZXdBbHBoYTsKLSAgICAK
LSAgICByZXR1cm4gc2VsZjsgICAgCi19Ci0KLS0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihO
U0FuaW1hdGlvblByb2dyZXNzKXByb2dyZXNzCi17Ci0gICAgW3N1cGVyIHNldEN1cnJlbnRQcm9n
cmVzczpwcm9ncmVzc107Ci0KLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQ0dGbG9hdCBjdXJyZW50QWxwaGE7Ci0gICAgaWYgKF9pbml0aWFsQWxwaGEgPiBfbmV3
QWxwaGEpCi0gICAgICAgIGN1cnJlbnRBbHBoYSA9IDEgLSBwcm9ncmVzczsKLSAgICBlbHNlCi0g
ICAgICAgIGN1cnJlbnRBbHBoYSA9IHByb2dyZXNzOwotICAgIAotICAgIGlmIChfcGFydCA9PSBX
ZWJDb3JlOjpUaHVtYlBhcnQpCi0gICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBo
YShfc2Nyb2xsZXJQYWludGVyLmdldCgpLCBjdXJyZW50QWxwaGEpOwotICAgIGVsc2UKLSAgICAg
ICAgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShfc2Nyb2xsZXJQYWludGVyLmdldCgp
LCBjdXJyZW50QWxwaGEpOwotCi0gICAgLy8gSW52YWxpZGF0ZSB0aGUgc2Nyb2xsYmFycyBzbyB0
aGF0IHRoZXkgcGFpbnQgdGhlIGFuaW1hdGlvbgotICAgIGlmIChXZWJDb3JlOjpTY3JvbGxiYXIq
IHZlcnRpY2FsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNh
bFNjcm9sbGJhcigpKQotICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZVJlY3Qo
V2ViQ29yZTo6SW50UmVjdCgwLCAwLCB2ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgdmVydGlj
YWxTY3JvbGxiYXItPmhlaWdodCgpKSk7Ci0gICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhciA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpKQotICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVj
dChXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIGhvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCksIGhv
cml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKSk7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsQW5pbWF0
b3JEZXN0cm95ZWQKLXsKLSAgICBbc2VsZiBzdG9wQW5pbWF0aW9uXTsKLSAgICBfYW5pbWF0b3Ig
PSAwOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIDog
TlNPYmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0ZT4KLXsKLSAgICBXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7Ci0KLSAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbj4gX3ZlcnRpY2FsS25vYkFuaW1hdGlvbjsKLSAgICBSZXRhaW5QdHI8U2Nyb2xs
YmFyUGFydEFuaW1hdGlvbj4gX2hvcml6b250YWxLbm9iQW5pbWF0aW9uOwotCi0gICAgUmV0YWlu
UHRyPFNjcm9sbGJhclBhcnRBbmltYXRpb24+IF92ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uOwotICAg
IFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfaG9yaXpvbnRhbFRyYWNrQW5pbWF0
aW9uOwotfQotLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7Ci0tICh2b2lkKWNhbmNlbEFuaW1hdGlv
bnM7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUKLQot
LSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfYW5pbWF0b3IgPSBz
Y3JvbGxBbmltYXRvcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZCljYW5jZWxBbmlt
YXRpb25zCi17Ci0gICAgW192ZXJ0aWNhbEtub2JBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlv
bl07Ci0gICAgW19ob3Jpem9udGFsS25vYkFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsK
LSAgICBbX3ZlcnRpY2FsVHJhY2tBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07Ci0gICAg
W19ob3Jpem9udGFsVHJhY2tBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07Ci19Ci0KLS0g
KE5TUmVjdCljb252ZXJ0UmVjdFRvQmFja2luZzooTlNSZWN0KWFSZWN0Ci17Ci0gICAgcmV0dXJu
IGFSZWN0OwotfQotCi0tIChOU1JlY3QpY29udmVydFJlY3RGcm9tQmFja2luZzooTlNSZWN0KWFS
ZWN0Ci17Ci0gICAgcmV0dXJuIGFSZWN0OwotfQotCi0jaWYgIVBMQVRGT1JNKENIUk9NSVVNKQot
LSAoQ0FMYXllciAqKWxheWVyCi17Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgaWYgKCFfYW5pbWF0b3ItPmlzRHJhd2luZ0ludG9MYXllcigpKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGF0dGVtcHQgdG8gcmV0
dXJuIGFuIGFjdHVhbCBsYXllci4KLSAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXllciA9IFtb
Q0FMYXllciBhbGxvY10gaW5pdF07Ci0gICAgcmV0dXJuIGR1bW15TGF5ZXI7Ci19Ci0jZW5kaWYK
LQotLSAodm9pZClzZXRVcEFuaW1hdGlvbjooUmV0YWluUHRyPFNjcm9sbGJhclBhcnRBbmltYXRp
b24+JilzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjooV0tTY3JvbGxiYXJQ
YWludGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0KXBh
cnQgYW5pbWF0ZUFscGhhVG86KENHRmxvYXQpbmV3QWxwaGEgZHVyYXRpb246KE5TVGltZUludGVy
dmFsKWR1cmF0aW9uCi17Ci0gICAgLy8gSWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHRoZSBwYWdl
LCB0aGVuIHRoZSBzY3JvbGxiYXJzIG11c3QgYmUgYW5pbWF0ZWQgaGVyZS4gCi0gICAgLy8gVGhp
cyBvdmVycmlkZXMgdGhlIGVhcmx5IHJldHVybnMuCi0gICAgYm9vbCBtdXN0QW5pbWF0ZSA9IF9h
bmltYXRvci0+aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpOwotCi0gICAgaWYgKF9hbmltYXRv
ci0+c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYgIW11c3RBbmltYXRlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5zaG91bGRT
dXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpICYmICFtdXN0QW5pbWF0ZSkgewotICAgICAgICBfYW5p
bWF0b3ItPnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYW5p
bWF0ZSBub3csIHNvIHN0b3AgdGhlIHRpbWVyLgotICAgIF9hbmltYXRvci0+c3RvcFNjcm9sbGJh
clBhaW50VGltZXIoKTsKLQotICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgYW5pbWF0aW5nLCBz
dG9wCi0gICAgaWYgKHNjcm9sbGJhclBhcnRBbmltYXRpb24pIHsKLSAgICAgICAgW3Njcm9sbGJh
clBhcnRBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07Ci0gICAgICAgIHNjcm9sbGJhclBh
cnRBbmltYXRpb24gPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKHBhcnQgPT0gV2ViQ29yZTo6VGh1
bWJQYXJ0ICYmICF3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVy
KSkgewotICAgICAgICBpZiAobmV3QWxwaGEgPT0gMSkgewotICAgICAgICAgICAgSW50UmVjdCB0
aHVtYlJlY3QgPSBJbnRSZWN0KHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KHNjcm9sbGVyUGFp
bnRlcikpOwotICAgICAgICAgICAgX2FuaW1hdG9yLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJl
Y3QodGh1bWJSZWN0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBfYW5pbWF0b3ItPnNl
dFZpc2libGVTY3JvbGxlclRodW1iUmVjdChJbnRSZWN0KCkpOwotICAgIH0KLQotICAgIFtOU0Fu
aW1hdGlvbkNvbnRleHQgYmVnaW5Hcm91cGluZ107Ci0gICAgW1tOU0FuaW1hdGlvbkNvbnRleHQg
Y3VycmVudENvbnRleHRdIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICBzY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uLmFkb3B0TlMoW1tTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0
aFNjcm9sbGJhclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0OnBhcnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3I6X2FuaW1hdG9yIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRl
QWxwaGFUbzpuZXdBbHBoYSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsKLSAgICBb
c2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNB
bmltYXRpb25Ob25ibG9ja2luZ107Ci0gICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24uZ2V0KCkg
c3RhcnRBbmltYXRpb25dOwotICAgIFtOU0FuaW1hdGlvbkNvbnRleHQgZW5kR3JvdXBpbmddOwot
fQotCi0tICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBhbmltYXRlS25vYkFscGhh
VG86KENHRmxvYXQpbmV3S25vYkFscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlv
bgotewotICAgIGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS1Njcm9s
bGJhclBhaW50ZXJSZWYgc2Nyb2xsZXJQYWludGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlclJlZilz
Y3JvbGxlckltcDsKLSAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKHNjcm9s
bGVyUGFpbnRlcikpCi0gICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl9ob3Jpem9udGFsS25v
YkFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6
VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07
Ci0gICAgZWxzZQotICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpfdmVydGljYWxLbm9iQW5p
bWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpUaHVt
YlBhcnQgYW5pbWF0ZUFscGhhVG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKLX0K
LQotLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAgYW5pbWF0ZVRyYWNrQWxwaGFU
bzooQ0dGbG9hdCluZXdUcmFja0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlv
bgotewotICAgIGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS1Njcm9s
bGJhclBhaW50ZXJSZWYgc2Nyb2xsZXJQYWludGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlclJlZilz
Y3JvbGxlckltcDsKLSAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKHNjcm9s
bGVyUGFpbnRlcikpCi0gICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl9ob3Jpem9udGFsVHJh
Y2tBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6
OkJhY2tUcmFja1BhcnQgYW5pbWF0ZUFscGhhVG86bmV3VHJhY2tBbHBoYSBkdXJhdGlvbjpkdXJh
dGlvbl07Ci0gICAgZWxzZQotICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpfdmVydGljYWxU
cmFja0FuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29y
ZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1
cmF0aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAgb3Zlcmxh
eVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86KE5TVUludGVnZXIpbmV3T3ZlcmxheVNjcm9sbGVyU3Rh
dGUKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXApOwotICAgIFVOVVNFRF9QQVJBTShu
ZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZSk7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsQW5pbWF0b3JEZXN0
cm95ZWQKLXsKLSAgICBfYW5pbWF0b3IgPSAwOwotICAgIFtfdmVydGljYWxLbm9iQW5pbWF0aW9u
LmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKLSAgICBbX2hvcml6b250YWxLbm9iQW5p
bWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKLSAgICBbX3ZlcnRpY2FsVHJh
Y2tBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotICAgIFtfaG9yaXpv
bnRhbFRyYWNrQW5pbWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKLX0KLQot
QGVuZAotCi0jZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpj
cmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQotewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhzY3JvbGxhYmxlQXJlYSkpOwotfQot
Ci1zdGF0aWMgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyogY2hyb21pdW1TY3JvbGxiYXJUaGVt
ZSgpCi17Ci0gICAgU2Nyb2xsYmFyVGhlbWUqIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xsYmFyVGhl
bWU6OnRoZW1lKCk7Ci0gICAgcmV0dXJuICFzY3JvbGxiYXJUaGVtZS0+aXNNb2NrVGhlbWUoKSA/
IHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPihzY3JvbGxiYXJUaGVtZSkg
OiAwOwotfQotCi1TY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKLSAgICA6IFNjcm9sbEFuaW1h
dG9yKHNjcm9sbGFibGVBcmVhKQotI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLSAgICAs
IG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIodGhpcywgJlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpCi0jZW5kaWYKLSNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgLCBtX2luU2Nyb2xsR2VzdHVyZShmYWxzZSkKLSAgICAs
IG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKGZhbHNlKQotICAgICwgbV9pZ25vcmVNb21lbnR1
bVNjcm9sbHMoZmFsc2UpCi0gICAgLCBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCgwKQot
ICAgICwgbV9zdGFydFRpbWUoMCkKLSAgICAsIG1fc25hcFJ1YmJlckJhbmRUaW1lcih0aGlzLCAm
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKQotI2Vu
ZGlmCi0gICAgLCBtX2RyYXdpbmdJbnRvTGF5ZXIoZmFsc2UpCi0gICAgLCBtX2hhdmVTY3JvbGxl
ZFNpbmNlUGFnZUxvYWQoZmFsc2UpCi0gICAgLCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZShm
YWxzZSkKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmFkb3B0TlMoW1tT
Y3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRv
cjp0aGlzXSk7Ci0gICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuYWRvcHROUyhbW05TQ2xhc3NG
cm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxwZXIiKSBhbGxvY10gaW5pdFdpdGhEZWxl
Z2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpXSk7Ci0KLSAgICBpZiAo
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKLSAgICAg
ICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciA9IHdrTWFrZVNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKSk7Ci0g
ICAgICAgIG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOwotICAgIH0K
LX0KLQotU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6flNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMoKQotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAg
ICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFu
aW1hdG9yRGVzdHJveWVkXTsKLSAgICAgICAgWyhpZCltX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07Ci0gICAgICAgIFttX3Njcm9s
bEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsK
LSAgICB9Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKLXsKLSAgICBtX2hhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQgPSB0cnVlOwotCi0jaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotICAg
IHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwg
c3RlcCwgbXVsdGlwbGllcik7Ci0jZW5kaWYKLQotICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkFwcGxlU2Nyb2xsQW5pbWF0aW9uRW5h
YmxlZCJdIHx8ICFtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFy
aXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKLQotICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxC
eVBpeGVsKQotICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlv
biwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwotCi0gICAgZmxvYXQgY3VycmVudFBv
cyA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2N1cnJlbnRQb3NYIDog
bV9jdXJyZW50UG9zWTsKLSAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjpt
aW48ZmxvYXQ+KGN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxm
bG9hdD4obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMCk7Ci0g
ICAgaWYgKGN1cnJlbnRQb3MgPT0gbmV3UG9zKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBOU1BvaW50IG5ld1BvaW50OwotICAgIGlmIChbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0
KCkgX2lzQW5pbWF0aW5nXSkgewotICAgICAgICBOU1BvaW50IHRhcmdldE9yaWdpbiA9IFttX3Nj
cm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSB0YXJnZXRPcmlnaW5dOwotICAgICAgICBuZXdQb2lu
dCA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBOU01ha2VQb2ludChuZXdQ
b3MsIHRhcmdldE9yaWdpbi55KSA6IE5TTWFrZVBvaW50KHRhcmdldE9yaWdpbi54LCBuZXdQb3Mp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld1BvaW50ID0gb3JpZW50YXRpb24gPT0gSG9yaXpv
bnRhbFNjcm9sbGJhciA/IE5TTWFrZVBvaW50KG5ld1BvcywgbV9jdXJyZW50UG9zWSkgOiBOU01h
a2VQb2ludChtX2N1cnJlbnRQb3NYLCBuZXdQb3MpOwotICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT5kaWRTdGFydEFuaW1hdGVkU2Nyb2xsKCk7Ci0gICAgfQotICAgIFttX3Njcm9sbEFuaW1hdGlv
bkhlbHBlci5nZXQoKSBzY3JvbGxUb1BvaW50Om5ld1BvaW50XTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGxUb09mZnNldFdpdGhv
dXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQotewotICAgIFttX3Njcm9sbEFu
aW1hdGlvbkhlbHBlci5nZXQoKSBfc3RvcFJ1bl07Ci0gICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2lu
dChvZmZzZXQpOwotfQotCi1mbG9hdCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RT
Y3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBp
ZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkp
Ci0gICAgICAgIHJldHVybiBwb3NpdGlvbjsKLQotICAgIHJldHVybiBtYXg8ZmxvYXQ+KG1pbjxm
bG9hdD4ocG9zaXRpb24sIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkg
LSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOwotfQotCi1mbG9hdCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeShm
bG9hdCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0
cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCi0gICAgICAgIHJldHVybiBwb3NpdGlvbjsK
LQotICAgIHJldHVybiBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24sIG1fc2Nyb2xsYWJs
ZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJs
ZUhlaWdodCgpKSwgMCk7Ci19Ci0KLUZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3Jv
bGxpbmdUb0NvbnRlbnRFZGdlKCkpCi0gICAgICAgIHJldHVybiBwb3NpdGlvbjsKLQotICAgIGZs
b2F0IG5ld1ggPSBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueCgpLCBtX3Njcm9sbGFi
bGVBcmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJs
ZVdpZHRoKCkpLCAwKTsKLSAgICBmbG9hdCBuZXdZID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBv
c2l0aW9uLnkoKSwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBt
X3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKLQotICAgIHJldHVybiBGbG9h
dFBvaW50KG5ld1gsIG5ld1kpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pCi17
Ci0gICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25J
Zk5lY2Vzc2FyeShuZXdQb3NpdGlvbik7Ci0gCi0gICAgbV9jdXJyZW50UG9zWCA9IGFkanVzdGVk
UG9zaXRpb24ueCgpOwotICAgIG1fY3VycmVudFBvc1kgPSBhZGp1c3RlZFBvc2l0aW9uLnkoKTsK
LSAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWChmbG9hdCBkZWx0YVgpCi17Ci0gICAg
ZmxvYXQgbmV3UG9zWCA9IGFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KG1fY3VycmVu
dFBvc1ggKyBkZWx0YVgpOwotICAgIAotICAgIGlmIChuZXdQb3NYID09IG1fY3VycmVudFBvc1gp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2N1cnJlbnRQb3NYID0gbmV3UG9zWDsKLSAg
ICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBkZWx0YVkpCi17Ci0gICAgZmxv
YXQgbmV3UG9zWSA9IGFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5KG1fY3VycmVudFBv
c1kgKyBkZWx0YVkpOwotICAgIAotICAgIGlmIChuZXdQb3NZID09IG1fY3VycmVudFBvc1kpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2N1cnJlbnRQb3NZID0gbmV3UG9zWTsKLSAgICBu
b3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIG5ld1Bvc2l0aW9uKQotewotICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdGlvbkhlbHBl
cik7Ci0gICAgQ0dGbG9hdCBwcm9ncmVzcyA9IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQo
KSBfcHJvZ3Jlc3NdOwotICAgIAotICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3UG9zaXRp
b24pOwotCi0gICAgaWYgKHByb2dyZXNzID49IDEuMCkKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+ZGlkQ29tcGxldGVBbmltYXRlZFNjcm9sbCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpCi17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRBcmVhU2Nyb2xsZWQo
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6
Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxi
YXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIHdrQ29udGVudEFyZWFXaWxsUGFpbnQo
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAotewotICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tNb3VzZUVu
dGVyZWRDb250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0K
LQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVh
KCkgY29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0g
ICAgICAgIHdrTW91c2VFeGl0ZWRDb250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZU1v
dmVkSW5Db250ZW50QXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQ
SUF2YWlsYWJsZSgpKQotICAgICAgICB3a01vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKG1fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OndpbGxTdGFydExpdmVSZXNpemUoKQotewotICAgIGlmIChpc1Njcm9sbGJhck92
ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tXaWxsU3RhcnRMaXZlUmVzaXplKG1fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRBcmVhUmVzaXplZCht
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCi17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a1dpbGxFbmRMaXZlUmVzaXplKG1f
c2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0Ci17Ci0gICAgaWYgKGlz
U2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRBcmVhRGlk
U2hvdyhtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZEhpZGUoKSBjb25zdAotewotICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tDb250ZW50
QXJlYURpZEhpZGUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0KLXZv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29u
c3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAg
IHdrRGlkQmVnaW5TY3JvbGxHZXN0dXJlKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0
KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEVuZFNjcm9sbEdl
c3R1cmUoKSBjb25zdAotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUo
KSkKLSAgICAgICAgd2tEaWRFbmRTY3JvbGxHZXN0dXJlKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGlmICghaXNT
Y3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgaWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21pdW1TY3Jv
bGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0g
dGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgd2tTY3JvbGxi
YXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUu
Z2V0KCkpOwotICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBwYWludGVyLCBmYWxzZSk7Ci0gICAgICAgIGlm
IChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKLSAgICAgICAgICAgIHdrU2V0U2Ny
b2xsYmFyUGFpbnRlcktub2JBbHBoYShwYWludGVyLCAxKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQotewotICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxh
YmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjKiB0aGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhlbWUoKSkgewotICAgICAgICBXS1Njcm9s
bGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9s
bGJhcik7Ci0gICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG5p
bCk7Ci0gICAgICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5pbCwgZmFsc2UpOwotICAgIH0KLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQotewotICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxh
YmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjKiB0aGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhlbWUoKSkgewotICAgICAgICBXS1Njcm9s
bGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9s
bGJhcik7Ci0gICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG1f
c2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpKTsKLSAgICAgICAgd2tTZXRQYWludGVyRm9y
UGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgcGFp
bnRlciwgdHJ1ZSk7Ci0gICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUo
KSkKLSAgICAgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShwYWludGVyLCAx
KTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92
ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKCFp
c1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21pdW1TY3JvbGxiYXJU
aGVtZSgpKSB7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0gdGhlbWUt
PnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgd2tTY3JvbGxiYXJQYWlu
dGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbmlsKTsKLSAgICAgICAgd2tTZXRQYWludGVyRm9yUGFp
bnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgbmlsLCB0
cnVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y2FuY2Vs
QW5pbWF0aW9ucygpCi17Ci0gICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gZmFsc2U7
Ci0KLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAgICAg
aWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQotICAgICAgICAgICAgc3RvcFNjcm9s
bGJhclBhaW50VGltZXIoKTsKLSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdl
dCgpIGNhbmNlbEFuaW1hdGlvbnNdOwotICAgIH0KLX0KLQotI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKLQotc3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQg
PSAwLjEwZjsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kU3RpZmZuZXNzID0gMjA7Ci1z
dGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8gPSAx
Owotc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9y
ZVN0cmV0Y2ggPSAxMDsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kQW1wbGl0dWRlID0g
MC4zMWY7Ci1zdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZFBlcmlvZCA9IDEuNmY7Ci0KLXN0
YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoZmxvYXQgaW5pdGlhbFBvc2l0aW9u
LCBmbG9hdCBpbml0aWFsVmVsb2NpdHksIGZsb2F0IGVsYXBzZWRUaW1lKQotewotICAgIGZsb2F0
IGFtcGxpdHVkZSA9IHJ1YmJlcmJhbmRBbXBsaXR1ZGU7Ci0gICAgZmxvYXQgcGVyaW9kID0gcnVi
YmVyYmFuZFBlcmlvZDsKLSAgICBmbG9hdCBjcml0aWNhbERhbXBlbmluZ0ZhY3RvciA9IGV4cGYo
KC1lbGFwc2VkVGltZSAqIHJ1YmJlcmJhbmRTdGlmZm5lc3MpIC8gcGVyaW9kKTsKLSAgICAgICAg
ICAgICAKLSAgICByZXR1cm4gKGluaXRpYWxQb3NpdGlvbiArICgtaW5pdGlhbFZlbG9jaXR5ICog
ZWxhcHNlZFRpbWUgKiBhbXBsaXR1ZGUpKSAqIGNyaXRpY2FsRGFtcGVuaW5nRmFjdG9yOwotfQot
Ci1zdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKGZsb2F0IGRlbHRhKQot
ewotICAgIGZsb2F0IHN0aWZmbmVzcyA9IHN0ZDo6bWF4KHJ1YmJlcmJhbmRTdGlmZm5lc3MsIDEu
MGYpOwotICAgIHJldHVybiBkZWx0YSAvIHN0aWZmbmVzczsKLX0KLQotc3RhdGljIGZsb2F0IHJl
Ym91bmREZWx0YUZvckVsYXN0aWNEZWx0YShmbG9hdCBkZWx0YSkKLXsKLSAgICByZXR1cm4gZGVs
dGEgKiBydWJiZXJiYW5kU3RpZmZuZXNzOwotfQotCi1zdGF0aWMgZmxvYXQgc2Nyb2xsV2hlZWxN
dWx0aXBsaWVyKCkKLXsKLSAgICBzdGF0aWMgZmxvYXQgbXVsdGlwbGllciA9IC0xOwotICAgIGlm
IChtdWx0aXBsaWVyIDwgMCkgewotICAgICAgICBtdWx0aXBsaWVyID0gW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZmxvYXRGb3JLZXk6QCJOU1Njcm9sbFdoZWVsTXVsdGlw
bGllciJdOwotICAgICAgICBpZiAobXVsdGlwbGllciA8PSAwKQotICAgICAgICAgICAgbXVsdGlw
bGllciA9IDE7Ci0gICAgfQotICAgIHJldHVybiBtdWx0aXBsaWVyOwotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNTY3JvbGxpbmdMZWZ0QW5kU2hvdWxkTm90UnViYmVyQmFuZChjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YSkKLXsKLSAgICByZXR1cm4gd2hlZWxFdmVudC5kZWx0YVgoKSA+IDAgJiYgIXNjcm9sbGFibGVB
cmVhLT5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsTGVmdCk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc1Njcm9sbGluZ1JpZ2h0QW5kU2hvdWxkTm90UnViYmVyQmFuZChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSkKLXsKLSAgICByZXR1cm4gd2hlZWxFdmVudC5kZWx0YVgoKSA8IDAgJiYgIXNjcm9s
bGFibGVBcmVhLT5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsUmlnaHQpOwotfQot
Ci1ib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIG1faGF2ZVNjcm9sbGVkU2lu
Y2VQYWdlTG9hZCA9IHRydWU7Ci0KLSAgICBpZiAoIXdoZWVsRXZlbnQuaGFzUHJlY2lzZVNjcm9s
bGluZ0RlbHRhcygpKQotICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVs
RXZlbnQod2hlZWxFdmVudCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCByb3Vu
ZGFib3V0IGhhY2sgdG8gYWxsb3cgZm9yd2FyZGluZyB3aGVlbCBldmVudHMKLSAgICAvLyB1cCB0
byB0aGUgcGFyZW50IHNjcm9sbGFibGUgYXJlYS4gSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBm
YWN0IHRoYXQKLSAgICAvLyB0aGUgYmFzZSBjbGFzcyBpbXBsZW1lbmF0YXRpb24gb2YgaGFuZGxl
V2hlZWxFdmVudCB3aWxsIG5vdCBhY2NlcHQgdGhlCi0gICAgLy8gd2hlZWwgZXZlbnQgaWYgdGhl
cmUgaXMgbm93aGVyZSB0byBzY3JvbGwuCi0gICAgaWYgKGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFZ
KCkpID49IGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFYKCkpKSB7Ci0gICAgICAgIGlmICghYWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6
OmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KCFhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpKQotICAgICAgICAgICAgcmV0dXJuIFNjcm9s
bEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAg
ICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzY3JvbGxiYXIsIHdlIGFnZ3JlZ2F0ZSB0aGUgd2hlZWwg
ZXZlbnRzIHRvIGdldCBhbgotICAgICAgICAgICAgLy8gb3ZlcmFsbCB0cmVuZCBvZiB0aGUgc2Ny
b2xsLiBJZiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY3JvbGwgaXMgZXZlcgotICAgICAgICAgICAg
Ly8gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiB0aGUgcGluIGxvY2F0aW9uLCB0aGVuIHdl
IHN3aXRjaCB0aGUKLSAgICAgICAgICAgIC8vIGJvb2xlYW4sIGFuZCBydWJiZXIgYmFuZC4gVGhh
dCBpcywgaWYgd2Ugd2VyZSBwaW5uZWQgdG8gdGhlIGxlZnQsCi0gICAgICAgICAgICAvLyBhbmQg
d2UgZW5kZWQgdXAgc2Nyb2xsaW5nIHRvIHRoZSByaWdodCwgd2UgcnViYmVyIGJhbmQuCi0gICAg
ICAgICAgICBtX2N1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsICs9IHdoZWVsRXZlbnQuZGVsdGFY
KCk7Ci0gICAgICAgICAgICBpZiAobV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uTGVmdCAmJiBt
X2N1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsIDwgMCkKLSAgICAgICAgICAgICAgICBtX2RpZEN1
bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25PZlBp
biA9IHRydWU7Ci0gICAgICAgICAgICBpZiAobV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uUmln
aHQgJiYgbV9jdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbCA+IDApCi0gICAgICAgICAgICAgICAg
bV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbEV2ZXJTd2l0Y2hUb09wcG9zaXRlRGlyZWN0
aW9uT2ZQaW4gPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWZ0ZXIgYSBnZXN0dXJl
IGJlZ2lucywgd2UgZ28gdGhyb3VnaDoKLSAgICAgICAgLy8gMSsgUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VOb25lCi0gICAgICAgIC8vIDArIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZAot
ICAgICAgICAvLyAxIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgaWYgdGhlcmUgd2FzIGF0
IGxlYXN0IG9uZSBjaGFuZ2VkIGV2ZW50Ci0gICAgICAgIGlmICh3aGVlbEV2ZW50Lm1vbWVudHVt
UGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgJiYgIW1fZGlkQ3VtdWxhdGl2
ZUhvcml6b250YWxTY3JvbGxFdmVyU3dpdGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9mUGluKSB7Ci0g
ICAgICAgICAgICBpZiAoKGlzU2Nyb2xsaW5nTGVmdEFuZFNob3VsZE5vdFJ1YmJlckJhbmQod2hl
ZWxFdmVudCwgbV9zY3JvbGxhYmxlQXJlYSkgJiYKLSAgICAgICAgICAgICAgICBtX3Njcm9sbGVy
SW5pdGlhbGx5UGlubmVkT25MZWZ0ICYmCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigpKSB8fAotICAg
ICAgICAgICAgICAgIChpc1Njcm9sbGluZ1JpZ2h0QW5kU2hvdWxkTm90UnViYmVyQmFuZCh3aGVl
bEV2ZW50LCBtX3Njcm9sbGFibGVBcmVhKSAmJgotICAgICAgICAgICAgICAgIG1fc2Nyb2xsZXJJ
bml0aWFsbHlQaW5uZWRPblJpZ2h0ICYmCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3NpdGlvbigpKSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVl
bEV2ZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNN
b21lbnR1bVNjcm9sbEV2ZW50ID0gKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlTm9uZSk7Ci0gICAgaWYgKG1faWdub3JlTW9tZW50dW1TY3JvbGxz
ICYmIChpc01vbWVudHVtU2Nyb2xsRXZlbnQgfHwgbV9zbmFwUnViYmVyQmFuZFRpbWVyLmlzQWN0
aXZlKCkpKSB7Ci0gICAgICAgIGlmICh3aGVlbEV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkKSB7Ci0gICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVt
U2Nyb2xscyA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNtb290aFNjcm9sbFdpdGhFdmVudCh3
aGVlbEV2ZW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQm
IGdlc3R1cmVFdmVudCkKLXsKLSAgICBpZiAoZ2VzdHVyZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9y
bUdlc3R1cmVFdmVudDo6U2Nyb2xsQmVnaW5UeXBlKQotICAgICAgICBiZWdpblNjcm9sbEdlc3R1
cmUoKTsKLSAgICBlbHNlIGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtR2VzdHVy
ZUV2ZW50OjpTY3JvbGxFbmRUeXBlKQotICAgICAgICBlbmRTY3JvbGxHZXN0dXJlKCk7Ci19Ci0K
LWJvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6cGlubmVkSW5EaXJlY3Rpb24oZmxvYXQg
ZGVsdGFYLCBmbG9hdCBkZWx0YVkpCi17Ci0gICAgRmxvYXRTaXplIGxpbWl0RGVsdGE7Ci0gICAg
aWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgewotICAgICAgICBpZiAoZGVsdGFZ
IDwgMCkgewotICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtl
IHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHRvcAotICAgICAgICAgICAgbGltaXREZWx0
YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpICsg
KyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS55KCkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgZG93bi4gIE1ha2Ugc3Vy
ZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgYm90dG9tCi0gICAgICAgICAgICBsaW1pdERlbHRh
LnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtICht
X3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGxPcmlnaW4oKS55KCkpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
ZGVsdGFYICE9IDApIHsKLSAgICAgICAgaWYgKGRlbHRhWCA8IDApIHsKLSAgICAgICAgICAgIC8v
IFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGxlZnQuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5u
ZWQgdG8gdGhlIGxlZnQKLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxh
YmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsT3JpZ2luKCkueCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIGFy
ZSB0cnlpbmcgdG8gc2Nyb2xsIHJpZ2h0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRv
IHRoZSByaWdodAotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVB
cmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVD
b250ZW50UmVjdCgpLm1heFgoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngo
KSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICgoZGVsdGFYICE9IDAgfHwgZGVs
dGFZICE9IDApICYmIChsaW1pdERlbHRhLndpZHRoKCkgPCAxICYmIGxpbWl0RGVsdGEuaGVpZ2h0
KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygp
IGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbEVs
YXN0aWNpdHkoKSkgewotICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAg
ICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxT
Y3JvbGxiYXIoKTsKLSAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVB
cmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgICAgICByZXR1cm4gKCgodlNjcm9sbGVyICYm
IHZTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIWhTY3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFi
bGVkKCkpKSk7Ci0gICAgfQotICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eU5vbmU6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBbGxvd2VkOgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dz
SG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25zdAotewotICAgIHN3aXRjaCAobV9zY3JvbGxhYmxl
QXJlYS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKSkgewotICAgIGNhc2UgU2Nyb2xsRWxh
c3RpY2l0eUF1dG9tYXRpYzogewotICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Ny
b2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICAgICAgU2Nyb2xsYmFyKiB2
U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgICAg
ICByZXR1cm4gKCgoaFNjcm9sbGVyICYmIGhTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIXZTY3Jv
bGxlciB8fCAhdlNjcm9sbGVyLT5lbmFibGVkKCkpKSk7Ci0gICAgfQotICAgIGNhc2UgU2Nyb2xs
RWxhc3RpY2l0eU5vbmU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIFNjcm9sbEVs
YXN0aWNpdHlBbGxvd2VkOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6c21vb3RoU2Nyb2xsV2l0aEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQg
PSB0cnVlOwotCi0gICAgZmxvYXQgZGVsdGFYID0gbV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRo
KCk7Ci0gICAgZmxvYXQgZGVsdGFZID0gbV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpOwot
Ci0gICAgLy8gUmVzZXQgb3ZlcmZsb3cgdmFsdWVzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBy
ZW1vdmUgZGVsdGEgYXQgdmFyaW91cyBwb2ludHMgYW5kIHB1dCBpdCBpbnRvIG92ZXJmbG93Lgot
ICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOwotCi0gICAgZmxvYXQgZXZl
bnRDb2FsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVudC5kZWx0YVgoKTsKLSAgICBmbG9hdCBldmVu
dENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LmRlbHRhWSgpOwotCi0gICAgZGVsdGFYICs9
IGV2ZW50Q29hbGVzY2VkRGVsdGFYOwotICAgIGRlbHRhWSArPSBldmVudENvYWxlc2NlZERlbHRh
WTsKLQotICAgIC8vIFNsaWdodGx5IHByZWZlciBzY3JvbGxpbmcgdmVydGljYWxseSBieSBhcHBs
eWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQotICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNm
KGRlbHRhWCkpCi0gICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgZWxzZQotICAgICAgICBkZWx0YVkg
PSAwOwotCi0gICAgYm9vbCBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgPSBmYWxzZTsKLSAgICBib29s
IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRTdHJldGNo
ID0gZmFsc2U7Ci0gICAgCi0gICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9zY3JvbGxhYmxl
QXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKLQotICAgIGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0g
c3RyZXRjaEFtb3VudC53aWR0aCgpOwotICAgIGlzVmVydGljYWxseVN0cmV0Y2hlZCA9IHN0cmV0
Y2hBbW91bnQuaGVpZ2h0KCk7Ci0KLSAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSA9
IHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpOwotCi0gICAgLy8gSWYgd2UgYXJlIHN0YXJ0aW5n
IG1vbWVudHVtIHNjcm9sbGluZyB0aGVuIGRvIHNvbWUgc2V0dXAuCi0gICAgaWYgKCFtX21vbWVu
dHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VC
ZWdhbiB8fCBwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQpKQotICAgICAg
ICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IHRydWU7Ci0KLSAgICBDRlRpbWVJbnRlcnZh
bCB0aW1lRGVsdGEgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpIC0gbV9sYXN0TW9tZW50dW1TY3Jv
bGxUaW1lc3RhbXA7Ci0gICAgaWYgKG1faW5TY3JvbGxHZXN0dXJlIHx8IG1fbW9tZW50dW1TY3Jv
bGxJblByb2dyZXNzKSB7Ci0gICAgICAgIGlmIChtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFt
cCAmJiB0aW1lRGVsdGEgPiAwICYmIHRpbWVEZWx0YSA8IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1Rp
bWVvdXQpIHsKLSAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eS5zZXRXaWR0aChldmVudENv
YWxlc2NlZERlbHRhWCAvIChmbG9hdCl0aW1lRGVsdGEpOwotICAgICAgICAgICAgbV9tb21lbnR1
bVZlbG9jaXR5LnNldEhlaWdodChldmVudENvYWxlc2NlZERlbHRhWSAvIChmbG9hdCl0aW1lRGVs
dGEpOwotICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2
ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9sYXN0TW9t
ZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAg
ICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoaXNWZXJ0aWNhbGx5U3RyZXRjaGVkKSB7Ci0gICAgICAgICAgICBpZiAoIWlzSG9yaXpv
bnRhbGx5U3RyZXRjaGVkICYmIHBpbm5lZEluRGlyZWN0aW9uKGRlbHRhWCwgMCkpIHsgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0
aWNhbC4KLSAgICAgICAgICAgICAgICBpZiAoZGVsdGFZICE9IDAgJiYgKGZhYnNmKGRlbHRhWCAv
IGRlbHRhWSkgPCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbykpCi0gICAgICAg
ICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmFic2Yo
ZGVsdGFYKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
bV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0
aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChpc0hvcml6
b250YWxseVN0cmV0Y2hlZCkgewotICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRo
ZSBob3Jpem9udGFsLgotICAgICAgICAgICAgaWYgKHBpbm5lZEluRGlyZWN0aW9uKDAsIGRlbHRh
WSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGVsdGFYICE9IDAgJiYgKGZhYnNmKGRlbHRhWSAv
IGRlbHRhWCkgPCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbykpCi0gICAgICAg
ICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmFic2Yo
ZGVsdGFZKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292
ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOwotICAgICAgICAgICAgICAgICAg
ICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVpZ2h0KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5o
ZWlnaHQoKSArIGRlbHRhWSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBOb3Qgc3RyZXRjaGluZyBhdCBhbGwgeWV0LgotICAgICAgICAgICAgaWYgKHBp
bm5lZEluRGlyZWN0aW9uKGRlbHRhWCwgZGVsdGFZKSkgewotICAgICAgICAgICAgICAgIGlmIChm
YWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJl
dGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0
V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9v
dmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBzaG91bGRTdHJldGNoID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChkZWx0YVggIT0gMCB8fCBkZWx0YVkgIT0gMCkgewot
ICAgICAgICBpZiAoIShzaG91bGRTdHJldGNoIHx8IGlzVmVydGljYWxseVN0cmV0Y2hlZCB8fCBp
c0hvcml6b250YWxseVN0cmV0Y2hlZCkpIHsKLSAgICAgICAgICAgIGlmIChkZWx0YVkgIT0gMCkg
ewotICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLSAg
ICAgICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShkZWx0YVkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGRlbHRhWCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZGVs
dGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwotICAgICAgICAgICAgICAgIGltbWVkaWF0
ZVNjcm9sbEJ5RGVsdGFYKGRlbHRhWCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoIWFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKCkpIHsKLSAgICAg
ICAgICAgICAgICBkZWx0YVggPSAwOwotICAgICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVs
dGFYID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWCAhPSAwKSAmJiAhaXNIb3Jp
em9udGFsbHlTdHJldGNoZWQgJiYgIXBpbm5lZEluRGlyZWN0aW9uKGRlbHRhWCwgMCkpIHsKLSAg
ICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7Ci0KLSAgICAg
ICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250
ZW50RWRnZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgo
ZGVsdGFYKTsKLSAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5z
U2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKLQotICAgICAgICAgICAgICAgIGRlbHRhWCA9
IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghYWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAg
ICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gMDsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoKGRlbHRhWSAhPSAwKSAmJiAhaXNWZXJ0aWNhbGx5U3RyZXRjaGVkICYmICFwaW5uZWRJ
bkRpcmVjdGlvbigwLCBkZWx0YVkpKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9s
bFdoZWVsTXVsdGlwbGllcigpOwotCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgICAgICAgICAg
ICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGRlbHRhWSk7Ci0gICAgICAgICAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7
Ci0KLSAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX3Njcm9sbGFibGVBcmVh
LT5vdmVyaGFuZ0Ftb3VudCgpOwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX21vbWVudHVt
U2Nyb2xsSW5Qcm9ncmVzcykgewotICAgICAgICAgICAgICAgIGlmICgocGlubmVkSW5EaXJlY3Rp
b24oZXZlbnRDb2FsZXNjZWREZWx0YVgsIGV2ZW50Q29hbGVzY2VkRGVsdGFZKSB8fCAoZmFic2Yo
ZXZlbnRDb2FsZXNjZWREZWx0YVgpICsgZmFic2YoZXZlbnRDb2FsZXNjZWREZWx0YVkpIDw9IDAp
KSAmJiBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCkgewotICAgICAgICAgICAgICAgICAg
ICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1f
bW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHNu
YXBSdWJiZXJCYW5kKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNl
dEhlaWdodChtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSArIGRlbHRhWSk7Ci0KLSAgICAg
ICAgICAgIEZsb2F0U2l6ZSBkYW1wZWREZWx0YShjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5k
RGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFG
b3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkpKSk7Ci0gICAgICAg
ICAgICBGbG9hdFBvaW50IG9yaWdPcmlnaW4gPSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNv
bnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigp
KSAtIHN0cmV0Y2hBbW91bnQ7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IG5ld09yaWdpbiA9IG9y
aWdPcmlnaW4gKyBkYW1wZWREZWx0YTsKLQotICAgICAgICAgICAgaWYgKG9yaWdPcmlnaW4gIT0g
bmV3T3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3Ry
YWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgICAgICAgICAgICAgIGltbWVk
aWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2luKTsKLSAgICAgICAgICAgICAgICBtX3Njcm9sbGFi
bGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Q
cm9ncmVzcyAmJiBwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkKSB7Ci0gICAg
ICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0gICAgICAgIG1faWdub3Jl
TW9tZW50dW1TY3JvbGxzID0gZmFsc2U7Ci0gICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGlt
ZXN0YW1wID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
YmVnaW5TY3JvbGxHZXN0dXJlKCkKLXsKLSAgICBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKTsKLQot
ICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7Ci0gICAgbV9pblNjcm9sbEdl
c3R1cmUgPSB0cnVlOwotICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0g
ICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKLSAgICBtX2xhc3RNb21lbnR1bVNj
cm9sbFRpbWVzdGFtcCA9IDA7Ci0gICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7
Ci0gICAgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uTGVmdCA9IG1fc2Nyb2xsYWJsZUFyZWEt
PmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24oKTsKLSAgICBtX3Nj
cm9sbGVySW5pdGlhbGx5UGlubmVkT25SaWdodCA9IG1fc2Nyb2xsYWJsZUFyZWEtPmlzSG9yaXpv
bnRhbFNjcm9sbGVyUGlubmVkVG9NYXhpbXVtUG9zaXRpb24oKTsKLSAgICBtX2N1bXVsYXRpdmVI
b3Jpem9udGFsU2Nyb2xsID0gMDsKLSAgICBtX2RpZEN1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xs
RXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25PZlBpbiA9IGZhbHNlOwotICAgIAotICAgIElu
dFNpemUgc3RyZXRjaEFtb3VudCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7
Ci0gICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3Rp
Y0RlbHRhKHN0cmV0Y2hBbW91bnQud2lkdGgoKSkpOwotICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNl
LnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC5oZWln
aHQoKSkpOwotCi0gICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0gRmxvYXRTaXplKCk7Ci0gICAg
Ci0gICAgaWYgKG1fc25hcFJ1YmJlckJhbmRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Nu
YXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmVuZFNjcm9sbEdlc3R1cmUoKQotewotICAgIGRpZEVuZFNjcm9sbEdlc3R1cmUoKTsK
LQotICAgIHNuYXBSdWJiZXJCYW5kKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6c25hcFJ1YmJlckJhbmQoKQotewotICAgIENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9
IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSAtIG1fbGFzdE1vbWVu
dHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIGlmIChtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFt
cCAmJiB0aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCkKLSAgICAgICAg
bV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0KLSAgICBtX2luU2Nyb2xsR2VzdHVy
ZSA9IGZhbHNlOwotCi0gICAgaWYgKG1fc25hcFJ1YmJlckJhbmRUaW1lci5pc0FjdGl2ZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFs
U2luY2VSZWZlcmVuY2VEYXRlXTsKLSAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwot
ICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICBtX29yaWdWZWxvY2l0eSA9IEZs
b2F0U2l6ZSgpOwotCi0gICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEu
MC82MC4wKTsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCByb3VuZFRvd2FyZFplcm8oZmxvYXQg
bnVtKQotewotICAgIHJldHVybiBudW0gPiAwID8gY2VpbGYobnVtIC0gMC41ZikgOiBmbG9vcmYo
bnVtICsgMC41Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb0RldmljZVBpeGVs
VG93YXJkWmVybyhmbG9hdCBudW0pCi17Ci0gICAgZmxvYXQgcm91bmRlZE51bSA9IHJvdW5kZihu
dW0pOwotICAgIGlmIChmYWJzKG51bSAtIHJvdW5kZWROdW0pIDwgMC4xMjUpCi0gICAgICAgIG51
bSA9IHJvdW5kZWROdW07Ci0KLSAgICByZXR1cm4gcm91bmRUb3dhcmRaZXJvKG51bSk7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVk
KFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+KikKLXsKLSAgICBpZiAoIW1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzIHx8IG1faWdub3JlTW9tZW50dW1TY3JvbGxzKSB7Ci0gICAgICAg
IENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZl
cmVuY2VEYXRlXSAtIG1fc3RhcnRUaW1lOwotCi0gICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9
PSBGbG9hdFNpemUoKSkgewotICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBtX3Njcm9sbGFi
bGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwotICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNo
ID09IEZsb2F0U2l6ZSgpKSB7ICAgIAotICAgICAgICAgICAgICAgIG1fc25hcFJ1YmJlckJhbmRU
aW1lci5zdG9wKCk7Ci0gICAgICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9h
dFNpemUoKTsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IDA7Ci0gICAgICAgICAgICAg
ICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAgICAgICAgICAgICAgICBtX29yaWdP
cmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBG
bG9hdFNpemUoKTsKLQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+ZGlkU3RhcnRSdWJiZXJCYW5kKHJvdW5kZWRJ
bnRTaXplKG1fc3RhcnRTdHJldGNoKSk7Ci0KLSAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9ICht
X3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkpIC0gbV9zdGFydFN0cmV0Y2g7Ci0gICAgICAgICAg
ICBtX29yaWdWZWxvY2l0eSA9IG1fbW9tZW50dW1WZWxvY2l0eTsKLQotICAgICAgICAgICAgLy8g
SnVzdCBsaWtlIG5vcm1hbCBzY3JvbGxpbmcsIHByZWZlciB2ZXJ0aWNhbCBydWJiZXJiYW5kaW5n
Ci0gICAgICAgICAgICBpZiAoZmFic2YobV9vcmlnVmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnNm
KG1fb3JpZ1ZlbG9jaXR5LndpZHRoKCkpKQotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5
LnNldFdpZHRoKDApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBEb24ndCBydWJiZXIt
YmFuZCBob3Jpem9udGFsbHkgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2Nyb2xsIGhvcml6b250
YWxseQotICAgICAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVh
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAgICAgICBpZiAoIWhTY3JvbGxlciB8fCAh
aFNjcm9sbGVyLT5lbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0
V2lkdGgoMCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5k
IHZlcnRpY2FsbHkgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2Nyb2xsIGhvcml6b250YWxseQot
ICAgICAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0
aWNhbFNjcm9sbGJhcigpOwotICAgICAgICAgICAgaWYgKCF2U2Nyb2xsZXIgfHwgIXZTY3JvbGxl
ci0+ZW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldEhlaWdodCgw
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEZsb2F0UG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBp
eGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lk
dGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRoKCksIChmbG9hdCl0aW1lRGVsdGEpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNE
ZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5
LmhlaWdodCgpLCAoZmxvYXQpdGltZURlbHRhKSkpOwotCi0gICAgICAgIGlmIChmYWJzKGRlbHRh
LngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnkoKSkgPj0gMSkgewotICAgICAgICAgICAgRmxvYXRQ
b2ludCBuZXdPcmlnaW4gPSBtX29yaWdPcmlnaW4gKyBkZWx0YTsKLQotICAgICAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2Up
OwotICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChuZXdPcmlnaW4pOwotICAgICAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVk
Z2UodHJ1ZSk7Ci0KLSAgICAgICAgICAgIEZsb2F0U2l6ZSBuZXdTdHJldGNoID0gbV9zY3JvbGxh
YmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9z
dHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5l
d1N0cmV0Y2gud2lkdGgoKSkpOwotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0
SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLmhlaWdodCgpKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG1f
b3JpZ09yaWdpbik7Ci0KLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZENvbXBsZXRl
UnViYmVyQmFuZChyb3VuZGVkSW50U2l6ZShtX3N0YXJ0U3RyZXRjaCkpOwotCi0gICAgICAgICAg
ICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOwotICAgICAgICAgICAgbV9zdHJldGNoU2Ny
b2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9zdGFy
dFRpbWUgPSAwOwotICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAg
ICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICAgICAgICAgIG1fb3Jp
Z1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsK
LSAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAgICB9Ci19Ci0jZW5kaWYK
LQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzZXRJc0FjdGl2ZSgpCi17Ci0gICAg
aWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIGlmIChuZWVk
c1Njcm9sbGVyU3R5bGVVcGRhdGUoKSkKLSAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGVyU3R5bGUo
KTsKLSAgICB9Ci19Ci0KLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi12b2lkIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OnVwZGF0ZVNjcm9sbGVyU3R5bGUoKQotewotICAgIGlmICgh
c2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkgewotICAgICAgICBzZXROZWVkc1Nj
cm9sbGVyU3R5bGVVcGRhdGUodHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBT
Y3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKiBtYWNUaGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhl
bWUoKTsKLSAgICBpZiAoIW1hY1RoZW1lKSB7Ci0gICAgICAgIHNldE5lZWRzU2Nyb2xsZXJTdHls
ZVVwZGF0ZShmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgbmV3U3R5
bGUgPSB3a1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUobV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSk7Ci0KLSAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
ciA9IHNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgdmVy
dGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLQotICAgICAgICBXS1Njcm9sbGJhclBhaW50
ZXJSZWYgb2xkVmVydGljYWxQYWludGVyID0gd2tWZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJGb3JD
b250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotICAgICAgICBX
S1Njcm9sbGJhclBhaW50ZXJSZWYgbmV3VmVydGljYWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFy
UmVwbGFjZW1lbnRQYWludGVyKG9sZFZlcnRpY2FsUGFpbnRlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdTdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNh
bFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
YWxzZSk7Ci0gICAgICAgIG1hY1RoZW1lLT5zZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKHZlcnRp
Y2FsU2Nyb2xsYmFyLCBuZXdWZXJ0aWNhbFBhaW50ZXIpOwotICAgICAgICB3a1NldFBhaW50ZXJG
b3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBu
ZXdWZXJ0aWNhbFBhaW50ZXIsIGZhbHNlKTsKLQotICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNj
cm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUt
c2V0IHRoZSAKLSAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQg
dGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KLSAgICAgICAgLy8g
YW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9
IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3ModmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xT
aXplKCkpOwotICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3Qo
MCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKLSAgICB9Ci0KLSAgICBpZiAoU2Nyb2xsYmFy
KiBob3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS0+aG9yaXpvbnRhbFNjcm9s
bGJhcigpKSB7Ci0gICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLQot
ICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgb2xkSG9yaXpvbnRhbFBhaW50ZXIgPSB3a0hv
cml6b250YWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihtX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpKTsKLSAgICAgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIG5ld0hvcml6
b250YWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKG9sZEhvcml6
b250YWxQYWludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3R5bGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgIG1h
Y1RoZW1lLT5zZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKGhvcml6b250YWxTY3JvbGxiYXIsIG5l
d0hvcml6b250YWxQYWludGVyKTsKLSAgICAgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRy
b2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgbmV3SG9yaXpvbnRhbFBh
aW50ZXIsIHRydWUpOwotCi0gICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxl
cyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAotICAg
ICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0
IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgotICAgICAgICAvLyBhbmQgbGVuZ3RoIGFy
ZSBwcm9wZXJseSB1cGRhdGVkLgotICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNj
cm9sbGJhclRoaWNrbmVzcyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKLSAg
ICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgdGhp
Y2tuZXNzLCB0aGlja25lc3MpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBuZWVkc1Njcm9sbGVyU3R5
bGVVcGRhdGUoKSBpcyB0cnVlLCB0aGVuIHRoZSBwYWdlIGlzIHJlc3RvcmluZyBmcm9tIHRoZSBw
YWdlIGNhY2hlLCBhbmQgCi0gICAgLy8gYSByZWxheW91dCB3aWxsIGhhcHBlbiBvbiBpdHMgb3du
LiBPdGhlcndpc2UsIHdlIG11c3QgaW5pdGlhdGUgYSByZS1sYXlvdXQgb3Vyc2VsdmVzLgotICAg
IHNjcm9sbGFibGVBcmVhKCktPnNjcm9sbGJhclN0eWxlQ2hhbmdlZChuZXdTdHlsZSwgIW5lZWRz
U2Nyb2xsZXJTdHlsZVVwZGF0ZSgpKTsKLQotICAgIHNldE5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0
ZShmYWxzZSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c3RhcnRTY3Jv
bGxiYXJQYWludFRpbWVyKCkKLXsKLSAgICBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0
YXJ0T25lU2hvdCgwLjEpOwotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNj
cm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5pdGlh
bFNjcm9sbGJhclBhaW50VGltZXIuaXNBY3RpdmUoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpCi17Ci0gICAgbV9pbml0aWFs
U2Nyb2xsYmFyUGFpbnRUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjPiopCi17Ci0gICAgd2tTY3JvbGxiYXJQYWludGVyRm9yY2VGbGFzaFNj
cm9sbGVycyhtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLSNlbmRpZgot
Ci12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1i
UmVjdChjb25zdCBJbnRSZWN0JiBzY3JvbGxlclRodW1iKQotewotICAgIEludFJlY3QgcmVjdElu
Vmlld0Nvb3JkaW5hdGVzID0gc2Nyb2xsZXJUaHVtYjsKLSAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0
aWNhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0g
ICAgICAgIHJlY3RJblZpZXdDb29yZGluYXRlcyA9IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0
VG9Db250YWluaW5nVmlldyhzY3JvbGxlclRodW1iKTsKLQotICAgIGlmIChyZWN0SW5WaWV3Q29v
cmRpbmF0ZXMgPT0gbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0
SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgIG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0ID0gcmVj
dEluVmlld0Nvb3JkaW5hdGVzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRp
bGl0aWVzQ2hyb21pdW1NYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0YzdmMjZhODQ0NWZkNjkyNWI4MGIwMTZkMTgwMzkxZWU2NDFkN2VhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNjcm9sbGJhck92ZXJsYXlVdGls
aXRpZXNDaHJvbWl1bU1hY19oCi0jZGVmaW5lIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJv
bWl1bU1hY19oCi0KLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi0KLS8vIFB1YmxpYyBB
UElzIG5vdCBhdmFpbGFibGUgb24gdmVyc2lvbnMgb2YgTWFjIG9uIHdoaWNoIHdlIGJ1aWxkCi0j
aWYgKGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgfHwgZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpKQotZW51bSB7Ci0gICAgTlNTY3JvbGxlclN0eWxlTGVnYWN5ICAgICAgID0g
MCwKLSAgICBOU1Njcm9sbGVyU3R5bGVPdmVybGF5ICAgICAgPSAxCi19OwotCi0jaWZkZWYgX19P
QkpDX18KLXR5cGVkZWYgTlNJbnRlZ2VyIE5TU2Nyb2xsZXJTdHlsZTsKLSNlbmRpZgotI2VuZGlm
Ci0KLXR5cGVkZWYgdWludDMyIHdrU2Nyb2xsZXJTdHlsZTsKLQotI2lmZGVmIF9fT0JKQ19fCi1A
Y2xhc3MgTlNTY3JvbGxlckltcDsKLUBjbGFzcyBOU1Njcm9sbGVySW1wUGFpcjsKLSNlbHNlCi1j
bGFzcyBOU1Njcm9sbGVySW1wOwotY2xhc3MgTlNTY3JvbGxlckltcFBhaXI7Ci0jZW5kaWYKLQot
dHlwZWRlZiBOU1Njcm9sbGVySW1wKiBXS1Njcm9sbGJhclBhaW50ZXJSZWY7Ci10eXBlZGVmIE5T
U2Nyb2xsZXJJbXBQYWlyKiBXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmOwotCi1ib29s
IGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpOwotCi0vLyBTY3JvbGxiYXIgUGFpbnRl
cgotYm9vbCB3a1Njcm9sbGJhclBhaW50ZXJVc2VzT3ZlcmxheVNjcm9sbGVycyh2b2lkKTsKLWJv
b2wgd2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7
Ci1DR0Zsb2F0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJS
ZWYpOwotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJTZXRPdmVybGF5U3RhdGUoV0tTY3JvbGxiYXJQ
YWludGVyUmVmLCBpbnQgb3ZlcmxheVNjcm9sbGVyU3RhdGUpOwotdm9pZCB3a1Njcm9sbGJhclBh
aW50ZXJQYWludChXS1Njcm9sbGJhclBhaW50ZXJSZWYsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZh
bHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIE5TUmVjdCBmcmFtZVJlY3QpOwotdm9pZCB3a1Njcm9s
bGJhclBhaW50ZXJQYWludFRyYWNrKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiwgYm9vbCBlbmFibGVk
LCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgTlNSZWN0IGZyYW1lUmVjdCk7Ci12
b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50S25vYihXS1Njcm9sbGJhclBhaW50ZXJSZWYpOwot
aW50IHdrU2Nyb2xsYmFyTWluaW11bVRodW1iTGVuZ3RoKFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7
Ci12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZiwgaWQgc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlKTsKLXZvaWQgd2tTY3JvbGxiYXJQYWludGVy
U2V0RW5hYmxlZChXS1Njcm9sbGJhclBhaW50ZXJSZWYsIGJvb2wgZW5hYmxlZCk7Ci1DR0Zsb2F0
IHdrU2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmKTsKLVdL
U2Nyb2xsYmFyUGFpbnRlclJlZiB3a01ha2VTY3JvbGxiYXJQYWludGVyKGludCBjb250cm9sU2l6
ZSwgYm9vbCBpc0hvcml6b250YWwpOwotaW50IHdrU2Nyb2xsYmFyVGhpY2tuZXNzKGludCBjb250
cm9sU2l6ZSk7Ci1pbnQgd2tTY3JvbGxiYXJNaW5pbXVtVG90YWxMZW5ndGhOZWVkZWRGb3JUaHVt
YihXS1Njcm9sbGJhclBhaW50ZXJSZWYpOwotQ0dSZWN0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JS
ZWN0KFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtl
U2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBvbGRQYWlu
dGVyLCBpbnQgbmV3U3R5bGUsIGludCBjb250cm9sU2l6ZSwgYm9vbCBpc0hvcml6b250YWwpOwot
dm9pZCB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVm
LCBDR0Zsb2F0KTsKLXZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShXS1Njcm9s
bGJhclBhaW50ZXJSZWYsIENHRmxvYXQpOwotCi1lbnVtIHsKLSAgICB3a1Njcm9sbGVyS25vYlN0
eWxlRGVmYXVsdCA9IDAsCi0gICAgd2tTY3JvbGxlcktub2JTdHlsZURhcmsgPSAxLAotICAgIHdr
U2Nyb2xsZXJLbm9iU3R5bGVMaWdodCA9IDIKLX07Ci10eXBlZGVmIHVpbnQzMiB3a1Njcm9sbGVy
S25vYlN0eWxlOwotZXh0ZXJuIHZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKFdL
U2Nyb2xsYmFyUGFpbnRlclJlZiwgd2tTY3JvbGxlcktub2JTdHlsZSk7Ci0KLS8vIFNjcm9sbGJh
ciBQYWludGVyIENvbnRyb2xsZXIKLVdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgd2tN
YWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIoaWQgcGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0
ZSk7Ci12b2lkIHdrQ29udGVudEFyZWFTY3JvbGxlZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyUmVmKTsKLXZvaWQgd2tDb250ZW50QXJlYVdpbGxQYWludChXS1Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyUmVmKTsKLXZvaWQgd2tNb3VzZUVudGVyZWRDb250ZW50QXJlYShXS1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyUmVmKTsKLXZvaWQgd2tNb3VzZUV4aXRlZENvbnRlbnRBcmVhKFdL
U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a01vdXNlTW92ZWRJbkNvbnRl
bnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a1dpbGxTdGFy
dExpdmVSZXNpemUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrQ29u
dGVudEFyZWFSZXNpemVkKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3
a1dpbGxFbmRMaXZlUmVzaXplKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9p
ZCB3a0NvbnRlbnRBcmVhRGlkU2hvdyhXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsK
LXZvaWQgd2tDb250ZW50QXJlYURpZEhpZGUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJl
Zik7Ci12b2lkIHdrRGlkQmVnaW5TY3JvbGxHZXN0dXJlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJSZWYpOwotdm9pZCB3a0RpZEVuZFNjcm9sbEdlc3R1cmUoV0tTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlclJlZik7Ci12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxl
cnMoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrU2V0U2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmLCB3
a1Njcm9sbGVyU3R5bGUgbmV3U3R5bGUpOwotdm9pZCB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29u
dHJvbGxlcihXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmLCBXS1Njcm9sbGJhclBhaW50
ZXJSZWYsIGJvb2wgaXNIb3Jpem9udGFsKTsKLVdLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a1ZlcnRp
Y2FsU2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlclJlZik7Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tIb3Jpem9udGFsU2Nyb2xsYmFyUGFp
bnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci13a1Nj
cm9sbGVyU3R5bGUgd2tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKFdLU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJSZWYpOwotCi0jZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJBUl9QQUlO
VEVSKQotCi0jZW5kaWYgLy8gU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92
ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYThiMDFkNGFiNWQ1ODE3YjU5NWZjYjg4MDYyMTQ0NjM4MWM2
NGNjZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hy
b21pdW1NYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzNjQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLQotI2luY2x1ZGUgIlNjcm9sbGJh
ck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oIgotI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgi
Ci0jaW5jbHVkZSA8Q29jb2EvQ29jb2EuaD4KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IFRoaXMgZmlsZSBjb250YWlucyB1dGlsaXRpZXMgdG8gZHJhdyBvdmVybGF5IHNjcm9sbGJhcnMu
IFRoZXJlIGFyZSBubyBwdWJsaWMKLS8vIEFQSXMgeWV0IG9uIHRoZSBNYWMgdG8gZHJhdyBvdmVy
bGF5IHNjcm9sbGJhcnMgc28gd2UgdXNlIHByaXZhdGUgQVBJcyB0aGF0Ci0vLyB3ZSBsb29rIHVw
IGF0IHJ1bnRpbWUuIElmIHRoZSBwcml2YXRlIEFQSXMgZG9uJ3QgZXhpc3QgdGhlbiB0aGUgd2tN
YWtlKgotLy8gZnVuY3Rpb25zIHdpbGwgcmV0dXJuIG5pbC4KLS8vCi0vLyBOb3RlLCB0aGlzIGZp
bGUgY29udGFpbnMgZnVuY3Rpb25zIGNvcGllZCBmcm9tIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uu
aC4KLS8vIFVzaW5nIHRoZSBzYW1lIG5hbWVzIG1ha2VzIHRoZSBjb2RlIGVhc2llciB0byBtYWlu
dGFpbi4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFB1YmxpYyBBUElzIG5vdCBhdmFp
bGFibGUgb24gdmVyc2lvbnMgb2YgTWFjIG9uIHdoaWNoIHdlIGJ1aWxkCi0jaWYgKGRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkgfHwgZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
KQotQGludGVyZmFjZSBOU1Njcm9sbGVyIChOU09iamVjdCkKLSsgKE5TU2Nyb2xsZXJTdHlsZSlw
cmVmZXJyZWRTY3JvbGxlclN0eWxlOwotQGVuZAotI2VuZGlmCi0KLS8vIFRoZXNlIGFyZSBwcml2
YXRlIEFQSXMgdG8gZHJhdyBvdmVybGF5IHNjcm9sbGJhcnMuCi1AaW50ZXJmYWNlIE5TU2Nyb2xs
ZXJJbXAgOiBOU09iamVjdAotCi0rIChpZClzY3JvbGxlckltcFdpdGhTdHlsZTooTlNTY3JvbGxl
clN0eWxlKXN0eWxlCi0gICAgICAgICAgICAgICBjb250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSlz
aXplCi0gICAgICAgICAgICAgICAgaG9yaXpvbnRhbDooQk9PTClob3Jpem9udGFsCi0gICAgICBy
ZXBsYWNpbmdTY3JvbGxlckltcDooaWQpc2Nyb2xsZXI7Ci0KLUBwcm9wZXJ0eSBDR0Zsb2F0IGtu
b2JBbHBoYTsKLUBwcm9wZXJ0eSBDR0Zsb2F0IHRyYWNrQWxwaGE7Ci1AcHJvcGVydHkgQ0dGbG9h
dCBrbm9iUHJvcG9ydGlvbjsKLUBwcm9wZXJ0eSBOU0ludGVnZXIga25vYlN0eWxlOwotQHByb3Bl
cnR5KGdldHRlcj1pc0VuYWJsZWQpIEJPT0wgZW5hYmxlZDsKLUBwcm9wZXJ0eShnZXR0ZXI9aXNI
b3Jpem9udGFsKSBCT09MIGhvcml6b250YWw7Ci1AcHJvcGVydHkgZG91YmxlIGRvdWJsZVZhbHVl
OwotQHByb3BlcnR5KGFzc2lnbikgaWQgZGVsZWdhdGU7Ci0KLS0gKENHRmxvYXQpa25vYk1pbkxl
bmd0aDsKLS0gKENHRmxvYXQpdHJhY2tPdmVybGFwRW5kSW5zZXQ7Ci0tIChDR0Zsb2F0KWtub2JP
dmVybGFwRW5kSW5zZXQ7Ci0tIChDR0Zsb2F0KXRyYWNrRW5kSW5zZXQ7Ci0tIChDR0Zsb2F0KWtu
b2JFbmRJbnNldDsKLS0gKENHRmxvYXQpdHJhY2tCb3hXaWR0aDsKLS0gKENHRmxvYXQpdHJhY2tX
aWR0aDsKLS0gKHZvaWQpc2V0Qm91bmRzU2l6ZTooTlNTaXplKXNpemU7Ci0tICh2b2lkKWRyYXdL
bm9iU2xvdEluUmVjdDooTlNSZWN0KXJlY3QKLSAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0OihC
T09MKWZsYWc7Ci0tICh2b2lkKWRyYXdLbm9iOwotLSAodm9pZClzZXRPdmVybGF5U2Nyb2xsZXJT
dGF0ZTooTlNTY3JvbGxlclN0eWxlKXN0YXRlCi0gICAgICAgICAgICAgICBmb3JjZUltbWVkaWF0
ZWx5OihCT09MKWZsYWc7Ci0tICh2b2lkKXNldERlbGVnYXRlOihpZClkZWxlZ2F0ZTsKLS0gKE5T
UmVjdClyZWN0Rm9yUGFydDooTlNVSW50ZWdlcilhcmcxOwotCi1AZW5kCi0KLS8vIFRoZXNlIGFy
ZSBwcml2YXRlIEFQSXMgdG8gbWFuYWdlIG92ZXJsYXkgc2Nyb2xsYmFycy4KLUBpbnRlcmZhY2Ug
TlNTY3JvbGxlckltcFBhaXIgOiBOU09iamVjdAotCi1AcHJvcGVydHkgTlNTY3JvbGxlclN0eWxl
IHNjcm9sbGVyU3R5bGU7Ci1AcHJvcGVydHkocmV0YWluKSBOU1Njcm9sbGVySW1wICpob3Jpem9u
dGFsU2Nyb2xsZXJJbXA7Ci1AcHJvcGVydHkocmV0YWluKSBOU1Njcm9sbGVySW1wICp2ZXJ0aWNh
bFNjcm9sbGVySW1wOwotQHByb3BlcnR5KGFzc2lnbikgaWQgZGVsZWdhdGU7Ci0KLS0gKHZvaWQp
aGlkZU92ZXJsYXlTY3JvbGxlcnM7Ci0tICh2b2lkKWZsYXNoU2Nyb2xsZXJzOwotLSAodm9pZClj
b250ZW50QXJlYVNjcm9sbGVkOwotLSAodm9pZCljb250ZW50QXJlYVdpbGxEcmF3OwotLSAodm9p
ZCljb250ZW50QXJlYURpZEhpZGU7Ci0tICh2b2lkKXdpbmRvd09yZGVyZWRPdXQ7Ci0tICh2b2lk
KXdpbmRvd09yZGVyZWRJbjsKLS0gKHZvaWQpbW91c2VFbnRlcmVkQ29udGVudEFyZWE7Ci0tICh2
b2lkKW1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhOwotLSAodm9pZCltb3VzZUV4aXRlZENvbnRlbnRB
cmVhOwotLSAodm9pZClzdGFydExpdmVSZXNpemU7Ci0tICh2b2lkKWNvbnRlbnRBcmVhRGlkUmVz
aXplOwotLSAodm9pZCllbmRMaXZlUmVzaXplOwotLSAodm9pZCliZWdpblNjcm9sbEdlc3R1cmU7
Ci0tICh2b2lkKWVuZFNjcm9sbEdlc3R1cmU7Ci0KLUBlbmQKLQotc3RhdGljIENsYXNzIGxvb2tV
cE5TU2Nyb2xsZXJJbXBDbGFzcygpCi17Ci0gICAgc3RhdGljIENsYXNzIHJlc3VsdCA9IE5TQ2xh
c3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcCIpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXN0YXRpYyBDbGFzcyBsb29rVXBOU1Njcm9sbGVySW1wUGFpckNsYXNzKCkKLXsKLSAgICBzdGF0
aWMgQ2xhc3MgcmVzdWx0ID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVySW1wUGFpciIp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBOU0NvbnRyb2xTaXplIHNjcm9sbGJh
ckNvbnRyb2xTaXplVG9OU0NvbnRyb2xTaXplKGludCBjb250cm9sU2l6ZSkKLXsKLSAgICByZXR1
cm4gY29udHJvbFNpemUgPT0gV2ViQ29yZTo6UmVndWxhclNjcm9sbGJhciA/IE5TUmVndWxhckNv
bnRyb2xTaXplIDogTlNTbWFsbENvbnRyb2xTaXplOwotfQotCi1zdGF0aWMgTlNTY3JvbGxlclN0
eWxlIHByZWZlcnJlZFNjcm9sbGVyU3R5bGUoKQotewotICAgIGlmIChbTlNTY3JvbGxlciByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHByZWZlcnJlZFNjcm9sbGVyU3R5bGUpXSkKLSAgICAg
ICAgcmV0dXJuIFtOU1Njcm9sbGVyIHByZWZlcnJlZFNjcm9sbGVyU3R5bGVdOwotICAgIHJldHVy
biBOU1Njcm9sbGVyU3R5bGVMZWdhY3k7Ci19Ci0KLWJvb2wgd2tTY3JvbGxiYXJQYWludGVyVXNl
c092ZXJsYXlTY3JvbGxlcnModm9pZCkKLXsKLSAgICByZXR1cm4gcHJlZmVycmVkU2Nyb2xsZXJT
dHlsZSgpID09IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXk7Ci19Ci0KLWJvb2wgd2tTY3JvbGxiYXJQ
YWludGVySXNIb3Jpem9udGFsKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyKQotewotICAg
IHJldHVybiBbcGFpbnRlciBpc0hvcml6b250YWxdOwotfQotCi1DR0Zsb2F0IHdrU2Nyb2xsYmFy
UGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICBy
ZXR1cm4gW3BhaW50ZXIga25vYkFscGhhXTsKLX0KLQotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJT
ZXRPdmVybGF5U3RhdGUoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIGludCBvdmVybGF5
U2Nyb2xsZXJTdGF0ZSkKLXsKLSAgICBbcGFpbnRlciBzZXRPdmVybGF5U2Nyb2xsZXJTdGF0ZTpv
dmVybGF5U2Nyb2xsZXJTdGF0ZQotICAgICAgICAgICAgICAgICAgICBmb3JjZUltbWVkaWF0ZWx5
OllFU107Ci19Ci0KLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyUGFpbnQoV0tTY3JvbGxiYXJQYWlu
dGVyUmVmIHBhaW50ZXIsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3Bv
cnRpb24sIE5TUmVjdCBmcmFtZVJlY3QpCi17Ci0gICAgd2tTY3JvbGxiYXJQYWludGVyUGFpbnRU
cmFjayhwYWludGVyLCBlbmFibGVkLCB2YWx1ZSwgcHJvcG9ydGlvbiwgZnJhbWVSZWN0KTsKLSAg
ICB3a1Njcm9sbGJhclBhaW50ZXJQYWludEtub2IocGFpbnRlcik7Ci19Ci0KLXZvaWQgd2tTY3Jv
bGxiYXJQYWludGVyUGFpbnRUcmFjayhXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgYm9v
bCBlbmFibGVkLCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgTlNSZWN0IGZyYW1l
UmVjdCkKLXsKLSAgICBbcGFpbnRlciBzZXRFbmFibGVkOmVuYWJsZWRdOwotICAgIFtwYWludGVy
IHNldEJvdW5kc1NpemU6ZnJhbWVSZWN0LnNpemVdOwotICAgIFtwYWludGVyIHNldERvdWJsZVZh
bHVlOnZhbHVlXTsKLSAgICBbcGFpbnRlciBzZXRLbm9iUHJvcG9ydGlvbjpwcm9wb3J0aW9uXTsK
LQotICAgIGlmIChbcGFpbnRlciBpc0hvcml6b250YWxdKQotICAgICAgICBmcmFtZVJlY3Quc2l6
ZS5oZWlnaHQgPSBbcGFpbnRlciB0cmFja1dpZHRoXTsKLSAgICBlbHNlCi0gICAgICAgIGZyYW1l
UmVjdC5zaXplLndpZHRoID0gW3BhaW50ZXIgdHJhY2tXaWR0aF07Ci0gICAgZnJhbWVSZWN0Lm9y
aWdpbiA9IE5TWmVyb1BvaW50OwotCi0gICAgW3BhaW50ZXIgZHJhd0tub2JTbG90SW5SZWN0OmZy
YW1lUmVjdCBoaWdobGlnaHQ6Tk9dOwotfQotCi12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50
S25vYihXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICBbcGFpbnRlciBkcmF3
S25vYl07Ci19Ci0KLWludCB3a1Njcm9sbGJhck1pbmltdW1UaHVtYkxlbmd0aChXS1Njcm9sbGJh
clBhaW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICByZXR1cm4gW3BhaW50ZXIga25vYk1pbkxlbmd0
aF07Ci19Ci0KLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUoV0tTY3JvbGxiYXJQ
YWludGVyUmVmIHBhaW50ZXIsIGlkIHNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSkKLXsKLSAgICBb
cGFpbnRlciBzZXREZWxlZ2F0ZTpzY3JvbGxiYXJQYWludGVyRGVsZWdhdGVdOwotfQotCi12b2lk
IHdrU2Nyb2xsYmFyUGFpbnRlclNldEVuYWJsZWQoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50
ZXIsIGJvb2wgZW5hYmxlZCkKLXsKLSAgICBbcGFpbnRlciBzZXRFbmFibGVkOmVuYWJsZWRdOwot
fQotCi1DR0Zsb2F0IHdrU2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWlu
dGVyUmVmIHBhaW50ZXIpCi17Ci0gICAgcmV0dXJuIFtwYWludGVyIHRyYWNrQWxwaGFdOwotfQot
Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUGFpbnRlcihpbnQgY29udHJv
bFNpemUsIGJvb2wgaXNIb3Jpem9udGFsKQotewotICAgIHJldHVybiB3a01ha2VTY3JvbGxiYXJS
ZXBsYWNlbWVudFBhaW50ZXIobmlsLCBwcmVmZXJyZWRTY3JvbGxlclN0eWxlKCksIGNvbnRyb2xT
aXplLCBpc0hvcml6b250YWwpOwotfQotCi1pbnQgd2tTY3JvbGxiYXJUaGlja25lc3MoaW50IGNv
bnRyb2xTaXplKQotewotICAgIHJldHVybiBbd2tNYWtlU2Nyb2xsYmFyUGFpbnRlcihjb250cm9s
U2l6ZSwgZmFsc2UpIHRyYWNrQm94V2lkdGhdOwotfQotCi1pbnQgd2tTY3JvbGxiYXJNaW5pbXVt
VG90YWxMZW5ndGhOZWVkZWRGb3JUaHVtYihXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikK
LXsKLSAgICByZXR1cm4gW3BhaW50ZXIga25vYk1pbkxlbmd0aF0gKwotICAgICAgICAgICBbcGFp
bnRlciB0cmFja092ZXJsYXBFbmRJbnNldF0gKwotICAgICAgICAgICBbcGFpbnRlciBrbm9iT3Zl
cmxhcEVuZEluc2V0XSArCi0gICAgICAgICAgIChbcGFpbnRlciB0cmFja0VuZEluc2V0XSArIFtw
YWludGVyIGtub2JFbmRJbnNldF0pICogMjsKLX0KLQotV0tTY3JvbGxiYXJQYWludGVyUmVmIHdr
VmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihXS1Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgcmV0dXJuIFtjb250cm9sbGVyIHZlcnRp
Y2FsU2Nyb2xsZXJJbXBdOwotfQotCi1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tIb3Jpem9udGFs
U2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
clJlZiBjb250cm9sbGVyKQotewotICAgIHJldHVybiBbY29udHJvbGxlciBob3Jpem9udGFsU2Ny
b2xsZXJJbXBdOwotfQotCi13a1Njcm9sbGVyU3R5bGUgd2tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlclN0eWxlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsK
LSAgICByZXR1cm4gW2NvbnRyb2xsZXIgc2Nyb2xsZXJTdHlsZV07Ci19Ci0KLVdLU2Nyb2xsYmFy
UGFpbnRlclJlZiB3a01ha2VTY3JvbGxiYXJSZXBsYWNlbWVudFBhaW50ZXIoV0tTY3JvbGxiYXJQ
YWludGVyUmVmIG9sZFBhaW50ZXIsIGludCBuZXdTdHlsZSwgaW50IGNvbnRyb2xTaXplLCBib29s
IGlzSG9yaXpvbnRhbCkKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJs
ZSgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbbG9va1VwTlNTY3JvbGxlcklt
cENsYXNzKCkgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6bmV3U3R5bGUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xTaXplOnNjcm9sbGJhckNvbnRy
b2xTaXplVG9OU0NvbnRyb2xTaXplKGNvbnRyb2xTaXplKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6aXNIb3Jpem9udGFsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNpbmdTY3JvbGxlckltcDpv
bGRQYWludGVyXTsKLX0KLQotdm9pZCB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihX
S1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIsIFdLU2Nyb2xsYmFyUGFp
bnRlclJlZiBwYWludGVyLCBib29sIGlzSG9yaXpvbnRhbCkKLXsKLSAgICBpZiAoaXNIb3Jpem9u
dGFsKQotICAgICAgICBbY29udHJvbGxlciBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6cGFpbnRl
cl07Ci0gICAgZWxzZQotICAgICAgICBbY29udHJvbGxlciBzZXRWZXJ0aWNhbFNjcm9sbGVySW1w
OnBhaW50ZXJdOwotfQotCi12b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJTdHls
ZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIHBhaW50ZXIsIHdrU2Nyb2xsZXJTdHls
ZSBuZXdTdHlsZSkKLXsKLSAgICBbcGFpbnRlciBzZXRTY3JvbGxlclN0eWxlOm5ld1N0eWxlXTsK
LX0KLQotQ0dSZWN0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KFdLU2Nyb2xsYmFyUGFpbnRl
clJlZiBwYWludGVyKQotewotICAgIHJldHVybiBOU1JlY3RUb0NHUmVjdChbcGFpbnRlciByZWN0
Rm9yUGFydDpOU1Njcm9sbGVyS25vYl0pOwotfQotCi12b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
cktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgQ0dGbG9hdCBhbHBoYSkK
LXsKLSAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6YWxwaGFdOwotfQotCi12b2lkIHdrU2V0U2Ny
b2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIENH
RmxvYXQgYWxwaGEpCi17Ci0gICAgW3BhaW50ZXIgc2V0VHJhY2tBbHBoYTphbHBoYV07Ci19Ci0K
LXZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZiBwYWludGVyLCB3a1Njcm9sbGVyS25vYlN0eWxlIHN0eWxlKQotewotICAgIFtwYWludGVyIHNl
dEtub2JTdHlsZTpzdHlsZV07Ci19Ci0KLVdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYg
d2tNYWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIoaWQgcGFpbnRlckNvbnRyb2xsZXJEZWxl
Z2F0ZSkKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIE5TU2Nyb2xsZXJJbXBQYWlyKiBjb250cm9sbGVyID0gW1tb
bG9va1VwTlNTY3JvbGxlckltcFBhaXJDbGFzcygpIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07
Ci0gICAgW2NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6cGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZV07
Ci0gICAgW2NvbnRyb2xsZXIgc2V0U2Nyb2xsZXJTdHlsZTpwcmVmZXJyZWRTY3JvbGxlclN0eWxl
KCldOwotICAgIHJldHVybiBjb250cm9sbGVyOwotfQotCi12b2lkIHdrQ29udGVudEFyZWFTY3Jv
bGxlZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAg
W2NvbnRyb2xsZXIgY29udGVudEFyZWFTY3JvbGxlZF07Ci19Ci0KLXZvaWQgd2tDb250ZW50QXJl
YVdpbGxQYWludChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17
Ci0gICAgW2NvbnRyb2xsZXIgY29udGVudEFyZWFXaWxsRHJhd107Ci19Ci0KLXZvaWQgd2tNb3Vz
ZUVudGVyZWRDb250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRy
b2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgbW91c2VFbnRlcmVkQ29udGVudEFyZWFdOwotfQot
Ci12b2lkIHdrTW91c2VFeGl0ZWRDb250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgbW91c2VFeGl0ZWRDb250ZW50
QXJlYV07Ci19Ci0KLXZvaWQgd2tNb3VzZU1vdmVkSW5Db250ZW50QXJlYShXS1Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgbW91c2VN
b3ZlZEluQ29udGVudEFyZWFdOwotfQotCi12b2lkIHdrV2lsbFN0YXJ0TGl2ZVJlc2l6ZShXS1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xs
ZXIgc3RhcnRMaXZlUmVzaXplXTsKLX0KLQotdm9pZCB3a0NvbnRlbnRBcmVhUmVzaXplZChXS1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xs
ZXIgY29udGVudEFyZWFEaWRSZXNpemVdOwotfQotCi12b2lkIHdrV2lsbEVuZExpdmVSZXNpemUo
V0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250
cm9sbGVyIGVuZExpdmVSZXNpemVdOwotfQotCi12b2lkIHdrQ29udGVudEFyZWFEaWRTaG93KFdL
U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsKLSAgICBbY29udHJv
bGxlciB3aW5kb3dPcmRlcmVkSW5dOwotfQotCi12b2lkIHdrQ29udGVudEFyZWFEaWRIaWRlKFdL
U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsKLSAgICBbY29udHJv
bGxlciB3aW5kb3dPcmRlcmVkT3V0XTsKLX0KLQotdm9pZCB3a0RpZEJlZ2luU2Nyb2xsR2VzdHVy
ZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2Nv
bnRyb2xsZXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKLX0KLQotdm9pZCB3a0RpZEVuZFNjcm9sbEdl
c3R1cmUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAg
IFtjb250cm9sbGVyIGVuZFNjcm9sbEdlc3R1cmVdOwotfQotCi12b2lkIHdrU2Nyb2xsYmFyUGFp
bnRlckZvcmNlRmxhc2hTY3JvbGxlcnMoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBj
b250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIGhpZGVPdmVybGF5U2Nyb2xsZXJzXTsKLSAg
ICBbY29udHJvbGxlciBmbGFzaFNjcm9sbGVyc107Ci19Ci0KLWJvb2wgaXNTY3JvbGxiYXJPdmVy
bGF5QVBJQXZhaWxhYmxlKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBhcGlBdmFpbGFibGUgPSBbbG9v
a1VwTlNTY3JvbGxlckltcENsYXNzKCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzY3Jv
bGxlckltcFdpdGhTdHlsZTpjb250cm9sU2l6ZTpob3Jpem9udGFsOnJlcGxhY2luZ1Njcm9sbGVy
SW1wOildICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvb2tVcE5TU2Nyb2xs
ZXJJbXBQYWlyQ2xhc3MoKSBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2Ny
b2xsZXJTdHlsZSldOwotICAgIHJldHVybiBhcGlBdmFpbGFibGU7Ci19Ci0KLSNlbmRpZiAvLyBV
U0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgKaW5kZXggY2M5
YTMwOGVlMjMwMDI1ZTU1NDlkZjgyMDMxMzNiN2UzYWVlMmIwYi4uNDFhMTk4ZTNmODQyMGM4NDg5
NDVmYjg0NzQ0ZGRiNzAwMjRjZDZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaApAQCAtMjcs
NjMgKzI3LDIyIEBACiAjaWZuZGVmIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWNfaAogI2RlZmlu
ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjX2gKIAotI2luY2x1ZGUgIlNjcm9sbGJhck92ZXJs
YXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ29tcG9z
aXRlLmgiCi0KLS8vIFRoaXMgZmlsZSAoYW5kIGl0cyBhc3NvY2lhdGVkIC5tbSBmaWxlKSBpcyBh
IGNsb25lIG9mIFNjcm9sbGJhclRoZW1lTWFjLmguCi0vLyBTZWUgdGhlIC5tbSBmaWxlIGZvciBk
ZXRhaWxzLgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lTWFjLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyA6IHB1YmxpYyBTY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZSB7CitjbGFzcyBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjIDogcHVi
bGljIFNjcm9sbGJhclRoZW1lTWFjIHsKIHB1YmxpYzoKICAgICBTY3JvbGxiYXJUaGVtZUNocm9t
aXVtTWFjKCk7CiAgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYygpOwogCi0g
ICAgdm9pZCBwcmVmZXJlbmNlc0NoYW5nZWQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVF
bmFibGVkU3RhdGUoU2Nyb2xsYmFyKik7Ci0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xs
YmFyKiwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
KTsKIAotICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9s
U2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOwotCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29u
dHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCB1c2Vz
T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Nyb2xs
YmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhciopOwotCi0gICAgdmlydHVhbCBkb3VibGUgaW5pdGlh
bEF1dG9zY3JvbGxUaW1lckRlbGF5KCk7Ci0gICAgdmlydHVhbCBkb3VibGUgYXV0b3Njcm9sbFRp
bWVyRGVsYXkoKTsKLQotICAgIHZpcnR1YWwgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBidXR0
b25zUGxhY2VtZW50KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTY3JvbGxi
YXIoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJTY3JvbGxiYXIoU2Ny
b2xsYmFyKik7Ci0KLSAgICB2b2lkIHNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFy
KiwgV0tTY3JvbGxiYXJQYWludGVyUmVmKTsKLSAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFp
bnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLQogICAgIHZpcnR1YWwgdm9pZCBwYWludE92
ZXJoYW5nQXJlYXMoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
IGhvcml6b250YWxPdmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdB
cmVhLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIAotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgYm9vbCBoYXNU
aHVtYihTY3JvbGxiYXIqKTsKLQotICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChT
Y3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotICAgIHZp
cnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0
LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3Qo
U2Nyb2xsYmFyKiwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLQotICAgIHZpcnR1YWwgaW50IG1h
eE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSB7IHJldHVybiA0MDsgfQotCi0gICAgdmlydHVhbCBpbnQg
bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciopOwotCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKFNjcm9sbGJh
ciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwotCiBwcml2YXRlOgogICAgIHZvaWQgcGFp
bnRHaXZlblRpY2ttYXJrcyhHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgVmVjdG9yPEludFJlY3Q+Jik7CiAKLXByaXZhdGU6CiAgICAgUmVmUHRyPFBh
dHRlcm4+IG1fb3ZlcmhhbmdQYXR0ZXJuOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0K
aW5kZXggODRkNWZlMWM0OTE4Y2U3ZGM5MzNlZWYwNjVmMWM0NDhhNDkwOGFhZS4uZjkzNjQxODZm
Y2YzNWUzY2EwZTk2ZTFhOTc0M2ViMjljZDc5NWUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFj
Lm1tCkBAIC0yNywxMDggKzI3LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5oIgogCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTlNTY3JvbGxlcklt
cERldGFpbHMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKLSNpbmNsdWRlICJTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNYWMuaCIK
ICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiAjaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgInNraWEvZXh0L3NraWFfdXRpbHNfbWFjLmgi
CiAjZW5kaWYKIAotCi0KLS8vIEZJWE1FOiBUaGVyZSBhcmUgcmVwYWludGluZyBwcm9ibGVtcyBk
dWUgdG8gQXF1YSBzY3JvbGwgYmFyIGJ1dHRvbnMnIHZpc3VhbCBvdmVyZmxvdy4KLQotdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi0vLyBUaGlzIGZpbGUg
KGFuZCBpdHMgYXNzb2NpYXRlZCAuaCBmaWxlKSBpcyBhIGNsb25lIG9mIFNjcm9sbGJhclRoZW1l
TWFjLm1tLgotLy8gQmVjYXVzZSB3ZSB3YW50IHRvIGRyYXcgdGlja21hcmtzIGluIHRoZSBzY3Jv
bGxiYXIsIHdlIG11c3QgbWFpbnRhaW4gYSBmb3JrLgotLy8gUGxlYXNlIG1haW50YWluIHRoaXMg
ZmlsZSBieSBwZXJmb3JtaW5nIHBhcmFsbGVsIGNoYW5nZXMgdG8gaXQuCi0vLwotLy8gVGhlIG9u
bHkgY2hhbmdlcyBmcm9tIFNjcm9sbGJhclRoZW1lTWFjIHNob3VsZCBiZToKLS8vIC0gVGhlIGNs
YXNzbmFtZSBjaGFuZ2UgZnJvbSBTY3JvbGxiYXJUaGVtZU1hYyB0byBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjLgotLy8gLSBJbiBwYWludCgpIHRoZSBjb2RlIHRvIHBhaW50IHRoZSB0cmFjaywg
dGlja21hcmtzLCBhbmQgdGh1bWIgc2VwYXJhdGVseS4KLS8vIC0gSW4gcGFpbnQoKSB0aGUgdGh1
bWIgaXMgZHJhd24gdmlhIENocm9tZUJyaWRnZS9XZWJUaGVtZUVuZ2luZS4KLS8vIC0gVmFyaW91
cyBmdW5jdGlvbnMgdGhhdCB3ZXJlIHNwbGl0IHVzaW5nICNpZiBVU0UoV0tfU0NST0xMQkFSX1BB
SU5URVIpCi0vLyAgIGhhdmUgYmVlbiBjb21iaW5lZCB1c2luZyBydW50aW1lIGNoZWNrcyBpbnN0
ZWFkLgotLy8KLS8vIEZvciBhbGwgb3RoZXIgZGlmZmVyZW5jZXMsIGlmIGl0IHdhcyBpbnRyb2R1
Y2VkIGluIHRoaXMgZmlsZSwgdGhlbiB0aGUKLS8vIG1haW50YWluZXIgZm9yZ290IHRvIGluY2x1
ZGUgaXQgaW4gdGhlIGxpc3Q7IG90aGVyd2lzZSBpdCBpcyBhbiB1cGRhdGUgdGhhdAotLy8gc2hv
dWxkIGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoaXMgZmlsZSBidXQgd2FzIG5vdC4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8U2Nyb2xsYmFyKiwgUmV0YWluUHRyPFdL
U2Nyb2xsYmFyUGFpbnRlclJlZj4gPiBTY3JvbGxiYXJQYWludGVyTWFwOwotCi1zdGF0aWMgU2Ny
b2xsYmFyUGFpbnRlck1hcCogc2Nyb2xsYmFyTWFwKCkKLXsKLSAgICBzdGF0aWMgU2Nyb2xsYmFy
UGFpbnRlck1hcCogbWFwID0gbmV3IFNjcm9sbGJhclBhaW50ZXJNYXA7Ci0gICAgcmV0dXJuIG1h
cDsKLX0KLQotfQotCi1AaW50ZXJmYWNlIFNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgOiBOU09iamVj
dAotewotfQotCi0rICh2b2lkKXJlZ2lzdGVyQXNPYnNlcnZlcjsKLSsgKHZvaWQpYXBwZWFyYW5j
ZVByZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24qKXRoZU5vdGlmaWNhdGlvbjsKLSsgKHZvaWQp
YmVoYXZpb3JQcmVmc0NoYW5nZWQ6KE5TTm90aWZpY2F0aW9uKil0aGVOb3RpZmljYXRpb247Ci0K
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFNjcm9sbGJhclByZWZzT2JzZXJ2ZXIKLQotKyAodm9p
ZClhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiopdW51c2VkTm90aWZpY2F0
aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNhdGlvbik7Ci0KLSAgICBTY3Jv
bGxiYXJUaGVtZSogdGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKLSAgICBpZiAodGhl
bWUtPmlzTW9ja1RoZW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRpY19jYXN0PFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPih0aGVtZSktPnByZWZlcmVuY2VzQ2hhbmdlZCgpOwot
ICAgIGlmIChzY3JvbGxiYXJNYXAoKS0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
U2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3IgZW5kID0gc2Nyb2xsYmFyTWFwKCktPmVuZCgp
OwotICAgIGZvciAoU2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3IgaXQgPSBzY3JvbGxiYXJN
YXAoKS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGl0LT5maXJzdC0+c3R5
bGVDaGFuZ2VkKCk7Ci0gICAgICAgIGl0LT5maXJzdC0+aW52YWxpZGF0ZSgpOwotICAgIH0KLX0K
LQotKyAodm9pZCliZWhhdmlvclByZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24qKXVudXNlZE5v
dGlmaWNhdGlvbgotewotICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwotCi0g
ICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAg
aWYgKHRoZW1lLT5pc01vY2tUaGVtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWNf
Y2FzdDxTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4odGhlbWUpLT5wcmVmZXJlbmNlc0NoYW5n
ZWQoKTsKLX0KLQotKyAodm9pZClyZWdpc3RlckFzT2JzZXJ2ZXIKLXsKLSAgICBbW05TRGlzdHJp
YnV0ZWROb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoYXBwZWFyYW5jZVByZWZzQ2hhbmdlZDopIG5hbWU6QCJBcHBsZUFx
dWFTY3JvbGxCYXJWYXJpYW50Q2hhbmdlZCIgb2JqZWN0Om5pbCBzdXNwZW5zaW9uQmVoYXZpb3I6
TlNOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHldOwotICAg
IFtbTlNEaXN0cmlidXRlZE5vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNl
cnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihiZWhhdmlvclByZWZzQ2hhbmdlZDopIG5hbWU6
QCJBcHBsZU5vUmVkaXNwbGF5QXBwZWFyYW5jZVByZWZlcmVuY2VDaGFuZ2VkIiBvYmplY3Q6bmls
IHN1c3BlbnNpb25CZWhhdmlvcjpOU05vdGlmaWNhdGlvblN1c3BlbnNpb25CZWhhdmlvckNvYWxl
c2NlXTsKLX0KLQotQGVuZAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcm9sbGJhclRoZW1l
KiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQpAQCAtMTM3LDMzMyArNTAsMTcgQEAgU2Ny
b2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCiAgICAgcmV0dXJuICZ0
aGVtZTsKIH0KIAotLy8gRklYTUU6IEdldCB0aGVzZSBudW1iZXJzIGZyb20gQ29yZVVJLgotc3Rh
dGljIGludCBjU2Nyb2xsYmFyVGhpY2tuZXNzW10gPSB7IDE1LCAxMSB9Owotc3RhdGljIGludCBj
UmVhbEJ1dHRvbkxlbmd0aFtdID0geyAyOCwgMjEgfTsKLXN0YXRpYyBpbnQgY0J1dHRvbkluc2V0
W10gPSB7IDE0LCAxMSB9Owotc3RhdGljIGludCBjQnV0dG9uSGl0SW5zZXRbXSA9IHsgMywgMiB9
OwotLy8gY1JlYWxCdXR0b25MZW5ndGggLSBjQnV0dG9uSW5zZXQKLXN0YXRpYyBpbnQgY0J1dHRv
bkxlbmd0aFtdID0geyAxNCwgMTAgfTsKLXN0YXRpYyBpbnQgY1RodW1iTWluTGVuZ3RoW10gPSB7
IDI2LCAyMCB9OwotCi1zdGF0aWMgaW50IGNPdXRlckJ1dHRvbkxlbmd0aFtdID0geyAxNiwgMTQg
fTsgLy8gVGhlIG91dGVyIGJ1dHRvbiBpbiBhIGRvdWJsZSBidXR0b24gcGFpciBpcyBhIGJpdCBi
aWdnZXIuCi1zdGF0aWMgaW50IGNPdXRlckJ1dHRvbk92ZXJsYXAgPSAyOwotCi1zdGF0aWMgZmxv
YXQgZ0luaXRpYWxCdXR0b25EZWxheSA9IDAuNWY7Ci1zdGF0aWMgZmxvYXQgZ0F1dG9zY3JvbGxC
dXR0b25EZWxheSA9IDAuMDVmOwotc3RhdGljIGJvb2wgZ0p1bXBPblRyYWNrQ2xpY2sgPSBmYWxz
ZTsKLXN0YXRpYyBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGdCdXR0b25QbGFjZW1lbnQgPSBp
c1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSA/IFNjcm9sbGJhckJ1dHRvbnNOb25lIDog
U2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZDsKLQotc3RhdGljIHZvaWQgdXBkYXRlQXJyb3dQbGFj
ZW1lbnQoKQotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgTlNTdHJpbmcgKmJ1dHRvblBsYWNlbWVudCA9IFtbTlNVc2Vy
RGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIG9iamVjdEZvcktleTpAIkFwcGxlU2Nyb2xs
QmFyVmFyaWFudCJdOwotICAgIGlmIChbYnV0dG9uUGxhY2VtZW50IGlzRXF1YWxUb1N0cmluZzpA
IlNpbmdsZSJdKQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0dG9uc1Np
bmdsZTsKLSAgICBlbHNlIGlmIChbYnV0dG9uUGxhY2VtZW50IGlzRXF1YWxUb1N0cmluZzpAIkRv
dWJsZU1pbiJdKQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0dG9uc0Rv
dWJsZVN0YXJ0OwotICAgIGVsc2UgaWYgKFtidXR0b25QbGFjZW1lbnQgaXNFcXVhbFRvU3RyaW5n
OkAiRG91YmxlQm90aCJdKQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0
dG9uc0RvdWJsZUJvdGg7Ci0gICAgZWxzZQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Ny
b2xsYmFyQnV0dG9uc0RvdWJsZUVuZDsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjpyZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBib29s
IGlzSG9yaXpvbnRhbCA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyOwotICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxiYXJQYWludGVyID0gd2tN
YWtlU2Nyb2xsYmFyUGFpbnRlcihzY3JvbGxiYXItPmNvbnRyb2xTaXplKCksIGlzSG9yaXpvbnRh
bCk7Ci0gICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIsIHNjcm9sbGJhclBhaW50ZXIp
OwotICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzY3JvbGxiYXIpOwotICAgIHVwZGF0ZVNjcm9sbGJh
ck92ZXJsYXlTdHlsZShzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAg
c2Nyb2xsYmFyTWFwKCktPnJlbW92ZShzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1NYWM6OnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdQYWludGVyKQotewotICAgIHNjcm9sbGJh
ck1hcCgpLT5zZXQoc2Nyb2xsYmFyLCBuZXdQYWludGVyKTsKLSAgICB1cGRhdGVFbmFibGVkU3Rh
dGUoc2Nyb2xsYmFyKTsKLSAgICB1cGRhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoc2Nyb2xsYmFy
KTsKLX0KLQotV0tTY3JvbGxiYXJQYWludGVyUmVmIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJu
IHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKTsKLX0KLQogU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYzo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYygpCiB7Ci0gICAgc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZWQ7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBpbml0
aWFsaXplZCA9IHRydWU7Ci0KLSAgICAgICAgLy8gTG9hZCB0aGUgbGluZW4gcGF0dGVybiBpbWFn
ZSB1c2VkIGZvciBvdmVyaGFuZyBkcmF3aW5nLgotICAgICAgICBSZWZQdHI8SW1hZ2U+IHBhdHRl
cm5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgib3ZlcmhhbmdQYXR0ZXJuIik7
Ci0gICAgICAgIG1fb3ZlcmhhbmdQYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHBhdHRlcm5JbWFn
ZSwgdHJ1ZSwgdHJ1ZSk7Ci0KLSAgICAgICAgW1Njcm9sbGJhclByZWZzT2JzZXJ2ZXIgcmVnaXN0
ZXJBc09ic2VydmVyXTsKLSAgICAgICAgcHJlZmVyZW5jZXNDaGFuZ2VkKCk7Ci0gICAgfQorICAg
IC8vIExvYWQgdGhlIGxpbmVuIHBhdHRlcm4gaW1hZ2UgdXNlZCBmb3Igb3ZlcmhhbmcgZHJhd2lu
Zy4KKyAgICBSZWZQdHI8SW1hZ2U+IHBhdHRlcm5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgib3ZlcmhhbmdQYXR0ZXJuIik7CisgICAgbV9vdmVyaGFuZ1BhdHRlcm4gPSBQYXR0
ZXJuOjpjcmVhdGUocGF0dGVybkltYWdlLCB0cnVlLCB0cnVlKTsKIH0KIAogU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYzo6flNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMoKQogewogfQogCi12b2lk
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnByZWZlcmVuY2VzQ2hhbmdlZCgpCi17Ci0gICAg
TlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRl
ZmF1bHRzXTsKLSAgICBbZGVmYXVsdHMgc3luY2hyb25pemVdOwotICAgIHVwZGF0ZUFycm93UGxh
Y2VtZW50KCk7Ci0gICAgZ0luaXRpYWxCdXR0b25EZWxheSA9IFtkZWZhdWx0cyBmbG9hdEZvcktl
eTpAIk5TU2Nyb2xsZXJCdXR0b25EZWxheSJdOwotICAgIGdBdXRvc2Nyb2xsQnV0dG9uRGVsYXkg
PSBbZGVmYXVsdHMgZmxvYXRGb3JLZXk6QCJOU1Njcm9sbGVyQnV0dG9uUGVyaW9kIl07Ci0gICAg
Z0p1bXBPblRyYWNrQ2xpY2sgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpAIkFwcGxlU2Nyb2xsZXJQ
YWdpbmdCZWhhdmlvciJdOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6c2Ny
b2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQotewotICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHdr
U2Nyb2xsYmFyVGhpY2tuZXNzKGNvbnRyb2xTaXplKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biBjU2Nyb2xsYmFyVGhpY2tuZXNzW2NvbnRyb2xTaXplXTsKLX0KLQotYm9vbCBTY3JvbGxiYXJU
aGVtZUNocm9taXVtTWFjOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdAotewotICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHdrU2Ny
b2xsYmFyUGFpbnRlclVzZXNPdmVybGF5U2Nyb2xsZXJzKCk7Ci0gICAgZWxzZQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgd2tTY3JvbGxlcktub2JTdHlsZSB0b1Nj
cm9sbGJhclBhaW50ZXJLbm9iU3R5bGUoU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIHN0eWxlKQotewot
ICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICBjYXNlIFNjcm9sbGJhck92ZXJsYXlTdHlsZURhcms6
Ci0gICAgICAgIHJldHVybiB3a1Njcm9sbGVyS25vYlN0eWxlRGFyazsKLSAgICBjYXNlIFNjcm9s
bGJhck92ZXJsYXlTdHlsZUxpZ2h0OgotICAgICAgICByZXR1cm4gd2tTY3JvbGxlcktub2JTdHls
ZUxpZ2h0OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB3a1Njcm9sbGVyS25vYlN0eWxl
RGVmYXVsdDsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dXBk
YXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAgICAgICB3a1NldFNjcm9s
bGJhclBhaW50ZXJLbm9iU3R5bGUocGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpLCB0b1Nj
cm9sbGJhclBhaW50ZXJLbm9iU3R5bGUoc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3Jv
bGxiYXJPdmVybGF5U3R5bGUoKSkpOwotICAgIH0KLX0KLQotZG91YmxlIFNjcm9sbGJhclRoZW1l
Q2hyb21pdW1NYWM6OmluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpCi17Ci0gICAgcmV0dXJu
IGdJbml0aWFsQnV0dG9uRGVsYXk7Ci19Ci0KLWRvdWJsZSBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjphdXRvc2Nyb2xsVGltZXJEZWxheSgpCi17Ci0gICAgcmV0dXJuIGdBdXRvc2Nyb2xsQnV0
dG9uRGVsYXk7Ci19Ci0KLVNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bU1hYzo6YnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdCdXR0
b25QbGFjZW1lbnQ7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6aGFzQnV0
dG9ucyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFi
bGVkKCkgJiYgZ0J1dHRvblBsYWNlbWVudCAhPSBTY3JvbGxiYXJCdXR0b25zTm9uZQotICAgICAg
ICAgICAgICYmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cgotICAgICAgICAgICAgID8gc2Nyb2xsYmFyLT53aWR0aCgpCi0gICAgICAgICAgICAgOiBzY3Jv
bGxiYXItPmhlaWdodCgpKSA+PSAyICogKGNSZWFsQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29u
dHJvbFNpemUoKV0gLSBjQnV0dG9uSGl0SW5zZXRbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSk7
Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6aGFzVGh1bWIoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCi17Ci0gICAgaW50IG1pbkxlbmd0aEZvclRodW1iOwotICAgIGlmIChpc1Nj
cm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgbWluTGVuZ3RoRm9yVGh1bWIg
PSB3a1Njcm9sbGJhck1pbmltdW1Ub3RhbExlbmd0aE5lZWRlZEZvclRodW1iKHNjcm9sbGJhck1h
cCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBtaW5MZW5ndGhG
b3JUaHVtYiA9IDIgKiBjQnV0dG9uSW5zZXRbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIGNU
aHVtYk1pbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgMTsKLSAgICByZXR1cm4g
c2Nyb2xsYmFyLT5lbmFibGVkKCkgJiYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyID8KLSAgICAgICAgICAgICBzY3JvbGxiYXItPndpZHRoKCkgOgotICAg
ICAgICAgICAgIHNjcm9sbGJhci0+aGVpZ2h0KCkpID49IG1pbkxlbmd0aEZvclRodW1iOwotfQot
Ci1zdGF0aWMgSW50UmVjdCBidXR0b25SZXBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBidXR0b25S
ZWN0LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNp
emUgY29udHJvbFNpemUsIGJvb2wgc3RhcnQpCi17Ci0gICAgQVNTRVJUKGdCdXR0b25QbGFjZW1l
bnQgIT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUpOwotCi0gICAgSW50UmVjdCBwYWludFJlY3QoYnV0
dG9uUmVjdCk7Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsK
LSAgICAgICAgcGFpbnRSZWN0LnNldFdpZHRoKGNSZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xTaXpl
XSk7Ci0gICAgICAgIGlmICghc3RhcnQpCi0gICAgICAgICAgICBwYWludFJlY3Quc2V0WChidXR0
b25SZWN0LngoKSAtIChjUmVhbEJ1dHRvbkxlbmd0aFtjb250cm9sU2l6ZV0gLSBidXR0b25SZWN0
LndpZHRoKCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwYWludFJlY3Quc2V0SGVpZ2h0KGNS
ZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xTaXplXSk7Ci0gICAgICAgIGlmICghc3RhcnQpCi0gICAg
ICAgICAgICBwYWludFJlY3Quc2V0WShidXR0b25SZWN0LnkoKSAtIChjUmVhbEJ1dHRvbkxlbmd0
aFtjb250cm9sU2l6ZV0gLSBidXR0b25SZWN0LmhlaWdodCgpKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHBhaW50UmVjdDsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpi
YWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBi
b29sIHBhaW50aW5nKQotewotICAgIEludFJlY3QgcmVzdWx0OwotCi0gICAgaWYgKHBhcnQgPT0g
QmFja0J1dHRvblN0YXJ0UGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1
dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zRG91Ymxl
RW5kKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0
b25FbmRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUg
fHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydCB8fCBi
dXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc1NpbmdsZSkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0KLSAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNj
cm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0gICAgYm9vbCBvdXRlckJ1dHRvbiA9IHBhcnQgPT0g
QmFja0J1dHRvblN0YXJ0UGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1
dHRvbnNEb3VibGVTdGFydCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9u
c0RvdWJsZUJvdGgpOwotICAgIGlmIChvdXRlckJ1dHRvbikgewotICAgICAgICBpZiAoc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBy
ZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgY091dGVyQnV0
dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyAocGFpbnRpbmcgPyBjT3V0ZXJC
dXR0b25PdmVybGFwIDogMCksIHRoaWNrbmVzcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJlc3VsdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCB0aGlja25l
c3MsIGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgKHBhaW50
aW5nID8gY091dGVyQnV0dG9uT3ZlcmxhcCA6IDApKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KLSAgICAvLyBPdXIgcmVwYWludCByZWN0IGlzIHNsaWdodGx5IGxhcmdlciwgc2lu
Y2Ugd2UgYXJlIGEgYnV0dG9uIHRoYXQgaXMgYWRqYWNlbnQgdG8gdGhlIHRyYWNrLgotICAgIGlm
IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAg
ICAgICBpbnQgc3RhcnQgPSBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgPyBzY3JvbGxiYXIt
PngoKSA6IHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgpIC0gY091dGVyQnV0dG9u
TGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gLSBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJh
ci0+Y29udHJvbFNpemUoKV07Ci0gICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc3RhcnQsIHNjcm9s
bGJhci0+eSgpLCBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0sIHRoaWNr
bmVzcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gcGFydCA9PSBCYWNrQnV0
dG9uU3RhcnRQYXJ0ID8gc2Nyb2xsYmFyLT55KCkgOiBzY3JvbGxiYXItPnkoKSArIHNjcm9sbGJh
ci0+aGVpZ2h0KCkgLSBjT3V0ZXJCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
XSAtIGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXTsKLSAgICAgICAgcmVz
dWx0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc3RhcnQsIHRoaWNrbmVzcywgY0J1dHRvbkxl
bmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldKTsKLSAgICB9Ci0KLSAgICBpZiAocGFpbnRp
bmcpCi0gICAgICAgIHJldHVybiBidXR0b25SZXBhaW50UmVjdChyZXN1bHQsIHNjcm9sbGJhci0+
b3JpZW50YXRpb24oKSwgc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpLCBwYXJ0ID09IEJhY2tCdXR0
b25TdGFydFBhcnQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYzo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCBwYWludGluZykKLXsKLSAgICBJbnRSZWN0IHJlc3Vs
dDsKLQotICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0ICYmIChidXR0b25zUGxh
Y2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09
IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0K
LSAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0ICYmIChidXR0b25zUGxhY2Vt
ZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNj
cm9sbGJhckJ1dHRvbnNEb3VibGVFbmQgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJh
ckJ1dHRvbnNTaW5nbGUpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaW50IHRoaWNr
bmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwotICAg
IGludCBvdXRlckJ1dHRvbkxlbmd0aCA9IGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNv
bnRyb2xTaXplKCldOwotICAgIGludCBidXR0b25MZW5ndGggPSBjQnV0dG9uTGVuZ3RoW3Njcm9s
bGJhci0+Y29udHJvbFNpemUoKV07Ci0KLSAgICBib29sIG91dGVyQnV0dG9uID0gcGFydCA9PSBG
b3J3YXJkQnV0dG9uRW5kUGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1
dHRvbnNEb3VibGVFbmQgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNE
b3VibGVCb3RoKTsKLSAgICBpZiAob3V0ZXJCdXR0b24pIHsKLSAgICAgICAgaWYgKHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgpIC0gb3V0
ZXJCdXR0b25MZW5ndGgsIHNjcm9sbGJhci0+eSgpLCBvdXRlckJ1dHRvbkxlbmd0aCwgdGhpY2tu
ZXNzKTsKLSAgICAgICAgICAgIGlmIChwYWludGluZykKLSAgICAgICAgICAgICAgICByZXN1bHQu
aW5mbGF0ZVgoY091dGVyQnV0dG9uT3ZlcmxhcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSArIHNj
cm9sbGJhci0+aGVpZ2h0KCkgLSBvdXRlckJ1dHRvbkxlbmd0aCwgdGhpY2tuZXNzLCBvdXRlckJ1
dHRvbkxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRpbmcpCi0gICAgICAgICAgICAgICAg
cmVzdWx0LmluZmxhdGVZKGNPdXRlckJ1dHRvbk92ZXJsYXApOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGludCBzdGFydCA9IHBhcnQgPT0g
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQgPyBzY3JvbGxiYXItPngoKSArIHNjcm9sbGJhci0+d2lkdGgo
KSAtIGJ1dHRvbkxlbmd0aCA6IHNjcm9sbGJhci0+eCgpICsgb3V0ZXJCdXR0b25MZW5ndGg7Ci0g
ICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc3RhcnQsIHNjcm9sbGJhci0+eSgpLCBidXR0b25MZW5n
dGgsIHRoaWNrbmVzcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gcGFydCA9
PSBGb3J3YXJkQnV0dG9uRW5kUGFydCA/IHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWln
aHQoKSAtIGJ1dHRvbkxlbmd0aCA6IHNjcm9sbGJhci0+eSgpICsgb3V0ZXJCdXR0b25MZW5ndGg7
Ci0gICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHN0YXJ0LCB0aGlja25l
c3MsIGJ1dHRvbkxlbmd0aCk7Ci0gICAgfQotICAgIGlmIChwYWludGluZykKLSAgICAgICAgcmV0
dXJuIGJ1dHRvblJlcGFpbnRSZWN0KHJlc3VsdCwgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpLCBz
Y3JvbGxiYXItPmNvbnRyb2xTaXplKCksIHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wgcGFpbnRpbmcpCi17Ci0g
ICAgaWYgKHBhaW50aW5nIHx8ICFoYXNCdXR0b25zKHNjcm9sbGJhcikpCi0gICAgICAgIHJldHVy
biBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOwotCi0gICAgSW50UmVjdCByZXN1bHQ7Ci0gICAgaW50
IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkp
OwotICAgIGludCBzdGFydFdpZHRoID0gMDsKLSAgICBpbnQgZW5kV2lkdGggPSAwOwotICAgIGlu
dCBvdXRlckJ1dHRvbkxlbmd0aCA9IGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRy
b2xTaXplKCldOwotICAgIGludCBidXR0b25MZW5ndGggPSBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJh
ci0+Y29udHJvbFNpemUoKV07Ci0gICAgaW50IGRvdWJsZUJ1dHRvbkxlbmd0aCA9IG91dGVyQnV0
dG9uTGVuZ3RoICsgYnV0dG9uTGVuZ3RoOwotICAgIHN3aXRjaCAoYnV0dG9uc1BsYWNlbWVudCgp
KSB7Ci0gICAgICAgIGNhc2UgU2Nyb2xsYmFyQnV0dG9uc1NpbmdsZToKLSAgICAgICAgICAgIHN0
YXJ0V2lkdGggPSBidXR0b25MZW5ndGg7Ci0gICAgICAgICAgICBlbmRXaWR0aCA9IGJ1dHRvbkxl
bmd0aDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNjcm9sbGJhckJ1dHRvbnNE
b3VibGVTdGFydDoKLSAgICAgICAgICAgIHN0YXJ0V2lkdGggPSBkb3VibGVCdXR0b25MZW5ndGg7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTY3JvbGxiYXJCdXR0b25zRG91Ymxl
RW5kOgotICAgICAgICAgICAgZW5kV2lkdGggPSBkb3VibGVCdXR0b25MZW5ndGg7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTY3JvbGxiYXJCdXR0b25zRG91YmxlQm90aDoKLSAg
ICAgICAgICAgIHN0YXJ0V2lkdGggPSBkb3VibGVCdXR0b25MZW5ndGg7Ci0gICAgICAgICAgICBl
bmRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaW50IHRvdGFsV2lk
dGggPSBzdGFydFdpZHRoICsgZW5kV2lkdGg7Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50UmVjdChzY3Jv
bGxiYXItPngoKSArIHN0YXJ0V2lkdGgsIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndpZHRo
KCkgLSB0b3RhbFdpZHRoLCB0aGlja25lc3MpOwotICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJh
ci0+eCgpLCBzY3JvbGxiYXItPnkoKSArIHN0YXJ0V2lkdGgsIHRoaWNrbmVzcywgc2Nyb2xsYmFy
LT5oZWlnaHQoKSAtIHRvdGFsV2lkdGgpOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bU1hYzo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHdrU2Ny
b2xsYmFyTWluaW11bVRodW1iTGVuZ3RoKHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5n
ZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gY1RodW1iTWluTGVuZ3RoW3Njcm9sbGJh
ci0+Y29udHJvbFNpemUoKV07Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6
c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2dCkKLXsKLSAgICBpZiAoZXZ0LmJ1dHRvbigpICE9IExlZnRCdXR0b24pCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoZ0p1bXBPblRyYWNrQ2xpY2spCi0gICAgICAgIHJldHVybiAh
ZXZ0LmFsdEtleSgpOwotICAgIHJldHVybiBldnQuYWx0S2V5KCk7Ci19Ci0KLWJvb2wgU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bU1hYzo6c2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1bWIoU2Ny
b2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKLXsKLSAgICByZXR1cm4g
ZXZlbnQuYWx0S2V5KCk7Ci19Ci0KLXN0YXRpYyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2Vk
U3RhdGUoU2Nyb2xsYmFyUGFydCBwYXJ0KQotewotICAgIHN3aXRjaCAocGFydCkgewotICAgICAg
ICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6Ci0gICAgICAgICAgICByZXR1cm4ga1RoZW1lVG9w
T3V0c2lkZUFycm93UHJlc3NlZDsKLSAgICAgICAgY2FzZSBCYWNrQnV0dG9uRW5kUGFydDoKLSAg
ICAgICAgICAgIHJldHVybiBrVGhlbWVUb3BPdXRzaWRlQXJyb3dQcmVzc2VkOyAvLyBUaGlzIGRv
ZXMgbm90IG1ha2UgbXVjaCBzZW5zZS4gIEZvciBzb21lIHJlYXNvbiB0aGUgb3V0c2lkZSBjb25z
dGFudCBpcyByZXF1aXJlZC4KLSAgICAgICAgY2FzZSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0Ogot
ICAgICAgICAgICAgcmV0dXJuIGtUaGVtZVRvcEluc2lkZUFycm93UHJlc3NlZDsKLSAgICAgICAg
Y2FzZSBGb3J3YXJkQnV0dG9uRW5kUGFydDoKLSAgICAgICAgICAgIHJldHVybiBrVGhlbWVCb3R0
b21PdXRzaWRlQXJyb3dQcmVzc2VkOwotICAgICAgICBjYXNlIFRodW1iUGFydDoKLSAgICAgICAg
ICAgIHJldHVybiBrVGhlbWVUaHVtYlByZXNzZWQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIHN0YXRpYyBQbGF0Zm9ybVN1cHBvcnQ6OlRoZW1l
UGFpbnRTdGF0ZSBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJh
cikKIHsKICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQpAQCAtNDc2LDEzICs3MywyNyBA
QCBzdGF0aWMgUGxhdGZvcm1TdXBwb3J0OjpUaGVtZVBhaW50U3RhdGUgc2Nyb2xsYmFyU3RhdGVU
b1RoZW1lU3RhdGUoU2Nyb2xsYmFyKiBzYwogICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OlN0
YXRlQWN0aXZlOwogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnVwZGF0ZUVu
YWJsZWRTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3N0YXRpYyB2b2lkIHNjcm9sbGJhclBh
aW50ZXJQYWludFRyYWNrKFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciwgYm9vbCBl
bmFibGVkLCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgQ0dSZWN0IGZyYW1lUmVj
dCkKIHsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAg
ICAgd2tTY3JvbGxiYXJQYWludGVyU2V0RW5hYmxlZChzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9s
bGJhcikuZ2V0KCksIHNjcm9sbGJhci0+ZW5hYmxlZCgpKTsKLSAgICB9CisgICAgW3Njcm9sbGJh
clBhaW50ZXIgc2V0RW5hYmxlZDplbmFibGVkXTsKKyAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRC
b3VuZHNTaXplOiBOU1NpemVGcm9tQ0dTaXplKGZyYW1lUmVjdC5zaXplKV07CisgICAgW3Njcm9s
bGJhclBhaW50ZXIgc2V0RG91YmxlVmFsdWU6dmFsdWVdOworICAgIFtzY3JvbGxiYXJQYWludGVy
IHNldEtub2JQcm9wb3J0aW9uOnByb3BvcnRpb25dOworCisgICAgLy8gVGhlIHNjcm9sbGJhcidz
IGZyYW1lUmVjdCBpbmNsdWRlcyBhIHNpZGUgaW5zZXQgZm9yIG92ZXJsYXkgc2Nyb2xsZXJzLCBz
byB3ZSBoYXZlIHRvIHVzZSB0aGUgCisgICAgLy8gdHJhY2tXaWR0aCBmb3IgZHJhd0tub2JTbG90
SW5SZWN0CisgICAgTlNSZWN0IHRyYWNrUmVjdDsKKyAgICBpZiAoW3Njcm9sbGJhclBhaW50ZXIg
aXNIb3Jpem9udGFsXSkKKyAgICAgICAgdHJhY2tSZWN0ID0gTlNNYWtlUmVjdCgwLCAwLCBmcmFt
ZVJlY3Quc2l6ZS53aWR0aCwgW3Njcm9sbGJhclBhaW50ZXIgdHJhY2tXaWR0aF0pOworICAgIGVs
c2UKKyAgICAgICAgdHJhY2tSZWN0ID0gTlNNYWtlUmVjdCgwLCAwLCBbc2Nyb2xsYmFyUGFpbnRl
ciB0cmFja1dpZHRoXSwgZnJhbWVSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICBbc2Nyb2xsYmFyUGFp
bnRlciBkcmF3S25vYlNsb3RJblJlY3Q6dHJhY2tSZWN0IGhpZ2hsaWdodDpOT107CiB9CiAKKy8v
IE92ZXJyaWRlIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludCgpIHRvIGFkZCBzdXBwb3J0IGZvciB0
aGUgZm9sbG93aW5nOgorLy8gICAgIC0gZHJhd2luZyB1c2luZyBQbGF0Zm9ybVN1cHBvcnQgZnVu
Y3Rpb25zCisvLyAgICAgLSBkcmF3aW5nIHRpY2ttYXJrcworLy8gICAgIC0gU2tpYSBzcGVjaWZp
YyBjaGFuZ2VzCiBib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRh
bWFnZVJlY3QpCiB7CiAgICAgLy8gR2V0IHRoZSB0aWNrbWFya3MgZm9yIHRoZSBmcmFtZXZpZXcu
CkBAIC01MTAsNyArMTIxLDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWlu
dChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb24KICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjKiBzY3JvbGxBbmltYXRvciA9IHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWMqPihzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbEFuaW1hdG9yKCkpOwor
ICAgICAgICBTY3JvbGxBbmltYXRvck1hYyogc2Nyb2xsQW5pbWF0b3IgPSBzdGF0aWNfY2FzdDxT
Y3JvbGxBbmltYXRvck1hYyo+KHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsQW5p
bWF0b3IoKSk7CiAjaWYgIVVTRShTS0lBKQogICAgICAgICBzY3JvbGxBbmltYXRvci0+c2V0SXNE
cmF3aW5nSW50b0xheWVyKGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7CiAjZWxzZQpAQCAt
NTIwLDIzICsxMzEsMjMgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludChT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb24KICAgICAgICAgQ0dGbG9h
dCBvbGRLbm9iQWxwaGEgPSAwOwogICAgICAgICBDR0Zsb2F0IG9sZFRyYWNrQWxwaGEgPSAwOwog
ICAgICAgICBib29sIGhhc1RpY2ttYXJrcyA9IHRpY2ttYXJrcy5zaXplKCkgPiAwICYmIHNjcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICAgICAgU2Nyb2xs
YmFyUGFpbnRlciBzY3JvbGxiYXJQYWludGVyID0gcGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxi
YXIpOwogICAgICAgICBpZiAoaGFzVGlja21hcmtzKSB7Ci0gICAgICAgICAgb2xkS25vYkFscGhh
ID0gd2tTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xs
YmFyKSk7Ci0gICAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXJG
b3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSwgMS4wKTsKLSAgICAgICAgICBvbGRUcmFja0FscGhhID0g
d2tTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJh
cikpOwotICAgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEocGFpbnRlckZv
clNjcm9sbGJhcihzY3JvbGxiYXIpLCAxLjApOworICAgICAgICAgICAgb2xkS25vYkFscGhhID0g
W3Njcm9sbGJhclBhaW50ZXIga25vYkFscGhhXTsKKyAgICAgICAgICAgIFtzY3JvbGxiYXJQYWlu
dGVyIHNldEtub2JBbHBoYToxLjBdOworICAgICAgICAgICAgb2xkVHJhY2tBbHBoYSA9IFtzY3Jv
bGxiYXJQYWludGVyIHRyYWNrQWxwaGFdOworICAgICAgICAgICAgW3Njcm9sbGJhclBhaW50ZXIg
c2V0VHJhY2tBbHBoYToxLjBdOwogICAgICAgICB9CiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKICAgICAgICAgY29udGV4dC0+Y2xpcChk
YW1hZ2VSZWN0KTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHNjcm9sbGJhci0+ZnJhbWVS
ZWN0KCkueCgpLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKSk7CiAgICAgICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIFdLU2Ny
b2xsYmFyUGFpbnRlclJlZiBzY3JvbGxiYXJQYWludGVyID0gc2Nyb2xsYmFyTWFwKCktPmdldChz
Y3JvbGxiYXIpLmdldCgpOwotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJQYWludFRyYWNrKHNj
cm9sbGJhclBhaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsYmFyLT5lbmFibGVkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0
PENHRmxvYXQ+KHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgLSBvdmVyaGFuZykgLyBzY3JvbGxi
YXItPnRvdGFsU2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cm9sbGJhci0+ZnJhbWVSZWN0KCkpOworICAgICAgICBzY3JvbGxiYXJQYWludGVyUGFpbnRUcmFj
ayhzY3JvbGxiYXJQYWludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y3JvbGxiYXItPmVuYWJsZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDxD
R0Zsb2F0PihzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIC0gb3ZlcmhhbmcpIC8gc2Nyb2xsYmFy
LT50b3RhbFNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKSk7CiAKICAgICAgICAgSW50UmVjdCB0aWNrbWFya1RyYWNrUmVjdChJ
bnRQb2ludCgpLCB0cmFja1JlY3Qoc2Nyb2xsYmFyLCBmYWxzZSkuc2l6ZSgpKTsKICAgICAgICAg
aWYgKHRpY2ttYXJrVHJhY2tSZWN0LndpZHRoKCkgPD0gMTApIHsKQEAgLTU1MCwxMyArMTYxLDE0
IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgICAgIH0KICAgICAgICAgcGFpbnRHaXZl
blRpY2ttYXJrcyhjb250ZXh0LCBzY3JvbGxiYXIsIHRpY2ttYXJrVHJhY2tSZWN0LCB0aWNrbWFy
a3MpOwogCi0gICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50S25vYihzY3JvbGxiYXJQYWlu
dGVyKTsKKyAgICAgICAgaWYgKHNjcm9sbGJhci0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgW3Nj
cm9sbGJhclBhaW50ZXIgZHJhd0tub2JdOwogCiAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5zZXRJ
c0RyYXdpbmdJbnRvTGF5ZXIoZmFsc2UpOwogCiAgICAgICAgIGlmIChoYXNUaWNrbWFya3MpIHsK
LSAgICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoc2Nyb2xsYmFyUGFpbnRl
ciwgb2xkS25vYkFscGhhKTsKLSAgICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJUcmFja0Fs
cGhhKHNjcm9sbGJhclBhaW50ZXIsIG9sZFRyYWNrQWxwaGEpOworICAgICAgICAgICAgW3Njcm9s
bGJhclBhaW50ZXIgc2V0S25vYkFscGhhOm9sZEtub2JBbHBoYV07CisgICAgICAgICAgICBbc2Ny
b2xsYmFyUGFpbnRlciBzZXRUcmFja0FscGhhOm9sZFRyYWNrQWxwaGFdOwogICAgICAgICB9CiAK
ICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvRW1wdHlQcm90b2NvbERlZmluaXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvRW1wdHlQcm90b2NvbERlZmluaXRpb25zLmgKaW5kZXggZGI1Y2RjNjY3MmMxYjU0M2E5
ZTFhMjkwNjE2YzVjYzA3NTM2OGVhNy4uYzExYjA1ZmI1Njg1ZTcxMDVkYTQ5ZmIzMGRjNTFiNzNh
NGJlYzA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0VtcHR5UHJv
dG9jb2xEZWZpbml0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9FbXB0
eVByb3RvY29sRGVmaW5pdGlvbnMuaApAQCAtMzQsNiArMzQsNyBAQAogRU1QVFlfUFJPVE9DT0wo
TlNUYWJsZVZpZXdEYXRhU291cmNlKQogRU1QVFlfUFJPVE9DT0woTlNUYWJsZVZpZXdEZWxlZ2F0
ZSkKIEVNUFRZX1BST1RPQ09MKE5TV2luZG93RGVsZWdhdGUpCitFTVBUWV9QUk9UT0NPTChOU0Fu
aW1hdGlvbkRlbGVnYXRlKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvTlNTY3JvbGxlckltcERldGFpbHMuaAppbmRleCBjZTExNDZkMzBkZDc5ZmNiYThj
MmMwMjFiMzhjNzBmNTdhNTY0MDc2Li4zYThiMTFjZjhjZDEyMzIwYzI1ZGNlNGFmMzY3MjUxMDZm
MWE1ZTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNTY3JvbGxl
ckltcERldGFpbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNTY3JvbGxl
ckltcERldGFpbHMuaApAQCAtMjgsNyArMjgsMjggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQorLy8gUHVibGljIEFQSXMgbm90IGF2YWlsYWJs
ZSBvbiB2ZXJzaW9ucyBvZiBNYWMgb24gd2hpY2ggd2UgYnVpbGQKKyNpZiAoZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkpCitl
bnVtIHsKKyAgICBOU1Njcm9sbGVyU3R5bGVMZWdhY3kgICAgICAgPSAwLAorICAgIE5TU2Nyb2xs
ZXJTdHlsZU92ZXJsYXkgICAgICA9IDEKK307Cit0eXBlZGVmIE5TSW50ZWdlciBOU1Njcm9sbGVy
U3R5bGU7CisKK2VudW0geworICAgIE5TU2Nyb2xsZXJLbm9iU3R5bGVEZWZhdWx0ID0gMCwKKyAg
ICBOU1Njcm9sbGVyS25vYlN0eWxlRGFyayA9IDEsCisgICAgTlNTY3JvbGxlcktub2JTdHlsZUxp
Z2h0ID0gMgorfTsKK3R5cGVkZWYgTlNJbnRlZ2VyIE5TU2Nyb2xsZXJLbm9iU3R5bGU7CisjZW5k
aWYKKworI2lmIChkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKSkKK0BpbnRlcmZhY2UgTlNTY3JvbGxlcihOU09iamVjdCkKKysg
KE5TU2Nyb2xsZXJTdHlsZSlwcmVmZXJyZWRTY3JvbGxlclN0eWxlOworQGVuZAorI2VuZGlmCisK
IEBpbnRlcmZhY2UgTlNPYmplY3QgKFNjcm9sbGJhclBhaW50ZXIpCiArIChpZClzY3JvbGxlcklt
cFdpdGhTdHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1Njcm9sbGVyU3R5bGUgY29udHJvbFNpemU6
KE5TQ29udHJvbFNpemUpbmV3Q29udHJvbFNpemUgaG9yaXpvbnRhbDooQk9PTClob3Jpem9udGFs
IHJlcGxhY2luZ1Njcm9sbGVySW1wOihpZClwcmV2aW91czsKIC0gKENHRmxvYXQpa25vYkFscGhh
OwpAQCAtODEsNiArMTAyLDEzIEBACiAtICh2b2lkKWJlZ2luU2Nyb2xsR2VzdHVyZTsKIC0gKHZv
aWQpZW5kU2Nyb2xsR2VzdHVyZTsKIEBlbmQKLSNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCk7CisKK05TU2Nyb2xsZXJT
dHlsZSByZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKTsKKworfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41MjVkMTVmZjQ1YWNlNGQ1NWNlNTNiY2Q1ZDlhYWFiMzMyY2I2ZTk5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRh
aWxzLm1tCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5TU2Nyb2xsZXJJ
bXBEZXRhaWxzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBpc1Njcm9sbGJhck92
ZXJsYXlBUElBdmFpbGFibGUoKQoreworICAgIHN0YXRpYyBib29sIGFwaUF2YWlsYWJsZTsKKyAg
ICBzdGF0aWMgYm9vbCBzaG91bGRJbml0aWFsaXplID0gdHJ1ZTsKKyAgICBpZiAoc2hvdWxkSW5p
dGlhbGl6ZSkgeworICAgICAgICBzaG91bGRJbml0aWFsaXplID0gZmFsc2U7CisgICAgICAgIENs
YXNzIHNjcm9sbGVySW1wQ2xhc3MgPSBOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAi
KTsKKyAgICAgICAgQ2xhc3Mgc2Nyb2xsZXJJbXBQYWlyQ2xhc3MgPSBOU0NsYXNzRnJvbVN0cmlu
ZyhAIk5TU2Nyb2xsZXJJbXBQYWlyIik7CisgICAgICAgIGFwaUF2YWlsYWJsZSA9IFtzY3JvbGxl
ckltcENsYXNzIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2Nyb2xsZXJJbXBXaXRoU3R5
bGU6Y29udHJvbFNpemU6aG9yaXpvbnRhbDpyZXBsYWNpbmdTY3JvbGxlckltcDopXQorICAgICAg
ICAgICAgICAgICAgICAgICAmJiBbc2Nyb2xsZXJJbXBQYWlyQ2xhc3MgaW5zdGFuY2VzUmVzcG9u
ZFRvU2VsZWN0b3I6QHNlbGVjdG9yKHNjcm9sbGVyU3R5bGUpXTsKKyAgICB9CisgICAgcmV0dXJu
IGFwaUF2YWlsYWJsZTsKK30KKworTlNTY3JvbGxlclN0eWxlIHJlY29tbWVuZGVkU2Nyb2xsZXJT
dHlsZSgpIHsKKyAgICBpZiAoW05TU2Nyb2xsZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihwcmVmZXJyZWRTY3JvbGxlclN0eWxlKV0pCisgICAgICAgIHJldHVybiBbTlNTY3JvbGxlciBw
cmVmZXJyZWRTY3JvbGxlclN0eWxlXTsKKyAgICByZXR1cm4gTlNTY3JvbGxlclN0eWxlTGVnYWN5
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5oCmluZGV4IDk4NGRmMDhhMjI2OTA3MzA0YjhiMWZkOTEwYTI5ZjkxOGRiZWIyYWYuLmNk
NjQ2ODllZDE0YmQ3ZGM2MzMxMDI0OTBjYzc3MDI1NDE4NGU3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCkBAIC00Niw5ICs0Niw3IEBA
IGNsYXNzIFdlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7CiBjbGFzcyBXZWJT
Y3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CiAjZW5kaWYKIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJ
TlRFUikKIHR5cGVkZWYgaWQgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7Ci0jZW5kaWYKIAog
I2lmICFFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiBjbGFzcyBTY3JvbGxFbGFzdGljaXR5Q29udHJv
bGxlckNsaWVudCB7IH07CkBAIC04OSwxMyArODcsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIHNldElzQWN0aXZlKCk7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiAgICAg
dm9pZCB1cGRhdGVTY3JvbGxlclN0eWxlKCk7CiAKICAgICBib29sIHNjcm9sbGJhclBhaW50VGlt
ZXJJc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZvaWQgc3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7
CiAgICAgdm9pZCBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotI2VuZGlmCiAKICAgICB2b2lk
IHNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTEwMywx
NCArOTksMTIgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsQW5pbWF0aW9u
SGVscGVyOwogICAgIFJldGFpblB0cjxXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZT4g
bV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJ
TlRFUikKICAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI+IG1fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXI7CiAgICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGU+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsK
ICAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlPiBtX3Njcm9sbGJhclBh
aW50ZXJEZWxlZ2F0ZTsKIAogICAgIHZvaWQgaW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJl
ZChUaW1lcjxTY3JvbGxBbmltYXRvck1hYz4qKTsKICAgICBUaW1lcjxTY3JvbGxBbmltYXRvck1h
Yz4gbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKLSNlbmRpZgogICAgIAogICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVu
dEFyZWFXaWxsUGFpbnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCA1ZTJkMjExYWQyZGI2MzU4YTY5NTBjNDcyODJk
YTAzOWIzMWU0ZjlhLi45ZjU2MzM1MGYwZmMyZGQ5MGJhZjI2MjhjODlhNTkyYjc3ZjJlYmVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1t
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNYWMuaCIKIAogI2lu
Y2x1ZGUgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgIkVtcHR5UHJvdG9jb2xEZWZpbml0
aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJOU1Njcm9sbGVySW1w
RGV0YWlscy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCkBAIC00NSwxNCAr
NDYsMTggQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKKyNpZmRlZiBCVUlMRElOR19PTl9MRU9QQVJE
CitAaW50ZXJmYWNlIE5TUHJvY2Vzc0luZm8gKFNjcm9sbEFuaW1hdG9yTWFjRXh0KQorLSAoTlNU
aW1lSW50ZXJ2YWwpc3lzdGVtVXB0aW1lOworQGVuZAorI2VuZGlmCisKIHN0YXRpYyBib29sIHN1
cHBvcnRzVUlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzcygpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
aXMgdGVtcG9yYXJ5IHVudGlsIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IFNjcm9sbGJhclBh
aW50ZXIgc3VwcG9ydCB0aGlzIHBhcnQgb2YgdGhlIEFQSS4KICAgICBzdGF0aWMgYm9vbCBnbG9i
YWxTdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3MgPSBbTlNDbGFzc0Zyb21TdHJpbmco
QCJOU1Njcm9sbGVySW1wIikgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKG1v
dXNlRW50ZXJlZFNjcm9sbGVyKV07CiAgICAgcmV0dXJuIGdsb2JhbFN1cHBvcnRzVUlTdGF0ZVRy
YW5zaXRpb25Qcm9ncmVzczsKIH0KLSNlbmRpZgogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChTY3Jv
bGxBbmltYXRpb25IZWxwZXJEZXRhaWxzKQogLSAoaWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQpZGVs
ZWdhdGU7CkBAIC0xNTgsOCArMTYzLDYgQEAgc3RhdGljIE5TU2l6ZSBhYnMoTlNTaXplIHNpemUp
CiAKIEBlbmQKIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLQogQGludGVyZmFjZSBXZWJT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3QKIHsKICAgICBXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYyogX2FuaW1hdG9yOwpAQCAtMzk0LDYgKzM5Nyw3IEBAIGVu
dW0gRmVhdHVyZVRvQW5pbWF0ZSB7CiAgICAgcmV0dXJuIGFSZWN0OwogfQogCisjaWYgIVBMQVRG
T1JNKENIUk9NSVVNKQogLSAoQ0FMYXllciAqKWxheWVyCiB7CiAgICAgaWYgKCFfYW5pbWF0b3Ip
CkBAIC00MDUsNiArNDA5LDcgQEAgZW51bSBGZWF0dXJlVG9BbmltYXRlIHsKICAgICBzdGF0aWMg
Q0FMYXllciAqZHVtbXlMYXllciA9IFtbQ0FMYXllciBhbGxvY10gaW5pdF07CiAgICAgcmV0dXJu
IGR1bW15TGF5ZXI7CiB9CisjZW5kaWYKIAogLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5TY3Jv
bGxlckZvclNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcAogewpAQCAtNTQ4LDggKzU1Myw2IEBA
IGVudW0gRmVhdHVyZVRvQW5pbWF0ZSB7CiAKIEBlbmQKIAotI2VuZGlmIC8vIFVTRShTQ1JPTExC
QVJfUEFJTlRFUikKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxl
QXJlYSkKQEAgLTU1NywxOSArNTYwLDE1IEBAIFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNj
cm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhCiAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvck1hYyhzY3JvbGxhYmxlQXJlYSkpOwog
fQogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogc3RhdGljIFNjcm9sbGJhclRoZW1lTWFj
KiBtYWNTY3JvbGxiYXJUaGVtZSgpCiB7CiAgICAgU2Nyb2xsYmFyVGhlbWUqIHNjcm9sbGJhclRo
ZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7CiAgICAgcmV0dXJuICFzY3JvbGxiYXJUaGVt
ZS0+aXNNb2NrVGhlbWUoKSA/IHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oc2Nyb2xs
YmFyVGhlbWUpIDogMDsKIH0KLSNlbmRpZgogCiBTY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5p
bWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5p
bWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogICAgICwg
bV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcih0aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6Omlu
aXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpCi0jZW5kaWYKICNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCiAgICAgLCBtX3Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyKHRoaXMpCiAgICAg
LCBtX3NuYXBSdWJiZXJCYW5kVGltZXIodGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnVi
YmVyQmFuZFRpbWVyRmlyZWQpCkBAIC01ODEsMjYgKzU4MCwyNSBAQCBTY3JvbGxBbmltYXRvck1h
Yzo6U2Nyb2xsQW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQogICAg
IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuYWRvcHROUyhbW1dlYlNjcm9sbEFuaW1h
dGlvbkhlbHBlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsK
ICAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5hZG9wdE5TKFtbTlNDbGFzc0Zyb21TdHJpbmco
QCJOU1Njcm9sbEFuaW1hdGlvbkhlbHBlciIpIGFsbG9jXSBpbml0V2l0aERlbGVnYXRlOm1fc2Ny
b2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCldKTsKIAotI2lmIFVTRShTQ1JPTExCQVJf
UEFJTlRFUikKLSAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUuYWRvcHRO
UyhbW1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRo
U2Nyb2xsQW5pbWF0b3I6dGhpc10pOwotICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIg
PSBbW1tOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXBQYWlyIikgYWxsb2NdIGluaXRd
IGF1dG9yZWxlYXNlXTsKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBz
ZXREZWxlZ2F0ZTptX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCldOwot
ICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldFNjcm9sbGVyU3R5bGU6
d2tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKV07Ci0KLSAgICBtX3Njcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZS5hZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0
V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92
ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyRGVsZWdhdGUuYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdh
dGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOworICAgICAgICBtX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyID0gW1tbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVy
SW1wUGFpciIpIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFttX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm1fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKV07CisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpIHNldFNjcm9sbGVyU3R5bGU6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCld
OworICAgICAgICBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbV2ViU2Nyb2xs
YmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsK
KyAgICB9CiB9CiAKIFNjcm9sbEFuaW1hdG9yTWFjOjp+U2Nyb2xsQW5pbWF0b3JNYWMoKQogewot
I2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKSBzY3Jv
bGxBbmltYXRvckRlc3Ryb3llZF07Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIu
Z2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUu
Z2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotICAgIFttX3Njcm9sbEFuaW1hdGlvbkhl
bHBlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKLSAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQ
SUF2YWlsYWJsZSgpKSB7CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAg
ICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxB
bmltYXRvckRlc3Ryb3llZF07CisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
LmdldCgpIHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJEZWxl
Z2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07CisgICAgICAgIFttX3Njcm9sbEFu
aW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKKyAg
ICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICB9CiB9CiAKIGJvb2wgU2Nyb2xs
QW5pbWF0b3JNYWM6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIp
CkBAIC03MDgsMTMgKzcwNiwxMyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVT
Y3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbgogCiB2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpub3RpZnlQb3NpdGlvbkNoYW5nZWQoKQogewotI2lmIFVTRShTQ1JP
TExCQVJfUEFJTlRFUikKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGFn
ZSBpcyBnb2luZyBpbnRvIHRoZSBwYWdlIGNhY2hlLCBidXQgdGhlIHBhZ2UgCi0gICAgLy8gaXNu
J3QgcmVhbGx5IHNjcm9sbGluZyBpbiB0aGF0IGNhc2UuIFdlIHNob3VsZCBvbmx5IHBhc3MgdGhl
IG1lc3NhZ2Ugb24gdG8gdGhlCi0gICAgLy8gU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgd2hl
biB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFuIGFjdGl2ZSBwYWdlLgotICAgIGlmIChzY3Jv
bGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQotICAgICAgICBbbV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlci5nZXQoKSBjb250ZW50QXJlYVNjcm9sbGVkXTsKLSNlbmRpZgorICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyBnb2luZyBpbnRvIHRoZSBwYWdlIGNhY2hl
LCBidXQgdGhlIHBhZ2UgCisgICAgICAgIC8vIGlzbid0IHJlYWxseSBzY3JvbGxpbmcgaW4gdGhh
dCBjYXNlLiBXZSBzaG91bGQgb25seSBwYXNzIHRoZSBtZXNzYWdlIG9uIHRvIHRoZQorICAgICAg
ICAvLyBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciB3aGVuIHdlJ3JlIHJlYWxseSBzY3JvbGxp
bmcgb24gYW4gYWN0aXZlIHBhZ2UuCisgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pc09u
QWN0aXZlUGFnZSgpKQorICAgICAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIu
Z2V0KCkgY29udGVudEFyZWFTY3JvbGxlZF07CisgICAgfQogICAgIFNjcm9sbEFuaW1hdG9yOjpu
b3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKIH0KIApAQCAtNzIyLDE5OCArNzIwLDE3NSBAQCB2b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0CiB7CiAgICAg
aWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47
Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpIGNvbnRlbnRBcmVhV2lsbERyYXddOwotI2VuZGlmCisgICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSBjb250ZW50QXJlYVdpbGxEcmF3XTsKIH0KIAogdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAogewogICAgIGlmICgh
c2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lm
IFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSBtb3VzZUVudGVyZWRDb250ZW50QXJlYV07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3Jv
bGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhXTsKIH0KIAogdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0j
aWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyLmdldCgpIG1vdXNlRXhpdGVkQ29udGVudEFyZWFdOwotI2VuZGlmCisgICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSBtb3VzZUV4aXRlZENvbnRlbnRBcmVhXTsKIH0KIAogdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBjb25zdAogewogICAgIGlm
ICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwot
I2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlci5nZXQoKSBtb3VzZU1vdmVkSW5Db250ZW50QXJlYV07Ci0jZW5kaWYKKyAgICBpZiAoaXNT
Y3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyLmdldCgpIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhXTsKIH0KIAogdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2Uo
KSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBpZiAo
IXN1cHBvcnRzVUlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzcygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKFNjcm9sbGJhclRoZW1lTWFjKiB0aGVtZSA9IG1hY1Njcm9sbGJhclRoZW1lKCkpIHsK
LSAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gdGhlbWUtPnBhaW50ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgW3BhaW50ZXIgbW91c2VFbnRlcmVkU2Nyb2xsZXJd
OworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBp
ZiAoIXN1cHBvcnRzVUlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzcygpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoU2Nyb2xsYmFyVGhlbWVNYWMqIHRoZW1lID0gbWFjU2Nyb2xsYmFy
VGhlbWUoKSkgeworICAgICAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gdGhlbWUt
PnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIFtwYWludGVyIG1v
dXNlRW50ZXJlZFNjcm9sbGVyXTsKKyAgICAgICAgfQogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHNjcm9sbGJhcik7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7CiAgICAg
aWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47
Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIGlmICghc3VwcG9ydHNVSVN0YXRlVHJh
bnNpdGlvblByb2dyZXNzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoU2Nyb2xsYmFyVGhl
bWVNYWMqIHRoZW1lID0gbWFjU2Nyb2xsYmFyVGhlbWUoKSkgewotICAgICAgICBTY3JvbGxiYXJQ
YWludGVyIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwot
ICAgICAgICBbcGFpbnRlciBtb3VzZUV4aXRlZFNjcm9sbGVyXTsKKyAgICBpZiAoaXNTY3JvbGxi
YXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c1VJU3RhdGVU
cmFuc2l0aW9uUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKFNj
cm9sbGJhclRoZW1lTWFjKiB0aGVtZSA9IG1hY1Njcm9sbGJhclRoZW1lKCkpIHsKKyAgICAgICAg
ICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFy
KHNjcm9sbGJhcik7CisgICAgICAgICAgICBbcGFpbnRlciBtb3VzZUV4aXRlZFNjcm9sbGVyXTsK
KyAgICAgICAgfQogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7Ci0j
ZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSgp
CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAg
ICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyLmdldCgpIHN0YXJ0TGl2ZVJlc2l6ZV07Ci0jZW5kaWYKKyAgICBpZiAo
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyLmdldCgpIHN0YXJ0TGl2ZVJlc2l6ZV07CiB9CiAKIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxh
YmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFND
Uk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgp
IGNvbnRlbnRBcmVhRGlkUmVzaXplXTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJs
YXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIu
Z2V0KCkgY29udGVudEFyZWFEaWRSZXNpemVdOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFj
Ojp3aWxsRW5kTGl2ZVJlc2l6ZSgpCiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09u
QWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVS
KQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGVuZExpdmVSZXNpemVd
OwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAg
ICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBlbmRMaXZlUmVzaXplXTsK
IH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93KCkgY29uc3QK
IHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAg
IHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXIuZ2V0KCkgd2luZG93T3JkZXJlZEluXTsKLSNlbmRpZgorICAgIGlmIChp
c1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXIuZ2V0KCkgd2luZG93T3JkZXJlZEluXTsKIH0KIAogdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29uc3QKIHsKICAgICBpZiAoIXNjcm9s
bGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBVU0Uo
U0NST0xMQkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0
KCkgd2luZG93T3JkZXJlZE91dF07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5
QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdl
dCgpIHdpbmRvd09yZGVyZWRPdXRdOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRC
ZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+
aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJ
TlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBiZWdpblNjcm9s
bEdlc3R1cmVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJs
ZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBiZWdpblNj
cm9sbEdlc3R1cmVdOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRFbmRTY3JvbGxH
ZXN0dXJlKCkgY29uc3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQ
YWdlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAg
W21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgZW5kU2Nyb2xsR2VzdHVyZV07Ci0j
ZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAg
IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGVuZFNjcm9sbEdlc3R1cmVdOwog
fQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgaWYg
KFNjcm9sbGJhclRoZW1lTWFjKiB0aGVtZSA9IG1hY1Njcm9sbGJhclRoZW1lKCkpIHsKLSAgICAg
ICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIo
c2Nyb2xsYmFyKTsKLSAgICAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV9zY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUuZ2V0KCldOwotICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSBzZXRWZXJ0aWNhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwotICAgICAgICBpZiAoc2Ny
b2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCi0gICAgICAgICAgICBbcGFpbnRlciBzZXRL
bm9iQWxwaGE6MV07CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7
CisgICAgICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyogdGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVt
ZSgpKSB7CisgICAgICAgICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSB0aGVtZS0+cGFp
bnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICAgICAgW3BhaW50ZXIgc2V0RGVs
ZWdhdGU6bV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCldOworICAgICAgICAgICAgW21f
c2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0VmVydGljYWxTY3JvbGxlckltcDpw
YWludGVyXTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUo
KSkKKyAgICAgICAgICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07CisgICAgICAgIH0K
ICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2VuZGlmCiB9CiAK
IHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgaWYg
KFNjcm9sbGJhclRoZW1lTWFjKiB0aGVtZSA9IG1hY1Njcm9sbGJhclRoZW1lKCkpIHsKLSAgICAg
ICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIo
c2Nyb2xsYmFyKTsKLSAgICAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAg
W21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0VmVydGljYWxTY3JvbGxlcklt
cDpuaWxdOworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAg
ICAgICBpZiAoU2Nyb2xsYmFyVGhlbWVNYWMqIHRoZW1lID0gbWFjU2Nyb2xsYmFyVGhlbWUoKSkg
eworICAgICAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gdGhlbWUtPnBhaW50ZXJG
b3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIFtwYWludGVyIHNldERlbGVnYXRl
Om5pbF07CisgICAgICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBz
ZXRWZXJ0aWNhbFNjcm9sbGVySW1wOm5pbF07CisgICAgICAgIH0KICAgICB9Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7
Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyog
dGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFNjcm9sbGJhclBhaW50ZXIg
cGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgICAg
IFtwYWludGVyIHNldERlbGVnYXRlOm1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsK
LSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0SG9yaXpvbnRh
bFNjcm9sbGVySW1wOnBhaW50ZXJdOwotICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5M
aXZlUmVzaXplKCkpCi0gICAgICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07CisgICAg
aWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7CisgICAgICAgIGlmIChTY3Jv
bGxiYXJUaGVtZU1hYyogdGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpKSB7CisgICAgICAgICAg
ICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNjcm9sbGJhcihz
Y3JvbGxiYXIpOworICAgICAgICAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV9zY3JvbGxiYXJQ
YWludGVyRGVsZWdhdGUuZ2V0KCldOworICAgICAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOnBhaW50ZXJdOworICAgICAg
ICAgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQorICAgICAgICAgICAg
ICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKKyAgICAgICAgfQogICAgIH0KLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIGlmIChTY3JvbGxiYXJUaGVt
ZU1hYyogdGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFNjcm9sbGJhclBh
aW50ZXIgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0g
ICAgICAgIFtwYWludGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyLmdldCgpIHNldEhvcml6b250YWxTY3JvbGxlckltcDpuaWxdOworICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBpZiAoU2Ny
b2xsYmFyVGhlbWVNYWMqIHRoZW1lID0gbWFjU2Nyb2xsYmFyVGhlbWUoKSkgeworICAgICAgICAg
ICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIo
c2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIFtwYWludGVyIHNldERlbGVnYXRlOm5pbF07CisgICAg
ICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRIb3Jpem9udGFs
U2Nyb2xsZXJJbXA6bmlsXTsKKyAgICAgICAgfQogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHNjcm9sbGJhcik7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y2Fu
Y2VsQW5pbWF0aW9ucygpCiB7CiAgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gZmFs
c2U7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgaWYgKHNjcm9sbGJhclBhaW50
VGltZXJJc0FjdGl2ZSgpKQotICAgICAgICBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotICAg
IFttX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKLSNl
bmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAg
ICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkpCisgICAgICAgICAgICBzdG9wU2Ny
b2xsYmFyUGFpbnRUaW1lcigpOworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUu
Z2V0KCkgY2FuY2VsQW5pbWF0aW9uc107CisgICAgfQogfQogCiAjaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQpAQCAtMTI5Miw2ICsxMjY3LDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZW5k
U2Nyb2xsR2VzdHVyZSgpCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJiZXJCYW5k
KCkKIHsKKyAgICBpZiAoIWlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbW05TUHJvY2Vzc0lu
Zm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0gLSBtX3Njcm9sbEVsYXN0aWNpdHlDb250cm9s
bGVyLm1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwogICAgIGlmIChtX3Njcm9sbEVsYXN0
aWNpdHlDb250cm9sbGVyLm1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0
YSA+PSBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KQogICAgICAgICBtX3Njcm9sbEVsYXN0
aWNpdHlDb250cm9sbGVyLm1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwpAQCAtMTQw
MSwxNSArMTM3OSwxNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnViYmVyQmFuZFRp
bWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JNYWM+KikKIAogdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6c2V0SXNBY3RpdmUoKQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBp
ZiAobmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKCkpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGVyU3R5
bGUoKTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkg
eworICAgICAgICBpZiAobmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKCkpCisgICAgICAgICAgICB1
cGRhdGVTY3JvbGxlclN0eWxlKCk7CisgICAgfQogfQogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlO
VEVSKQogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6dXBkYXRlU2Nyb2xsZXJTdHlsZSgpCiB7Cisg
ICAgaWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKSB7CiAgICAg
ICAgIHNldE5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSh0cnVlKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMTQ4MywxMiArMTQ2MywxMyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzdG9wU2Nyb2xs
YmFyUGFpbnRUaW1lcigpCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxi
YXJQYWludFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JNYWM+KikKIHsKLSAgICAvLyBU
byBmb3JjZSB0aGUgc2Nyb2xsYmFycyB0byBmbGFzaCwgd2UgaGF2ZSB0byBjYWxsIGhpZGUgZmly
c3QuIE90aGVyd2lzZSwgdGhlIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyCi0gICAgLy8gbWln
aHQgdGhpbmsgdGhhdCB0aGUgc2Nyb2xsYmFycyBhcmUgYWxyZWFkeSBzaG93aW5nIGFuZCBiYWls
IGVhcmx5LgotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGhpZGVPdmVy
bGF5U2Nyb2xsZXJzXTsKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBm
bGFzaFNjcm9sbGVyc107CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgp
KSB7CisgICAgICAgIC8vIFRvIGZvcmNlIHRoZSBzY3JvbGxiYXJzIHRvIGZsYXNoLCB3ZSBoYXZl
IHRvIGNhbGwgaGlkZSBmaXJzdC4gT3RoZXJ3aXNlLCB0aGUgU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIKKyAgICAgICAgLy8gbWlnaHQgdGhpbmsgdGhhdCB0aGUgc2Nyb2xsYmFycyBhcmUgYWxy
ZWFkeSBzaG93aW5nIGFuZCBiYWlsIGVhcmx5LgorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSBoaWRlT3ZlcmxheVNjcm9sbGVyc107CisgICAgICAgIFttX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGZsYXNoU2Nyb2xsZXJzXTsKKyAgICB9CiB9Ci0j
ZW5kaWYKIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJS
ZWN0KGNvbnN0IEludFJlY3QmIHNjcm9sbGVyVGh1bWIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oCmluZGV4
IGI2MGI0NjRkODIyYmYwNjg2YjA0NjJlNDNmZjU0ODE5NzMwY2U4OWUuLjNjNTY5MmM0ZTJiYmM3
YjBiNzQzMjYwOGUxZjRjYWJkNWM3NWQxYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oCkBAIC0yOCw4ICsy
OCw4IEBACiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAKLSNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UG9pbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaAppbmRleCAzOTcyY2M0ZjQyYzViMGI3YjM1
NWI1NWM0ZjI5MTQxNjlkZTEyNjRkLi4wMWE4M2YyOGZhNGQ0OGQ5ZDRkNmFjMDQ4NzhmNGIzMmIz
YmIwOGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFy
VGhlbWVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhl
bWVNYWMuaApAQCAtMjgsOSArMjgsNyBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUuaCIKIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHR5cGVkZWYgaWQgU2Nyb2xs
YmFyUGFpbnRlcjsKLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU5LDEwICs1
Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xs
YmFyKik7CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKik7
CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiAgICAgdm9pZCBzZXROZXdQYWludGVyRm9y
U2Nyb2xsYmFyKFNjcm9sbGJhciosIFNjcm9sbGJhclBhaW50ZXIpOwogICAgIFNjcm9sbGJhclBh
aW50ZXIgcGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLSNlbmRpZgogCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Nyb2xsYmFyKik7CkBAIC03OCw2ICs3
NCw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25U
aHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgaW50IHNjcm9sbGJhclBhcnRUb0hJUHJlc3NlZFN0
YXRlKFNjcm9sbGJhclBhcnQpOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCmluZGV4IGQ3ODJiNWI5NWQ0ZTk1MmFlNzQxOGM2
ZTZhN2JkNWVmNjM2NWExNzMuLjA0Y2UzOTUxYTQ2Y2E5ZDY3NDVhODUwMTE3NGY2ZDU0NDM4Yjkx
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVt
ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVN
YWMubW0KQEAgLTQ1LDExICs0NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiB0eXBlZGVmIEhh
c2hNYXA8U2Nyb2xsYmFyKiwgUmV0YWluUHRyPFNjcm9sbGJhclBhaW50ZXI+ID4gU2Nyb2xsYmFy
UGFpbnRlck1hcDsKLSNlbHNlCi10eXBlZGVmIEhhc2hTZXQ8U2Nyb2xsYmFyKj4gU2Nyb2xsYmFy
UGFpbnRlck1hcDsKLSNlbmRpZgogCiBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRlck1hcCogc2Nyb2xs
YmFyTWFwKCkKIHsKQEAgLTc1LDE4ICs3MSwxNyBAQCBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRlck1h
cCogc2Nyb2xsYmFyTWFwKCkKIHsKICAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9u
KTsKIAorICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgp
OworICAgIGlmICh0aGVtZS0+aXNNb2NrVGhlbWUoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
c3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPihTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKSkt
PnByZWZlcmVuY2VzQ2hhbmdlZCgpOwogICAgIGlmIChzY3JvbGxiYXJNYXAoKS0+aXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAgICAgU2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3IgZW5k
ID0gc2Nyb2xsYmFyTWFwKCktPmVuZCgpOwogICAgIGZvciAoU2Nyb2xsYmFyUGFpbnRlck1hcDo6
aXRlcmF0b3IgaXQgPSBzY3JvbGxiYXJNYXAoKS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogICAgICAgICBpdC0+Zmlyc3QtPnN0eWxlQ2hh
bmdlZCgpOwogICAgICAgICBpdC0+Zmlyc3QtPmludmFsaWRhdGUoKTsKLSNlbHNlCi0gICAgICAg
ICgqaXQpLT5zdHlsZUNoYW5nZWQoKTsKLSAgICAgICAgKCppdCktPmludmFsaWRhdGUoKTsKLSNl
bmRpZgogICAgIH0KIH0KIApAQCAtOTQsNiArODksMTAgQEAgc3RhdGljIFNjcm9sbGJhclBhaW50
ZXJNYXAqIHNjcm9sbGJhck1hcCgpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNh
dGlvbik7CiAKKyAgICBTY3JvbGxiYXJUaGVtZSogdGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhl
bWUoKTsKKyAgICBpZiAodGhlbWUtPmlzTW9ja1RoZW1lKCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oU2Nyb2xsYmFyVGhlbWU6OnRoZW1l
KCkpLT5wcmVmZXJlbmNlc0NoYW5nZWQoKTsKIH0KIApAQCAtMTA3LDIyICsxMDYsMjIgQEAgc3Rh
dGljIFNjcm9sbGJhclBhaW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorI2lmICFQTEFURk9STShDSFJPTUlVTSkKIFNjcm9sbGJhclRoZW1lKiBTY3JvbGxi
YXJUaGVtZTo6bmF0aXZlVGhlbWUoKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2Nyb2xs
YmFyVGhlbWVNYWMsIHRoZW1lLCAoKSk7CiAgICAgcmV0dXJuICZ0aGVtZTsKIH0KKyNlbmRpZgog
CiAvLyBGSVhNRTogR2V0IHRoZXNlIG51bWJlcnMgZnJvbSBDb3JlVUkuCiBzdGF0aWMgaW50IGNS
ZWFsQnV0dG9uTGVuZ3RoW10gPSB7IDI4LCAyMSB9Owogc3RhdGljIGludCBjQnV0dG9uSGl0SW5z
ZXRbXSA9IHsgMywgMiB9OwogLy8gY1JlYWxCdXR0b25MZW5ndGggLSBjQnV0dG9uSW5zZXQKIHN0
YXRpYyBpbnQgY0J1dHRvbkxlbmd0aFtdID0geyAxNCwgMTAgfTsKLSNpZiAhVVNFKFNDUk9MTEJB
Ul9QQUlOVEVSKQogc3RhdGljIGludCBjU2Nyb2xsYmFyVGhpY2tuZXNzW10gPSB7IDE1LCAxMSB9
Owogc3RhdGljIGludCBjQnV0dG9uSW5zZXRbXSA9IHsgMTQsIDExIH07CiBzdGF0aWMgaW50IGNU
aHVtYk1pbkxlbmd0aFtdID0geyAyNiwgMjAgfTsKLSNlbmRpZgogCiBzdGF0aWMgaW50IGNPdXRl
ckJ1dHRvbkxlbmd0aFtdID0geyAxNiwgMTQgfTsgLy8gVGhlIG91dGVyIGJ1dHRvbiBpbiBhIGRv
dWJsZSBidXR0b24gcGFpciBpcyBhIGJpdCBiaWdnZXIuCiBzdGF0aWMgaW50IGNPdXRlckJ1dHRv
bk92ZXJsYXAgPSAyOwpAQCAtMTMxLDE3ICsxMzAsMTMgQEAgc3RhdGljIGZsb2F0IGdJbml0aWFs
QnV0dG9uRGVsYXkgPSAwLjVmOwogc3RhdGljIGZsb2F0IGdBdXRvc2Nyb2xsQnV0dG9uRGVsYXkg
PSAwLjA1ZjsKIHN0YXRpYyBib29sIGdKdW1wT25UcmFja0NsaWNrID0gZmFsc2U7CiAKLSNpZiBV
U0UoU0NST0xMQkFSX1BBSU5URVIpCi1zdGF0aWMgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBn
QnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0dG9uc05vbmU7Ci0jZWxzZQogc3RhdGljIFNj
cm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgZ0J1dHRvblBsYWNlbWVudCA9IFNjcm9sbGJhckJ1dHRv
bnNEb3VibGVFbmQ7Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgdXBkYXRlQXJyb3dQbGFjZW1lbnQo
KQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICByZXR1cm47Ci0jZW5kaWYKKyAg
ICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIE5TU3RyaW5nICpidXR0b25QbGFjZW1lbnQgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSBvYmplY3RGb3JLZXk6QCJBcHBsZVNjcm9sbEJhclZhcmlhbnQiXTsK
ICAgICBpZiAoW2J1dHRvblBsYWNlbWVudCBpc0VxdWFsVG9TdHJpbmc6QCJTaW5nbGUiXSkKICAg
ICAgICAgZ0J1dHRvblBsYWNlbWVudCA9IFNjcm9sbGJhckJ1dHRvbnNTaW5nbGU7CkBAIC0xNTcs
MTUgKzE1MiwxNSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVBcnJvd1BsYWNlbWVudCgpCiAKIHZvaWQg
U2Nyb2xsYmFyVGhlbWVNYWM6OnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBib29sIGlzSG9yaXpvbnRhbCA9
IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwotICAgIFNj
cm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciA9IFtOU0NsYXNzRnJvbVN0cmluZyhAIk5T
U2Nyb2xsZXJJbXAiKSBzY3JvbGxlckltcFdpdGhTdHlsZTp3a1JlY29tbWVuZGVkU2Nyb2xsZXJT
dHlsZSgpIGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKXNjcm9sbGJhci0+Y29udHJvbFNpemUo
KSBob3Jpem9udGFsOmlzSG9yaXpvbnRhbCByZXBsYWNpbmdTY3JvbGxlckltcDpuaWxdOwotICAg
IHNjcm9sbGJhck1hcCgpLT5hZGQoc2Nyb2xsYmFyLCBzY3JvbGxiYXJQYWludGVyKTsKLSAgICB1
cGRhdGVFbmFibGVkU3RhdGUoc2Nyb2xsYmFyKTsKLSAgICB1cGRhdGVTY3JvbGxiYXJPdmVybGF5
U3R5bGUoc2Nyb2xsYmFyKTsKLSNlbHNlCi0gICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxi
YXIpOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7
CisgICAgICAgIGJvb2wgaXNIb3Jpem9udGFsID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09
IEhvcml6b250YWxTY3JvbGxiYXI7CisgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFy
UGFpbnRlciA9IFtOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAiKSBzY3JvbGxlcklt
cFdpdGhTdHlsZTpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSBjb250cm9sU2l6ZTooTlNDb250
cm9sU2l6ZSlzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkgaG9yaXpvbnRhbDppc0hvcml6b250YWwg
cmVwbGFjaW5nU2Nyb2xsZXJJbXA6bmlsXTsKKyAgICAgICAgc2Nyb2xsYmFyTWFwKCktPmFkZChz
Y3JvbGxiYXIsIHNjcm9sbGJhclBhaW50ZXIpOworICAgICAgICB1cGRhdGVFbmFibGVkU3RhdGUo
c2Nyb2xsYmFyKTsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKHNjcm9sbGJh
cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIs
IG5pbCk7CisgICAgfQogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1bnJlZ2lzdGVyU2Ny
b2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQpAQCAtMTczLDcgKzE2OCw2IEBAIHZvaWQgU2Ny
b2xsYmFyVGhlbWVNYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
CiAgICAgc2Nyb2xsYmFyTWFwKCktPnJlbW92ZShzY3JvbGxiYXIpOwogfQogCi0jaWYgVVNFKFND
Uk9MTEJBUl9QQUlOVEVSKQogdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6c2V0TmV3UGFpbnRlckZv
clNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFpbnRlciBuZXdQYWlu
dGVyKQogewogICAgIHNjcm9sbGJhck1hcCgpLT5zZXQoc2Nyb2xsYmFyLCBuZXdQYWludGVyKTsK
QEAgLTE4NSwxMyArMTc5LDEzIEBAIFNjcm9sbGJhclBhaW50ZXIgU2Nyb2xsYmFyVGhlbWVNYWM6
OnBhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgcmV0dXJu
IHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKTsKIH0KLSNlbmRpZgogCiBTY3Jv
bGxiYXJUaGVtZU1hYzo6U2Nyb2xsYmFyVGhlbWVNYWMoKQogewogICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkOwogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgaW5pdGlhbGl6ZWQg
PSB0cnVlOworICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gaXNTY3JvbGxiYXJPdmVybGF5QVBJ
QXZhaWxhYmxlKCkgPyBTY3JvbGxiYXJCdXR0b25zTm9uZSA6IFNjcm9sbGJhckJ1dHRvbnNEb3Vi
bGVFbmQ7CiAgICAgICAgIFtXZWJTY3JvbGxiYXJQcmVmc09ic2VydmVyIHJlZ2lzdGVyQXNPYnNl
cnZlcl07CiAgICAgICAgIHByZWZlcmVuY2VzQ2hhbmdlZCgpOwogICAgIH0KQEAgLTIxMywyNiAr
MjA3LDIzIEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnByZWZlcmVuY2VzQ2hhbmdlZCgpCiAK
IGludCBTY3JvbGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRy
b2xTaXplIGNvbnRyb2xTaXplKQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBT
Y3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIgPSBbTlNDbGFzc0Zyb21TdHJpbmcoQCJO
U1Njcm9sbGVySW1wIikgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6d2tSZWNvbW1lbmRlZFNjcm9sbGVy
U3R5bGUoKSBjb250cm9sU2l6ZTpjb250cm9sU2l6ZSBob3Jpem9udGFsOk5PIHJlcGxhY2luZ1Nj
cm9sbGVySW1wOm5pbF07Ci0gICAgcmV0dXJuIFtzY3JvbGxiYXJQYWludGVyIHRyYWNrQm94V2lk
dGhdOwotI2Vsc2UKLSAgICByZXR1cm4gY1Njcm9sbGJhclRoaWNrbmVzc1tjb250cm9sU2l6ZV07
Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAg
ICAgICAgU2Nyb2xsYmFyUGFpbnRlciBzY3JvbGxiYXJQYWludGVyID0gW05TQ2xhc3NGcm9tU3Ry
aW5nKEAiTlNTY3JvbGxlckltcCIpIHNjcm9sbGVySW1wV2l0aFN0eWxlOnJlY29tbWVuZGVkU2Ny
b2xsZXJTdHlsZSgpIGNvbnRyb2xTaXplOmNvbnRyb2xTaXplIGhvcml6b250YWw6Tk8gcmVwbGFj
aW5nU2Nyb2xsZXJJbXA6bmlsXTsKKyAgICAgICAgcmV0dXJuIFtzY3JvbGxiYXJQYWludGVyIHRy
YWNrQm94V2lkdGhdOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gY1Njcm9sbGJhclRoaWNr
bmVzc1tjb250cm9sU2l6ZV07CiB9CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6OnVzZXNPdmVy
bGF5U2Nyb2xsYmFycygpIGNvbnN0CiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAg
IHJldHVybiB3a1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpID09IE5TU2Nyb2xsZXJTdHlsZU92
ZXJsYXk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9s
bGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIHJlY29tbWVuZGVkU2Ny
b2xsZXJTdHlsZSgpID09IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXk7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZVNjcm9s
bGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xM
QkFSX1BBSU5URVIpCiAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gcGFpbnRlckZvclNj
cm9sbGJhcihzY3JvbGxiYXIpOwogICAgIHN3aXRjaCAoc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJl
YSgpLT5zY3JvbGxiYXJPdmVybGF5U3R5bGUoKSkgewogICAgIGNhc2UgU2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlRGVmYXVsdDoKQEAgLTI0NSw5ICsyMzYsNiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lTWFj
Ojp1cGRhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiAgICAg
ICAgIFtwYWludGVyIHNldEtub2JTdHlsZTpOU1Njcm9sbGVyS25vYlN0eWxlTGlnaHRdOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwot
I2VuZGlmCiB9CiAKIGRvdWJsZSBTY3JvbGxiYXJUaGVtZU1hYzo6aW5pdGlhbEF1dG9zY3JvbGxU
aW1lckRlbGF5KCkKQEAgLTI2Nyw3ICsyNTUsNyBAQCBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50
IFNjcm9sbGJhclRoZW1lTWFjOjpidXR0b25zUGxhY2VtZW50KCkgY29uc3QKIAogYm9vbCBTY3Jv
bGxiYXJUaGVtZU1hYzo6aGFzQnV0dG9ucyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSAgICBy
ZXR1cm4gc2Nyb2xsYmFyLT5lbmFibGVkKCkgJiYgZ0J1dHRvblBsYWNlbWVudCAhPSBTY3JvbGxi
YXJCdXR0b25zTm9uZQorICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKSAmJiBidXR0b25z
UGxhY2VtZW50KCkgIT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUKICAgICAgICAgICAgICAmJiAoc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIKICAgICAgICAgICAg
ICA/IHNjcm9sbGJhci0+d2lkdGgoKQogICAgICAgICAgICAgIDogc2Nyb2xsYmFyLT5oZWlnaHQo
KSkgPj0gMiAqIChjUmVhbEJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldIC0g
Y0J1dHRvbkhpdEluc2V0W3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0pOwpAQCAtMjc2LDEzICsy
NjQsMTIgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6aGFzQnV0dG9ucyhTY3JvbGxiYXIqIHNj
cm9sbGJhcikKIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6Omhhc1RodW1iKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQogewogICAgIGludCBtaW5MZW5ndGhGb3JUaHVtYjsKLSNpZiBVU0UoU0NST0xMQkFS
X1BBSU5URVIpCi0gICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyTWFwKCkt
PmdldChzY3JvbGxiYXIpLmdldCgpOwotICAgIG1pbkxlbmd0aEZvclRodW1iID0gW3BhaW50ZXIg
a25vYk1pbkxlbmd0aF0gKyBbcGFpbnRlciB0cmFja092ZXJsYXBFbmRJbnNldF0gKyBbcGFpbnRl
ciBrbm9iT3ZlcmxhcEVuZEluc2V0XQotICAgICAgICArIDIgKiAoW3BhaW50ZXIgdHJhY2tFbmRJ
bnNldF0gKyBbcGFpbnRlciBrbm9iRW5kSW5zZXRdKTsKLSNlbHNlCi0gICAgbWluTGVuZ3RoRm9y
VGh1bWIgPSAyICogY0J1dHRvbkluc2V0W3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyBjVGh1
bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIDE7Ci0jZW5kaWYKKyAgICBp
ZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgU2Nyb2xsYmFy
UGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpOwor
ICAgICAgICBtaW5MZW5ndGhGb3JUaHVtYiA9IFtwYWludGVyIGtub2JNaW5MZW5ndGhdICsgW3Bh
aW50ZXIgdHJhY2tPdmVybGFwRW5kSW5zZXRdICsgW3BhaW50ZXIga25vYk92ZXJsYXBFbmRJbnNl
dF0KKyAgICAgICAgICAgICsgMiAqIChbcGFpbnRlciB0cmFja0VuZEluc2V0XSArIFtwYWludGVy
IGtub2JFbmRJbnNldF0pOworICAgIH0gZWxzZQorICAgICAgICBtaW5MZW5ndGhGb3JUaHVtYiA9
IDIgKiBjQnV0dG9uSW5zZXRbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIGNUaHVtYk1pbkxl
bmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgMTsKICAgICByZXR1cm4gc2Nyb2xsYmFy
LT5lbmFibGVkKCkgJiYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gCiAgICAgICAgICAgICAgc2Nyb2xsYmFyLT53aWR0aCgpIDogCiAgICAgICAgICAg
ICAgc2Nyb2xsYmFyLT5oZWlnaHQoKSkgPj0gbWluTGVuZ3RoRm9yVGh1bWI7CkBAIC0yOTAsNyAr
Mjc3LDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6aGFzVGh1bWIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCiAKIHN0YXRpYyBJbnRSZWN0IGJ1dHRvblJlcGFpbnRSZWN0KGNvbnN0IEludFJlY3Qm
IGJ1dHRvblJlY3QsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJD
b250cm9sU2l6ZSBjb250cm9sU2l6ZSwgYm9vbCBzdGFydCkKIHsKLSAgICBBU1NFUlQoZ0J1dHRv
blBsYWNlbWVudCAhPSBTY3JvbGxiYXJCdXR0b25zTm9uZSk7CisgICAgQVNTRVJUKGJ1dHRvbnNQ
bGFjZW1lbnQoKSAhPSBTY3JvbGxiYXJCdXR0b25zTm9uZSk7CiAKICAgICBJbnRSZWN0IHBhaW50
UmVjdChidXR0b25SZWN0KTsKICAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikgewpAQCAtNDE5LDExICs0MDYsMTAgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZU1hYzo6
dHJhY2tSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIHBhaW50aW5nKQogCiBpbnQgU2Ny
b2xsYmFyVGhlbWVNYWM6Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXIqIHNjcm9sbGJhcikK
IHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgcmV0dXJuIFtzY3JvbGxiYXJNYXAo
KS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCkga25vYk1pbkxlbmd0aF07Ci0jZWxzZQotICAgIHJldHVy
biBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXTsKLSNlbmRpZgorICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIFtz
Y3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCkga25vYk1pbkxlbmd0aF07CisgICAg
ZWxzZQorICAgICAgICByZXR1cm4gY1RodW1iTWluTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNp
emUoKV07CiB9CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6OnNob3VsZENlbnRlck9uVGh1bWIo
U2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCkBAIC00NDAsNyArNDI2
LDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6c2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9m
VGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGYKICAgICByZXR1cm4gZXZlbnQuYWx0S2V5KCk7
CiB9CiAKLXN0YXRpYyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUoU2Nyb2xsYmFy
UGFydCBwYXJ0KQoraW50IFNjcm9sbGJhclRoZW1lTWFjOjpzY3JvbGxiYXJQYXJ0VG9ISVByZXNz
ZWRTdGF0ZShTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAg
ICAgIGNhc2UgQmFja0J1dHRvblN0YXJ0UGFydDoKQEAgLTQ2MCwxNCArNDQ2LDEwIEBAIHN0YXRp
YyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUoU2Nyb2xsYmFyUGFydCBwYXJ0KQog
CiB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFtzY3JvbGxiYXJN
YXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCkgc2V0RW5hYmxlZDpzY3JvbGxiYXItPmVuYWJsZWQo
KV07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2VuZGlmCisgICAgaWYg
KGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbc2Nyb2xsYmFyTWFw
KCktPmdldChzY3JvbGxiYXIpLmdldCgpIHNldEVuYWJsZWQ6c2Nyb2xsYmFyLT5lbmFibGVkKCld
OwogfQogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogc3RhdGljIHZvaWQgc2Nyb2xsYmFy
UGFpbnRlclBhaW50KFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciwgYm9vbCBlbmFi
bGVkLCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgQ0dSZWN0IGZyYW1lUmVjdCkK
IHsKICAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRFbmFibGVkOmVuYWJsZWRdOwpAQCAtNDg5LDQ3
ICs0NzEsNDYgQEAgc3RhdGljIHZvaWQgc2Nyb2xsYmFyUGFpbnRlclBhaW50KFNjcm9sbGJhclBh
aW50ZXIgc2Nyb2xsYmFyUGFpbnRlciwgYm9vbCBlbmFibGUKICAgICBpZiAoZW5hYmxlZCkKICAg
ICAgICAgW3Njcm9sbGJhclBhaW50ZXIgZHJhd0tub2JdOwogfQotI2VuZGlmCiAKIGJvb2wgU2Ny
b2xsYmFyVGhlbWVNYWM6OnBhaW50KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCiB7Ci0jaWYgVVNFKFNDUk9M
TEJBUl9QQUlOVEVSKQotICAgIGZsb2F0IHZhbHVlID0gMDsKLSAgICBmbG9hdCBvdmVyaGFuZyA9
IDA7CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7CisgICAgICAg
IGZsb2F0IHZhbHVlID0gMDsKKyAgICAgICAgZmxvYXQgb3ZlcmhhbmcgPSAwOwogCi0gICAgaWYg
KHNjcm9sbGJhci0+Y3VycmVudFBvcygpIDwgMCkgewotICAgICAgICAvLyBTY3JvbGxlZCBwYXN0
IHRoZSB0b3AuCi0gICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgb3ZlcmhhbmcgPSAtc2Nyb2xs
YmFyLT5jdXJyZW50UG9zKCk7Ci0gICAgfSBlbHNlIGlmIChzY3JvbGxiYXItPnZpc2libGVTaXpl
KCkgKyBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSA+IHNjcm9sbGJhci0+dG90YWxTaXplKCkpIHsK
LSAgICAgICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgYm90dG9tLgotICAgICAgICB2YWx1ZSA9IDE7
Ci0gICAgICAgIG92ZXJoYW5nID0gc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgKyBzY3JvbGxiYXIt
PnZpc2libGVTaXplKCkgLSBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIFdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBzY3JvbGxhYmxlIGFyZWEuCi0gICAg
ICAgIGludCBtYXhpbXVtID0gc2Nyb2xsYmFyLT5tYXhpbXVtKCk7Ci0gICAgICAgIGlmIChtYXhp
bXVtID4gMCkKLSAgICAgICAgICAgIHZhbHVlID0gc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgLyBt
YXhpbXVtOwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChzY3JvbGxiYXItPmN1cnJlbnRQb3Mo
KSA8IDApIHsKKyAgICAgICAgICAgIC8vIFNjcm9sbGVkIHBhc3QgdGhlIHRvcC4KICAgICAgICAg
ICAgIHZhbHVlID0gMDsKKyAgICAgICAgICAgIG92ZXJoYW5nID0gLXNjcm9sbGJhci0+Y3VycmVu
dFBvcygpOworICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSArIHNj
cm9sbGJhci0+Y3VycmVudFBvcygpID4gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSkgeworICAgICAg
ICAgICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgYm90dG9tLgorICAgICAgICAgICAgdmFsdWUgPSAx
OworICAgICAgICAgICAgb3ZlcmhhbmcgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSArIHNjcm9s
bGJhci0+dmlzaWJsZVNpemUoKSAtIHNjcm9sbGJhci0+dG90YWxTaXplKCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBXaXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgc2Nyb2xsYWJs
ZSBhcmVhLgorICAgICAgICAgICAgaW50IG1heGltdW0gPSBzY3JvbGxiYXItPm1heGltdW0oKTsK
KyAgICAgICAgICAgIGlmIChtYXhpbXVtID4gMCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHNj
cm9sbGJhci0+Y3VycmVudFBvcygpIC8gbWF4aW11bTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFNjcm9s
bEFuaW1hdG9yTWFjKiBzY3JvbGxBbmltYXRvciA9IHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9y
TWFjKj4oc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxBbmltYXRvcigpKTsKKyAg
ICAgICAgc2Nyb2xsQW5pbWF0b3ItPnNldElzRHJhd2luZ0ludG9MYXllcihjb250ZXh0LT5pc0NB
TGF5ZXJDb250ZXh0KCkpOworICAgICAgICAKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC0+Y2xpcChkYW1hZ2VS
ZWN0KTsKKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHNjcm9sbGJhci0+ZnJhbWVSZWN0KCku
eCgpLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKSk7CisgICAgICAgIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7CisgICAgICAgIHNjcm9sbGJhclBh
aW50ZXJQYWludChzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhci0+ZW5hYmxlZCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHN0YXRpY19jYXN0PENHRmxvYXQ+KHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgLSBv
dmVyaGFuZykgLyBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKworICAgICAgICBzY3JvbGxBbmlt
YXRvci0+c2V0SXNEcmF3aW5nSW50b0xheWVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQotICAgIAotICAgIFNjcm9sbEFuaW1hdG9yTWFjKiBzY3JvbGxBbmltYXRvciA9IHN0
YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFjKj4oc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgp
LT5zY3JvbGxBbmltYXRvcigpKTsKLSAgICBzY3JvbGxBbmltYXRvci0+c2V0SXNEcmF3aW5nSW50
b0xheWVyKGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7Ci0gICAgCi0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKLSAgICBjb250ZXh0LT5jbGlw
KGRhbWFnZVJlY3QpOwotICAgIGNvbnRleHQtPnRyYW5zbGF0ZShzY3JvbGxiYXItPmZyYW1lUmVj
dCgpLngoKSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkpOwotICAgIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7Ci0gICAgc2Nyb2xsYmFyUGFpbnRl
clBhaW50KHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmVuYWJsZWQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nh
c3Q8Q0dGbG9hdD4oc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAtIG92ZXJoYW5nKSAvIHNjcm9s
bGJhci0+dG90YWxTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFy
LT5mcmFtZVJlY3QoKSk7Ci0KLSAgICBzY3JvbGxBbmltYXRvci0+c2V0SXNEcmF3aW5nSW50b0xh
eWVyKGZhbHNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgogCiAgICAgSElUaGVtZVRyYWNr
RHJhd0luZm8gdHJhY2tJbmZvOwogICAgIHRyYWNrSW5mby52ZXJzaW9uID0gMDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118235</attachid>
            <date>2011-12-07 11:07:26 -0800</date>
            <delta_ts>2011-12-19 16:29:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61144-20111207110725.patch</filename>
            <type>text/plain</type>
            <size>154188</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM3MjlkMjJiYzljZDhj
ZWNlZjA1MzAxZTA0YjBjMTMyYmIyOWVjOC4uODA3M2YyYTdlMmZlMGExZDU3NGEwM2E5MmYzYWJh
ZWMyMzc3OWI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDExLTEyLTA2ICBTYWls
ZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4KKworICAgICAgICBNZXJnZSBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjLm1tIGJhY2sgdG8gU2Nyb2xsQW5pbWF0b3JNYWMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTQ0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXQgYSBoaWdoIGxldmVsIHRo
ZSBtYWluIGNoYW5nZXMgYXJlOgorICAgICAgICAgICAgLSByZXBsYWNlICNpZmRlZnMgaW4gU2Ny
b2xsQW5pbWF0b3JNYWMgYW5kIFNjcm9sbGJhclRoZW1lTWFjIHdpdGggcnVuIHRpbWUgY2hlY2tz
CisgICAgICAgICAgICAtIGRlbGV0ZSBkdXBsaWNhdGUgY29kZSBpbiBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjLiBLZWVwIHRoZSBwYWludCBjb2RlIHNpbmNlIGl0IGRvZXMgdGlja21hcmtzIGFu
ZCBTS0lBIHN0dWZmLgorICAgICAgICAgICAgLSBkZWxldGUgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYyBzaW5jZSBTY3JvbGxBbmltYXRvck1hYyBkb2VzIHRoZSBleGFjdCBzYW1lIHRoaW5nCisg
ICAgICAgICAgICAtIGRlbGV0ZSBTY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMg
c2luY2UgTlNTY3JvbGxlckltcERldGFpbHMgZG9lcyB0aGUgc2FtZSB0aGluZworCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gSnVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW06IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFj
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3Zlcmxh
eVV0aWxpdGllc0Nocm9taXVtTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJQYWludGVyUGFpbnRUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludCk6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL0VtcHR5UHJvdG9jb2xEZWZpbml0aW9ucy5oOiBBZGRlZCBOU0FuaW1hdGlvbkRl
bGVnYXRlCisgICAgICAgICogcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmg6IEFk
ZGVkIC1bTlNTY3JvbGxlciBwcmVmZXJyZWRTY3JvbGxlclN0eWxlXSwgaXNTY3JvbGxiYXJPdmVy
bGF5QVBJQXZhaWxhYmxlKCksIGFuZCByZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvTlNTY3JvbGxlckltcERldGFpbHMubW06IEFkZGVkIGltcGxlbWVu
dGF0aW9uIGZvciBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSwgYW5kIHJlY29tbWVu
ZGVkU2Nyb2xsZXJTdHlsZSgpLgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxiYXJPdmVybGF5
QVBJQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHls
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmg6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tOgorICAgICAgICAoc3VwcG9ydHNV
SVN0YXRlVHJhbnNpdGlvblByb2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Om1hY1Njcm9sbGJh
clRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmlt
YXRvck1hYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFu
aW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlQ
b3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNv
bnRlbnRBcmVhV2lsbFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRTY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxTdGFydExpdmVSZXNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRzUmVzaXplZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlkU2hvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEVuZFNjcm9sbEdl
c3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEFkZFZlcnRp
Y2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp3aWxs
UmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JNYWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjYW5jZWxBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnViYmVyQmFuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c2V0SXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5oOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKCtbV2ViU2Nyb2xsYmFy
UHJlZnNPYnNlcnZlciBhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOl0pOgorICAgICAgICAoK1tXZWJT
Y3JvbGxiYXJQcmVmc09ic2VydmVyIGJlaGF2aW9yUHJlZnNDaGFuZ2VkOl0pOgorICAgICAgICAo
V2ViQ29yZTo6dXBkYXRlQXJyb3dQbGFjZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWVNYWM6OnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lTWFjOjpwYWludGVyRm9yU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lTWFjOjpTY3JvbGxiYXJUaGVtZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lTWFjOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6aGFzQnV0dG9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6aGFzVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6YnV0dG9uUmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVN
YWM6Om1pbmltdW1UaHVtYkxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZU1hYzo6c2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZUVuYWJsZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JvbGxiYXJQYWludGVyUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVNYWM6OnBhaW50KToKKwogMjAxMS0xMi0wMyAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0IGFjY2lkZW50YWwgY2hhbmdlIGZy
b20gcjEwMTkzMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggMjJh
NDhjMGY0Y2U0ZTQyZDM5N2QwNDczZTlmN2ZjZGU3ZDFkYWJkNy4uZTBlYzAwMWMzYjQ3MjkyOGIz
YWIzMDIyMzk1NWNmY2RiMTg0NGEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAKQEAgLTEyNTksMTMgKzEyNTksMTMgQEAKICAgICAgICAgICAgICAgIyBzdWNoIGFzOgog
ICAgICAgICAgICAgICAjIGNvbS5nb29nbGUuQ2hyb21lW10gb2JqY1tdOiBDbGFzcyBTY3JvbGxi
YXJQcmVmc09ic2VydmVyIGlzIGltcGxlbWVudGVkIGluIGJvdGggLi4uL0dvb2dsZSBDaHJvbWUu
YXBwL0NvbnRlbnRzL1ZlcnNpb25zLy4uLi9Hb29nbGUgQ2hyb21lIEhlbHBlci5hcHAvQ29udGVu
dHMvTWFjT1MvLi4vLi4vLi4vR29vZ2xlIENocm9tZSBGcmFtZXdvcmsuZnJhbWV3b3JrL0dvb2ds
ZSBDaHJvbWUgRnJhbWV3b3JrIGFuZCAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9XZWJLaXQu
ZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9XZWJDb3JlLmZyYW1ld29yay9WZXJzaW9u
cy9BL1dlYkNvcmUuIE9uZSBvZiB0aGUgdHdvIHdpbGwgYmUgdXNlZC4gV2hpY2ggb25lIGlzIHVu
ZGVmaW5lZC4KICAgICAgICAgICAgICAgJ1dlYkNhc2NhZGVMaXN0PUNocm9taXVtV2ViQ29yZU9i
akNXZWJDYXNjYWRlTGlzdCcsCi0gICAgICAgICAgICAgICdTY3JvbGxiYXJQcmVmc09ic2VydmVy
PUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQcmVmc09ic2VydmVyJywKKyAgICAgICAgICAg
ICAgJ1dlYlNjcm9sbGJhclByZWZzT2JzZXJ2ZXI9Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYlNjcm9s
bGJhclByZWZzT2JzZXJ2ZXInLAogICAgICAgICAgICAgICAnV2ViQ29yZVJlbmRlclRoZW1lTm90
aWZpY2F0aW9uT2JzZXJ2ZXI9Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYkNvcmVSZW5kZXJUaGVtZU5v
dGlmaWNhdGlvbk9ic2VydmVyJywKICAgICAgICAgICAgICAgJ1dlYkZvbnRDYWNoZT1DaHJvbWl1
bVdlYkNvcmVPYmpDV2ViRm9udENhY2hlJywKLSAgICAgICAgICAgICAgJ1Njcm9sbEFuaW1hdGlv
bkhlbHBlckRlbGVnYXRlPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxBbmltYXRpb25IZWxwZXJE
ZWxlZ2F0ZScsCi0gICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVn
YXRlPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRl
JywKLSAgICAgICAgICAgICAgJ1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNv
cmVPYmpDU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlJywKLSAgICAgICAgICAgICAgJ1Njcm9sbGJh
clBhcnRBbmltYXRpb249Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclBhcnRBbmltYXRpb24n
LAorICAgICAgICAgICAgICAnV2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU9Q2hyb21p
dW1XZWJDb3JlT2JqQ1dlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlJywKKyAgICAgICAg
ICAgICAgJ1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU9Q2hyb21pdW1XZWJD
b3JlT2JqQ1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUnLAorICAgICAgICAg
ICAgICAnV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlPUNocm9taXVtV2ViQ29yZU9iakNXZWJT
Y3JvbGxiYXJQYWludGVyRGVsZWdhdGUnLAorICAgICAgICAgICAgICAnV2ViU2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbj1DaHJvbWl1bVdlYkNvcmVPYmpDV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbics
CiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKICAgICAgICAg
ICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvYXBwbGVfd2Via2l0JywKQEAg
LTE1MzMsNyArMTUzMywxMSBAQAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21h
Yy9CbG9ja0V4Y2VwdGlvbnNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0
Zm9ybS9tYWMvS2lsbFJpbmdNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0XFwubW0kJ10sCisgICAgICAg
ICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzXFwubW0k
J10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL1B1cmdlYWJsZUJ1ZmZl
ck1hY1xcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvU2Ny
b2xsYmFyVGhlbWVNYWNcXC5tbSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWNcXC5tbSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScs
ICdwbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJcXC5tbSQnXSwKICAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZVxc
Lm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9XZWJDb3JlVGV4
dFJlbmRlcmVyXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vdGV4
dC9tYWMvU2hhcGVBcmFiaWNcXC5jJCddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDJmZjYyNTAwNjc5
MTg4ZTBhMzA5MTk5NTZjN2NhYjU2NDZmMzY1ZjEuLmU1NTk4OTExNzZlNGY4OWFkMWYzNjlmOWZm
YjdhYmUxNTYzZDM0NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTMyODMsMTAgKzMyODMsNiBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTGlzdEJveC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVQcml2YXRlLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oJywKLSAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1t
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0
aWVzQ2hyb21pdW1NYWMuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
YmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwJywKQEAgLTQx
MDAsNiArNDA5Niw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0xvY2FsaXplZFN0cmlu
Z3NNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9Mb2dnaW5nTWFjLm1tJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9tYWMvTUlNRVR5cGVSZWdpc3RyeU1hYy5tbScsCisgICAgICAg
ICAgICAncGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbScsCiAgICAgICAgICAgICAncGxh
dGZvcm0vbWFjL1Bhc3RlYm9hcmRIZWxwZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFj
L1Bhc3RlYm9hcmRNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9QbGF0Zm9ybUNs
b2NrQ0EuY3BwJywKQEAgLTQxMTEsNiArNDEwOSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
bWFjL1NjaGVkdWxlUGFpck1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Njcm9s
bEFuaW1hdG9yTWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250
cm9sbGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29u
dHJvbGxlci5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0n
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0nLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ5NmRkOTBl
YzYxNzJkYzY1YWE3NTBhZTViNTY2NTVjMDY5ZTkzZDguLmM3MWM2M2Y1NmIxY2NmMzFhMTlmM2Fi
OWFhMTI0ODk3MDU0MGFhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4NzYsNiArNDg3Niw3IEBACiAJCUI2NTY2MjcxMTIw
QjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NTY2MjZGMTIwQjEyMjcwMDZFQTg1QyAvKiBK
U0lEQlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKIAkJQjY5MUMxRjkxMjA2RDRBMDAwMjVEOTgwIC8q
IElEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1ODVBNkEzMTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5jcHAgKi87IH07
CiAJCUI3MUZFNkRGMTEwOTFDQjMwMERBRUY3NyAvKiBQcmludENvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3NzZENDNBMTEwNDUyNUQwMEJF
QjBFQyAvKiBQcmludENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlCNzJCMTU4QTE0OERCNTI5MDBBQjQ3MUEgLyogTlNTY3JvbGxlcklt
cERldGFpbHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNzJCMTU4OTE0OERCNTI5MDBBQjQ3MUEgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0gKi87
IH07CiAJCUI3MzRCMTgxMTE5Qjk5MTEwMDY1ODdCRCAvKiBGb250VHJhbnNjb2Rlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzM0QjE4MDExOUI5
OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3BwICovOyB9OwogCQlCNzM0QjE4MzExOUI5
OTFEMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3MzRCMTgyMTE5Qjk5MUQwMDY1ODdCRCAvKiBGb250VHJh
bnNjb2Rlci5oICovOyB9OwogCQlCNzc2RDQzRDExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3
NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRleHQuY3BwICovOyB9OwpAQCAtMTIx
NjEsNiArMTIxNjIsNyBAQAogCQlCNjU2NjI2RDEyMEIxMTZCMDA2RUE4NUMgLyogSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCNjU2NjI2RTEyMEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQlRyYW5zYWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI2NTY2MjZGMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lE
QlRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
SURCVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNzJCMTU4
OTE0OERCNTI5MDBBQjQ3MUEgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOU1Njcm9sbGVySW1wRGV0YWlscy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjczNEIxODAxMTlCOTkxMTAwNjU4N0JEIC8qIEZv
bnRUcmFuc2NvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZv
bnRUcmFuc2NvZGVyLmNwcDsgcGF0aCA9IHRyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNzM0QjE4MjExOUI5OTFEMDA2NTg3QkQgLyog
Rm9udFRyYW5zY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRm9udFRy
YW5zY29kZXIuaDsgcGF0aCA9IHRyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjc3NkQ0M0ExMTA0NTI1RDAwQkVCMEVDIC8qIFByaW50Q29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmludENvbnRleHQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDY1LDYgKzE1NDY3LDcgQEAKIAkJCQk2
NTdFREEwQTEzODVDQkQ4MDA0RTA2NDUgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVyTWFjLm1tICov
LAogCQkJCUJDNzcyQzVEMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1t
ICovLAogCQkJCTkzNTAwRjMxMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWls
cy5oICovLAorCQkJCUI3MkIxNTg5MTQ4REI1MjkwMEFCNDcxQSAvKiBOU1Njcm9sbGVySW1wRGV0
YWlscy5tbSAqLywKIAkJCQlBN0QzQzUyMzBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhl
bHBlci5oICovLAogCQkJCTRCMjcwOTgxMEFGMkU1RTAwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkTWFj
Lm1tICovLAogCQkJCTkzNUM0NzZGMDlBQzRENzMwMEE2QUFCNCAvKiBQbGF0Zm9ybU1vdXNlRXZl
bnRNYWMubW0gKi8sCkBAIC0yNzYxOSw2ICsyNzYyMiw3IEBACiAJCQkJNkUzRkFEMzgxNDczM0Y0
MDAwRTQyMzA2IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNkUzRkFFOEUxNDczM0ZEQjAwRTQyMzA2IC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2NTU0MTNBMTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlF
dmVudElPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUI3MkIxNThBMTQ4REI1MjkwMEFCNDcxQSAv
KiBOU1Njcm9sbGVySW1wRGV0YWlscy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmI4NDljZjI4NDI3MDRkMzAw
ZjllNzczNWUwNDFiNzUzMTFhMTNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjX2gKLSNkZWZpbmUg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hY19oCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0j
aW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlNj
cm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9t
aXVtTWFjLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0KLSNpZmRlZiBfX09CSkNfXwotQGNsYXNzIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
OwotQGNsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKLUBjbGFzcyBTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlckRlbGVnYXRlOwotQGNsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsK
LSNlbHNlCi1jbGFzcyBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKLWNsYXNzIFNjcm9s
bGJhclBhaW50ZXJEZWxlZ2F0ZTsKLWNsYXNzIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVs
ZWdhdGU7Ci1jbGFzcyBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7Ci0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBTY3JvbGxiYXI7Ci0KLWNsYXNzIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgewotcHVibGljOgotICAgIGV4cGxp
Y2l0IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoU2Nyb2xsYWJsZUFyZWEqKTsKLSAgICB2aXJ0
dWFsIH5TY3JvbGxBbmltYXRvckNocm9taXVtTWFjKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2Ny
b2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwg
ZmxvYXQgbXVsdGlwbGllcik7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCi0gICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JikgT1ZFUlJJREU7Ci0jaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQotICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsK
LSNlbmRpZgotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpOwot
Ci0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bv
c2l0aW9uKTsKLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGZsb2F0IGRlbHRhWCk7
Ci0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBkZWx0YVkpOwotCi0gICAg
dm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIG5ld1Bvc2l0aW9uKTsKLQotICAgIHZvaWQgc2V0SXNEcmF3aW5nSW50b0xheWVyKGJv
b2wgYikgeyBtX2RyYXdpbmdJbnRvTGF5ZXIgPSBiOyB9Ci0gICAgYm9vbCBpc0RyYXdpbmdJbnRv
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdJbnRvTGF5ZXI7IH0KLQotICAgIGJvb2wg
aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNldElzQWN0aXZlKCk7Ci0KLSNp
ZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxlclN0eWxl
KCk7Ci0KLSAgICBib29sIHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0OwotICAg
IHZvaWQgc3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0gICAgdm9pZCBzdG9wU2Nyb2xsYmFy
UGFpbnRUaW1lcigpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1i
UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPiBtX3Nj
cm9sbEFuaW1hdGlvbkhlbHBlcjsKLSAgICBSZXRhaW5QdHI8U2Nyb2xsQW5pbWF0aW9uSGVscGVy
RGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7Ci0KLSNpZiBVU0UoV0tf
U0NST0xMQkFSX1BBSU5URVIpCi0gICAgUmV0YWluUHRyPFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJSZWY+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPFNj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJEZWxlZ2F0ZTsKLSAgICBSZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlOwotCi0gICAgdm9pZCBpbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRpbWVyPFNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+Kik7Ci0gICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYz4gbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKLSNlbmRpZgotICAgIAotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRl
cmVkQ29udGVudEFyZWEoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250
ZW50QXJlYSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJl
YSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCk7Ci0gICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRzUmVzaXplZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB3
aWxsRW5kTGl2ZVJlc2l6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZFNob3co
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgY29uc3Q7Ci0g
ICAgdm9pZCBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGRpZEVuZFNj
cm9sbEdlc3R1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2Fs
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFs
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlSG9yaXpv
bnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLQotICAgIHZvaWQgc2V0TmVlZHNTY3JvbGxlclN0
eWxlVXBkYXRlKGJvb2wgbmVlZHNVcGRhdGUpIHsgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUg
PSBuZWVkc1VwZGF0ZTsgfQotICAgIGJvb2wgbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKCkgY29u
c3QgeyByZXR1cm4gbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGU7IH0KLQotICAgIGZsb2F0IGFk
anVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsKLSAgICBmbG9hdCBh
ZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7Ci0gICAgRmxvYXRQ
b2ludCBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBib29sIGFsbG93c1ZlcnRp
Y2FsU3RyZXRjaGluZygpIGNvbnN0OwotICAgIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hp
bmcoKSBjb25zdDsKLSAgICBib29sIHBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxv
YXQgZGVsdGFZKTsKLSAgICB2b2lkIHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgdm9pZCBzbmFwUnVi
YmVyQmFuZFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKTsKLSAg
ICB2b2lkIHNtb290aFNjcm9sbFdpdGhFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsK
LSAgICB2b2lkIGJlZ2luU2Nyb2xsR2VzdHVyZSgpOwotICAgIHZvaWQgZW5kU2Nyb2xsR2VzdHVy
ZSgpOwotCi0gICAgYm9vbCBtX2luU2Nyb2xsR2VzdHVyZTsKLSAgICBib29sIG1fbW9tZW50dW1T
Y3JvbGxJblByb2dyZXNzOwotICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHM7Ci0KLSAg
ICBib29sIG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPbkxlZnQ7Ci0gICAgYm9vbCBtX3Njcm9s
bGVySW5pdGlhbGx5UGlubmVkT25SaWdodDsKLSAgICBpbnQgbV9jdW11bGF0aXZlSG9yaXpvbnRh
bFNjcm9sbDsKLSAgICBib29sIG1fZGlkQ3VtdWxhdGl2ZUhvcml6b250YWxTY3JvbGxFdmVyU3dp
dGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9mUGluOwotCi0gICAgQ0ZUaW1lSW50ZXJ2YWwgbV9sYXN0
TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7Ci0gICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxE
ZWx0YTsKLSAgICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xsRm9yY2U7Ci0gICAgRmxvYXRTaXpl
IG1fbW9tZW50dW1WZWxvY2l0eTsKLQotICAgIC8vIFJ1YmJlciBiYW5kIHN0YXRlLgotICAgIENG
VGltZUludGVydmFsIG1fc3RhcnRUaW1lOwotICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsK
LSAgICBGbG9hdFBvaW50IG1fb3JpZ09yaWdpbjsKLSAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2Np
dHk7Ci0gICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9zbmFwUnViYmVyQmFu
ZFRpbWVyOwotI2VuZGlmCi0gICAgYm9vbCBtX2RyYXdpbmdJbnRvTGF5ZXI7Ci0gICAgYm9vbCBt
X2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7Ci0gICAgYm9vbCBtX25lZWRzU2Nyb2xsZXJTdHls
ZVVwZGF0ZTsKLSAgICBJbnRSZWN0IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0OwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNTA0Y2U4ODZjMzRmODJhYTM3YzZlYzk2Mzk3ZmI2NTU0YzU0YTg1My4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tCisrKyAvZGV2L251bGwK
QEAgLTEsMTM0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+Ci0KLSNp
bmNsdWRlICJTY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgiCi0KLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAiU2Ny
b2xsYWJsZUFyZWEuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaCIKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KLSNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0jaWYgIWRlZmluZWQoTUFD
X09TX1hfVkVSU0lPTl8xMF82KSB8fCBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEIDwgTUFD
X09TX1hfVkVSU0lPTl8xMF82Ci1AcHJvdG9jb2wgTlNBbmltYXRpb25EZWxlZ2F0ZQotQGVuZAot
Ci1AaW50ZXJmYWNlIE5TUHJvY2Vzc0luZm8gKFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNFeHQp
Ci0tIChOU1RpbWVJbnRlcnZhbClzeXN0ZW1VcHRpbWU7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBOU1Byb2Nlc3NJbmZvIChTY3JvbGxBbmltYXRvckNocm9taXVtTWFjRXh0KQotLSAoTlNUaW1l
SW50ZXJ2YWwpc3lzdGVtVXB0aW1lCi17Ci0gICAgLy8gR2V0IGhvdyBsb25nIHN5c3RlbSBoYXMg
YmVlbiB1cC4gRm91bmQgYnkgbG9va2luZyBnZXR0aW5nICJib290dGltZSIgZnJvbSB0aGUga2Vy
bmVsLgotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBib290dGltZSA9IHswfTsKLSAgICBpZiAo
IWJvb3R0aW1lLnR2X3NlYykgewotICAgICAgICBpbnQgbWliWzJdID0ge0NUTF9LRVJOLCBLRVJO
X0JPT1RUSU1FfTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoYm9vdHRpbWUpOwotICAg
ICAgICBpZiAoLTEgPT0gc3lzY3RsKG1pYiwgMiwgJmJvb3R0aW1lLCAmc2l6ZSwgMCwgMCkpCi0g
ICAgICAgICAgICBib290dGltZS50dl9zZWMgPSAwOwotICAgIH0KLSAgICBzdHJ1Y3QgdGltZXZh
bCBub3c7Ci0gICAgaWYgKGJvb3R0aW1lLnR2X3NlYyAmJiAtMSAhPSBnZXR0aW1lb2ZkYXkoJm5v
dywgMCkpIHsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgdXB0aW1lOwotICAgICAgICB0aW1lcnN1
Yigmbm93LCAmYm9vdHRpbWUsICZ1cHRpbWUpOwotICAgICAgICBOU1RpbWVJbnRlcnZhbCByZXN1
bHQgPSB1cHRpbWUudHZfc2VjICsgKHVwdGltZS50dl91c2VjIC8gMUUrNik7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotQGVuZAotI2VuZGlmCi0KLUBp
bnRlcmZhY2UgTlNPYmplY3QgKFNjcm9sbEFuaW1hdGlvbkhlbHBlckRldGFpbHMpCi0tIChpZClp
bml0V2l0aERlbGVnYXRlOihpZClkZWxlZ2F0ZTsKLS0gKHZvaWQpX3N0b3BSdW47Ci0tIChCT09M
KV9pc0FuaW1hdGluZzsKLS0gKE5TUG9pbnQpdGFyZ2V0T3JpZ2luOwotLSAoQ0dGbG9hdClfcHJv
Z3Jlc3M7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUg
OiBOU09iamVjdAotewotICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9h
bmltYXRvcjsKLX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOwotQGVuZAotCi1zdGF0aWMgTlNT
aXplIGFicyhOU1NpemUgc2l6ZSkKLXsKLSAgICBOU1NpemUgZmluYWxTaXplID0gc2l6ZTsKLSAg
ICBpZiAoZmluYWxTaXplLndpZHRoIDwgMCkKLSAgICAgICAgZmluYWxTaXplLndpZHRoID0gLWZp
bmFsU2l6ZS53aWR0aDsKLSAgICBpZiAoZmluYWxTaXplLmhlaWdodCA8IDApCi0gICAgICAgIGZp
bmFsU2l6ZS5oZWlnaHQgPSAtZmluYWxTaXplLmhlaWdodDsKLSAgICByZXR1cm4gZmluYWxTaXpl
OyAgICAKLX0KLQotQGltcGxlbWVudGF0aW9uIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
Ci0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfYW5pbWF0b3IgPSBz
Y3JvbGxBbmltYXRvcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzY3JvbGxBbmlt
YXRvckRlc3Ryb3llZAotewotICAgIF9hbmltYXRvciA9IDA7Ci19Ci0KLS0gKE5TUmVjdClib3Vu
ZHMKLXsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci0K
LSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IF9hbmltYXRvci0+Y3Vy
cmVudFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIE5TTWFrZVJlY3QoY3VycmVudFBvc2l0aW9uLngo
KSwgY3VycmVudFBvc2l0aW9uLnkoKSwgMCwgMCk7Ci19Ci0KLS0gKHZvaWQpX2ltbWVkaWF0ZVNj
cm9sbFRvUG9pbnQ6KE5TUG9pbnQpbmV3UG9zaXRpb24KLXsKLSAgICBpZiAoIV9hbmltYXRvcikK
LSAgICAgICAgcmV0dXJuOwotICAgIF9hbmltYXRvci0+aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZv
clNjcm9sbEFuaW1hdGlvbihuZXdQb3NpdGlvbik7Ci19Ci0KLS0gKE5TUG9pbnQpX3BpeGVsQWxp
Z25Qcm9wb3NlZFNjcm9sbFBvc2l0aW9uOihOU1BvaW50KW5ld09yaWdpbgotewotICAgIHJldHVy
biBuZXdPcmlnaW47Ci19Ci0KLS0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFzZTooTlNTaXplKXNp
emUKLXsKLSAgICByZXR1cm4gYWJzKHNpemUpOwotfQotCi0tIChOU1NpemUpY29udmVydFNpemVG
cm9tQmFzZTooTlNTaXplKXNpemUKLXsKLSAgICByZXR1cm4gYWJzKHNpemUpOwotfQotCi0tIChO
U1NpemUpY29udmVydFNpemVUb0JhY2tpbmc6KE5TU2l6ZSlzaXplCi17Ci0gICAgcmV0dXJuIGFi
cyhzaXplKTsKLX0KLQotLSAoTlNTaXplKWNvbnZlcnRTaXplRnJvbUJhY2tpbmc6KE5TU2l6ZSlz
aXplCi17Ci0gICAgcmV0dXJuIGFicyhzaXplKTsKLX0KLQotLSAoaWQpc3VwZXJ2aWV3Ci17Ci0g
ICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoaWQpZG9jdW1lbnRWaWV3Ci17Ci0gICAgcmV0dXJuIG5p
bDsKLX0KLQotLSAoaWQpd2luZG93Ci17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClf
cmVjdXJzaXZlUmVjb21wdXRlVG9vbFRpcHMKLXsKLX0KLQotQGVuZAotCi0jaWYgVVNFKFdLX1ND
Uk9MTEJBUl9QQUlOVEVSKQotCi1AaW50ZXJmYWNlIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWdhdGUgOiBOU09iamVjdAotewotICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWMqIF9hbmltYXRvcjsKLX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZQotCi0tIChp
ZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjKilzY3JvbGxBbmltYXRvcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIF9hbmltYXRvciA9IHNjcm9s
bEFuaW1hdG9yOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNjcm9sbEFuaW1hdG9y
RGVzdHJveWVkCi17Ci0gICAgX2FuaW1hdG9yID0gMDsKLX0KLQotLSAoTlNSZWN0KWNvbnRlbnRB
cmVhUmVjdEZvclNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAg
IHJldHVybiBOU1plcm9SZWN0OwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUg
PSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmNvbnRlbnRzU2l6ZSgpOwotICAgIHJldHVy
biBOU01ha2VSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVp
Z2h0KCkpOwotfQotCi0tIChCT09MKWluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1wUGFpcjooaWQp
c2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0g
ICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIHJldHVybiBfYW5p
bWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpOwotfQotCi0tIChOU1BvaW50
KW1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxl
ckltcFBhaXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBpZiAo
IV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwotCi0gICAgcmV0dXJuIF9h
bmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKLX0KLQot
LSAoTlNQb2ludClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciBjb252ZXJ0Q29u
dGVudFBvaW50OihOU1BvaW50KXBvaW50SW5Db250ZW50QXJlYSB0b1Njcm9sbGVySW1wOihpZClz
Y3JvbGxlckltcAotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwotICAgIGlm
ICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7Ci0KLSAgICBXZWJDb3Jl
OjpTY3JvbGxiYXIqIHNjcm9sbGJhciA9IDA7Ci0gICAgaWYgKHdrU2Nyb2xsYmFyUGFpbnRlcklz
SG9yaXpvbnRhbCgoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wKSkKLSAgICAgICAg
c2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xs
YmFyKCk7Ci0gICAgZWxzZSAKLSAgICAgICAgc2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxh
YmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotCi0gICAgLy8gSXQgaXMgcG9zc2libGUg
dG8gaGF2ZSBhIG51bGwgc2Nyb2xsYmFyIGhlcmUgc2luY2UgaXQgaXMgcG9zc2libGUgZm9yIHRo
aXMgZGVsZWdhdGUKLSAgICAvLyBtZXRob2QgdG8gYmUgY2FsbGVkIGJldHdlZW4gdGhlIG1vbWVu
dCB3aGVuIGEgc2Nyb2xsYmFyIGhhcyBiZWVuIHNldCB0byAwIGFuZCB0aGUKLSAgICAvLyBtb21l
bnQgd2hlbiBpdHMgZGVzdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQuIFdlIHNob3VsZCBwcm9iYWJs
eSBkZS1jb3VwbGUgc29tZQotICAgIC8vIG9mIHRoZSBjbGVhbi11cCB3b3JrIGluIFNjcm9sbGJh
clRoZW1lQ2hyb21pdW1NYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoKSB0byBhdm9pZCB0aGlzCi0g
ICAgLy8gaXNzdWUuCi0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBXZWJDb3Jl
OjpJbnRQb2ludCgpOwotICAgIAotICAgIHJldHVybiBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXcoV2ViQ29yZTo6SW50UG9pbnQocG9pbnRJbkNvbnRlbnRBcmVhKSk7Ci19Ci0K
LS0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgc2V0Q29udGVudEFy
ZWFOZWVkc0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHNj
cm9sbGVySW1wUGFpcik7Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3QpOwotfQotCi0tICh2b2lkKXNj
cm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIHVwZGF0ZVNjcm9sbGVyU3R5bGVGb3JO
ZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSluZXdSZWNvbW1lbmRl
ZFNjcm9sbGVyU3R5bGUKLXsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgd2tTZXRTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKChXS1Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyUmVmKXNjcm9sbGVySW1wUGFpciwgbmV3UmVjb21tZW5kZWRTY3JvbGxl
clN0eWxlKTsKLSAgICBfYW5pbWF0b3ItPnVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKLX0KLQotQGVu
ZAotCi1AaW50ZXJmYWNlIFNjcm9sbGJhclBhcnRBbmltYXRpb24gOiBOU0FuaW1hdGlvbgotewot
ICAgIFJldGFpblB0cjxXS1Njcm9sbGJhclBhaW50ZXJSZWY+IF9zY3JvbGxlclBhaW50ZXI7Ci0g
ICAgV2ViQ29yZTo6U2Nyb2xsYmFyUGFydCBfcGFydDsKLSAgICBXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7Ci0gICAgQ0dGbG9hdCBfaW5pdGlhbEFscGhhOwot
ICAgIENHRmxvYXQgX25ld0FscGhhOwotfQotLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXJQYWludGVy
OihXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdlYkNvcmU6OlNj
cm9sbGJhclBhcnQpcGFydCBzY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IgYW5pbWF0ZUFscGhhVG86KENHRmxvYXQpbmV3QWxw
aGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOwotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gU2Nyb2xsYmFyUGFydEFuaW1hdGlvbgotCi0tIChpZClpbml0V2l0aFNjcm9sbGJhclBh
aW50ZXI6KFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29y
ZTo6U2Nyb2xsYmFyUGFydClwYXJ0IHNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvciBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdClu
ZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRXaXRoRHVyYXRpb246ZHVyYXRpb24gYW5pbWF0aW9uQ3VydmU6TlNBbmltYXRp
b25FYXNlSW5PdXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAK
LSAgICBfc2Nyb2xsZXJQYWludGVyID0gc2Nyb2xsZXJQYWludGVyOwotICAgIF9wYXJ0ID0gcGFy
dDsKLSAgICBfYW5pbWF0b3IgPSBzY3JvbGxBbmltYXRvcjsKLSAgICBfaW5pdGlhbEFscGhhID0g
X3BhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ID8gd2tTY3JvbGxiYXJQYWludGVyS25vYkFscGhh
KF9zY3JvbGxlclBhaW50ZXIuZ2V0KCkpIDogd2tTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShf
c2Nyb2xsZXJQYWludGVyLmdldCgpKTsKLSAgICBfbmV3QWxwaGEgPSBuZXdBbHBoYTsKLSAgICAK
LSAgICByZXR1cm4gc2VsZjsgICAgCi19Ci0KLS0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihO
U0FuaW1hdGlvblByb2dyZXNzKXByb2dyZXNzCi17Ci0gICAgW3N1cGVyIHNldEN1cnJlbnRQcm9n
cmVzczpwcm9ncmVzc107Ci0KLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQ0dGbG9hdCBjdXJyZW50QWxwaGE7Ci0gICAgaWYgKF9pbml0aWFsQWxwaGEgPiBfbmV3
QWxwaGEpCi0gICAgICAgIGN1cnJlbnRBbHBoYSA9IDEgLSBwcm9ncmVzczsKLSAgICBlbHNlCi0g
ICAgICAgIGN1cnJlbnRBbHBoYSA9IHByb2dyZXNzOwotICAgIAotICAgIGlmIChfcGFydCA9PSBX
ZWJDb3JlOjpUaHVtYlBhcnQpCi0gICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBo
YShfc2Nyb2xsZXJQYWludGVyLmdldCgpLCBjdXJyZW50QWxwaGEpOwotICAgIGVsc2UKLSAgICAg
ICAgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShfc2Nyb2xsZXJQYWludGVyLmdldCgp
LCBjdXJyZW50QWxwaGEpOwotCi0gICAgLy8gSW52YWxpZGF0ZSB0aGUgc2Nyb2xsYmFycyBzbyB0
aGF0IHRoZXkgcGFpbnQgdGhlIGFuaW1hdGlvbgotICAgIGlmIChXZWJDb3JlOjpTY3JvbGxiYXIq
IHZlcnRpY2FsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNh
bFNjcm9sbGJhcigpKQotICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZVJlY3Qo
V2ViQ29yZTo6SW50UmVjdCgwLCAwLCB2ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgdmVydGlj
YWxTY3JvbGxiYXItPmhlaWdodCgpKSk7Ci0gICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhciA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpKQotICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVj
dChXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIGhvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCksIGhv
cml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKSk7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsQW5pbWF0
b3JEZXN0cm95ZWQKLXsKLSAgICBbc2VsZiBzdG9wQW5pbWF0aW9uXTsKLSAgICBfYW5pbWF0b3Ig
PSAwOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIDog
TlNPYmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0ZT4KLXsKLSAgICBXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7Ci0KLSAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbj4gX3ZlcnRpY2FsS25vYkFuaW1hdGlvbjsKLSAgICBSZXRhaW5QdHI8U2Nyb2xs
YmFyUGFydEFuaW1hdGlvbj4gX2hvcml6b250YWxLbm9iQW5pbWF0aW9uOwotCi0gICAgUmV0YWlu
UHRyPFNjcm9sbGJhclBhcnRBbmltYXRpb24+IF92ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uOwotICAg
IFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfaG9yaXpvbnRhbFRyYWNrQW5pbWF0
aW9uOwotfQotLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7Ci0tICh2b2lkKWNhbmNlbEFuaW1hdGlv
bnM7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUKLQot
LSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfYW5pbWF0b3IgPSBz
Y3JvbGxBbmltYXRvcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZCljYW5jZWxBbmlt
YXRpb25zCi17Ci0gICAgW192ZXJ0aWNhbEtub2JBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlv
bl07Ci0gICAgW19ob3Jpem9udGFsS25vYkFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsK
LSAgICBbX3ZlcnRpY2FsVHJhY2tBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07Ci0gICAg
W19ob3Jpem9udGFsVHJhY2tBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07Ci19Ci0KLS0g
KE5TUmVjdCljb252ZXJ0UmVjdFRvQmFja2luZzooTlNSZWN0KWFSZWN0Ci17Ci0gICAgcmV0dXJu
IGFSZWN0OwotfQotCi0tIChOU1JlY3QpY29udmVydFJlY3RGcm9tQmFja2luZzooTlNSZWN0KWFS
ZWN0Ci17Ci0gICAgcmV0dXJuIGFSZWN0OwotfQotCi0jaWYgIVBMQVRGT1JNKENIUk9NSVVNKQot
LSAoQ0FMYXllciAqKWxheWVyCi17Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgaWYgKCFfYW5pbWF0b3ItPmlzRHJhd2luZ0ludG9MYXllcigpKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGF0dGVtcHQgdG8gcmV0
dXJuIGFuIGFjdHVhbCBsYXllci4KLSAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXllciA9IFtb
Q0FMYXllciBhbGxvY10gaW5pdF07Ci0gICAgcmV0dXJuIGR1bW15TGF5ZXI7Ci19Ci0jZW5kaWYK
LQotLSAodm9pZClzZXRVcEFuaW1hdGlvbjooUmV0YWluUHRyPFNjcm9sbGJhclBhcnRBbmltYXRp
b24+JilzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjooV0tTY3JvbGxiYXJQ
YWludGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0KXBh
cnQgYW5pbWF0ZUFscGhhVG86KENHRmxvYXQpbmV3QWxwaGEgZHVyYXRpb246KE5TVGltZUludGVy
dmFsKWR1cmF0aW9uCi17Ci0gICAgLy8gSWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHRoZSBwYWdl
LCB0aGVuIHRoZSBzY3JvbGxiYXJzIG11c3QgYmUgYW5pbWF0ZWQgaGVyZS4gCi0gICAgLy8gVGhp
cyBvdmVycmlkZXMgdGhlIGVhcmx5IHJldHVybnMuCi0gICAgYm9vbCBtdXN0QW5pbWF0ZSA9IF9h
bmltYXRvci0+aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpOwotCi0gICAgaWYgKF9hbmltYXRv
ci0+c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYgIW11c3RBbmltYXRlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5zaG91bGRT
dXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpICYmICFtdXN0QW5pbWF0ZSkgewotICAgICAgICBfYW5p
bWF0b3ItPnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYW5p
bWF0ZSBub3csIHNvIHN0b3AgdGhlIHRpbWVyLgotICAgIF9hbmltYXRvci0+c3RvcFNjcm9sbGJh
clBhaW50VGltZXIoKTsKLQotICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgYW5pbWF0aW5nLCBz
dG9wCi0gICAgaWYgKHNjcm9sbGJhclBhcnRBbmltYXRpb24pIHsKLSAgICAgICAgW3Njcm9sbGJh
clBhcnRBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07Ci0gICAgICAgIHNjcm9sbGJhclBh
cnRBbmltYXRpb24gPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKHBhcnQgPT0gV2ViQ29yZTo6VGh1
bWJQYXJ0ICYmICF3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVy
KSkgewotICAgICAgICBpZiAobmV3QWxwaGEgPT0gMSkgewotICAgICAgICAgICAgSW50UmVjdCB0
aHVtYlJlY3QgPSBJbnRSZWN0KHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KHNjcm9sbGVyUGFp
bnRlcikpOwotICAgICAgICAgICAgX2FuaW1hdG9yLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJl
Y3QodGh1bWJSZWN0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBfYW5pbWF0b3ItPnNl
dFZpc2libGVTY3JvbGxlclRodW1iUmVjdChJbnRSZWN0KCkpOwotICAgIH0KLQotICAgIFtOU0Fu
aW1hdGlvbkNvbnRleHQgYmVnaW5Hcm91cGluZ107Ci0gICAgW1tOU0FuaW1hdGlvbkNvbnRleHQg
Y3VycmVudENvbnRleHRdIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICBzY3JvbGxiYXJQYXJ0
QW5pbWF0aW9uLmFkb3B0TlMoW1tTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0
aFNjcm9sbGJhclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0OnBhcnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3I6X2FuaW1hdG9yIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRl
QWxwaGFUbzpuZXdBbHBoYSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsKLSAgICBb
c2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNB
bmltYXRpb25Ob25ibG9ja2luZ107Ci0gICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24uZ2V0KCkg
c3RhcnRBbmltYXRpb25dOwotICAgIFtOU0FuaW1hdGlvbkNvbnRleHQgZW5kR3JvdXBpbmddOwot
fQotCi0tICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBhbmltYXRlS25vYkFscGhh
VG86KENHRmxvYXQpbmV3S25vYkFscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlv
bgotewotICAgIGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS1Njcm9s
bGJhclBhaW50ZXJSZWYgc2Nyb2xsZXJQYWludGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlclJlZilz
Y3JvbGxlckltcDsKLSAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKHNjcm9s
bGVyUGFpbnRlcikpCi0gICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl9ob3Jpem9udGFsS25v
YkFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6
VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpkdXJhdGlvbl07
Ci0gICAgZWxzZQotICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpfdmVydGljYWxLbm9iQW5p
bWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpUaHVt
YlBhcnQgYW5pbWF0ZUFscGhhVG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKLX0K
LQotLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAgYW5pbWF0ZVRyYWNrQWxwaGFU
bzooQ0dGbG9hdCluZXdUcmFja0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlv
bgotewotICAgIGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS1Njcm9s
bGJhclBhaW50ZXJSZWYgc2Nyb2xsZXJQYWludGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlclJlZilz
Y3JvbGxlckltcDsKLSAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKHNjcm9s
bGVyUGFpbnRlcikpCi0gICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl9ob3Jpem9udGFsVHJh
Y2tBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6
OkJhY2tUcmFja1BhcnQgYW5pbWF0ZUFscGhhVG86bmV3VHJhY2tBbHBoYSBkdXJhdGlvbjpkdXJh
dGlvbl07Ci0gICAgZWxzZQotICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpfdmVydGljYWxU
cmFja0FuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29y
ZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1
cmF0aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAgb3Zlcmxh
eVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86KE5TVUludGVnZXIpbmV3T3ZlcmxheVNjcm9sbGVyU3Rh
dGUKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXApOwotICAgIFVOVVNFRF9QQVJBTShu
ZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZSk7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsQW5pbWF0b3JEZXN0
cm95ZWQKLXsKLSAgICBfYW5pbWF0b3IgPSAwOwotICAgIFtfdmVydGljYWxLbm9iQW5pbWF0aW9u
LmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKLSAgICBbX2hvcml6b250YWxLbm9iQW5p
bWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKLSAgICBbX3ZlcnRpY2FsVHJh
Y2tBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotICAgIFtfaG9yaXpv
bnRhbFRyYWNrQW5pbWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKLX0KLQot
QGVuZAotCi0jZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpj
cmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQotewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhzY3JvbGxhYmxlQXJlYSkpOwotfQot
Ci1zdGF0aWMgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyogY2hyb21pdW1TY3JvbGxiYXJUaGVt
ZSgpCi17Ci0gICAgU2Nyb2xsYmFyVGhlbWUqIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xsYmFyVGhl
bWU6OnRoZW1lKCk7Ci0gICAgcmV0dXJuICFzY3JvbGxiYXJUaGVtZS0+aXNNb2NrVGhlbWUoKSA/
IHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPihzY3JvbGxiYXJUaGVtZSkg
OiAwOwotfQotCi1TY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKLSAgICA6IFNjcm9sbEFuaW1h
dG9yKHNjcm9sbGFibGVBcmVhKQotI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLSAgICAs
IG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIodGhpcywgJlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpCi0jZW5kaWYKLSNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgLCBtX2luU2Nyb2xsR2VzdHVyZShmYWxzZSkKLSAgICAs
IG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKGZhbHNlKQotICAgICwgbV9pZ25vcmVNb21lbnR1
bVNjcm9sbHMoZmFsc2UpCi0gICAgLCBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCgwKQot
ICAgICwgbV9zdGFydFRpbWUoMCkKLSAgICAsIG1fc25hcFJ1YmJlckJhbmRUaW1lcih0aGlzLCAm
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKQotI2Vu
ZGlmCi0gICAgLCBtX2RyYXdpbmdJbnRvTGF5ZXIoZmFsc2UpCi0gICAgLCBtX2hhdmVTY3JvbGxl
ZFNpbmNlUGFnZUxvYWQoZmFsc2UpCi0gICAgLCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZShm
YWxzZSkKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmFkb3B0TlMoW1tT
Y3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRv
cjp0aGlzXSk7Ci0gICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuYWRvcHROUyhbW05TQ2xhc3NG
cm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxwZXIiKSBhbGxvY10gaW5pdFdpdGhEZWxl
Z2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpXSk7Ci0KLSAgICBpZiAo
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKLSAgICAg
ICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciA9IHdrTWFrZVNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKSk7Ci0g
ICAgICAgIG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOwotICAgIH0K
LX0KLQotU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6flNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMoKQotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAg
ICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFu
aW1hdG9yRGVzdHJveWVkXTsKLSAgICAgICAgWyhpZCltX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07Ci0gICAgICAgIFttX3Njcm9s
bEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsK
LSAgICB9Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKLXsKLSAgICBtX2hhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQgPSB0cnVlOwotCi0jaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotICAg
IHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwg
c3RlcCwgbXVsdGlwbGllcik7Ci0jZW5kaWYKLQotICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkFwcGxlU2Nyb2xsQW5pbWF0aW9uRW5h
YmxlZCJdIHx8ICFtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFy
aXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKLQotICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxC
eVBpeGVsKQotICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlv
biwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwotCi0gICAgZmxvYXQgY3VycmVudFBv
cyA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2N1cnJlbnRQb3NYIDog
bV9jdXJyZW50UG9zWTsKLSAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjpt
aW48ZmxvYXQ+KGN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxm
bG9hdD4obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMCk7Ci0g
ICAgaWYgKGN1cnJlbnRQb3MgPT0gbmV3UG9zKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBOU1BvaW50IG5ld1BvaW50OwotICAgIGlmIChbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0
KCkgX2lzQW5pbWF0aW5nXSkgewotICAgICAgICBOU1BvaW50IHRhcmdldE9yaWdpbiA9IFttX3Nj
cm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSB0YXJnZXRPcmlnaW5dOwotICAgICAgICBuZXdQb2lu
dCA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBOU01ha2VQb2ludChuZXdQ
b3MsIHRhcmdldE9yaWdpbi55KSA6IE5TTWFrZVBvaW50KHRhcmdldE9yaWdpbi54LCBuZXdQb3Mp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld1BvaW50ID0gb3JpZW50YXRpb24gPT0gSG9yaXpv
bnRhbFNjcm9sbGJhciA/IE5TTWFrZVBvaW50KG5ld1BvcywgbV9jdXJyZW50UG9zWSkgOiBOU01h
a2VQb2ludChtX2N1cnJlbnRQb3NYLCBuZXdQb3MpOwotICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT5kaWRTdGFydEFuaW1hdGVkU2Nyb2xsKCk7Ci0gICAgfQotICAgIFttX3Njcm9sbEFuaW1hdGlv
bkhlbHBlci5nZXQoKSBzY3JvbGxUb1BvaW50Om5ld1BvaW50XTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGxUb09mZnNldFdpdGhv
dXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQotewotICAgIFttX3Njcm9sbEFu
aW1hdGlvbkhlbHBlci5nZXQoKSBfc3RvcFJ1bl07Ci0gICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2lu
dChvZmZzZXQpOwotfQotCi1mbG9hdCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RT
Y3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBp
ZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkp
Ci0gICAgICAgIHJldHVybiBwb3NpdGlvbjsKLQotICAgIHJldHVybiBtYXg8ZmxvYXQ+KG1pbjxm
bG9hdD4ocG9zaXRpb24sIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkg
LSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOwotfQotCi1mbG9hdCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeShm
bG9hdCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0
cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCi0gICAgICAgIHJldHVybiBwb3NpdGlvbjsK
LQotICAgIHJldHVybiBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24sIG1fc2Nyb2xsYWJs
ZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJs
ZUhlaWdodCgpKSwgMCk7Ci19Ci0KLUZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3Jv
bGxpbmdUb0NvbnRlbnRFZGdlKCkpCi0gICAgICAgIHJldHVybiBwb3NpdGlvbjsKLQotICAgIGZs
b2F0IG5ld1ggPSBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueCgpLCBtX3Njcm9sbGFi
bGVBcmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJs
ZVdpZHRoKCkpLCAwKTsKLSAgICBmbG9hdCBuZXdZID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBv
c2l0aW9uLnkoKSwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBt
X3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKLQotICAgIHJldHVybiBGbG9h
dFBvaW50KG5ld1gsIG5ld1kpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pCi17
Ci0gICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25J
Zk5lY2Vzc2FyeShuZXdQb3NpdGlvbik7Ci0gCi0gICAgbV9jdXJyZW50UG9zWCA9IGFkanVzdGVk
UG9zaXRpb24ueCgpOwotICAgIG1fY3VycmVudFBvc1kgPSBhZGp1c3RlZFBvc2l0aW9uLnkoKTsK
LSAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWChmbG9hdCBkZWx0YVgpCi17Ci0gICAg
ZmxvYXQgbmV3UG9zWCA9IGFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KG1fY3VycmVu
dFBvc1ggKyBkZWx0YVgpOwotICAgIAotICAgIGlmIChuZXdQb3NYID09IG1fY3VycmVudFBvc1gp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2N1cnJlbnRQb3NYID0gbmV3UG9zWDsKLSAg
ICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBkZWx0YVkpCi17Ci0gICAgZmxv
YXQgbmV3UG9zWSA9IGFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5KG1fY3VycmVudFBv
c1kgKyBkZWx0YVkpOwotICAgIAotICAgIGlmIChuZXdQb3NZID09IG1fY3VycmVudFBvc1kpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2N1cnJlbnRQb3NZID0gbmV3UG9zWTsKLSAgICBu
b3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIG5ld1Bvc2l0aW9uKQotewotICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdGlvbkhlbHBl
cik7Ci0gICAgQ0dGbG9hdCBwcm9ncmVzcyA9IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQo
KSBfcHJvZ3Jlc3NdOwotICAgIAotICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3UG9zaXRp
b24pOwotCi0gICAgaWYgKHByb2dyZXNzID49IDEuMCkKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+ZGlkQ29tcGxldGVBbmltYXRlZFNjcm9sbCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpCi17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRBcmVhU2Nyb2xsZWQo
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci0gICAgU2Nyb2xsQW5pbWF0b3I6
Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxi
YXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIHdrQ29udGVudEFyZWFXaWxsUGFpbnQo
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAotewotICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tNb3VzZUVu
dGVyZWRDb250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0K
LQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVh
KCkgY29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0g
ICAgICAgIHdrTW91c2VFeGl0ZWRDb250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZU1v
dmVkSW5Db250ZW50QXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQ
SUF2YWlsYWJsZSgpKQotICAgICAgICB3a01vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKG1fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OndpbGxTdGFydExpdmVSZXNpemUoKQotewotICAgIGlmIChpc1Njcm9sbGJhck92
ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tXaWxsU3RhcnRMaXZlUmVzaXplKG1fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRBcmVhUmVzaXplZCht
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCi17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a1dpbGxFbmRMaXZlUmVzaXplKG1f
c2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0Ci17Ci0gICAgaWYgKGlz
U2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRBcmVhRGlk
U2hvdyhtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZEhpZGUoKSBjb25zdAotewotICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tDb250ZW50
QXJlYURpZEhpZGUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0KLXZv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29u
c3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAg
IHdrRGlkQmVnaW5TY3JvbGxHZXN0dXJlKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0
KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEVuZFNjcm9sbEdl
c3R1cmUoKSBjb25zdAotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUo
KSkKLSAgICAgICAgd2tEaWRFbmRTY3JvbGxHZXN0dXJlKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGlmICghaXNT
Y3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgaWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21pdW1TY3Jv
bGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0g
dGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgd2tTY3JvbGxi
YXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUu
Z2V0KCkpOwotICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBwYWludGVyLCBmYWxzZSk7Ci0gICAgICAgIGlm
IChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKLSAgICAgICAgICAgIHdrU2V0U2Ny
b2xsYmFyUGFpbnRlcktub2JBbHBoYShwYWludGVyLCAxKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQotewotICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxh
YmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjKiB0aGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhlbWUoKSkgewotICAgICAgICBXS1Njcm9s
bGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9s
bGJhcik7Ci0gICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG5p
bCk7Ci0gICAgICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5pbCwgZmFsc2UpOwotICAgIH0KLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQotewotICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxh
YmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjKiB0aGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhlbWUoKSkgewotICAgICAgICBXS1Njcm9s
bGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9s
bGJhcik7Ci0gICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG1f
c2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpKTsKLSAgICAgICAgd2tTZXRQYWludGVyRm9y
UGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgcGFp
bnRlciwgdHJ1ZSk7Ci0gICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUo
KSkKLSAgICAgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShwYWludGVyLCAx
KTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92
ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKCFp
c1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21pdW1TY3JvbGxiYXJU
aGVtZSgpKSB7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0gdGhlbWUt
PnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgd2tTY3JvbGxiYXJQYWlu
dGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbmlsKTsKLSAgICAgICAgd2tTZXRQYWludGVyRm9yUGFp
bnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgbmlsLCB0
cnVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y2FuY2Vs
QW5pbWF0aW9ucygpCi17Ci0gICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gZmFsc2U7
Ci0KLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAgICAg
aWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQotICAgICAgICAgICAgc3RvcFNjcm9s
bGJhclBhaW50VGltZXIoKTsKLSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdl
dCgpIGNhbmNlbEFuaW1hdGlvbnNdOwotICAgIH0KLX0KLQotI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKLQotc3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQg
PSAwLjEwZjsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kU3RpZmZuZXNzID0gMjA7Ci1z
dGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8gPSAx
Owotc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9y
ZVN0cmV0Y2ggPSAxMDsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kQW1wbGl0dWRlID0g
MC4zMWY7Ci1zdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZFBlcmlvZCA9IDEuNmY7Ci0KLXN0
YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoZmxvYXQgaW5pdGlhbFBvc2l0aW9u
LCBmbG9hdCBpbml0aWFsVmVsb2NpdHksIGZsb2F0IGVsYXBzZWRUaW1lKQotewotICAgIGZsb2F0
IGFtcGxpdHVkZSA9IHJ1YmJlcmJhbmRBbXBsaXR1ZGU7Ci0gICAgZmxvYXQgcGVyaW9kID0gcnVi
YmVyYmFuZFBlcmlvZDsKLSAgICBmbG9hdCBjcml0aWNhbERhbXBlbmluZ0ZhY3RvciA9IGV4cGYo
KC1lbGFwc2VkVGltZSAqIHJ1YmJlcmJhbmRTdGlmZm5lc3MpIC8gcGVyaW9kKTsKLSAgICAgICAg
ICAgICAKLSAgICByZXR1cm4gKGluaXRpYWxQb3NpdGlvbiArICgtaW5pdGlhbFZlbG9jaXR5ICog
ZWxhcHNlZFRpbWUgKiBhbXBsaXR1ZGUpKSAqIGNyaXRpY2FsRGFtcGVuaW5nRmFjdG9yOwotfQot
Ci1zdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKGZsb2F0IGRlbHRhKQot
ewotICAgIGZsb2F0IHN0aWZmbmVzcyA9IHN0ZDo6bWF4KHJ1YmJlcmJhbmRTdGlmZm5lc3MsIDEu
MGYpOwotICAgIHJldHVybiBkZWx0YSAvIHN0aWZmbmVzczsKLX0KLQotc3RhdGljIGZsb2F0IHJl
Ym91bmREZWx0YUZvckVsYXN0aWNEZWx0YShmbG9hdCBkZWx0YSkKLXsKLSAgICByZXR1cm4gZGVs
dGEgKiBydWJiZXJiYW5kU3RpZmZuZXNzOwotfQotCi1zdGF0aWMgZmxvYXQgc2Nyb2xsV2hlZWxN
dWx0aXBsaWVyKCkKLXsKLSAgICBzdGF0aWMgZmxvYXQgbXVsdGlwbGllciA9IC0xOwotICAgIGlm
IChtdWx0aXBsaWVyIDwgMCkgewotICAgICAgICBtdWx0aXBsaWVyID0gW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZmxvYXRGb3JLZXk6QCJOU1Njcm9sbFdoZWVsTXVsdGlw
bGllciJdOwotICAgICAgICBpZiAobXVsdGlwbGllciA8PSAwKQotICAgICAgICAgICAgbXVsdGlw
bGllciA9IDE7Ci0gICAgfQotICAgIHJldHVybiBtdWx0aXBsaWVyOwotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNTY3JvbGxpbmdMZWZ0QW5kU2hvdWxkTm90UnViYmVyQmFuZChjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YSkKLXsKLSAgICByZXR1cm4gd2hlZWxFdmVudC5kZWx0YVgoKSA+IDAgJiYgIXNjcm9sbGFibGVB
cmVhLT5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsTGVmdCk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc1Njcm9sbGluZ1JpZ2h0QW5kU2hvdWxkTm90UnViYmVyQmFuZChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSkKLXsKLSAgICByZXR1cm4gd2hlZWxFdmVudC5kZWx0YVgoKSA8IDAgJiYgIXNjcm9s
bGFibGVBcmVhLT5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsUmlnaHQpOwotfQot
Ci1ib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIG1faGF2ZVNjcm9sbGVkU2lu
Y2VQYWdlTG9hZCA9IHRydWU7Ci0KLSAgICBpZiAoIXdoZWVsRXZlbnQuaGFzUHJlY2lzZVNjcm9s
bGluZ0RlbHRhcygpKQotICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVs
RXZlbnQod2hlZWxFdmVudCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCByb3Vu
ZGFib3V0IGhhY2sgdG8gYWxsb3cgZm9yd2FyZGluZyB3aGVlbCBldmVudHMKLSAgICAvLyB1cCB0
byB0aGUgcGFyZW50IHNjcm9sbGFibGUgYXJlYS4gSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBm
YWN0IHRoYXQKLSAgICAvLyB0aGUgYmFzZSBjbGFzcyBpbXBsZW1lbmF0YXRpb24gb2YgaGFuZGxl
V2hlZWxFdmVudCB3aWxsIG5vdCBhY2NlcHQgdGhlCi0gICAgLy8gd2hlZWwgZXZlbnQgaWYgdGhl
cmUgaXMgbm93aGVyZSB0byBzY3JvbGwuCi0gICAgaWYgKGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFZ
KCkpID49IGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFYKCkpKSB7Ci0gICAgICAgIGlmICghYWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6
OmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KCFhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpKQotICAgICAgICAgICAgcmV0dXJuIFNjcm9s
bEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAg
ICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzY3JvbGxiYXIsIHdlIGFnZ3JlZ2F0ZSB0aGUgd2hlZWwg
ZXZlbnRzIHRvIGdldCBhbgotICAgICAgICAgICAgLy8gb3ZlcmFsbCB0cmVuZCBvZiB0aGUgc2Ny
b2xsLiBJZiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY3JvbGwgaXMgZXZlcgotICAgICAgICAgICAg
Ly8gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiB0aGUgcGluIGxvY2F0aW9uLCB0aGVuIHdl
IHN3aXRjaCB0aGUKLSAgICAgICAgICAgIC8vIGJvb2xlYW4sIGFuZCBydWJiZXIgYmFuZC4gVGhh
dCBpcywgaWYgd2Ugd2VyZSBwaW5uZWQgdG8gdGhlIGxlZnQsCi0gICAgICAgICAgICAvLyBhbmQg
d2UgZW5kZWQgdXAgc2Nyb2xsaW5nIHRvIHRoZSByaWdodCwgd2UgcnViYmVyIGJhbmQuCi0gICAg
ICAgICAgICBtX2N1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsICs9IHdoZWVsRXZlbnQuZGVsdGFY
KCk7Ci0gICAgICAgICAgICBpZiAobV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uTGVmdCAmJiBt
X2N1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsIDwgMCkKLSAgICAgICAgICAgICAgICBtX2RpZEN1
bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25PZlBp
biA9IHRydWU7Ci0gICAgICAgICAgICBpZiAobV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uUmln
aHQgJiYgbV9jdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbCA+IDApCi0gICAgICAgICAgICAgICAg
bV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbEV2ZXJTd2l0Y2hUb09wcG9zaXRlRGlyZWN0
aW9uT2ZQaW4gPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWZ0ZXIgYSBnZXN0dXJl
IGJlZ2lucywgd2UgZ28gdGhyb3VnaDoKLSAgICAgICAgLy8gMSsgUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VOb25lCi0gICAgICAgIC8vIDArIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZAot
ICAgICAgICAvLyAxIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgaWYgdGhlcmUgd2FzIGF0
IGxlYXN0IG9uZSBjaGFuZ2VkIGV2ZW50Ci0gICAgICAgIGlmICh3aGVlbEV2ZW50Lm1vbWVudHVt
UGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgJiYgIW1fZGlkQ3VtdWxhdGl2
ZUhvcml6b250YWxTY3JvbGxFdmVyU3dpdGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9mUGluKSB7Ci0g
ICAgICAgICAgICBpZiAoKGlzU2Nyb2xsaW5nTGVmdEFuZFNob3VsZE5vdFJ1YmJlckJhbmQod2hl
ZWxFdmVudCwgbV9zY3JvbGxhYmxlQXJlYSkgJiYKLSAgICAgICAgICAgICAgICBtX3Njcm9sbGVy
SW5pdGlhbGx5UGlubmVkT25MZWZ0ICYmCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigpKSB8fAotICAg
ICAgICAgICAgICAgIChpc1Njcm9sbGluZ1JpZ2h0QW5kU2hvdWxkTm90UnViYmVyQmFuZCh3aGVl
bEV2ZW50LCBtX3Njcm9sbGFibGVBcmVhKSAmJgotICAgICAgICAgICAgICAgIG1fc2Nyb2xsZXJJ
bml0aWFsbHlQaW5uZWRPblJpZ2h0ICYmCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3NpdGlvbigpKSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVl
bEV2ZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNN
b21lbnR1bVNjcm9sbEV2ZW50ID0gKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlTm9uZSk7Ci0gICAgaWYgKG1faWdub3JlTW9tZW50dW1TY3JvbGxz
ICYmIChpc01vbWVudHVtU2Nyb2xsRXZlbnQgfHwgbV9zbmFwUnViYmVyQmFuZFRpbWVyLmlzQWN0
aXZlKCkpKSB7Ci0gICAgICAgIGlmICh3aGVlbEV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkKSB7Ci0gICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVt
U2Nyb2xscyA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNtb290aFNjcm9sbFdpdGhFdmVudCh3
aGVlbEV2ZW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQm
IGdlc3R1cmVFdmVudCkKLXsKLSAgICBpZiAoZ2VzdHVyZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9y
bUdlc3R1cmVFdmVudDo6U2Nyb2xsQmVnaW5UeXBlKQotICAgICAgICBiZWdpblNjcm9sbEdlc3R1
cmUoKTsKLSAgICBlbHNlIGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtR2VzdHVy
ZUV2ZW50OjpTY3JvbGxFbmRUeXBlKQotICAgICAgICBlbmRTY3JvbGxHZXN0dXJlKCk7Ci19Ci0K
LWJvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6cGlubmVkSW5EaXJlY3Rpb24oZmxvYXQg
ZGVsdGFYLCBmbG9hdCBkZWx0YVkpCi17Ci0gICAgRmxvYXRTaXplIGxpbWl0RGVsdGE7Ci0gICAg
aWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgewotICAgICAgICBpZiAoZGVsdGFZ
IDwgMCkgewotICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtl
IHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHRvcAotICAgICAgICAgICAgbGltaXREZWx0
YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpICsg
KyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS55KCkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgZG93bi4gIE1ha2Ugc3Vy
ZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgYm90dG9tCi0gICAgICAgICAgICBsaW1pdERlbHRh
LnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtICht
X3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGxPcmlnaW4oKS55KCkpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
ZGVsdGFYICE9IDApIHsKLSAgICAgICAgaWYgKGRlbHRhWCA8IDApIHsKLSAgICAgICAgICAgIC8v
IFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGxlZnQuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5u
ZWQgdG8gdGhlIGxlZnQKLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxh
YmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkueCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsT3JpZ2luKCkueCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIGFy
ZSB0cnlpbmcgdG8gc2Nyb2xsIHJpZ2h0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRv
IHRoZSByaWdodAotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVB
cmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVD
b250ZW50UmVjdCgpLm1heFgoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngo
KSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICgoZGVsdGFYICE9IDAgfHwgZGVs
dGFZICE9IDApICYmIChsaW1pdERlbHRhLndpZHRoKCkgPCAxICYmIGxpbWl0RGVsdGEuaGVpZ2h0
KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygp
IGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbEVs
YXN0aWNpdHkoKSkgewotICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAg
ICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxT
Y3JvbGxiYXIoKTsKLSAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVB
cmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgICAgICByZXR1cm4gKCgodlNjcm9sbGVyICYm
IHZTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIWhTY3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFi
bGVkKCkpKSk7Ci0gICAgfQotICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eU5vbmU6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBbGxvd2VkOgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dz
SG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25zdAotewotICAgIHN3aXRjaCAobV9zY3JvbGxhYmxl
QXJlYS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKSkgewotICAgIGNhc2UgU2Nyb2xsRWxh
c3RpY2l0eUF1dG9tYXRpYzogewotICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Ny
b2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICAgICAgU2Nyb2xsYmFyKiB2
U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgICAg
ICByZXR1cm4gKCgoaFNjcm9sbGVyICYmIGhTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIXZTY3Jv
bGxlciB8fCAhdlNjcm9sbGVyLT5lbmFibGVkKCkpKSk7Ci0gICAgfQotICAgIGNhc2UgU2Nyb2xs
RWxhc3RpY2l0eU5vbmU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIFNjcm9sbEVs
YXN0aWNpdHlBbGxvd2VkOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6c21vb3RoU2Nyb2xsV2l0aEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQg
PSB0cnVlOwotCi0gICAgZmxvYXQgZGVsdGFYID0gbV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRo
KCk7Ci0gICAgZmxvYXQgZGVsdGFZID0gbV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpOwot
Ci0gICAgLy8gUmVzZXQgb3ZlcmZsb3cgdmFsdWVzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBy
ZW1vdmUgZGVsdGEgYXQgdmFyaW91cyBwb2ludHMgYW5kIHB1dCBpdCBpbnRvIG92ZXJmbG93Lgot
ICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOwotCi0gICAgZmxvYXQgZXZl
bnRDb2FsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVudC5kZWx0YVgoKTsKLSAgICBmbG9hdCBldmVu
dENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LmRlbHRhWSgpOwotCi0gICAgZGVsdGFYICs9
IGV2ZW50Q29hbGVzY2VkRGVsdGFYOwotICAgIGRlbHRhWSArPSBldmVudENvYWxlc2NlZERlbHRh
WTsKLQotICAgIC8vIFNsaWdodGx5IHByZWZlciBzY3JvbGxpbmcgdmVydGljYWxseSBieSBhcHBs
eWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQotICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNm
KGRlbHRhWCkpCi0gICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgZWxzZQotICAgICAgICBkZWx0YVkg
PSAwOwotCi0gICAgYm9vbCBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgPSBmYWxzZTsKLSAgICBib29s
IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRTdHJldGNo
ID0gZmFsc2U7Ci0gICAgCi0gICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9zY3JvbGxhYmxl
QXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKLQotICAgIGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0g
c3RyZXRjaEFtb3VudC53aWR0aCgpOwotICAgIGlzVmVydGljYWxseVN0cmV0Y2hlZCA9IHN0cmV0
Y2hBbW91bnQuaGVpZ2h0KCk7Ci0KLSAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSA9
IHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpOwotCi0gICAgLy8gSWYgd2UgYXJlIHN0YXJ0aW5n
IG1vbWVudHVtIHNjcm9sbGluZyB0aGVuIGRvIHNvbWUgc2V0dXAuCi0gICAgaWYgKCFtX21vbWVu
dHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VC
ZWdhbiB8fCBwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQpKQotICAgICAg
ICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IHRydWU7Ci0KLSAgICBDRlRpbWVJbnRlcnZh
bCB0aW1lRGVsdGEgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpIC0gbV9sYXN0TW9tZW50dW1TY3Jv
bGxUaW1lc3RhbXA7Ci0gICAgaWYgKG1faW5TY3JvbGxHZXN0dXJlIHx8IG1fbW9tZW50dW1TY3Jv
bGxJblByb2dyZXNzKSB7Ci0gICAgICAgIGlmIChtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFt
cCAmJiB0aW1lRGVsdGEgPiAwICYmIHRpbWVEZWx0YSA8IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1Rp
bWVvdXQpIHsKLSAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eS5zZXRXaWR0aChldmVudENv
YWxlc2NlZERlbHRhWCAvIChmbG9hdCl0aW1lRGVsdGEpOwotICAgICAgICAgICAgbV9tb21lbnR1
bVZlbG9jaXR5LnNldEhlaWdodChldmVudENvYWxlc2NlZERlbHRhWSAvIChmbG9hdCl0aW1lRGVs
dGEpOwotICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2
ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9sYXN0TW9t
ZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAg
ICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoaXNWZXJ0aWNhbGx5U3RyZXRjaGVkKSB7Ci0gICAgICAgICAgICBpZiAoIWlzSG9yaXpv
bnRhbGx5U3RyZXRjaGVkICYmIHBpbm5lZEluRGlyZWN0aW9uKGRlbHRhWCwgMCkpIHsgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0
aWNhbC4KLSAgICAgICAgICAgICAgICBpZiAoZGVsdGFZICE9IDAgJiYgKGZhYnNmKGRlbHRhWCAv
IGRlbHRhWSkgPCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbykpCi0gICAgICAg
ICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmFic2Yo
ZGVsdGFYKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
bV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0
aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChpc0hvcml6
b250YWxseVN0cmV0Y2hlZCkgewotICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRo
ZSBob3Jpem9udGFsLgotICAgICAgICAgICAgaWYgKHBpbm5lZEluRGlyZWN0aW9uKDAsIGRlbHRh
WSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGVsdGFYICE9IDAgJiYgKGZhYnNmKGRlbHRhWSAv
IGRlbHRhWCkgPCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbykpCi0gICAgICAg
ICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmFic2Yo
ZGVsdGFZKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292
ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOwotICAgICAgICAgICAgICAgICAg
ICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVpZ2h0KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5o
ZWlnaHQoKSArIGRlbHRhWSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBOb3Qgc3RyZXRjaGluZyBhdCBhbGwgeWV0LgotICAgICAgICAgICAgaWYgKHBp
bm5lZEluRGlyZWN0aW9uKGRlbHRhWCwgZGVsdGFZKSkgewotICAgICAgICAgICAgICAgIGlmIChm
YWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJl
dGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0
V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9v
dmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBzaG91bGRTdHJldGNoID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChkZWx0YVggIT0gMCB8fCBkZWx0YVkgIT0gMCkgewot
ICAgICAgICBpZiAoIShzaG91bGRTdHJldGNoIHx8IGlzVmVydGljYWxseVN0cmV0Y2hlZCB8fCBp
c0hvcml6b250YWxseVN0cmV0Y2hlZCkpIHsKLSAgICAgICAgICAgIGlmIChkZWx0YVkgIT0gMCkg
ewotICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLSAg
ICAgICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShkZWx0YVkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGRlbHRhWCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZGVs
dGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwotICAgICAgICAgICAgICAgIGltbWVkaWF0
ZVNjcm9sbEJ5RGVsdGFYKGRlbHRhWCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoIWFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKCkpIHsKLSAgICAg
ICAgICAgICAgICBkZWx0YVggPSAwOwotICAgICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVs
dGFYID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWCAhPSAwKSAmJiAhaXNIb3Jp
em9udGFsbHlTdHJldGNoZWQgJiYgIXBpbm5lZEluRGlyZWN0aW9uKGRlbHRhWCwgMCkpIHsKLSAg
ICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7Ci0KLSAgICAg
ICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250
ZW50RWRnZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgo
ZGVsdGFYKTsKLSAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5z
U2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKLQotICAgICAgICAgICAgICAgIGRlbHRhWCA9
IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghYWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAg
ICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gMDsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoKGRlbHRhWSAhPSAwKSAmJiAhaXNWZXJ0aWNhbGx5U3RyZXRjaGVkICYmICFwaW5uZWRJ
bkRpcmVjdGlvbigwLCBkZWx0YVkpKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9s
bFdoZWVsTXVsdGlwbGllcigpOwotCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgICAgICAgICAg
ICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGRlbHRhWSk7Ci0gICAgICAgICAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7
Ci0KLSAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX3Njcm9sbGFibGVBcmVh
LT5vdmVyaGFuZ0Ftb3VudCgpOwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX21vbWVudHVt
U2Nyb2xsSW5Qcm9ncmVzcykgewotICAgICAgICAgICAgICAgIGlmICgocGlubmVkSW5EaXJlY3Rp
b24oZXZlbnRDb2FsZXNjZWREZWx0YVgsIGV2ZW50Q29hbGVzY2VkRGVsdGFZKSB8fCAoZmFic2Yo
ZXZlbnRDb2FsZXNjZWREZWx0YVgpICsgZmFic2YoZXZlbnRDb2FsZXNjZWREZWx0YVkpIDw9IDAp
KSAmJiBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCkgewotICAgICAgICAgICAgICAgICAg
ICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1f
bW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHNu
YXBSdWJiZXJCYW5kKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNl
dEhlaWdodChtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSArIGRlbHRhWSk7Ci0KLSAgICAg
ICAgICAgIEZsb2F0U2l6ZSBkYW1wZWREZWx0YShjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5k
RGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFG
b3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkpKSk7Ci0gICAgICAg
ICAgICBGbG9hdFBvaW50IG9yaWdPcmlnaW4gPSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNv
bnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigp
KSAtIHN0cmV0Y2hBbW91bnQ7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IG5ld09yaWdpbiA9IG9y
aWdPcmlnaW4gKyBkYW1wZWREZWx0YTsKLQotICAgICAgICAgICAgaWYgKG9yaWdPcmlnaW4gIT0g
bmV3T3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3Ry
YWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgICAgICAgICAgICAgIGltbWVk
aWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2luKTsKLSAgICAgICAgICAgICAgICBtX3Njcm9sbGFi
bGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Q
cm9ncmVzcyAmJiBwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkKSB7Ci0gICAg
ICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0gICAgICAgIG1faWdub3Jl
TW9tZW50dW1TY3JvbGxzID0gZmFsc2U7Ci0gICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGlt
ZXN0YW1wID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
YmVnaW5TY3JvbGxHZXN0dXJlKCkKLXsKLSAgICBkaWRCZWdpblNjcm9sbEdlc3R1cmUoKTsKLQot
ICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7Ci0gICAgbV9pblNjcm9sbEdl
c3R1cmUgPSB0cnVlOwotICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0g
ICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKLSAgICBtX2xhc3RNb21lbnR1bVNj
cm9sbFRpbWVzdGFtcCA9IDA7Ci0gICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7
Ci0gICAgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uTGVmdCA9IG1fc2Nyb2xsYWJsZUFyZWEt
PmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24oKTsKLSAgICBtX3Nj
cm9sbGVySW5pdGlhbGx5UGlubmVkT25SaWdodCA9IG1fc2Nyb2xsYWJsZUFyZWEtPmlzSG9yaXpv
bnRhbFNjcm9sbGVyUGlubmVkVG9NYXhpbXVtUG9zaXRpb24oKTsKLSAgICBtX2N1bXVsYXRpdmVI
b3Jpem9udGFsU2Nyb2xsID0gMDsKLSAgICBtX2RpZEN1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xs
RXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25PZlBpbiA9IGZhbHNlOwotICAgIAotICAgIElu
dFNpemUgc3RyZXRjaEFtb3VudCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7
Ci0gICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3Rp
Y0RlbHRhKHN0cmV0Y2hBbW91bnQud2lkdGgoKSkpOwotICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNl
LnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC5oZWln
aHQoKSkpOwotCi0gICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0gRmxvYXRTaXplKCk7Ci0gICAg
Ci0gICAgaWYgKG1fc25hcFJ1YmJlckJhbmRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Nu
YXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmVuZFNjcm9sbEdlc3R1cmUoKQotewotICAgIGRpZEVuZFNjcm9sbEdlc3R1cmUoKTsK
LQotICAgIHNuYXBSdWJiZXJCYW5kKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6c25hcFJ1YmJlckJhbmQoKQotewotICAgIENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9
IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSAtIG1fbGFzdE1vbWVu
dHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIGlmIChtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFt
cCAmJiB0aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCkKLSAgICAgICAg
bV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0KLSAgICBtX2luU2Nyb2xsR2VzdHVy
ZSA9IGZhbHNlOwotCi0gICAgaWYgKG1fc25hcFJ1YmJlckJhbmRUaW1lci5pc0FjdGl2ZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFs
U2luY2VSZWZlcmVuY2VEYXRlXTsKLSAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwot
ICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICBtX29yaWdWZWxvY2l0eSA9IEZs
b2F0U2l6ZSgpOwotCi0gICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEu
MC82MC4wKTsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCByb3VuZFRvd2FyZFplcm8oZmxvYXQg
bnVtKQotewotICAgIHJldHVybiBudW0gPiAwID8gY2VpbGYobnVtIC0gMC41ZikgOiBmbG9vcmYo
bnVtICsgMC41Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb0RldmljZVBpeGVs
VG93YXJkWmVybyhmbG9hdCBudW0pCi17Ci0gICAgZmxvYXQgcm91bmRlZE51bSA9IHJvdW5kZihu
dW0pOwotICAgIGlmIChmYWJzKG51bSAtIHJvdW5kZWROdW0pIDwgMC4xMjUpCi0gICAgICAgIG51
bSA9IHJvdW5kZWROdW07Ci0KLSAgICByZXR1cm4gcm91bmRUb3dhcmRaZXJvKG51bSk7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVk
KFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+KikKLXsKLSAgICBpZiAoIW1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzIHx8IG1faWdub3JlTW9tZW50dW1TY3JvbGxzKSB7Ci0gICAgICAg
IENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZl
cmVuY2VEYXRlXSAtIG1fc3RhcnRUaW1lOwotCi0gICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9
PSBGbG9hdFNpemUoKSkgewotICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBtX3Njcm9sbGFi
bGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwotICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNo
ID09IEZsb2F0U2l6ZSgpKSB7ICAgIAotICAgICAgICAgICAgICAgIG1fc25hcFJ1YmJlckJhbmRU
aW1lci5zdG9wKCk7Ci0gICAgICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9h
dFNpemUoKTsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IDA7Ci0gICAgICAgICAgICAg
ICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAgICAgICAgICAgICAgICBtX29yaWdP
cmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBG
bG9hdFNpemUoKTsKLQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+ZGlkU3RhcnRSdWJiZXJCYW5kKHJvdW5kZWRJ
bnRTaXplKG1fc3RhcnRTdHJldGNoKSk7Ci0KLSAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9ICht
X3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkpIC0gbV9zdGFydFN0cmV0Y2g7Ci0gICAgICAgICAg
ICBtX29yaWdWZWxvY2l0eSA9IG1fbW9tZW50dW1WZWxvY2l0eTsKLQotICAgICAgICAgICAgLy8g
SnVzdCBsaWtlIG5vcm1hbCBzY3JvbGxpbmcsIHByZWZlciB2ZXJ0aWNhbCBydWJiZXJiYW5kaW5n
Ci0gICAgICAgICAgICBpZiAoZmFic2YobV9vcmlnVmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnNm
KG1fb3JpZ1ZlbG9jaXR5LndpZHRoKCkpKQotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5
LnNldFdpZHRoKDApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBEb24ndCBydWJiZXIt
YmFuZCBob3Jpem9udGFsbHkgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2Nyb2xsIGhvcml6b250
YWxseQotICAgICAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVh
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAgICAgICBpZiAoIWhTY3JvbGxlciB8fCAh
aFNjcm9sbGVyLT5lbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0
V2lkdGgoMCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5k
IHZlcnRpY2FsbHkgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2Nyb2xsIGhvcml6b250YWxseQot
ICAgICAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0
aWNhbFNjcm9sbGJhcigpOwotICAgICAgICAgICAgaWYgKCF2U2Nyb2xsZXIgfHwgIXZTY3JvbGxl
ci0+ZW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldEhlaWdodCgw
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEZsb2F0UG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBp
eGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lk
dGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRoKCksIChmbG9hdCl0aW1lRGVsdGEpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNE
ZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5
LmhlaWdodCgpLCAoZmxvYXQpdGltZURlbHRhKSkpOwotCi0gICAgICAgIGlmIChmYWJzKGRlbHRh
LngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnkoKSkgPj0gMSkgewotICAgICAgICAgICAgRmxvYXRQ
b2ludCBuZXdPcmlnaW4gPSBtX29yaWdPcmlnaW4gKyBkZWx0YTsKLQotICAgICAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2Up
OwotICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChuZXdPcmlnaW4pOwotICAgICAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVk
Z2UodHJ1ZSk7Ci0KLSAgICAgICAgICAgIEZsb2F0U2l6ZSBuZXdTdHJldGNoID0gbV9zY3JvbGxh
YmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9z
dHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5l
d1N0cmV0Y2gud2lkdGgoKSkpOwotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0
SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLmhlaWdodCgpKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG1f
b3JpZ09yaWdpbik7Ci0KLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZENvbXBsZXRl
UnViYmVyQmFuZChyb3VuZGVkSW50U2l6ZShtX3N0YXJ0U3RyZXRjaCkpOwotCi0gICAgICAgICAg
ICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOwotICAgICAgICAgICAgbV9zdHJldGNoU2Ny
b2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9zdGFy
dFRpbWUgPSAwOwotICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAg
ICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICAgICAgICAgIG1fb3Jp
Z1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsK
LSAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAgICB9Ci19Ci0jZW5kaWYK
LQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzZXRJc0FjdGl2ZSgpCi17Ci0gICAg
aWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIGlmIChuZWVk
c1Njcm9sbGVyU3R5bGVVcGRhdGUoKSkKLSAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGVyU3R5bGUo
KTsKLSAgICB9Ci19Ci0KLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi12b2lkIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OnVwZGF0ZVNjcm9sbGVyU3R5bGUoKQotewotICAgIGlmICgh
c2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkgewotICAgICAgICBzZXROZWVkc1Nj
cm9sbGVyU3R5bGVVcGRhdGUodHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBT
Y3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKiBtYWNUaGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhl
bWUoKTsKLSAgICBpZiAoIW1hY1RoZW1lKSB7Ci0gICAgICAgIHNldE5lZWRzU2Nyb2xsZXJTdHls
ZVVwZGF0ZShmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgbmV3U3R5
bGUgPSB3a1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUobV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSk7Ci0KLSAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
ciA9IHNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgdmVy
dGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLQotICAgICAgICBXS1Njcm9sbGJhclBhaW50
ZXJSZWYgb2xkVmVydGljYWxQYWludGVyID0gd2tWZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJGb3JD
b250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotICAgICAgICBX
S1Njcm9sbGJhclBhaW50ZXJSZWYgbmV3VmVydGljYWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFy
UmVwbGFjZW1lbnRQYWludGVyKG9sZFZlcnRpY2FsUGFpbnRlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdTdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNh
bFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
YWxzZSk7Ci0gICAgICAgIG1hY1RoZW1lLT5zZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKHZlcnRp
Y2FsU2Nyb2xsYmFyLCBuZXdWZXJ0aWNhbFBhaW50ZXIpOwotICAgICAgICB3a1NldFBhaW50ZXJG
b3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBu
ZXdWZXJ0aWNhbFBhaW50ZXIsIGZhbHNlKTsKLQotICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNj
cm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUt
c2V0IHRoZSAKLSAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQg
dGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KLSAgICAgICAgLy8g
YW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9
IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3ModmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xT
aXplKCkpOwotICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3Qo
MCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKLSAgICB9Ci0KLSAgICBpZiAoU2Nyb2xsYmFy
KiBob3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUFyZWEoKS0+aG9yaXpvbnRhbFNjcm9s
bGJhcigpKSB7Ci0gICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLQot
ICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgb2xkSG9yaXpvbnRhbFBhaW50ZXIgPSB3a0hv
cml6b250YWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihtX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpKTsKLSAgICAgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIG5ld0hvcml6
b250YWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKG9sZEhvcml6
b250YWxQYWludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3R5bGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgIG1h
Y1RoZW1lLT5zZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKGhvcml6b250YWxTY3JvbGxiYXIsIG5l
d0hvcml6b250YWxQYWludGVyKTsKLSAgICAgICAgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRy
b2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgbmV3SG9yaXpvbnRhbFBh
aW50ZXIsIHRydWUpOwotCi0gICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxl
cyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAotICAg
ICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0
IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgotICAgICAgICAvLyBhbmQgbGVuZ3RoIGFy
ZSBwcm9wZXJseSB1cGRhdGVkLgotICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNj
cm9sbGJhclRoaWNrbmVzcyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKLSAg
ICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgdGhp
Y2tuZXNzLCB0aGlja25lc3MpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBuZWVkc1Njcm9sbGVyU3R5
bGVVcGRhdGUoKSBpcyB0cnVlLCB0aGVuIHRoZSBwYWdlIGlzIHJlc3RvcmluZyBmcm9tIHRoZSBw
YWdlIGNhY2hlLCBhbmQgCi0gICAgLy8gYSByZWxheW91dCB3aWxsIGhhcHBlbiBvbiBpdHMgb3du
LiBPdGhlcndpc2UsIHdlIG11c3QgaW5pdGlhdGUgYSByZS1sYXlvdXQgb3Vyc2VsdmVzLgotICAg
IHNjcm9sbGFibGVBcmVhKCktPnNjcm9sbGJhclN0eWxlQ2hhbmdlZChuZXdTdHlsZSwgIW5lZWRz
U2Nyb2xsZXJTdHlsZVVwZGF0ZSgpKTsKLQotICAgIHNldE5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0
ZShmYWxzZSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c3RhcnRTY3Jv
bGxiYXJQYWludFRpbWVyKCkKLXsKLSAgICBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0
YXJ0T25lU2hvdCgwLjEpOwotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNj
cm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5pdGlh
bFNjcm9sbGJhclBhaW50VGltZXIuaXNBY3RpdmUoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpCi17Ci0gICAgbV9pbml0aWFs
U2Nyb2xsYmFyUGFpbnRUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjPiopCi17Ci0gICAgd2tTY3JvbGxiYXJQYWludGVyRm9yY2VGbGFzaFNj
cm9sbGVycyhtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLSNlbmRpZgot
Ci12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1i
UmVjdChjb25zdCBJbnRSZWN0JiBzY3JvbGxlclRodW1iKQotewotICAgIEludFJlY3QgcmVjdElu
Vmlld0Nvb3JkaW5hdGVzID0gc2Nyb2xsZXJUaHVtYjsKLSAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0
aWNhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0g
ICAgICAgIHJlY3RJblZpZXdDb29yZGluYXRlcyA9IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0
VG9Db250YWluaW5nVmlldyhzY3JvbGxlclRodW1iKTsKLQotICAgIGlmIChyZWN0SW5WaWV3Q29v
cmRpbmF0ZXMgPT0gbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0
SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgIG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0ID0gcmVj
dEluVmlld0Nvb3JkaW5hdGVzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRp
bGl0aWVzQ2hyb21pdW1NYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0YzdmMjZhODQ0NWZkNjkyNWI4MGIwMTZkMTgwMzkxZWU2NDFkN2VhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNjcm9sbGJhck92ZXJsYXlVdGls
aXRpZXNDaHJvbWl1bU1hY19oCi0jZGVmaW5lIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJv
bWl1bU1hY19oCi0KLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi0KLS8vIFB1YmxpYyBB
UElzIG5vdCBhdmFpbGFibGUgb24gdmVyc2lvbnMgb2YgTWFjIG9uIHdoaWNoIHdlIGJ1aWxkCi0j
aWYgKGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgfHwgZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpKQotZW51bSB7Ci0gICAgTlNTY3JvbGxlclN0eWxlTGVnYWN5ICAgICAgID0g
MCwKLSAgICBOU1Njcm9sbGVyU3R5bGVPdmVybGF5ICAgICAgPSAxCi19OwotCi0jaWZkZWYgX19P
QkpDX18KLXR5cGVkZWYgTlNJbnRlZ2VyIE5TU2Nyb2xsZXJTdHlsZTsKLSNlbmRpZgotI2VuZGlm
Ci0KLXR5cGVkZWYgdWludDMyIHdrU2Nyb2xsZXJTdHlsZTsKLQotI2lmZGVmIF9fT0JKQ19fCi1A
Y2xhc3MgTlNTY3JvbGxlckltcDsKLUBjbGFzcyBOU1Njcm9sbGVySW1wUGFpcjsKLSNlbHNlCi1j
bGFzcyBOU1Njcm9sbGVySW1wOwotY2xhc3MgTlNTY3JvbGxlckltcFBhaXI7Ci0jZW5kaWYKLQot
dHlwZWRlZiBOU1Njcm9sbGVySW1wKiBXS1Njcm9sbGJhclBhaW50ZXJSZWY7Ci10eXBlZGVmIE5T
U2Nyb2xsZXJJbXBQYWlyKiBXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmOwotCi1ib29s
IGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpOwotCi0vLyBTY3JvbGxiYXIgUGFpbnRl
cgotYm9vbCB3a1Njcm9sbGJhclBhaW50ZXJVc2VzT3ZlcmxheVNjcm9sbGVycyh2b2lkKTsKLWJv
b2wgd2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7
Ci1DR0Zsb2F0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJS
ZWYpOwotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJTZXRPdmVybGF5U3RhdGUoV0tTY3JvbGxiYXJQ
YWludGVyUmVmLCBpbnQgb3ZlcmxheVNjcm9sbGVyU3RhdGUpOwotdm9pZCB3a1Njcm9sbGJhclBh
aW50ZXJQYWludChXS1Njcm9sbGJhclBhaW50ZXJSZWYsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZh
bHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIE5TUmVjdCBmcmFtZVJlY3QpOwotdm9pZCB3a1Njcm9s
bGJhclBhaW50ZXJQYWludFRyYWNrKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiwgYm9vbCBlbmFibGVk
LCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgTlNSZWN0IGZyYW1lUmVjdCk7Ci12
b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50S25vYihXS1Njcm9sbGJhclBhaW50ZXJSZWYpOwot
aW50IHdrU2Nyb2xsYmFyTWluaW11bVRodW1iTGVuZ3RoKFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7
Ci12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZiwgaWQgc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlKTsKLXZvaWQgd2tTY3JvbGxiYXJQYWludGVy
U2V0RW5hYmxlZChXS1Njcm9sbGJhclBhaW50ZXJSZWYsIGJvb2wgZW5hYmxlZCk7Ci1DR0Zsb2F0
IHdrU2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmKTsKLVdL
U2Nyb2xsYmFyUGFpbnRlclJlZiB3a01ha2VTY3JvbGxiYXJQYWludGVyKGludCBjb250cm9sU2l6
ZSwgYm9vbCBpc0hvcml6b250YWwpOwotaW50IHdrU2Nyb2xsYmFyVGhpY2tuZXNzKGludCBjb250
cm9sU2l6ZSk7Ci1pbnQgd2tTY3JvbGxiYXJNaW5pbXVtVG90YWxMZW5ndGhOZWVkZWRGb3JUaHVt
YihXS1Njcm9sbGJhclBhaW50ZXJSZWYpOwotQ0dSZWN0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JS
ZWN0KFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtl
U2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBvbGRQYWlu
dGVyLCBpbnQgbmV3U3R5bGUsIGludCBjb250cm9sU2l6ZSwgYm9vbCBpc0hvcml6b250YWwpOwot
dm9pZCB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVm
LCBDR0Zsb2F0KTsKLXZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShXS1Njcm9s
bGJhclBhaW50ZXJSZWYsIENHRmxvYXQpOwotCi1lbnVtIHsKLSAgICB3a1Njcm9sbGVyS25vYlN0
eWxlRGVmYXVsdCA9IDAsCi0gICAgd2tTY3JvbGxlcktub2JTdHlsZURhcmsgPSAxLAotICAgIHdr
U2Nyb2xsZXJLbm9iU3R5bGVMaWdodCA9IDIKLX07Ci10eXBlZGVmIHVpbnQzMiB3a1Njcm9sbGVy
S25vYlN0eWxlOwotZXh0ZXJuIHZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKFdL
U2Nyb2xsYmFyUGFpbnRlclJlZiwgd2tTY3JvbGxlcktub2JTdHlsZSk7Ci0KLS8vIFNjcm9sbGJh
ciBQYWludGVyIENvbnRyb2xsZXIKLVdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgd2tN
YWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIoaWQgcGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0
ZSk7Ci12b2lkIHdrQ29udGVudEFyZWFTY3JvbGxlZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyUmVmKTsKLXZvaWQgd2tDb250ZW50QXJlYVdpbGxQYWludChXS1Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyUmVmKTsKLXZvaWQgd2tNb3VzZUVudGVyZWRDb250ZW50QXJlYShXS1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyUmVmKTsKLXZvaWQgd2tNb3VzZUV4aXRlZENvbnRlbnRBcmVhKFdL
U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a01vdXNlTW92ZWRJbkNvbnRl
bnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a1dpbGxTdGFy
dExpdmVSZXNpemUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrQ29u
dGVudEFyZWFSZXNpemVkKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3
a1dpbGxFbmRMaXZlUmVzaXplKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9p
ZCB3a0NvbnRlbnRBcmVhRGlkU2hvdyhXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsK
LXZvaWQgd2tDb250ZW50QXJlYURpZEhpZGUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJl
Zik7Ci12b2lkIHdrRGlkQmVnaW5TY3JvbGxHZXN0dXJlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJSZWYpOwotdm9pZCB3a0RpZEVuZFNjcm9sbEdlc3R1cmUoV0tTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlclJlZik7Ci12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxl
cnMoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrU2V0U2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmLCB3
a1Njcm9sbGVyU3R5bGUgbmV3U3R5bGUpOwotdm9pZCB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29u
dHJvbGxlcihXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmLCBXS1Njcm9sbGJhclBhaW50
ZXJSZWYsIGJvb2wgaXNIb3Jpem9udGFsKTsKLVdLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a1ZlcnRp
Y2FsU2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlclJlZik7Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tIb3Jpem9udGFsU2Nyb2xsYmFyUGFp
bnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci13a1Nj
cm9sbGVyU3R5bGUgd2tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKFdLU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJSZWYpOwotCi0jZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJBUl9QQUlO
VEVSKQotCi0jZW5kaWYgLy8gU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92
ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYThiMDFkNGFiNWQ1ODE3YjU5NWZjYjg4MDYyMTQ0NjM4MWM2
NGNjZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hy
b21pdW1NYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzNjQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLQotI2luY2x1ZGUgIlNjcm9sbGJh
ck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oIgotI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgi
Ci0jaW5jbHVkZSA8Q29jb2EvQ29jb2EuaD4KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IFRoaXMgZmlsZSBjb250YWlucyB1dGlsaXRpZXMgdG8gZHJhdyBvdmVybGF5IHNjcm9sbGJhcnMu
IFRoZXJlIGFyZSBubyBwdWJsaWMKLS8vIEFQSXMgeWV0IG9uIHRoZSBNYWMgdG8gZHJhdyBvdmVy
bGF5IHNjcm9sbGJhcnMgc28gd2UgdXNlIHByaXZhdGUgQVBJcyB0aGF0Ci0vLyB3ZSBsb29rIHVw
IGF0IHJ1bnRpbWUuIElmIHRoZSBwcml2YXRlIEFQSXMgZG9uJ3QgZXhpc3QgdGhlbiB0aGUgd2tN
YWtlKgotLy8gZnVuY3Rpb25zIHdpbGwgcmV0dXJuIG5pbC4KLS8vCi0vLyBOb3RlLCB0aGlzIGZp
bGUgY29udGFpbnMgZnVuY3Rpb25zIGNvcGllZCBmcm9tIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uu
aC4KLS8vIFVzaW5nIHRoZSBzYW1lIG5hbWVzIG1ha2VzIHRoZSBjb2RlIGVhc2llciB0byBtYWlu
dGFpbi4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFB1YmxpYyBBUElzIG5vdCBhdmFp
bGFibGUgb24gdmVyc2lvbnMgb2YgTWFjIG9uIHdoaWNoIHdlIGJ1aWxkCi0jaWYgKGRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkgfHwgZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
KQotQGludGVyZmFjZSBOU1Njcm9sbGVyIChOU09iamVjdCkKLSsgKE5TU2Nyb2xsZXJTdHlsZSlw
cmVmZXJyZWRTY3JvbGxlclN0eWxlOwotQGVuZAotI2VuZGlmCi0KLS8vIFRoZXNlIGFyZSBwcml2
YXRlIEFQSXMgdG8gZHJhdyBvdmVybGF5IHNjcm9sbGJhcnMuCi1AaW50ZXJmYWNlIE5TU2Nyb2xs
ZXJJbXAgOiBOU09iamVjdAotCi0rIChpZClzY3JvbGxlckltcFdpdGhTdHlsZTooTlNTY3JvbGxl
clN0eWxlKXN0eWxlCi0gICAgICAgICAgICAgICBjb250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSlz
aXplCi0gICAgICAgICAgICAgICAgaG9yaXpvbnRhbDooQk9PTClob3Jpem9udGFsCi0gICAgICBy
ZXBsYWNpbmdTY3JvbGxlckltcDooaWQpc2Nyb2xsZXI7Ci0KLUBwcm9wZXJ0eSBDR0Zsb2F0IGtu
b2JBbHBoYTsKLUBwcm9wZXJ0eSBDR0Zsb2F0IHRyYWNrQWxwaGE7Ci1AcHJvcGVydHkgQ0dGbG9h
dCBrbm9iUHJvcG9ydGlvbjsKLUBwcm9wZXJ0eSBOU0ludGVnZXIga25vYlN0eWxlOwotQHByb3Bl
cnR5KGdldHRlcj1pc0VuYWJsZWQpIEJPT0wgZW5hYmxlZDsKLUBwcm9wZXJ0eShnZXR0ZXI9aXNI
b3Jpem9udGFsKSBCT09MIGhvcml6b250YWw7Ci1AcHJvcGVydHkgZG91YmxlIGRvdWJsZVZhbHVl
OwotQHByb3BlcnR5KGFzc2lnbikgaWQgZGVsZWdhdGU7Ci0KLS0gKENHRmxvYXQpa25vYk1pbkxl
bmd0aDsKLS0gKENHRmxvYXQpdHJhY2tPdmVybGFwRW5kSW5zZXQ7Ci0tIChDR0Zsb2F0KWtub2JP
dmVybGFwRW5kSW5zZXQ7Ci0tIChDR0Zsb2F0KXRyYWNrRW5kSW5zZXQ7Ci0tIChDR0Zsb2F0KWtu
b2JFbmRJbnNldDsKLS0gKENHRmxvYXQpdHJhY2tCb3hXaWR0aDsKLS0gKENHRmxvYXQpdHJhY2tX
aWR0aDsKLS0gKHZvaWQpc2V0Qm91bmRzU2l6ZTooTlNTaXplKXNpemU7Ci0tICh2b2lkKWRyYXdL
bm9iU2xvdEluUmVjdDooTlNSZWN0KXJlY3QKLSAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0OihC
T09MKWZsYWc7Ci0tICh2b2lkKWRyYXdLbm9iOwotLSAodm9pZClzZXRPdmVybGF5U2Nyb2xsZXJT
dGF0ZTooTlNTY3JvbGxlclN0eWxlKXN0YXRlCi0gICAgICAgICAgICAgICBmb3JjZUltbWVkaWF0
ZWx5OihCT09MKWZsYWc7Ci0tICh2b2lkKXNldERlbGVnYXRlOihpZClkZWxlZ2F0ZTsKLS0gKE5T
UmVjdClyZWN0Rm9yUGFydDooTlNVSW50ZWdlcilhcmcxOwotCi1AZW5kCi0KLS8vIFRoZXNlIGFy
ZSBwcml2YXRlIEFQSXMgdG8gbWFuYWdlIG92ZXJsYXkgc2Nyb2xsYmFycy4KLUBpbnRlcmZhY2Ug
TlNTY3JvbGxlckltcFBhaXIgOiBOU09iamVjdAotCi1AcHJvcGVydHkgTlNTY3JvbGxlclN0eWxl
IHNjcm9sbGVyU3R5bGU7Ci1AcHJvcGVydHkocmV0YWluKSBOU1Njcm9sbGVySW1wICpob3Jpem9u
dGFsU2Nyb2xsZXJJbXA7Ci1AcHJvcGVydHkocmV0YWluKSBOU1Njcm9sbGVySW1wICp2ZXJ0aWNh
bFNjcm9sbGVySW1wOwotQHByb3BlcnR5KGFzc2lnbikgaWQgZGVsZWdhdGU7Ci0KLS0gKHZvaWQp
aGlkZU92ZXJsYXlTY3JvbGxlcnM7Ci0tICh2b2lkKWZsYXNoU2Nyb2xsZXJzOwotLSAodm9pZClj
b250ZW50QXJlYVNjcm9sbGVkOwotLSAodm9pZCljb250ZW50QXJlYVdpbGxEcmF3OwotLSAodm9p
ZCljb250ZW50QXJlYURpZEhpZGU7Ci0tICh2b2lkKXdpbmRvd09yZGVyZWRPdXQ7Ci0tICh2b2lk
KXdpbmRvd09yZGVyZWRJbjsKLS0gKHZvaWQpbW91c2VFbnRlcmVkQ29udGVudEFyZWE7Ci0tICh2
b2lkKW1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhOwotLSAodm9pZCltb3VzZUV4aXRlZENvbnRlbnRB
cmVhOwotLSAodm9pZClzdGFydExpdmVSZXNpemU7Ci0tICh2b2lkKWNvbnRlbnRBcmVhRGlkUmVz
aXplOwotLSAodm9pZCllbmRMaXZlUmVzaXplOwotLSAodm9pZCliZWdpblNjcm9sbEdlc3R1cmU7
Ci0tICh2b2lkKWVuZFNjcm9sbEdlc3R1cmU7Ci0KLUBlbmQKLQotc3RhdGljIENsYXNzIGxvb2tV
cE5TU2Nyb2xsZXJJbXBDbGFzcygpCi17Ci0gICAgc3RhdGljIENsYXNzIHJlc3VsdCA9IE5TQ2xh
c3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcCIpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXN0YXRpYyBDbGFzcyBsb29rVXBOU1Njcm9sbGVySW1wUGFpckNsYXNzKCkKLXsKLSAgICBzdGF0
aWMgQ2xhc3MgcmVzdWx0ID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVySW1wUGFpciIp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBOU0NvbnRyb2xTaXplIHNjcm9sbGJh
ckNvbnRyb2xTaXplVG9OU0NvbnRyb2xTaXplKGludCBjb250cm9sU2l6ZSkKLXsKLSAgICByZXR1
cm4gY29udHJvbFNpemUgPT0gV2ViQ29yZTo6UmVndWxhclNjcm9sbGJhciA/IE5TUmVndWxhckNv
bnRyb2xTaXplIDogTlNTbWFsbENvbnRyb2xTaXplOwotfQotCi1zdGF0aWMgTlNTY3JvbGxlclN0
eWxlIHByZWZlcnJlZFNjcm9sbGVyU3R5bGUoKQotewotICAgIGlmIChbTlNTY3JvbGxlciByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHByZWZlcnJlZFNjcm9sbGVyU3R5bGUpXSkKLSAgICAg
ICAgcmV0dXJuIFtOU1Njcm9sbGVyIHByZWZlcnJlZFNjcm9sbGVyU3R5bGVdOwotICAgIHJldHVy
biBOU1Njcm9sbGVyU3R5bGVMZWdhY3k7Ci19Ci0KLWJvb2wgd2tTY3JvbGxiYXJQYWludGVyVXNl
c092ZXJsYXlTY3JvbGxlcnModm9pZCkKLXsKLSAgICByZXR1cm4gcHJlZmVycmVkU2Nyb2xsZXJT
dHlsZSgpID09IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXk7Ci19Ci0KLWJvb2wgd2tTY3JvbGxiYXJQ
YWludGVySXNIb3Jpem9udGFsKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyKQotewotICAg
IHJldHVybiBbcGFpbnRlciBpc0hvcml6b250YWxdOwotfQotCi1DR0Zsb2F0IHdrU2Nyb2xsYmFy
UGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICBy
ZXR1cm4gW3BhaW50ZXIga25vYkFscGhhXTsKLX0KLQotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJT
ZXRPdmVybGF5U3RhdGUoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIGludCBvdmVybGF5
U2Nyb2xsZXJTdGF0ZSkKLXsKLSAgICBbcGFpbnRlciBzZXRPdmVybGF5U2Nyb2xsZXJTdGF0ZTpv
dmVybGF5U2Nyb2xsZXJTdGF0ZQotICAgICAgICAgICAgICAgICAgICBmb3JjZUltbWVkaWF0ZWx5
OllFU107Ci19Ci0KLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyUGFpbnQoV0tTY3JvbGxiYXJQYWlu
dGVyUmVmIHBhaW50ZXIsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3Bv
cnRpb24sIE5TUmVjdCBmcmFtZVJlY3QpCi17Ci0gICAgd2tTY3JvbGxiYXJQYWludGVyUGFpbnRU
cmFjayhwYWludGVyLCBlbmFibGVkLCB2YWx1ZSwgcHJvcG9ydGlvbiwgZnJhbWVSZWN0KTsKLSAg
ICB3a1Njcm9sbGJhclBhaW50ZXJQYWludEtub2IocGFpbnRlcik7Ci19Ci0KLXZvaWQgd2tTY3Jv
bGxiYXJQYWludGVyUGFpbnRUcmFjayhXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgYm9v
bCBlbmFibGVkLCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgTlNSZWN0IGZyYW1l
UmVjdCkKLXsKLSAgICBbcGFpbnRlciBzZXRFbmFibGVkOmVuYWJsZWRdOwotICAgIFtwYWludGVy
IHNldEJvdW5kc1NpemU6ZnJhbWVSZWN0LnNpemVdOwotICAgIFtwYWludGVyIHNldERvdWJsZVZh
bHVlOnZhbHVlXTsKLSAgICBbcGFpbnRlciBzZXRLbm9iUHJvcG9ydGlvbjpwcm9wb3J0aW9uXTsK
LQotICAgIGlmIChbcGFpbnRlciBpc0hvcml6b250YWxdKQotICAgICAgICBmcmFtZVJlY3Quc2l6
ZS5oZWlnaHQgPSBbcGFpbnRlciB0cmFja1dpZHRoXTsKLSAgICBlbHNlCi0gICAgICAgIGZyYW1l
UmVjdC5zaXplLndpZHRoID0gW3BhaW50ZXIgdHJhY2tXaWR0aF07Ci0gICAgZnJhbWVSZWN0Lm9y
aWdpbiA9IE5TWmVyb1BvaW50OwotCi0gICAgW3BhaW50ZXIgZHJhd0tub2JTbG90SW5SZWN0OmZy
YW1lUmVjdCBoaWdobGlnaHQ6Tk9dOwotfQotCi12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50
S25vYihXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICBbcGFpbnRlciBkcmF3
S25vYl07Ci19Ci0KLWludCB3a1Njcm9sbGJhck1pbmltdW1UaHVtYkxlbmd0aChXS1Njcm9sbGJh
clBhaW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICByZXR1cm4gW3BhaW50ZXIga25vYk1pbkxlbmd0
aF07Ci19Ci0KLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUoV0tTY3JvbGxiYXJQ
YWludGVyUmVmIHBhaW50ZXIsIGlkIHNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSkKLXsKLSAgICBb
cGFpbnRlciBzZXREZWxlZ2F0ZTpzY3JvbGxiYXJQYWludGVyRGVsZWdhdGVdOwotfQotCi12b2lk
IHdrU2Nyb2xsYmFyUGFpbnRlclNldEVuYWJsZWQoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50
ZXIsIGJvb2wgZW5hYmxlZCkKLXsKLSAgICBbcGFpbnRlciBzZXRFbmFibGVkOmVuYWJsZWRdOwot
fQotCi1DR0Zsb2F0IHdrU2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWlu
dGVyUmVmIHBhaW50ZXIpCi17Ci0gICAgcmV0dXJuIFtwYWludGVyIHRyYWNrQWxwaGFdOwotfQot
Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUGFpbnRlcihpbnQgY29udHJv
bFNpemUsIGJvb2wgaXNIb3Jpem9udGFsKQotewotICAgIHJldHVybiB3a01ha2VTY3JvbGxiYXJS
ZXBsYWNlbWVudFBhaW50ZXIobmlsLCBwcmVmZXJyZWRTY3JvbGxlclN0eWxlKCksIGNvbnRyb2xT
aXplLCBpc0hvcml6b250YWwpOwotfQotCi1pbnQgd2tTY3JvbGxiYXJUaGlja25lc3MoaW50IGNv
bnRyb2xTaXplKQotewotICAgIHJldHVybiBbd2tNYWtlU2Nyb2xsYmFyUGFpbnRlcihjb250cm9s
U2l6ZSwgZmFsc2UpIHRyYWNrQm94V2lkdGhdOwotfQotCi1pbnQgd2tTY3JvbGxiYXJNaW5pbXVt
VG90YWxMZW5ndGhOZWVkZWRGb3JUaHVtYihXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikK
LXsKLSAgICByZXR1cm4gW3BhaW50ZXIga25vYk1pbkxlbmd0aF0gKwotICAgICAgICAgICBbcGFp
bnRlciB0cmFja092ZXJsYXBFbmRJbnNldF0gKwotICAgICAgICAgICBbcGFpbnRlciBrbm9iT3Zl
cmxhcEVuZEluc2V0XSArCi0gICAgICAgICAgIChbcGFpbnRlciB0cmFja0VuZEluc2V0XSArIFtw
YWludGVyIGtub2JFbmRJbnNldF0pICogMjsKLX0KLQotV0tTY3JvbGxiYXJQYWludGVyUmVmIHdr
VmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihXS1Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgcmV0dXJuIFtjb250cm9sbGVyIHZlcnRp
Y2FsU2Nyb2xsZXJJbXBdOwotfQotCi1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tIb3Jpem9udGFs
U2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
clJlZiBjb250cm9sbGVyKQotewotICAgIHJldHVybiBbY29udHJvbGxlciBob3Jpem9udGFsU2Ny
b2xsZXJJbXBdOwotfQotCi13a1Njcm9sbGVyU3R5bGUgd2tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlclN0eWxlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsK
LSAgICByZXR1cm4gW2NvbnRyb2xsZXIgc2Nyb2xsZXJTdHlsZV07Ci19Ci0KLVdLU2Nyb2xsYmFy
UGFpbnRlclJlZiB3a01ha2VTY3JvbGxiYXJSZXBsYWNlbWVudFBhaW50ZXIoV0tTY3JvbGxiYXJQ
YWludGVyUmVmIG9sZFBhaW50ZXIsIGludCBuZXdTdHlsZSwgaW50IGNvbnRyb2xTaXplLCBib29s
IGlzSG9yaXpvbnRhbCkKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJs
ZSgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbbG9va1VwTlNTY3JvbGxlcklt
cENsYXNzKCkgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6bmV3U3R5bGUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xTaXplOnNjcm9sbGJhckNvbnRy
b2xTaXplVG9OU0NvbnRyb2xTaXplKGNvbnRyb2xTaXplKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6aXNIb3Jpem9udGFsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNpbmdTY3JvbGxlckltcDpv
bGRQYWludGVyXTsKLX0KLQotdm9pZCB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihX
S1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIsIFdLU2Nyb2xsYmFyUGFp
bnRlclJlZiBwYWludGVyLCBib29sIGlzSG9yaXpvbnRhbCkKLXsKLSAgICBpZiAoaXNIb3Jpem9u
dGFsKQotICAgICAgICBbY29udHJvbGxlciBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6cGFpbnRl
cl07Ci0gICAgZWxzZQotICAgICAgICBbY29udHJvbGxlciBzZXRWZXJ0aWNhbFNjcm9sbGVySW1w
OnBhaW50ZXJdOwotfQotCi12b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJTdHls
ZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIHBhaW50ZXIsIHdrU2Nyb2xsZXJTdHls
ZSBuZXdTdHlsZSkKLXsKLSAgICBbcGFpbnRlciBzZXRTY3JvbGxlclN0eWxlOm5ld1N0eWxlXTsK
LX0KLQotQ0dSZWN0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KFdLU2Nyb2xsYmFyUGFpbnRl
clJlZiBwYWludGVyKQotewotICAgIHJldHVybiBOU1JlY3RUb0NHUmVjdChbcGFpbnRlciByZWN0
Rm9yUGFydDpOU1Njcm9sbGVyS25vYl0pOwotfQotCi12b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
cktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgQ0dGbG9hdCBhbHBoYSkK
LXsKLSAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6YWxwaGFdOwotfQotCi12b2lkIHdrU2V0U2Ny
b2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIENH
RmxvYXQgYWxwaGEpCi17Ci0gICAgW3BhaW50ZXIgc2V0VHJhY2tBbHBoYTphbHBoYV07Ci19Ci0K
LXZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZiBwYWludGVyLCB3a1Njcm9sbGVyS25vYlN0eWxlIHN0eWxlKQotewotICAgIFtwYWludGVyIHNl
dEtub2JTdHlsZTpzdHlsZV07Ci19Ci0KLVdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYg
d2tNYWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIoaWQgcGFpbnRlckNvbnRyb2xsZXJEZWxl
Z2F0ZSkKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIE5TU2Nyb2xsZXJJbXBQYWlyKiBjb250cm9sbGVyID0gW1tb
bG9va1VwTlNTY3JvbGxlckltcFBhaXJDbGFzcygpIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07
Ci0gICAgW2NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6cGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZV07
Ci0gICAgW2NvbnRyb2xsZXIgc2V0U2Nyb2xsZXJTdHlsZTpwcmVmZXJyZWRTY3JvbGxlclN0eWxl
KCldOwotICAgIHJldHVybiBjb250cm9sbGVyOwotfQotCi12b2lkIHdrQ29udGVudEFyZWFTY3Jv
bGxlZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAg
W2NvbnRyb2xsZXIgY29udGVudEFyZWFTY3JvbGxlZF07Ci19Ci0KLXZvaWQgd2tDb250ZW50QXJl
YVdpbGxQYWludChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17
Ci0gICAgW2NvbnRyb2xsZXIgY29udGVudEFyZWFXaWxsRHJhd107Ci19Ci0KLXZvaWQgd2tNb3Vz
ZUVudGVyZWRDb250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRy
b2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgbW91c2VFbnRlcmVkQ29udGVudEFyZWFdOwotfQot
Ci12b2lkIHdrTW91c2VFeGl0ZWRDb250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgbW91c2VFeGl0ZWRDb250ZW50
QXJlYV07Ci19Ci0KLXZvaWQgd2tNb3VzZU1vdmVkSW5Db250ZW50QXJlYShXS1Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgbW91c2VN
b3ZlZEluQ29udGVudEFyZWFdOwotfQotCi12b2lkIHdrV2lsbFN0YXJ0TGl2ZVJlc2l6ZShXS1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xs
ZXIgc3RhcnRMaXZlUmVzaXplXTsKLX0KLQotdm9pZCB3a0NvbnRlbnRBcmVhUmVzaXplZChXS1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xs
ZXIgY29udGVudEFyZWFEaWRSZXNpemVdOwotfQotCi12b2lkIHdrV2lsbEVuZExpdmVSZXNpemUo
V0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250
cm9sbGVyIGVuZExpdmVSZXNpemVdOwotfQotCi12b2lkIHdrQ29udGVudEFyZWFEaWRTaG93KFdL
U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsKLSAgICBbY29udHJv
bGxlciB3aW5kb3dPcmRlcmVkSW5dOwotfQotCi12b2lkIHdrQ29udGVudEFyZWFEaWRIaWRlKFdL
U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsKLSAgICBbY29udHJv
bGxlciB3aW5kb3dPcmRlcmVkT3V0XTsKLX0KLQotdm9pZCB3a0RpZEJlZ2luU2Nyb2xsR2VzdHVy
ZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2Nv
bnRyb2xsZXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKLX0KLQotdm9pZCB3a0RpZEVuZFNjcm9sbEdl
c3R1cmUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAg
IFtjb250cm9sbGVyIGVuZFNjcm9sbEdlc3R1cmVdOwotfQotCi12b2lkIHdrU2Nyb2xsYmFyUGFp
bnRlckZvcmNlRmxhc2hTY3JvbGxlcnMoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBj
b250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIGhpZGVPdmVybGF5U2Nyb2xsZXJzXTsKLSAg
ICBbY29udHJvbGxlciBmbGFzaFNjcm9sbGVyc107Ci19Ci0KLWJvb2wgaXNTY3JvbGxiYXJPdmVy
bGF5QVBJQXZhaWxhYmxlKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBhcGlBdmFpbGFibGUgPSBbbG9v
a1VwTlNTY3JvbGxlckltcENsYXNzKCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzY3Jv
bGxlckltcFdpdGhTdHlsZTpjb250cm9sU2l6ZTpob3Jpem9udGFsOnJlcGxhY2luZ1Njcm9sbGVy
SW1wOildICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvb2tVcE5TU2Nyb2xs
ZXJJbXBQYWlyQ2xhc3MoKSBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2Ny
b2xsZXJTdHlsZSldOwotICAgIHJldHVybiBhcGlBdmFpbGFibGU7Ci19Ci0KLSNlbmRpZiAvLyBV
U0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgKaW5kZXggY2M5
YTMwOGVlMjMwMDI1ZTU1NDlkZjgyMDMxMzNiN2UzYWVlMmIwYi4uNDFhMTk4ZTNmODQyMGM4NDg5
NDVmYjg0NzQ0ZGRiNzAwMjRjZDZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaApAQCAtMjcs
NjMgKzI3LDIyIEBACiAjaWZuZGVmIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWNfaAogI2RlZmlu
ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjX2gKIAotI2luY2x1ZGUgIlNjcm9sbGJhck92ZXJs
YXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ29tcG9z
aXRlLmgiCi0KLS8vIFRoaXMgZmlsZSAoYW5kIGl0cyBhc3NvY2lhdGVkIC5tbSBmaWxlKSBpcyBh
IGNsb25lIG9mIFNjcm9sbGJhclRoZW1lTWFjLmguCi0vLyBTZWUgdGhlIC5tbSBmaWxlIGZvciBk
ZXRhaWxzLgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lTWFjLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyA6IHB1YmxpYyBTY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZSB7CitjbGFzcyBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjIDogcHVi
bGljIFNjcm9sbGJhclRoZW1lTWFjIHsKIHB1YmxpYzoKICAgICBTY3JvbGxiYXJUaGVtZUNocm9t
aXVtTWFjKCk7CiAgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYygpOwogCi0g
ICAgdm9pZCBwcmVmZXJlbmNlc0NoYW5nZWQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVF
bmFibGVkU3RhdGUoU2Nyb2xsYmFyKik7Ci0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xs
YmFyKiwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
KTsKIAotICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9s
U2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOwotCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29u
dHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCB1c2Vz
T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Nyb2xs
YmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhciopOwotCi0gICAgdmlydHVhbCBkb3VibGUgaW5pdGlh
bEF1dG9zY3JvbGxUaW1lckRlbGF5KCk7Ci0gICAgdmlydHVhbCBkb3VibGUgYXV0b3Njcm9sbFRp
bWVyRGVsYXkoKTsKLQotICAgIHZpcnR1YWwgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBidXR0
b25zUGxhY2VtZW50KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTY3JvbGxi
YXIoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJTY3JvbGxiYXIoU2Ny
b2xsYmFyKik7Ci0KLSAgICB2b2lkIHNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFy
KiwgV0tTY3JvbGxiYXJQYWludGVyUmVmKTsKLSAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFp
bnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLQogICAgIHZpcnR1YWwgdm9pZCBwYWludE92
ZXJoYW5nQXJlYXMoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
IGhvcml6b250YWxPdmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdB
cmVhLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIAotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgYm9vbCBoYXNU
aHVtYihTY3JvbGxiYXIqKTsKLQotICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChT
Y3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotICAgIHZp
cnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0
LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3Qo
U2Nyb2xsYmFyKiwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLQotICAgIHZpcnR1YWwgaW50IG1h
eE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSB7IHJldHVybiA0MDsgfQotCi0gICAgdmlydHVhbCBpbnQg
bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciopOwotCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKFNjcm9sbGJh
ciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwotCiBwcml2YXRlOgogICAgIHZvaWQgcGFp
bnRHaXZlblRpY2ttYXJrcyhHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgVmVjdG9yPEludFJlY3Q+Jik7CiAKLXByaXZhdGU6CiAgICAgUmVmUHRyPFBh
dHRlcm4+IG1fb3ZlcmhhbmdQYXR0ZXJuOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0K
aW5kZXggODRkNWZlMWM0OTE4Y2U3ZGM5MzNlZWYwNjVmMWM0NDhhNDkwOGFhZS4uZjkzNjQxODZm
Y2YzNWUzY2EwZTk2ZTFhOTc0M2ViMjljZDc5NWUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFj
Lm1tCkBAIC0yNywxMDggKzI3LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5oIgogCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTlNTY3JvbGxlcklt
cERldGFpbHMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKLSNpbmNsdWRlICJTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNYWMuaCIK
ICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiAjaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgInNraWEvZXh0L3NraWFfdXRpbHNfbWFjLmgi
CiAjZW5kaWYKIAotCi0KLS8vIEZJWE1FOiBUaGVyZSBhcmUgcmVwYWludGluZyBwcm9ibGVtcyBk
dWUgdG8gQXF1YSBzY3JvbGwgYmFyIGJ1dHRvbnMnIHZpc3VhbCBvdmVyZmxvdy4KLQotdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi0vLyBUaGlzIGZpbGUg
KGFuZCBpdHMgYXNzb2NpYXRlZCAuaCBmaWxlKSBpcyBhIGNsb25lIG9mIFNjcm9sbGJhclRoZW1l
TWFjLm1tLgotLy8gQmVjYXVzZSB3ZSB3YW50IHRvIGRyYXcgdGlja21hcmtzIGluIHRoZSBzY3Jv
bGxiYXIsIHdlIG11c3QgbWFpbnRhaW4gYSBmb3JrLgotLy8gUGxlYXNlIG1haW50YWluIHRoaXMg
ZmlsZSBieSBwZXJmb3JtaW5nIHBhcmFsbGVsIGNoYW5nZXMgdG8gaXQuCi0vLwotLy8gVGhlIG9u
bHkgY2hhbmdlcyBmcm9tIFNjcm9sbGJhclRoZW1lTWFjIHNob3VsZCBiZToKLS8vIC0gVGhlIGNs
YXNzbmFtZSBjaGFuZ2UgZnJvbSBTY3JvbGxiYXJUaGVtZU1hYyB0byBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjLgotLy8gLSBJbiBwYWludCgpIHRoZSBjb2RlIHRvIHBhaW50IHRoZSB0cmFjaywg
dGlja21hcmtzLCBhbmQgdGh1bWIgc2VwYXJhdGVseS4KLS8vIC0gSW4gcGFpbnQoKSB0aGUgdGh1
bWIgaXMgZHJhd24gdmlhIENocm9tZUJyaWRnZS9XZWJUaGVtZUVuZ2luZS4KLS8vIC0gVmFyaW91
cyBmdW5jdGlvbnMgdGhhdCB3ZXJlIHNwbGl0IHVzaW5nICNpZiBVU0UoV0tfU0NST0xMQkFSX1BB
SU5URVIpCi0vLyAgIGhhdmUgYmVlbiBjb21iaW5lZCB1c2luZyBydW50aW1lIGNoZWNrcyBpbnN0
ZWFkLgotLy8KLS8vIEZvciBhbGwgb3RoZXIgZGlmZmVyZW5jZXMsIGlmIGl0IHdhcyBpbnRyb2R1
Y2VkIGluIHRoaXMgZmlsZSwgdGhlbiB0aGUKLS8vIG1haW50YWluZXIgZm9yZ290IHRvIGluY2x1
ZGUgaXQgaW4gdGhlIGxpc3Q7IG90aGVyd2lzZSBpdCBpcyBhbiB1cGRhdGUgdGhhdAotLy8gc2hv
dWxkIGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoaXMgZmlsZSBidXQgd2FzIG5vdC4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8U2Nyb2xsYmFyKiwgUmV0YWluUHRyPFdL
U2Nyb2xsYmFyUGFpbnRlclJlZj4gPiBTY3JvbGxiYXJQYWludGVyTWFwOwotCi1zdGF0aWMgU2Ny
b2xsYmFyUGFpbnRlck1hcCogc2Nyb2xsYmFyTWFwKCkKLXsKLSAgICBzdGF0aWMgU2Nyb2xsYmFy
UGFpbnRlck1hcCogbWFwID0gbmV3IFNjcm9sbGJhclBhaW50ZXJNYXA7Ci0gICAgcmV0dXJuIG1h
cDsKLX0KLQotfQotCi1AaW50ZXJmYWNlIFNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgOiBOU09iamVj
dAotewotfQotCi0rICh2b2lkKXJlZ2lzdGVyQXNPYnNlcnZlcjsKLSsgKHZvaWQpYXBwZWFyYW5j
ZVByZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24qKXRoZU5vdGlmaWNhdGlvbjsKLSsgKHZvaWQp
YmVoYXZpb3JQcmVmc0NoYW5nZWQ6KE5TTm90aWZpY2F0aW9uKil0aGVOb3RpZmljYXRpb247Ci0K
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFNjcm9sbGJhclByZWZzT2JzZXJ2ZXIKLQotKyAodm9p
ZClhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiopdW51c2VkTm90aWZpY2F0
aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNhdGlvbik7Ci0KLSAgICBTY3Jv
bGxiYXJUaGVtZSogdGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKLSAgICBpZiAodGhl
bWUtPmlzTW9ja1RoZW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRpY19jYXN0PFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPih0aGVtZSktPnByZWZlcmVuY2VzQ2hhbmdlZCgpOwot
ICAgIGlmIChzY3JvbGxiYXJNYXAoKS0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
U2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3IgZW5kID0gc2Nyb2xsYmFyTWFwKCktPmVuZCgp
OwotICAgIGZvciAoU2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3IgaXQgPSBzY3JvbGxiYXJN
YXAoKS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGl0LT5maXJzdC0+c3R5
bGVDaGFuZ2VkKCk7Ci0gICAgICAgIGl0LT5maXJzdC0+aW52YWxpZGF0ZSgpOwotICAgIH0KLX0K
LQotKyAodm9pZCliZWhhdmlvclByZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24qKXVudXNlZE5v
dGlmaWNhdGlvbgotewotICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwotCi0g
ICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAg
aWYgKHRoZW1lLT5pc01vY2tUaGVtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWNf
Y2FzdDxTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4odGhlbWUpLT5wcmVmZXJlbmNlc0NoYW5n
ZWQoKTsKLX0KLQotKyAodm9pZClyZWdpc3RlckFzT2JzZXJ2ZXIKLXsKLSAgICBbW05TRGlzdHJp
YnV0ZWROb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoYXBwZWFyYW5jZVByZWZzQ2hhbmdlZDopIG5hbWU6QCJBcHBsZUFx
dWFTY3JvbGxCYXJWYXJpYW50Q2hhbmdlZCIgb2JqZWN0Om5pbCBzdXNwZW5zaW9uQmVoYXZpb3I6
TlNOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHldOwotICAg
IFtbTlNEaXN0cmlidXRlZE5vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNl
cnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihiZWhhdmlvclByZWZzQ2hhbmdlZDopIG5hbWU6
QCJBcHBsZU5vUmVkaXNwbGF5QXBwZWFyYW5jZVByZWZlcmVuY2VDaGFuZ2VkIiBvYmplY3Q6bmls
IHN1c3BlbnNpb25CZWhhdmlvcjpOU05vdGlmaWNhdGlvblN1c3BlbnNpb25CZWhhdmlvckNvYWxl
c2NlXTsKLX0KLQotQGVuZAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcm9sbGJhclRoZW1l
KiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQpAQCAtMTM3LDMzMyArNTAsMTcgQEAgU2Ny
b2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCiAgICAgcmV0dXJuICZ0
aGVtZTsKIH0KIAotLy8gRklYTUU6IEdldCB0aGVzZSBudW1iZXJzIGZyb20gQ29yZVVJLgotc3Rh
dGljIGludCBjU2Nyb2xsYmFyVGhpY2tuZXNzW10gPSB7IDE1LCAxMSB9Owotc3RhdGljIGludCBj
UmVhbEJ1dHRvbkxlbmd0aFtdID0geyAyOCwgMjEgfTsKLXN0YXRpYyBpbnQgY0J1dHRvbkluc2V0
W10gPSB7IDE0LCAxMSB9Owotc3RhdGljIGludCBjQnV0dG9uSGl0SW5zZXRbXSA9IHsgMywgMiB9
OwotLy8gY1JlYWxCdXR0b25MZW5ndGggLSBjQnV0dG9uSW5zZXQKLXN0YXRpYyBpbnQgY0J1dHRv
bkxlbmd0aFtdID0geyAxNCwgMTAgfTsKLXN0YXRpYyBpbnQgY1RodW1iTWluTGVuZ3RoW10gPSB7
IDI2LCAyMCB9OwotCi1zdGF0aWMgaW50IGNPdXRlckJ1dHRvbkxlbmd0aFtdID0geyAxNiwgMTQg
fTsgLy8gVGhlIG91dGVyIGJ1dHRvbiBpbiBhIGRvdWJsZSBidXR0b24gcGFpciBpcyBhIGJpdCBi
aWdnZXIuCi1zdGF0aWMgaW50IGNPdXRlckJ1dHRvbk92ZXJsYXAgPSAyOwotCi1zdGF0aWMgZmxv
YXQgZ0luaXRpYWxCdXR0b25EZWxheSA9IDAuNWY7Ci1zdGF0aWMgZmxvYXQgZ0F1dG9zY3JvbGxC
dXR0b25EZWxheSA9IDAuMDVmOwotc3RhdGljIGJvb2wgZ0p1bXBPblRyYWNrQ2xpY2sgPSBmYWxz
ZTsKLXN0YXRpYyBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGdCdXR0b25QbGFjZW1lbnQgPSBp
c1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSA/IFNjcm9sbGJhckJ1dHRvbnNOb25lIDog
U2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZDsKLQotc3RhdGljIHZvaWQgdXBkYXRlQXJyb3dQbGFj
ZW1lbnQoKQotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgTlNTdHJpbmcgKmJ1dHRvblBsYWNlbWVudCA9IFtbTlNVc2Vy
RGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIG9iamVjdEZvcktleTpAIkFwcGxlU2Nyb2xs
QmFyVmFyaWFudCJdOwotICAgIGlmIChbYnV0dG9uUGxhY2VtZW50IGlzRXF1YWxUb1N0cmluZzpA
IlNpbmdsZSJdKQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0dG9uc1Np
bmdsZTsKLSAgICBlbHNlIGlmIChbYnV0dG9uUGxhY2VtZW50IGlzRXF1YWxUb1N0cmluZzpAIkRv
dWJsZU1pbiJdKQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0dG9uc0Rv
dWJsZVN0YXJ0OwotICAgIGVsc2UgaWYgKFtidXR0b25QbGFjZW1lbnQgaXNFcXVhbFRvU3RyaW5n
OkAiRG91YmxlQm90aCJdKQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0
dG9uc0RvdWJsZUJvdGg7Ci0gICAgZWxzZQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Ny
b2xsYmFyQnV0dG9uc0RvdWJsZUVuZDsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjpyZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBib29s
IGlzSG9yaXpvbnRhbCA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyOwotICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxiYXJQYWludGVyID0gd2tN
YWtlU2Nyb2xsYmFyUGFpbnRlcihzY3JvbGxiYXItPmNvbnRyb2xTaXplKCksIGlzSG9yaXpvbnRh
bCk7Ci0gICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIsIHNjcm9sbGJhclBhaW50ZXIp
OwotICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzY3JvbGxiYXIpOwotICAgIHVwZGF0ZVNjcm9sbGJh
ck92ZXJsYXlTdHlsZShzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAg
c2Nyb2xsYmFyTWFwKCktPnJlbW92ZShzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1NYWM6OnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdQYWludGVyKQotewotICAgIHNjcm9sbGJh
ck1hcCgpLT5zZXQoc2Nyb2xsYmFyLCBuZXdQYWludGVyKTsKLSAgICB1cGRhdGVFbmFibGVkU3Rh
dGUoc2Nyb2xsYmFyKTsKLSAgICB1cGRhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoc2Nyb2xsYmFy
KTsKLX0KLQotV0tTY3JvbGxiYXJQYWludGVyUmVmIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJu
IHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKTsKLX0KLQogU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYzo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYygpCiB7Ci0gICAgc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZWQ7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBpbml0
aWFsaXplZCA9IHRydWU7Ci0KLSAgICAgICAgLy8gTG9hZCB0aGUgbGluZW4gcGF0dGVybiBpbWFn
ZSB1c2VkIGZvciBvdmVyaGFuZyBkcmF3aW5nLgotICAgICAgICBSZWZQdHI8SW1hZ2U+IHBhdHRl
cm5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgib3ZlcmhhbmdQYXR0ZXJuIik7
Ci0gICAgICAgIG1fb3ZlcmhhbmdQYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHBhdHRlcm5JbWFn
ZSwgdHJ1ZSwgdHJ1ZSk7Ci0KLSAgICAgICAgW1Njcm9sbGJhclByZWZzT2JzZXJ2ZXIgcmVnaXN0
ZXJBc09ic2VydmVyXTsKLSAgICAgICAgcHJlZmVyZW5jZXNDaGFuZ2VkKCk7Ci0gICAgfQorICAg
IC8vIExvYWQgdGhlIGxpbmVuIHBhdHRlcm4gaW1hZ2UgdXNlZCBmb3Igb3ZlcmhhbmcgZHJhd2lu
Zy4KKyAgICBSZWZQdHI8SW1hZ2U+IHBhdHRlcm5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgib3ZlcmhhbmdQYXR0ZXJuIik7CisgICAgbV9vdmVyaGFuZ1BhdHRlcm4gPSBQYXR0
ZXJuOjpjcmVhdGUocGF0dGVybkltYWdlLCB0cnVlLCB0cnVlKTsKIH0KIAogU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYzo6flNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMoKQogewogfQogCi12b2lk
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnByZWZlcmVuY2VzQ2hhbmdlZCgpCi17Ci0gICAg
TlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRl
ZmF1bHRzXTsKLSAgICBbZGVmYXVsdHMgc3luY2hyb25pemVdOwotICAgIHVwZGF0ZUFycm93UGxh
Y2VtZW50KCk7Ci0gICAgZ0luaXRpYWxCdXR0b25EZWxheSA9IFtkZWZhdWx0cyBmbG9hdEZvcktl
eTpAIk5TU2Nyb2xsZXJCdXR0b25EZWxheSJdOwotICAgIGdBdXRvc2Nyb2xsQnV0dG9uRGVsYXkg
PSBbZGVmYXVsdHMgZmxvYXRGb3JLZXk6QCJOU1Njcm9sbGVyQnV0dG9uUGVyaW9kIl07Ci0gICAg
Z0p1bXBPblRyYWNrQ2xpY2sgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpAIkFwcGxlU2Nyb2xsZXJQ
YWdpbmdCZWhhdmlvciJdOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6c2Ny
b2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQotewotICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHdr
U2Nyb2xsYmFyVGhpY2tuZXNzKGNvbnRyb2xTaXplKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biBjU2Nyb2xsYmFyVGhpY2tuZXNzW2NvbnRyb2xTaXplXTsKLX0KLQotYm9vbCBTY3JvbGxiYXJU
aGVtZUNocm9taXVtTWFjOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdAotewotICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHdrU2Ny
b2xsYmFyUGFpbnRlclVzZXNPdmVybGF5U2Nyb2xsZXJzKCk7Ci0gICAgZWxzZQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgd2tTY3JvbGxlcktub2JTdHlsZSB0b1Nj
cm9sbGJhclBhaW50ZXJLbm9iU3R5bGUoU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIHN0eWxlKQotewot
ICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICBjYXNlIFNjcm9sbGJhck92ZXJsYXlTdHlsZURhcms6
Ci0gICAgICAgIHJldHVybiB3a1Njcm9sbGVyS25vYlN0eWxlRGFyazsKLSAgICBjYXNlIFNjcm9s
bGJhck92ZXJsYXlTdHlsZUxpZ2h0OgotICAgICAgICByZXR1cm4gd2tTY3JvbGxlcktub2JTdHls
ZUxpZ2h0OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB3a1Njcm9sbGVyS25vYlN0eWxl
RGVmYXVsdDsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dXBk
YXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAgICAgICB3a1NldFNjcm9s
bGJhclBhaW50ZXJLbm9iU3R5bGUocGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpLCB0b1Nj
cm9sbGJhclBhaW50ZXJLbm9iU3R5bGUoc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3Jv
bGxiYXJPdmVybGF5U3R5bGUoKSkpOwotICAgIH0KLX0KLQotZG91YmxlIFNjcm9sbGJhclRoZW1l
Q2hyb21pdW1NYWM6OmluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpCi17Ci0gICAgcmV0dXJu
IGdJbml0aWFsQnV0dG9uRGVsYXk7Ci19Ci0KLWRvdWJsZSBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjphdXRvc2Nyb2xsVGltZXJEZWxheSgpCi17Ci0gICAgcmV0dXJuIGdBdXRvc2Nyb2xsQnV0
dG9uRGVsYXk7Ci19Ci0KLVNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bU1hYzo6YnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdCdXR0
b25QbGFjZW1lbnQ7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6aGFzQnV0
dG9ucyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFi
bGVkKCkgJiYgZ0J1dHRvblBsYWNlbWVudCAhPSBTY3JvbGxiYXJCdXR0b25zTm9uZQotICAgICAg
ICAgICAgICYmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cgotICAgICAgICAgICAgID8gc2Nyb2xsYmFyLT53aWR0aCgpCi0gICAgICAgICAgICAgOiBzY3Jv
bGxiYXItPmhlaWdodCgpKSA+PSAyICogKGNSZWFsQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29u
dHJvbFNpemUoKV0gLSBjQnV0dG9uSGl0SW5zZXRbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSk7
Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6aGFzVGh1bWIoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCi17Ci0gICAgaW50IG1pbkxlbmd0aEZvclRodW1iOwotICAgIGlmIChpc1Nj
cm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgbWluTGVuZ3RoRm9yVGh1bWIg
PSB3a1Njcm9sbGJhck1pbmltdW1Ub3RhbExlbmd0aE5lZWRlZEZvclRodW1iKHNjcm9sbGJhck1h
cCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBtaW5MZW5ndGhG
b3JUaHVtYiA9IDIgKiBjQnV0dG9uSW5zZXRbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIGNU
aHVtYk1pbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgMTsKLSAgICByZXR1cm4g
c2Nyb2xsYmFyLT5lbmFibGVkKCkgJiYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyID8KLSAgICAgICAgICAgICBzY3JvbGxiYXItPndpZHRoKCkgOgotICAg
ICAgICAgICAgIHNjcm9sbGJhci0+aGVpZ2h0KCkpID49IG1pbkxlbmd0aEZvclRodW1iOwotfQot
Ci1zdGF0aWMgSW50UmVjdCBidXR0b25SZXBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBidXR0b25S
ZWN0LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNp
emUgY29udHJvbFNpemUsIGJvb2wgc3RhcnQpCi17Ci0gICAgQVNTRVJUKGdCdXR0b25QbGFjZW1l
bnQgIT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUpOwotCi0gICAgSW50UmVjdCBwYWludFJlY3QoYnV0
dG9uUmVjdCk7Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsK
LSAgICAgICAgcGFpbnRSZWN0LnNldFdpZHRoKGNSZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xTaXpl
XSk7Ci0gICAgICAgIGlmICghc3RhcnQpCi0gICAgICAgICAgICBwYWludFJlY3Quc2V0WChidXR0
b25SZWN0LngoKSAtIChjUmVhbEJ1dHRvbkxlbmd0aFtjb250cm9sU2l6ZV0gLSBidXR0b25SZWN0
LndpZHRoKCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwYWludFJlY3Quc2V0SGVpZ2h0KGNS
ZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xTaXplXSk7Ci0gICAgICAgIGlmICghc3RhcnQpCi0gICAg
ICAgICAgICBwYWludFJlY3Quc2V0WShidXR0b25SZWN0LnkoKSAtIChjUmVhbEJ1dHRvbkxlbmd0
aFtjb250cm9sU2l6ZV0gLSBidXR0b25SZWN0LmhlaWdodCgpKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHBhaW50UmVjdDsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpi
YWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBi
b29sIHBhaW50aW5nKQotewotICAgIEludFJlY3QgcmVzdWx0OwotCi0gICAgaWYgKHBhcnQgPT0g
QmFja0J1dHRvblN0YXJ0UGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1
dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zRG91Ymxl
RW5kKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0
b25FbmRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUg
fHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydCB8fCBi
dXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc1NpbmdsZSkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0KLSAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNj
cm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0gICAgYm9vbCBvdXRlckJ1dHRvbiA9IHBhcnQgPT0g
QmFja0J1dHRvblN0YXJ0UGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1
dHRvbnNEb3VibGVTdGFydCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9u
c0RvdWJsZUJvdGgpOwotICAgIGlmIChvdXRlckJ1dHRvbikgewotICAgICAgICBpZiAoc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBy
ZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgY091dGVyQnV0
dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyAocGFpbnRpbmcgPyBjT3V0ZXJC
dXR0b25PdmVybGFwIDogMCksIHRoaWNrbmVzcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJlc3VsdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCB0aGlja25l
c3MsIGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgKHBhaW50
aW5nID8gY091dGVyQnV0dG9uT3ZlcmxhcCA6IDApKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KLSAgICAvLyBPdXIgcmVwYWludCByZWN0IGlzIHNsaWdodGx5IGxhcmdlciwgc2lu
Y2Ugd2UgYXJlIGEgYnV0dG9uIHRoYXQgaXMgYWRqYWNlbnQgdG8gdGhlIHRyYWNrLgotICAgIGlm
IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAg
ICAgICBpbnQgc3RhcnQgPSBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgPyBzY3JvbGxiYXIt
PngoKSA6IHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgpIC0gY091dGVyQnV0dG9u
TGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gLSBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJh
ci0+Y29udHJvbFNpemUoKV07Ci0gICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc3RhcnQsIHNjcm9s
bGJhci0+eSgpLCBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0sIHRoaWNr
bmVzcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gcGFydCA9PSBCYWNrQnV0
dG9uU3RhcnRQYXJ0ID8gc2Nyb2xsYmFyLT55KCkgOiBzY3JvbGxiYXItPnkoKSArIHNjcm9sbGJh
ci0+aGVpZ2h0KCkgLSBjT3V0ZXJCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
XSAtIGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXTsKLSAgICAgICAgcmVz
dWx0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc3RhcnQsIHRoaWNrbmVzcywgY0J1dHRvbkxl
bmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldKTsKLSAgICB9Ci0KLSAgICBpZiAocGFpbnRp
bmcpCi0gICAgICAgIHJldHVybiBidXR0b25SZXBhaW50UmVjdChyZXN1bHQsIHNjcm9sbGJhci0+
b3JpZW50YXRpb24oKSwgc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpLCBwYXJ0ID09IEJhY2tCdXR0
b25TdGFydFBhcnQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYzo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCBwYWludGluZykKLXsKLSAgICBJbnRSZWN0IHJlc3Vs
dDsKLQotICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0ICYmIChidXR0b25zUGxh
Y2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09
IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0K
LSAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0ICYmIChidXR0b25zUGxhY2Vt
ZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNj
cm9sbGJhckJ1dHRvbnNEb3VibGVFbmQgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJh
ckJ1dHRvbnNTaW5nbGUpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaW50IHRoaWNr
bmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwotICAg
IGludCBvdXRlckJ1dHRvbkxlbmd0aCA9IGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNv
bnRyb2xTaXplKCldOwotICAgIGludCBidXR0b25MZW5ndGggPSBjQnV0dG9uTGVuZ3RoW3Njcm9s
bGJhci0+Y29udHJvbFNpemUoKV07Ci0KLSAgICBib29sIG91dGVyQnV0dG9uID0gcGFydCA9PSBG
b3J3YXJkQnV0dG9uRW5kUGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1
dHRvbnNEb3VibGVFbmQgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNE
b3VibGVCb3RoKTsKLSAgICBpZiAob3V0ZXJCdXR0b24pIHsKLSAgICAgICAgaWYgKHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgpIC0gb3V0
ZXJCdXR0b25MZW5ndGgsIHNjcm9sbGJhci0+eSgpLCBvdXRlckJ1dHRvbkxlbmd0aCwgdGhpY2tu
ZXNzKTsKLSAgICAgICAgICAgIGlmIChwYWludGluZykKLSAgICAgICAgICAgICAgICByZXN1bHQu
aW5mbGF0ZVgoY091dGVyQnV0dG9uT3ZlcmxhcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSArIHNj
cm9sbGJhci0+aGVpZ2h0KCkgLSBvdXRlckJ1dHRvbkxlbmd0aCwgdGhpY2tuZXNzLCBvdXRlckJ1
dHRvbkxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRpbmcpCi0gICAgICAgICAgICAgICAg
cmVzdWx0LmluZmxhdGVZKGNPdXRlckJ1dHRvbk92ZXJsYXApOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGludCBzdGFydCA9IHBhcnQgPT0g
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQgPyBzY3JvbGxiYXItPngoKSArIHNjcm9sbGJhci0+d2lkdGgo
KSAtIGJ1dHRvbkxlbmd0aCA6IHNjcm9sbGJhci0+eCgpICsgb3V0ZXJCdXR0b25MZW5ndGg7Ci0g
ICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc3RhcnQsIHNjcm9sbGJhci0+eSgpLCBidXR0b25MZW5n
dGgsIHRoaWNrbmVzcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gcGFydCA9
PSBGb3J3YXJkQnV0dG9uRW5kUGFydCA/IHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWln
aHQoKSAtIGJ1dHRvbkxlbmd0aCA6IHNjcm9sbGJhci0+eSgpICsgb3V0ZXJCdXR0b25MZW5ndGg7
Ci0gICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHN0YXJ0LCB0aGlja25l
c3MsIGJ1dHRvbkxlbmd0aCk7Ci0gICAgfQotICAgIGlmIChwYWludGluZykKLSAgICAgICAgcmV0
dXJuIGJ1dHRvblJlcGFpbnRSZWN0KHJlc3VsdCwgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpLCBz
Y3JvbGxiYXItPmNvbnRyb2xTaXplKCksIHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wgcGFpbnRpbmcpCi17Ci0g
ICAgaWYgKHBhaW50aW5nIHx8ICFoYXNCdXR0b25zKHNjcm9sbGJhcikpCi0gICAgICAgIHJldHVy
biBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOwotCi0gICAgSW50UmVjdCByZXN1bHQ7Ci0gICAgaW50
IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkp
OwotICAgIGludCBzdGFydFdpZHRoID0gMDsKLSAgICBpbnQgZW5kV2lkdGggPSAwOwotICAgIGlu
dCBvdXRlckJ1dHRvbkxlbmd0aCA9IGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRy
b2xTaXplKCldOwotICAgIGludCBidXR0b25MZW5ndGggPSBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJh
ci0+Y29udHJvbFNpemUoKV07Ci0gICAgaW50IGRvdWJsZUJ1dHRvbkxlbmd0aCA9IG91dGVyQnV0
dG9uTGVuZ3RoICsgYnV0dG9uTGVuZ3RoOwotICAgIHN3aXRjaCAoYnV0dG9uc1BsYWNlbWVudCgp
KSB7Ci0gICAgICAgIGNhc2UgU2Nyb2xsYmFyQnV0dG9uc1NpbmdsZToKLSAgICAgICAgICAgIHN0
YXJ0V2lkdGggPSBidXR0b25MZW5ndGg7Ci0gICAgICAgICAgICBlbmRXaWR0aCA9IGJ1dHRvbkxl
bmd0aDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNjcm9sbGJhckJ1dHRvbnNE
b3VibGVTdGFydDoKLSAgICAgICAgICAgIHN0YXJ0V2lkdGggPSBkb3VibGVCdXR0b25MZW5ndGg7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTY3JvbGxiYXJCdXR0b25zRG91Ymxl
RW5kOgotICAgICAgICAgICAgZW5kV2lkdGggPSBkb3VibGVCdXR0b25MZW5ndGg7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTY3JvbGxiYXJCdXR0b25zRG91YmxlQm90aDoKLSAg
ICAgICAgICAgIHN0YXJ0V2lkdGggPSBkb3VibGVCdXR0b25MZW5ndGg7Ci0gICAgICAgICAgICBl
bmRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaW50IHRvdGFsV2lk
dGggPSBzdGFydFdpZHRoICsgZW5kV2lkdGg7Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50UmVjdChzY3Jv
bGxiYXItPngoKSArIHN0YXJ0V2lkdGgsIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndpZHRo
KCkgLSB0b3RhbFdpZHRoLCB0aGlja25lc3MpOwotICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJh
ci0+eCgpLCBzY3JvbGxiYXItPnkoKSArIHN0YXJ0V2lkdGgsIHRoaWNrbmVzcywgc2Nyb2xsYmFy
LT5oZWlnaHQoKSAtIHRvdGFsV2lkdGgpOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bU1hYzo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHdrU2Ny
b2xsYmFyTWluaW11bVRodW1iTGVuZ3RoKHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5n
ZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gY1RodW1iTWluTGVuZ3RoW3Njcm9sbGJh
ci0+Y29udHJvbFNpemUoKV07Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6
c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2dCkKLXsKLSAgICBpZiAoZXZ0LmJ1dHRvbigpICE9IExlZnRCdXR0b24pCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoZ0p1bXBPblRyYWNrQ2xpY2spCi0gICAgICAgIHJldHVybiAh
ZXZ0LmFsdEtleSgpOwotICAgIHJldHVybiBldnQuYWx0S2V5KCk7Ci19Ci0KLWJvb2wgU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bU1hYzo6c2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1bWIoU2Ny
b2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKLXsKLSAgICByZXR1cm4g
ZXZlbnQuYWx0S2V5KCk7Ci19Ci0KLXN0YXRpYyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2Vk
U3RhdGUoU2Nyb2xsYmFyUGFydCBwYXJ0KQotewotICAgIHN3aXRjaCAocGFydCkgewotICAgICAg
ICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6Ci0gICAgICAgICAgICByZXR1cm4ga1RoZW1lVG9w
T3V0c2lkZUFycm93UHJlc3NlZDsKLSAgICAgICAgY2FzZSBCYWNrQnV0dG9uRW5kUGFydDoKLSAg
ICAgICAgICAgIHJldHVybiBrVGhlbWVUb3BPdXRzaWRlQXJyb3dQcmVzc2VkOyAvLyBUaGlzIGRv
ZXMgbm90IG1ha2UgbXVjaCBzZW5zZS4gIEZvciBzb21lIHJlYXNvbiB0aGUgb3V0c2lkZSBjb25z
dGFudCBpcyByZXF1aXJlZC4KLSAgICAgICAgY2FzZSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0Ogot
ICAgICAgICAgICAgcmV0dXJuIGtUaGVtZVRvcEluc2lkZUFycm93UHJlc3NlZDsKLSAgICAgICAg
Y2FzZSBGb3J3YXJkQnV0dG9uRW5kUGFydDoKLSAgICAgICAgICAgIHJldHVybiBrVGhlbWVCb3R0
b21PdXRzaWRlQXJyb3dQcmVzc2VkOwotICAgICAgICBjYXNlIFRodW1iUGFydDoKLSAgICAgICAg
ICAgIHJldHVybiBrVGhlbWVUaHVtYlByZXNzZWQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIHN0YXRpYyBQbGF0Zm9ybVN1cHBvcnQ6OlRoZW1l
UGFpbnRTdGF0ZSBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJh
cikKIHsKICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQpAQCAtNDc2LDEzICs3MywyNyBA
QCBzdGF0aWMgUGxhdGZvcm1TdXBwb3J0OjpUaGVtZVBhaW50U3RhdGUgc2Nyb2xsYmFyU3RhdGVU
b1RoZW1lU3RhdGUoU2Nyb2xsYmFyKiBzYwogICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OlN0
YXRlQWN0aXZlOwogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnVwZGF0ZUVu
YWJsZWRTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3N0YXRpYyB2b2lkIHNjcm9sbGJhclBh
aW50ZXJQYWludFRyYWNrKFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciwgYm9vbCBl
bmFibGVkLCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgQ0dSZWN0IGZyYW1lUmVj
dCkKIHsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAg
ICAgd2tTY3JvbGxiYXJQYWludGVyU2V0RW5hYmxlZChzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9s
bGJhcikuZ2V0KCksIHNjcm9sbGJhci0+ZW5hYmxlZCgpKTsKLSAgICB9CisgICAgW3Njcm9sbGJh
clBhaW50ZXIgc2V0RW5hYmxlZDplbmFibGVkXTsKKyAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRC
b3VuZHNTaXplOiBOU1NpemVGcm9tQ0dTaXplKGZyYW1lUmVjdC5zaXplKV07CisgICAgW3Njcm9s
bGJhclBhaW50ZXIgc2V0RG91YmxlVmFsdWU6dmFsdWVdOworICAgIFtzY3JvbGxiYXJQYWludGVy
IHNldEtub2JQcm9wb3J0aW9uOnByb3BvcnRpb25dOworCisgICAgLy8gVGhlIHNjcm9sbGJhcidz
IGZyYW1lUmVjdCBpbmNsdWRlcyBhIHNpZGUgaW5zZXQgZm9yIG92ZXJsYXkgc2Nyb2xsZXJzLCBz
byB3ZSBoYXZlIHRvIHVzZSB0aGUgCisgICAgLy8gdHJhY2tXaWR0aCBmb3IgZHJhd0tub2JTbG90
SW5SZWN0CisgICAgTlNSZWN0IHRyYWNrUmVjdDsKKyAgICBpZiAoW3Njcm9sbGJhclBhaW50ZXIg
aXNIb3Jpem9udGFsXSkKKyAgICAgICAgdHJhY2tSZWN0ID0gTlNNYWtlUmVjdCgwLCAwLCBmcmFt
ZVJlY3Quc2l6ZS53aWR0aCwgW3Njcm9sbGJhclBhaW50ZXIgdHJhY2tXaWR0aF0pOworICAgIGVs
c2UKKyAgICAgICAgdHJhY2tSZWN0ID0gTlNNYWtlUmVjdCgwLCAwLCBbc2Nyb2xsYmFyUGFpbnRl
ciB0cmFja1dpZHRoXSwgZnJhbWVSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICBbc2Nyb2xsYmFyUGFp
bnRlciBkcmF3S25vYlNsb3RJblJlY3Q6dHJhY2tSZWN0IGhpZ2hsaWdodDpOT107CiB9CiAKKy8v
IE92ZXJyaWRlIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludCgpIHRvIGFkZCBzdXBwb3J0IGZvciB0
aGUgZm9sbG93aW5nOgorLy8gICAgIC0gZHJhd2luZyB1c2luZyBQbGF0Zm9ybVN1cHBvcnQgZnVu
Y3Rpb25zCisvLyAgICAgLSBkcmF3aW5nIHRpY2ttYXJrcworLy8gICAgIC0gU2tpYSBzcGVjaWZp
YyBjaGFuZ2VzCiBib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRh
bWFnZVJlY3QpCiB7CiAgICAgLy8gR2V0IHRoZSB0aWNrbWFya3MgZm9yIHRoZSBmcmFtZXZpZXcu
CkBAIC01MTAsNyArMTIxLDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWlu
dChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb24KICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjKiBzY3JvbGxBbmltYXRvciA9IHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWMqPihzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbEFuaW1hdG9yKCkpOwor
ICAgICAgICBTY3JvbGxBbmltYXRvck1hYyogc2Nyb2xsQW5pbWF0b3IgPSBzdGF0aWNfY2FzdDxT
Y3JvbGxBbmltYXRvck1hYyo+KHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsQW5p
bWF0b3IoKSk7CiAjaWYgIVVTRShTS0lBKQogICAgICAgICBzY3JvbGxBbmltYXRvci0+c2V0SXNE
cmF3aW5nSW50b0xheWVyKGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7CiAjZWxzZQpAQCAt
NTIwLDIzICsxMzEsMjMgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludChT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb24KICAgICAgICAgQ0dGbG9h
dCBvbGRLbm9iQWxwaGEgPSAwOwogICAgICAgICBDR0Zsb2F0IG9sZFRyYWNrQWxwaGEgPSAwOwog
ICAgICAgICBib29sIGhhc1RpY2ttYXJrcyA9IHRpY2ttYXJrcy5zaXplKCkgPiAwICYmIHNjcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICAgICAgU2Nyb2xs
YmFyUGFpbnRlciBzY3JvbGxiYXJQYWludGVyID0gcGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxi
YXIpOwogICAgICAgICBpZiAoaGFzVGlja21hcmtzKSB7Ci0gICAgICAgICAgb2xkS25vYkFscGhh
ID0gd2tTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xs
YmFyKSk7Ci0gICAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXJG
b3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSwgMS4wKTsKLSAgICAgICAgICBvbGRUcmFja0FscGhhID0g
d2tTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJh
cikpOwotICAgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEocGFpbnRlckZv
clNjcm9sbGJhcihzY3JvbGxiYXIpLCAxLjApOworICAgICAgICAgICAgb2xkS25vYkFscGhhID0g
W3Njcm9sbGJhclBhaW50ZXIga25vYkFscGhhXTsKKyAgICAgICAgICAgIFtzY3JvbGxiYXJQYWlu
dGVyIHNldEtub2JBbHBoYToxLjBdOworICAgICAgICAgICAgb2xkVHJhY2tBbHBoYSA9IFtzY3Jv
bGxiYXJQYWludGVyIHRyYWNrQWxwaGFdOworICAgICAgICAgICAgW3Njcm9sbGJhclBhaW50ZXIg
c2V0VHJhY2tBbHBoYToxLjBdOwogICAgICAgICB9CiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKICAgICAgICAgY29udGV4dC0+Y2xpcChk
YW1hZ2VSZWN0KTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHNjcm9sbGJhci0+ZnJhbWVS
ZWN0KCkueCgpLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKSk7CiAgICAgICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIFdLU2Ny
b2xsYmFyUGFpbnRlclJlZiBzY3JvbGxiYXJQYWludGVyID0gc2Nyb2xsYmFyTWFwKCktPmdldChz
Y3JvbGxiYXIpLmdldCgpOwotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJQYWludFRyYWNrKHNj
cm9sbGJhclBhaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsYmFyLT5lbmFibGVkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0
PENHRmxvYXQ+KHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgLSBvdmVyaGFuZykgLyBzY3JvbGxi
YXItPnRvdGFsU2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cm9sbGJhci0+ZnJhbWVSZWN0KCkpOworICAgICAgICBzY3JvbGxiYXJQYWludGVyUGFpbnRUcmFj
ayhzY3JvbGxiYXJQYWludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y3JvbGxiYXItPmVuYWJsZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDxD
R0Zsb2F0PihzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIC0gb3ZlcmhhbmcpIC8gc2Nyb2xsYmFy
LT50b3RhbFNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKSk7CiAKICAgICAgICAgSW50UmVjdCB0aWNrbWFya1RyYWNrUmVjdChJ
bnRQb2ludCgpLCB0cmFja1JlY3Qoc2Nyb2xsYmFyLCBmYWxzZSkuc2l6ZSgpKTsKICAgICAgICAg
aWYgKHRpY2ttYXJrVHJhY2tSZWN0LndpZHRoKCkgPD0gMTApIHsKQEAgLTU1MCwxMyArMTYxLDE0
IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgICAgIH0KICAgICAgICAgcGFpbnRHaXZl
blRpY2ttYXJrcyhjb250ZXh0LCBzY3JvbGxiYXIsIHRpY2ttYXJrVHJhY2tSZWN0LCB0aWNrbWFy
a3MpOwogCi0gICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50S25vYihzY3JvbGxiYXJQYWlu
dGVyKTsKKyAgICAgICAgaWYgKHNjcm9sbGJhci0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgW3Nj
cm9sbGJhclBhaW50ZXIgZHJhd0tub2JdOwogCiAgICAgICAgIHNjcm9sbEFuaW1hdG9yLT5zZXRJ
c0RyYXdpbmdJbnRvTGF5ZXIoZmFsc2UpOwogCiAgICAgICAgIGlmIChoYXNUaWNrbWFya3MpIHsK
LSAgICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoc2Nyb2xsYmFyUGFpbnRl
ciwgb2xkS25vYkFscGhhKTsKLSAgICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJUcmFja0Fs
cGhhKHNjcm9sbGJhclBhaW50ZXIsIG9sZFRyYWNrQWxwaGEpOworICAgICAgICAgICAgW3Njcm9s
bGJhclBhaW50ZXIgc2V0S25vYkFscGhhOm9sZEtub2JBbHBoYV07CisgICAgICAgICAgICBbc2Ny
b2xsYmFyUGFpbnRlciBzZXRUcmFja0FscGhhOm9sZFRyYWNrQWxwaGFdOwogICAgICAgICB9CiAK
ICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvRW1wdHlQcm90b2NvbERlZmluaXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvRW1wdHlQcm90b2NvbERlZmluaXRpb25zLmgKaW5kZXggZGI1Y2RjNjY3MmMxYjU0M2E5
ZTFhMjkwNjE2YzVjYzA3NTM2OGVhNy4uYzExYjA1ZmI1Njg1ZTcxMDVkYTQ5ZmIzMGRjNTFiNzNh
NGJlYzA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0VtcHR5UHJv
dG9jb2xEZWZpbml0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9FbXB0
eVByb3RvY29sRGVmaW5pdGlvbnMuaApAQCAtMzQsNiArMzQsNyBAQAogRU1QVFlfUFJPVE9DT0wo
TlNUYWJsZVZpZXdEYXRhU291cmNlKQogRU1QVFlfUFJPVE9DT0woTlNUYWJsZVZpZXdEZWxlZ2F0
ZSkKIEVNUFRZX1BST1RPQ09MKE5TV2luZG93RGVsZWdhdGUpCitFTVBUWV9QUk9UT0NPTChOU0Fu
aW1hdGlvbkRlbGVnYXRlKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvTlNTY3JvbGxlckltcERldGFpbHMuaAppbmRleCBjZTExNDZkMzBkZDc5ZmNiYThj
MmMwMjFiMzhjNzBmNTdhNTY0MDc2Li43YjNkMTRjZmM4NTgyNzlhZTQ5MjA1OWJiY2I5Y2JhYTkw
ZjM5YmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNTY3JvbGxl
ckltcERldGFpbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNTY3JvbGxl
ckltcERldGFpbHMuaApAQCAtMjgsNyArMjgsMjggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQorLy8gUHVibGljIEFQSXMgbm90IGF2YWlsYWJs
ZSBvbiB2ZXJzaW9ucyBvZiBNYWMgb24gd2hpY2ggd2UgYnVpbGQKKyNpZiAoZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkpCitl
bnVtIHsKKyAgICBOU1Njcm9sbGVyU3R5bGVMZWdhY3kgICAgICAgPSAwLAorICAgIE5TU2Nyb2xs
ZXJTdHlsZU92ZXJsYXkgICAgICA9IDEKK307Cit0eXBlZGVmIE5TSW50ZWdlciBOU1Njcm9sbGVy
U3R5bGU7CisKK2VudW0geworICAgIE5TU2Nyb2xsZXJLbm9iU3R5bGVEZWZhdWx0ID0gMCwKKyAg
ICBOU1Njcm9sbGVyS25vYlN0eWxlRGFyayA9IDEsCisgICAgTlNTY3JvbGxlcktub2JTdHlsZUxp
Z2h0ID0gMgorfTsKK3R5cGVkZWYgTlNJbnRlZ2VyIE5TU2Nyb2xsZXJLbm9iU3R5bGU7CisjZW5k
aWYKKworI2lmIChkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKSkKK0BpbnRlcmZhY2UgTlNTY3JvbGxlcihOU09iamVjdCkKKysg
KE5TU2Nyb2xsZXJTdHlsZSlwcmVmZXJyZWRTY3JvbGxlclN0eWxlOworQGVuZAorI2VuZGlmCisK
IEBpbnRlcmZhY2UgTlNPYmplY3QgKFNjcm9sbGJhclBhaW50ZXIpCiArIChpZClzY3JvbGxlcklt
cFdpdGhTdHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1Njcm9sbGVyU3R5bGUgY29udHJvbFNpemU6
KE5TQ29udHJvbFNpemUpbmV3Q29udHJvbFNpemUgaG9yaXpvbnRhbDooQk9PTClob3Jpem9udGFs
IHJlcGxhY2luZ1Njcm9sbGVySW1wOihpZClwcmV2aW91czsKIC0gKENHRmxvYXQpa25vYkFscGhh
OwpAQCAtODEsNiArMTAyLDI0IEBACiAtICh2b2lkKWJlZ2luU2Nyb2xsR2VzdHVyZTsKIC0gKHZv
aWQpZW5kU2Nyb2xsR2VzdHVyZTsKIEBlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYg
UExBVEZPUk0oQ0hST01JVU0pCitib29sIGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgp
OworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFi
bGUoKQoreworI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKKyAgICByZXR1cm4gdHJ1ZTsKKyNl
bHNlCisgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCit9CisjZW5kaWYKKworTlNTY3JvbGxlclN0
eWxlIHJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpOworCit9CiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjBmNDQ0MDcyMzNhMWM0OGY5NjViMmQ0NjBlYTQ3NzI4ZDRmNzc1YTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNTY3JvbGxlckltcERldGFp
bHMubW0KQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTlNTY3JvbGxlcklt
cERldGFpbHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oQ0hST01J
VU0pCitib29sIGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpCit7CisgICAgc3RhdGlj
IGJvb2wgYXBpQXZhaWxhYmxlOworICAgIHN0YXRpYyBib29sIHNob3VsZEluaXRpYWxpemUgPSB0
cnVlOworICAgIGlmIChzaG91bGRJbml0aWFsaXplKSB7CisgICAgICAgIHNob3VsZEluaXRpYWxp
emUgPSBmYWxzZTsKKyAgICAgICAgQ2xhc3Mgc2Nyb2xsZXJJbXBDbGFzcyA9IE5TQ2xhc3NGcm9t
U3RyaW5nKEAiTlNTY3JvbGxlckltcCIpOworICAgICAgICBDbGFzcyBzY3JvbGxlckltcFBhaXJD
bGFzcyA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcFBhaXIiKTsKKyAgICAgICAg
YXBpQXZhaWxhYmxlID0gW3Njcm9sbGVySW1wQ2xhc3MgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihzY3JvbGxlckltcFdpdGhTdHlsZTpjb250cm9sU2l6ZTpob3Jpem9udGFsOnJlcGxhY2lu
Z1Njcm9sbGVySW1wOildCisgICAgICAgICAgICAgICAgICAgICAgICYmIFtzY3JvbGxlckltcFBh
aXJDbGFzcyBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2Nyb2xsZXJTdHls
ZSldOworICAgIH0KKyAgICByZXR1cm4gYXBpQXZhaWxhYmxlOworfQorI2VuZGlmCisKK05TU2Ny
b2xsZXJTdHlsZSByZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSB7CisgICAgaWYgKFtOU1Njcm9s
bGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocHJlZmVycmVkU2Nyb2xsZXJTdHlsZSld
KQorICAgICAgICByZXR1cm4gW05TU2Nyb2xsZXIgcHJlZmVycmVkU2Nyb2xsZXJTdHlsZV07Cisg
ICAgcmV0dXJuIE5TU2Nyb2xsZXJTdHlsZUxlZ2FjeTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAppbmRleCA5ODRkZjA4YTIyNjkw
NzMwNGI4YjFmZDkxMGEyOWY5MThkYmViMmFmLi5jZDY0Njg5ZWQxNGJkN2RjNjMzMTAyNDkwY2M3
NzAyNTQxODRlNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsQW5pbWF0b3JNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMuaApAQCAtNDYsOSArNDYsNyBAQCBjbGFzcyBXZWJTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlckRlbGVnYXRlOwogY2xhc3MgV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwog
I2VuZGlmCiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiB0eXBlZGVmIGlkIFNjcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyOwotI2VuZGlmCiAKICNpZiAhRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KQogY2xhc3MgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJDbGllbnQgeyB9OwpAQCAtODksMTMg
Kzg3LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjdGl2ZSgpOwogCi0j
aWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogICAgIHZvaWQgdXBkYXRlU2Nyb2xsZXJTdHlsZSgp
OwogCiAgICAgYm9vbCBzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25zdDsKICAgICB2
b2lkIHN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOwogICAgIHZvaWQgc3RvcFNjcm9sbGJhclBh
aW50VGltZXIoKTsKLSNlbmRpZgogCiAgICAgdm9pZCBzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJl
Y3QoY29uc3QgSW50UmVjdCYpOwogCkBAIC0xMDMsMTQgKzk5LDEyIEBAIHByaXZhdGU6CiAgICAg
UmV0YWluUHRyPGlkPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcjsKICAgICBSZXRhaW5QdHI8V2Vi
U2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVs
ZWdhdGU7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiAgICAgUmV0YWluUHRyPFNjcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyPiBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyOwogICAg
IFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlPiBtX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7CiAgICAgUmV0YWluUHRyPFdlYlNjcm9sbGJh
clBhaW50ZXJEZWxlZ2F0ZT4gbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CiAKICAgICB2b2lk
IGluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JNYWM+
Kik7CiAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JNYWM+IG1faW5pdGlhbFNjcm9sbGJhclBhaW50
VGltZXI7Ci0jZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFu
Z2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KaW5k
ZXggNWUyZDIxMWFkMmRiNjM1OGE2OTUwYzQ3MjgyZGEwMzliMzFlNGY5YS4uOWY1NjMzNTBmMGZj
MmRkOTBiYWYyNjI4Yzg5YTU5MmI3N2YyZWJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgiCiAKICNpbmNsdWRlICJCbG9ja0V4Y2VwdGlvbnMuaCIK
KyNpbmNsdWRlICJFbXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCiAjaW5jbHVkZSAiTlNTY3JvbGxlckltcERldGFpbHMuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybUdlc3R1cmVFdmVudC5oIgpAQCAtNDUsMTQgKzQ2LDE4IEBACiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5U
RVIpCisjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRAorQGludGVyZmFjZSBOU1Byb2Nlc3NJbmZv
IChTY3JvbGxBbmltYXRvck1hY0V4dCkKKy0gKE5TVGltZUludGVydmFsKXN5c3RlbVVwdGltZTsK
K0BlbmQKKyNlbmRpZgorCiBzdGF0aWMgYm9vbCBzdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJv
Z3Jlc3MoKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCBhbGwgcGxh
dGZvcm1zIHRoYXQgc3VwcG9ydCBTY3JvbGxiYXJQYWludGVyIHN1cHBvcnQgdGhpcyBwYXJ0IG9m
IHRoZSBBUEkuCiAgICAgc3RhdGljIGJvb2wgZ2xvYmFsU3VwcG9ydHNVSVN0YXRlVHJhbnNpdGlv
blByb2dyZXNzID0gW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcCIpIGluc3RhbmNl
c1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3Rvcihtb3VzZUVudGVyZWRTY3JvbGxlcildOwogICAg
IHJldHVybiBnbG9iYWxTdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3M7CiB9Ci0jZW5k
aWYKIAogQGludGVyZmFjZSBOU09iamVjdCAoU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGV0YWlscykK
IC0gKGlkKWluaXRXaXRoRGVsZWdhdGU6KGlkKWRlbGVnYXRlOwpAQCAtMTU4LDggKzE2Myw2IEBA
IHN0YXRpYyBOU1NpemUgYWJzKE5TU2l6ZSBzaXplKQogCiBAZW5kCiAKLSNpZiBVU0UoU0NST0xM
QkFSX1BBSU5URVIpCi0KIEBpbnRlcmZhY2UgV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJE
ZWxlZ2F0ZSA6IE5TT2JqZWN0CiB7CiAgICAgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWMqIF9h
bmltYXRvcjsKQEAgLTM5NCw2ICszOTcsNyBAQCBlbnVtIEZlYXR1cmVUb0FuaW1hdGUgewogICAg
IHJldHVybiBhUmVjdDsKIH0KIAorI2lmICFQTEFURk9STShDSFJPTUlVTSkKIC0gKENBTGF5ZXIg
KilsYXllcgogewogICAgIGlmICghX2FuaW1hdG9yKQpAQCAtNDA1LDYgKzQwOSw3IEBAIGVudW0g
RmVhdHVyZVRvQW5pbWF0ZSB7CiAgICAgc3RhdGljIENBTGF5ZXIgKmR1bW15TGF5ZXIgPSBbW0NB
TGF5ZXIgYWxsb2NdIGluaXRdOwogICAgIHJldHVybiBkdW1teUxheWVyOwogfQorI2VuZGlmCiAK
IC0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JTY3JvbGxlckltcDooaWQpc2Ny
b2xsZXJJbXAKIHsKQEAgLTU0OCw4ICs1NTMsNiBAQCBlbnVtIEZlYXR1cmVUb0FuaW1hdGUgewog
CiBAZW5kCiAKLSNlbmRpZiAvLyBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNy
ZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCkBAIC01NTcsMTkgKzU2MCwxNSBA
QCBQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYQogICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xs
QW5pbWF0b3JNYWMoc2Nyb2xsYWJsZUFyZWEpKTsKIH0KIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJ
TlRFUikKIHN0YXRpYyBTY3JvbGxiYXJUaGVtZU1hYyogbWFjU2Nyb2xsYmFyVGhlbWUoKQogewog
ICAgIFNjcm9sbGJhclRoZW1lKiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpOwogICAgIHJldHVybiAhc2Nyb2xsYmFyVGhlbWUtPmlzTW9ja1RoZW1lKCkgPyBzdGF0aWNf
Y2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KHNjcm9sbGJhclRoZW1lKSA6IDA7CiB9Ci0jZW5kaWYK
IAogU2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhKiBz
Y3JvbGxhYmxlQXJlYSkKICAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQotI2lm
IFVTRShTQ1JPTExCQVJfUEFJTlRFUikKICAgICAsIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGlt
ZXIodGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZp
cmVkKQotI2VuZGlmCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgICwgbV9zY3JvbGxF
bGFzdGljaXR5Q29udHJvbGxlcih0aGlzKQogICAgICwgbV9zbmFwUnViYmVyQmFuZFRpbWVyKHRo
aXMsICZTY3JvbGxBbmltYXRvck1hYzo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKQpAQCAtNTgx
LDI2ICs1ODAsMjUgQEAgU2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9sbEFuaW1hdG9yTWFjKFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKICAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRl
bGVnYXRlLmFkb3B0TlMoW1tXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxvY10g
aW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7CiAgICAgbV9zY3JvbGxBbmltYXRpb25IZWxw
ZXIuYWRvcHROUyhbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxwZXIi
KSBhbGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
LmdldCgpXSk7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKLSAg
ICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyID0gW1tbTlNDbGFzc0Zyb21TdHJpbmcoQCJO
U1Njcm9sbGVySW1wUGFpciIpIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgW21fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpXTsKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlci5nZXQoKSBzZXRTY3JvbGxlclN0eWxlOndrUmVjb21tZW5kZWRTY3JvbGxlclN0eWxl
KCldOwotCi0gICAgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuYWRvcHROUyhbW1dlYlNjcm9s
bGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7
Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAg
ICAgICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tXZWJT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFu
aW1hdG9yOnRoaXNdKTsKKyAgICAgICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciA9IFtb
W05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcFBhaXIiKSBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBz
ZXREZWxlZ2F0ZTptX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCldOwor
ICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRTY3JvbGxlclN0
eWxlOnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpXTsKKyAgICAgICAgbV9zY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUuYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10g
aW5pdFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7CisgICAgfQogfQogCiBTY3JvbGxBbmltYXRv
ck1hYzo6flNjcm9sbEFuaW1hdG9yTWFjKCkKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIp
Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotICAg
IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07Ci0g
ICAgW21fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJv
eWVkXTsKLSAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxB
bmltYXRvckRlc3Ryb3llZF07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSNlbmRp
ZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgICAg
ICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwor
ICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JE
ZXN0cm95ZWRdOworICAgICAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQo
KSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07CisgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgfQogfQogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGwoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQpAQCAtNzA4LDEzICs3MDYsMTMgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1h
dGlvbihjb25zdCBGbG9hdFBvaW4KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bm90aWZ5UG9z
aXRpb25DaGFuZ2VkKCkKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgLy8gVGhp
cyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgcGFnZSBj
YWNoZSwgYnV0IHRoZSBwYWdlIAotICAgIC8vIGlzbid0IHJlYWxseSBzY3JvbGxpbmcgaW4gdGhh
dCBjYXNlLiBXZSBzaG91bGQgb25seSBwYXNzIHRoZSBtZXNzYWdlIG9uIHRvIHRoZQotICAgIC8v
IFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHdoZW4gd2UncmUgcmVhbGx5IHNjcm9sbGluZyBv
biBhbiBhY3RpdmUgcGFnZS4KLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBh
Z2UoKSkKLSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgY29udGVu
dEFyZWFTY3JvbGxlZF07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpIHsKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBh
Z2UgaXMgZ29pbmcgaW50byB0aGUgcGFnZSBjYWNoZSwgYnV0IHRoZSBwYWdlIAorICAgICAgICAv
LyBpc24ndCByZWFsbHkgc2Nyb2xsaW5nIGluIHRoYXQgY2FzZS4gV2Ugc2hvdWxkIG9ubHkgcGFz
cyB0aGUgbWVzc2FnZSBvbiB0byB0aGUKKyAgICAgICAgLy8gU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIgd2hlbiB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFuIGFjdGl2ZSBwYWdlLgorICAg
ICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKKyAgICAgICAgICAg
IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGNvbnRlbnRBcmVhU2Nyb2xsZWRd
OworICAgIH0KICAgICBTY3JvbGxBbmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7CiB9
CiAKQEAgLTcyMiwxOTggKzcyMCwxNzUgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVu
dEFyZWFXaWxsUGFpbnQoKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNP
bkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRF
UikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBjb250ZW50QXJlYVdp
bGxEcmF3XTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUo
KSkKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgY29udGVudEFy
ZWFXaWxsRHJhd107CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZENv
bnRlbnRBcmVhKCkgY29uc3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3Rp
dmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0g
ICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VFbnRlcmVkQ29udGVu
dEFyZWFdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgp
KQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBtb3VzZUVudGVy
ZWRDb250ZW50QXJlYV07CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVk
Q29udGVudEFyZWEoKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFj
dGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikK
LSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBtb3VzZUV4aXRlZENvbnRl
bnRBcmVhXTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUo
KSkKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VFeGl0
ZWRDb250ZW50QXJlYV07CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhKCkgY29uc3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25B
Y3RpdmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIp
Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VNb3ZlZEluQ29u
dGVudEFyZWFdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJs
ZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBtb3VzZU1v
dmVkSW5Db250ZW50QXJlYV07CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50
ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKIHsKICAgICBpZiAoIXNj
cm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBV
U0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgaWYgKCFzdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9u
UHJvZ3Jlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyog
dGhlbWUgPSBtYWNTY3JvbGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFNjcm9sbGJhclBhaW50ZXIg
cGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgICAg
IFtwYWludGVyIG1vdXNlRW50ZXJlZFNjcm9sbGVyXTsKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVy
bGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c1VJU3RhdGVUcmFuc2l0
aW9uUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKFNjcm9sbGJh
clRoZW1lTWFjKiB0aGVtZSA9IG1hY1Njcm9sbGJhclRoZW1lKCkpIHsKKyAgICAgICAgICAgIFNj
cm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9s
bGJhcik7CisgICAgICAgICAgICBbcGFpbnRlciBtb3VzZUVudGVyZWRTY3JvbGxlcl07CisgICAg
ICAgIH0KICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2VuZGlm
CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNP
bkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRF
UikKLSAgICBpZiAoIXN1cHBvcnRzVUlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzcygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKFNjcm9sbGJhclRoZW1lTWFjKiB0aGVtZSA9IG1hY1Njcm9sbGJh
clRoZW1lKCkpIHsKLSAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gdGhlbWUtPnBh
aW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgW3BhaW50ZXIgbW91c2VFeGl0
ZWRTY3JvbGxlcl07CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7
CisgICAgICAgIGlmICghc3VwcG9ydHNVSVN0YXRlVHJhbnNpdGlvblByb2dyZXNzKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyogdGhlbWUgPSBt
YWNTY3JvbGxiYXJUaGVtZSgpKSB7CisgICAgICAgICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50
ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICAgICAg
W3BhaW50ZXIgbW91c2VFeGl0ZWRTY3JvbGxlcl07CisgICAgICAgIH0KICAgICB9Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OndpbGxTdGFydExpdmVSZXNpemUoKQogewogICAgIGlmICghc2Nyb2xsYWJsZUFy
ZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExC
QVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzdGFy
dExpdmVSZXNpemVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWls
YWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzdGFy
dExpdmVSZXNpemVdOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50c1Jlc2l6
ZWQoKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2Uo
KSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9z
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBjb250ZW50QXJlYURpZFJlc2l6ZV07Ci0j
ZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAg
IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGNvbnRlbnRBcmVhRGlkUmVzaXpl
XTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUoKQogewog
ICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0
dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSBlbmRMaXZlUmVzaXplXTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9s
bGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkgZW5kTGl2ZVJlc2l6ZV07CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJl
YSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJB
Ul9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHdpbmRv
d09yZGVyZWRJbl07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxh
YmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHdpbmRv
d09yZGVyZWRJbl07CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlk
SGlkZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFn
ZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFtt
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHdpbmRvd09yZGVyZWRPdXRdOwotI2Vu
ZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBb
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSB3aW5kb3dPcmRlcmVkT3V0XTsKIH0K
IAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QK
IHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAg
IHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXIuZ2V0KCkgYmVnaW5TY3JvbGxHZXN0dXJlXTsKLSNlbmRpZgorICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgYmVnaW5TY3JvbGxHZXN0dXJlXTsKIH0KIAogdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0j
aWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyLmdldCgpIGVuZFNjcm9sbEdlc3R1cmVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFy
T3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlci5nZXQoKSBlbmRTY3JvbGxHZXN0dXJlXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0jaWYg
VVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyogdGhlbWUg
PSBtYWNTY3JvbGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRl
ciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgICAgIFtwYWlu
dGVyIHNldERlbGVnYXRlOm1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsKLSAgICAg
ICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0VmVydGljYWxTY3JvbGxl
ckltcDpwYWludGVyXTsKLSAgICAgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6
ZSgpKQotICAgICAgICAgICAgW3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOworICAgIGlmIChpc1Nj
cm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBpZiAoU2Nyb2xsYmFyVGhl
bWVNYWMqIHRoZW1lID0gbWFjU2Nyb2xsYmFyVGhlbWUoKSkgeworICAgICAgICAgICAgU2Nyb2xs
YmFyUGFpbnRlciBwYWludGVyID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFy
KTsKKyAgICAgICAgICAgIFtwYWludGVyIHNldERlbGVnYXRlOm1fc2Nyb2xsYmFyUGFpbnRlckRl
bGVnYXRlLmdldCgpXTsKKyAgICAgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
LmdldCgpIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6cGFpbnRlcl07CisgICAgICAgICAgICBpZiAo
c2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCisgICAgICAgICAgICAgICAgW3BhaW50
ZXIgc2V0S25vYkFscGhhOjFdOworICAgICAgICB9CiAgICAgfQotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRpZgogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp3
aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0jaWYg
VVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIGlmIChTY3JvbGxiYXJUaGVtZU1hYyogdGhlbWUg
PSBtYWNTY3JvbGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRl
ciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgICAgIFtwYWlu
dGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyLmdldCgpIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmlsXTsKKyAgICBpZiAoaXNTY3JvbGxi
YXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKFNjcm9sbGJhclRoZW1lTWFj
KiB0aGVtZSA9IG1hY1Njcm9sbGJhclRoZW1lKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbGJhclBh
aW50ZXIgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Cisg
ICAgICAgICAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICAgICAgW21fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0VmVydGljYWxTY3JvbGxlckltcDpuaWxd
OworICAgICAgICB9CiAgICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsK
LSNlbmRpZgogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Ny
b2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRF
UikKLSAgICBpZiAoU2Nyb2xsYmFyVGhlbWVNYWMqIHRoZW1lID0gbWFjU2Nyb2xsYmFyVGhlbWUo
KSkgewotICAgICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZv
clNjcm9sbGJhcihzY3JvbGxiYXIpOwotICAgICAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTptX3Nj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyLmdldCgpIHNldEhvcml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKLSAg
ICAgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQotICAgICAgICAgICAg
W3BhaW50ZXIgc2V0S25vYkFscGhhOjFdOworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElB
dmFpbGFibGUoKSkgeworICAgICAgICBpZiAoU2Nyb2xsYmFyVGhlbWVNYWMqIHRoZW1lID0gbWFj
U2Nyb2xsYmFyVGhlbWUoKSkgeworICAgICAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVy
ID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIFtw
YWludGVyIHNldERlbGVnYXRlOm1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsKKyAg
ICAgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldEhvcml6b250
YWxTY3JvbGxlckltcDpwYWludGVyXTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSgp
LT5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6
MV07CisgICAgICAgIH0KICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIp
OwotI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1vdmVIb3Jpem9u
dGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotI2lmIFVTRShTQ1JPTExCQVJf
UEFJTlRFUikKLSAgICBpZiAoU2Nyb2xsYmFyVGhlbWVNYWMqIHRoZW1lID0gbWFjU2Nyb2xsYmFy
VGhlbWUoKSkgewotICAgICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSB0aGVtZS0+cGFp
bnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwotICAgICAgICBbcGFpbnRlciBzZXREZWxlZ2F0
ZTpuaWxdOwotICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRI
b3Jpem9udGFsU2Nyb2xsZXJJbXA6bmlsXTsKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJ
QXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKFNjcm9sbGJhclRoZW1lTWFjKiB0aGVtZSA9IG1h
Y1Njcm9sbGJhclRoZW1lKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRl
ciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgICAgICBb
cGFpbnRlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOm5pbF07CisgICAgICAg
IH0KICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2VuZGlmCiB9
CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNhbmNlbEFuaW1hdGlvbnMoKQogewogICAgIG1f
aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IGZhbHNlOwogCi0jaWYgVVNFKFNDUk9MTEJBUl9Q
QUlOVEVSKQotICAgIGlmIChzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSkKLSAgICAgICAg
c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUuZ2V0KCkgY2FuY2VsQW5pbWF0aW9uc107Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJP
dmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJ
c0FjdGl2ZSgpKQorICAgICAgICAgICAgc3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyAgICAg
ICAgW21fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIGNhbmNlbEFuaW1hdGlvbnNdOwor
ICAgIH0KIH0KIAogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKQEAgLTEyOTIsNiArMTI2Nyw5
IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmVuZFNjcm9sbEdlc3R1cmUoKQogCiB2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpzbmFwUnViYmVyQmFuZCgpCiB7CisgICAgaWYgKCFpc1Njcm9sbGJh
ck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgQ0ZUaW1lSW50
ZXJ2YWwgdGltZURlbHRhID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRp
bWVdIC0gbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tX2xhc3RNb21lbnR1bVNjcm9sbFRp
bWVzdGFtcDsKICAgICBpZiAobV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tX2xhc3RNb21l
bnR1bVNjcm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2NpdHlaZXJvaW5n
VGltZW91dCkKICAgICAgICAgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tX21vbWVudHVt
VmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKQEAgLTE0MDEsMTUgKzEzNzksMTcgQEAgdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1h
dG9yTWFjPiopCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNldElzQWN0aXZlKCkKIHsKLSNp
ZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgaWYgKG5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0
ZSgpKQotICAgICAgICB1cGRhdGVTY3JvbGxlclN0eWxlKCk7Ci0jZW5kaWYKKyAgICBpZiAoaXNT
Y3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKG5lZWRzU2Nyb2xs
ZXJTdHlsZVVwZGF0ZSgpKQorICAgICAgICAgICAgdXBkYXRlU2Nyb2xsZXJTdHlsZSgpOworICAg
IH0KIH0KIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OnVwZGF0ZVNjcm9sbGVyU3R5bGUoKQogeworICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5
QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICghc2Nyb2xsYWJsZUFy
ZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkgewogICAgICAgICBzZXROZWVkc1Njcm9sbGVyU3R5bGVV
cGRhdGUodHJ1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0ODMsMTIgKzE0NjMsMTMgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKQogCiB2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRpbWVyPFNj
cm9sbEFuaW1hdG9yTWFjPiopCiB7Ci0gICAgLy8gVG8gZm9yY2UgdGhlIHNjcm9sbGJhcnMgdG8g
Zmxhc2gsIHdlIGhhdmUgdG8gY2FsbCBoaWRlIGZpcnN0LiBPdGhlcndpc2UsIHRoZSBTY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlcgotICAgIC8vIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHNjcm9sbGJh
cnMgYXJlIGFscmVhZHkgc2hvd2luZyBhbmQgYmFpbCBlYXJseS4KLSAgICBbbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlci5nZXQoKSBoaWRlT3ZlcmxheVNjcm9sbGVyc107Ci0gICAgW21fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgZmxhc2hTY3JvbGxlcnNdOworICAgIGlmIChp
c1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICAvLyBUbyBmb3JjZSB0
aGUgc2Nyb2xsYmFycyB0byBmbGFzaCwgd2UgaGF2ZSB0byBjYWxsIGhpZGUgZmlyc3QuIE90aGVy
d2lzZSwgdGhlIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyCisgICAgICAgIC8vIG1pZ2h0IHRo
aW5rIHRoYXQgdGhlIHNjcm9sbGJhcnMgYXJlIGFscmVhZHkgc2hvd2luZyBhbmQgYmFpbCBlYXJs
eS4KKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgaGlkZU92ZXJs
YXlTY3JvbGxlcnNdOworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQo
KSBmbGFzaFNjcm9sbGVyc107CisgICAgfQogfQotI2VuZGlmCiAKIHZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3JvbGxl
clRodW1iKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bEVsYXN0aWNpdHlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaAppbmRleCBiNjBiNDY0ZDgyMmJmMDY4NmIwNDYyZTQz
ZmY1NDgxOTczMGNlODllLi4zYzU2OTJjNGUyYmJjN2IwYjc0MzI2MDhlMWY0Y2FiZDVjNzVkMWIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxh
c3RpY2l0eUNvbnRyb2xsZXIuaApAQCAtMjgsOCArMjgsOCBAQAogCiAjaWYgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQogCi0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxi
YXJUaGVtZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1l
TWFjLmgKaW5kZXggMzk3MmNjNGY0MmM1YjBiN2IzNTViNTVjNGYyOTE0MTY5ZGUxMjY0ZC4uMDFh
ODNmMjhmYTRkNDhkOWQ0ZDZhYzA0ODc4ZjRiMzJiM2JiMDhjOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmgKQEAgLTI4LDkgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmgiCiAKLSNpZiBVU0UoU0NST0xM
QkFSX1BBSU5URVIpCiB0eXBlZGVmIGlkIFNjcm9sbGJhclBhaW50ZXI7Ci0jZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OSwxMCArNTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCB1
bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciopOwogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlO
VEVSKQogICAgIHZvaWQgc2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqLCBTY3Jv
bGxiYXJQYWludGVyKTsKICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXJGb3JTY3JvbGxiYXIo
U2Nyb2xsYmFyKik7Ci0jZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBoYXNC
dXR0b25zKFNjcm9sbGJhciopOwpAQCAtNzgsNiArNzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAg
ICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgdmlydHVhbCBib29sIHNob3VsZERyYWdEb2N1bWVudElu
c3RlYWRPZlRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAg
IGludCBzY3JvbGxiYXJQYXJ0VG9ISVByZXNzZWRTdGF0ZShTY3JvbGxiYXJQYXJ0KTsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVt
ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5t
bQppbmRleCBkNzgyYjViOTVkNGU5NTJhZTc0MThjNmU2YTdiZDVlZjYzNjVhMTczLi5mMDJlOTVm
MGQ5MmI5Y2Y3NjQ3YzJmZWY0MTQ5MTI0NDlhOGZiNzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCkBAIC00NSwxMSArNDUsNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgVVNF
KFNDUk9MTEJBUl9QQUlOVEVSKQogdHlwZWRlZiBIYXNoTWFwPFNjcm9sbGJhciosIFJldGFpblB0
cjxTY3JvbGxiYXJQYWludGVyPiA+IFNjcm9sbGJhclBhaW50ZXJNYXA7Ci0jZWxzZQotdHlwZWRl
ZiBIYXNoU2V0PFNjcm9sbGJhcio+IFNjcm9sbGJhclBhaW50ZXJNYXA7Ci0jZW5kaWYKIAogc3Rh
dGljIFNjcm9sbGJhclBhaW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCiB7CkBAIC03NSwxOCArNzEs
MTcgQEAgc3RhdGljIFNjcm9sbGJhclBhaW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNhdGlvbik7CiAKKyAgICBTY3JvbGxiYXJUaGVtZSog
dGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKKyAgICBpZiAodGhlbWUtPmlzTW9ja1Ro
ZW1lKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1l
TWFjKj4oU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkpLT5wcmVmZXJlbmNlc0NoYW5nZWQoKTsKICAg
ICBpZiAoc2Nyb2xsYmFyTWFwKCktPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFNj
cm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHNjcm9sbGJhck1hcCgpLT5lbmQoKTsK
ICAgICBmb3IgKFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYmFyTWFw
KCktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRF
UikKICAgICAgICAgaXQtPmZpcnN0LT5zdHlsZUNoYW5nZWQoKTsKICAgICAgICAgaXQtPmZpcnN0
LT5pbnZhbGlkYXRlKCk7Ci0jZWxzZQotICAgICAgICAoKml0KS0+c3R5bGVDaGFuZ2VkKCk7Ci0g
ICAgICAgICgqaXQpLT5pbnZhbGlkYXRlKCk7Ci0jZW5kaWYKICAgICB9CiB9CiAKQEAgLTk0LDYg
Kzg5LDEwIEBAIHN0YXRpYyBTY3JvbGxiYXJQYWludGVyTWFwKiBzY3JvbGxiYXJNYXAoKQogewog
ICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwogCisgICAgU2Nyb2xsYmFyVGhl
bWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7CisgICAgaWYgKHRoZW1lLT5pc01v
Y2tUaGVtZSgpKQorICAgICAgICByZXR1cm47CisKICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJU
aGVtZU1hYyo+KFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpKS0+cHJlZmVyZW5jZXNDaGFuZ2VkKCk7
CiB9CiAKQEAgLTEwNywyMiArMTA2LDIyIEBAIHN0YXRpYyBTY3JvbGxiYXJQYWludGVyTWFwKiBz
Y3JvbGxiYXJNYXAoKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oQ0hS
T01JVU0pCiBTY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKIHsK
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNjcm9sbGJhclRoZW1lTWFjLCB0aGVtZSwgKCkpOwog
ICAgIHJldHVybiAmdGhlbWU7CiB9CisjZW5kaWYKIAogLy8gRklYTUU6IEdldCB0aGVzZSBudW1i
ZXJzIGZyb20gQ29yZVVJLgogc3RhdGljIGludCBjUmVhbEJ1dHRvbkxlbmd0aFtdID0geyAyOCwg
MjEgfTsKIHN0YXRpYyBpbnQgY0J1dHRvbkhpdEluc2V0W10gPSB7IDMsIDIgfTsKIC8vIGNSZWFs
QnV0dG9uTGVuZ3RoIC0gY0J1dHRvbkluc2V0CiBzdGF0aWMgaW50IGNCdXR0b25MZW5ndGhbXSA9
IHsgMTQsIDEwIH07Ci0jaWYgIVVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHN0YXRpYyBpbnQgY1Nj
cm9sbGJhclRoaWNrbmVzc1tdID0geyAxNSwgMTEgfTsKIHN0YXRpYyBpbnQgY0J1dHRvbkluc2V0
W10gPSB7IDE0LCAxMSB9Owogc3RhdGljIGludCBjVGh1bWJNaW5MZW5ndGhbXSA9IHsgMjYsIDIw
IH07Ci0jZW5kaWYKIAogc3RhdGljIGludCBjT3V0ZXJCdXR0b25MZW5ndGhbXSA9IHsgMTYsIDE0
IH07IC8vIFRoZSBvdXRlciBidXR0b24gaW4gYSBkb3VibGUgYnV0dG9uIHBhaXIgaXMgYSBiaXQg
YmlnZ2VyLgogc3RhdGljIGludCBjT3V0ZXJCdXR0b25PdmVybGFwID0gMjsKQEAgLTEzMSwxNyAr
MTMwLDEzIEBAIHN0YXRpYyBmbG9hdCBnSW5pdGlhbEJ1dHRvbkRlbGF5ID0gMC41ZjsKIHN0YXRp
YyBmbG9hdCBnQXV0b3Njcm9sbEJ1dHRvbkRlbGF5ID0gMC4wNWY7CiBzdGF0aWMgYm9vbCBnSnVt
cE9uVHJhY2tDbGljayA9IGZhbHNlOwogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotc3Rh
dGljIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgZ0J1dHRvblBsYWNlbWVudCA9IFNjcm9sbGJh
ckJ1dHRvbnNOb25lOwotI2Vsc2UKIHN0YXRpYyBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGdC
dXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zRG91YmxlRW5kOwotI2VuZGlmCiAKIHN0
YXRpYyB2b2lkIHVwZGF0ZUFycm93UGxhY2VtZW50KCkKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BB
SU5URVIpCi0gICAgcmV0dXJuOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQ
SUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm47CisKICAgICBOU1N0cmluZyAqYnV0dG9uUGxh
Y2VtZW50ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9y
S2V5OkAiQXBwbGVTY3JvbGxCYXJWYXJpYW50Il07CiAgICAgaWYgKFtidXR0b25QbGFjZW1lbnQg
aXNFcXVhbFRvU3RyaW5nOkAiU2luZ2xlIl0pCiAgICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBT
Y3JvbGxiYXJCdXR0b25zU2luZ2xlOwpAQCAtMTU3LDE1ICsxNTIsMTUgQEAgc3RhdGljIHZvaWQg
dXBkYXRlQXJyb3dQbGFjZW1lbnQoKQogCiB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjpyZWdpc3Rl
clNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BB
SU5URVIpCi0gICAgYm9vbCBpc0hvcml6b250YWwgPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICBTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBh
aW50ZXIgPSBbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVySW1wIikgc2Nyb2xsZXJJbXBX
aXRoU3R5bGU6d2tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSBjb250cm9sU2l6ZTooTlNDb250
cm9sU2l6ZSlzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkgaG9yaXpvbnRhbDppc0hvcml6b250YWwg
cmVwbGFjaW5nU2Nyb2xsZXJJbXA6bmlsXTsKLSAgICBzY3JvbGxiYXJNYXAoKS0+YWRkKHNjcm9s
bGJhciwgc2Nyb2xsYmFyUGFpbnRlcik7Ci0gICAgdXBkYXRlRW5hYmxlZFN0YXRlKHNjcm9sbGJh
cik7Ci0gICAgdXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKHNjcm9sbGJhcik7Ci0jZWxzZQot
ICAgIHNjcm9sbGJhck1hcCgpLT5hZGQoc2Nyb2xsYmFyKTsKLSNlbmRpZgorICAgIGlmIChpc1Nj
cm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBib29sIGlzSG9yaXpvbnRh
bCA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOworICAg
ICAgICBTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIgPSBbTlNDbGFzc0Zyb21TdHJp
bmcoQCJOU1Njcm9sbGVySW1wIikgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6cmVjb21tZW5kZWRTY3Jv
bGxlclN0eWxlKCkgY29udHJvbFNpemU6KE5TQ29udHJvbFNpemUpc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpIGhvcml6b250YWw6aXNIb3Jpem9udGFsIHJlcGxhY2luZ1Njcm9sbGVySW1wOm5pbF07
CisgICAgICAgIHNjcm9sbGJhck1hcCgpLT5hZGQoc2Nyb2xsYmFyLCBzY3JvbGxiYXJQYWludGVy
KTsKKyAgICAgICAgdXBkYXRlRW5hYmxlZFN0YXRlKHNjcm9sbGJhcik7CisgICAgICAgIHVwZGF0
ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHNjcm9sbGJhck1hcCgpLT5hZGQoc2Nyb2xsYmFyLCBuaWwpOworICAgIH0KIH0KIAogdm9pZCBT
Y3JvbGxiYXJUaGVtZU1hYzo6dW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
cikKQEAgLTE3Myw3ICsxNjgsNiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1bnJlZ2lzdGVy
U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogICAgIHNjcm9sbGJhck1hcCgpLT5yZW1v
dmUoc2Nyb2xsYmFyKTsKIH0KIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHZvaWQgU2Ny
b2xsYmFyVGhlbWVNYWM6OnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIFNjcm9sbGJhclBhaW50ZXIgbmV3UGFpbnRlcikKIHsKICAgICBzY3JvbGxiYXJNYXAo
KS0+c2V0KHNjcm9sbGJhciwgbmV3UGFpbnRlcik7CkBAIC0xODUsMTMgKzE3OSwxMyBAQCBTY3Jv
bGxiYXJQYWludGVyIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQogewogICAgIHJldHVybiBzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9s
bGJhcikuZ2V0KCk7CiB9Ci0jZW5kaWYKIAogU2Nyb2xsYmFyVGhlbWVNYWM6OlNjcm9sbGJhclRo
ZW1lTWFjKCkKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKICAgICBpZiAoIWluaXRp
YWxpemVkKSB7CiAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgZ0J1dHRvblBs
YWNlbWVudCA9IGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpID8gU2Nyb2xsYmFyQnV0
dG9uc05vbmUgOiBTY3JvbGxiYXJCdXR0b25zRG91YmxlRW5kOwogICAgICAgICBbV2ViU2Nyb2xs
YmFyUHJlZnNPYnNlcnZlciByZWdpc3RlckFzT2JzZXJ2ZXJdOwogICAgICAgICBwcmVmZXJlbmNl
c0NoYW5nZWQoKTsKICAgICB9CkBAIC0yMTMsMjYgKzIwNywyMyBAQCB2b2lkIFNjcm9sbGJhclRo
ZW1lTWFjOjpwcmVmZXJlbmNlc0NoYW5nZWQoKQogCiBpbnQgU2Nyb2xsYmFyVGhlbWVNYWM6OnNj
cm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKIHsKLSNp
ZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgU2Nyb2xsYmFyUGFpbnRlciBzY3JvbGxiYXJQ
YWludGVyID0gW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcCIpIHNjcm9sbGVySW1w
V2l0aFN0eWxlOndrUmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgY29udHJvbFNpemU6Y29udHJv
bFNpemUgaG9yaXpvbnRhbDpOTyByZXBsYWNpbmdTY3JvbGxlckltcDpuaWxdOwotICAgIHJldHVy
biBbc2Nyb2xsYmFyUGFpbnRlciB0cmFja0JveFdpZHRoXTsKLSNlbHNlCi0gICAgcmV0dXJuIGNT
Y3JvbGxiYXJUaGlja25lc3NbY29udHJvbFNpemVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7CisgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgc2Ny
b2xsYmFyUGFpbnRlciA9IFtOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAiKSBzY3Jv
bGxlckltcFdpdGhTdHlsZTpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSBjb250cm9sU2l6ZTpj
b250cm9sU2l6ZSBob3Jpem9udGFsOk5PIHJlcGxhY2luZ1Njcm9sbGVySW1wOm5pbF07CisgICAg
ICAgIHJldHVybiBbc2Nyb2xsYmFyUGFpbnRlciB0cmFja0JveFdpZHRoXTsKKyAgICB9IGVsc2UK
KyAgICAgICAgcmV0dXJuIGNTY3JvbGxiYXJUaGlja25lc3NbY29udHJvbFNpemVdOwogfQogCiBi
b29sIFNjcm9sbGJhclRoZW1lTWFjOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdAogewot
I2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICByZXR1cm4gd2tSZWNvbW1lbmRlZFNjcm9s
bGVyU3R5bGUoKSA9PSBOU1Njcm9sbGVyU3R5bGVPdmVybGF5OwotI2Vsc2UKLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkp
CisgICAgICAgIHJldHVybiByZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSA9PSBOU1Njcm9sbGVy
U3R5bGVPdmVybGF5OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lk
IFNjcm9sbGJhclRoZW1lTWFjOjp1cGRhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogICAgIFNjcm9sbGJh
clBhaW50ZXIgcGFpbnRlciA9IHBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKICAgICBz
d2l0Y2ggKHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsYmFyT3ZlcmxheVN0eWxl
KCkpIHsKICAgICBjYXNlIFNjcm9sbGJhck92ZXJsYXlTdHlsZURlZmF1bHQ6CkBAIC0yNDUsOSAr
MjM2LDYgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6dXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogICAgICAgICBbcGFpbnRlciBzZXRLbm9iU3R5bGU6
TlNTY3JvbGxlcktub2JTdHlsZUxpZ2h0XTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRpZgogfQogCiBkb3VibGUgU2Nyb2xs
YmFyVGhlbWVNYWM6OmluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpCkBAIC0yNjcsNyArMjU1
LDcgQEAgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBTY3JvbGxiYXJUaGVtZU1hYzo6YnV0dG9u
c1BsYWNlbWVudCgpIGNvbnN0CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6Omhhc0J1dHRvbnMo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgp
ICYmIGdCdXR0b25QbGFjZW1lbnQgIT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUKKyAgICByZXR1cm4g
c2Nyb2xsYmFyLT5lbmFibGVkKCkgJiYgYnV0dG9uc1BsYWNlbWVudCgpICE9IFNjcm9sbGJhckJ1
dHRvbnNOb25lCiAgICAgICAgICAgICAgJiYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyCiAgICAgICAgICAgICAgPyBzY3JvbGxiYXItPndpZHRoKCkKICAg
ICAgICAgICAgICA6IHNjcm9sbGJhci0+aGVpZ2h0KCkpID49IDIgKiAoY1JlYWxCdXR0b25MZW5n
dGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSAtIGNCdXR0b25IaXRJbnNldFtzY3JvbGxiYXIt
PmNvbnRyb2xTaXplKCldKTsKQEAgLTI3NiwxMyArMjY0LDEyIEBAIGJvb2wgU2Nyb2xsYmFyVGhl
bWVNYWM6Omhhc0J1dHRvbnMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiBib29sIFNjcm9sbGJhclRo
ZW1lTWFjOjpoYXNUaHVtYihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKICAgICBpbnQgbWluTGVu
Z3RoRm9yVGh1bWI7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFNjcm9sbGJhclBh
aW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKTsKLSAg
ICBtaW5MZW5ndGhGb3JUaHVtYiA9IFtwYWludGVyIGtub2JNaW5MZW5ndGhdICsgW3BhaW50ZXIg
dHJhY2tPdmVybGFwRW5kSW5zZXRdICsgW3BhaW50ZXIga25vYk92ZXJsYXBFbmRJbnNldF0KLSAg
ICAgICAgKyAyICogKFtwYWludGVyIHRyYWNrRW5kSW5zZXRdICsgW3BhaW50ZXIga25vYkVuZElu
c2V0XSk7Ci0jZWxzZQotICAgIG1pbkxlbmd0aEZvclRodW1iID0gMiAqIGNCdXR0b25JbnNldFtz
Y3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgY1RodW1iTWluTGVuZ3RoW3Njcm9sbGJhci0+Y29u
dHJvbFNpemUoKV0gKyAxOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2
YWlsYWJsZSgpKSB7CisgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJh
ck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKTsKKyAgICAgICAgbWluTGVuZ3RoRm9yVGh1bWIg
PSBbcGFpbnRlciBrbm9iTWluTGVuZ3RoXSArIFtwYWludGVyIHRyYWNrT3ZlcmxhcEVuZEluc2V0
XSArIFtwYWludGVyIGtub2JPdmVybGFwRW5kSW5zZXRdCisgICAgICAgICAgICArIDIgKiAoW3Bh
aW50ZXIgdHJhY2tFbmRJbnNldF0gKyBbcGFpbnRlciBrbm9iRW5kSW5zZXRdKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbWluTGVuZ3RoRm9yVGh1bWIgPSAyICogY0J1dHRvbkluc2V0W3Njcm9sbGJh
ci0+Y29udHJvbFNpemUoKV0gKyBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6
ZSgpXSArIDE7CiAgICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpICYmIChzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IAogICAgICAgICAgICAgIHNj
cm9sbGJhci0+d2lkdGgoKSA6IAogICAgICAgICAgICAgIHNjcm9sbGJhci0+aGVpZ2h0KCkpID49
IG1pbkxlbmd0aEZvclRodW1iOwpAQCAtNDE5LDExICs0MDYsMTAgQEAgSW50UmVjdCBTY3JvbGxi
YXJUaGVtZU1hYzo6dHJhY2tSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIHBhaW50aW5n
KQogCiBpbnQgU2Nyb2xsYmFyVGhlbWVNYWM6Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXIq
IHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgcmV0dXJuIFtz
Y3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCkga25vYk1pbkxlbmd0aF07Ci0jZWxz
ZQotICAgIHJldHVybiBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXTsK
LSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAg
ICAgcmV0dXJuIFtzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCkga25vYk1pbkxl
bmd0aF07CisgICAgZWxzZQorICAgICAgICByZXR1cm4gY1RodW1iTWluTGVuZ3RoW3Njcm9sbGJh
ci0+Y29udHJvbFNpemUoKV07CiB9CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6OnNob3VsZENl
bnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCkBA
IC00NDAsNyArNDI2LDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6c2hvdWxkRHJhZ0RvY3Vt
ZW50SW5zdGVhZE9mVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGYKICAgICByZXR1cm4gZXZl
bnQuYWx0S2V5KCk7CiB9CiAKLXN0YXRpYyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3Rh
dGUoU2Nyb2xsYmFyUGFydCBwYXJ0KQoraW50IFNjcm9sbGJhclRoZW1lTWFjOjpzY3JvbGxiYXJQ
YXJ0VG9ISVByZXNzZWRTdGF0ZShTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7CiAgICAgc3dpdGNoIChw
YXJ0KSB7CiAgICAgICAgIGNhc2UgQmFja0J1dHRvblN0YXJ0UGFydDoKQEAgLTQ2MCwxNCArNDQ2
LDEwIEBAIHN0YXRpYyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUoU2Nyb2xsYmFy
UGFydCBwYXJ0KQogCiB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1cGRhdGVFbmFibGVkU3RhdGUo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAg
IFtzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCkgc2V0RW5hYmxlZDpzY3JvbGxi
YXItPmVuYWJsZWQoKV07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2Vu
ZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBb
c2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpIHNldEVuYWJsZWQ6c2Nyb2xsYmFy
LT5lbmFibGVkKCldOwogfQogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogc3RhdGljIHZv
aWQgc2Nyb2xsYmFyUGFpbnRlclBhaW50KFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRl
ciwgYm9vbCBlbmFibGVkLCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgQ0dSZWN0
IGZyYW1lUmVjdCkKIHsKICAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRFbmFibGVkOmVuYWJsZWRd
OwpAQCAtNDg5LDQ3ICs0NzEsNDYgQEAgc3RhdGljIHZvaWQgc2Nyb2xsYmFyUGFpbnRlclBhaW50
KFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciwgYm9vbCBlbmFibGUKICAgICBpZiAo
ZW5hYmxlZCkKICAgICAgICAgW3Njcm9sbGJhclBhaW50ZXIgZHJhd0tub2JdOwogfQotI2VuZGlm
CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCiB7Ci0j
aWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIGZsb2F0IHZhbHVlID0gMDsKLSAgICBmbG9h
dCBvdmVyaGFuZyA9IDA7CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgp
KSB7CisgICAgICAgIGZsb2F0IHZhbHVlID0gMDsKKyAgICAgICAgZmxvYXQgb3ZlcmhhbmcgPSAw
OwogCi0gICAgaWYgKHNjcm9sbGJhci0+Y3VycmVudFBvcygpIDwgMCkgewotICAgICAgICAvLyBT
Y3JvbGxlZCBwYXN0IHRoZSB0b3AuCi0gICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgb3Zlcmhh
bmcgPSAtc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCk7Ci0gICAgfSBlbHNlIGlmIChzY3JvbGxiYXIt
PnZpc2libGVTaXplKCkgKyBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSA+IHNjcm9sbGJhci0+dG90
YWxTaXplKCkpIHsKLSAgICAgICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgYm90dG9tLgotICAgICAg
ICB2YWx1ZSA9IDE7Ci0gICAgICAgIG92ZXJoYW5nID0gc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkg
KyBzY3JvbGxiYXItPnZpc2libGVTaXplKCkgLSBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIFdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBzY3JvbGxhYmxl
IGFyZWEuCi0gICAgICAgIGludCBtYXhpbXVtID0gc2Nyb2xsYmFyLT5tYXhpbXVtKCk7Ci0gICAg
ICAgIGlmIChtYXhpbXVtID4gMCkKLSAgICAgICAgICAgIHZhbHVlID0gc2Nyb2xsYmFyLT5jdXJy
ZW50UG9zKCkgLyBtYXhpbXVtOwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChzY3JvbGxiYXIt
PmN1cnJlbnRQb3MoKSA8IDApIHsKKyAgICAgICAgICAgIC8vIFNjcm9sbGVkIHBhc3QgdGhlIHRv
cC4KICAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgICAgIG92ZXJoYW5nID0gLXNjcm9s
bGJhci0+Y3VycmVudFBvcygpOworICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbGJhci0+dmlzaWJs
ZVNpemUoKSArIHNjcm9sbGJhci0+Y3VycmVudFBvcygpID4gc2Nyb2xsYmFyLT50b3RhbFNpemUo
KSkgeworICAgICAgICAgICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgYm90dG9tLgorICAgICAgICAg
ICAgdmFsdWUgPSAxOworICAgICAgICAgICAgb3ZlcmhhbmcgPSBzY3JvbGxiYXItPmN1cnJlbnRQ
b3MoKSArIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSAtIHNjcm9sbGJhci0+dG90YWxTaXplKCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXaXRoaW4gdGhlIGJvdW5kcyBvZiB0
aGUgc2Nyb2xsYWJsZSBhcmVhLgorICAgICAgICAgICAgaW50IG1heGltdW0gPSBzY3JvbGxiYXIt
Pm1heGltdW0oKTsKKyAgICAgICAgICAgIGlmIChtYXhpbXVtID4gMCkKKyAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHNjcm9sbGJhci0+Y3VycmVudFBvcygpIC8gbWF4aW11bTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIFNjcm9sbEFuaW1hdG9yTWFjKiBzY3JvbGxBbmltYXRvciA9IHN0YXRpY19jYXN0PFNj
cm9sbEFuaW1hdG9yTWFjKj4oc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxBbmlt
YXRvcigpKTsKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPnNldElzRHJhd2luZ0ludG9MYXllcihj
b250ZXh0LT5pc0NBTGF5ZXJDb250ZXh0KCkpOworICAgICAgICAKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC0+
Y2xpcChkYW1hZ2VSZWN0KTsKKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHNjcm9sbGJhci0+
ZnJhbWVSZWN0KCkueCgpLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKSk7CisgICAgICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7CisgICAgICAg
IHNjcm9sbGJhclBhaW50ZXJQYWludChzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhci0+ZW5hYmxlZCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PENHRmxvYXQ+KHNjcm9sbGJhci0+dmlzaWJs
ZVNpemUoKSkgLSBvdmVyaGFuZykgLyBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKworICAgICAg
ICBzY3JvbGxBbmltYXRvci0+c2V0SXNEcmF3aW5nSW50b0xheWVyKGZhbHNlKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQotICAgIAotICAgIFNjcm9sbEFuaW1hdG9yTWFjKiBzY3JvbGxB
bmltYXRvciA9IHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yTWFjKj4oc2Nyb2xsYmFyLT5zY3Jv
bGxhYmxlQXJlYSgpLT5zY3JvbGxBbmltYXRvcigpKTsKLSAgICBzY3JvbGxBbmltYXRvci0+c2V0
SXNEcmF3aW5nSW50b0xheWVyKGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7Ci0gICAgCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKLSAgICBj
b250ZXh0LT5jbGlwKGRhbWFnZVJlY3QpOwotICAgIGNvbnRleHQtPnRyYW5zbGF0ZShzY3JvbGxi
YXItPmZyYW1lUmVjdCgpLngoKSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkpOwotICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7Ci0gICAgc2Ny
b2xsYmFyUGFpbnRlclBhaW50KHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmVuYWJsZWQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAtIG92ZXJo
YW5nKSAvIHNjcm9sbGJhci0+dG90YWxTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7Ci0KLSAgICBzY3JvbGxBbmltYXRvci0+c2V0SXNE
cmF3aW5nSW50b0xheWVyKGZhbHNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgogCiAgICAg
SElUaGVtZVRyYWNrRHJhd0luZm8gdHJhY2tJbmZvOwogICAgIHRyYWNrSW5mby52ZXJzaW9uID0g
MDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119944</attachid>
            <date>2011-12-19 16:29:58 -0800</date>
            <delta_ts>2011-12-19 16:52:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61144-20111219162957.patch</filename>
            <type>text/plain</type>
            <size>152733</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDExLTEyLTE5ICBTYWlsZXNo
IEFncmF3YWwgPHNhaWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1lcmdlIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMubW0gYmFjayB0byBTY3JvbGxBbmltYXRvck1hYworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExNDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBCZXRoIERha2luLgorCisgICAgICAgIEF0IGEgaGlnaCBsZXZlbCB0aGUgbWFpbiBj
aGFuZ2VzIGFyZToKKyAgICAgICAgICAgIC0gcmVwbGFjZSAjaWZkZWZzIGluIFNjcm9sbEFuaW1h
dG9yTWFjIGFuZCBTY3JvbGxiYXJUaGVtZU1hYyB3aXRoIHJ1biB0aW1lIGNoZWNrcworICAgICAg
ICAgICAgLSBkZWxldGUgZHVwbGljYXRlIGNvZGUgaW4gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yy4gS2VlcCB0aGUgcGFpbnQgY29kZSBzaW5jZSBpdCBkb2VzIHRpY2ttYXJrcyBhbmQgU0tJQSBz
dHVmZi4KKyAgICAgICAgICAgIC0gZGVsZXRlIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMgc2lu
Y2UgU2Nyb2xsQW5pbWF0b3JNYWMgZG9lcyB0aGUgZXhhY3Qgc2FtZSB0aGluZworICAgICAgICAg
ICAgLSBkZWxldGUgU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjIHNpbmNlIE5T
U2Nyb2xsZXJJbXBEZXRhaWxzIGRvZXMgdGhlIHNhbWUgdGhpbmcKKworICAgICAgICBObyBuZXcg
dGVzdHMuIEp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRp
ZXNDaHJvbWl1bU1hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lQ2hyb21pdW1NYWM6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMpOgorICAgICAgICAo
V2ViQ29yZTo6c2Nyb2xsYmFyUGFpbnRlclBhaW50VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9FbXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvTlNT
Y3JvbGxlckltcERldGFpbHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYmFyT3Zlcmxh
eUFQSUF2YWlsYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRh
aWxzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2
YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAgICAgICAgKHNjcm9sbGJhclBhaW50
ZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OlNj
cm9sbEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp+
U2Nyb2xsQW5pbWF0b3JNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JNYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZFNjcm9sbGJhcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJlc2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudHNSZXNpemVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRT
aG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURp
ZEhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Ny
b2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkRW5k
U2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JN
YWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNhbmNlbEFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNldElzQWN0aXZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp1cGRhdGVTY3JvbGxlclN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRU
aW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06CisgICAgICAgICgrW1dl
YlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgYXBwZWFyYW5jZVByZWZzQ2hhbmdlZDpdKToKKyAgICAg
ICAgKCtbV2ViU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciBiZWhhdmlvclByZWZzQ2hhbmdlZDpdKToK
KyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUFycm93UGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lTWFjOjpyZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6c2V0SXNDdXJyZW50bHlEcmF3aW5nSW50b0xheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjpTY3JvbGxiYXJUaGVtZU1hYyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyVGhpY2tuZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjp1c2VzT3ZlcmxheVNjcm9s
bGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZVNjcm9s
bGJhck92ZXJsYXlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6
aGFzQnV0dG9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6aGFzVGh1
bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6Om1pbmltdW1UaHVtYkxl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyUGFy
dFRvSElQcmVzc2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6
OnVwZGF0ZUVuYWJsZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJQYWludGVy
UGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50KToKKwog
MjAxMS0xMi0xOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIFNlbmQgZ2VzdHVyZSBldmVudHMgdGhyb3VnaCB0aGUgZXZlbnQgZGlzcGF0Y2hlciBhbmQg
c2Nyb2xsaW5nIGNvb3JkaW5hdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDMy
NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMz
MDYsMTAgKzMzMDYsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTGlz
dEJveC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVQcml2YXRl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9t
aXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYy5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjLm1tJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCcsCi0gICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLm1tJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVt
TGludXguY3BwJywKQEAgLTQxNTMsNiArNDE0OSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
bWFjL0xvY2FsaXplZFN0cmluZ3NNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9M
b2dnaW5nTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvTUlNRVR5cGVSZWdpc3Ry
eU1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxz
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbScs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRIZWxwZXIuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL21hYy9QbGF0Zm9ybUNsb2NrQ0EuY3BwJywKQEAgLTQxNjQsNiArNDE2Miw4IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vbWFjL1NjaGVkdWxlUGFpck1hYy5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Nj
cm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9T
Y3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFj
L1Njcm9sbFZpZXdNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3JvbGxiYXJU
aGVtZU1hYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMu
bW0nLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9u
IDEwMzI3MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjk5LDEzICsxMjk5LDEzIEBACiAgICAgICAgICAgICAgICMgc3VjaCBh
czoKICAgICAgICAgICAgICAgIyBjb20uZ29vZ2xlLkNocm9tZVtdIG9iamNbXTogQ2xhc3MgU2Ny
b2xsYmFyUHJlZnNPYnNlcnZlciBpcyBpbXBsZW1lbnRlZCBpbiBib3RoIC4uLi9Hb29nbGUgQ2hy
b21lLmFwcC9Db250ZW50cy9WZXJzaW9ucy8uLi4vR29vZ2xlIENocm9tZSBIZWxwZXIuYXBwL0Nv
bnRlbnRzL01hY09TLy4uLy4uLy4uL0dvb2dsZSBDaHJvbWUgRnJhbWV3b3JrLmZyYW1ld29yay9H
b29nbGUgQ2hyb21lIEZyYW1ld29yayBhbmQgL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvV2Vi
S2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvV2ViQ29yZS5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9XZWJDb3JlLiBPbmUgb2YgdGhlIHR3byB3aWxsIGJlIHVzZWQuIFdoaWNoIG9uZSBp
cyB1bmRlZmluZWQuCiAgICAgICAgICAgICAgICdXZWJDYXNjYWRlTGlzdD1DaHJvbWl1bVdlYkNv
cmVPYmpDV2ViQ2FzY2FkZUxpc3QnLAotICAgICAgICAgICAgICAnU2Nyb2xsYmFyUHJlZnNPYnNl
cnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcicsCisgICAgICAg
ICAgICAgICdXZWJTY3JvbGxiYXJQcmVmc09ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNXZWJT
Y3JvbGxiYXJQcmVmc09ic2VydmVyJywKICAgICAgICAgICAgICAgJ1dlYkNvcmVSZW5kZXJUaGVt
ZU5vdGlmaWNhdGlvbk9ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNXZWJDb3JlUmVuZGVyVGhl
bWVOb3RpZmljYXRpb25PYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJGb250Q2FjaGU9Q2hy
b21pdW1XZWJDb3JlT2JqQ1dlYkZvbnRDYWNoZScsCi0gICAgICAgICAgICAgICdTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGUnLAotICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJE
ZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxl
Z2F0ZScsCi0gICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU9Q2hyb21pdW1X
ZWJDb3JlT2JqQ1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZScsCi0gICAgICAgICAgICAgICdTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQYXJ0QW5pbWF0
aW9uJywKKyAgICAgICAgICAgICAgJ1dlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlPUNo
cm9taXVtV2ViQ29yZU9iakNXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZScsCisgICAg
ICAgICAgICAgICdXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlPUNocm9taXVt
V2ViQ29yZU9iakNXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlJywKKyAgICAg
ICAgICAgICAgJ1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpD
V2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlJywKKyAgICAgICAgICAgICAgJ1dlYlNjcm9sbGJh
clBhcnRBbmltYXRpb249Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYlNjcm9sbGJhclBhcnRBbmltYXRp
b24nLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCiAgICAg
ICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2FwcGxlX3dlYmtpdCcs
CkBAIC0xNTY1LDcgKzE1NjUsMTEgQEAKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9tYWMvQmxvY2tFeGNlcHRpb25zXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dFxcLm1tJCddLAorICAg
ICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlsc1xc
Lm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9QdXJnZWFibGVC
dWZmZXJNYWNcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFj
L1Njcm9sbGJhclRoZW1lTWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyXFwubW0kJ10sCiAg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2VcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvV2ViQ29y
ZVRleHRSZW5kZXJlclxcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3Jt
L3RleHQvbWFjL1NoYXBlQXJhYmljXFwuYyQnXSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwMzI3MykKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1MSw2ICsxNTUxLDcgQEAKIAkJNTFGQjU1MDUxMTNFM0U5MTAwODIxMTc2
IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAq
LzsgfTsKIAkJNTIxRDQ2RjYxMUFFQzk4MTAwNTE0NjEzIC8qIEtpbGxSaW5nTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxRDQ2RjUxMUFFQzk4
MTAwNTE0NjEzIC8qIEtpbGxSaW5nTWFjLm1tICovOyB9OwogCQk1MjFENDZGODExQUVDOUIxMDA1
MTQ2MTMgLyogS2lsbFJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyMUQ0NkY3MTFBRUM5QjEwMDUxNDYxMyAvKiBLaWxsUmluZy5oICovOyB9Owor
CQk1MjYxQjk4ODE0QTAwQTdFMDBDMUY2RUYgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjYxQjk4NzE0QTAw
QTdFMDBDMUY2RUYgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0gKi87IH07CiAJCTUzMTc2MTIy
MTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzE3NjEyMDEzQzUxNjY5MDAyNkU0
NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwICovOyB9OwogCQk1MzE3NjEyMzEzQzUxNjY5
MDAyNkU0NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTc2MTIxMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHls
ZUZsZXhpYmxlQm94RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUzMjVFNEQ3MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyNUU0RDUx
M0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi87IH07CkBAIC04ODIxLDYgKzg4
MjIsNyBAQAogCQk1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyMUQ0NkY1MTFBRUM5ODEwMDUxNDYxMyAvKiBL
aWxsUmluZ01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtp
bGxSaW5nTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjFENDZGNzExQUVD
OUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gS2lsbFJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTI2MUI5ODcxNEEw
MEE3RTAwQzFGNkVGIC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTlNTY3JvbGxlckltcERldGFpbHMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTc2MTIwMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZs
ZXhpYmxlQm94RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBT
dHlsZUZsZXhpYmxlQm94RGF0YS5jcHA7IHBhdGggPSBzdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTc2MTIxMTNDNTE2NjkwMDI2
RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBTdHlsZUZsZXhpYmxlQm94RGF0YS5oOyBwYXRoID0gc3R5bGUvU3R5bGVGbGV4aWJs
ZUJveERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNUU0RDUxM0E2Qzg4
QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NGbGV4VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTU1OTcsNiArMTU1OTksNyBAQAogCQkJCTY1N0VEQTBBMTM4NUNCRDgwMDRFMDY0NSAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW0gKi8sCiAJCQkJQkM3NzJDNUQwQzRFQjM0NDAwODMy
ODVGIC8qIE1JTUVUeXBlUmVnaXN0cnlNYWMubW0gKi8sCiAJCQkJOTM1MDBGMzExM0ZERTNCRTAw
OTlFQzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggKi8sCisJCQkJNTI2MUI5ODcxNEEwMEE3
RTAwQzFGNkVGIC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tICovLAogCQkJCUE3RDNDNTIzMEI1
NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggKi8sCiAJCQkJNEIyNzA5ODEwQUYy
RTVFMDAwNjUxMjdGIC8qIFBhc3RlYm9hcmRNYWMubW0gKi8sCiAJCQkJOTM1QzQ3NkYwOUFDNEQ3
MzAwQTZBQUI0IC8qIFBsYXRmb3JtTW91c2VFdmVudE1hYy5tbSAqLywKQEAgLTI3ODQyLDYgKzI3
ODQ1LDcgQEAKIAkJCQkxQUE3MTYwQTE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNhY2hlLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFBNzE2MUUxNDlCRjJGQTAwMTZFQzE5IC8qIFdlYlRpbGVMYXll
ci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMUYyOEExMTQ5RTYyOTgwMEZCQzM1RiAvKiBTY3Jv
bGxpbmdDb29yZGluYXRvck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUyNjFCOTg4MTRBMDBB
N0UwMEMxRjZFRiAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaAkocmV2aXNpb24gMTAzMjczKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjX2gKLSNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hY19oCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgi
Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5j
bHVkZSAiU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLmgiCi0jaW5jbHVkZSAi
VGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZmRlZiBfX09CSkNfXwot
QGNsYXNzIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwotQGNsYXNzIFNjcm9sbGJhclBh
aW50ZXJEZWxlZ2F0ZTsKLUBjbGFzcyBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRl
OwotQGNsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKLSNlbHNlCi1jbGFzcyBTY3JvbGxB
bmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKLWNsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsK
LWNsYXNzIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7Ci1jbGFzcyBTY3JvbGxi
YXJQYWludGVyRGVsZWdhdGU7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBTY3JvbGxiYXI7Ci0KLWNsYXNzIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMgOiBwdWJsaWMg
U2Nyb2xsQW5pbWF0b3IgewotcHVibGljOgotICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMoU2Nyb2xsYWJsZUFyZWEqKTsKLSAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0g
ICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50Jik7Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgdmlydHVhbCBib29s
IGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgT1ZFUlJJREU7Ci0j
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVHZXN0dXJl
RXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAg
ICB2aXJ0dWFsIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpOwotCi0gICAgdm9pZCBpbW1lZGlhdGVT
Y3JvbGxUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKTsKLSAgICB2b2lkIGlt
bWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGZsb2F0IGRlbHRhWCk7Ci0gICAgdm9pZCBpbW1lZGlhdGVT
Y3JvbGxCeURlbHRhWShmbG9hdCBkZWx0YVkpOwotCi0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxU
b1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKTsK
LQotICAgIHZvaWQgc2V0SXNEcmF3aW5nSW50b0xheWVyKGJvb2wgYikgeyBtX2RyYXdpbmdJbnRv
TGF5ZXIgPSBiOyB9Ci0gICAgYm9vbCBpc0RyYXdpbmdJbnRvTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX2RyYXdpbmdJbnRvTGF5ZXI7IH0KLQotICAgIGJvb2wgaGF2ZVNjcm9sbGVkU2luY2VQYWdl
TG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZDsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHNldElzQWN0aXZlKCk7Ci0KLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BB
SU5URVIpCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxlclN0eWxlKCk7Ci0KLSAgICBib29sIHNjcm9s
bGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgc3RhcnRTY3JvbGxiYXJQ
YWludFRpbWVyKCk7Ci0gICAgdm9pZCBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotI2VuZGlm
Ci0KLSAgICB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7
Ci0KLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcjsK
LSAgICBSZXRhaW5QdHI8U2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU+IG1fc2Nyb2xsQW5p
bWF0aW9uSGVscGVyRGVsZWdhdGU7Ci0KLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi0g
ICAgUmV0YWluUHRyPFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWY+IG1fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPFNjcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyRGVsZWdhdGU+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsKLSAgICBS
ZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwotCi0gICAgdm9pZCBpbml0
aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM+Kik7Ci0gICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9pbml0aWFsU2Ny
b2xsYmFyUGFpbnRUaW1lcjsKLSNlbmRpZgotICAgIAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQ
b3NpdGlvbkNoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFXaWxsUGFpbnQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRz
UmVzaXplZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpOwot
ICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZFNob3coKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgY29uc3Q7Ci0gICAgdm9pZCBkaWRCZWdpblNjcm9s
bEdlc3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIGRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciop
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciop
OwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxi
YXIqKTsKLQotICAgIHZvaWQgc2V0TmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKGJvb2wgbmVlZHNV
cGRhdGUpIHsgbV9uZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUgPSBuZWVkc1VwZGF0ZTsgfQotICAg
IGJvb2wgbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1Nj
cm9sbGVyU3R5bGVVcGRhdGU7IH0KLQotICAgIGZsb2F0IGFkanVzdFNjcm9sbFhQb3NpdGlvbklm
TmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsKLSAgICBmbG9hdCBhZGp1c3RTY3JvbGxZUG9zaXRpb25J
Zk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBhZGp1c3RTY3JvbGxQb3Np
dGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLQotI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKLSAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpIGNvbnN0
OwotICAgIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25zdDsKLSAgICBib29s
IHBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKTsKLSAgICB2b2lk
IHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgdm9pZCBzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoVGlt
ZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKTsKLSAgICB2b2lkIHNtb290aFNjcm9sbFdp
dGhFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKLSAgICB2b2lkIGJlZ2luU2Nyb2xs
R2VzdHVyZSgpOwotICAgIHZvaWQgZW5kU2Nyb2xsR2VzdHVyZSgpOwotCi0gICAgYm9vbCBtX2lu
U2Nyb2xsR2VzdHVyZTsKLSAgICBib29sIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzOwotICAg
IGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHM7Ci0KLSAgICBib29sIG1fc2Nyb2xsZXJJbml0
aWFsbHlQaW5uZWRPbkxlZnQ7Ci0gICAgYm9vbCBtX3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25S
aWdodDsKLSAgICBpbnQgbV9jdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbDsKLSAgICBib29sIG1f
ZGlkQ3VtdWxhdGl2ZUhvcml6b250YWxTY3JvbGxFdmVyU3dpdGNoVG9PcHBvc2l0ZURpcmVjdGlv
bk9mUGluOwotCi0gICAgQ0ZUaW1lSW50ZXJ2YWwgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3Rh
bXA7Ci0gICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YTsKLSAgICBGbG9hdFNpemUg
bV9zdHJldGNoU2Nyb2xsRm9yY2U7Ci0gICAgRmxvYXRTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsK
LQotICAgIC8vIFJ1YmJlciBiYW5kIHN0YXRlLgotICAgIENGVGltZUludGVydmFsIG1fc3RhcnRU
aW1lOwotICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsKLSAgICBGbG9hdFBvaW50IG1fb3Jp
Z09yaWdpbjsKLSAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7Ci0gICAgVGltZXI8U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9zbmFwUnViYmVyQmFuZFRpbWVyOwotI2VuZGlmCi0gICAg
Ym9vbCBtX2RyYXdpbmdJbnRvTGF5ZXI7Ci0gICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFn
ZUxvYWQ7Ci0gICAgYm9vbCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZTsKLSAgICBJbnRSZWN0
IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hY19oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDEwMzI3MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTM0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+Ci0K
LSNpbmNsdWRlICJTY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgiCi0KLSNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAi
U2Nyb2xsYWJsZUFyZWEuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaCIKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KLSNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0jaWYgIWRlZmluZWQo
TUFDX09TX1hfVkVSU0lPTl8xMF82KSB8fCBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEIDwg
TUFDX09TX1hfVkVSU0lPTl8xMF82Ci1AcHJvdG9jb2wgTlNBbmltYXRpb25EZWxlZ2F0ZQotQGVu
ZAotCi1AaW50ZXJmYWNlIE5TUHJvY2Vzc0luZm8gKFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNF
eHQpCi0tIChOU1RpbWVJbnRlcnZhbClzeXN0ZW1VcHRpbWU7Ci1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBOU1Byb2Nlc3NJbmZvIChTY3JvbGxBbmltYXRvckNocm9taXVtTWFjRXh0KQotLSAoTlNU
aW1lSW50ZXJ2YWwpc3lzdGVtVXB0aW1lCi17Ci0gICAgLy8gR2V0IGhvdyBsb25nIHN5c3RlbSBo
YXMgYmVlbiB1cC4gRm91bmQgYnkgbG9va2luZyBnZXR0aW5nICJib290dGltZSIgZnJvbSB0aGUg
a2VybmVsLgotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBib290dGltZSA9IHswfTsKLSAgICBp
ZiAoIWJvb3R0aW1lLnR2X3NlYykgewotICAgICAgICBpbnQgbWliWzJdID0ge0NUTF9LRVJOLCBL
RVJOX0JPT1RUSU1FfTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoYm9vdHRpbWUpOwot
ICAgICAgICBpZiAoLTEgPT0gc3lzY3RsKG1pYiwgMiwgJmJvb3R0aW1lLCAmc2l6ZSwgMCwgMCkp
Ci0gICAgICAgICAgICBib290dGltZS50dl9zZWMgPSAwOwotICAgIH0KLSAgICBzdHJ1Y3QgdGlt
ZXZhbCBub3c7Ci0gICAgaWYgKGJvb3R0aW1lLnR2X3NlYyAmJiAtMSAhPSBnZXR0aW1lb2ZkYXko
Jm5vdywgMCkpIHsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgdXB0aW1lOwotICAgICAgICB0aW1l
cnN1Yigmbm93LCAmYm9vdHRpbWUsICZ1cHRpbWUpOwotICAgICAgICBOU1RpbWVJbnRlcnZhbCBy
ZXN1bHQgPSB1cHRpbWUudHZfc2VjICsgKHVwdGltZS50dl91c2VjIC8gMUUrNik7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotQGVuZAotI2VuZGlmCi0K
LUBpbnRlcmZhY2UgTlNPYmplY3QgKFNjcm9sbEFuaW1hdGlvbkhlbHBlckRldGFpbHMpCi0tIChp
ZClpbml0V2l0aERlbGVnYXRlOihpZClkZWxlZ2F0ZTsKLS0gKHZvaWQpX3N0b3BSdW47Ci0tIChC
T09MKV9pc0FuaW1hdGluZzsKLS0gKE5TUG9pbnQpdGFyZ2V0T3JpZ2luOwotLSAoQ0dGbG9hdClf
cHJvZ3Jlc3M7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdh
dGUgOiBOU09iamVjdAotewotICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMq
IF9hbmltYXRvcjsKLX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOwotQGVuZAotCi1zdGF0aWMg
TlNTaXplIGFicyhOU1NpemUgc2l6ZSkKLXsKLSAgICBOU1NpemUgZmluYWxTaXplID0gc2l6ZTsK
LSAgICBpZiAoZmluYWxTaXplLndpZHRoIDwgMCkKLSAgICAgICAgZmluYWxTaXplLndpZHRoID0g
LWZpbmFsU2l6ZS53aWR0aDsKLSAgICBpZiAoZmluYWxTaXplLmhlaWdodCA8IDApCi0gICAgICAg
IGZpbmFsU2l6ZS5oZWlnaHQgPSAtZmluYWxTaXplLmhlaWdodDsKLSAgICByZXR1cm4gZmluYWxT
aXplOyAgICAKLX0KLQotQGltcGxlbWVudGF0aW9uIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVn
YXRlCi0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfYW5pbWF0b3Ig
PSBzY3JvbGxBbmltYXRvcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzY3JvbGxB
bmltYXRvckRlc3Ryb3llZAotewotICAgIF9hbmltYXRvciA9IDA7Ci19Ci0KLS0gKE5TUmVjdCli
b3VuZHMKLXsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7
Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IF9hbmltYXRvci0+
Y3VycmVudFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIE5TTWFrZVJlY3QoY3VycmVudFBvc2l0aW9u
LngoKSwgY3VycmVudFBvc2l0aW9uLnkoKSwgMCwgMCk7Ci19Ci0KLS0gKHZvaWQpX2ltbWVkaWF0
ZVNjcm9sbFRvUG9pbnQ6KE5TUG9pbnQpbmV3UG9zaXRpb24KLXsKLSAgICBpZiAoIV9hbmltYXRv
cikKLSAgICAgICAgcmV0dXJuOwotICAgIF9hbmltYXRvci0+aW1tZWRpYXRlU2Nyb2xsVG9Qb2lu
dEZvclNjcm9sbEFuaW1hdGlvbihuZXdQb3NpdGlvbik7Ci19Ci0KLS0gKE5TUG9pbnQpX3BpeGVs
QWxpZ25Qcm9wb3NlZFNjcm9sbFBvc2l0aW9uOihOU1BvaW50KW5ld09yaWdpbgotewotICAgIHJl
dHVybiBuZXdPcmlnaW47Ci19Ci0KLS0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFzZTooTlNTaXpl
KXNpemUKLXsKLSAgICByZXR1cm4gYWJzKHNpemUpOwotfQotCi0tIChOU1NpemUpY29udmVydFNp
emVGcm9tQmFzZTooTlNTaXplKXNpemUKLXsKLSAgICByZXR1cm4gYWJzKHNpemUpOwotfQotCi0t
IChOU1NpemUpY29udmVydFNpemVUb0JhY2tpbmc6KE5TU2l6ZSlzaXplCi17Ci0gICAgcmV0dXJu
IGFicyhzaXplKTsKLX0KLQotLSAoTlNTaXplKWNvbnZlcnRTaXplRnJvbUJhY2tpbmc6KE5TU2l6
ZSlzaXplCi17Ci0gICAgcmV0dXJuIGFicyhzaXplKTsKLX0KLQotLSAoaWQpc3VwZXJ2aWV3Ci17
Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoaWQpZG9jdW1lbnRWaWV3Ci17Ci0gICAgcmV0dXJu
IG5pbDsKLX0KLQotLSAoaWQpd2luZG93Ci17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9p
ZClfcmVjdXJzaXZlUmVjb21wdXRlVG9vbFRpcHMKLXsKLX0KLQotQGVuZAotCi0jaWYgVVNFKFdL
X1NDUk9MTEJBUl9QQUlOVEVSKQotCi1AaW50ZXJmYWNlIFNjcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyRGVsZWdhdGUgOiBOU09iamVjdAotewotICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMqIF9hbmltYXRvcjsKLX0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOwotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZQotCi0t
IChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjKilzY3JvbGxBbmltYXRvcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAg
aWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIF9hbmltYXRvciA9IHNj
cm9sbEFuaW1hdG9yOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNjcm9sbEFuaW1h
dG9yRGVzdHJveWVkCi17Ci0gICAgX2FuaW1hdG9yID0gMDsKLX0KLQotLSAoTlNSZWN0KWNvbnRl
bnRBcmVhUmVjdEZvclNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAg
ICAgIHJldHVybiBOU1plcm9SZWN0OwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1Np
emUgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmNvbnRlbnRzU2l6ZSgpOwotICAgIHJl
dHVybiBOU01ha2VSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUu
aGVpZ2h0KCkpOwotfQotCi0tIChCT09MKWluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1wUGFpcjoo
aWQpc2Nyb2xsZXJJbXBQYWlyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7
Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIHJldHVybiBf
YW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpOwotfQotCi0tIChOU1Bv
aW50KW1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3Jv
bGxlckltcFBhaXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBp
ZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OwotCi0gICAgcmV0dXJu
IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKLX0K
LQotLSAoTlNQb2ludClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciBjb252ZXJ0
Q29udGVudFBvaW50OihOU1BvaW50KXBvaW50SW5Db250ZW50QXJlYSB0b1Njcm9sbGVySW1wOihp
ZClzY3JvbGxlckltcAotewotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwotICAg
IGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7Ci0KLSAgICBXZWJD
b3JlOjpTY3JvbGxiYXIqIHNjcm9sbGJhciA9IDA7Ci0gICAgaWYgKHdrU2Nyb2xsYmFyUGFpbnRl
cklzSG9yaXpvbnRhbCgoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wKSkKLSAgICAg
ICAgc2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Ny
b2xsYmFyKCk7Ci0gICAgZWxzZSAKLSAgICAgICAgc2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3Jv
bGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotCi0gICAgLy8gSXQgaXMgcG9zc2li
bGUgdG8gaGF2ZSBhIG51bGwgc2Nyb2xsYmFyIGhlcmUgc2luY2UgaXQgaXMgcG9zc2libGUgZm9y
IHRoaXMgZGVsZWdhdGUKLSAgICAvLyBtZXRob2QgdG8gYmUgY2FsbGVkIGJldHdlZW4gdGhlIG1v
bWVudCB3aGVuIGEgc2Nyb2xsYmFyIGhhcyBiZWVuIHNldCB0byAwIGFuZCB0aGUKLSAgICAvLyBt
b21lbnQgd2hlbiBpdHMgZGVzdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQuIFdlIHNob3VsZCBwcm9i
YWJseSBkZS1jb3VwbGUgc29tZQotICAgIC8vIG9mIHRoZSBjbGVhbi11cCB3b3JrIGluIFNjcm9s
bGJhclRoZW1lQ2hyb21pdW1NYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoKSB0byBhdm9pZCB0aGlz
Ci0gICAgLy8gaXNzdWUuCi0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBXZWJD
b3JlOjpJbnRQb2ludCgpOwotICAgIAotICAgIHJldHVybiBzY3JvbGxiYXItPmNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXcoV2ViQ29yZTo6SW50UG9pbnQocG9pbnRJbkNvbnRlbnRBcmVhKSk7Ci19
Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgc2V0Q29udGVu
dEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgVU5VU0VEX1BBUkFN
KHNjcm9sbGVySW1wUGFpcik7Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3QpOwotfQotCi0tICh2b2lk
KXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIHVwZGF0ZVNjcm9sbGVyU3R5bGVG
b3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSluZXdSZWNvbW1l
bmRlZFNjcm9sbGVyU3R5bGUKLXsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgd2tTZXRTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKChXS1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyUmVmKXNjcm9sbGVySW1wUGFpciwgbmV3UmVjb21tZW5kZWRTY3Jv
bGxlclN0eWxlKTsKLSAgICBfYW5pbWF0b3ItPnVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKLX0KLQot
QGVuZAotCi1AaW50ZXJmYWNlIFNjcm9sbGJhclBhcnRBbmltYXRpb24gOiBOU0FuaW1hdGlvbgot
ewotICAgIFJldGFpblB0cjxXS1Njcm9sbGJhclBhaW50ZXJSZWY+IF9zY3JvbGxlclBhaW50ZXI7
Ci0gICAgV2ViQ29yZTo6U2Nyb2xsYmFyUGFydCBfcGFydDsKLSAgICBXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7Ci0gICAgQ0dGbG9hdCBfaW5pdGlhbEFscGhh
OwotICAgIENHRmxvYXQgX25ld0FscGhhOwotfQotLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXJQYWlu
dGVyOihXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdlYkNvcmU6
OlNjcm9sbGJhclBhcnQpcGFydCBzY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IgYW5pbWF0ZUFscGhhVG86KENHRmxvYXQpbmV3
QWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOwotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gU2Nyb2xsYmFyUGFydEFuaW1hdGlvbgotCi0tIChpZClpbml0V2l0aFNjcm9sbGJh
clBhaW50ZXI6KFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2Vi
Q29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0IHNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvciBhbmltYXRlQWxwaGFUbzooQ0dGbG9h
dCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICBzZWxm
ID0gW3N1cGVyIGluaXRXaXRoRHVyYXRpb246ZHVyYXRpb24gYW5pbWF0aW9uQ3VydmU6TlNBbmlt
YXRpb25FYXNlSW5PdXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAKLSAgICBfc2Nyb2xsZXJQYWludGVyID0gc2Nyb2xsZXJQYWludGVyOwotICAgIF9wYXJ0ID0g
cGFydDsKLSAgICBfYW5pbWF0b3IgPSBzY3JvbGxBbmltYXRvcjsKLSAgICBfaW5pdGlhbEFscGhh
ID0gX3BhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ID8gd2tTY3JvbGxiYXJQYWludGVyS25vYkFs
cGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCkpIDogd2tTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBo
YShfc2Nyb2xsZXJQYWludGVyLmdldCgpKTsKLSAgICBfbmV3QWxwaGEgPSBuZXdBbHBoYTsKLSAg
ICAKLSAgICByZXR1cm4gc2VsZjsgICAgCi19Ci0KLS0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNz
OihOU0FuaW1hdGlvblByb2dyZXNzKXByb2dyZXNzCi17Ci0gICAgW3N1cGVyIHNldEN1cnJlbnRQ
cm9ncmVzczpwcm9ncmVzc107Ci0KLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQ0dGbG9hdCBjdXJyZW50QWxwaGE7Ci0gICAgaWYgKF9pbml0aWFsQWxwaGEgPiBf
bmV3QWxwaGEpCi0gICAgICAgIGN1cnJlbnRBbHBoYSA9IDEgLSBwcm9ncmVzczsKLSAgICBlbHNl
Ci0gICAgICAgIGN1cnJlbnRBbHBoYSA9IHByb2dyZXNzOwotICAgIAotICAgIGlmIChfcGFydCA9
PSBXZWJDb3JlOjpUaHVtYlBhcnQpCi0gICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JB
bHBoYShfc2Nyb2xsZXJQYWludGVyLmdldCgpLCBjdXJyZW50QWxwaGEpOwotICAgIGVsc2UKLSAg
ICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShfc2Nyb2xsZXJQYWludGVyLmdl
dCgpLCBjdXJyZW50QWxwaGEpOwotCi0gICAgLy8gSW52YWxpZGF0ZSB0aGUgc2Nyb2xsYmFycyBz
byB0aGF0IHRoZXkgcGFpbnQgdGhlIGFuaW1hdGlvbgotICAgIGlmIChXZWJDb3JlOjpTY3JvbGxi
YXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT52ZXJ0
aWNhbFNjcm9sbGJhcigpKQotICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZVJl
Y3QoV2ViQ29yZTo6SW50UmVjdCgwLCAwLCB2ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgdmVy
dGljYWxTY3JvbGxiYXItPmhlaWdodCgpKSk7Ci0gICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJhciog
aG9yaXpvbnRhbFNjcm9sbGJhciA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+aG9yaXpv
bnRhbFNjcm9sbGJhcigpKQotICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRl
UmVjdChXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIGhvcml6b250YWxTY3JvbGxiYXItPndpZHRoKCks
IGhvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKSk7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsQW5p
bWF0b3JEZXN0cm95ZWQKLXsKLSAgICBbc2VsZiBzdG9wQW5pbWF0aW9uXTsKLSAgICBfYW5pbWF0
b3IgPSAwOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRl
IDogTlNPYmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0ZT4KLXsKLSAgICBXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7Ci0KLSAgICBSZXRhaW5QdHI8U2Nyb2xsYmFy
UGFydEFuaW1hdGlvbj4gX3ZlcnRpY2FsS25vYkFuaW1hdGlvbjsKLSAgICBSZXRhaW5QdHI8U2Ny
b2xsYmFyUGFydEFuaW1hdGlvbj4gX2hvcml6b250YWxLbm9iQW5pbWF0aW9uOwotCi0gICAgUmV0
YWluUHRyPFNjcm9sbGJhclBhcnRBbmltYXRpb24+IF92ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uOwot
ICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfaG9yaXpvbnRhbFRyYWNrQW5p
bWF0aW9uOwotfQotLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7Ci0tICh2b2lkKWNhbmNlbEFuaW1h
dGlvbnM7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUK
LQotLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfYW5pbWF0b3Ig
PSBzY3JvbGxBbmltYXRvcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZCljYW5jZWxB
bmltYXRpb25zCi17Ci0gICAgW192ZXJ0aWNhbEtub2JBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1h
dGlvbl07Ci0gICAgW19ob3Jpem9udGFsS25vYkFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9u
XTsKLSAgICBbX3ZlcnRpY2FsVHJhY2tBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07Ci0g
ICAgW19ob3Jpem9udGFsVHJhY2tBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07Ci19Ci0K
LS0gKE5TUmVjdCljb252ZXJ0UmVjdFRvQmFja2luZzooTlNSZWN0KWFSZWN0Ci17Ci0gICAgcmV0
dXJuIGFSZWN0OwotfQotCi0tIChOU1JlY3QpY29udmVydFJlY3RGcm9tQmFja2luZzooTlNSZWN0
KWFSZWN0Ci17Ci0gICAgcmV0dXJuIGFSZWN0OwotfQotCi0jaWYgIVBMQVRGT1JNKENIUk9NSVVN
KQotLSAoQ0FMYXllciAqKWxheWVyCi17Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgaWYgKCFfYW5pbWF0b3ItPmlzRHJhd2luZ0ludG9MYXllcigpKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGF0dGVtcHQgdG8g
cmV0dXJuIGFuIGFjdHVhbCBsYXllci4KLSAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXllciA9
IFtbQ0FMYXllciBhbGxvY10gaW5pdF07Ci0gICAgcmV0dXJuIGR1bW15TGF5ZXI7Ci19Ci0jZW5k
aWYKLQotLSAodm9pZClzZXRVcEFuaW1hdGlvbjooUmV0YWluUHRyPFNjcm9sbGJhclBhcnRBbmlt
YXRpb24+JilzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjooV0tTY3JvbGxi
YXJQYWludGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0
KXBhcnQgYW5pbWF0ZUFscGhhVG86KENHRmxvYXQpbmV3QWxwaGEgZHVyYXRpb246KE5TVGltZUlu
dGVydmFsKWR1cmF0aW9uCi17Ci0gICAgLy8gSWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHRoZSBw
YWdlLCB0aGVuIHRoZSBzY3JvbGxiYXJzIG11c3QgYmUgYW5pbWF0ZWQgaGVyZS4gCi0gICAgLy8g
VGhpcyBvdmVycmlkZXMgdGhlIGVhcmx5IHJldHVybnMuCi0gICAgYm9vbCBtdXN0QW5pbWF0ZSA9
IF9hbmltYXRvci0+aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpOwotCi0gICAgaWYgKF9hbmlt
YXRvci0+c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYgIW11c3RBbmltYXRlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5zaG91
bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpICYmICFtdXN0QW5pbWF0ZSkgewotICAgICAgICBf
YW5pbWF0b3ItPnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8g
YW5pbWF0ZSBub3csIHNvIHN0b3AgdGhlIHRpbWVyLgotICAgIF9hbmltYXRvci0+c3RvcFNjcm9s
bGJhclBhaW50VGltZXIoKTsKLQotICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgYW5pbWF0aW5n
LCBzdG9wCi0gICAgaWYgKHNjcm9sbGJhclBhcnRBbmltYXRpb24pIHsKLSAgICAgICAgW3Njcm9s
bGJhclBhcnRBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07Ci0gICAgICAgIHNjcm9sbGJh
clBhcnRBbmltYXRpb24gPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKHBhcnQgPT0gV2ViQ29yZTo6
VGh1bWJQYXJ0ICYmICF3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWlu
dGVyKSkgewotICAgICAgICBpZiAobmV3QWxwaGEgPT0gMSkgewotICAgICAgICAgICAgSW50UmVj
dCB0aHVtYlJlY3QgPSBJbnRSZWN0KHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KHNjcm9sbGVy
UGFpbnRlcikpOwotICAgICAgICAgICAgX2FuaW1hdG9yLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVt
YlJlY3QodGh1bWJSZWN0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBfYW5pbWF0b3It
PnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChJbnRSZWN0KCkpOwotICAgIH0KLQotICAgIFtO
U0FuaW1hdGlvbkNvbnRleHQgYmVnaW5Hcm91cGluZ107Ci0gICAgW1tOU0FuaW1hdGlvbkNvbnRl
eHQgY3VycmVudENvbnRleHRdIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICBzY3JvbGxiYXJQ
YXJ0QW5pbWF0aW9uLmFkb3B0TlMoW1tTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBpbml0
V2l0aFNjcm9sbGJhclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0OnBh
cnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3I6X2FuaW1hdG9yIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmlt
YXRlQWxwaGFUbzpuZXdBbHBoYSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsKLSAg
ICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzZXRBbmltYXRpb25CbG9ja2luZ01vZGU6
TlNBbmltYXRpb25Ob25ibG9ja2luZ107Ci0gICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24uZ2V0
KCkgc3RhcnRBbmltYXRpb25dOwotICAgIFtOU0FuaW1hdGlvbkNvbnRleHQgZW5kR3JvdXBpbmdd
OwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBhbmltYXRlS25vYkFs
cGhhVG86KENHRmxvYXQpbmV3S25vYkFscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJh
dGlvbgotewotICAgIGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS1Nj
cm9sbGJhclBhaW50ZXJSZWYgc2Nyb2xsZXJQYWludGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZilzY3JvbGxlckltcDsKLSAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKHNj
cm9sbGVyUGFpbnRlcikpCi0gICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl9ob3Jpem9udGFs
S25vYkFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29y
ZTo6VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpkdXJhdGlv
bl07Ci0gICAgZWxzZQotICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpfdmVydGljYWxLbm9i
QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpU
aHVtYlBhcnQgYW5pbWF0ZUFscGhhVG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsK
LX0KLQotLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAgYW5pbWF0ZVRyYWNrQWxw
aGFUbzooQ0dGbG9hdCluZXdUcmFja0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJh
dGlvbgotewotICAgIGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS1Nj
cm9sbGJhclBhaW50ZXJSZWYgc2Nyb2xsZXJQYWludGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZilzY3JvbGxlckltcDsKLSAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKHNj
cm9sbGVyUGFpbnRlcikpCi0gICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl9ob3Jpem9udGFs
VHJhY2tBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNv
cmU6OkJhY2tUcmFja1BhcnQgYW5pbWF0ZUFscGhhVG86bmV3VHJhY2tBbHBoYSBkdXJhdGlvbjpk
dXJhdGlvbl07Ci0gICAgZWxzZQotICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpfdmVydGlj
YWxUcmFja0FuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2Vi
Q29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9u
OmR1cmF0aW9uXTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAgb3Zl
cmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86KE5TVUludGVnZXIpbmV3T3ZlcmxheVNjcm9sbGVy
U3RhdGUKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXApOwotICAgIFVOVVNFRF9QQVJB
TShuZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZSk7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsQW5pbWF0b3JE
ZXN0cm95ZWQKLXsKLSAgICBfYW5pbWF0b3IgPSAwOwotICAgIFtfdmVydGljYWxLbm9iQW5pbWF0
aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKLSAgICBbX2hvcml6b250YWxLbm9i
QW5pbWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKLSAgICBbX3ZlcnRpY2Fs
VHJhY2tBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotICAgIFtfaG9y
aXpvbnRhbFRyYWNrQW5pbWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKLX0K
LQotQGVuZAotCi0jZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9y
OjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQotewotICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhzY3JvbGxhYmxlQXJlYSkpOwot
fQotCi1zdGF0aWMgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyogY2hyb21pdW1TY3JvbGxiYXJU
aGVtZSgpCi17Ci0gICAgU2Nyb2xsYmFyVGhlbWUqIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xsYmFy
VGhlbWU6OnRoZW1lKCk7Ci0gICAgcmV0dXJuICFzY3JvbGxiYXJUaGVtZS0+aXNNb2NrVGhlbWUo
KSA/IHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPihzY3JvbGxiYXJUaGVt
ZSkgOiAwOwotfQotCi1TY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKLSAgICA6IFNjcm9sbEFu
aW1hdG9yKHNjcm9sbGFibGVBcmVhKQotI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLSAg
ICAsIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIodGhpcywgJlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpCi0jZW5kaWYKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgLCBtX2luU2Nyb2xsR2VzdHVyZShmYWxzZSkKLSAg
ICAsIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKGZhbHNlKQotICAgICwgbV9pZ25vcmVNb21l
bnR1bVNjcm9sbHMoZmFsc2UpCi0gICAgLCBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCgw
KQotICAgICwgbV9zdGFydFRpbWUoMCkKLSAgICAsIG1fc25hcFJ1YmJlckJhbmRUaW1lcih0aGlz
LCAmU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKQot
I2VuZGlmCi0gICAgLCBtX2RyYXdpbmdJbnRvTGF5ZXIoZmFsc2UpCi0gICAgLCBtX2hhdmVTY3Jv
bGxlZFNpbmNlUGFnZUxvYWQoZmFsc2UpCi0gICAgLCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0
ZShmYWxzZSkKLXsKLSAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmFkb3B0TlMo
W1tTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxBbmlt
YXRvcjp0aGlzXSk7Ci0gICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuYWRvcHROUyhbW05TQ2xh
c3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxwZXIiKSBhbGxvY10gaW5pdFdpdGhE
ZWxlZ2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpXSk7Ci0KLSAgICBp
ZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgbV9zY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKLSAg
ICAgICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciA9IHdrTWFrZVNjcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKSk7
Ci0gICAgICAgIG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQ
YWludGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOwotICAg
IH0KLX0KLQotU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6flNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWMoKQotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewot
ICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpIHNjcm9s
bEFuaW1hdG9yRGVzdHJveWVkXTsKLSAgICAgICAgWyhpZCltX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07Ci0gICAgICAgIFttX3Nj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVk
XTsKLSAgICB9Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsKFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKLXsKLSAgICBtX2hhdmVTY3JvbGxl
ZFNpbmNlUGFnZUxvYWQgPSB0cnVlOwotCi0jaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQot
ICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0
eSwgc3RlcCwgbXVsdGlwbGllcik7Ci0jZW5kaWYKLQotICAgIGlmICghW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkFwcGxlU2Nyb2xsQW5pbWF0aW9u
RW5hYmxlZCJdIHx8ICFtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51
bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKLQotICAgIGlmIChncmFudWxhcml0eSA9PSBTY3Jv
bGxCeVBpeGVsKQotICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRh
dGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwotCi0gICAgZmxvYXQgY3VycmVu
dFBvcyA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2N1cnJlbnRQb3NY
IDogbV9jdXJyZW50UG9zWTsKLSAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heDxmbG9hdD4oc3Rk
OjptaW48ZmxvYXQ+KGN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMCk7
Ci0gICAgaWYgKGN1cnJlbnRQb3MgPT0gbmV3UG9zKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBOU1BvaW50IG5ld1BvaW50OwotICAgIGlmIChbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIu
Z2V0KCkgX2lzQW5pbWF0aW5nXSkgewotICAgICAgICBOU1BvaW50IHRhcmdldE9yaWdpbiA9IFtt
X3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSB0YXJnZXRPcmlnaW5dOwotICAgICAgICBuZXdQ
b2ludCA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBOU01ha2VQb2ludChu
ZXdQb3MsIHRhcmdldE9yaWdpbi55KSA6IE5TTWFrZVBvaW50KHRhcmdldE9yaWdpbi54LCBuZXdQ
b3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld1BvaW50ID0gb3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IE5TTWFrZVBvaW50KG5ld1BvcywgbV9jdXJyZW50UG9zWSkgOiBO
U01ha2VQb2ludChtX2N1cnJlbnRQb3NYLCBuZXdQb3MpOwotICAgICAgICBtX3Njcm9sbGFibGVB
cmVhLT5kaWRTdGFydEFuaW1hdGVkU2Nyb2xsKCk7Ci0gICAgfQotICAgIFttX3Njcm9sbEFuaW1h
dGlvbkhlbHBlci5nZXQoKSBzY3JvbGxUb1BvaW50Om5ld1BvaW50XTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQotewotICAgIFttX3Njcm9s
bEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfc3RvcFJ1bl07Ci0gICAgaW1tZWRpYXRlU2Nyb2xsVG9Q
b2ludChvZmZzZXQpOwotfQotCi1mbG9hdCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1
c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCBwb3NpdGlvbikgY29uc3QKLXsKLSAg
ICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KCkpCi0gICAgICAgIHJldHVybiBwb3NpdGlvbjsKLQotICAgIHJldHVybiBtYXg8ZmxvYXQ+KG1p
bjxmbG9hdD4ocG9zaXRpb24sIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndpZHRo
KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOwotfQotCi1mbG9hdCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2Fy
eShmbG9hdCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNv
bnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCi0gICAgICAgIHJldHVybiBwb3NpdGlv
bjsKLQotICAgIHJldHVybiBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24sIG1fc2Nyb2xs
YWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlz
aWJsZUhlaWdodCgpKSwgMCk7Ci19Ci0KLUZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50JiBw
b3NpdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNT
Y3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCi0gICAgICAgIHJldHVybiBwb3NpdGlvbjsKLQotICAg
IGZsb2F0IG5ld1ggPSBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueCgpLCBtX3Njcm9s
bGFibGVBcmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlz
aWJsZVdpZHRoKCkpLCAwKTsKLSAgICBmbG9hdCBuZXdZID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+
KHBvc2l0aW9uLnkoKSwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkg
LSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKLQotICAgIHJldHVybiBG
bG9hdFBvaW50KG5ld1gsIG5ld1kpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24p
Ci17Ci0gICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0gYWRqdXN0U2Nyb2xsUG9zaXRp
b25JZk5lY2Vzc2FyeShuZXdQb3NpdGlvbik7Ci0gCi0gICAgbV9jdXJyZW50UG9zWCA9IGFkanVz
dGVkUG9zaXRpb24ueCgpOwotICAgIG1fY3VycmVudFBvc1kgPSBhZGp1c3RlZFBvc2l0aW9uLnko
KTsKLSAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWChmbG9hdCBkZWx0YVgpCi17Ci0g
ICAgZmxvYXQgbmV3UG9zWCA9IGFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KG1fY3Vy
cmVudFBvc1ggKyBkZWx0YVgpOwotICAgIAotICAgIGlmIChuZXdQb3NYID09IG1fY3VycmVudFBv
c1gpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2N1cnJlbnRQb3NYID0gbmV3UG9zWDsK
LSAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBkZWx0YVkpCi17Ci0gICAg
ZmxvYXQgbmV3UG9zWSA9IGFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5KG1fY3VycmVu
dFBvc1kgKyBkZWx0YVkpOwotICAgIAotICAgIGlmIChuZXdQb3NZID09IG1fY3VycmVudFBvc1kp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2N1cnJlbnRQb3NZID0gbmV3UG9zWTsKLSAg
ICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIG5ld1Bvc2l0aW9uKQotewotICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdGlvbkhl
bHBlcik7Ci0gICAgQ0dGbG9hdCBwcm9ncmVzcyA9IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5n
ZXQoKSBfcHJvZ3Jlc3NdOwotICAgIAotICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3UG9z
aXRpb24pOwotCi0gICAgaWYgKHByb2dyZXNzID49IDEuMCkKLSAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYS0+ZGlkQ29tcGxldGVBbmltYXRlZFNjcm9sbCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpCi17Ci0gICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRBcmVhU2Nyb2xs
ZWQobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci0gICAgU2Nyb2xsQW5pbWF0
b3I6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKLXsKLSAgICBpZiAoaXNTY3Jv
bGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIHdrQ29udGVudEFyZWFXaWxsUGFp
bnQobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAotewot
ICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tNb3Vz
ZUVudGVyZWRDb250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsK
LX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUV4aXRlZENvbnRlbnRB
cmVhKCkgY29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkp
Ci0gICAgICAgIHdrTW91c2VFeGl0ZWRDb250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3Vz
ZU1vdmVkSW5Db250ZW50QXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3Zlcmxh
eUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a01vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKG1fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OndpbGxTdGFydExpdmVSZXNpemUoKQotewotICAgIGlmIChpc1Njcm9sbGJh
ck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tXaWxsU3RhcnRMaXZlUmVzaXplKG1f
c2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRBcmVhUmVzaXpl
ZChtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCi17Ci0gICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a1dpbGxFbmRMaXZlUmVzaXpl
KG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0Ci17Ci0gICAgaWYg
KGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRBcmVh
RGlkU2hvdyhtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZEhpZGUoKSBjb25zdAotewot
ICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tDb250
ZW50QXJlYURpZEhpZGUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkg
Y29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAg
ICAgIHdrRGlkQmVnaW5TY3JvbGxHZXN0dXJlKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIu
Z2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEVuZFNjcm9s
bEdlc3R1cmUoKSBjb25zdAotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFi
bGUoKSkKLSAgICAgICAgd2tEaWRFbmRTY3JvbGxHZXN0dXJlKG1fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRp
ZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGlmICgh
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgaWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21pdW1T
Y3JvbGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVy
ID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgd2tTY3Jv
bGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUuZ2V0KCkpOwotICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBwYWludGVyLCBmYWxzZSk7Ci0gICAgICAg
IGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKLSAgICAgICAgICAgIHdrU2V0
U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShwYWludGVyLCAxKTsKLSAgICB9Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChTY3JvbGxiYXJUaGVtZUNocm9t
aXVtTWFjKiB0aGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhlbWUoKSkgewotICAgICAgICBXS1Nj
cm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNj
cm9sbGJhcik7Ci0gICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIs
IG5pbCk7Ci0gICAgICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5pbCwgZmFsc2UpOwotICAgIH0KLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChTY3JvbGxiYXJUaGVtZUNocm9t
aXVtTWFjKiB0aGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhlbWUoKSkgewotICAgICAgICBXS1Nj
cm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNj
cm9sbGJhcik7Ci0gICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIs
IG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpKTsKLSAgICAgICAgd2tTZXRQYWludGVy
Rm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwg
cGFpbnRlciwgdHJ1ZSk7Ci0gICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNp
emUoKSkKLSAgICAgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShwYWludGVy
LCAxKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJl
bW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYg
KCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21pdW1TY3JvbGxi
YXJUaGVtZSgpKSB7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0gdGhl
bWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgd2tTY3JvbGxiYXJQ
YWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbmlsKTsKLSAgICAgICAgd2tTZXRQYWludGVyRm9y
UGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgbmls
LCB0cnVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y2Fu
Y2VsQW5pbWF0aW9ucygpCi17Ci0gICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gZmFs
c2U7Ci0KLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAg
ICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQotICAgICAgICAgICAgc3RvcFNj
cm9sbGJhclBhaW50VGltZXIoKTsKLSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRl
LmdldCgpIGNhbmNlbEFuaW1hdGlvbnNdOwotICAgIH0KLX0KLQotI2lmIEVOQUJMRShSVUJCRVJf
QkFORElORykKLQotc3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVv
dXQgPSAwLjEwZjsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kU3RpZmZuZXNzID0gMjA7
Ci1zdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8g
PSAxOwotc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJl
Zm9yZVN0cmV0Y2ggPSAxMDsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kQW1wbGl0dWRl
ID0gMC4zMWY7Ci1zdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZFBlcmlvZCA9IDEuNmY7Ci0K
LXN0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoZmxvYXQgaW5pdGlhbFBvc2l0
aW9uLCBmbG9hdCBpbml0aWFsVmVsb2NpdHksIGZsb2F0IGVsYXBzZWRUaW1lKQotewotICAgIGZs
b2F0IGFtcGxpdHVkZSA9IHJ1YmJlcmJhbmRBbXBsaXR1ZGU7Ci0gICAgZmxvYXQgcGVyaW9kID0g
cnViYmVyYmFuZFBlcmlvZDsKLSAgICBmbG9hdCBjcml0aWNhbERhbXBlbmluZ0ZhY3RvciA9IGV4
cGYoKC1lbGFwc2VkVGltZSAqIHJ1YmJlcmJhbmRTdGlmZm5lc3MpIC8gcGVyaW9kKTsKLSAgICAg
ICAgICAgICAKLSAgICByZXR1cm4gKGluaXRpYWxQb3NpdGlvbiArICgtaW5pdGlhbFZlbG9jaXR5
ICogZWxhcHNlZFRpbWUgKiBhbXBsaXR1ZGUpKSAqIGNyaXRpY2FsRGFtcGVuaW5nRmFjdG9yOwot
fQotCi1zdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKGZsb2F0IGRlbHRh
KQotewotICAgIGZsb2F0IHN0aWZmbmVzcyA9IHN0ZDo6bWF4KHJ1YmJlcmJhbmRTdGlmZm5lc3Ms
IDEuMGYpOwotICAgIHJldHVybiBkZWx0YSAvIHN0aWZmbmVzczsKLX0KLQotc3RhdGljIGZsb2F0
IHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShmbG9hdCBkZWx0YSkKLXsKLSAgICByZXR1cm4g
ZGVsdGEgKiBydWJiZXJiYW5kU3RpZmZuZXNzOwotfQotCi1zdGF0aWMgZmxvYXQgc2Nyb2xsV2hl
ZWxNdWx0aXBsaWVyKCkKLXsKLSAgICBzdGF0aWMgZmxvYXQgbXVsdGlwbGllciA9IC0xOwotICAg
IGlmIChtdWx0aXBsaWVyIDwgMCkgewotICAgICAgICBtdWx0aXBsaWVyID0gW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZmxvYXRGb3JLZXk6QCJOU1Njcm9sbFdoZWVsTXVs
dGlwbGllciJdOwotICAgICAgICBpZiAobXVsdGlwbGllciA8PSAwKQotICAgICAgICAgICAgbXVs
dGlwbGllciA9IDE7Ci0gICAgfQotICAgIHJldHVybiBtdWx0aXBsaWVyOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNTY3JvbGxpbmdMZWZ0QW5kU2hvdWxkTm90UnViYmVyQmFuZChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxl
QXJlYSkKLXsKLSAgICByZXR1cm4gd2hlZWxFdmVudC5kZWx0YVgoKSA+IDAgJiYgIXNjcm9sbGFi
bGVBcmVhLT5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsTGVmdCk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBpc1Njcm9sbGluZ1JpZ2h0QW5kU2hvdWxkTm90UnViYmVyQmFuZChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9sbGFibGVBcmVhKiBzY3Jv
bGxhYmxlQXJlYSkKLXsKLSAgICByZXR1cm4gd2hlZWxFdmVudC5kZWx0YVgoKSA8IDAgJiYgIXNj
cm9sbGFibGVBcmVhLT5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsUmlnaHQpOwot
fQotCi1ib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmhhbmRsZVdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIG1faGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZCA9IHRydWU7Ci0KLSAgICBpZiAoIXdoZWVsRXZlbnQuaGFzUHJlY2lzZVNj
cm9sbGluZ0RlbHRhcygpKQotICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdo
ZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCBy
b3VuZGFib3V0IGhhY2sgdG8gYWxsb3cgZm9yd2FyZGluZyB3aGVlbCBldmVudHMKLSAgICAvLyB1
cCB0byB0aGUgcGFyZW50IHNjcm9sbGFibGUgYXJlYS4gSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRo
ZSBmYWN0IHRoYXQKLSAgICAvLyB0aGUgYmFzZSBjbGFzcyBpbXBsZW1lbmF0YXRpb24gb2YgaGFu
ZGxlV2hlZWxFdmVudCB3aWxsIG5vdCBhY2NlcHQgdGhlCi0gICAgLy8gd2hlZWwgZXZlbnQgaWYg
dGhlcmUgaXMgbm93aGVyZSB0byBzY3JvbGwuCi0gICAgaWYgKGZhYnNmKHdoZWVsRXZlbnQuZGVs
dGFZKCkpID49IGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFYKCkpKSB7Ci0gICAgICAgIGlmICghYWxs
b3dzVmVydGljYWxTdHJldGNoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0
b3I6OmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKCFhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpKQotICAgICAgICAgICAgcmV0dXJuIFNj
cm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKSkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzY3JvbGxiYXIsIHdlIGFnZ3JlZ2F0ZSB0aGUgd2hl
ZWwgZXZlbnRzIHRvIGdldCBhbgotICAgICAgICAgICAgLy8gb3ZlcmFsbCB0cmVuZCBvZiB0aGUg
c2Nyb2xsLiBJZiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY3JvbGwgaXMgZXZlcgotICAgICAgICAg
ICAgLy8gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiB0aGUgcGluIGxvY2F0aW9uLCB0aGVu
IHdlIHN3aXRjaCB0aGUKLSAgICAgICAgICAgIC8vIGJvb2xlYW4sIGFuZCBydWJiZXIgYmFuZC4g
VGhhdCBpcywgaWYgd2Ugd2VyZSBwaW5uZWQgdG8gdGhlIGxlZnQsCi0gICAgICAgICAgICAvLyBh
bmQgd2UgZW5kZWQgdXAgc2Nyb2xsaW5nIHRvIHRoZSByaWdodCwgd2UgcnViYmVyIGJhbmQuCi0g
ICAgICAgICAgICBtX2N1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsICs9IHdoZWVsRXZlbnQuZGVs
dGFYKCk7Ci0gICAgICAgICAgICBpZiAobV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uTGVmdCAm
JiBtX2N1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsIDwgMCkKLSAgICAgICAgICAgICAgICBtX2Rp
ZEN1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25P
ZlBpbiA9IHRydWU7Ci0gICAgICAgICAgICBpZiAobV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9u
UmlnaHQgJiYgbV9jdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbCA+IDApCi0gICAgICAgICAgICAg
ICAgbV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbEV2ZXJTd2l0Y2hUb09wcG9zaXRlRGly
ZWN0aW9uT2ZQaW4gPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWZ0ZXIgYSBnZXN0
dXJlIGJlZ2lucywgd2UgZ28gdGhyb3VnaDoKLSAgICAgICAgLy8gMSsgUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2VOb25lCi0gICAgICAgIC8vIDArIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdl
ZAotICAgICAgICAvLyAxIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgaWYgdGhlcmUgd2Fz
IGF0IGxlYXN0IG9uZSBjaGFuZ2VkIGV2ZW50Ci0gICAgICAgIGlmICh3aGVlbEV2ZW50Lm1vbWVu
dHVtUGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgJiYgIW1fZGlkQ3VtdWxh
dGl2ZUhvcml6b250YWxTY3JvbGxFdmVyU3dpdGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9mUGluKSB7
Ci0gICAgICAgICAgICBpZiAoKGlzU2Nyb2xsaW5nTGVmdEFuZFNob3VsZE5vdFJ1YmJlckJhbmQo
d2hlZWxFdmVudCwgbV9zY3JvbGxhYmxlQXJlYSkgJiYKLSAgICAgICAgICAgICAgICBtX3Njcm9s
bGVySW5pdGlhbGx5UGlubmVkT25MZWZ0ICYmCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigpKSB8fAot
ICAgICAgICAgICAgICAgIChpc1Njcm9sbGluZ1JpZ2h0QW5kU2hvdWxkTm90UnViYmVyQmFuZCh3
aGVlbEV2ZW50LCBtX3Njcm9sbGFibGVBcmVhKSAmJgotICAgICAgICAgICAgICAgIG1fc2Nyb2xs
ZXJJbml0aWFsbHlQaW5uZWRPblJpZ2h0ICYmCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3NpdGlvbigpKSkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3
aGVlbEV2ZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wg
aXNNb21lbnR1bVNjcm9sbEV2ZW50ID0gKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSk7Ci0gICAgaWYgKG1faWdub3JlTW9tZW50dW1TY3Jv
bGxzICYmIChpc01vbWVudHVtU2Nyb2xsRXZlbnQgfHwgbV9zbmFwUnViYmVyQmFuZFRpbWVyLmlz
QWN0aXZlKCkpKSB7Ci0gICAgICAgIGlmICh3aGVlbEV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkKSB7Ci0gICAgICAgICAgICBtX2lnbm9yZU1vbWVu
dHVtU2Nyb2xscyA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNtb290aFNjcm9sbFdpdGhFdmVu
dCh3aGVlbEV2ZW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZl
bnQmIGdlc3R1cmVFdmVudCkKLXsKLSAgICBpZiAoZ2VzdHVyZUV2ZW50LnR5cGUoKSA9PSBQbGF0
Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW4pCi0gICAgICAgIGJlZ2luU2Nyb2xsR2VzdHVy
ZSgpOwotICAgIGVsc2UgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6
R2VzdHVyZVNjcm9sbEVuZCkKLSAgICAgICAgZW5kU2Nyb2xsR2VzdHVyZSgpOwotfQotCi1ib29s
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRh
WCwgZmxvYXQgZGVsdGFZKQotewotICAgIEZsb2F0U2l6ZSBsaW1pdERlbHRhOwotICAgIGlmIChm
YWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKLSAgICAgICAgaWYgKGRlbHRhWSA8IDAp
IHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHVwLiAgTWFrZSBzdXJl
IHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSB0b3AKLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0
SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLnkoKSArICsgbV9z
Y3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGRvd24uICBNYWtlIHN1cmUgd2Ug
YXJlIG5vdCBwaW5uZWQgdG8gdGhlIGJvdHRvbQotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRI
ZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSAobV9zY3Jv
bGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WSgpICsgbV9zY3JvbGxhYmxlQXJl
YS0+c2Nyb2xsT3JpZ2luKCkueSgpKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGRlbHRh
WCAhPSAwKSB7Ci0gICAgICAgIGlmIChkZWx0YVggPCAwKSB7Ci0gICAgICAgICAgICAvLyBXZSBh
cmUgdHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRv
IHRoZSBsZWZ0Ci0gICAgICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJsZUFy
ZWEtPnZpc2libGVDb250ZW50UmVjdCgpLngoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9y
aWdpbigpLngoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgdHJ5
aW5nIHRvIHNjcm9sbCByaWdodC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUg
cmlnaHQKLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+
Y29udGVudHNTaXplKCkud2lkdGgoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVu
dFJlY3QoKS5tYXhYKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS54KCkpKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoKGRlbHRhWCAhPSAwIHx8IGRlbHRhWSAh
PSAwKSAmJiAobGltaXREZWx0YS53aWR0aCgpIDwgMSAmJiBsaW1pdERlbHRhLmhlaWdodCgpIDwg
MSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSBjb25z
dAotewotICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxFbGFzdGlj
aXR5KCkpIHsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6IHsKLSAgICAgICAg
U2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xs
YmFyKCk7Ci0gICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+
dmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICAgICAgcmV0dXJuICgoKHZTY3JvbGxlciAmJiB2U2Ny
b2xsZXItPmVuYWJsZWQoKSkgfHwgKCFoU2Nyb2xsZXIgfHwgIWhTY3JvbGxlci0+ZW5hYmxlZCgp
KSkpOwotICAgIH0KLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c0hvcml6
b250YWxTdHJldGNoaW5nKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fc2Nyb2xsYWJsZUFyZWEt
Pmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNp
dHlBdXRvbWF0aWM6IHsKLSAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFi
bGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIFNjcm9sbGJhciogdlNjcm9s
bGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICAgICAgcmV0
dXJuICgoKGhTY3JvbGxlciAmJiBoU2Nyb2xsZXItPmVuYWJsZWQoKSkgfHwgKCF2U2Nyb2xsZXIg
fHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKSkpOwotICAgIH0KLSAgICBjYXNlIFNjcm9sbEVsYXN0
aWNpdHlOb25lOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBTY3JvbGxFbGFzdGlj
aXR5QWxsb3dlZDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OnNtb290aFNjcm9sbFdpdGhFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1
ZTsKLQotICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpOwot
ICAgIGZsb2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKTsKLQotICAg
IC8vIFJlc2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gcmVtb3Zl
IGRlbHRhIGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50byBvdmVyZmxvdy4KLSAgICBt
X292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKLQotICAgIGZsb2F0IGV2ZW50Q29h
bGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQuZGVsdGFYKCk7Ci0gICAgZmxvYXQgZXZlbnRDb2Fs
ZXNjZWREZWx0YVkgPSAtd2hlZWxFdmVudC5kZWx0YVkoKTsKLQotICAgIGRlbHRhWCArPSBldmVu
dENvYWxlc2NlZERlbHRhWDsKLSAgICBkZWx0YVkgKz0gZXZlbnRDb2FsZXNjZWREZWx0YVk7Ci0K
LSAgICAvLyBTbGlnaHRseSBwcmVmZXIgc2Nyb2xsaW5nIHZlcnRpY2FsbHkgYnkgYXBwbHlpbmcg
dGhlID0gY2FzZSB0byBkZWx0YVkKLSAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0
YVgpKQotICAgICAgICBkZWx0YVggPSAwOwotICAgIGVsc2UKLSAgICAgICAgZGVsdGFZID0gMDsK
LQotICAgIGJvb2wgaXNWZXJ0aWNhbGx5U3RyZXRjaGVkID0gZmFsc2U7Ci0gICAgYm9vbCBpc0hv
cml6b250YWxseVN0cmV0Y2hlZCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkU3RyZXRjaCA9IGZh
bHNlOwotICAgIAotICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fc2Nyb2xsYWJsZUFyZWEt
Pm92ZXJoYW5nQW1vdW50KCk7Ci0KLSAgICBpc0hvcml6b250YWxseVN0cmV0Y2hlZCA9IHN0cmV0
Y2hBbW91bnQud2lkdGgoKTsKLSAgICBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgPSBzdHJldGNoQW1v
dW50LmhlaWdodCgpOwotCi0gICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UgPSB3aGVl
bEV2ZW50Lm1vbWVudHVtUGhhc2UoKTsKLQotICAgIC8vIElmIHdlIGFyZSBzdGFydGluZyBtb21l
bnR1bSBzY3JvbGxpbmcgdGhlbiBkbyBzb21lIHNldHVwLgotICAgIGlmICghbV9tb21lbnR1bVNj
cm9sbEluUHJvZ3Jlc3MgJiYgKHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW4g
fHwgcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkKSkKLSAgICAgICAgbV9t
b21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSB0cnVlOwotCi0gICAgQ0ZUaW1lSW50ZXJ2YWwgdGlt
ZURlbHRhID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGlt
ZXN0YW1wOwotICAgIGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xsSW5Q
cm9ncmVzcykgewotICAgICAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYg
dGltZURlbHRhID4gMCAmJiB0aW1lRGVsdGEgPCBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0
KSB7Ci0gICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkuc2V0V2lkdGgoZXZlbnRDb2FsZXNj
ZWREZWx0YVggLyAoZmxvYXQpdGltZURlbHRhKTsKLSAgICAgICAgICAgIG1fbW9tZW50dW1WZWxv
Y2l0eS5zZXRIZWlnaHQoZXZlbnRDb2FsZXNjZWREZWx0YVkgLyAoZmxvYXQpdGltZURlbHRhKTsK
LSAgICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50
aW1lc3RhbXAoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbGFzdE1vbWVudHVt
U2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKLSAgICAgICAgICAgIG1f
bW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGlzVmVydGljYWxseVN0cmV0Y2hlZCkgewotICAgICAgICAgICAgaWYgKCFpc0hvcml6b250YWxs
eVN0cmV0Y2hlZCAmJiBwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgsIDApKSB7ICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUgdmVydGljYWwu
Ci0gICAgICAgICAgICAgICAgaWYgKGRlbHRhWSAhPSAwICYmIChmYWJzZihkZWx0YVggLyBkZWx0
YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQotICAgICAgICAgICAg
ICAgICAgICBkZWx0YVggPSAwOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRh
WCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93
U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRh
WCA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSAr
IGRlbHRhWCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNIb3Jpem9udGFs
bHlTdHJldGNoZWQpIHsKLSAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUgaG9y
aXpvbnRhbC4KLSAgICAgICAgICAgIGlmIChwaW5uZWRJbkRpcmVjdGlvbigwLCBkZWx0YVkpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGRlbHRhWCAhPSAwICYmIChmYWJzZihkZWx0YVkgLyBkZWx0
YVgpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQotICAgICAgICAgICAg
ICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRh
WSkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRIZWlnaHQobV9vdmVyZmxv
d1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVsdGFZKTsKLSAgICAgICAgICAgICAgICAgICAgZGVs
dGFZID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9v
dmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0
KCkgKyBkZWx0YVkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gTm90IHN0cmV0Y2hpbmcgYXQgYWxsIHlldC4KLSAgICAgICAgICAgIGlmIChwaW5uZWRJ
bkRpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmFic2Yo
ZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmYWJz
ZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRo
KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZs
b3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoZGVsdGFYICE9IDAgfHwgZGVsdGFZICE9IDApIHsKLSAgICAg
ICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwgaXNIb3Jp
em9udGFsbHlTdHJldGNoZWQpKSB7Ci0gICAgICAgICAgICBpZiAoZGVsdGFZICE9IDApIHsKLSAg
ICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7Ci0gICAgICAg
ICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkoZGVsdGFZKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChkZWx0YVggIT0gMCkgewotICAgICAgICAgICAgICAgIGRlbHRhWCAq
PSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLSAgICAgICAgICAgICAgICBpbW1lZGlhdGVTY3Jv
bGxCeURlbHRhWChkZWx0YVgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpKSB7Ci0gICAgICAgICAg
ICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWCA9
IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChkZWx0YVggIT0gMCkgJiYgIWlzSG9yaXpvbnRh
bGx5U3RyZXRjaGVkICYmICFwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgsIDApKSB7Ci0gICAgICAg
ICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwotCi0gICAgICAgICAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVk
Z2UoZmFsc2UpOwotICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGRlbHRh
WCk7Ci0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICBkZWx0YVggPSAwOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWFsbG93c1ZlcnRp
Y2FsU3RyZXRjaGluZygpKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKLSAgICAgICAg
ICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KChkZWx0YVkgIT0gMCkgJiYgIWlzVmVydGljYWxseVN0cmV0Y2hlZCAmJiAhcGlubmVkSW5EaXJl
Y3Rpb24oMCwgZGVsdGFZKSkgewotICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVl
bE11bHRpcGxpZXIoKTsKLQotICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENv
bnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBp
bW1lZGlhdGVTY3JvbGxCeURlbHRhWShkZWx0YVkpOwotICAgICAgICAgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOwotCi0g
ICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9zY3JvbGxhYmxlQXJlYS0+b3Zl
cmhhbmdBbW91bnQoKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9tb21lbnR1bVNjcm9s
bEluUHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHBpbm5lZEluRGlyZWN0aW9uKGV2
ZW50Q29hbGVzY2VkRGVsdGFYLCBldmVudENvYWxlc2NlZERlbHRhWSkgfHwgKGZhYnNmKGV2ZW50
Q29hbGVzY2VkRGVsdGFYKSArIGZhYnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFZKSA8PSAwKSkgJiYg
bV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXApIHsKLSAgICAgICAgICAgICAgICAgICAgbV9p
Z25vcmVNb21lbnR1bVNjcm9sbHMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtX21vbWVu
dHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBzbmFwUnVi
YmVyQmFuZCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lk
dGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWln
aHQobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkgKyBkZWx0YVkpOwotCi0gICAgICAgICAg
ICBGbG9hdFNpemUgZGFtcGVkRGVsdGEoY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRh
KG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVi
b3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpKSkpOwotICAgICAgICAgICAg
RmxvYXRQb2ludCBvcmlnT3JpZ2luID0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50
UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKSkgLSBz
dHJldGNoQW1vdW50OwotICAgICAgICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4gPSBvcmlnT3Jp
Z2luICsgZGFtcGVkRGVsdGE7Ci0KLSAgICAgICAgICAgIGlmIChvcmlnT3JpZ2luICE9IG5ld09y
aWdpbikgewotICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNT
Y3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpbW1lZGlhdGVT
Y3JvbGxUb1BvaW50KG5ld09yaWdpbik7Ci0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jl
c3MgJiYgcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCkgewotICAgICAgICBt
X21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAgICBtX2lnbm9yZU1vbWVu
dHVtU2Nyb2xscyA9IGZhbHNlOwotICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFt
cCA9IDA7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmJlZ2lu
U2Nyb2xsR2VzdHVyZSgpCi17Ci0gICAgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCk7Ci0KLSAgICBt
X2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOwotICAgIG1faW5TY3JvbGxHZXN0dXJl
ID0gdHJ1ZTsKLSAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgIG1f
aWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7Ci0gICAgbV9sYXN0TW9tZW50dW1TY3JvbGxU
aW1lc3RhbXAgPSAwOwotICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotICAg
IG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPbkxlZnQgPSBtX3Njcm9sbGFibGVBcmVhLT5pc0hv
cml6b250YWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKCk7Ci0gICAgbV9zY3JvbGxl
ckluaXRpYWxseVBpbm5lZE9uUmlnaHQgPSBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250YWxT
Y3JvbGxlclBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCk7Ci0gICAgbV9jdW11bGF0aXZlSG9yaXpv
bnRhbFNjcm9sbCA9IDA7Ci0gICAgbV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbEV2ZXJT
d2l0Y2hUb09wcG9zaXRlRGlyZWN0aW9uT2ZQaW4gPSBmYWxzZTsKLSAgICAKLSAgICBJbnRTaXpl
IHN0cmV0Y2hBbW91bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwotICAg
IG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0
YShzdHJldGNoQW1vdW50LndpZHRoKCkpKTsKLSAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRI
ZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCkp
KTsKLQotICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOwotICAgIAotICAg
IGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9zbmFwUnVi
YmVyQmFuZFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
OjplbmRTY3JvbGxHZXN0dXJlKCkKLXsKLSAgICBkaWRFbmRTY3JvbGxHZXN0dXJlKCk7Ci0KLSAg
ICBzbmFwUnViYmVyQmFuZCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OnNuYXBSdWJiZXJCYW5kKCkKLXsKLSAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbW05T
UHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0gLSBtX2xhc3RNb21lbnR1bVNj
cm9sbFRpbWVzdGFtcDsKLSAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYg
dGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCi0gICAgICAgIG1fbW9t
ZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotCi0gICAgbV9pblNjcm9sbEdlc3R1cmUgPSBm
YWxzZTsKLQotICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNl
UmVmZXJlbmNlRGF0ZV07Ci0gICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAgICBt
X29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNp
emUoKTsKLQotICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdGFydFJlcGVhdGluZygxLjAvNjAu
MCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51bSkK
LXsKLSAgICByZXR1cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51bSAr
IDAuNWYpOwotfQotCi1zdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRvd2Fy
ZFplcm8oZmxvYXQgbnVtKQotewotICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVtKTsK
LSAgICBpZiAoZmFicyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQotICAgICAgICBudW0gPSBy
b3VuZGVkTnVtOwotCi0gICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOwotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZChUaW1l
cjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiopCi17Ci0gICAgaWYgKCFtX21vbWVudHVtU2Ny
b2xsSW5Qcm9ncmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykgewotICAgICAgICBDRlRp
bWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNl
RGF0ZV0gLSBtX3N0YXJ0VGltZTsKLQotICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxv
YXRTaXplKCkpIHsKLSAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gbV9zY3JvbGxhYmxlQXJl
YS0+b3ZlcmhhbmdBbW91bnQoKTsKLSAgICAgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBG
bG9hdFNpemUoKSkgeyAgICAKLSAgICAgICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIu
c3RvcCgpOwotICAgICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRTaXpl
KCk7Ci0gICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwotICAgICAgICAgICAgICAgIG1f
c3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0gICAgICAgICAgICAgICAgbV9vcmlnT3JpZ2lu
ID0gRmxvYXRQb2ludCgpOwotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRT
aXplKCk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZFN0YXJ0UnViYmVyQmFuZChyb3VuZGVkSW50U2l6
ZShtX3N0YXJ0U3RyZXRjaCkpOwotCi0gICAgICAgICAgICBtX29yaWdPcmlnaW4gPSAobV9zY3Jv
bGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIG1fc3RhcnRTdHJldGNoOwotICAgICAgICAgICAgbV9v
cmlnVmVsb2NpdHkgPSBtX21vbWVudHVtVmVsb2NpdHk7Ci0KLSAgICAgICAgICAgIC8vIEp1c3Qg
bGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBwcmVmZXIgdmVydGljYWwgcnViYmVyYmFuZGluZwotICAg
ICAgICAgICAgaWYgKGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpKSA+PSBmYWJzZihtX29y
aWdWZWxvY2l0eS53aWR0aCgpKSkKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRX
aWR0aCgwKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRG9uJ3QgcnViYmVyLWJhbmQg
aG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jpem9udGFsbHkK
LSAgICAgICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+aG9y
aXpvbnRhbFNjcm9sbGJhcigpOwotICAgICAgICAgICAgaWYgKCFoU2Nyb2xsZXIgfHwgIWhTY3Jv
bGxlci0+ZW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRo
KDApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCB2ZXJ0
aWNhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jpem9udGFsbHkKLSAgICAg
ICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxT
Y3JvbGxiYXIoKTsKLSAgICAgICAgICAgIGlmICghdlNjcm9sbGVyIHx8ICF2U2Nyb2xsZXItPmVu
YWJsZWQoKSkKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRIZWlnaHQoMCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBGbG9hdFBvaW50IGRlbHRhKHJvdW5kVG9EZXZpY2VQaXhlbFRv
d2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNoLndpZHRoKCks
IC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAoZmxvYXQpdGltZURlbHRhKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFG
b3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1tX29yaWdWZWxvY2l0eS5oZWln
aHQoKSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsKLQotICAgICAgICBpZiAoZmFicyhkZWx0YS54KCkp
ID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQg
bmV3T3JpZ2luID0gbV9vcmlnT3JpZ2luICsgZGVsdGE7Ci0KLSAgICAgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKLSAg
ICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2luKTsKLSAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRy
dWUpOwotCi0gICAgICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRjaCA9IG1fc2Nyb2xsYWJsZUFy
ZWEtPm92ZXJoYW5nQW1vdW50KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fc3RyZXRj
aFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJl
dGNoLndpZHRoKCkpKTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdo
dChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC5oZWlnaHQoKSkpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChtX29yaWdP
cmlnaW4pOwotCi0gICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5kaWRDb21wbGV0ZVJ1YmJl
ckJhbmQocm91bmRlZEludFNpemUobV9zdGFydFN0cmV0Y2gpKTsKLQotICAgICAgICAgICAgbV9z
bmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZv
cmNlID0gRmxvYXRTaXplKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fc3RhcnRUaW1l
ID0gMDsKLSAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0gICAgICAg
ICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgICAgICAgICBtX29yaWdWZWxv
Y2l0eSA9IEZsb2F0U2l6ZSgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9z
dGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07Ci0gICAg
ICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0gICAgfQotfQotI2VuZGlmCi0KLXZv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0SXNBY3RpdmUoKQotewotICAgIGlmIChp
c1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAgICAgICBpZiAobmVlZHNTY3Jv
bGxlclN0eWxlVXBkYXRlKCkpCi0gICAgICAgICAgICB1cGRhdGVTY3JvbGxlclN0eWxlKCk7Ci0g
ICAgfQotfQotCi0jaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQotdm9pZCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjp1cGRhdGVTY3JvbGxlclN0eWxlKCkKLXsKLSAgICBpZiAoIXNjcm9s
bGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpIHsKLSAgICAgICAgc2V0TmVlZHNTY3JvbGxl
clN0eWxlVXBkYXRlKHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bU1hYyogbWFjVGhlbWUgPSBjaHJvbWl1bVNjcm9sbGJhclRoZW1lKCk7
Ci0gICAgaWYgKCFtYWNUaGVtZSkgewotICAgICAgICBzZXROZWVkc1Njcm9sbGVyU3R5bGVVcGRh
dGUoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IG5ld1N0eWxlID0g
d2tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIuZ2V0KCkpOwotCi0gICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBz
Y3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHZlcnRpY2Fs
U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgV0tTY3JvbGxiYXJQYWludGVyUmVm
IG9sZFZlcnRpY2FsUGFpbnRlciA9IHdrVmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJv
bGxlcihtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLSAgICAgICAgV0tTY3Jv
bGxiYXJQYWludGVyUmVmIG5ld1ZlcnRpY2FsUGFpbnRlciA9IHdrTWFrZVNjcm9sbGJhclJlcGxh
Y2VtZW50UGFpbnRlcihvbGRWZXJ0aWNhbFBhaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3U3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTY3Jv
bGxiYXItPmNvbnRyb2xTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2Up
OwotICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcih2ZXJ0aWNhbFNj
cm9sbGJhciwgbmV3VmVydGljYWxQYWludGVyKTsKLSAgICAgICAgd2tTZXRQYWludGVyRm9yUGFp
bnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgbmV3VmVy
dGljYWxQYWludGVyLCBmYWxzZSk7Ci0KLSAgICAgICAgLy8gVGhlIGRpZmZlcmVudCBzY3JvbGxi
YXIgc3R5bGVzIGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBzbyB3ZSBtdXN0IHJlLXNldCB0
aGUgCi0gICAgICAgIC8vIGZyYW1lUmVjdCB0byB0aGUgbmV3IHRoaWNrbmVzcywgYW5kIHRoZSBy
ZS1sYXlvdXQgYmVsb3cgd2lsbCBlbnN1cmUgdGhlIHBvc2l0aW9uCi0gICAgICAgIC8vIGFuZCBs
ZW5ndGggYXJlIHByb3Blcmx5IHVwZGF0ZWQuCi0gICAgICAgIGludCB0aGlja25lc3MgPSBtYWNU
aGVtZS0+c2Nyb2xsYmFyVGhpY2tuZXNzKHZlcnRpY2FsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
KTsKLSAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIDAs
IHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7Ci0gICAgfQotCi0gICAgaWYgKFNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCktPmhvcml6b250YWxTY3JvbGxiYXIo
KSkgewotICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAg
ICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIG9sZEhvcml6b250YWxQYWludGVyID0gd2tIb3Jpem9u
dGFsU2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlci5nZXQoKSk7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdIb3Jpem9udGFs
UGFpbnRlciA9IHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihvbGRIb3Jpem9udGFs
UGFpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0eWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29udHJvbFNpemUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgICBtYWNUaGVt
ZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcihob3Jpem9udGFsU2Nyb2xsYmFyLCBuZXdIb3Jp
em9udGFsUGFpbnRlcik7Ci0gICAgICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVy
KG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5ld0hvcml6b250YWxQYWludGVy
LCB0cnVlKTsKLQotICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2
ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZSAKLSAgICAgICAg
Ly8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhlIHJlLWxheW91dCBiZWxv
dyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KLSAgICAgICAgLy8gYW5kIGxlbmd0aCBhcmUgcHJv
cGVybHkgdXBkYXRlZC4KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1hY1RoZW1lLT5zY3JvbGxi
YXJUaGlja25lc3MoaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0gICAgICAg
IGhvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIDAsIHRoaWNrbmVz
cywgdGhpY2tuZXNzKSk7Ci0gICAgfQotCi0gICAgLy8gSWYgbmVlZHNTY3JvbGxlclN0eWxlVXBk
YXRlKCkgaXMgdHJ1ZSwgdGhlbiB0aGUgcGFnZSBpcyByZXN0b3JpbmcgZnJvbSB0aGUgcGFnZSBj
YWNoZSwgYW5kIAotICAgIC8vIGEgcmVsYXlvdXQgd2lsbCBoYXBwZW4gb24gaXRzIG93bi4gT3Ro
ZXJ3aXNlLCB3ZSBtdXN0IGluaXRpYXRlIGEgcmUtbGF5b3V0IG91cnNlbHZlcy4KLSAgICBzY3Jv
bGxhYmxlQXJlYSgpLT5zY3JvbGxiYXJTdHlsZUNoYW5nZWQobmV3U3R5bGUsICFuZWVkc1Njcm9s
bGVyU3R5bGVVcGRhdGUoKSk7Ci0KLSAgICBzZXROZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUoZmFs
c2UpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnN0YXJ0U2Nyb2xsYmFy
UGFpbnRUaW1lcigpCi17Ci0gICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdGFydE9u
ZVNob3QoMC4xKTsKLX0KLQotYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGxi
YXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2luaXRpYWxTY3Jv
bGxiYXJQYWludFRpbWVyLmlzQWN0aXZlKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKQotewotICAgIG1faW5pdGlhbFNjcm9s
bGJhclBhaW50VGltZXIuc3RvcCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYz4qKQotewotICAgIHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxl
cnMobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Qo
Y29uc3QgSW50UmVjdCYgc2Nyb2xsZXJUaHVtYikKLXsKLSAgICBJbnRSZWN0IHJlY3RJblZpZXdD
b29yZGluYXRlcyA9IHNjcm9sbGVyVGh1bWI7Ci0gICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxT
Y3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAg
ICByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udmVydFRvQ29u
dGFpbmluZ1ZpZXcoc2Nyb2xsZXJUaHVtYik7Ci0KLSAgICBpZiAocmVjdEluVmlld0Nvb3JkaW5h
dGVzID09IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3Njcm9sbGFibGVBcmVhLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QocmVjdEluVmll
d0Nvb3JkaW5hdGVzKTsKLSAgICBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCA9IHJlY3RJblZp
ZXdDb29yZGluYXRlczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9t
aXVtTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLmgJKHJldmlzaW9uIDEwMzI3MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGls
aXRpZXNDaHJvbWl1bU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBT
Y3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWNfaAotI2RlZmluZSBTY3JvbGxiYXJP
dmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWNfaAotCi0jaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlO
VEVSKQotCi0vLyBQdWJsaWMgQVBJcyBub3QgYXZhaWxhYmxlIG9uIHZlcnNpb25zIG9mIE1hYyBv
biB3aGljaCB3ZSBidWlsZAotI2lmIChkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSkKLWVudW0gewotICAgIE5TU2Nyb2xsZXJT
dHlsZUxlZ2FjeSAgICAgICA9IDAsCi0gICAgTlNTY3JvbGxlclN0eWxlT3ZlcmxheSAgICAgID0g
MQotfTsKLQotI2lmZGVmIF9fT0JKQ19fCi10eXBlZGVmIE5TSW50ZWdlciBOU1Njcm9sbGVyU3R5
bGU7Ci0jZW5kaWYKLSNlbmRpZgotCi10eXBlZGVmIHVpbnQzMiB3a1Njcm9sbGVyU3R5bGU7Ci0K
LSNpZmRlZiBfX09CSkNfXwotQGNsYXNzIE5TU2Nyb2xsZXJJbXA7Ci1AY2xhc3MgTlNTY3JvbGxl
ckltcFBhaXI7Ci0jZWxzZQotY2xhc3MgTlNTY3JvbGxlckltcDsKLWNsYXNzIE5TU2Nyb2xsZXJJ
bXBQYWlyOwotI2VuZGlmCi0KLXR5cGVkZWYgTlNTY3JvbGxlckltcCogV0tTY3JvbGxiYXJQYWlu
dGVyUmVmOwotdHlwZWRlZiBOU1Njcm9sbGVySW1wUGFpciogV0tTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlclJlZjsKLQotYm9vbCBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKTsKLQot
Ly8gU2Nyb2xsYmFyIFBhaW50ZXIKLWJvb2wgd2tTY3JvbGxiYXJQYWludGVyVXNlc092ZXJsYXlT
Y3JvbGxlcnModm9pZCk7Ci1ib29sIHdrU2Nyb2xsYmFyUGFpbnRlcklzSG9yaXpvbnRhbChXS1Nj
cm9sbGJhclBhaW50ZXJSZWYpOwotQ0dGbG9hdCB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEo
V0tTY3JvbGxiYXJQYWludGVyUmVmKTsKLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyU2V0T3Zlcmxh
eVN0YXRlKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiwgaW50IG92ZXJsYXlTY3JvbGxlclN0YXRlKTsK
LXZvaWQgd2tTY3JvbGxiYXJQYWludGVyUGFpbnQoV0tTY3JvbGxiYXJQYWludGVyUmVmLCBib29s
IGVuYWJsZWQsIGRvdWJsZSB2YWx1ZSwgQ0dGbG9hdCBwcm9wb3J0aW9uLCBOU1JlY3QgZnJhbWVS
ZWN0KTsKLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyUGFpbnRUcmFjayhXS1Njcm9sbGJhclBhaW50
ZXJSZWYsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIE5T
UmVjdCBmcmFtZVJlY3QpOwotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJQYWludEtub2IoV0tTY3Jv
bGxiYXJQYWludGVyUmVmKTsKLWludCB3a1Njcm9sbGJhck1pbmltdW1UaHVtYkxlbmd0aChXS1Nj
cm9sbGJhclBhaW50ZXJSZWYpOwotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShX
S1Njcm9sbGJhclBhaW50ZXJSZWYsIGlkIHNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSk7Ci12b2lk
IHdrU2Nyb2xsYmFyUGFpbnRlclNldEVuYWJsZWQoV0tTY3JvbGxiYXJQYWludGVyUmVmLCBib29s
IGVuYWJsZWQpOwotQ0dGbG9hdCB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKFdLU2Nyb2xs
YmFyUGFpbnRlclJlZik7Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUGFp
bnRlcihpbnQgY29udHJvbFNpemUsIGJvb2wgaXNIb3Jpem9udGFsKTsKLWludCB3a1Njcm9sbGJh
clRoaWNrbmVzcyhpbnQgY29udHJvbFNpemUpOwotaW50IHdrU2Nyb2xsYmFyTWluaW11bVRvdGFs
TGVuZ3RoTmVlZGVkRm9yVGh1bWIoV0tTY3JvbGxiYXJQYWludGVyUmVmKTsKLUNHUmVjdCB3a1Nj
cm9sbGJhclBhaW50ZXJLbm9iUmVjdChXS1Njcm9sbGJhclBhaW50ZXJSZWYpOwotV0tTY3JvbGxi
YXJQYWludGVyUmVmIHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihXS1Njcm9sbGJh
clBhaW50ZXJSZWYgb2xkUGFpbnRlciwgaW50IG5ld1N0eWxlLCBpbnQgY29udHJvbFNpemUsIGJv
b2wgaXNIb3Jpem9udGFsKTsKLXZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKFdL
U2Nyb2xsYmFyUGFpbnRlclJlZiwgQ0dGbG9hdCk7Ci12b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
clRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmLCBDR0Zsb2F0KTsKLQotZW51bSB7Ci0g
ICAgd2tTY3JvbGxlcktub2JTdHlsZURlZmF1bHQgPSAwLAotICAgIHdrU2Nyb2xsZXJLbm9iU3R5
bGVEYXJrID0gMSwKLSAgICB3a1Njcm9sbGVyS25vYlN0eWxlTGlnaHQgPSAyCi19OwotdHlwZWRl
ZiB1aW50MzIgd2tTY3JvbGxlcktub2JTdHlsZTsKLWV4dGVybiB2b2lkIHdrU2V0U2Nyb2xsYmFy
UGFpbnRlcktub2JTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJSZWYsIHdrU2Nyb2xsZXJLbm9iU3R5
bGUpOwotCi0vLyBTY3JvbGxiYXIgUGFpbnRlciBDb250cm9sbGVyCi1XS1Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyUmVmIHdrTWFrZVNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyKGlkIHBhaW50
ZXJDb250cm9sbGVyRGVsZWdhdGUpOwotdm9pZCB3a0NvbnRlbnRBcmVhU2Nyb2xsZWQoV0tTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrQ29udGVudEFyZWFXaWxsUGFpbnQo
V0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrTW91c2VFbnRlcmVkQ29u
dGVudEFyZWEoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrTW91c2VF
eGl0ZWRDb250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKLXZvaWQg
d2tNb3VzZU1vdmVkSW5Db250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVm
KTsKLXZvaWQgd2tXaWxsU3RhcnRMaXZlUmVzaXplKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJSZWYpOwotdm9pZCB3a0NvbnRlbnRBcmVhUmVzaXplZChXS1Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyUmVmKTsKLXZvaWQgd2tXaWxsRW5kTGl2ZVJlc2l6ZShXS1Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyUmVmKTsKLXZvaWQgd2tDb250ZW50QXJlYURpZFNob3coV0tTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrQ29udGVudEFyZWFEaWRIaWRlKFdLU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a0RpZEJlZ2luU2Nyb2xsR2VzdHVyZShXS1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKLXZvaWQgd2tEaWRFbmRTY3JvbGxHZXN0dXJl
KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a1Njcm9sbGJhclBhaW50
ZXJGb3JjZUZsYXNoU2Nyb2xsZXJzKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwot
dm9pZCB3a1NldFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUoV0tTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlclJlZiwgd2tTY3JvbGxlclN0eWxlIG5ld1N0eWxlKTsKLXZvaWQgd2tTZXRQ
YWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJl
ZiwgV0tTY3JvbGxiYXJQYWludGVyUmVmLCBib29sIGlzSG9yaXpvbnRhbCk7Ci1XS1Njcm9sbGJh
clBhaW50ZXJSZWYgd2tWZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKFdLU2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotV0tTY3JvbGxiYXJQYWludGVyUmVmIHdrSG9y
aXpvbnRhbFNjcm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKFdLU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJSZWYpOwotd2tTY3JvbGxlclN0eWxlIHdrU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKLQotI2VuZGlmIC8vIFVT
RShXS19TQ1JPTExCQVJfUEFJTlRFUikKLQotI2VuZGlmIC8vIFNjcm9sbGJhck92ZXJsYXlVdGls
aXRpZXNDaHJvbWl1bU1hY19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGll
c0Nocm9taXVtTWFjLm1tCShyZXZpc2lvbiAxMDMyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEsMzY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0Uo
V0tfU0NST0xMQkFSX1BBSU5URVIpCi0KLSNpbmNsdWRlICJTY3JvbGxiYXJPdmVybGF5VXRpbGl0
aWVzQ2hyb21pdW1NYWMuaCIKLSNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgotI2luY2x1ZGUgPENv
Y29hL0NvY29hLmg+Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUaGlzIGZpbGUgY29u
dGFpbnMgdXRpbGl0aWVzIHRvIGRyYXcgb3ZlcmxheSBzY3JvbGxiYXJzLiBUaGVyZSBhcmUgbm8g
cHVibGljCi0vLyBBUElzIHlldCBvbiB0aGUgTWFjIHRvIGRyYXcgb3ZlcmxheSBzY3JvbGxiYXJz
IHNvIHdlIHVzZSBwcml2YXRlIEFQSXMgdGhhdAotLy8gd2UgbG9vayB1cCBhdCBydW50aW1lLiBJ
ZiB0aGUgcHJpdmF0ZSBBUElzIGRvbid0IGV4aXN0IHRoZW4gdGhlIHdrTWFrZSoKLS8vIGZ1bmN0
aW9ucyB3aWxsIHJldHVybiBuaWwuCi0vLwotLy8gTm90ZSwgdGhpcyBmaWxlIGNvbnRhaW5zIGZ1
bmN0aW9ucyBjb3BpZWQgZnJvbSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmguCi0vLyBVc2luZyB0
aGUgc2FtZSBuYW1lcyBtYWtlcyB0aGUgY29kZSBlYXNpZXIgdG8gbWFpbnRhaW4uCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0vLyBQdWJsaWMgQVBJcyBub3QgYXZhaWxhYmxlIG9uIHZlcnNp
b25zIG9mIE1hYyBvbiB3aGljaCB3ZSBidWlsZAotI2lmIChkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSkKLUBpbnRlcmZhY2Ug
TlNTY3JvbGxlciAoTlNPYmplY3QpCi0rIChOU1Njcm9sbGVyU3R5bGUpcHJlZmVycmVkU2Nyb2xs
ZXJTdHlsZTsKLUBlbmQKLSNlbmRpZgotCi0vLyBUaGVzZSBhcmUgcHJpdmF0ZSBBUElzIHRvIGRy
YXcgb3ZlcmxheSBzY3JvbGxiYXJzLgotQGludGVyZmFjZSBOU1Njcm9sbGVySW1wIDogTlNPYmpl
Y3QKLQotKyAoaWQpc2Nyb2xsZXJJbXBXaXRoU3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSlzdHlsZQot
ICAgICAgICAgICAgICAgY29udHJvbFNpemU6KE5TQ29udHJvbFNpemUpc2l6ZQotICAgICAgICAg
ICAgICAgIGhvcml6b250YWw6KEJPT0wpaG9yaXpvbnRhbAotICAgICAgcmVwbGFjaW5nU2Nyb2xs
ZXJJbXA6KGlkKXNjcm9sbGVyOwotCi1AcHJvcGVydHkgQ0dGbG9hdCBrbm9iQWxwaGE7Ci1AcHJv
cGVydHkgQ0dGbG9hdCB0cmFja0FscGhhOwotQHByb3BlcnR5IENHRmxvYXQga25vYlByb3BvcnRp
b247Ci1AcHJvcGVydHkgTlNJbnRlZ2VyIGtub2JTdHlsZTsKLUBwcm9wZXJ0eShnZXR0ZXI9aXNF
bmFibGVkKSBCT09MIGVuYWJsZWQ7Ci1AcHJvcGVydHkoZ2V0dGVyPWlzSG9yaXpvbnRhbCkgQk9P
TCBob3Jpem9udGFsOwotQHByb3BlcnR5IGRvdWJsZSBkb3VibGVWYWx1ZTsKLUBwcm9wZXJ0eShh
c3NpZ24pIGlkIGRlbGVnYXRlOwotCi0tIChDR0Zsb2F0KWtub2JNaW5MZW5ndGg7Ci0tIChDR0Zs
b2F0KXRyYWNrT3ZlcmxhcEVuZEluc2V0OwotLSAoQ0dGbG9hdClrbm9iT3ZlcmxhcEVuZEluc2V0
OwotLSAoQ0dGbG9hdCl0cmFja0VuZEluc2V0OwotLSAoQ0dGbG9hdClrbm9iRW5kSW5zZXQ7Ci0t
IChDR0Zsb2F0KXRyYWNrQm94V2lkdGg7Ci0tIChDR0Zsb2F0KXRyYWNrV2lkdGg7Ci0tICh2b2lk
KXNldEJvdW5kc1NpemU6KE5TU2l6ZSlzaXplOwotLSAodm9pZClkcmF3S25vYlNsb3RJblJlY3Q6
KE5TUmVjdClyZWN0Ci0gICAgICAgICAgICAgICAgIGhpZ2hsaWdodDooQk9PTClmbGFnOwotLSAo
dm9pZClkcmF3S25vYjsKLS0gKHZvaWQpc2V0T3ZlcmxheVNjcm9sbGVyU3RhdGU6KE5TU2Nyb2xs
ZXJTdHlsZSlzdGF0ZQotICAgICAgICAgICAgICAgZm9yY2VJbW1lZGlhdGVseTooQk9PTClmbGFn
OwotLSAodm9pZClzZXREZWxlZ2F0ZTooaWQpZGVsZWdhdGU7Ci0tIChOU1JlY3QpcmVjdEZvclBh
cnQ6KE5TVUludGVnZXIpYXJnMTsKLQotQGVuZAotCi0vLyBUaGVzZSBhcmUgcHJpdmF0ZSBBUElz
IHRvIG1hbmFnZSBvdmVybGF5IHNjcm9sbGJhcnMuCi1AaW50ZXJmYWNlIE5TU2Nyb2xsZXJJbXBQ
YWlyIDogTlNPYmplY3QKLQotQHByb3BlcnR5IE5TU2Nyb2xsZXJTdHlsZSBzY3JvbGxlclN0eWxl
OwotQHByb3BlcnR5KHJldGFpbikgTlNTY3JvbGxlckltcCAqaG9yaXpvbnRhbFNjcm9sbGVySW1w
OwotQHByb3BlcnR5KHJldGFpbikgTlNTY3JvbGxlckltcCAqdmVydGljYWxTY3JvbGxlckltcDsK
LUBwcm9wZXJ0eShhc3NpZ24pIGlkIGRlbGVnYXRlOwotCi0tICh2b2lkKWhpZGVPdmVybGF5U2Ny
b2xsZXJzOwotLSAodm9pZClmbGFzaFNjcm9sbGVyczsKLS0gKHZvaWQpY29udGVudEFyZWFTY3Jv
bGxlZDsKLS0gKHZvaWQpY29udGVudEFyZWFXaWxsRHJhdzsKLS0gKHZvaWQpY29udGVudEFyZWFE
aWRIaWRlOwotLSAodm9pZCl3aW5kb3dPcmRlcmVkT3V0OwotLSAodm9pZCl3aW5kb3dPcmRlcmVk
SW47Ci0tICh2b2lkKW1vdXNlRW50ZXJlZENvbnRlbnRBcmVhOwotLSAodm9pZCltb3VzZU1vdmVk
SW5Db250ZW50QXJlYTsKLS0gKHZvaWQpbW91c2VFeGl0ZWRDb250ZW50QXJlYTsKLS0gKHZvaWQp
c3RhcnRMaXZlUmVzaXplOwotLSAodm9pZCljb250ZW50QXJlYURpZFJlc2l6ZTsKLS0gKHZvaWQp
ZW5kTGl2ZVJlc2l6ZTsKLS0gKHZvaWQpYmVnaW5TY3JvbGxHZXN0dXJlOwotLSAodm9pZCllbmRT
Y3JvbGxHZXN0dXJlOwotCi1AZW5kCi0KLXN0YXRpYyBDbGFzcyBsb29rVXBOU1Njcm9sbGVySW1w
Q2xhc3MoKQotewotICAgIHN0YXRpYyBDbGFzcyByZXN1bHQgPSBOU0NsYXNzRnJvbVN0cmluZyhA
Ik5TU2Nyb2xsZXJJbXAiKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgQ2xhc3Mg
bG9va1VwTlNTY3JvbGxlckltcFBhaXJDbGFzcygpCi17Ci0gICAgc3RhdGljIENsYXNzIHJlc3Vs
dCA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcFBhaXIiKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1zdGF0aWMgTlNDb250cm9sU2l6ZSBzY3JvbGxiYXJDb250cm9sU2l6ZVRv
TlNDb250cm9sU2l6ZShpbnQgY29udHJvbFNpemUpCi17Ci0gICAgcmV0dXJuIGNvbnRyb2xTaXpl
ID09IFdlYkNvcmU6OlJlZ3VsYXJTY3JvbGxiYXIgPyBOU1JlZ3VsYXJDb250cm9sU2l6ZSA6IE5T
U21hbGxDb250cm9sU2l6ZTsKLX0KLQotc3RhdGljIE5TU2Nyb2xsZXJTdHlsZSBwcmVmZXJyZWRT
Y3JvbGxlclN0eWxlKCkKLXsKLSAgICBpZiAoW05TU2Nyb2xsZXIgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihwcmVmZXJyZWRTY3JvbGxlclN0eWxlKV0pCi0gICAgICAgIHJldHVybiBbTlNT
Y3JvbGxlciBwcmVmZXJyZWRTY3JvbGxlclN0eWxlXTsKLSAgICByZXR1cm4gTlNTY3JvbGxlclN0
eWxlTGVnYWN5OwotfQotCi1ib29sIHdrU2Nyb2xsYmFyUGFpbnRlclVzZXNPdmVybGF5U2Nyb2xs
ZXJzKHZvaWQpCi17Ci0gICAgcmV0dXJuIHByZWZlcnJlZFNjcm9sbGVyU3R5bGUoKSA9PSBOU1Nj
cm9sbGVyU3R5bGVPdmVybGF5OwotfQotCi1ib29sIHdrU2Nyb2xsYmFyUGFpbnRlcklzSG9yaXpv
bnRhbChXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICByZXR1cm4gW3BhaW50
ZXIgaXNIb3Jpem9udGFsXTsKLX0KLQotQ0dGbG9hdCB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxw
aGEoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIpCi17Ci0gICAgcmV0dXJuIFtwYWludGVy
IGtub2JBbHBoYV07Ci19Ci0KLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyU2V0T3ZlcmxheVN0YXRl
KFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCBpbnQgb3ZlcmxheVNjcm9sbGVyU3RhdGUp
Ci17Ci0gICAgW3BhaW50ZXIgc2V0T3ZlcmxheVNjcm9sbGVyU3RhdGU6b3ZlcmxheVNjcm9sbGVy
U3RhdGUKLSAgICAgICAgICAgICAgICAgICAgZm9yY2VJbW1lZGlhdGVseTpZRVNdOwotfQotCi12
b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50KFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVy
LCBib29sIGVuYWJsZWQsIGRvdWJsZSB2YWx1ZSwgQ0dGbG9hdCBwcm9wb3J0aW9uLCBOU1JlY3Qg
ZnJhbWVSZWN0KQotewotICAgIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50VHJhY2socGFpbnRlciwg
ZW5hYmxlZCwgdmFsdWUsIHByb3BvcnRpb24sIGZyYW1lUmVjdCk7Ci0gICAgd2tTY3JvbGxiYXJQ
YWludGVyUGFpbnRLbm9iKHBhaW50ZXIpOwotfQotCi12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclBh
aW50VHJhY2soV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIGJvb2wgZW5hYmxlZCwgZG91
YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIE5TUmVjdCBmcmFtZVJlY3QpCi17Ci0gICAg
W3BhaW50ZXIgc2V0RW5hYmxlZDplbmFibGVkXTsKLSAgICBbcGFpbnRlciBzZXRCb3VuZHNTaXpl
OmZyYW1lUmVjdC5zaXplXTsKLSAgICBbcGFpbnRlciBzZXREb3VibGVWYWx1ZTp2YWx1ZV07Ci0g
ICAgW3BhaW50ZXIgc2V0S25vYlByb3BvcnRpb246cHJvcG9ydGlvbl07Ci0KLSAgICBpZiAoW3Bh
aW50ZXIgaXNIb3Jpem9udGFsXSkKLSAgICAgICAgZnJhbWVSZWN0LnNpemUuaGVpZ2h0ID0gW3Bh
aW50ZXIgdHJhY2tXaWR0aF07Ci0gICAgZWxzZQotICAgICAgICBmcmFtZVJlY3Quc2l6ZS53aWR0
aCA9IFtwYWludGVyIHRyYWNrV2lkdGhdOwotICAgIGZyYW1lUmVjdC5vcmlnaW4gPSBOU1plcm9Q
b2ludDsKLQotICAgIFtwYWludGVyIGRyYXdLbm9iU2xvdEluUmVjdDpmcmFtZVJlY3QgaGlnaGxp
Z2h0Ok5PXTsKLX0KLQotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJQYWludEtub2IoV0tTY3JvbGxi
YXJQYWludGVyUmVmIHBhaW50ZXIpCi17Ci0gICAgW3BhaW50ZXIgZHJhd0tub2JdOwotfQotCi1p
bnQgd2tTY3JvbGxiYXJNaW5pbXVtVGh1bWJMZW5ndGgoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBh
aW50ZXIpCi17Ci0gICAgcmV0dXJuIFtwYWludGVyIGtub2JNaW5MZW5ndGhdOwotfQotCi12b2lk
IHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWlu
dGVyLCBpZCBzY3JvbGxiYXJQYWludGVyRGVsZWdhdGUpCi17Ci0gICAgW3BhaW50ZXIgc2V0RGVs
ZWdhdGU6c2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlXTsKLX0KLQotdm9pZCB3a1Njcm9sbGJhclBh
aW50ZXJTZXRFbmFibGVkKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCBib29sIGVuYWJs
ZWQpCi17Ci0gICAgW3BhaW50ZXIgc2V0RW5hYmxlZDplbmFibGVkXTsKLX0KLQotQ0dGbG9hdCB3
a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVy
KQotewotICAgIHJldHVybiBbcGFpbnRlciB0cmFja0FscGhhXTsKLX0KLQotV0tTY3JvbGxiYXJQ
YWludGVyUmVmIHdrTWFrZVNjcm9sbGJhclBhaW50ZXIoaW50IGNvbnRyb2xTaXplLCBib29sIGlz
SG9yaXpvbnRhbCkKLXsKLSAgICByZXR1cm4gd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWlu
dGVyKG5pbCwgcHJlZmVycmVkU2Nyb2xsZXJTdHlsZSgpLCBjb250cm9sU2l6ZSwgaXNIb3Jpem9u
dGFsKTsKLX0KLQotaW50IHdrU2Nyb2xsYmFyVGhpY2tuZXNzKGludCBjb250cm9sU2l6ZSkKLXsK
LSAgICByZXR1cm4gW3drTWFrZVNjcm9sbGJhclBhaW50ZXIoY29udHJvbFNpemUsIGZhbHNlKSB0
cmFja0JveFdpZHRoXTsKLX0KLQotaW50IHdrU2Nyb2xsYmFyTWluaW11bVRvdGFsTGVuZ3RoTmVl
ZGVkRm9yVGh1bWIoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIpCi17Ci0gICAgcmV0dXJu
IFtwYWludGVyIGtub2JNaW5MZW5ndGhdICsKLSAgICAgICAgICAgW3BhaW50ZXIgdHJhY2tPdmVy
bGFwRW5kSW5zZXRdICsKLSAgICAgICAgICAgW3BhaW50ZXIga25vYk92ZXJsYXBFbmRJbnNldF0g
KwotICAgICAgICAgICAoW3BhaW50ZXIgdHJhY2tFbmRJbnNldF0gKyBbcGFpbnRlciBrbm9iRW5k
SW5zZXRdKSAqIDI7Ci19Ci0KLVdLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a1ZlcnRpY2FsU2Nyb2xs
YmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBj
b250cm9sbGVyKQotewotICAgIHJldHVybiBbY29udHJvbGxlciB2ZXJ0aWNhbFNjcm9sbGVySW1w
XTsKLX0KLQotV0tTY3JvbGxiYXJQYWludGVyUmVmIHdrSG9yaXpvbnRhbFNjcm9sbGJhclBhaW50
ZXJGb3JDb250cm9sbGVyKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxl
cikKLXsKLSAgICByZXR1cm4gW2NvbnRyb2xsZXIgaG9yaXpvbnRhbFNjcm9sbGVySW1wXTsKLX0K
LQotd2tTY3JvbGxlclN0eWxlIHdrU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJTdHlsZShXS1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgcmV0dXJuIFtj
b250cm9sbGVyIHNjcm9sbGVyU3R5bGVdOwotfQotCi1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tN
YWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBvbGRQ
YWludGVyLCBpbnQgbmV3U3R5bGUsIGludCBjb250cm9sU2l6ZSwgYm9vbCBpc0hvcml6b250YWwp
Ci17Ci0gICAgaWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW2xvb2tVcE5TU2Nyb2xsZXJJbXBDbGFzcygpIHNjcm9s
bGVySW1wV2l0aFN0eWxlOm5ld1N0eWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250cm9sU2l6ZTpzY3JvbGxiYXJDb250cm9sU2l6ZVRvTlNDb250
cm9sU2l6ZShjb250cm9sU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBob3Jpem9udGFsOmlzSG9yaXpvbnRhbAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwbGFjaW5nU2Nyb2xsZXJJbXA6b2xkUGFpbnRlcl07Ci19
Ci0KLXZvaWQgd2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyLCBXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRl
ciwgYm9vbCBpc0hvcml6b250YWwpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAg
W2NvbnRyb2xsZXIgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwotICAgIGVsc2UK
LSAgICAgICAgW2NvbnRyb2xsZXIgc2V0VmVydGljYWxTY3JvbGxlckltcDpwYWludGVyXTsKLX0K
LQotdm9pZCB3a1NldFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUoV0tTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlclJlZiBwYWludGVyLCB3a1Njcm9sbGVyU3R5bGUgbmV3U3R5bGUpCi17
Ci0gICAgW3BhaW50ZXIgc2V0U2Nyb2xsZXJTdHlsZTpuZXdTdHlsZV07Ci19Ci0KLUNHUmVjdCB3
a1Njcm9sbGJhclBhaW50ZXJLbm9iUmVjdChXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikK
LXsKLSAgICByZXR1cm4gTlNSZWN0VG9DR1JlY3QoW3BhaW50ZXIgcmVjdEZvclBhcnQ6TlNTY3Jv
bGxlcktub2JdKTsKLX0KLQotdm9pZCB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoV0tT
Y3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIENHRmxvYXQgYWxwaGEpCi17Ci0gICAgW3BhaW50
ZXIgc2V0S25vYkFscGhhOmFscGhhXTsKLX0KLQotdm9pZCB3a1NldFNjcm9sbGJhclBhaW50ZXJU
cmFja0FscGhhKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCBDR0Zsb2F0IGFscGhhKQot
ewotICAgIFtwYWludGVyIHNldFRyYWNrQWxwaGE6YWxwaGFdOwotfQotCi12b2lkIHdrU2V0U2Ny
b2xsYmFyUGFpbnRlcktub2JTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgd2tT
Y3JvbGxlcktub2JTdHlsZSBzdHlsZSkKLXsKLSAgICBbcGFpbnRlciBzZXRLbm9iU3R5bGU6c3R5
bGVdOwotfQotCi1XS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIHdrTWFrZVNjcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyKGlkIHBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUpCi17Ci0gICAg
aWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICBOU1Njcm9sbGVySW1wUGFpciogY29udHJvbGxlciA9IFtbW2xvb2tVcE5TU2Nyb2xs
ZXJJbXBQYWlyQ2xhc3MoKSBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgIFtjb250cm9s
bGVyIHNldERlbGVnYXRlOnBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGVdOwotICAgIFtjb250cm9s
bGVyIHNldFNjcm9sbGVyU3R5bGU6cHJlZmVycmVkU2Nyb2xsZXJTdHlsZSgpXTsKLSAgICByZXR1
cm4gY29udHJvbGxlcjsKLX0KLQotdm9pZCB3a0NvbnRlbnRBcmVhU2Nyb2xsZWQoV0tTY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIGNv
bnRlbnRBcmVhU2Nyb2xsZWRdOwotfQotCi12b2lkIHdrQ29udGVudEFyZWFXaWxsUGFpbnQoV0tT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250cm9s
bGVyIGNvbnRlbnRBcmVhV2lsbERyYXddOwotfQotCi12b2lkIHdrTW91c2VFbnRlcmVkQ29udGVu
dEFyZWEoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAg
IFtjb250cm9sbGVyIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhXTsKLX0KLQotdm9pZCB3a01vdXNl
RXhpdGVkQ29udGVudEFyZWEoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9s
bGVyKQotewotICAgIFtjb250cm9sbGVyIG1vdXNlRXhpdGVkQ29udGVudEFyZWFdOwotfQotCi12
b2lkIHdrTW91c2VNb3ZlZEluQ29udGVudEFyZWEoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
clJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIG1vdXNlTW92ZWRJbkNvbnRlbnRB
cmVhXTsKLX0KLQotdm9pZCB3a1dpbGxTdGFydExpdmVSZXNpemUoV0tTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIHN0YXJ0TGl2ZVJl
c2l6ZV07Ci19Ci0KLXZvaWQgd2tDb250ZW50QXJlYVJlc2l6ZWQoV0tTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIGNvbnRlbnRBcmVh
RGlkUmVzaXplXTsKLX0KLQotdm9pZCB3a1dpbGxFbmRMaXZlUmVzaXplKFdLU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsKLSAgICBbY29udHJvbGxlciBlbmRMaXZl
UmVzaXplXTsKLX0KLQotdm9pZCB3a0NvbnRlbnRBcmVhRGlkU2hvdyhXS1Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgd2luZG93T3Jk
ZXJlZEluXTsKLX0KLQotdm9pZCB3a0NvbnRlbnRBcmVhRGlkSGlkZShXS1Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgd2luZG93T3Jk
ZXJlZE91dF07Ci19Ci0KLXZvaWQgd2tEaWRCZWdpblNjcm9sbEdlc3R1cmUoV0tTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIGJlZ2lu
U2Nyb2xsR2VzdHVyZV07Ci19Ci0KLXZvaWQgd2tEaWRFbmRTY3JvbGxHZXN0dXJlKFdLU2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsKLSAgICBbY29udHJvbGxlciBl
bmRTY3JvbGxHZXN0dXJlXTsKLX0KLQotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJGb3JjZUZsYXNo
U2Nyb2xsZXJzKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKLXsK
LSAgICBbY29udHJvbGxlciBoaWRlT3ZlcmxheVNjcm9sbGVyc107Ci0gICAgW2NvbnRyb2xsZXIg
Zmxhc2hTY3JvbGxlcnNdOwotfQotCi1ib29sIGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJs
ZSgpCi17Ci0gICAgc3RhdGljIGJvb2wgYXBpQXZhaWxhYmxlID0gW2xvb2tVcE5TU2Nyb2xsZXJJ
bXBDbGFzcygpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2Nyb2xsZXJJbXBXaXRoU3R5
bGU6Y29udHJvbFNpemU6aG9yaXpvbnRhbDpyZXBsYWNpbmdTY3JvbGxlckltcDopXSAmJgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb29rVXBOU1Njcm9sbGVySW1wUGFpckNsYXNz
KCkgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKHNjcm9sbGVyU3R5bGUpXTsK
LSAgICByZXR1cm4gYXBpQXZhaWxhYmxlOwotfQotCi0jZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJB
Ul9QQUlOVEVSKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaAkocmV2aXNpb24gMTAzMjcz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2MyArMjcsMjIgQEAKICNpZm5kZWYgU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bU1hY19oCiAjZGVmaW5lIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1N
YWNfaAogCi0jaW5jbHVkZSAiU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLmgi
Ci0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIKLQotLy8gVGhpcyBmaWxlIChh
bmQgaXRzIGFzc29jaWF0ZWQgLm1tIGZpbGUpIGlzIGEgY2xvbmUgb2YgU2Nyb2xsYmFyVGhlbWVN
YWMuaC4KLS8vIFNlZSB0aGUgLm1tIGZpbGUgZm9yIGRldGFpbHMuCisjaW5jbHVkZSAiU2Nyb2xs
YmFyVGhlbWVNYWMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3JvbGxiYXJU
aGVtZUNocm9taXVtTWFjIDogcHVibGljIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIHsKK2NsYXNz
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVNYWMgewog
cHVibGljOgogICAgIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMoKTsKICAgICB2aXJ0dWFsIH5T
Y3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKCk7CiAKLSAgICB2b2lkIHByZWZlcmVuY2VzQ2hhbmdl
ZCgpOwotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShTY3JvbGxiYXIqKTsK
LQogICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXIqLCBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwogCi0gICAgdmlydHVhbCBpbnQgc2Ny
b2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplID0gUmVndWxhclNjcm9sbGJhcik7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFy
Kik7Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBpbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKTsK
LSAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxheSgpOwotCi0gICAgdmlydHVh
bCBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQoKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLQotICAgIHZvaWQgc2V0
TmV3UGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqLCBXS1Njcm9sbGJhclBhaW50ZXJSZWYp
OwotICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJh
ciopOwotCiAgICAgdmlydHVhbCB2b2lkIHBhaW50T3ZlcmhhbmdBcmVhcyhTY3JvbGxWaWV3Kiwg
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJlYSwg
Y29uc3QgSW50UmVjdCYgdmVydGljYWxPdmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCk7CiAgICAgCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Ny
b2xsYmFyKik7Ci0gICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhciopOwotCi0gICAg
dmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciosIFNjcm9sbGJhclBhcnQs
IGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGZvcndhcmRCdXR0
b25SZWN0KFNjcm9sbGJhciosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7
Ci0gICAgdmlydHVhbCBJbnRSZWN0IHRyYWNrUmVjdChTY3JvbGxiYXIqLCBib29sIHBhaW50aW5n
ID0gZmFsc2UpOwotCi0gICAgdmlydHVhbCBpbnQgbWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpIHsg
cmV0dXJuIDQwOyB9Ci0KLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xs
YmFyKik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIq
LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHJh
Z0RvY3VtZW50SW5zdGVhZE9mVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50Jik7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCBwYWludEdpdmVuVGlja21hcmtzKEdyYXBoaWNz
Q29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmLCBjb25zdCBWZWN0b3I8SW50UmVj
dD4mKTsKIAotcHJpdmF0ZToKICAgICBSZWZQdHI8UGF0dGVybj4gbV9vdmVyaGFuZ1BhdHRlcm47
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJU
aGVtZUNocm9taXVtTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDEwMzI3MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwOCArMjcsMjEgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgiCiAKLSNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdy
YWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJMb2NhbEN1cnJl
bnRHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNp
bmNsdWRlICJOU1Njcm9sbGVySW1wRGV0YWlscy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9y
dC5oIgotI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaCIKKyNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvck1hYy5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlIDxD
YXJib24vQ2FyYm9uLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKICNpZiBVU0Uo
U0tJQSkKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAic2tpYS9l
eHQvc2tpYV91dGlsc19tYWMuaCIKICNlbmRpZgogCi0KLQotLy8gRklYTUU6IFRoZXJlIGFyZSBy
ZXBhaW50aW5nIHByb2JsZW1zIGR1ZSB0byBBcXVhIHNjcm9sbCBiYXIgYnV0dG9ucycgdmlzdWFs
IG92ZXJmbG93LgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLS8vIFRoaXMgZmlsZSAoYW5kIGl0cyBhc3NvY2lhdGVkIC5oIGZpbGUpIGlzIGEgY2xv
bmUgb2YgU2Nyb2xsYmFyVGhlbWVNYWMubW0uCi0vLyBCZWNhdXNlIHdlIHdhbnQgdG8gZHJhdyB0
aWNrbWFya3MgaW4gdGhlIHNjcm9sbGJhciwgd2UgbXVzdCBtYWludGFpbiBhIGZvcmsuCi0vLyBQ
bGVhc2UgbWFpbnRhaW4gdGhpcyBmaWxlIGJ5IHBlcmZvcm1pbmcgcGFyYWxsZWwgY2hhbmdlcyB0
byBpdC4KLS8vCi0vLyBUaGUgb25seSBjaGFuZ2VzIGZyb20gU2Nyb2xsYmFyVGhlbWVNYWMgc2hv
dWxkIGJlOgotLy8gLSBUaGUgY2xhc3NuYW1lIGNoYW5nZSBmcm9tIFNjcm9sbGJhclRoZW1lTWFj
IHRvIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuCi0vLyAtIEluIHBhaW50KCkgdGhlIGNvZGUg
dG8gcGFpbnQgdGhlIHRyYWNrLCB0aWNrbWFya3MsIGFuZCB0aHVtYiBzZXBhcmF0ZWx5LgotLy8g
LSBJbiBwYWludCgpIHRoZSB0aHVtYiBpcyBkcmF3biB2aWEgQ2hyb21lQnJpZGdlL1dlYlRoZW1l
RW5naW5lLgotLy8gLSBWYXJpb3VzIGZ1bmN0aW9ucyB0aGF0IHdlcmUgc3BsaXQgdXNpbmcgI2lm
IFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLS8vICAgaGF2ZSBiZWVuIGNvbWJpbmVkIHVzaW5n
IHJ1bnRpbWUgY2hlY2tzIGluc3RlYWQuCi0vLwotLy8gRm9yIGFsbCBvdGhlciBkaWZmZXJlbmNl
cywgaWYgaXQgd2FzIGludHJvZHVjZWQgaW4gdGhpcyBmaWxlLCB0aGVuIHRoZQotLy8gbWFpbnRh
aW5lciBmb3Jnb3QgdG8gaW5jbHVkZSBpdCBpbiB0aGUgbGlzdDsgb3RoZXJ3aXNlIGl0IGlzIGFu
IHVwZGF0ZSB0aGF0Ci0vLyBzaG91bGQgaGF2ZSBiZWVuIGFwcGxpZWQgdG8gdGhpcyBmaWxlIGJ1
dCB3YXMgbm90LgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgSGFzaE1hcDxTY3Jv
bGxiYXIqLCBSZXRhaW5QdHI8V0tTY3JvbGxiYXJQYWludGVyUmVmPiA+IFNjcm9sbGJhclBhaW50
ZXJNYXA7Ci0KLXN0YXRpYyBTY3JvbGxiYXJQYWludGVyTWFwKiBzY3JvbGxiYXJNYXAoKQotewot
ICAgIHN0YXRpYyBTY3JvbGxiYXJQYWludGVyTWFwKiBtYXAgPSBuZXcgU2Nyb2xsYmFyUGFpbnRl
ck1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi19Ci0KLUBpbnRlcmZhY2UgU2Nyb2xsYmFyUHJl
ZnNPYnNlcnZlciA6IE5TT2JqZWN0Ci17Ci19Ci0KLSsgKHZvaWQpcmVnaXN0ZXJBc09ic2VydmVy
OwotKyAodm9pZClhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiopdGhlTm90
aWZpY2F0aW9uOwotKyAodm9pZCliZWhhdmlvclByZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24q
KXRoZU5vdGlmaWNhdGlvbjsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gU2Nyb2xsYmFyUHJl
ZnNPYnNlcnZlcgotCi0rICh2b2lkKWFwcGVhcmFuY2VQcmVmc0NoYW5nZWQ6KE5TTm90aWZpY2F0
aW9uKil1bnVzZWROb3RpZmljYXRpb24KLXsKLSAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZp
Y2F0aW9uKTsKLQotICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpOwotICAgIGlmICh0aGVtZS0+aXNNb2NrVGhlbWUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyo+KHRoZW1lKS0+cHJl
ZmVyZW5jZXNDaGFuZ2VkKCk7Ci0gICAgaWYgKHNjcm9sbGJhck1hcCgpLT5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBTY3JvbGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBlbmQgPSBz
Y3JvbGxiYXJNYXAoKS0+ZW5kKCk7Ci0gICAgZm9yIChTY3JvbGxiYXJQYWludGVyTWFwOjppdGVy
YXRvciBpdCA9IHNjcm9sbGJhck1hcCgpLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgaXQtPmZpcnN0LT5zdHlsZUNoYW5nZWQoKTsKLSAgICAgICAgaXQtPmZpcnN0LT5pbnZh
bGlkYXRlKCk7Ci0gICAgfQotfQotCi0rICh2b2lkKWJlaGF2aW9yUHJlZnNDaGFuZ2VkOihOU05v
dGlmaWNhdGlvbiopdW51c2VkTm90aWZpY2F0aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVudXNl
ZE5vdGlmaWNhdGlvbik7Ci0KLSAgICBTY3JvbGxiYXJUaGVtZSogdGhlbWUgPSBTY3JvbGxiYXJU
aGVtZTo6dGhlbWUoKTsKLSAgICBpZiAodGhlbWUtPmlzTW9ja1RoZW1lKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPih0aGVt
ZSktPnByZWZlcmVuY2VzQ2hhbmdlZCgpOwotfQotCi0rICh2b2lkKXJlZ2lzdGVyQXNPYnNlcnZl
cgotewotICAgIFtbTlNEaXN0cmlidXRlZE5vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVy
XSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihhcHBlYXJhbmNlUHJlZnNDaGFu
Z2VkOikgbmFtZTpAIkFwcGxlQXF1YVNjcm9sbEJhclZhcmlhbnRDaGFuZ2VkIiBvYmplY3Q6bmls
IHN1c3BlbnNpb25CZWhhdmlvcjpOU05vdGlmaWNhdGlvblN1c3BlbnNpb25CZWhhdmlvckRlbGl2
ZXJJbW1lZGlhdGVseV07Ci0gICAgW1tOU0Rpc3RyaWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGJlaGF2aW9y
UHJlZnNDaGFuZ2VkOikgbmFtZTpAIkFwcGxlTm9SZWRpc3BsYXlBcHBlYXJhbmNlUHJlZmVyZW5j
ZUNoYW5nZWQiIG9iamVjdDpuaWwgc3VzcGVuc2lvbkJlaGF2aW9yOk5TTm90aWZpY2F0aW9uU3Vz
cGVuc2lvbkJlaGF2aW9yQ29hbGVzY2VdOwotfQotCi1AZW5kCi0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCkBAIC0x
MzcsMzMzICs1MCwxNyBAQCBTY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRo
CiAgICAgcmV0dXJuICZ0aGVtZTsKIH0KIAotLy8gRklYTUU6IEdldCB0aGVzZSBudW1iZXJzIGZy
b20gQ29yZVVJLgotc3RhdGljIGludCBjU2Nyb2xsYmFyVGhpY2tuZXNzW10gPSB7IDE1LCAxMSB9
Owotc3RhdGljIGludCBjUmVhbEJ1dHRvbkxlbmd0aFtdID0geyAyOCwgMjEgfTsKLXN0YXRpYyBp
bnQgY0J1dHRvbkluc2V0W10gPSB7IDE0LCAxMSB9Owotc3RhdGljIGludCBjQnV0dG9uSGl0SW5z
ZXRbXSA9IHsgMywgMiB9OwotLy8gY1JlYWxCdXR0b25MZW5ndGggLSBjQnV0dG9uSW5zZXQKLXN0
YXRpYyBpbnQgY0J1dHRvbkxlbmd0aFtdID0geyAxNCwgMTAgfTsKLXN0YXRpYyBpbnQgY1RodW1i
TWluTGVuZ3RoW10gPSB7IDI2LCAyMCB9OwotCi1zdGF0aWMgaW50IGNPdXRlckJ1dHRvbkxlbmd0
aFtdID0geyAxNiwgMTQgfTsgLy8gVGhlIG91dGVyIGJ1dHRvbiBpbiBhIGRvdWJsZSBidXR0b24g
cGFpciBpcyBhIGJpdCBiaWdnZXIuCi1zdGF0aWMgaW50IGNPdXRlckJ1dHRvbk92ZXJsYXAgPSAy
OwotCi1zdGF0aWMgZmxvYXQgZ0luaXRpYWxCdXR0b25EZWxheSA9IDAuNWY7Ci1zdGF0aWMgZmxv
YXQgZ0F1dG9zY3JvbGxCdXR0b25EZWxheSA9IDAuMDVmOwotc3RhdGljIGJvb2wgZ0p1bXBPblRy
YWNrQ2xpY2sgPSBmYWxzZTsKLXN0YXRpYyBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGdCdXR0
b25QbGFjZW1lbnQgPSBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSA/IFNjcm9sbGJh
ckJ1dHRvbnNOb25lIDogU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZDsKLQotc3RhdGljIHZvaWQg
dXBkYXRlQXJyb3dQbGFjZW1lbnQoKQotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElB
dmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNTdHJpbmcgKmJ1dHRvblBsYWNl
bWVudCA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIG9iamVjdEZvcktl
eTpAIkFwcGxlU2Nyb2xsQmFyVmFyaWFudCJdOwotICAgIGlmIChbYnV0dG9uUGxhY2VtZW50IGlz
RXF1YWxUb1N0cmluZzpAIlNpbmdsZSJdKQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Ny
b2xsYmFyQnV0dG9uc1NpbmdsZTsKLSAgICBlbHNlIGlmIChbYnV0dG9uUGxhY2VtZW50IGlzRXF1
YWxUb1N0cmluZzpAIkRvdWJsZU1pbiJdKQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Ny
b2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0OwotICAgIGVsc2UgaWYgKFtidXR0b25QbGFjZW1lbnQg
aXNFcXVhbFRvU3RyaW5nOkAiRG91YmxlQm90aCJdKQotICAgICAgICBnQnV0dG9uUGxhY2VtZW50
ID0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUJvdGg7Ci0gICAgZWxzZQotICAgICAgICBnQnV0dG9u
UGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZDsKLX0KLQotdm9pZCBTY3JvbGxi
YXJUaGVtZUNocm9taXVtTWFjOjpyZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
cikKLXsKLSAgICBib29sIGlzSG9yaXpvbnRhbCA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwotICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxi
YXJQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFyUGFpbnRlcihzY3JvbGxiYXItPmNvbnRyb2xTaXpl
KCksIGlzSG9yaXpvbnRhbCk7Ci0gICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIsIHNj
cm9sbGJhclBhaW50ZXIpOwotICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzY3JvbGxiYXIpOwotICAg
IHVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9s
bGJhclRoZW1lQ2hyb21pdW1NYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCi17Ci0gICAgc2Nyb2xsYmFyTWFwKCktPnJlbW92ZShzY3JvbGxiYXIpOwotfQotCi12
b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdQYWludGVyKQot
ewotICAgIHNjcm9sbGJhck1hcCgpLT5zZXQoc2Nyb2xsYmFyLCBuZXdQYWludGVyKTsKLSAgICB1
cGRhdGVFbmFibGVkU3RhdGUoc2Nyb2xsYmFyKTsKLSAgICB1cGRhdGVTY3JvbGxiYXJPdmVybGF5
U3R5bGUoc2Nyb2xsYmFyKTsKLX0KLQotV0tTY3JvbGxiYXJQYWludGVyUmVmIFNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1NYWM6OnBhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKTsKLX0K
LQogU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYygp
CiB7Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkg
ewotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICAgICAgLy8gTG9hZCB0aGUgbGlu
ZW4gcGF0dGVybiBpbWFnZSB1c2VkIGZvciBvdmVyaGFuZyBkcmF3aW5nLgotICAgICAgICBSZWZQ
dHI8SW1hZ2U+IHBhdHRlcm5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgib3Zl
cmhhbmdQYXR0ZXJuIik7Ci0gICAgICAgIG1fb3ZlcmhhbmdQYXR0ZXJuID0gUGF0dGVybjo6Y3Jl
YXRlKHBhdHRlcm5JbWFnZSwgdHJ1ZSwgdHJ1ZSk7Ci0KLSAgICAgICAgW1Njcm9sbGJhclByZWZz
T2JzZXJ2ZXIgcmVnaXN0ZXJBc09ic2VydmVyXTsKLSAgICAgICAgcHJlZmVyZW5jZXNDaGFuZ2Vk
KCk7Ci0gICAgfQorICAgIC8vIExvYWQgdGhlIGxpbmVuIHBhdHRlcm4gaW1hZ2UgdXNlZCBmb3Ig
b3ZlcmhhbmcgZHJhd2luZy4KKyAgICBSZWZQdHI8SW1hZ2U+IHBhdHRlcm5JbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgib3ZlcmhhbmdQYXR0ZXJuIik7CisgICAgbV9vdmVyaGFu
Z1BhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUocGF0dGVybkltYWdlLCB0cnVlLCB0cnVlKTsKIH0K
IAogU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6flNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMo
KQogewogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnByZWZlcmVuY2VzQ2hh
bmdlZCgpCi17Ci0gICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKLSAgICBbZGVmYXVsdHMgc3luY2hyb25pemVdOwotICAg
IHVwZGF0ZUFycm93UGxhY2VtZW50KCk7Ci0gICAgZ0luaXRpYWxCdXR0b25EZWxheSA9IFtkZWZh
dWx0cyBmbG9hdEZvcktleTpAIk5TU2Nyb2xsZXJCdXR0b25EZWxheSJdOwotICAgIGdBdXRvc2Ny
b2xsQnV0dG9uRGVsYXkgPSBbZGVmYXVsdHMgZmxvYXRGb3JLZXk6QCJOU1Njcm9sbGVyQnV0dG9u
UGVyaW9kIl07Ci0gICAgZ0p1bXBPblRyYWNrQ2xpY2sgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpA
IkFwcGxlU2Nyb2xsZXJQYWdpbmdCZWhhdmlvciJdOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bU1hYzo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRy
b2xTaXplKQotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuIHdrU2Nyb2xsYmFyVGhpY2tuZXNzKGNvbnRyb2xTaXplKTsKLSAgICBlbHNl
Ci0gICAgICAgIHJldHVybiBjU2Nyb2xsYmFyVGhpY2tuZXNzW2NvbnRyb2xTaXplXTsKLX0KLQot
Ym9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBj
b25zdAotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAg
ICAgcmV0dXJuIHdrU2Nyb2xsYmFyUGFpbnRlclVzZXNPdmVybGF5U2Nyb2xsZXJzKCk7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgd2tTY3JvbGxl
cktub2JTdHlsZSB0b1Njcm9sbGJhclBhaW50ZXJLbm9iU3R5bGUoU2Nyb2xsYmFyT3ZlcmxheVN0
eWxlIHN0eWxlKQotewotICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICBjYXNlIFNjcm9sbGJhck92
ZXJsYXlTdHlsZURhcms6Ci0gICAgICAgIHJldHVybiB3a1Njcm9sbGVyS25vYlN0eWxlRGFyazsK
LSAgICBjYXNlIFNjcm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OgotICAgICAgICByZXR1cm4gd2tT
Y3JvbGxlcktub2JTdHlsZUxpZ2h0OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB3a1Nj
cm9sbGVyS25vYlN0eWxlRGVmYXVsdDsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bU1hYzo6dXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAg
ICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iU3R5bGUocGFpbnRlckZvclNjcm9sbGJhcihz
Y3JvbGxiYXIpLCB0b1Njcm9sbGJhclBhaW50ZXJLbm9iU3R5bGUoc2Nyb2xsYmFyLT5zY3JvbGxh
YmxlQXJlYSgpLT5zY3JvbGxiYXJPdmVybGF5U3R5bGUoKSkpOwotICAgIH0KLX0KLQotZG91Ymxl
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgp
Ci17Ci0gICAgcmV0dXJuIGdJbml0aWFsQnV0dG9uRGVsYXk7Ci19Ci0KLWRvdWJsZSBTY3JvbGxi
YXJUaGVtZUNocm9taXVtTWFjOjphdXRvc2Nyb2xsVGltZXJEZWxheSgpCi17Ci0gICAgcmV0dXJu
IGdBdXRvc2Nyb2xsQnV0dG9uRGVsYXk7Ci19Ci0KLVNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6YnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdCdXR0b25QbGFjZW1lbnQ7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYzo6aGFzQnV0dG9ucyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICByZXR1cm4g
c2Nyb2xsYmFyLT5lbmFibGVkKCkgJiYgZ0J1dHRvblBsYWNlbWVudCAhPSBTY3JvbGxiYXJCdXR0
b25zTm9uZQotICAgICAgICAgICAgICYmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9y
aXpvbnRhbFNjcm9sbGJhcgotICAgICAgICAgICAgID8gc2Nyb2xsYmFyLT53aWR0aCgpCi0gICAg
ICAgICAgICAgOiBzY3JvbGxiYXItPmhlaWdodCgpKSA+PSAyICogKGNSZWFsQnV0dG9uTGVuZ3Ro
W3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gLSBjQnV0dG9uSGl0SW5zZXRbc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpXSk7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6aGFz
VGh1bWIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaW50IG1pbkxlbmd0aEZvclRodW1i
OwotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgbWlu
TGVuZ3RoRm9yVGh1bWIgPSB3a1Njcm9sbGJhck1pbmltdW1Ub3RhbExlbmd0aE5lZWRlZEZvclRo
dW1iKHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBtaW5MZW5ndGhGb3JUaHVtYiA9IDIgKiBjQnV0dG9uSW5zZXRbc2Nyb2xsYmFyLT5jb250
cm9sU2l6ZSgpXSArIGNUaHVtYk1pbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsg
MTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFibGVkKCkgJiYgKHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8KLSAgICAgICAgICAgICBzY3JvbGxiYXIt
PndpZHRoKCkgOgotICAgICAgICAgICAgIHNjcm9sbGJhci0+aGVpZ2h0KCkpID49IG1pbkxlbmd0
aEZvclRodW1iOwotfQotCi1zdGF0aWMgSW50UmVjdCBidXR0b25SZXBhaW50UmVjdChjb25zdCBJ
bnRSZWN0JiBidXR0b25SZWN0LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Ny
b2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUsIGJvb2wgc3RhcnQpCi17Ci0gICAgQVNTRVJU
KGdCdXR0b25QbGFjZW1lbnQgIT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUpOwotCi0gICAgSW50UmVj
dCBwYWludFJlY3QoYnV0dG9uUmVjdCk7Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgcGFpbnRSZWN0LnNldFdpZHRoKGNSZWFsQnV0dG9uTGVu
Z3RoW2NvbnRyb2xTaXplXSk7Ci0gICAgICAgIGlmICghc3RhcnQpCi0gICAgICAgICAgICBwYWlu
dFJlY3Quc2V0WChidXR0b25SZWN0LngoKSAtIChjUmVhbEJ1dHRvbkxlbmd0aFtjb250cm9sU2l6
ZV0gLSBidXR0b25SZWN0LndpZHRoKCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwYWludFJl
Y3Quc2V0SGVpZ2h0KGNSZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xTaXplXSk7Ci0gICAgICAgIGlm
ICghc3RhcnQpCi0gICAgICAgICAgICBwYWludFJlY3Quc2V0WShidXR0b25SZWN0LnkoKSAtIChj
UmVhbEJ1dHRvbkxlbmd0aFtjb250cm9sU2l6ZV0gLSBidXR0b25SZWN0LmhlaWdodCgpKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHBhaW50UmVjdDsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtTWFjOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xs
YmFyUGFydCBwYXJ0LCBib29sIHBhaW50aW5nKQotewotICAgIEludFJlY3QgcmVzdWx0OwotCi0g
ICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgp
ID09IFNjcm9sbGJhckJ1dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxi
YXJCdXR0b25zRG91YmxlRW5kKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlmIChw
YXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xs
YmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNE
b3VibGVTdGFydCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc1Npbmds
ZSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xs
YmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0gICAgYm9vbCBvdXRlckJ1
dHRvbiA9IHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgp
ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0g
U2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUJvdGgpOwotICAgIGlmIChvdXRlckJ1dHRvbikgewotICAg
ICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIp
Ci0gICAgICAgICAgICByZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXIt
PnkoKSwgY091dGVyQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyAocGFp
bnRpbmcgPyBjT3V0ZXJCdXR0b25PdmVybGFwIDogMCksIHRoaWNrbmVzcyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJh
ci0+eSgpLCB0aGlja25lc3MsIGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xT
aXplKCldICsgKHBhaW50aW5nID8gY091dGVyQnV0dG9uT3ZlcmxhcCA6IDApKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvLyBPdXIgcmVwYWludCByZWN0IGlzIHNsaWdo
dGx5IGxhcmdlciwgc2luY2Ugd2UgYXJlIGEgYnV0dG9uIHRoYXQgaXMgYWRqYWNlbnQgdG8gdGhl
IHRyYWNrLgotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgewotICAgICAgICBpbnQgc3RhcnQgPSBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBh
cnQgPyBzY3JvbGxiYXItPngoKSA6IHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgp
IC0gY091dGVyQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gLSBjQnV0dG9u
TGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV07Ci0gICAgICAgIHJlc3VsdCA9IEludFJl
Y3Qoc3RhcnQsIHNjcm9sbGJhci0+eSgpLCBjQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJv
bFNpemUoKV0sIHRoaWNrbmVzcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHN0YXJ0ID0g
cGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0ID8gc2Nyb2xsYmFyLT55KCkgOiBzY3JvbGxiYXIt
PnkoKSArIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSBjT3V0ZXJCdXR0b25MZW5ndGhbc2Nyb2xsYmFy
LT5jb250cm9sU2l6ZSgpXSAtIGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
XTsKLSAgICAgICAgcmVzdWx0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc3RhcnQsIHRoaWNr
bmVzcywgY0J1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldKTsKLSAgICB9Ci0K
LSAgICBpZiAocGFpbnRpbmcpCi0gICAgICAgIHJldHVybiBidXR0b25SZXBhaW50UmVjdChyZXN1
bHQsIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSwgc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpLCBw
YXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUlu
dFJlY3QgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCBwYWludGluZykKLXsKLSAg
ICBJbnRSZWN0IHJlc3VsdDsKLQotICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0
ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUgfHwgYnV0dG9u
c1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydCkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0KLSAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0ICYm
IChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1Bs
YWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQgfHwgYnV0dG9uc1BsYWNlbWVu
dCgpID09IFNjcm9sbGJhckJ1dHRvbnNTaW5nbGUpKQotICAgICAgICByZXR1cm4gcmVzdWx0Owot
Ci0gICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRy
b2xTaXplKCkpOwotICAgIGludCBvdXRlckJ1dHRvbkxlbmd0aCA9IGNPdXRlckJ1dHRvbkxlbmd0
aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldOwotICAgIGludCBidXR0b25MZW5ndGggPSBjQnV0
dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV07Ci0KLSAgICBib29sIG91dGVyQnV0
dG9uID0gcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCAmJiAoYnV0dG9uc1BsYWNlbWVudCgp
ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQgfHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNj
cm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoKTsKLSAgICBpZiAob3V0ZXJCdXR0b24pIHsKLSAgICAg
ICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7
Ci0gICAgICAgICAgICByZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFy
LT53aWR0aCgpIC0gb3V0ZXJCdXR0b25MZW5ndGgsIHNjcm9sbGJhci0+eSgpLCBvdXRlckJ1dHRv
bkxlbmd0aCwgdGhpY2tuZXNzKTsKLSAgICAgICAgICAgIGlmIChwYWludGluZykKLSAgICAgICAg
ICAgICAgICByZXN1bHQuaW5mbGF0ZVgoY091dGVyQnV0dG9uT3ZlcmxhcCk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3Jv
bGxiYXItPnkoKSArIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSBvdXRlckJ1dHRvbkxlbmd0aCwgdGhp
Y2tuZXNzLCBvdXRlckJ1dHRvbkxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRpbmcpCi0g
ICAgICAgICAgICAgICAgcmVzdWx0LmluZmxhdGVZKGNPdXRlckJ1dHRvbk92ZXJsYXApOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGludCBz
dGFydCA9IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgPyBzY3JvbGxiYXItPngoKSArIHNj
cm9sbGJhci0+d2lkdGgoKSAtIGJ1dHRvbkxlbmd0aCA6IHNjcm9sbGJhci0+eCgpICsgb3V0ZXJC
dXR0b25MZW5ndGg7Ci0gICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc3RhcnQsIHNjcm9sbGJhci0+
eSgpLCBidXR0b25MZW5ndGgsIHRoaWNrbmVzcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50
IHN0YXJ0ID0gcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCA/IHNjcm9sbGJhci0+eSgpICsg
c2Nyb2xsYmFyLT5oZWlnaHQoKSAtIGJ1dHRvbkxlbmd0aCA6IHNjcm9sbGJhci0+eSgpICsgb3V0
ZXJCdXR0b25MZW5ndGg7Ci0gICAgICAgIHJlc3VsdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCks
IHN0YXJ0LCB0aGlja25lc3MsIGJ1dHRvbkxlbmd0aCk7Ci0gICAgfQotICAgIGlmIChwYWludGlu
ZykKLSAgICAgICAgcmV0dXJuIGJ1dHRvblJlcGFpbnRSZWN0KHJlc3VsdCwgc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpLCBzY3JvbGxiYXItPmNvbnRyb2xTaXplKCksIHBhcnQgPT0gRm9yd2FyZEJ1
dHRvblN0YXJ0UGFydCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSW50UmVjdCBTY3JvbGxi
YXJUaGVtZUNocm9taXVtTWFjOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wg
cGFpbnRpbmcpCi17Ci0gICAgaWYgKHBhaW50aW5nIHx8ICFoYXNCdXR0b25zKHNjcm9sbGJhcikp
Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOwotCi0gICAgSW50UmVjdCBy
ZXN1bHQ7Ci0gICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXIt
PmNvbnRyb2xTaXplKCkpOwotICAgIGludCBzdGFydFdpZHRoID0gMDsKLSAgICBpbnQgZW5kV2lk
dGggPSAwOwotICAgIGludCBvdXRlckJ1dHRvbkxlbmd0aCA9IGNPdXRlckJ1dHRvbkxlbmd0aFtz
Y3JvbGxiYXItPmNvbnRyb2xTaXplKCldOwotICAgIGludCBidXR0b25MZW5ndGggPSBjQnV0dG9u
TGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV07Ci0gICAgaW50IGRvdWJsZUJ1dHRvbkxl
bmd0aCA9IG91dGVyQnV0dG9uTGVuZ3RoICsgYnV0dG9uTGVuZ3RoOwotICAgIHN3aXRjaCAoYnV0
dG9uc1BsYWNlbWVudCgpKSB7Ci0gICAgICAgIGNhc2UgU2Nyb2xsYmFyQnV0dG9uc1NpbmdsZToK
LSAgICAgICAgICAgIHN0YXJ0V2lkdGggPSBidXR0b25MZW5ndGg7Ci0gICAgICAgICAgICBlbmRX
aWR0aCA9IGJ1dHRvbkxlbmd0aDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNj
cm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydDoKLSAgICAgICAgICAgIHN0YXJ0V2lkdGggPSBkb3Vi
bGVCdXR0b25MZW5ndGg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTY3JvbGxi
YXJCdXR0b25zRG91YmxlRW5kOgotICAgICAgICAgICAgZW5kV2lkdGggPSBkb3VibGVCdXR0b25M
ZW5ndGg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTY3JvbGxiYXJCdXR0b25z
RG91YmxlQm90aDoKLSAgICAgICAgICAgIHN0YXJ0V2lkdGggPSBkb3VibGVCdXR0b25MZW5ndGg7
Ci0gICAgICAgICAgICBlbmRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgaW50IHRvdGFsV2lkdGggPSBzdGFydFdpZHRoICsgZW5kV2lkdGg7Ci0gICAgaWYgKHNjcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICByZXR1
cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSArIHN0YXJ0V2lkdGgsIHNjcm9sbGJhci0+eSgpLCBz
Y3JvbGxiYXItPndpZHRoKCkgLSB0b3RhbFdpZHRoLCB0aGlja25lc3MpOwotICAgIHJldHVybiBJ
bnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSArIHN0YXJ0V2lkdGgsIHRoaWNr
bmVzcywgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIHRvdGFsV2lkdGgpOwotfQotCi1pbnQgU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bU1hYzo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAg
ICAgcmV0dXJuIHdrU2Nyb2xsYmFyTWluaW11bVRodW1iTGVuZ3RoKHNjcm9sbGJhck1hcCgpLT5n
ZXQoc2Nyb2xsYmFyKS5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gY1RodW1iTWlu
TGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV07Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYzo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGV2dCkKLXsKLSAgICBpZiAoZXZ0LmJ1dHRvbigpICE9IExlZnRCdXR0
b24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZ0p1bXBPblRyYWNrQ2xpY2spCi0g
ICAgICAgIHJldHVybiAhZXZ0LmFsdEtleSgpOwotICAgIHJldHVybiBldnQuYWx0S2V5KCk7Ci19
Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6c2hvdWxkRHJhZ0RvY3VtZW50SW5z
dGVhZE9mVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkK
LXsKLSAgICByZXR1cm4gZXZlbnQuYWx0S2V5KCk7Ci19Ci0KLXN0YXRpYyBpbnQgc2Nyb2xsYmFy
UGFydFRvSElQcmVzc2VkU3RhdGUoU2Nyb2xsYmFyUGFydCBwYXJ0KQotewotICAgIHN3aXRjaCAo
cGFydCkgewotICAgICAgICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6Ci0gICAgICAgICAgICBy
ZXR1cm4ga1RoZW1lVG9wT3V0c2lkZUFycm93UHJlc3NlZDsKLSAgICAgICAgY2FzZSBCYWNrQnV0
dG9uRW5kUGFydDoKLSAgICAgICAgICAgIHJldHVybiBrVGhlbWVUb3BPdXRzaWRlQXJyb3dQcmVz
c2VkOyAvLyBUaGlzIGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZS4gIEZvciBzb21lIHJlYXNvbiB0
aGUgb3V0c2lkZSBjb25zdGFudCBpcyByZXF1aXJlZC4KLSAgICAgICAgY2FzZSBGb3J3YXJkQnV0
dG9uU3RhcnRQYXJ0OgotICAgICAgICAgICAgcmV0dXJuIGtUaGVtZVRvcEluc2lkZUFycm93UHJl
c3NlZDsKLSAgICAgICAgY2FzZSBGb3J3YXJkQnV0dG9uRW5kUGFydDoKLSAgICAgICAgICAgIHJl
dHVybiBrVGhlbWVCb3R0b21PdXRzaWRlQXJyb3dQcmVzc2VkOwotICAgICAgICBjYXNlIFRodW1i
UGFydDoKLSAgICAgICAgICAgIHJldHVybiBrVGhlbWVUaHVtYlByZXNzZWQ7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIHN0YXRpYyBQbGF0Zm9y
bVN1cHBvcnQ6OlRoZW1lUGFpbnRTdGF0ZSBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZShTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKIHsKICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQpAQCAt
NDc2LDEzICs3MywyNyBAQCBzdGF0aWMgUGxhdGZvcm1TdXBwb3J0OjpUaGVtZVBhaW50U3RhdGUg
CiAgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6U3RhdGVBY3RpdmU7CiB9CiAKLXZvaWQgU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQorc3RhdGljIHZvaWQgc2Nyb2xsYmFyUGFpbnRlclBhaW50VHJhY2soU2Nyb2xsYmFy
UGFpbnRlciBzY3JvbGxiYXJQYWludGVyLCBib29sIGVuYWJsZWQsIGRvdWJsZSB2YWx1ZSwgQ0dG
bG9hdCBwcm9wb3J0aW9uLCBDR1JlY3QgZnJhbWVSZWN0KQogewotICAgIGlmIChpc1Njcm9sbGJh
ck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXRF
bmFibGVkKHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSwgc2Nyb2xsYmFyLT5l
bmFibGVkKCkpOwotICAgIH0KKyAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRFbmFibGVkOmVuYWJs
ZWRdOworICAgIFtzY3JvbGxiYXJQYWludGVyIHNldEJvdW5kc1NpemU6IE5TU2l6ZUZyb21DR1Np
emUoZnJhbWVSZWN0LnNpemUpXTsKKyAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXREb3VibGVWYWx1
ZTp2YWx1ZV07CisgICAgW3Njcm9sbGJhclBhaW50ZXIgc2V0S25vYlByb3BvcnRpb246cHJvcG9y
dGlvbl07CisKKyAgICAvLyBUaGUgc2Nyb2xsYmFyJ3MgZnJhbWVSZWN0IGluY2x1ZGVzIGEgc2lk
ZSBpbnNldCBmb3Igb3ZlcmxheSBzY3JvbGxlcnMsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSAKKyAg
ICAvLyB0cmFja1dpZHRoIGZvciBkcmF3S25vYlNsb3RJblJlY3QKKyAgICBOU1JlY3QgdHJhY2tS
ZWN0OworICAgIGlmIChbc2Nyb2xsYmFyUGFpbnRlciBpc0hvcml6b250YWxdKQorICAgICAgICB0
cmFja1JlY3QgPSBOU01ha2VSZWN0KDAsIDAsIGZyYW1lUmVjdC5zaXplLndpZHRoLCBbc2Nyb2xs
YmFyUGFpbnRlciB0cmFja1dpZHRoXSk7CisgICAgZWxzZQorICAgICAgICB0cmFja1JlY3QgPSBO
U01ha2VSZWN0KDAsIDAsIFtzY3JvbGxiYXJQYWludGVyIHRyYWNrV2lkdGhdLCBmcmFtZVJlY3Qu
c2l6ZS5oZWlnaHQpOworICAgIFtzY3JvbGxiYXJQYWludGVyIGRyYXdLbm9iU2xvdEluUmVjdDp0
cmFja1JlY3QgaGlnaGxpZ2h0Ok5PXTsKIH0KIAorLy8gT3ZlcnJpZGUgU2Nyb2xsYmFyVGhlbWVN
YWM6OnBhaW50KCkgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmc6CisvLyAgICAgLSBk
cmF3aW5nIHVzaW5nIFBsYXRmb3JtU3VwcG9ydCBmdW5jdGlvbnMKKy8vICAgICAtIGRyYXdpbmcg
dGlja21hcmtzCisvLyAgICAgLSBTa2lhIHNwZWNpZmljIGNoYW5nZXMKIGJvb2wgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKIHsKICAgICAvLyBHZXQg
dGhlIHRpY2ttYXJrcyBmb3IgdGhlIGZyYW1ldmlldy4KQEAgLTUxMCwzMyArMTIxLDMyIEBAIGJv
b2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQoU2MKICAgICAgICAgICAgICAgICB2
YWx1ZSA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
KiBzY3JvbGxBbmltYXRvciA9IHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMq
PihzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbEFuaW1hdG9yKCkpOwogI2lmICFV
U0UoU0tJQSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPnNldElzRHJhd2luZ0ludG9MYXllcihj
b250ZXh0LT5pc0NBTGF5ZXJDb250ZXh0KCkpOworICAgICAgICBzZXRJc0N1cnJlbnRseURyYXdp
bmdJbnRvTGF5ZXIoY29udGV4dC0+aXNDQUxheWVyQ29udGV4dCgpKTsKICNlbHNlCi0gICAgICAg
IHNjcm9sbEFuaW1hdG9yLT5zZXRJc0RyYXdpbmdJbnRvTGF5ZXIoZmFsc2UpOworICAgICAgICBz
ZXRJc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoZmFsc2UpOwogI2VuZGlmCiAKICAgICAgICAg
Q0dGbG9hdCBvbGRLbm9iQWxwaGEgPSAwOwogICAgICAgICBDR0Zsb2F0IG9sZFRyYWNrQWxwaGEg
PSAwOwogICAgICAgICBib29sIGhhc1RpY2ttYXJrcyA9IHRpY2ttYXJrcy5zaXplKCkgPiAwICYm
IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICAgICAg
U2Nyb2xsYmFyUGFpbnRlciBzY3JvbGxiYXJQYWludGVyID0gcGFpbnRlckZvclNjcm9sbGJhcihz
Y3JvbGxiYXIpOwogICAgICAgICBpZiAoaGFzVGlja21hcmtzKSB7Ci0gICAgICAgICAgb2xkS25v
YkFscGhhID0gd2tTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXJGb3JTY3JvbGxiYXIo
c2Nyb2xsYmFyKSk7Ci0gICAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBh
aW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSwgMS4wKTsKLSAgICAgICAgICBvbGRUcmFja0Fs
cGhhID0gd2tTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShwYWludGVyRm9yU2Nyb2xsYmFyKHNj
cm9sbGJhcikpOwotICAgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEocGFp
bnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpLCAxLjApOworICAgICAgICAgICAgb2xkS25vYkFs
cGhhID0gW3Njcm9sbGJhclBhaW50ZXIga25vYkFscGhhXTsKKyAgICAgICAgICAgIFtzY3JvbGxi
YXJQYWludGVyIHNldEtub2JBbHBoYToxLjBdOworICAgICAgICAgICAgb2xkVHJhY2tBbHBoYSA9
IFtzY3JvbGxiYXJQYWludGVyIHRyYWNrQWxwaGFdOworICAgICAgICAgICAgW3Njcm9sbGJhclBh
aW50ZXIgc2V0VHJhY2tBbHBoYToxLjBdOwogICAgICAgICB9CiAKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKICAgICAgICAgY29udGV4dC0+
Y2xpcChkYW1hZ2VSZWN0KTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHNjcm9sbGJhci0+
ZnJhbWVSZWN0KCkueCgpLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKSk7CiAgICAgICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7Ci0gICAgICAg
IFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxiYXJQYWludGVyID0gc2Nyb2xsYmFyTWFwKCkt
PmdldChzY3JvbGxiYXIpLmdldCgpOwotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJQYWludFRy
YWNrKHNjcm9sbGJhclBhaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2Nyb2xsYmFyLT5lbmFibGVkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PENHRmxvYXQ+KHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgLSBvdmVyaGFuZykgLyBz
Y3JvbGxiYXItPnRvdGFsU2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOworICAgICAgICBzY3JvbGxiYXJQYWludGVyUGFp
bnRUcmFjayhzY3JvbGxiYXJQYWludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JvbGxiYXItPmVuYWJsZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNf
Y2FzdDxDR0Zsb2F0PihzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIC0gb3ZlcmhhbmcpIC8gc2Ny
b2xsYmFyLT50b3RhbFNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CiAKICAgICAgICAgSW50UmVjdCB0aWNrbWFya1RyYWNr
UmVjdChJbnRQb2ludCgpLCB0cmFja1JlY3Qoc2Nyb2xsYmFyLCBmYWxzZSkuc2l6ZSgpKTsKICAg
ICAgICAgaWYgKHRpY2ttYXJrVHJhY2tSZWN0LndpZHRoKCkgPD0gMTApIHsKQEAgLTU1MCwxMyAr
MTYwLDE0IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQoU2MKICAgICAg
ICAgfQogICAgICAgICBwYWludEdpdmVuVGlja21hcmtzKGNvbnRleHQsIHNjcm9sbGJhciwgdGlj
a21hcmtUcmFja1JlY3QsIHRpY2ttYXJrcyk7CiAKLSAgICAgICAgd2tTY3JvbGxiYXJQYWludGVy
UGFpbnRLbm9iKHNjcm9sbGJhclBhaW50ZXIpOworICAgICAgICBpZiAoc2Nyb2xsYmFyLT5lbmFi
bGVkKCkpCisgICAgICAgICAgICBbc2Nyb2xsYmFyUGFpbnRlciBkcmF3S25vYl07CiAKLSAgICAg
ICAgc2Nyb2xsQW5pbWF0b3ItPnNldElzRHJhd2luZ0ludG9MYXllcihmYWxzZSk7CisgICAgICAg
IHNldElzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcihmYWxzZSk7CiAKICAgICAgICAgaWYgKGhh
c1RpY2ttYXJrcykgewotICAgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShz
Y3JvbGxiYXJQYWludGVyLCBvbGRLbm9iQWxwaGEpOwotICAgICAgICAgIHdrU2V0U2Nyb2xsYmFy
UGFpbnRlclRyYWNrQWxwaGEoc2Nyb2xsYmFyUGFpbnRlciwgb2xkVHJhY2tBbHBoYSk7CisgICAg
ICAgICAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRLbm9iQWxwaGE6b2xkS25vYkFscGhhXTsKKyAg
ICAgICAgICAgIFtzY3JvbGxiYXJQYWludGVyIHNldFRyYWNrQWxwaGE6b2xkVHJhY2tBbHBoYV07
CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9FbXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRW1wdHlQcm90b2NvbERlZmluaXRpb25zLmgJKHJl
dmlzaW9uIDEwMzI3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9FbXB0eVByb3Rv
Y29sRGVmaW5pdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogRU1QVFlf
UFJPVE9DT0woTlNUYWJsZVZpZXdEYXRhU291cmNlKQogRU1QVFlfUFJPVE9DT0woTlNUYWJsZVZp
ZXdEZWxlZ2F0ZSkKIEVNUFRZX1BST1RPQ09MKE5TV2luZG93RGVsZWdhdGUpCitFTVBUWV9QUk9U
T0NPTChOU0FuaW1hdGlvbkRlbGVnYXRlKQogCiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmgJKHJldmlzaW9u
IDEwMzI3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0
YWlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCwyOCBAQAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCisvLyBQdWJsaWMgQVBJcyBub3Qg
YXZhaWxhYmxlIG9uIHZlcnNpb25zIG9mIE1hYyBvbiB3aGljaCB3ZSBidWlsZAorI2lmIChkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9Q
QVJEKSkKK2VudW0geworICAgIE5TU2Nyb2xsZXJTdHlsZUxlZ2FjeSAgICAgICA9IDAsCisgICAg
TlNTY3JvbGxlclN0eWxlT3ZlcmxheSAgICAgID0gMQorfTsKK3R5cGVkZWYgTlNJbnRlZ2VyIE5T
U2Nyb2xsZXJTdHlsZTsKKworZW51bSB7CisgICAgTlNTY3JvbGxlcktub2JTdHlsZURlZmF1bHQg
PSAwLAorICAgIE5TU2Nyb2xsZXJLbm9iU3R5bGVEYXJrID0gMSwKKyAgICBOU1Njcm9sbGVyS25v
YlN0eWxlTGlnaHQgPSAyCit9OwordHlwZWRlZiBOU0ludGVnZXIgTlNTY3JvbGxlcktub2JTdHls
ZTsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgfHwgZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpKQorQGludGVyZmFjZSBOU1Njcm9sbGVyKE5TT2Jq
ZWN0KQorKyAoTlNTY3JvbGxlclN0eWxlKXByZWZlcnJlZFNjcm9sbGVyU3R5bGU7CitAZW5kCisj
ZW5kaWYKKwogQGludGVyZmFjZSBOU09iamVjdCAoU2Nyb2xsYmFyUGFpbnRlcikKICsgKGlkKXNj
cm9sbGVySW1wV2l0aFN0eWxlOihOU1Njcm9sbGVyU3R5bGUpbmV3U2Nyb2xsZXJTdHlsZSBjb250
cm9sU2l6ZTooTlNDb250cm9sU2l6ZSluZXdDb250cm9sU2l6ZSBob3Jpem9udGFsOihCT09MKWhv
cml6b250YWwgcmVwbGFjaW5nU2Nyb2xsZXJJbXA6KGlkKXByZXZpb3VzOwogLSAoQ0dGbG9hdClr
bm9iQWxwaGE7CkBAIC04MSw2ICsxMDIsMjQgQEAgQGludGVyZmFjZSBOU09iamVjdCAoU2Nyb2xs
YmFyUGFpbnRlckNvbgogLSAodm9pZCliZWdpblNjcm9sbEdlc3R1cmU7CiAtICh2b2lkKWVuZFNj
cm9sbEdlc3R1cmU7CiBAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorYm9vbCBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKTsKKyNlbHNl
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkKK3sK
KyNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAg
IHJldHVybiBmYWxzZTsKICNlbmRpZgorfQorI2VuZGlmCisKK05TU2Nyb2xsZXJTdHlsZSByZWNv
bW1lbmRlZFNjcm9sbGVyU3R5bGUoKTsKKworfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNTY3JvbGxlckltcERldGFpbHMubW0JKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNTY3JvbGxlckltcERldGFp
bHMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQorYm9vbCBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKQor
eworICAgIHN0YXRpYyBib29sIGFwaUF2YWlsYWJsZTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRJ
bml0aWFsaXplID0gdHJ1ZTsKKyAgICBpZiAoc2hvdWxkSW5pdGlhbGl6ZSkgeworICAgICAgICBz
aG91bGRJbml0aWFsaXplID0gZmFsc2U7CisgICAgICAgIENsYXNzIHNjcm9sbGVySW1wQ2xhc3Mg
PSBOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAiKTsKKyAgICAgICAgQ2xhc3Mgc2Ny
b2xsZXJJbXBQYWlyQ2xhc3MgPSBOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXBQYWly
Iik7CisgICAgICAgIGFwaUF2YWlsYWJsZSA9IFtzY3JvbGxlckltcENsYXNzIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Ioc2Nyb2xsZXJJbXBXaXRoU3R5bGU6Y29udHJvbFNpemU6aG9yaXpv
bnRhbDpyZXBsYWNpbmdTY3JvbGxlckltcDopXQorICAgICAgICAgICAgICAgICAgICAgICAmJiBb
c2Nyb2xsZXJJbXBQYWlyQ2xhc3MgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9y
KHNjcm9sbGVyU3R5bGUpXTsKKyAgICB9CisgICAgcmV0dXJuIGFwaUF2YWlsYWJsZTsKK30KKyNl
bmRpZgorCitOU1Njcm9sbGVyU3R5bGUgcmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgeworICAg
IGlmIChbTlNTY3JvbGxlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHByZWZlcnJlZFNj
cm9sbGVyU3R5bGUpXSkKKyAgICAgICAgcmV0dXJuIFtOU1Njcm9sbGVyIHByZWZlcnJlZFNjcm9s
bGVyU3R5bGVdOworICAgIHJldHVybiBOU1Njcm9sbGVyU3R5bGVMZWdhY3k7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5o
CShyZXZpc2lvbiAxMDMyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsNyBAQCBjbGFzcyBXZWJT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnCiBjbGFzcyBXZWJTY3JvbGxiYXJQYWludGVy
RGVsZWdhdGU7CiAjZW5kaWYKIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHR5cGVkZWYg
aWQgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7Ci0jZW5kaWYKIAogI2lmICFFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCiBjbGFzcyBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlckNsaWVudCB7IH07
CkBAIC04NiwxMyArODQsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldElzQWN0
aXZlKCk7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiAgICAgdm9pZCB1cGRhdGVTY3Jv
bGxlclN0eWxlKCk7CiAKICAgICBib29sIHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNv
bnN0OwogICAgIHZvaWQgc3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CiAgICAgdm9pZCBzdG9w
U2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotI2VuZGlmCiAKICAgICB2b2lkIHNldFZpc2libGVTY3Jv
bGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTEwMCw3ICs5Niw2IEBAIHByaXZh
dGU6CiAgICAgUmV0YWluUHRyPGlkPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcjsKICAgICBSZXRh
aW5QdHI8V2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGU7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiAgICAgUmV0YWlu
UHRyPFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyPiBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyOwogICAgIFJldGFpblB0cjxXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRl
PiBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7CiAgICAgUmV0YWluUHRyPFdl
YlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZT4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRl
bGVnYXRlOwpAQCAtMTA4LDcgKzEwMyw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGluaXRpYWxT
Y3JvbGxiYXJQYWludFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JNYWM+Kik7CiAgICAg
VGltZXI8U2Nyb2xsQW5pbWF0b3JNYWM+IG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXI7Ci0j
ZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCShyZXZp
c2lvbiAxMDMyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0
b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJTY3Jv
bGxBbmltYXRvck1hYy5oIgogCiAjaW5jbHVkZSAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW5jbHVk
ZSAiRW1wdHlQcm90b2NvbERlZmluaXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgog
I2luY2x1ZGUgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0
dXJlRXZlbnQuaCIKQEAgLTQ1LDcgKzQ2LDEyIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCisjaWZk
ZWYgQlVJTERJTkdfT05fTEVPUEFSRAorQGludGVyZmFjZSBOU1Byb2Nlc3NJbmZvIChTY3JvbGxB
bmltYXRvck1hY0V4dCkKKy0gKE5TVGltZUludGVydmFsKXN5c3RlbVVwdGltZTsKK0BlbmQKKyNl
bmRpZgorCiBzdGF0aWMgYm9vbCBzdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3MoKQog
ewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCBhbGwgcGxhdGZvcm1zIHRo
YXQgc3VwcG9ydCBTY3JvbGxiYXJQYWludGVyIHN1cHBvcnQgdGhpcyBwYXJ0IG9mIHRoZSBBUEku
CkBAIC02Niw3ICs3Miw2IEBAIHN0YXRpYyBTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50
ZXIKIAogICAgIHJldHVybiBuaWw7CiB9Ci0jZW5kaWYKIAogQGludGVyZmFjZSBOU09iamVjdCAo
U2Nyb2xsQW5pbWF0aW9uSGVscGVyRGV0YWlscykKIC0gKGlkKWluaXRXaXRoRGVsZWdhdGU6KGlk
KWRlbGVnYXRlOwpAQCAtMTcyLDggKzE3Nyw2IEBAIC0gKHZvaWQpX3JlY3Vyc2l2ZVJlY29tcHV0
ZVRvb2xUaXBzCiAKIEBlbmQKIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLQogQGludGVy
ZmFjZSBXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3QKIHsK
ICAgICBTY3JvbGxhYmxlQXJlYSogX3Njcm9sbGFibGVBcmVhOwpAQCAtNDA5LDYgKzQxMiw3IEBA
IC0gKE5TUmVjdCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QKICAgICByZXR1cm4gYVJl
Y3Q7CiB9CiAKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAtIChDQUxheWVyICopbGF5ZXIKIHsK
ICAgICBpZiAoIV9zY3JvbGxiYXIpCkBAIC00MjEsNiArNDI1LDcgQEAgLSAoQ0FMYXllciAqKWxh
eWVyCiAgICAgc3RhdGljIENBTGF5ZXIgKmR1bW15TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGlu
aXRdOwogICAgIHJldHVybiBkdW1teUxheWVyOwogfQorI2VuZGlmCiAKIC0gKE5TUG9pbnQpbW91
c2VMb2NhdGlvbkluU2Nyb2xsZXJGb3JTY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAKIHsKQEAg
LTU0MSw4ICs1NDYsNiBAQCAtICh2b2lkKWludmFsaWRhdGUKIAogQGVuZAogCi0jZW5kaWYgLy8g
VVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NPd25Q
dHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhKQpAQCAtNTUyLDkgKzU1NSw3IEBAIFBhc3NPd25QdHI8U2Nyb2xsQW5p
bWF0b3I+IFNjcm9sbEFuaW1hdG8KIAogU2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9sbEFuaW1hdG9y
TWFjKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKICAgICA6IFNjcm9sbEFuaW1hdG9y
KHNjcm9sbGFibGVBcmVhKQotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKICAgICAsIG1faW5p
dGlhbFNjcm9sbGJhclBhaW50VGltZXIodGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFs
U2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKQotI2VuZGlmCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQogICAgICwgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcih0aGlzKQogICAgICwgbV9z
bmFwUnViYmVyQmFuZFRpbWVyKHRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6c25hcFJ1YmJlckJh
bmRUaW1lckZpcmVkKQpAQCAtNTY1LDI1ICs1NjYsMjUgQEAgU2Nyb2xsQW5pbWF0b3JNYWM6OlNj
cm9sbEFuaW1hdG9yTWFjKFNjcgogICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUu
YWRvcHROUyhbW1dlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0
aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKICAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5hZG9w
dE5TKFtbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbEFuaW1hdGlvbkhlbHBlciIpIGFsbG9j
XSBpbml0V2l0aERlbGVnYXRlOm1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCld
KTsKIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBtX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGUuYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYWJsZUFyZWE6c2Nyb2xsYWJsZUFyZWFdKTsK
LSAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyID0gW1tbTlNDbGFzc0Zyb21TdHJpbmco
QCJOU1Njcm9sbGVySW1wUGFpciIpIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgW21f
c2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpXTsKLSAgICBbbV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSBzZXRTY3JvbGxlclN0eWxlOndrUmVjb21tZW5kZWRTY3JvbGxlclN0
eWxlKCldOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgp
KSB7CisgICAgICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5hZG9wdE5T
KFtbV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhT
Y3JvbGxhYmxlQXJlYTpzY3JvbGxhYmxlQXJlYV0pOworICAgICAgICBtX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyID0gW1tbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVySW1wUGFpciIp
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJE
ZWxlZ2F0ZS5nZXQoKV07CisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdl
dCgpIHNldFNjcm9sbGVyU3R5bGU6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCldOworICAgIH0K
IH0KIAogU2Nyb2xsQW5pbWF0b3JNYWM6On5TY3JvbGxBbmltYXRvck1hYygpCiB7Ci0jaWYgVVNF
KFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVd
OwotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm5p
bF07Ci0gICAgW21faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBpbnZh
bGlkYXRlXTsKLSAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBp
bnZhbGlkYXRlXTsKLSAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKSBp
bnZhbGlkYXRlXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotI2VuZGlmCisgICAg
aWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7CisgICAgICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJEZWxlZ2F0ZS5nZXQoKSBpbnZhbGlkYXRlXTsKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21faG9yaXpvbnRh
bFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBpbnZhbGlkYXRlXTsKKyAgICAgICAgW21f
dmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07CisgICAg
ICAgIFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwor
ICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIH0KIH0KIAogYm9vbCBTY3Jv
bGxBbmltYXRvck1hYzo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cikKQEAgLTY5NSwxMyArNjk2LDEzIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0
ZVNjcm9sbFQKIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bm90aWZ5UG9zaXRpb25DaGFuZ2Vk
KCkKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgcGFnZSBjYWNoZSwgYnV0IHRo
ZSBwYWdlIAotICAgIC8vIGlzbid0IHJlYWxseSBzY3JvbGxpbmcgaW4gdGhhdCBjYXNlLiBXZSBz
aG91bGQgb25seSBwYXNzIHRoZSBtZXNzYWdlIG9uIHRvIHRoZQotICAgIC8vIFNjcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyIHdoZW4gd2UncmUgcmVhbGx5IHNjcm9sbGluZyBvbiBhbiBhY3RpdmUg
cGFnZS4KLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKLSAgICAg
ICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgY29udGVudEFyZWFTY3JvbGxl
ZF07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsK
KyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcg
aW50byB0aGUgcGFnZSBjYWNoZSwgYnV0IHRoZSBwYWdlIAorICAgICAgICAvLyBpc24ndCByZWFs
bHkgc2Nyb2xsaW5nIGluIHRoYXQgY2FzZS4gV2Ugc2hvdWxkIG9ubHkgcGFzcyB0aGUgbWVzc2Fn
ZSBvbiB0byB0aGUKKyAgICAgICAgLy8gU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgd2hlbiB3
ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFuIGFjdGl2ZSBwYWdlLgorICAgICAgICBpZiAoc2Ny
b2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKKyAgICAgICAgICAgIFttX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyLmdldCgpIGNvbnRlbnRBcmVhU2Nyb2xsZWRdOworICAgIH0KICAg
ICBTY3JvbGxBbmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKQEAgLTcwOSwy
MTQgKzcxMCwxOTAgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFXaWxsUAog
ewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAg
cmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlci5nZXQoKSBjb250ZW50QXJlYVdpbGxEcmF3XTsKLSNlbmRpZgorICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgY29udGVudEFyZWFXaWxsRHJhd107CiB9CiAKIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3QKIHsKICAg
ICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJldHVy
bjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkgbW91c2VFbnRlcmVkQ29udGVudEFyZWFdOwotI2VuZGlmCisgICAgaWYg
KGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlci5nZXQoKSBtb3VzZUVudGVyZWRDb250ZW50QXJlYV07CiB9CiAKIHZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdAogewog
ICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0
dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSBtb3VzZUV4aXRlZENvbnRlbnRBcmVhXTsKLSNlbmRpZgorICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VFeGl0ZWRDb250ZW50QXJlYV07CiB9CiAKIHZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3QKIHsK
ICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJl
dHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VNb3ZlZEluQ29udGVudEFyZWFdOwotI2VuZGlmCisgICAg
aWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBtb3VzZU1vdmVkSW5Db250ZW50QXJlYV07CiB9CiAK
IHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikgY29uc3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3Rp
dmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0g
ICAgaWYgKCFzdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3MoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBzY3JvbGxiYXJQYWludGVy
Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhcikpCi0gICAgICAgIFtwYWludGVyIG1vdXNlRW50ZXJlZFNj
cm9sbGVyXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7Ci0jZW5kaWYKKyAg
ICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKCFz
dXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJG
b3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSkKKyAgICAgICAgICAgIFtwYWludGVyIG1vdXNlRW50ZXJl
ZFNjcm9sbGVyXTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhp
dGVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewogICAgIGlmICghc2Ny
b2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVT
RShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBpZiAoIXN1cHBvcnRzVUlTdGF0ZVRyYW5zaXRpb25Q
cm9ncmVzcygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKFNjcm9sbGJhclBhaW50ZXIgcGFp
bnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSkKLSAgICAgICAg
W3BhaW50ZXIgbW91c2VFeGl0ZWRTY3JvbGxlcl07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShz
Y3JvbGxiYXIpOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJs
ZSgpKSB7CisgICAgICAgIGlmICghc3VwcG9ydHNVSVN0YXRlVHJhbnNpdGlvblByb2dyZXNzKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChTY3JvbGxiYXJQYWludGVyIHBhaW50
ZXIgPSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcikpCisgICAgICAgICAg
ICBbcGFpbnRlciBtb3VzZUV4aXRlZFNjcm9sbGVyXTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OndpbGxTdGFydExpdmVSZXNpemUoKQogewogICAgIGlmICghc2Nyb2xsYWJs
ZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JP
TExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBz
dGFydExpdmVSZXNpemVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2
YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBz
dGFydExpdmVSZXNpemVdOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50c1Jl
c2l6ZWQoKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBh
Z2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBb
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBjb250ZW50QXJlYURpZFJlc2l6ZV07
Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAg
ICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGNvbnRlbnRBcmVhRGlkUmVz
aXplXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUoKQog
ewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAg
cmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlci5nZXQoKSBlbmRMaXZlUmVzaXplXTsKLSNlbmRpZgorICAgIGlmIChpc1Nj
cm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkgZW5kTGl2ZVJlc2l6ZV07CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxl
QXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9M
TEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHdp
bmRvd09yZGVyZWRJbl07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHdp
bmRvd09yZGVyZWRJbl07CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVh
RGlkSGlkZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZl
UGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAg
IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHdpbmRvd09yZGVyZWRPdXRdOwot
I2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAg
ICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSB3aW5kb3dPcmRlcmVkT3V0XTsK
IH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29u
c3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAg
ICAgIHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgYmVnaW5TY3JvbGxHZXN0dXJlXTsKLSNlbmRpZgorICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgYmVnaW5TY3JvbGxHZXN0dXJlXTsKIH0KIAogdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47
Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpIGVuZFNjcm9sbEdlc3R1cmVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlci5nZXQoKSBlbmRTY3JvbGxHZXN0dXJlXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0j
aWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9
IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBhaW50
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV92ZXJ0aWNhbFNjcm9sbGJhclBh
aW50ZXJEZWxlZ2F0ZSk7Ci0gICAgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5h
ZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9s
bGJhcjpzY3JvbGxiYXJdKTsKLQotICAgIFtwYWludGVyIHNldERlbGVnYXRlOm1fdmVydGljYWxT
Y3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCldOwotICAgIFttX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6cGFpbnRlcl07Ci0gICAgaWYg
KHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQotICAgICAgICBbcGFpbnRlciBzZXRL
bm9iQWxwaGE6MV07Ci0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7Ci0jZW5k
aWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAg
U2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihz
Y3JvbGxiYXIpOworICAgICAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgQVNTRVJUKCFtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlKTsKKyAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbV2ViU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJd
KTsKKworICAgICAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTptX3ZlcnRpY2FsU2Nyb2xsYmFyUGFp
bnRlckRlbGVnYXRlLmdldCgpXTsKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXIuZ2V0KCkgc2V0VmVydGljYWxTY3JvbGxlckltcDpwYWludGVyXTsKKyAgICAgICAgaWYgKHNj
cm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQorICAgICAgICAgICAgW3BhaW50ZXIgc2V0
S25vYkFscGhhOjFdOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJl
bW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotI2lmIFVTRShT
Q1JPTExCQVJfUEFJTlRFUikKLSAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBzY3JvbGxi
YXJQYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7
CisgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JT
Y3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgaWYgKCFwYWludGVyKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlKTsKKyAgICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkg
aW52YWxpZGF0ZV07CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUg
PSBudWxscHRyOwogCi0gICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUpOwotICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIGludmFs
aWRhdGVdOwotICAgIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgPSBudWxscHRy
OwotCi0gICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbbV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlci5nZXQoKSBzZXRWZXJ0aWNhbFNjcm9sbGVySW1wOm5pbF07Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2VuZGlmCisgICAgICAgIFtwYWludGVyIHNl
dERlbGVnYXRlOm5pbF07CisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdl
dCgpIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmlsXTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFNjcm9sbGJhclBhaW50ZXIg
cGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICBp
ZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9ob3Jpem9udGFs
U2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlKTsKLSAgICBtX2hvcml6b250YWxTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUuYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10g
aW5pdFdpdGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7Ci0KLSAgICBbcGFpbnRlciBzZXREZWxlZ2F0
ZTptX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCldOwotICAgIFttX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldEhvcml6b250YWxTY3JvbGxlckltcDpw
YWludGVyXTsKLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCi0gICAg
ICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNj
cm9sbGJhcik7Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxl
KCkpIHsKKyAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRl
ckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgICAgICBpZiAoIXBhaW50ZXIpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKCFtX2hvcml6b250YWxTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUuYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhT
Y3JvbGxiYXI6c2Nyb2xsYmFyXSk7CisKKyAgICAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV9o
b3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpXTsKKyAgICAgICAgW21fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOnBh
aW50ZXJdOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCisg
ICAgICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07CisgICAgfQogfQogCiB2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgU2Nyb2xsYmFy
UGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIp
OwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1Njcm9sbGJh
ck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50
ZXIgPSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIGlm
ICghcGFpbnRlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV9ob3Jp
em9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlKTsKKyAgICAgICAgW21faG9yaXpvbnRhbFNj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBpbnZhbGlkYXRlXTsKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlID0gbnVsbHB0cjsKIAotICAgIEFTU0VSVCht
X2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUpOwotICAgIFttX2hvcml6b250YWxT
Y3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07Ci0gICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlID0gbnVsbHB0cjsKLQotICAgIFtwYWludGVyIHNl
dERlbGVnYXRlOm5pbF07Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkg
c2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOm5pbF07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShz
Y3JvbGxiYXIpOwotI2VuZGlmCisgICAgICAgIFtwYWludGVyIHNldERlbGVnYXRlOm5pbF07Cisg
ICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldEhvcml6b250YWxT
Y3JvbGxlckltcDpuaWxdOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y2Fu
Y2VsQW5pbWF0aW9ucygpCiB7CiAgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gZmFs
c2U7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgaWYgKHNjcm9sbGJhclBhaW50
VGltZXJJc0FjdGl2ZSgpKQotICAgICAgICBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotICAg
IFttX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgY2FuY2VsQW5pbWF0
aW9uc107Ci0gICAgW21fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgY2Fu
Y2VsQW5pbWF0aW9uc107Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQor
ICAgICAgICAgICAgc3RvcFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyAgICAgICAgW21faG9yaXpv
bnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKKyAg
ICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgY2FuY2VsQW5p
bWF0aW9uc107CisgICAgfQogfQogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQpAQCAtMTQw
NCwxNSArMTM4MSwxNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnViYmVyQmFuZFRp
CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNldElzQWN0aXZlKCkKIHsKLSNpZiBVU0UoU0NS
T0xMQkFSX1BBSU5URVIpCi0gICAgaWYgKG5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSgpKQotICAg
ICAgICB1cGRhdGVTY3JvbGxlclN0eWxlKCk7Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJP
dmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKG5lZWRzU2Nyb2xsZXJTdHlsZVVw
ZGF0ZSgpKQorICAgICAgICAgICAgdXBkYXRlU2Nyb2xsZXJTdHlsZSgpOworICAgIH0KIH0KIAot
I2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0
ZVNjcm9sbGVyU3R5bGUoKQogeworICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxh
YmxlKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNP
bkFjdGl2ZVBhZ2UoKSkgewogICAgICAgICBzZXROZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUodHJ1
ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0ODYsMTIgKzE0NjUsMTMgQEAgdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6c3RvcFNjcm9sbGJhclBhaQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpp
bml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yTWFjPiop
CiB7Ci0gICAgLy8gVG8gZm9yY2UgdGhlIHNjcm9sbGJhcnMgdG8gZmxhc2gsIHdlIGhhdmUgdG8g
Y2FsbCBoaWRlIGZpcnN0LiBPdGhlcndpc2UsIHRoZSBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
cgotICAgIC8vIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHNjcm9sbGJhcnMgYXJlIGFscmVhZHkgc2hv
d2luZyBhbmQgYmFpbCBlYXJseS4KLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5n
ZXQoKSBoaWRlT3ZlcmxheVNjcm9sbGVyc107Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIuZ2V0KCkgZmxhc2hTY3JvbGxlcnNdOworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlB
UElBdmFpbGFibGUoKSkgeworICAgICAgICAvLyBUbyBmb3JjZSB0aGUgc2Nyb2xsYmFycyB0byBm
bGFzaCwgd2UgaGF2ZSB0byBjYWxsIGhpZGUgZmlyc3QuIE90aGVyd2lzZSwgdGhlIFNjcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyCisgICAgICAgIC8vIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHNjcm9s
bGJhcnMgYXJlIGFscmVhZHkgc2hvd2luZyBhbmQgYmFpbCBlYXJseS4KKyAgICAgICAgW21fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgaGlkZU92ZXJsYXlTY3JvbGxlcnNdOworICAg
ICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBmbGFzaFNjcm9sbGVyc107
CisgICAgfQogfQotI2VuZGlmCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNldFZpc2libGVT
Y3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3JvbGxlclRodW1iKQogewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNp
dHlDb250cm9sbGVyLmgJKHJldmlzaW9uIDEwMzI3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw4ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAKLSNpbmNsdWRlIDxX
ZWJDb3JlL0Zsb2F0UG9pbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmgJKHJldmlzaW9uIDEw
MzI3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZUNvbXBvc2l0ZS5oIgogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogdHlwZWRlZiBp
ZCBTY3JvbGxiYXJQYWludGVyOwotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDMsNyArNDEsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRW5hYmxlZFN0
YXRlKFNjcm9sbGJhciopOwogCisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQogICAgIHZpcnR1YWwg
Ym9vbCBwYWludChTY3JvbGxiYXIqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGRhbWFnZVJlY3QpOworI2VuZGlmCiAKICAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJU
aGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKICAgICAK
QEAgLTU5LDEyICs1OSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU2Ny
b2xsYmFyKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFy
KFNjcm9sbGJhciopOwogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogICAgIHZvaWQgc2V0
TmV3UGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYWludGVyKTsKICAg
ICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAKICAg
ICBzdGF0aWMgYm9vbCBpc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoKTsKLSNlbmRpZgorICAg
IHN0YXRpYyB2b2lkIHNldElzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcihib29sKTsKIAogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciopOwpAQCAtODAs
NiArNzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdmlydHVhbCBib29sIHNob3VsZENlbnRl
ck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgdmly
dHVhbCBib29sIHNob3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKFNjcm9sbGJhciosIGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIGludCBzY3JvbGxiYXJQYXJ0VG9ISVByZXNz
ZWRTdGF0ZShTY3JvbGxiYXJQYXJ0KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHJldmlzaW9uIDEwMzI3MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHR5cGVk
ZWYgSGFzaE1hcDxTY3JvbGxiYXIqLCBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFpbnRlcj4gPiBTY3Jv
bGxiYXJQYWludGVyTWFwOwotI2Vsc2UKLXR5cGVkZWYgSGFzaFNldDxTY3JvbGxiYXIqPiBTY3Jv
bGxiYXJQYWludGVyTWFwOwotI2VuZGlmCiAKIHN0YXRpYyBTY3JvbGxiYXJQYWludGVyTWFwKiBz
Y3JvbGxiYXJNYXAoKQogewpAQCAtNzYsMTggKzcyLDE3IEBAICsgKHZvaWQpYXBwZWFyYW5jZVBy
ZWZzQ2hhbmdlZDooTlNOb3RpZmkKIHsKICAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0
aW9uKTsKIAorICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpOworICAgIGlmICh0aGVtZS0+aXNNb2NrVGhlbWUoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPihTY3JvbGxiYXJUaGVtZTo6dGhlbWUo
KSktPnByZWZlcmVuY2VzQ2hhbmdlZCgpOwogICAgIGlmIChzY3JvbGxiYXJNYXAoKS0+aXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAgICAgU2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3Ig
ZW5kID0gc2Nyb2xsYmFyTWFwKCktPmVuZCgpOwogICAgIGZvciAoU2Nyb2xsYmFyUGFpbnRlck1h
cDo6aXRlcmF0b3IgaXQgPSBzY3JvbGxiYXJNYXAoKS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogICAgICAgICBpdC0+Zmlyc3QtPnN0eWxl
Q2hhbmdlZCgpOwogICAgICAgICBpdC0+Zmlyc3QtPmludmFsaWRhdGUoKTsKLSNlbHNlCi0gICAg
ICAgICgqaXQpLT5zdHlsZUNoYW5nZWQoKTsKLSAgICAgICAgKCppdCktPmludmFsaWRhdGUoKTsK
LSNlbmRpZgogICAgIH0KIH0KIApAQCAtOTUsNiArOTAsMTAgQEAgKyAodm9pZCliZWhhdmlvclBy
ZWZzQ2hhbmdlZDooTlNOb3RpZmljYQogewogICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmlj
YXRpb24pOwogCisgICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCk7CisgICAgaWYgKHRoZW1lLT5pc01vY2tUaGVtZSgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpKS0+cHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiB9CiAKQEAgLTEwOCwyMiArMTA3LDIyIEBAICsg
KHZvaWQpcmVnaXN0ZXJBc09ic2VydmVyCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQ
TEFURk9STShDSFJPTUlVTSkKIFNjcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZl
VGhlbWUoKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2Nyb2xsYmFyVGhlbWVNYWMsIHRo
ZW1lLCAoKSk7CiAgICAgcmV0dXJuICZ0aGVtZTsKIH0KKyNlbmRpZgogCiAvLyBGSVhNRTogR2V0
IHRoZXNlIG51bWJlcnMgZnJvbSBDb3JlVUkuCiBzdGF0aWMgaW50IGNSZWFsQnV0dG9uTGVuZ3Ro
W10gPSB7IDI4LCAyMSB9Owogc3RhdGljIGludCBjQnV0dG9uSGl0SW5zZXRbXSA9IHsgMywgMiB9
OwogLy8gY1JlYWxCdXR0b25MZW5ndGggLSBjQnV0dG9uSW5zZXQKIHN0YXRpYyBpbnQgY0J1dHRv
bkxlbmd0aFtdID0geyAxNCwgMTAgfTsKLSNpZiAhVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogc3Rh
dGljIGludCBjU2Nyb2xsYmFyVGhpY2tuZXNzW10gPSB7IDE1LCAxMSB9Owogc3RhdGljIGludCBj
QnV0dG9uSW5zZXRbXSA9IHsgMTQsIDExIH07CiBzdGF0aWMgaW50IGNUaHVtYk1pbkxlbmd0aFtd
ID0geyAyNiwgMjAgfTsKLSNlbmRpZgogCiBzdGF0aWMgaW50IGNPdXRlckJ1dHRvbkxlbmd0aFtd
ID0geyAxNiwgMTQgfTsgLy8gVGhlIG91dGVyIGJ1dHRvbiBpbiBhIGRvdWJsZSBidXR0b24gcGFp
ciBpcyBhIGJpdCBiaWdnZXIuCiBzdGF0aWMgaW50IGNPdXRlckJ1dHRvbk92ZXJsYXAgPSAyOwpA
QCAtMTMyLDE3ICsxMzEsMTMgQEAgc3RhdGljIGZsb2F0IGdJbml0aWFsQnV0dG9uRGVsYXkgPSAw
LjVmOwogc3RhdGljIGZsb2F0IGdBdXRvc2Nyb2xsQnV0dG9uRGVsYXkgPSAwLjA1ZjsKIHN0YXRp
YyBib29sIGdKdW1wT25UcmFja0NsaWNrID0gZmFsc2U7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BB
SU5URVIpCi1zdGF0aWMgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBnQnV0dG9uUGxhY2VtZW50
ID0gU2Nyb2xsYmFyQnV0dG9uc05vbmU7Ci0jZWxzZQogc3RhdGljIFNjcm9sbGJhckJ1dHRvbnNQ
bGFjZW1lbnQgZ0J1dHRvblBsYWNlbWVudCA9IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQ7Ci0j
ZW5kaWYKIAogc3RhdGljIHZvaWQgdXBkYXRlQXJyb3dQbGFjZW1lbnQoKQogewotI2lmIFVTRShT
Q1JPTExCQVJfUEFJTlRFUikKLSAgICByZXR1cm47Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxi
YXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIE5TU3RyaW5n
ICpidXR0b25QbGFjZW1lbnQgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSBvYmplY3RGb3JLZXk6QCJBcHBsZVNjcm9sbEJhclZhcmlhbnQiXTsKICAgICBpZiAoW2J1dHRv
blBsYWNlbWVudCBpc0VxdWFsVG9TdHJpbmc6QCJTaW5nbGUiXSkKICAgICAgICAgZ0J1dHRvblBs
YWNlbWVudCA9IFNjcm9sbGJhckJ1dHRvbnNTaW5nbGU7CkBAIC0xNTgsMTUgKzE1MywxNSBAQCBz
dGF0aWMgdm9pZCB1cGRhdGVBcnJvd1BsYWNlbWVudCgpCiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVN
YWM6OnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotI2lmIFVTRShT
Q1JPTExCQVJfUEFJTlRFUikKLSAgICBib29sIGlzSG9yaXpvbnRhbCA9IHNjcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwotICAgIFNjcm9sbGJhclBhaW50ZXIg
c2Nyb2xsYmFyUGFpbnRlciA9IFtOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAiKSBz
Y3JvbGxlckltcFdpdGhTdHlsZTp3a1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpIGNvbnRyb2xT
aXplOihOU0NvbnRyb2xTaXplKXNjcm9sbGJhci0+Y29udHJvbFNpemUoKSBob3Jpem9udGFsOmlz
SG9yaXpvbnRhbCByZXBsYWNpbmdTY3JvbGxlckltcDpuaWxdOwotICAgIHNjcm9sbGJhck1hcCgp
LT5hZGQoc2Nyb2xsYmFyLCBzY3JvbGxiYXJQYWludGVyKTsKLSAgICB1cGRhdGVFbmFibGVkU3Rh
dGUoc2Nyb2xsYmFyKTsKLSAgICB1cGRhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoc2Nyb2xsYmFy
KTsKLSNlbHNlCi0gICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIpOwotI2VuZGlmCisg
ICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7CisgICAgICAgIGJvb2wg
aXNIb3Jpem9udGFsID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXI7CisgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciA9IFtOU0Ns
YXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAiKSBzY3JvbGxlckltcFdpdGhTdHlsZTpyZWNv
bW1lbmRlZFNjcm9sbGVyU3R5bGUoKSBjb250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSlzY3JvbGxi
YXItPmNvbnRyb2xTaXplKCkgaG9yaXpvbnRhbDppc0hvcml6b250YWwgcmVwbGFjaW5nU2Nyb2xs
ZXJJbXA6bmlsXTsKKyAgICAgICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIsIHNjcm9s
bGJhclBhaW50ZXIpOworICAgICAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2Nyb2xsYmFyKTsKKyAg
ICAgICAgdXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKHNjcm9sbGJhcik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIsIG5pbCk7CisgICAgfQog
fQogCiB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKQpAQCAtMTc0LDcgKzE2OSw2IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6
OnVucmVnaXN0ZXJTY3JvbGwKICAgICBzY3JvbGxiYXJNYXAoKS0+cmVtb3ZlKHNjcm9sbGJhcik7
CiB9CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiB2b2lkIFNjcm9sbGJhclRoZW1lTWFj
OjpzZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxi
YXJQYWludGVyIG5ld1BhaW50ZXIpCiB7CiAgICAgc2Nyb2xsYmFyTWFwKCktPnNldChzY3JvbGxi
YXIsIG5ld1BhaW50ZXIpOwpAQCAtMTk0LDEzICsxODgsMTcgQEAgYm9vbCBTY3JvbGxiYXJUaGVt
ZU1hYzo6aXNDdXJyZW50bHlEcmF3aQogICAgIHJldHVybiBnX2lzQ3VycmVudGx5RHJhd2luZ0lu
dG9MYXllcjsKIH0KIAotI2VuZGlmCit2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjpzZXRJc0N1cnJl
bnRseURyYXdpbmdJbnRvTGF5ZXIoYm9vbCBiKQoreworICAgIGdfaXNDdXJyZW50bHlEcmF3aW5n
SW50b0xheWVyID0gYjsKK30KIAogU2Nyb2xsYmFyVGhlbWVNYWM6OlNjcm9sbGJhclRoZW1lTWFj
KCkKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKICAgICBpZiAoIWluaXRpYWxpemVk
KSB7CiAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgZ0J1dHRvblBsYWNlbWVu
dCA9IGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpID8gU2Nyb2xsYmFyQnV0dG9uc05v
bmUgOiBTY3JvbGxiYXJCdXR0b25zRG91YmxlRW5kOwogICAgICAgICBbV2ViU2Nyb2xsYmFyUHJl
ZnNPYnNlcnZlciByZWdpc3RlckFzT2JzZXJ2ZXJdOwogICAgICAgICBwcmVmZXJlbmNlc0NoYW5n
ZWQoKTsKICAgICB9CkBAIC0yMjIsMjYgKzIyMCwyMyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lTWFj
OjpwcmVmZXJlbmNlc0NoYW5nCiAKIGludCBTY3JvbGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyVGhp
Y2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogewotI2lmIFVTRShTQ1JP
TExCQVJfUEFJTlRFUikKLSAgICBTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIgPSBb
TlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVySW1wIikgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6
d2tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSBjb250cm9sU2l6ZTpjb250cm9sU2l6ZSBob3Jp
em9udGFsOk5PIHJlcGxhY2luZ1Njcm9sbGVySW1wOm5pbF07Ci0gICAgcmV0dXJuIFtzY3JvbGxi
YXJQYWludGVyIHRyYWNrQm94V2lkdGhdOwotI2Vsc2UKLSAgICByZXR1cm4gY1Njcm9sbGJhclRo
aWNrbmVzc1tjb250cm9sU2l6ZV07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5
QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgU2Nyb2xsYmFyUGFpbnRlciBzY3JvbGxiYXJQYWlu
dGVyID0gW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcCIpIHNjcm9sbGVySW1wV2l0
aFN0eWxlOnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpIGNvbnRyb2xTaXplOmNvbnRyb2xTaXpl
IGhvcml6b250YWw6Tk8gcmVwbGFjaW5nU2Nyb2xsZXJJbXA6bmlsXTsKKyAgICAgICAgcmV0dXJu
IFtzY3JvbGxiYXJQYWludGVyIHRyYWNrQm94V2lkdGhdOworICAgIH0gZWxzZQorICAgICAgICBy
ZXR1cm4gY1Njcm9sbGJhclRoaWNrbmVzc1tjb250cm9sU2l6ZV07CiB9CiAKIGJvb2wgU2Nyb2xs
YmFyVGhlbWVNYWM6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0CiB7Ci0jaWYgVVNFKFND
Uk9MTEJBUl9QQUlOVEVSKQotICAgIHJldHVybiB3a1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgp
ID09IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAg
cmV0dXJuIHJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpID09IE5TU2Nyb2xsZXJTdHlsZU92ZXJs
YXk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgU2Nyb2xsYmFy
VGhlbWVNYWM6OnVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJh
cikKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiAgICAgU2Nyb2xsYmFyUGFpbnRlciBw
YWludGVyID0gcGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwogICAgIHN3aXRjaCAoc2Ny
b2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxiYXJPdmVybGF5U3R5bGUoKSkgewogICAg
IGNhc2UgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGVmYXVsdDoKQEAgLTI1NCw5ICsyNDksNiBAQCB2
b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1cGRhdGVTY3JvbGxiYXJPCiAgICAgICAgIFtwYWludGVy
IHNldEtub2JTdHlsZTpOU1Njcm9sbGVyS25vYlN0eWxlTGlnaHRdOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwotI2VuZGlmCiB9CiAK
IGRvdWJsZSBTY3JvbGxiYXJUaGVtZU1hYzo6aW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCkK
QEAgLTI3Niw3ICsyNjgsNyBAQCBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IFNjcm9sbGJhclRo
ZW1lCiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6Omhhc0J1dHRvbnMoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCiB7Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpICYmIGdCdXR0b25QbGFj
ZW1lbnQgIT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFi
bGVkKCkgJiYgYnV0dG9uc1BsYWNlbWVudCgpICE9IFNjcm9sbGJhckJ1dHRvbnNOb25lCiAgICAg
ICAgICAgICAgJiYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyCiAgICAgICAgICAgICAgPyBzY3JvbGxiYXItPndpZHRoKCkKICAgICAgICAgICAgICA6IHNj
cm9sbGJhci0+aGVpZ2h0KCkpID49IDIgKiAoY1JlYWxCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpXSAtIGNCdXR0b25IaXRJbnNldFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCld
KTsKQEAgLTI4NSwxMyArMjc3LDEyIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6Omhhc0J1dHRv
bnMoU2Nyb2wKIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6Omhhc1RodW1iKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQogewogICAgIGludCBtaW5MZW5ndGhGb3JUaHVtYjsKLSNpZiBVU0UoU0NST0xMQkFS
X1BBSU5URVIpCi0gICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyTWFwKCkt
PmdldChzY3JvbGxiYXIpLmdldCgpOwotICAgIG1pbkxlbmd0aEZvclRodW1iID0gW3BhaW50ZXIg
a25vYk1pbkxlbmd0aF0gKyBbcGFpbnRlciB0cmFja092ZXJsYXBFbmRJbnNldF0gKyBbcGFpbnRl
ciBrbm9iT3ZlcmxhcEVuZEluc2V0XQotICAgICAgICArIDIgKiAoW3BhaW50ZXIgdHJhY2tFbmRJ
bnNldF0gKyBbcGFpbnRlciBrbm9iRW5kSW5zZXRdKTsKLSNlbHNlCi0gICAgbWluTGVuZ3RoRm9y
VGh1bWIgPSAyICogY0J1dHRvbkluc2V0W3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyBjVGh1
bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIDE7Ci0jZW5kaWYKKyAgICBp
ZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgU2Nyb2xsYmFy
UGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpOwor
ICAgICAgICBtaW5MZW5ndGhGb3JUaHVtYiA9IFtwYWludGVyIGtub2JNaW5MZW5ndGhdICsgW3Bh
aW50ZXIgdHJhY2tPdmVybGFwRW5kSW5zZXRdICsgW3BhaW50ZXIga25vYk92ZXJsYXBFbmRJbnNl
dF0KKyAgICAgICAgICAgICsgMiAqIChbcGFpbnRlciB0cmFja0VuZEluc2V0XSArIFtwYWludGVy
IGtub2JFbmRJbnNldF0pOworICAgIH0gZWxzZQorICAgICAgICBtaW5MZW5ndGhGb3JUaHVtYiA9
IDIgKiBjQnV0dG9uSW5zZXRbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIGNUaHVtYk1pbkxl
bmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgMTsKICAgICByZXR1cm4gc2Nyb2xsYmFy
LT5lbmFibGVkKCkgJiYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gCiAgICAgICAgICAgICAgc2Nyb2xsYmFyLT53aWR0aCgpIDogCiAgICAgICAgICAg
ICAgc2Nyb2xsYmFyLT5oZWlnaHQoKSkgPj0gbWluTGVuZ3RoRm9yVGh1bWI7CkBAIC00MjgsMTEg
KzQxOSwxMCBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lTWFjOjp0cmFja1JlY3QoU2NyCiAKIGlu
dCBTY3JvbGxiYXJUaGVtZU1hYzo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICByZXR1cm4gW3Njcm9sbGJh
ck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSBrbm9iTWluTGVuZ3RoXTsKLSNlbHNlCi0gICAg
cmV0dXJuIGNUaHVtYk1pbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldOwotI2VuZGlm
CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1
cm4gW3Njcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSBrbm9iTWluTGVuZ3RoXTsK
KyAgICBlbHNlCisgICAgICAgIHJldHVybiBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250
cm9sU2l6ZSgpXTsKIH0KIAogYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6c2hvdWxkQ2VudGVyT25U
aHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKQEAgLTQ0OSw3
ICs0MzksNyBAQCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpzaG91bGREcmFnRG9jdW1lCiAgICAg
cmV0dXJuIGV2ZW50LmFsdEtleSgpOwogfQogCi1zdGF0aWMgaW50IHNjcm9sbGJhclBhcnRUb0hJ
UHJlc3NlZFN0YXRlKFNjcm9sbGJhclBhcnQgcGFydCkKK2ludCBTY3JvbGxiYXJUaGVtZU1hYzo6
c2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUoU2Nyb2xsYmFyUGFydCBwYXJ0KQogewogICAg
IHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6CkBAIC00
NjksMTQgKzQ1OSwxMCBAQCBzdGF0aWMgaW50IHNjcm9sbGJhclBhcnRUb0hJUHJlc3NlZFN0YXRl
CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZUVuYWJsZWRTdGF0ZShTY3JvbGxiYXIq
IHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgW3Njcm9sbGJh
ck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSBzZXRFbmFibGVkOnNjcm9sbGJhci0+ZW5hYmxl
ZCgpXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7Ci0jZW5kaWYKKyAgICBp
ZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFtzY3JvbGxiYXJN
YXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCkgc2V0RW5hYmxlZDpzY3JvbGxiYXItPmVuYWJsZWQo
KV07CiB9CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiBzdGF0aWMgdm9pZCBzY3JvbGxi
YXJQYWludGVyUGFpbnQoU2Nyb2xsYmFyUGFpbnRlciBzY3JvbGxiYXJQYWludGVyLCBib29sIGVu
YWJsZWQsIGRvdWJsZSB2YWx1ZSwgQ0dGbG9hdCBwcm9wb3J0aW9uLCBDR1JlY3QgZnJhbWVSZWN0
KQogewogICAgIFtzY3JvbGxiYXJQYWludGVyIHNldEVuYWJsZWQ6ZW5hYmxlZF07CkBAIC00OTgs
NDUgKzQ4NCw0NSBAQCBzdGF0aWMgdm9pZCBzY3JvbGxiYXJQYWludGVyUGFpbnQoU2Nyb2xsCiAg
ICAgaWYgKGVuYWJsZWQpCiAgICAgICAgIFtzY3JvbGxiYXJQYWludGVyIGRyYXdLbm9iXTsKIH0K
LSNlbmRpZgogCisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQogYm9vbCBTY3JvbGxiYXJUaGVtZU1h
Yzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIp
Ci0gICAgZmxvYXQgdmFsdWUgPSAwOwotICAgIGZsb2F0IG92ZXJoYW5nID0gMDsKKyAgICBpZiAo
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgZmxvYXQgdmFsdWUg
PSAwOworICAgICAgICBmbG9hdCBvdmVyaGFuZyA9IDA7CiAKLSAgICBpZiAoc2Nyb2xsYmFyLT5j
dXJyZW50UG9zKCkgPCAwKSB7Ci0gICAgICAgIC8vIFNjcm9sbGVkIHBhc3QgdGhlIHRvcC4KLSAg
ICAgICAgdmFsdWUgPSAwOwotICAgICAgICBvdmVyaGFuZyA9IC1zY3JvbGxiYXItPmN1cnJlbnRQ
b3MoKTsKLSAgICB9IGVsc2UgaWYgKHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSArIHNjcm9sbGJh
ci0+Y3VycmVudFBvcygpID4gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSkgewotICAgICAgICAvLyBT
Y3JvbGxlZCBwYXN0IHRoZSBib3R0b20uCi0gICAgICAgIHZhbHVlID0gMTsKLSAgICAgICAgb3Zl
cmhhbmcgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSArIHNjcm9sbGJhci0+dmlzaWJsZVNpemUo
KSAtIHNjcm9sbGJhci0+dG90YWxTaXplKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2l0
aGluIHRoZSBib3VuZHMgb2YgdGhlIHNjcm9sbGFibGUgYXJlYS4KLSAgICAgICAgaW50IG1heGlt
dW0gPSBzY3JvbGxiYXItPm1heGltdW0oKTsKLSAgICAgICAgaWYgKG1heGltdW0gPiAwKQotICAg
ICAgICAgICAgdmFsdWUgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAvIG1heGltdW07Ci0gICAg
ICAgIGVsc2UKKyAgICAgICAgaWYgKHNjcm9sbGJhci0+Y3VycmVudFBvcygpIDwgMCkgeworICAg
ICAgICAgICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgdG9wLgogICAgICAgICAgICAgdmFsdWUgPSAw
OwotICAgIH0KKyAgICAgICAgICAgIG92ZXJoYW5nID0gLXNjcm9sbGJhci0+Y3VycmVudFBvcygp
OworICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSArIHNjcm9sbGJh
ci0+Y3VycmVudFBvcygpID4gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSkgeworICAgICAgICAgICAg
Ly8gU2Nyb2xsZWQgcGFzdCB0aGUgYm90dG9tLgorICAgICAgICAgICAgdmFsdWUgPSAxOworICAg
ICAgICAgICAgb3ZlcmhhbmcgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSArIHNjcm9sbGJhci0+
dmlzaWJsZVNpemUoKSAtIHNjcm9sbGJhci0+dG90YWxTaXplKCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBXaXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgc2Nyb2xsYWJsZSBhcmVh
LgorICAgICAgICAgICAgaW50IG1heGltdW0gPSBzY3JvbGxiYXItPm1heGltdW0oKTsKKyAgICAg
ICAgICAgIGlmIChtYXhpbXVtID4gMCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHNjcm9sbGJh
ci0+Y3VycmVudFBvcygpIC8gbWF4aW11bTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IDA7CisgICAgICAgIH0KIAotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBp
c0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoZ19pc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIs
IGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7Ci0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKLSAgICBjb250ZXh0LT5jbGlwKGRhbWFn
ZVJlY3QpOwotICAgIGNvbnRleHQtPnRyYW5zbGF0ZShzY3JvbGxiYXItPmZyYW1lUmVjdCgpLngo
KSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkpOwotICAgIExvY2FsQ3VycmVudEdyYXBoaWNz
Q29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7Ci0gICAgc2Nyb2xsYmFyUGFpbnRlclBhaW50
KHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxiYXItPmVuYWJsZWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8Q0dG
bG9hdD4oc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAtIG92ZXJoYW5nKSAvIHNjcm9sbGJhci0+
dG90YWxTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT5mcmFt
ZVJlY3QoKSk7CisgICAgICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBpc0N1cnJlbnRseURyYXdp
bmdJbnRvTGF5ZXIoZ19pc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIsIGNvbnRleHQtPmlzQ0FM
YXllckNvbnRleHQoKSk7CisgICAgICAgIAorICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOworICAgICAgICBjb250ZXh0LT5jbGlwKGRhbWFnZVJl
Y3QpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54
KCksIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgpKTsKKyAgICAgICAgTG9jYWxDdXJyZW50R3Jh
cGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgc2Nyb2xsYmFyUGFp
bnRlclBhaW50KHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT5lbmFibGVkKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAtIG92
ZXJoYW5nKSAvIHNjcm9sbGJhci0+dG90YWxTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwogCi0gICAgcmV0dXJuIHRydWU7Ci0j
ZW5kaWYKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgSElUaGVtZVRyYWNrRHJh
d0luZm8gdHJhY2tJbmZvOwogICAgIHRyYWNrSW5mby52ZXJzaW9uID0gMDsKQEAgLTYwMSw2ICs1
ODcsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChTY3JvbGxiYXIqCiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZgogCiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119952</attachid>
            <date>2011-12-19 16:52:51 -0800</date>
            <delta_ts>2011-12-20 11:12:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61144-20111219165250.patch</filename>
            <type>text/plain</type>
            <size>152765</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDExLTEyLTE5ICBTYWlsZXNo
IEFncmF3YWwgPHNhaWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1lcmdlIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMubW0gYmFjayB0byBTY3JvbGxBbmltYXRvck1hYworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExNDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBCZXRoIERha2luLgorCisgICAgICAgIEF0IGEgaGlnaCBsZXZlbCB0aGUgbWFpbiBj
aGFuZ2VzIGFyZToKKyAgICAgICAgICAgIC0gcmVwbGFjZSAjaWZkZWZzIGluIFNjcm9sbEFuaW1h
dG9yTWFjIGFuZCBTY3JvbGxiYXJUaGVtZU1hYyB3aXRoIHJ1biB0aW1lIGNoZWNrcworICAgICAg
ICAgICAgLSBkZWxldGUgZHVwbGljYXRlIGNvZGUgaW4gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yy4gS2VlcCB0aGUgcGFpbnQgY29kZSBzaW5jZSBpdCBkb2VzIHRpY2ttYXJrcyBhbmQgU0tJQSBz
dHVmZi4KKyAgICAgICAgICAgIC0gZGVsZXRlIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMgc2lu
Y2UgU2Nyb2xsQW5pbWF0b3JNYWMgZG9lcyB0aGUgZXhhY3Qgc2FtZSB0aGluZworICAgICAgICAg
ICAgLSBkZWxldGUgU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjIHNpbmNlIE5T
U2Nyb2xsZXJJbXBEZXRhaWxzIGRvZXMgdGhlIHNhbWUgdGhpbmcKKworICAgICAgICBObyBuZXcg
dGVzdHMuIEp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRp
ZXNDaHJvbWl1bU1hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lQ2hyb21pdW1NYWM6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMpOgorICAgICAgICAo
V2ViQ29yZTo6c2Nyb2xsYmFyUGFpbnRlclBhaW50VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9FbXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvTlNT
Y3JvbGxlckltcERldGFpbHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYmFyT3Zlcmxh
eUFQSUF2YWlsYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRh
aWxzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2
YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAgICAgICAgKHNjcm9sbGJhclBhaW50
ZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OlNj
cm9sbEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp+
U2Nyb2xsQW5pbWF0b3JNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JNYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZFNjcm9sbGJhcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJlc2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudHNSZXNpemVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRT
aG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURp
ZEhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Ny
b2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkRW5k
U2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JN
YWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNhbmNlbEFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNldElzQWN0aXZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp1cGRhdGVTY3JvbGxlclN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRU
aW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06CisgICAgICAgICgrW1dl
YlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgYXBwZWFyYW5jZVByZWZzQ2hhbmdlZDpdKToKKyAgICAg
ICAgKCtbV2ViU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciBiZWhhdmlvclByZWZzQ2hhbmdlZDpdKToK
KyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUFycm93UGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lTWFjOjpyZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6c2V0SXNDdXJyZW50bHlEcmF3aW5nSW50b0xheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjpTY3JvbGxiYXJUaGVtZU1hYyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyVGhpY2tuZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjp1c2VzT3ZlcmxheVNjcm9s
bGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZVNjcm9s
bGJhck92ZXJsYXlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6
aGFzQnV0dG9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6aGFzVGh1
bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6Om1pbmltdW1UaHVtYkxl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyUGFy
dFRvSElQcmVzc2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6
OnVwZGF0ZUVuYWJsZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJQYWludGVy
UGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50KToKKwog
MjAxMS0xMi0xOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIFNlbmQgZ2VzdHVyZSBldmVudHMgdGhyb3VnaCB0aGUgZXZlbnQgZGlzcGF0Y2hlciBhbmQg
c2Nyb2xsaW5nIGNvb3JkaW5hdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDMy
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMz
MDgsMTAgKzMzMDgsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTGlz
dEJveC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVQcml2YXRl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9t
aXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYy5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjLm1tJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCcsCi0gICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLm1tJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVt
TGludXguY3BwJywKQEAgLTQxNTUsNiArNDE1MSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
bWFjL0xvY2FsaXplZFN0cmluZ3NNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9M
b2dnaW5nTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvTUlNRVR5cGVSZWdpc3Ry
eU1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxz
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbScs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRIZWxwZXIuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL21hYy9QbGF0Zm9ybUNsb2NrQ0EuY3BwJywKQEAgLTQxNjYsNiArNDE2NCw4IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vbWFjL1NjaGVkdWxlUGFpck1hYy5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Nj
cm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9T
Y3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFj
L1Njcm9sbFZpZXdNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3JvbGxiYXJU
aGVtZU1hYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMu
bW0nLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9u
IDEwMzI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjk5LDEzICsxMjk5LDEzIEBACiAgICAgICAgICAgICAgICMgc3VjaCBh
czoKICAgICAgICAgICAgICAgIyBjb20uZ29vZ2xlLkNocm9tZVtdIG9iamNbXTogQ2xhc3MgU2Ny
b2xsYmFyUHJlZnNPYnNlcnZlciBpcyBpbXBsZW1lbnRlZCBpbiBib3RoIC4uLi9Hb29nbGUgQ2hy
b21lLmFwcC9Db250ZW50cy9WZXJzaW9ucy8uLi4vR29vZ2xlIENocm9tZSBIZWxwZXIuYXBwL0Nv
bnRlbnRzL01hY09TLy4uLy4uLy4uL0dvb2dsZSBDaHJvbWUgRnJhbWV3b3JrLmZyYW1ld29yay9H
b29nbGUgQ2hyb21lIEZyYW1ld29yayBhbmQgL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvV2Vi
S2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvV2ViQ29yZS5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9XZWJDb3JlLiBPbmUgb2YgdGhlIHR3byB3aWxsIGJlIHVzZWQuIFdoaWNoIG9uZSBp
cyB1bmRlZmluZWQuCiAgICAgICAgICAgICAgICdXZWJDYXNjYWRlTGlzdD1DaHJvbWl1bVdlYkNv
cmVPYmpDV2ViQ2FzY2FkZUxpc3QnLAotICAgICAgICAgICAgICAnU2Nyb2xsYmFyUHJlZnNPYnNl
cnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcicsCisgICAgICAg
ICAgICAgICdXZWJTY3JvbGxiYXJQcmVmc09ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNXZWJT
Y3JvbGxiYXJQcmVmc09ic2VydmVyJywKICAgICAgICAgICAgICAgJ1dlYkNvcmVSZW5kZXJUaGVt
ZU5vdGlmaWNhdGlvbk9ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNXZWJDb3JlUmVuZGVyVGhl
bWVOb3RpZmljYXRpb25PYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJGb250Q2FjaGU9Q2hy
b21pdW1XZWJDb3JlT2JqQ1dlYkZvbnRDYWNoZScsCi0gICAgICAgICAgICAgICdTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGUnLAotICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJE
ZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxl
Z2F0ZScsCi0gICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU9Q2hyb21pdW1X
ZWJDb3JlT2JqQ1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZScsCi0gICAgICAgICAgICAgICdTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQYXJ0QW5pbWF0
aW9uJywKKyAgICAgICAgICAgICAgJ1dlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlPUNo
cm9taXVtV2ViQ29yZU9iakNXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZScsCisgICAg
ICAgICAgICAgICdXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlPUNocm9taXVt
V2ViQ29yZU9iakNXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlJywKKyAgICAg
ICAgICAgICAgJ1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpD
V2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlJywKKyAgICAgICAgICAgICAgJ1dlYlNjcm9sbGJh
clBhcnRBbmltYXRpb249Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYlNjcm9sbGJhclBhcnRBbmltYXRp
b24nLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCiAgICAg
ICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2FwcGxlX3dlYmtpdCcs
CkBAIC0xNTY1LDcgKzE1NjUsMTEgQEAKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9tYWMvQmxvY2tFeGNlcHRpb25zXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dFxcLm1tJCddLAorICAg
ICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlsc1xc
Lm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9QdXJnZWFibGVC
dWZmZXJNYWNcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFj
L1Njcm9sbGJhclRoZW1lTWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyXFwubW0kJ10sCiAg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2VcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvV2ViQ29y
ZVRleHRSZW5kZXJlclxcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3Jt
L3RleHQvbWFjL1NoYXBlQXJhYmljXFwuYyQnXSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwMzI4MCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1MSw2ICsxNTUxLDcgQEAKIAkJNTFGQjU1MDUxMTNFM0U5MTAwODIxMTc2
IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAq
LzsgfTsKIAkJNTIxRDQ2RjYxMUFFQzk4MTAwNTE0NjEzIC8qIEtpbGxSaW5nTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxRDQ2RjUxMUFFQzk4
MTAwNTE0NjEzIC8qIEtpbGxSaW5nTWFjLm1tICovOyB9OwogCQk1MjFENDZGODExQUVDOUIxMDA1
MTQ2MTMgLyogS2lsbFJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyMUQ0NkY3MTFBRUM5QjEwMDUxNDYxMyAvKiBLaWxsUmluZy5oICovOyB9Owor
CQk1MkY1MkUxMTE0QTAxMzRGMDBBQ0MzOTcgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY1MkUxMDE0QTAx
MzRGMDBBQ0MzOTcgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0gKi87IH07CiAJCTUzMTc2MTIy
MTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzE3NjEyMDEzQzUxNjY5MDAyNkU0
NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwICovOyB9OwogCQk1MzE3NjEyMzEzQzUxNjY5
MDAyNkU0NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTc2MTIxMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHls
ZUZsZXhpYmxlQm94RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUzMjVFNEQ3MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyNUU0RDUx
M0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi87IH07CkBAIC04ODIzLDYgKzg4
MjQsNyBAQAogCQk1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyMUQ0NkY1MTFBRUM5ODEwMDUxNDYxMyAvKiBL
aWxsUmluZ01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtp
bGxSaW5nTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjFENDZGNzExQUVD
OUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gS2lsbFJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJGNTJFMTAxNEEw
MTM0RjAwQUNDMzk3IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTlNTY3JvbGxlckltcERldGFpbHMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTc2MTIwMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZs
ZXhpYmxlQm94RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBT
dHlsZUZsZXhpYmxlQm94RGF0YS5jcHA7IHBhdGggPSBzdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTc2MTIxMTNDNTE2NjkwMDI2
RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBTdHlsZUZsZXhpYmxlQm94RGF0YS5oOyBwYXRoID0gc3R5bGUvU3R5bGVGbGV4aWJs
ZUJveERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNUU0RDUxM0E2Qzg4
QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NGbGV4VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTU2MDEsNiArMTU2MDMsNyBAQAogCQkJCTY1N0VEQTBBMTM4NUNCRDgwMDRFMDY0NSAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW0gKi8sCiAJCQkJQkM3NzJDNUQwQzRFQjM0NDAwODMy
ODVGIC8qIE1JTUVUeXBlUmVnaXN0cnlNYWMubW0gKi8sCiAJCQkJOTM1MDBGMzExM0ZERTNCRTAw
OTlFQzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggKi8sCisJCQkJNTJGNTJFMTAxNEEwMTM0
RjAwQUNDMzk3IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tICovLAogCQkJCUE3RDNDNTIzMEI1
NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggKi8sCiAJCQkJNEIyNzA5ODEwQUYy
RTVFMDAwNjUxMjdGIC8qIFBhc3RlYm9hcmRNYWMubW0gKi8sCiAJCQkJOTM1QzQ3NkYwOUFDNEQ3
MzAwQTZBQUI0IC8qIFBsYXRmb3JtTW91c2VFdmVudE1hYy5tbSAqLywKQEAgLTI3ODUwLDYgKzI3
ODUzLDcgQEAKIAkJCQkxQTFGMjhBMTE0OUU2Mjk4MDBGQkMzNUYgLyogU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBODBBOTQyMzE0OUYyMjVFMDA5ODkyOTEg
LyogSlNET01XaW5kb3dXZWJBdWRpb0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBB
OTQyNTE0OUYyMjcxMDA5ODkyOTEgLyogSlNET01XaW5kb3dXZWJTb2NrZXRDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTJGNTJFMTExNEEwMTM0RjAwQUNDMzk3IC8qIE5TU2Nyb2xsZXJJ
bXBEZXRhaWxzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5o
CShyZXZpc2lvbiAxMDMyODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNf
aAotI2RlZmluZSBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjX2gKLQotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJPdmVybGF5VXRp
bGl0aWVzQ2hyb21pdW1NYWMuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgU2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGU7Ci1AY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwotQGNsYXNzIFNj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7Ci1AY2xhc3MgU2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlOwotI2Vsc2UKLWNsYXNzIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwot
Y2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwotY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJEZWxlZ2F0ZTsKLWNsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGJhcjsKLQotY2xhc3MgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7Ci1wdWJsaWM6
Ci0gICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhTY3JvbGxhYmxlQXJlYSop
OwotICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBm
bG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9P
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLQotI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmKSBPVkVSUklERTsKLSNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMp
Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1
cmVFdmVudCYpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxBbmlt
YXRpb25zKCk7Ci0KLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgbmV3UG9zaXRpb24pOwotICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZmxv
YXQgZGVsdGFYKTsKLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGZsb2F0IGRlbHRh
WSk7Ci0KLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOwotCi0gICAgdm9pZCBzZXRJc0RyYXdpbmdJ
bnRvTGF5ZXIoYm9vbCBiKSB7IG1fZHJhd2luZ0ludG9MYXllciA9IGI7IH0KLSAgICBib29sIGlz
RHJhd2luZ0ludG9MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0ludG9MYXllcjsgfQot
Ci0gICAgYm9vbCBoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9o
YXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY3Rp
dmUoKTsKLQotI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLSAgICB2b2lkIHVwZGF0ZVNj
cm9sbGVyU3R5bGUoKTsKLQotICAgIGJvb2wgc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICB2b2lkIHN0
b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmKTsKLQotcHJpdmF0ZToKLSAgICBSZXRhaW5Q
dHI8aWQ+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyOwotICAgIFJldGFpblB0cjxTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZT4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKLQot
I2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLSAgICBSZXRhaW5QdHI8V0tTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlclJlZj4gbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlcjsKLSAgICBS
ZXRhaW5QdHI8U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZT4gbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlOwotICAgIFJldGFpblB0cjxpZD4gbV9zY3JvbGxiYXJQ
YWludGVyRGVsZWdhdGU7Ci0KLSAgICB2b2lkIGluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmly
ZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKTsKLSAgICBUaW1lcjxTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjPiBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyOwotI2VuZGlm
Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpOwotICAgIHZp
cnR1YWwgdm9pZCBjb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBtb3Vz
ZUV4aXRlZENvbnRlbnRBcmVhKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxTdGFydExpdmVSZXNp
emUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNSZXNpemVkKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRB
cmVhRGlkU2hvdygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZEhpZGUo
KSBjb25zdDsKLSAgICB2b2lkIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OwotICAgIHZv
aWQgZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVt
b3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFk
ZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxS
ZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwotCi0gICAgdm9pZCBzZXROZWVk
c1Njcm9sbGVyU3R5bGVVcGRhdGUoYm9vbCBuZWVkc1VwZGF0ZSkgeyBtX25lZWRzU2Nyb2xsZXJT
dHlsZVVwZGF0ZSA9IG5lZWRzVXBkYXRlOyB9Ci0gICAgYm9vbCBuZWVkc1Njcm9sbGVyU3R5bGVV
cGRhdGUoKSBjb25zdCB7IHJldHVybiBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZTsgfQotCi0g
ICAgZmxvYXQgYWRqdXN0U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQpIGNvbnN0Owot
ICAgIGZsb2F0IGFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsK
LSAgICBGbG9hdFBvaW50IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0OwotCi0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGJvb2wg
YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd3NIb3Jpem9u
dGFsU3RyZXRjaGluZygpIGNvbnN0OwotICAgIGJvb2wgcGlubmVkSW5EaXJlY3Rpb24oZmxvYXQg
ZGVsdGFYLCBmbG9hdCBkZWx0YVkpOwotICAgIHZvaWQgc25hcFJ1YmJlckJhbmQoKTsKLSAgICB2
b2lkIHNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjPiopOwotICAgIHZvaWQgc21vb3RoU2Nyb2xsV2l0aEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYpOwotICAgIHZvaWQgYmVnaW5TY3JvbGxHZXN0dXJlKCk7Ci0gICAgdm9pZCBlbmRT
Y3JvbGxHZXN0dXJlKCk7Ci0KLSAgICBib29sIG1faW5TY3JvbGxHZXN0dXJlOwotICAgIGJvb2wg
bV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3M7Ci0gICAgYm9vbCBtX2lnbm9yZU1vbWVudHVtU2Ny
b2xsczsKLQotICAgIGJvb2wgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uTGVmdDsKLSAgICBi
b29sIG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPblJpZ2h0OwotICAgIGludCBtX2N1bXVsYXRp
dmVIb3Jpem9udGFsU2Nyb2xsOwotICAgIGJvb2wgbV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNj
cm9sbEV2ZXJTd2l0Y2hUb09wcG9zaXRlRGlyZWN0aW9uT2ZQaW47Ci0KLSAgICBDRlRpbWVJbnRl
cnZhbCBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKLSAgICBGbG9hdFNpemUgbV9vdmVy
Zmxvd1Njcm9sbERlbHRhOwotICAgIEZsb2F0U2l6ZSBtX3N0cmV0Y2hTY3JvbGxGb3JjZTsKLSAg
ICBGbG9hdFNpemUgbV9tb21lbnR1bVZlbG9jaXR5OwotCi0gICAgLy8gUnViYmVyIGJhbmQgc3Rh
dGUuCi0gICAgQ0ZUaW1lSW50ZXJ2YWwgbV9zdGFydFRpbWU7Ci0gICAgRmxvYXRTaXplIG1fc3Rh
cnRTdHJldGNoOwotICAgIEZsb2F0UG9pbnQgbV9vcmlnT3JpZ2luOwotICAgIEZsb2F0U2l6ZSBt
X29yaWdWZWxvY2l0eTsKLSAgICBUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiBtX3Nu
YXBSdWJiZXJCYW5kVGltZXI7Ci0jZW5kaWYKLSAgICBib29sIG1fZHJhd2luZ0ludG9MYXllcjsK
LSAgICBib29sIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZDsKLSAgICBib29sIG1fbmVlZHNT
Y3JvbGxlclN0eWxlVXBkYXRlOwotICAgIEludFJlY3QgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJl
Y3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbQkocmV2aXNp
b24gMTAzMjgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwxMzQ2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxzeXMvdGlt
ZS5oPgotI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KLQotI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMuaCIKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUdlc3R1cmVFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2lu
Y2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgotI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yy5oIgotI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotI2luY2x1ZGUgPFF1
YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5n
IG5hbWVzcGFjZSBzdGQ7Ci0KLSNpZiAhZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OXzEwXzYpIHx8
IE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCBNQUNfT1NfWF9WRVJTSU9OXzEwXzYKLUBw
cm90b2NvbCBOU0FuaW1hdGlvbkRlbGVnYXRlCi1AZW5kCi0KLUBpbnRlcmZhY2UgTlNQcm9jZXNz
SW5mbyAoU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hY0V4dCkKLS0gKE5TVGltZUludGVydmFsKXN5
c3RlbVVwdGltZTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIE5TUHJvY2Vzc0luZm8gKFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWNFeHQpCi0tIChOU1RpbWVJbnRlcnZhbClzeXN0ZW1VcHRpbWUK
LXsKLSAgICAvLyBHZXQgaG93IGxvbmcgc3lzdGVtIGhhcyBiZWVuIHVwLiBGb3VuZCBieSBsb29r
aW5nIGdldHRpbmcgImJvb3R0aW1lIiBmcm9tIHRoZSBrZXJuZWwuCi0gICAgc3RhdGljIHN0cnVj
dCB0aW1ldmFsIGJvb3R0aW1lID0gezB9OwotICAgIGlmICghYm9vdHRpbWUudHZfc2VjKSB7Ci0g
ICAgICAgIGludCBtaWJbMl0gPSB7Q1RMX0tFUk4sIEtFUk5fQk9PVFRJTUV9OwotICAgICAgICBz
aXplX3Qgc2l6ZSA9IHNpemVvZihib290dGltZSk7Ci0gICAgICAgIGlmICgtMSA9PSBzeXNjdGwo
bWliLCAyLCAmYm9vdHRpbWUsICZzaXplLCAwLCAwKSkKLSAgICAgICAgICAgIGJvb3R0aW1lLnR2
X3NlYyA9IDA7Ci0gICAgfQotICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsKLSAgICBpZiAoYm9vdHRp
bWUudHZfc2VjICYmIC0xICE9IGdldHRpbWVvZmRheSgmbm93LCAwKSkgewotICAgICAgICBzdHJ1
Y3QgdGltZXZhbCB1cHRpbWU7Ci0gICAgICAgIHRpbWVyc3ViKCZub3csICZib290dGltZSwgJnVw
dGltZSk7Ci0gICAgICAgIE5TVGltZUludGVydmFsIHJlc3VsdCA9IHVwdGltZS50dl9zZWMgKyAo
dXB0aW1lLnR2X3VzZWMgLyAxRSs2KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgcmV0dXJuIDA7Ci19Ci1AZW5kCi0jZW5kaWYKLQotQGludGVyZmFjZSBOU09iamVjdCAoU2Ny
b2xsQW5pbWF0aW9uSGVscGVyRGV0YWlscykKLS0gKGlkKWluaXRXaXRoRGVsZWdhdGU6KGlkKWRl
bGVnYXRlOwotLSAodm9pZClfc3RvcFJ1bjsKLS0gKEJPT0wpX2lzQW5pbWF0aW5nOwotLSAoTlNQ
b2ludCl0YXJnZXRPcmlnaW47Ci0tIChDR0Zsb2F0KV9wcm9ncmVzczsKLUBlbmQKLQotQGludGVy
ZmFjZSBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Ci17Ci0gICAgV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOwotfQotLSAoaWQpaW5p
dFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyop
c2Nyb2xsQW5pbWF0b3I7Ci1AZW5kCi0KLXN0YXRpYyBOU1NpemUgYWJzKE5TU2l6ZSBzaXplKQot
ewotICAgIE5TU2l6ZSBmaW5hbFNpemUgPSBzaXplOwotICAgIGlmIChmaW5hbFNpemUud2lkdGgg
PCAwKQotICAgICAgICBmaW5hbFNpemUud2lkdGggPSAtZmluYWxTaXplLndpZHRoOwotICAgIGlm
IChmaW5hbFNpemUuaGVpZ2h0IDwgMCkKLSAgICAgICAgZmluYWxTaXplLmhlaWdodCA9IC1maW5h
bFNpemUuaGVpZ2h0OwotICAgIHJldHVybiBmaW5hbFNpemU7ICAgIAotfQotCi1AaW1wbGVtZW50
YXRpb24gU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhTY3Jv
bGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5p
bWF0b3IKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOwotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNjcm9sbEFuaW1hdG9yRGVzdHJveWVkCi17Ci0gICAg
X2FuaW1hdG9yID0gMDsKLX0KLQotLSAoTlNSZWN0KWJvdW5kcwotewotICAgIGlmICghX2FuaW1h
dG9yKQotICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKLQotICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgY3VycmVudFBvc2l0aW9uID0gX2FuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKTsKLSAgICBy
ZXR1cm4gTlNNYWtlUmVjdChjdXJyZW50UG9zaXRpb24ueCgpLCBjdXJyZW50UG9zaXRpb24ueSgp
LCAwLCAwKTsKLX0KLQotLSAodm9pZClfaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludDooTlNQb2ludClu
ZXdQb3NpdGlvbgotewotICAgIGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0gICAg
X2FuaW1hdG9yLT5pbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKG5ld1Bv
c2l0aW9uKTsKLX0KLQotLSAoTlNQb2ludClfcGl4ZWxBbGlnblByb3Bvc2VkU2Nyb2xsUG9zaXRp
b246KE5TUG9pbnQpbmV3T3JpZ2luCi17Ci0gICAgcmV0dXJuIG5ld09yaWdpbjsKLX0KLQotLSAo
TlNTaXplKWNvbnZlcnRTaXplVG9CYXNlOihOU1NpemUpc2l6ZQotewotICAgIHJldHVybiBhYnMo
c2l6ZSk7Ci19Ci0KLS0gKE5TU2l6ZSljb252ZXJ0U2l6ZUZyb21CYXNlOihOU1NpemUpc2l6ZQot
ewotICAgIHJldHVybiBhYnMoc2l6ZSk7Ci19Ci0KLS0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFj
a2luZzooTlNTaXplKXNpemUKLXsKLSAgICByZXR1cm4gYWJzKHNpemUpOwotfQotCi0tIChOU1Np
emUpY29udmVydFNpemVGcm9tQmFja2luZzooTlNTaXplKXNpemUKLXsKLSAgICByZXR1cm4gYWJz
KHNpemUpOwotfQotCi0tIChpZClzdXBlcnZpZXcKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0t
IChpZClkb2N1bWVudFZpZXcKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChpZCl3aW5kb3cK
LXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKV9yZWN1cnNpdmVSZWNvbXB1dGVUb29s
VGlwcwotewotfQotCi1AZW5kCi0KLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi0KLUBp
bnRlcmZhY2UgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Ci17
Ci0gICAgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOwotfQot
LSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBTY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlCi0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0
b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCi17
Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgCi0gICAgX2FuaW1hdG9yID0gc2Nyb2xsQW5pbWF0b3I7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWQKLXsKLSAgICBfYW5p
bWF0b3IgPSAwOwotfQotCi0tIChOU1JlY3QpY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQ
YWlyOihpZClzY3JvbGxlckltcFBhaXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQ
YWlyKTsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci0K
LSAgICBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IF9hbmltYXRvci0+c2Nyb2xsYWJs
ZUFyZWEoKS0+Y29udGVudHNTaXplKCk7Ci0gICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgY29u
dGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLS0gKEJPT0wp
aW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIKLXsKLSAg
ICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAg
ICAgICAgcmV0dXJuIE5POwotCi0gICAgcmV0dXJuIF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEo
KS0+aW5MaXZlUmVzaXplKCk7Ci19Ci0KLS0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluQ29udGVu
dEFyZWFGb3JTY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpcgotewotICAgIFVOVVNF
RF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwotICAgIGlmICghX2FuaW1hdG9yKQotICAgICAgICBy
ZXR1cm4gTlNaZXJvUG9pbnQ7Ci0KLSAgICByZXR1cm4gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJl
YSgpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpOwotfQotCi0tIChOU1BvaW50KXNjcm9sbGVySW1w
UGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIGNvbnZlcnRDb250ZW50UG9pbnQ6KE5TUG9pbnQpcG9p
bnRJbkNvbnRlbnRBcmVhIHRvU2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAg
IHJldHVybiBOU1plcm9Qb2ludDsKLQotICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFy
ID0gMDsKLSAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKChXS1Njcm9sbGJh
clBhaW50ZXJSZWYpc2Nyb2xsZXJJbXApKQotICAgICAgICBzY3JvbGxiYXIgPSBfYW5pbWF0b3It
PnNjcm9sbGFibGVBcmVhKCktPmhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICBlbHNlIAotICAg
ICAgICBzY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Ny
b2xsYmFyKCk7Ci0KLSAgICAvLyBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgbnVsbCBzY3JvbGxi
YXIgaGVyZSBzaW5jZSBpdCBpcyBwb3NzaWJsZSBmb3IgdGhpcyBkZWxlZ2F0ZQotICAgIC8vIG1l
dGhvZCB0byBiZSBjYWxsZWQgYmV0d2VlbiB0aGUgbW9tZW50IHdoZW4gYSBzY3JvbGxiYXIgaGFz
IGJlZW4gc2V0IHRvIDAgYW5kIHRoZQotICAgIC8vIG1vbWVudCB3aGVuIGl0cyBkZXN0cnVjdG9y
IGhhcyBiZWVuIGNhbGxlZC4gV2Ugc2hvdWxkIHByb2JhYmx5IGRlLWNvdXBsZSBzb21lCi0gICAg
Ly8gb2YgdGhlIGNsZWFuLXVwIHdvcmsgaW4gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dW5y
ZWdpc3RlclNjcm9sbGJhcigpIHRvIGF2b2lkIHRoaXMKLSAgICAvLyBpc3N1ZS4KLSAgICBpZiAo
IXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFBvaW50KCk7Ci0gICAgCi0g
ICAgcmV0dXJuIHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhXZWJDb3JlOjpJ
bnRQb2ludChwb2ludEluQ29udGVudEFyZWEpKTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcFBh
aXI6KGlkKXNjcm9sbGVySW1wUGFpciBzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDoo
TlNSZWN0KXJlY3QKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBV
TlVTRURfUEFSQU0ocmVjdCk7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3Jv
bGxlckltcFBhaXIgdXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJT
dHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZQotewotICAg
IGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3a1NldFNjcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyU3R5bGUoKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpc2Ny
b2xsZXJJbXBQYWlyLCBuZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUpOwotICAgIF9hbmltYXRv
ci0+dXBkYXRlU2Nyb2xsZXJTdHlsZSgpOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgU2Nyb2xs
YmFyUGFydEFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uCi17Ci0gICAgUmV0YWluUHRyPFdLU2Nyb2xs
YmFyUGFpbnRlclJlZj4gX3Njcm9sbGVyUGFpbnRlcjsKLSAgICBXZWJDb3JlOjpTY3JvbGxiYXJQ
YXJ0IF9wYXJ0OwotICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9hbmlt
YXRvcjsKLSAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGE7Ci0gICAgQ0dGbG9hdCBfbmV3QWxwaGE7
Ci19Ci0tIChpZClpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6KFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0IHNjcm9s
bEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmlt
YXRvciBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50
ZXJ2YWwpZHVyYXRpb247Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYXJ0QW5p
bWF0aW9uCi0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjooV0tTY3JvbGxiYXJQYWlu
dGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0KXBhcnQg
c2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9s
bEFuaW1hdG9yIGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9uOihOU1Rp
bWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhEdXJhdGlv
bjpkdXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIF9zY3JvbGxlclBhaW50ZXIg
PSBzY3JvbGxlclBhaW50ZXI7Ci0gICAgX3BhcnQgPSBwYXJ0OwotICAgIF9hbmltYXRvciA9IHNj
cm9sbEFuaW1hdG9yOwotICAgIF9pbml0aWFsQWxwaGEgPSBfcGFydCA9PSBXZWJDb3JlOjpUaHVt
YlBhcnQgPyB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoX3Njcm9sbGVyUGFpbnRlci5nZXQo
KSkgOiB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCkp
OwotICAgIF9uZXdBbHBoYSA9IG5ld0FscGhhOwotICAgIAotICAgIHJldHVybiBzZWxmOyAgICAK
LX0KLQotLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJv
Z3Jlc3MKLXsKLSAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKLQotICAg
IGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0Zsb2F0IGN1cnJlbnRB
bHBoYTsKLSAgICBpZiAoX2luaXRpYWxBbHBoYSA+IF9uZXdBbHBoYSkKLSAgICAgICAgY3VycmVu
dEFscGhhID0gMSAtIHByb2dyZXNzOwotICAgIGVsc2UKLSAgICAgICAgY3VycmVudEFscGhhID0g
cHJvZ3Jlc3M7Ci0gICAgCi0gICAgaWYgKF9wYXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCkKLSAg
ICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0
KCksIGN1cnJlbnRBbHBoYSk7Ci0gICAgZWxzZQotICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50
ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCksIGN1cnJlbnRBbHBoYSk7Ci0KLSAg
ICAvLyBJbnZhbGlkYXRlIHRoZSBzY3JvbGxiYXJzIHNvIHRoYXQgdGhleSBwYWludCB0aGUgYW5p
bWF0aW9uCi0gICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBf
YW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAg
IHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChXZWJDb3JlOjpJbnRSZWN0KDAsIDAs
IHZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCB2ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkp
KTsKLSAgICBpZiAoV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gX2Fu
aW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAg
IGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwg
MCwgaG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwgaG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCkpKTsKLX0KLQotLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAotewotICAgIFtz
ZWxmIHN0b3BBbmltYXRpb25dOwotICAgIF9hbmltYXRvciA9IDA7Ci19Ci0KLUBlbmQKLQotQGlu
dGVyZmFjZSBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgOiBOU09iamVjdDxOU0FuaW1hdGlvbkRl
bGVnYXRlPgotewotICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9hbmlt
YXRvcjsKLQotICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdmVydGljYWxL
bm9iQW5pbWF0aW9uOwotICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfaG9y
aXpvbnRhbEtub2JBbmltYXRpb247Ci0KLSAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1h
dGlvbj4gX3ZlcnRpY2FsVHJhY2tBbmltYXRpb247Ci0gICAgUmV0YWluUHRyPFNjcm9sbGJhclBh
cnRBbmltYXRpb24+IF9ob3Jpem9udGFsVHJhY2tBbmltYXRpb247Ci19Ci0tIChpZClpbml0V2l0
aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3Jv
bGxBbmltYXRvcjsKLS0gKHZvaWQpY2FuY2VsQW5pbWF0aW9uczsKLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZQotCi0tIChpZClpbml0V2l0aFNjcm9sbEFu
aW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRv
cgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIAotICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOwotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKLXsKLSAgICBbX3ZlcnRp
Y2FsS25vYkFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKLSAgICBbX2hvcml6b250YWxL
bm9iQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOwotICAgIFtfdmVydGljYWxUcmFja0Fu
aW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKLSAgICBbX2hvcml6b250YWxUcmFja0FuaW1h
dGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKLX0KLQotLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9C
YWNraW5nOihOU1JlY3QpYVJlY3QKLXsKLSAgICByZXR1cm4gYVJlY3Q7Ci19Ci0KLS0gKE5TUmVj
dCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QpYVJlY3QKLXsKLSAgICByZXR1cm4gYVJl
Y3Q7Ci19Ci0KLSNpZiAhUExBVEZPUk0oQ0hST01JVU0pCi0tIChDQUxheWVyICopbGF5ZXIKLXsK
LSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBpZiAoIV9hbmlt
YXRvci0+aXNEcmF3aW5nSW50b0xheWVyKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYXR0ZW1wdCB0byByZXR1cm4gYW4gYWN0dWFsIGxheWVyLgot
ICAgIHN0YXRpYyBDQUxheWVyICpkdW1teUxheWVyID0gW1tDQUxheWVyIGFsbG9jXSBpbml0XTsK
LSAgICByZXR1cm4gZHVtbXlMYXllcjsKLX0KLSNlbmRpZgotCi0tICh2b2lkKXNldFVwQW5pbWF0
aW9uOihSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4mKXNjcm9sbGJhclBhcnRBbmlt
YXRpb24gc2Nyb2xsZXJQYWludGVyOihXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQYWlu
dGVyIHBhcnQ6KFdlYkNvcmU6OlNjcm9sbGJhclBhcnQpcGFydCBhbmltYXRlQWxwaGFUbzooQ0dG
bG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICAv
LyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdGhlIHBhZ2UsIHRoZW4gdGhlIHNjcm9sbGJhcnMg
bXVzdCBiZSBhbmltYXRlZCBoZXJlLiAKLSAgICAvLyBUaGlzIG92ZXJyaWRlcyB0aGUgZWFybHkg
cmV0dXJucy4KLSAgICBib29sIG11c3RBbmltYXRlID0gX2FuaW1hdG9yLT5oYXZlU2Nyb2xsZWRT
aW5jZVBhZ2VMb2FkKCk7Ci0KLSAgICBpZiAoX2FuaW1hdG9yLT5zY3JvbGxiYXJQYWludFRpbWVy
SXNBY3RpdmUoKSAmJiAhbXVzdEFuaW1hdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChf
YW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25z
KCkgJiYgIW11c3RBbmltYXRlKSB7Ci0gICAgICAgIF9hbmltYXRvci0+c3RhcnRTY3JvbGxiYXJQ
YWludFRpbWVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBdCB0aGlzIHBv
aW50LCB3ZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBhbmltYXRlIG5vdywgc28gc3RvcCB0aGUg
dGltZXIuCi0gICAgX2FuaW1hdG9yLT5zdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotCi0gICAg
Ly8gSWYgd2UgYXJlIGN1cnJlbnRseSBhbmltYXRpbmcsIHN0b3AKLSAgICBpZiAoc2Nyb2xsYmFy
UGFydEFuaW1hdGlvbikgewotICAgICAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBz
dG9wQW5pbWF0aW9uXTsKLSAgICAgICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA9IG5pbDsKLSAg
ICB9Ci0KLSAgICBpZiAocGFydCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQgJiYgIXdrU2Nyb2xsYmFy
UGFpbnRlcklzSG9yaXpvbnRhbChzY3JvbGxlclBhaW50ZXIpKSB7Ci0gICAgICAgIGlmIChuZXdB
bHBoYSA9PSAxKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHRodW1iUmVjdCA9IEludFJlY3Qod2tT
Y3JvbGxiYXJQYWludGVyS25vYlJlY3Qoc2Nyb2xsZXJQYWludGVyKSk7Ci0gICAgICAgICAgICBf
YW5pbWF0b3ItPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdCh0aHVtYlJlY3QpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIF9hbmltYXRvci0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJS
ZWN0KEludFJlY3QoKSk7Ci0gICAgfQotCi0gICAgW05TQW5pbWF0aW9uQ29udGV4dCBiZWdpbkdy
b3VwaW5nXTsKLSAgICBbW05TQW5pbWF0aW9uQ29udGV4dCBjdXJyZW50Q29udGV4dF0gc2V0RHVy
YXRpb246ZHVyYXRpb25dOwotICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24uYWRvcHROUyhbW1Nj
cm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjpzY3Jv
bGxlclBhaW50ZXIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ6cGFydAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxBbmlt
YXRvcjpfYW5pbWF0b3IgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVBbHBoYVRvOm5ld0FscGhhIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOwotICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
LmdldCgpIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nXTsK
LSAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzdGFydEFuaW1hdGlvbl07Ci0gICAg
W05TQW5pbWF0aW9uQ29udGV4dCBlbmRHcm91cGluZ107Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJ
bXA6KGlkKXNjcm9sbGVySW1wIGFuaW1hdGVLbm9iQWxwaGFUbzooQ0dGbG9hdCluZXdLbm9iQWxw
aGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0gICAgaWYgKCFfYW5pbWF0
b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxl
clBhaW50ZXIgPSAoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wOwotICAgIGlmICh3
a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVyKSkKLSAgICAgICAg
W3NlbGYgc2V0VXBBbmltYXRpb246X2hvcml6b250YWxLbm9iQW5pbWF0aW9uIHNjcm9sbGVyUGFp
bnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpUaHVtYlBhcnQgYW5pbWF0ZUFscGhh
VG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICBlbHNlCi0gICAgICAgIFtz
ZWxmIHNldFVwQW5pbWF0aW9uOl92ZXJ0aWNhbEtub2JBbmltYXRpb24gc2Nyb2xsZXJQYWludGVy
OnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6OlRodW1iUGFydCBhbmltYXRlQWxwaGFUbzpu
ZXdLbm9iQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1w
OihpZClzY3JvbGxlckltcCBhbmltYXRlVHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxw
aGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0gICAgaWYgKCFfYW5pbWF0
b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxl
clBhaW50ZXIgPSAoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wOwotICAgIGlmICh3
a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVyKSkKLSAgICAgICAg
W3NlbGYgc2V0VXBBbmltYXRpb246X2hvcml6b250YWxUcmFja0FuaW1hdGlvbiBzY3JvbGxlclBh
aW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRl
QWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICBlbHNlCi0gICAg
ICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl92ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uIHNjcm9sbGVy
UGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpCYWNrVHJhY2tQYXJ0IGFuaW1h
dGVBbHBoYVRvOm5ld1RyYWNrQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOwotfQotCi0tICh2b2lk
KXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBvdmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRU
bzooTlNVSW50ZWdlciluZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZQotewotICAgIFVOVVNFRF9QQVJB
TShzY3JvbGxlckltcCk7Ci0gICAgVU5VU0VEX1BBUkFNKG5ld092ZXJsYXlTY3JvbGxlclN0YXRl
KTsKLX0KLQotLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAotewotICAgIF9hbmltYXRv
ciA9IDA7Ci0gICAgW192ZXJ0aWNhbEtub2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JE
ZXN0cm95ZWRdOwotICAgIFtfaG9yaXpvbnRhbEtub2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5p
bWF0b3JEZXN0cm95ZWRdOwotICAgIFtfdmVydGljYWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzY3Jv
bGxBbmltYXRvckRlc3Ryb3llZF07Ci0gICAgW19ob3Jpem9udGFsVHJhY2tBbmltYXRpb24uZ2V0
KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotfQotCi1AZW5kCi0KLSNlbmRpZiAvLyBVU0Uo
V0tfU0NST0xMQkFSX1BBSU5URVIpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc093blB0
cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSog
c2Nyb2xsYWJsZUFyZWEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjKHNjcm9sbGFibGVBcmVhKSk7Ci19Ci0KLXN0YXRpYyBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtTWFjKiBjaHJvbWl1bVNjcm9sbGJhclRoZW1lKCkKLXsKLSAgICBTY3JvbGxiYXJU
aGVtZSogc2Nyb2xsYmFyVGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKLSAgICByZXR1
cm4gIXNjcm9sbGJhclRoZW1lLT5pc01vY2tUaGVtZSgpID8gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYyo+KHNjcm9sbGJhclRoZW1lKSA6IDA7Ci19Ci0KLVNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhKQotICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCi0j
aWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQotICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFp
bnRUaW1lcih0aGlzLCAmU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXJGaXJlZCkKLSNlbmRpZgotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAg
ICAsIG1faW5TY3JvbGxHZXN0dXJlKGZhbHNlKQotICAgICwgbV9tb21lbnR1bVNjcm9sbEluUHJv
Z3Jlc3MoZmFsc2UpCi0gICAgLCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyhmYWxzZSkKLSAgICAs
IG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wKDApCi0gICAgLCBtX3N0YXJ0VGltZSgwKQot
ICAgICwgbV9zbmFwUnViYmVyQmFuZFRpbWVyKHRoaXMsICZTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpCi0jZW5kaWYKLSAgICAsIG1fZHJhd2luZ0lu
dG9MYXllcihmYWxzZSkKLSAgICAsIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChmYWxzZSkK
LSAgICAsIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKGZhbHNlKQotewotICAgIG1fc2Nyb2xs
QW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuYWRvcHROUyhbW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRl
bGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKLSAgICBtX3Njcm9s
bEFuaW1hdGlvbkhlbHBlci5hZG9wdE5TKFtbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbEFu
aW1hdGlvbkhlbHBlciIpIGFsbG9jXSBpbml0V2l0aERlbGVnYXRlOm1fc2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGUuZ2V0KCldKTsKLQotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElB
dmFpbGFibGUoKSkgewotICAgICAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdh
dGUuYWRvcHROUyhbW1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGlu
aXRXaXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOwotICAgICAgICBtX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyID0gd2tNYWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpKTsKLSAgICAgICAgbV9zY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUuYWRvcHROUyhbW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10gaW5p
dFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7Ci0gICAgfQotfQotCi1TY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjp+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYygpCi17Ci0gICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotICAg
ICAgICBbKGlkKW1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6
bmlsXTsKLSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFu
aW1hdG9yRGVzdHJveWVkXTsKLSAgICAgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdh
dGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotICAgIH0KLX0KLQotYm9vbCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBt
dWx0aXBsaWVyKQotewotICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7Ci0K
LSNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCi0gICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9y
OjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKLSNl
bmRpZgotCi0gICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBi
b29sRm9yS2V5OkAiQXBwbGVTY3JvbGxBbmltYXRpb25FbmFibGVkIl0gfHwgIW1fc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gU2Nyb2xsQW5p
bWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIp
OwotCi0gICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UGl4ZWwpCi0gICAgICAgIHJldHVy
biBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwg
bXVsdGlwbGllcik7Ci0KLSAgICBmbG9hdCBjdXJyZW50UG9zID0gb3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IG1fY3VycmVudFBvc1ggOiBtX2N1cnJlbnRQb3NZOwotICAgIGZs
b2F0IG5ld1BvcyA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4oY3VycmVudFBvcyAr
IChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVh
LT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwKTsKLSAgICBpZiAoY3VycmVudFBvcyA9PSBu
ZXdQb3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5TUG9pbnQgbmV3UG9pbnQ7Ci0g
ICAgaWYgKFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfaXNBbmltYXRpbmddKSB7Ci0g
ICAgICAgIE5TUG9pbnQgdGFyZ2V0T3JpZ2luID0gW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdl
dCgpIHRhcmdldE9yaWdpbl07Ci0gICAgICAgIG5ld1BvaW50ID0gb3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IE5TTWFrZVBvaW50KG5ld1BvcywgdGFyZ2V0T3JpZ2luLnkpIDog
TlNNYWtlUG9pbnQodGFyZ2V0T3JpZ2luLngsIG5ld1Bvcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgbmV3UG9pbnQgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gTlNNYWtl
UG9pbnQobmV3UG9zLCBtX2N1cnJlbnRQb3NZKSA6IE5TTWFrZVBvaW50KG1fY3VycmVudFBvc1gs
IG5ld1Bvcyk7Ci0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZFN0YXJ0QW5pbWF0ZWRTY3Jv
bGwoKTsKLSAgICB9Ci0gICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIHNjcm9sbFRv
UG9pbnQ6bmV3UG9pbnRdOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50JiBvZmZzZXQpCi17Ci0gICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9z
dG9wUnVuXTsKLSAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG9mZnNldCk7Ci19Ci0KLWZsb2F0
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNz
YXJ5KGZsb2F0IHBvc2l0aW9uKSBjb25zdAotewotICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+
Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKLSAgICAgICAgcmV0dXJuIHBvc2l0
aW9uOwotCi0gICAgcmV0dXJuIG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbiwgbV9zY3Jv
bGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZp
c2libGVXaWR0aCgpKSwgMCk7Ci19Ci0KLWZsb2F0IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0IHBvc2l0aW9uKSBjb25zdAot
ewotICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UoKSkKLSAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwotCi0gICAgcmV0dXJuIG1heDxmbG9h
dD4obWluPGZsb2F0Pihwb3NpdGlvbiwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCku
aGVpZ2h0KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKLX0KLQot
RmxvYXRQb2ludCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlv
bklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSBjb25zdAotewotICAgIGlm
ICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkK
LSAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwotCi0gICAgZmxvYXQgbmV3WCA9IG1heDxmbG9hdD4o
bWluPGZsb2F0Pihwb3NpdGlvbi54KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgp
LndpZHRoKCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOwotICAgIGZs
b2F0IG5ld1kgPSBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueSgpLCBtX3Njcm9sbGFi
bGVBcmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2li
bGVIZWlnaHQoKSksIDApOwotCi0gICAgcmV0dXJuIEZsb2F0UG9pbnQobmV3WCwgbmV3WSk7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2lu
dChjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKLXsKLSAgICBGbG9hdFBvaW50IGFkanVz
dGVkUG9zaXRpb24gPSBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KG5ld1Bvc2l0aW9u
KTsKLSAKLSAgICBtX2N1cnJlbnRQb3NYID0gYWRqdXN0ZWRQb3NpdGlvbi54KCk7Ci0gICAgbV9j
dXJyZW50UG9zWSA9IGFkanVzdGVkUG9zaXRpb24ueSgpOwotICAgIG5vdGlmeVBvc2l0aW9uQ2hh
bmdlZCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNj
cm9sbEJ5RGVsdGFYKGZsb2F0IGRlbHRhWCkKLXsKLSAgICBmbG9hdCBuZXdQb3NYID0gYWRqdXN0
U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3NhcnkobV9jdXJyZW50UG9zWCArIGRlbHRhWCk7Ci0gICAg
Ci0gICAgaWYgKG5ld1Bvc1ggPT0gbV9jdXJyZW50UG9zWCkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIG1fY3VycmVudFBvc1ggPSBuZXdQb3NYOwotICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdl
ZCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9s
bEJ5RGVsdGFZKGZsb2F0IGRlbHRhWSkKLXsKLSAgICBmbG9hdCBuZXdQb3NZID0gYWRqdXN0U2Ny
b2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkobV9jdXJyZW50UG9zWSArIGRlbHRhWSk7Ci0gICAgCi0g
ICAgaWYgKG5ld1Bvc1kgPT0gbV9jdXJyZW50UG9zWSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIG1fY3VycmVudFBvc1kgPSBuZXdQb3NZOwotICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgp
OwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbFRv
UG9pbnRGb3JTY3JvbGxBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pCi17
Ci0gICAgQVNTRVJUKG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyKTsKLSAgICBDR0Zsb2F0IHByb2dy
ZXNzID0gW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9wcm9ncmVzc107Ci0gICAgCi0g
ICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChuZXdQb3NpdGlvbik7Ci0KLSAgICBpZiAocHJvZ3Jl
c3MgPj0gMS4wKQotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5kaWRDb21wbGV0ZUFuaW1hdGVk
U2Nyb2xsKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bm90aWZ5UG9z
aXRpb25DaGFuZ2VkKCkKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxl
KCkpCi0gICAgICAgIHdrQ29udGVudEFyZWFTY3JvbGxlZChtX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2Vk
KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFXaWxs
UGFpbnQoKSBjb25zdAotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUo
KSkKLSAgICAgICAgd2tDb250ZW50QXJlYVdpbGxQYWludChtX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3Vz
ZUVudGVyZWRDb250ZW50QXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3Zlcmxh
eUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a01vdXNlRW50ZXJlZENvbnRlbnRBcmVhKG1fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdAotewotICAgIGlmIChp
c1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tNb3VzZUV4aXRlZENv
bnRlbnRBcmVhKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29u
c3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAg
IHdrTW91c2VNb3ZlZEluQ29udGVudEFyZWEobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5n
ZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFN0YXJ0TGl2
ZVJlc2l6ZSgpCi17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQot
ICAgICAgICB3a1dpbGxTdGFydExpdmVSZXNpemUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudHNS
ZXNpemVkKCkgY29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxl
KCkpCi0gICAgICAgIHdrQ29udGVudEFyZWFSZXNpemVkKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxF
bmRMaXZlUmVzaXplKCkKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxl
KCkpCi0gICAgICAgIHdrV2lsbEVuZExpdmVSZXNpemUobV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlci5nZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVu
dEFyZWFEaWRTaG93KCkgY29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpCi0gICAgICAgIHdrQ29udGVudEFyZWFEaWRTaG93KG1fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmNvbnRlbnRBcmVhRGlkSGlkZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3Zlcmxh
eUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRBcmVhRGlkSGlkZShtX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAotewotICAgIGlmIChpc1Njcm9s
bGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tEaWRCZWdpblNjcm9sbEdlc3R1
cmUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0RpZEVuZFNj
cm9sbEdlc3R1cmUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0KLXZv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFp
bGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBpZiAoU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYyogdGhlbWUgPSBjaHJvbWl1bVNjcm9sbGJhclRoZW1lKCkpIHsKLSAgICAg
ICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNjcm9s
bGJhcihzY3JvbGxiYXIpOwotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShw
YWludGVyLCBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSk7Ci0gICAgICAgIHdrU2V0
UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIu
Z2V0KCksIHBhaW50ZXIsIGZhbHNlKTsKLSAgICAgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmlu
TGl2ZVJlc2l6ZSgpKQotICAgICAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhh
KHBhaW50ZXIsIDEpOwotICAgIH0KLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
Ojp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0g
ICAgaWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21pdW1T
Y3JvbGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVy
ID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgd2tTY3Jv
bGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbmlsKTsKLSAgICAgICAgd2tTZXRQYWlu
dGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQo
KSwgbmlsLCBmYWxzZSk7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0g
ICAgaWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21pdW1T
Y3JvbGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVy
ID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgd2tTY3Jv
bGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUuZ2V0KCkpOwotICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBwYWludGVyLCB0cnVlKTsKLSAgICAgICAg
aWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQotICAgICAgICAgICAgd2tTZXRT
Y3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXIsIDEpOwotICAgIH0KLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihT
Y3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2
YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYyogdGhlbWUgPSBjaHJvbWl1bVNjcm9sbGJhclRoZW1lKCkpIHsKLSAgICAgICAgV0tT
Y3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNjcm9sbGJhcihz
Y3JvbGxiYXIpOwotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShwYWludGVy
LCBuaWwpOwotICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBuaWwsIHRydWUpOwotICAgIH0KLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjYW5jZWxBbmltYXRpb25zKCkKLXsKLSAgICBt
X2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBmYWxzZTsKLQotICAgIGlmIChpc1Njcm9sbGJh
ck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAgICAgICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1l
cklzQWN0aXZlKCkpCi0gICAgICAgICAgICBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotICAg
ICAgICBbbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgY2FuY2VsQW5pbWF0aW9uc107
Ci0gICAgfQotfQotCi0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotCi1zdGF0aWMgY29uc3Qg
ZmxvYXQgc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCA9IDAuMTBmOwotc3RhdGljIGNvbnN0
IGZsb2F0IHJ1YmJlcmJhbmRTdGlmZm5lc3MgPSAyMDsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJi
ZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbyA9IDE7Ci1zdGF0aWMgY29uc3QgZmxvYXQg
cnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOwotc3RhdGlj
IGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRBbXBsaXR1ZGUgPSAwLjMxZjsKLXN0YXRpYyBjb25zdCBm
bG9hdCBydWJiZXJiYW5kUGVyaW9kID0gMS42ZjsKLQotc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0
YUZvclRpbWVEZWx0YShmbG9hdCBpbml0aWFsUG9zaXRpb24sIGZsb2F0IGluaXRpYWxWZWxvY2l0
eSwgZmxvYXQgZWxhcHNlZFRpbWUpCi17Ci0gICAgZmxvYXQgYW1wbGl0dWRlID0gcnViYmVyYmFu
ZEFtcGxpdHVkZTsKLSAgICBmbG9hdCBwZXJpb2QgPSBydWJiZXJiYW5kUGVyaW9kOwotICAgIGZs
b2F0IGNyaXRpY2FsRGFtcGVuaW5nRmFjdG9yID0gZXhwZigoLWVsYXBzZWRUaW1lICogcnViYmVy
YmFuZFN0aWZmbmVzcykgLyBwZXJpb2QpOwotICAgICAgICAgICAgIAotICAgIHJldHVybiAoaW5p
dGlhbFBvc2l0aW9uICsgKC1pbml0aWFsVmVsb2NpdHkgKiBlbGFwc2VkVGltZSAqIGFtcGxpdHVk
ZSkpICogY3JpdGljYWxEYW1wZW5pbmdGYWN0b3I7Ci19Ci0KLXN0YXRpYyBmbG9hdCBlbGFzdGlj
RGVsdGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEpCi17Ci0gICAgZmxvYXQgc3RpZmZuZXNz
ID0gc3RkOjptYXgocnViYmVyYmFuZFN0aWZmbmVzcywgMS4wZik7Ci0gICAgcmV0dXJuIGRlbHRh
IC8gc3RpZmZuZXNzOwotfQotCi1zdGF0aWMgZmxvYXQgcmVib3VuZERlbHRhRm9yRWxhc3RpY0Rl
bHRhKGZsb2F0IGRlbHRhKQotewotICAgIHJldHVybiBkZWx0YSAqIHJ1YmJlcmJhbmRTdGlmZm5l
c3M7Ci19Ci0KLXN0YXRpYyBmbG9hdCBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKQotewotICAgIHN0
YXRpYyBmbG9hdCBtdWx0aXBsaWVyID0gLTE7Ci0gICAgaWYgKG11bHRpcGxpZXIgPCAwKSB7Ci0g
ICAgICAgIG11bHRpcGxpZXIgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSBmbG9hdEZvcktleTpAIk5TU2Nyb2xsV2hlZWxNdWx0aXBsaWVyIl07Ci0gICAgICAgIGlmICht
dWx0aXBsaWVyIDw9IDApCi0gICAgICAgICAgICBtdWx0aXBsaWVyID0gMTsKLSAgICB9Ci0gICAg
cmV0dXJuIG11bHRpcGxpZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Njcm9sbGluZ0xl
ZnRBbmRTaG91bGROb3RSdWJiZXJCYW5kKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxF
dmVudCwgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQotewotICAgIHJldHVybiB3aGVl
bEV2ZW50LmRlbHRhWCgpID4gMCAmJiAhc2Nyb2xsYWJsZUFyZWEtPnNob3VsZFJ1YmJlckJhbmRJ
bkRpcmVjdGlvbihTY3JvbGxMZWZ0KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzU2Nyb2xs
aW5nUmlnaHRBbmRTaG91bGROb3RSdWJiZXJCYW5kKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYg
d2hlZWxFdmVudCwgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQotewotICAgIHJldHVy
biB3aGVlbEV2ZW50LmRlbHRhWCgpIDwgMCAmJiAhc2Nyb2xsYWJsZUFyZWEtPnNob3VsZFJ1YmJl
ckJhbmRJbkRpcmVjdGlvbihTY3JvbGxSaWdodCk7Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCi17Ci0gICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKLQot
ICAgIGlmICghd2hlZWxFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkpCi0gICAgICAg
IHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKLQot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNvbWV3aGF0IHJvdW5kYWJvdXQgaGFjayB0byBhbGxvdyBm
b3J3YXJkaW5nIHdoZWVsIGV2ZW50cwotICAgIC8vIHVwIHRvIHRoZSBwYXJlbnQgc2Nyb2xsYWJs
ZSBhcmVhLiBJdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdAotICAgIC8vIHRoZSBi
YXNlIGNsYXNzIGltcGxlbWVuYXRhdGlvbiBvZiBoYW5kbGVXaGVlbEV2ZW50IHdpbGwgbm90IGFj
Y2VwdCB0aGUKLSAgICAvLyB3aGVlbCBldmVudCBpZiB0aGVyZSBpcyBub3doZXJlIHRvIHNjcm9s
bC4KLSAgICBpZiAoZmFic2Yod2hlZWxFdmVudC5kZWx0YVkoKSkgPj0gZmFic2Yod2hlZWxFdmVu
dC5kZWx0YVgoKSkpIHsKLSAgICAgICAgaWYgKCFhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSkK
LSAgICAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVl
bEV2ZW50KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWFsbG93c0hvcml6b250YWxTdHJl
dGNoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVs
RXZlbnQod2hlZWxFdmVudCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBh
IHNjcm9sbGJhciwgd2UgYWdncmVnYXRlIHRoZSB3aGVlbCBldmVudHMgdG8gZ2V0IGFuCi0gICAg
ICAgICAgICAvLyBvdmVyYWxsIHRyZW5kIG9mIHRoZSBzY3JvbGwuIElmIHRoZSBkaXJlY3Rpb24g
b2YgdGhlIHNjcm9sbCBpcyBldmVyCi0gICAgICAgICAgICAvLyBpbiB0aGUgb3Bwb3NpdGUgZGly
ZWN0aW9uIG9mIHRoZSBwaW4gbG9jYXRpb24sIHRoZW4gd2Ugc3dpdGNoIHRoZQotICAgICAgICAg
ICAgLy8gYm9vbGVhbiwgYW5kIHJ1YmJlciBiYW5kLiBUaGF0IGlzLCBpZiB3ZSB3ZXJlIHBpbm5l
ZCB0byB0aGUgbGVmdCwKLSAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmRlZCB1cCBzY3JvbGxpbmcg
dG8gdGhlIHJpZ2h0LCB3ZSBydWJiZXIgYmFuZC4KLSAgICAgICAgICAgIG1fY3VtdWxhdGl2ZUhv
cml6b250YWxTY3JvbGwgKz0gd2hlZWxFdmVudC5kZWx0YVgoKTsKLSAgICAgICAgICAgIGlmICht
X3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25MZWZ0ICYmIG1fY3VtdWxhdGl2ZUhvcml6b250YWxT
Y3JvbGwgPCAwKQotICAgICAgICAgICAgICAgIG1fZGlkQ3VtdWxhdGl2ZUhvcml6b250YWxTY3Jv
bGxFdmVyU3dpdGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9mUGluID0gdHJ1ZTsKLSAgICAgICAgICAg
IGlmIChtX3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25SaWdodCAmJiBtX2N1bXVsYXRpdmVIb3Jp
em9udGFsU2Nyb2xsID4gMCkKLSAgICAgICAgICAgICAgICBtX2RpZEN1bXVsYXRpdmVIb3Jpem9u
dGFsU2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25PZlBpbiA9IHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBBZnRlciBhIGdlc3R1cmUgYmVnaW5zLCB3ZSBnbyB0aHJvdWdo
OgotICAgICAgICAvLyAxKyBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUKLSAgICAgICAgLy8g
MCsgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkCi0gICAgICAgIC8vIDEgUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2VFbmRlZCBpZiB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lIGNoYW5nZWQgZXZl
bnQKLSAgICAgICAgaWYgKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlTm9uZSAmJiAhbV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbEV2ZXJT
d2l0Y2hUb09wcG9zaXRlRGlyZWN0aW9uT2ZQaW4pIHsKLSAgICAgICAgICAgIGlmICgoaXNTY3Jv
bGxpbmdMZWZ0QW5kU2hvdWxkTm90UnViYmVyQmFuZCh3aGVlbEV2ZW50LCBtX3Njcm9sbGFibGVB
cmVhKSAmJgotICAgICAgICAgICAgICAgIG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPbkxlZnQg
JiYKLSAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250YWxTY3JvbGxl
clBpbm5lZFRvTWluaW11bVBvc2l0aW9uKCkpIHx8Ci0gICAgICAgICAgICAgICAgKGlzU2Nyb2xs
aW5nUmlnaHRBbmRTaG91bGROb3RSdWJiZXJCYW5kKHdoZWVsRXZlbnQsIG1fc2Nyb2xsYWJsZUFy
ZWEpICYmCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uUmlnaHQg
JiYKLSAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250YWxTY3JvbGxl
clBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNj
cm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc01vbWVudHVtU2Nyb2xsRXZlbnQgPSAo
d2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgIT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25l
KTsKLSAgICBpZiAobV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgJiYgKGlzTW9tZW50dW1TY3JvbGxF
dmVudCB8fCBtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkpIHsKLSAgICAgICAgaWYg
KHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5k
ZWQpIHsKLSAgICAgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgc21vb3RoU2Nyb2xsV2l0aEV2ZW50KHdoZWVsRXZlbnQpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmhhbmRsZUdlc3R1
cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQotewotICAg
IGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxC
ZWdpbikKLSAgICAgICAgYmVnaW5TY3JvbGxHZXN0dXJlKCk7Ci0gICAgZWxzZSBpZiAoZ2VzdHVy
ZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kKQotICAgICAg
ICBlbmRTY3JvbGxHZXN0dXJlKCk7Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6cGlubmVkSW5EaXJlY3Rpb24oZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpCi17Ci0gICAg
RmxvYXRTaXplIGxpbWl0RGVsdGE7Ci0gICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVs
dGFYKSkgewotICAgICAgICBpZiAoZGVsdGFZIDwgMCkgewotICAgICAgICAgICAgLy8gV2UgYXJl
IHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhl
IHRvcAotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+
dmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpICsgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmln
aW4oKS55KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWlu
ZyB0byBzY3JvbGwgZG93bi4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgYm90
dG9tCi0gICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVhLT5j
b250ZW50c1NpemUoKS5oZWlnaHQoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVu
dFJlY3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS55KCkpKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZGVsdGFYICE9IDApIHsKLSAgICAgICAgaWYgKGRl
bHRhWCA8IDApIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGxlZnQu
ICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGxlZnQKLSAgICAgICAgICAgIGxp
bWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCku
eCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueCgpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHJpZ2h0LiAgTWFr
ZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSByaWdodAotICAgICAgICAgICAgbGltaXRE
ZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0g
KG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLm1heFgoKSArIG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIGlmICgoZGVsdGFYICE9IDAgfHwgZGVsdGFZICE9IDApICYmIChsaW1pdERlbHRhLndpZHRo
KCkgPCAxICYmIGxpbWl0RGVsdGEuaGVpZ2h0KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3Njcm9s
bGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKSkgewotICAgIGNhc2UgU2Nyb2xs
RWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1f
c2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICAgICAgU2Nyb2xsYmFy
KiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAg
ICAgICByZXR1cm4gKCgodlNjcm9sbGVyICYmIHZTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIWhT
Y3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFibGVkKCkpKSk7Ci0gICAgfQotICAgIGNhc2UgU2Ny
b2xsRWxhc3RpY2l0eU5vbmU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIFNjcm9s
bEVsYXN0aWNpdHlBbGxvd2VkOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25zdAot
ewotICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHkoKSkgewotICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAgICAgICBT
Y3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxi
YXIoKTsKLSAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52
ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgICAgICByZXR1cm4gKCgoaFNjcm9sbGVyICYmIGhTY3Jv
bGxlci0+ZW5hYmxlZCgpKSB8fCAoIXZTY3JvbGxlciB8fCAhdlNjcm9sbGVyLT5lbmFibGVkKCkp
KSk7Ci0gICAgfQotICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eU5vbmU6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBbGxvd2VkOgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c21vb3RoU2Nyb2xs
V2l0aEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBt
X2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOwotCi0gICAgZmxvYXQgZGVsdGFYID0g
bV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCk7Ci0gICAgZmxvYXQgZGVsdGFZID0gbV9vdmVy
Zmxvd1Njcm9sbERlbHRhLmhlaWdodCgpOwotCi0gICAgLy8gUmVzZXQgb3ZlcmZsb3cgdmFsdWVz
IGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byByZW1vdmUgZGVsdGEgYXQgdmFyaW91cyBwb2ludHMg
YW5kIHB1dCBpdCBpbnRvIG92ZXJmbG93LgotICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZs
b2F0U2l6ZSgpOwotCi0gICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVu
dC5kZWx0YVgoKTsKLSAgICBmbG9hdCBldmVudENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50
LmRlbHRhWSgpOwotCi0gICAgZGVsdGFYICs9IGV2ZW50Q29hbGVzY2VkRGVsdGFYOwotICAgIGRl
bHRhWSArPSBldmVudENvYWxlc2NlZERlbHRhWTsKLQotICAgIC8vIFNsaWdodGx5IHByZWZlciBz
Y3JvbGxpbmcgdmVydGljYWxseSBieSBhcHBseWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQotICAg
IGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpCi0gICAgICAgIGRlbHRhWCA9IDA7
Ci0gICAgZWxzZQotICAgICAgICBkZWx0YVkgPSAwOwotCi0gICAgYm9vbCBpc1ZlcnRpY2FsbHlT
dHJldGNoZWQgPSBmYWxzZTsKLSAgICBib29sIGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0gZmFs
c2U7Ci0gICAgYm9vbCBzaG91bGRTdHJldGNoID0gZmFsc2U7Ci0gICAgCi0gICAgSW50U2l6ZSBz
dHJldGNoQW1vdW50ID0gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKLQotICAg
IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0gc3RyZXRjaEFtb3VudC53aWR0aCgpOwotICAgIGlz
VmVydGljYWxseVN0cmV0Y2hlZCA9IHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCk7Ci0KLSAgICBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSA9IHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpOwot
Ci0gICAgLy8gSWYgd2UgYXJlIHN0YXJ0aW5nIG1vbWVudHVtIHNjcm9sbGluZyB0aGVuIGRvIHNv
bWUgc2V0dXAuCi0gICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAocGhhc2Ug
PT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbiB8fCBwaGFzZSA9PSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZUNoYW5nZWQpKQotICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9
IHRydWU7Ci0KLSAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSB3aGVlbEV2ZW50LnRpbWVz
dGFtcCgpIC0gbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7Ci0gICAgaWYgKG1faW5TY3Jv
bGxHZXN0dXJlIHx8IG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKSB7Ci0gICAgICAgIGlmICht
X2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVsdGEgPiAwICYmIHRpbWVEZWx0
YSA8IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpIHsKLSAgICAgICAgICAgIG1fbW9tZW50
dW1WZWxvY2l0eS5zZXRXaWR0aChldmVudENvYWxlc2NlZERlbHRhWCAvIChmbG9hdCl0aW1lRGVs
dGEpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNldEhlaWdodChldmVudENvYWxl
c2NlZERlbHRhWSAvIChmbG9hdCl0aW1lRGVsdGEpOwotICAgICAgICAgICAgbV9sYXN0TW9tZW50
dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2
ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRT
aXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNWZXJ0aWNhbGx5U3RyZXRjaGVkKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkICYmIHBpbm5lZEluRGly
ZWN0aW9uKGRlbHRhWCwgMCkpIHsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
U3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0aWNhbC4KLSAgICAgICAgICAgICAgICBpZiAoZGVs
dGFZICE9IDAgJiYgKGZhYnNmKGRlbHRhWCAvIGRlbHRhWSkgPCBydWJiZXJiYW5kRGlyZWN0aW9u
TG9ja1N0cmV0Y2hSYXRpbykpCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVsdGFYKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVx
dWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxv
d1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVs
dGFYKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRo
KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmIChpc0hvcml6b250YWxseVN0cmV0Y2hlZCkgewotICAgICAgICAg
ICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSBob3Jpem9udGFsLgotICAgICAgICAgICAgaWYg
KHBpbm5lZEluRGlyZWN0aW9uKDAsIGRlbHRhWSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGVs
dGFYICE9IDAgJiYgKGZhYnNmKGRlbHRhWSAvIGRlbHRhWCkgPCBydWJiZXJiYW5kRGlyZWN0aW9u
TG9ja1N0cmV0Y2hSYXRpbykpCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVsdGFZKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVx
dWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxv
d1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBk
ZWx0YVkpOwotICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVp
Z2h0KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBOb3Qgc3RyZXRjaGluZyBhdCBh
bGwgeWV0LgotICAgICAgICAgICAgaWYgKHBpbm5lZEluRGlyZWN0aW9uKGRlbHRhWCwgZGVsdGFZ
KSkgewotICAgICAgICAgICAgICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWlu
aW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndp
ZHRoKCkgKyBkZWx0YVgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX292ZXJm
bG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBk
ZWx0YVgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzaG91bGRTdHJldGNo
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChkZWx0
YVggIT0gMCB8fCBkZWx0YVkgIT0gMCkgewotICAgICAgICBpZiAoIShzaG91bGRTdHJldGNoIHx8
IGlzVmVydGljYWxseVN0cmV0Y2hlZCB8fCBpc0hvcml6b250YWxseVN0cmV0Y2hlZCkpIHsKLSAg
ICAgICAgICAgIGlmIChkZWx0YVkgIT0gMCkgewotICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBz
Y3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLSAgICAgICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxC
eURlbHRhWShkZWx0YVkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRlbHRhWCAh
PSAwKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigp
OwotICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGRlbHRhWCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWFsbG93c0hvcml6
b250YWxTdHJldGNoaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBkZWx0YVggPSAwOwotICAgICAg
ICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoKGRlbHRhWCAhPSAwKSAmJiAhaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgJiYgIXBpbm5lZElu
RGlyZWN0aW9uKGRlbHRhWCwgMCkpIHsKLSAgICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xs
V2hlZWxNdWx0aXBsaWVyKCk7Ci0KLSAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5z
ZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZGVsdGFYKTsKLSAgICAgICAgICAgICAgICBtX3Nj
cm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsK
LQotICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkpIHsKLSAgICAg
ICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVs
dGFZID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWSAhPSAwKSAmJiAhaXNWZXJ0
aWNhbGx5U3RyZXRjaGVkICYmICFwaW5uZWRJbkRpcmVjdGlvbigwLCBkZWx0YVkpKSB7Ci0gICAg
ICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwotCi0gICAgICAg
ICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UoZmFsc2UpOwotICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGRl
bHRhWSk7Ci0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICBkZWx0YVkgPSAw
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBJbnRTaXplIHN0cmV0
Y2hBbW91bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwotICAgICAgICAK
LSAgICAgICAgICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgewotICAgICAgICAg
ICAgICAgIGlmICgocGlubmVkSW5EaXJlY3Rpb24oZXZlbnRDb2FsZXNjZWREZWx0YVgsIGV2ZW50
Q29hbGVzY2VkRGVsdGFZKSB8fCAoZmFic2YoZXZlbnRDb2FsZXNjZWREZWx0YVgpICsgZmFic2Yo
ZXZlbnRDb2FsZXNjZWREZWx0YVkpIDw9IDApKSAmJiBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVz
dGFtcCkgewotICAgICAgICAgICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5z
ZXRXaWR0aChtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAg
ICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChtX3N0cmV0Y2hTY3JvbGxGb3JjZS5o
ZWlnaHQoKSArIGRlbHRhWSk7Ci0KLSAgICAgICAgICAgIEZsb2F0U2l6ZSBkYW1wZWREZWx0YShj
ZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lk
dGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xs
Rm9yY2UuaGVpZ2h0KCkpKSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IG9yaWdPcmlnaW4gPSAo
bV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIHN0cmV0Y2hBbW91bnQ7Ci0gICAgICAgICAg
ICBGbG9hdFBvaW50IG5ld09yaWdpbiA9IG9yaWdPcmlnaW4gKyBkYW1wZWREZWx0YTsKLQotICAg
ICAgICAgICAgaWYgKG9yaWdPcmlnaW4gIT0gbmV3T3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFs
c2UpOwotICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2luKTsK
LSAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZSh0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiBwaGFzZSA9PSBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZUVuZGVkKSB7Ci0gICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNz
ID0gZmFsc2U7Ci0gICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7Ci0gICAg
ICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YmVnaW5TY3JvbGxHZXN0dXJlKCkKLXsKLSAgICBk
aWRCZWdpblNjcm9sbEdlc3R1cmUoKTsKLQotICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9h
ZCA9IHRydWU7Ci0gICAgbV9pblNjcm9sbEdlc3R1cmUgPSB0cnVlOwotICAgIG1fbW9tZW50dW1T
Y3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0gICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBm
YWxzZTsKLSAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7Ci0gICAgbV9tb21l
bnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAgbV9zY3JvbGxlckluaXRpYWxseVBpbm5l
ZE9uTGVmdCA9IG1fc2Nyb2xsYWJsZUFyZWEtPmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9N
aW5pbXVtUG9zaXRpb24oKTsKLSAgICBtX3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25SaWdodCA9
IG1fc2Nyb2xsYWJsZUFyZWEtPmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NYXhpbXVtUG9z
aXRpb24oKTsKLSAgICBtX2N1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsID0gMDsKLSAgICBtX2Rp
ZEN1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25P
ZlBpbiA9IGZhbHNlOwotICAgIAotICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fc2Nyb2xs
YWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7Ci0gICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0
V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQud2lkdGgoKSkp
OwotICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFz
dGljRGVsdGEoc3RyZXRjaEFtb3VudC5oZWlnaHQoKSkpOwotCi0gICAgbV9vdmVyZmxvd1Njcm9s
bERlbHRhID0gRmxvYXRTaXplKCk7Ci0gICAgCi0gICAgaWYgKG1fc25hcFJ1YmJlckJhbmRUaW1l
ci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOwotfQot
Ci12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmVuZFNjcm9sbEdlc3R1cmUoKQotewot
ICAgIGRpZEVuZFNjcm9sbEdlc3R1cmUoKTsKLQotICAgIHNuYXBSdWJiZXJCYW5kKCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1YmJlckJhbmQoKQotewotICAg
IENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIGlmICht
X2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2Np
dHlaZXJvaW5nVGltZW91dCkKLSAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXpl
KCk7Ci0KLSAgICBtX2luU2Nyb2xsR2VzdHVyZSA9IGZhbHNlOwotCi0gICAgaWYgKG1fc25hcFJ1
YmJlckJhbmRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXJ0
VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKLSAgICBtX3N0
YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQo
KTsKLSAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotCi0gICAgbV9zbmFwUnViYmVy
QmFuZFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEuMC82MC4wKTsKLX0KLQotc3RhdGljIGlubGluZSBm
bG9hdCByb3VuZFRvd2FyZFplcm8oZmxvYXQgbnVtKQotewotICAgIHJldHVybiBudW0gPiAwID8g
Y2VpbGYobnVtIC0gMC41ZikgOiBmbG9vcmYobnVtICsgMC41Zik7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgZmxvYXQgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhmbG9hdCBudW0pCi17Ci0gICAg
ZmxvYXQgcm91bmRlZE51bSA9IHJvdW5kZihudW0pOwotICAgIGlmIChmYWJzKG51bSAtIHJvdW5k
ZWROdW0pIDwgMC4xMjUpCi0gICAgICAgIG51bSA9IHJvdW5kZWROdW07Ci0KLSAgICByZXR1cm4g
cm91bmRUb3dhcmRaZXJvKG51bSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM+KikKLXsKLSAgICBpZiAoIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzIHx8IG1faWdub3Jl
TW9tZW50dW1TY3JvbGxzKSB7Ci0gICAgICAgIENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IFtO
U0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXSAtIG1fc3RhcnRUaW1lOwotCi0g
ICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBGbG9hdFNpemUoKSkgewotICAgICAgICAgICAg
bV9zdGFydFN0cmV0Y2ggPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwotICAg
ICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7ICAgIAotICAgICAg
ICAgICAgICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdG9wKCk7Ci0gICAgICAgICAgICAgICAg
bV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKLSAgICAgICAgICAgICAgICBtX3N0
YXJ0VGltZSA9IDA7Ci0gICAgICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUo
KTsKLSAgICAgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgICAg
ICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKLQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
ZGlkU3RhcnRSdWJiZXJCYW5kKHJvdW5kZWRJbnRTaXplKG1fc3RhcnRTdHJldGNoKSk7Ci0KLSAg
ICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVu
dFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkpIC0g
bV9zdGFydFN0cmV0Y2g7Ci0gICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IG1fbW9tZW50dW1W
ZWxvY2l0eTsKLQotICAgICAgICAgICAgLy8gSnVzdCBsaWtlIG5vcm1hbCBzY3JvbGxpbmcsIHBy
ZWZlciB2ZXJ0aWNhbCBydWJiZXJiYW5kaW5nCi0gICAgICAgICAgICBpZiAoZmFic2YobV9vcmln
VmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LndpZHRoKCkpKQotICAg
ICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCBob3Jpem9udGFsbHkgaWYgaXQncyBub3Qg
cG9zc2libGUgdG8gc2Nyb2xsIGhvcml6b250YWxseQotICAgICAgICAgICAgU2Nyb2xsYmFyKiBo
U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAg
ICAgICAgICBpZiAoIWhTY3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFibGVkKCkpCi0gICAgICAg
ICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0V2lkdGgoMCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5kIHZlcnRpY2FsbHkgaWYgaXQncyBub3QgcG9zc2li
bGUgdG8gc2Nyb2xsIGhvcml6b250YWxseQotICAgICAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xs
ZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgICAgICAgICAg
aWYgKCF2U2Nyb2xsZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKQotICAgICAgICAgICAgICAg
IG1fb3JpZ1ZlbG9jaXR5LnNldEhlaWdodCgwKTsKLSAgICAgICAgfQotCi0gICAgICAgIEZsb2F0
UG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JU
aW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRoKCks
IChmbG9hdCl0aW1lRGVsdGEpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZFRvRGV2
aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRj
aC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCAoZmxvYXQpdGltZURlbHRhKSkp
OwotCi0gICAgICAgIGlmIChmYWJzKGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnkoKSkg
Pj0gMSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4gPSBtX29yaWdPcmlnaW4g
KyBkZWx0YTsKLQotICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xs
VG9Qb2ludChuZXdPcmlnaW4pOwotICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29u
c3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7Ci0KLSAgICAgICAgICAgIEZsb2F0
U2l6ZSBuZXdTdHJldGNoID0gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVi
b3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2gud2lkdGgoKSkpOwotICAgICAgICAg
ICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNE
ZWx0YShuZXdTdHJldGNoLmhlaWdodCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG1fb3JpZ09yaWdpbik7Ci0KLSAgICAgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPmRpZENvbXBsZXRlUnViYmVyQmFuZChyb3VuZGVkSW50U2l6ZShtX3N0
YXJ0U3RyZXRjaCkpOwotCi0gICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgp
OwotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwotICAgICAgICAgICAgbV9zdGFy
dFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0
UG9pbnQoKTsKLSAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUlu
dGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKLSAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9h
dFNpemUoKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpzZXRJc0FjdGl2ZSgpCi17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWls
YWJsZSgpKSB7Ci0gICAgICAgIGlmIChuZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUoKSkKLSAgICAg
ICAgICAgIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKLSAgICB9Ci19Ci0KLSNpZiBVU0UoV0tfU0NS
T0xMQkFSX1BBSU5URVIpCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnVwZGF0ZVNj
cm9sbGVyU3R5bGUoKQotewotICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBh
Z2UoKSkgewotICAgICAgICBzZXROZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUodHJ1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKiBtYWNU
aGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhlbWUoKTsKLSAgICBpZiAoIW1hY1RoZW1lKSB7Ci0g
ICAgICAgIHNldE5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZShmYWxzZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpbnQgbmV3U3R5bGUgPSB3a1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyU3R5bGUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci0KLSAgICBpZiAo
U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsK
LQotICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgb2xkVmVydGljYWxQYWludGVyID0gd2tW
ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkpOwotICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgbmV3VmVydGlj
YWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKG9sZFZlcnRpY2Fs
UGFpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHlsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7Ci0gICAgICAgIG1hY1RoZW1lLT5zZXRO
ZXdQYWludGVyRm9yU2Nyb2xsYmFyKHZlcnRpY2FsU2Nyb2xsYmFyLCBuZXdWZXJ0aWNhbFBhaW50
ZXIpOwotICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBuZXdWZXJ0aWNhbFBhaW50ZXIsIGZhbHNlKTsKLQot
ICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQg
dGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZSAKLSAgICAgICAgLy8gZnJhbWVSZWN0
IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3Vy
ZSB0aGUgcG9zaXRpb24KLSAgICAgICAgLy8gYW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRl
ZC4KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3Mo
dmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwotICAgICAgICB2ZXJ0aWNhbFNjcm9s
bGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsK
LSAgICB9Ci0KLSAgICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xs
YWJsZUFyZWEoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIGhvcml6b250YWxT
Y3JvbGxiYXItPmludmFsaWRhdGUoKTsKLQotICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYg
b2xkSG9yaXpvbnRhbFBhaW50ZXIgPSB3a0hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRm9yQ29u
dHJvbGxlcihtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLSAgICAgICAgV0tT
Y3JvbGxiYXJQYWludGVyUmVmIG5ld0hvcml6b250YWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFy
UmVwbGFjZW1lbnRQYWludGVyKG9sZEhvcml6b250YWxQYWludGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3U3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
b3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgIG1hY1RoZW1lLT5zZXROZXdQYWludGVyRm9yU2Nyb2xs
YmFyKGhvcml6b250YWxTY3JvbGxiYXIsIG5ld0hvcml6b250YWxQYWludGVyKTsKLSAgICAgICAg
d2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlci5nZXQoKSwgbmV3SG9yaXpvbnRhbFBhaW50ZXIsIHRydWUpOwotCi0gICAgICAgIC8vIFRo
ZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywg
c28gd2UgbXVzdCByZS1zZXQgdGhlIAotICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0
aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlv
bgotICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgotICAgICAgICBp
bnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhob3Jpem9udGFsU2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKLSAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0
RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKLSAgICB9Ci0K
LSAgICAvLyBJZiBuZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUoKSBpcyB0cnVlLCB0aGVuIHRoZSBw
YWdlIGlzIHJlc3RvcmluZyBmcm9tIHRoZSBwYWdlIGNhY2hlLCBhbmQgCi0gICAgLy8gYSByZWxh
eW91dCB3aWxsIGhhcHBlbiBvbiBpdHMgb3duLiBPdGhlcndpc2UsIHdlIG11c3QgaW5pdGlhdGUg
YSByZS1sYXlvdXQgb3Vyc2VsdmVzLgotICAgIHNjcm9sbGFibGVBcmVhKCktPnNjcm9sbGJhclN0
eWxlQ2hhbmdlZChuZXdTdHlsZSwgIW5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSgpKTsKLQotICAg
IHNldE5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZShmYWxzZSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCkKLXsKLSAgICBtX2lu
aXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0YXJ0T25lU2hvdCgwLjEpOwotfQotCi1ib29sIFNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuaXNBY3RpdmUo
KTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzdG9wU2Nyb2xsYmFyUGFp
bnRUaW1lcigpCi17Ci0gICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdG9wKCk7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50
VGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiopCi17Ci0gICAgd2tT
Y3JvbGxiYXJQYWludGVyRm9yY2VGbGFzaFNjcm9sbGVycyhtX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpKTsKLX0KLSNlbmRpZgotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3JvbGxlclRo
dW1iKQotewotICAgIEludFJlY3QgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gc2Nyb2xsZXJUaHVt
YjsKLSAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFy
ZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJlY3RJblZpZXdDb29yZGluYXRlcyA9
IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0VG9Db250YWluaW5nVmlldyhzY3JvbGxlclRodW1i
KTsKLQotICAgIGlmIChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPT0gbV92aXNpYmxlU2Nyb2xsZXJU
aHVtYlJlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldFZp
c2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgIG1fdmlz
aWJsZVNjcm9sbGVyVGh1bWJSZWN0ID0gcmVjdEluVmlld0Nvb3JkaW5hdGVzOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVz
Q2hyb21pdW1NYWMuaAkocmV2aXNpb24gMTAzMjgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXND
aHJvbWl1bU1hY19oCi0jZGVmaW5lIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1h
Y19oCi0KLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi0KLS8vIFB1YmxpYyBBUElzIG5v
dCBhdmFpbGFibGUgb24gdmVyc2lvbnMgb2YgTWFjIG9uIHdoaWNoIHdlIGJ1aWxkCi0jaWYgKGRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgfHwgZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xF
T1BBUkQpKQotZW51bSB7Ci0gICAgTlNTY3JvbGxlclN0eWxlTGVnYWN5ICAgICAgID0gMCwKLSAg
ICBOU1Njcm9sbGVyU3R5bGVPdmVybGF5ICAgICAgPSAxCi19OwotCi0jaWZkZWYgX19PQkpDX18K
LXR5cGVkZWYgTlNJbnRlZ2VyIE5TU2Nyb2xsZXJTdHlsZTsKLSNlbmRpZgotI2VuZGlmCi0KLXR5
cGVkZWYgdWludDMyIHdrU2Nyb2xsZXJTdHlsZTsKLQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3Mg
TlNTY3JvbGxlckltcDsKLUBjbGFzcyBOU1Njcm9sbGVySW1wUGFpcjsKLSNlbHNlCi1jbGFzcyBO
U1Njcm9sbGVySW1wOwotY2xhc3MgTlNTY3JvbGxlckltcFBhaXI7Ci0jZW5kaWYKLQotdHlwZWRl
ZiBOU1Njcm9sbGVySW1wKiBXS1Njcm9sbGJhclBhaW50ZXJSZWY7Ci10eXBlZGVmIE5TU2Nyb2xs
ZXJJbXBQYWlyKiBXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmOwotCi1ib29sIGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpOwotCi0vLyBTY3JvbGxiYXIgUGFpbnRlcgotYm9v
bCB3a1Njcm9sbGJhclBhaW50ZXJVc2VzT3ZlcmxheVNjcm9sbGVycyh2b2lkKTsKLWJvb2wgd2tT
Y3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7Ci1DR0Zs
b2F0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYpOwot
dm9pZCB3a1Njcm9sbGJhclBhaW50ZXJTZXRPdmVybGF5U3RhdGUoV0tTY3JvbGxiYXJQYWludGVy
UmVmLCBpbnQgb3ZlcmxheVNjcm9sbGVyU3RhdGUpOwotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJQ
YWludChXS1Njcm9sbGJhclBhaW50ZXJSZWYsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBD
R0Zsb2F0IHByb3BvcnRpb24sIE5TUmVjdCBmcmFtZVJlY3QpOwotdm9pZCB3a1Njcm9sbGJhclBh
aW50ZXJQYWludFRyYWNrKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiwgYm9vbCBlbmFibGVkLCBkb3Vi
bGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgTlNSZWN0IGZyYW1lUmVjdCk7Ci12b2lkIHdr
U2Nyb2xsYmFyUGFpbnRlclBhaW50S25vYihXS1Njcm9sbGJhclBhaW50ZXJSZWYpOwotaW50IHdr
U2Nyb2xsYmFyTWluaW11bVRodW1iTGVuZ3RoKFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7Ci12b2lk
IHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiwgaWQg
c2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlKTsKLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyU2V0RW5h
YmxlZChXS1Njcm9sbGJhclBhaW50ZXJSZWYsIGJvb2wgZW5hYmxlZCk7Ci1DR0Zsb2F0IHdrU2Ny
b2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmKTsKLVdLU2Nyb2xs
YmFyUGFpbnRlclJlZiB3a01ha2VTY3JvbGxiYXJQYWludGVyKGludCBjb250cm9sU2l6ZSwgYm9v
bCBpc0hvcml6b250YWwpOwotaW50IHdrU2Nyb2xsYmFyVGhpY2tuZXNzKGludCBjb250cm9sU2l6
ZSk7Ci1pbnQgd2tTY3JvbGxiYXJNaW5pbXVtVG90YWxMZW5ndGhOZWVkZWRGb3JUaHVtYihXS1Nj
cm9sbGJhclBhaW50ZXJSZWYpOwotQ0dSZWN0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KFdL
U2Nyb2xsYmFyUGFpbnRlclJlZik7Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xs
YmFyUmVwbGFjZW1lbnRQYWludGVyKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBvbGRQYWludGVyLCBp
bnQgbmV3U3R5bGUsIGludCBjb250cm9sU2l6ZSwgYm9vbCBpc0hvcml6b250YWwpOwotdm9pZCB3
a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmLCBDR0Zs
b2F0KTsKLXZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShXS1Njcm9sbGJhclBh
aW50ZXJSZWYsIENHRmxvYXQpOwotCi1lbnVtIHsKLSAgICB3a1Njcm9sbGVyS25vYlN0eWxlRGVm
YXVsdCA9IDAsCi0gICAgd2tTY3JvbGxlcktub2JTdHlsZURhcmsgPSAxLAotICAgIHdrU2Nyb2xs
ZXJLbm9iU3R5bGVMaWdodCA9IDIKLX07Ci10eXBlZGVmIHVpbnQzMiB3a1Njcm9sbGVyS25vYlN0
eWxlOwotZXh0ZXJuIHZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKFdLU2Nyb2xs
YmFyUGFpbnRlclJlZiwgd2tTY3JvbGxlcktub2JTdHlsZSk7Ci0KLS8vIFNjcm9sbGJhciBQYWlu
dGVyIENvbnRyb2xsZXIKLVdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgd2tNYWtlU2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIoaWQgcGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSk7Ci12
b2lkIHdrQ29udGVudEFyZWFTY3JvbGxlZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVm
KTsKLXZvaWQgd2tDb250ZW50QXJlYVdpbGxQYWludChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyUmVmKTsKLXZvaWQgd2tNb3VzZUVudGVyZWRDb250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyUmVmKTsKLXZvaWQgd2tNb3VzZUV4aXRlZENvbnRlbnRBcmVhKFdLU2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a01vdXNlTW92ZWRJbkNvbnRlbnRBcmVh
KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a1dpbGxTdGFydExpdmVS
ZXNpemUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrQ29udGVudEFy
ZWFSZXNpemVkKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a1dpbGxF
bmRMaXZlUmVzaXplKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a0Nv
bnRlbnRBcmVhRGlkU2hvdyhXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKLXZvaWQg
d2tDb250ZW50QXJlYURpZEhpZGUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12
b2lkIHdrRGlkQmVnaW5TY3JvbGxHZXN0dXJlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJS
ZWYpOwotdm9pZCB3a0RpZEVuZFNjcm9sbEdlc3R1cmUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlclJlZik7Ci12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMoV0tT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmLCB3a1Njcm9s
bGVyU3R5bGUgbmV3U3R5bGUpOwotdm9pZCB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxl
cihXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmLCBXS1Njcm9sbGJhclBhaW50ZXJSZWYs
IGJvb2wgaXNIb3Jpem9udGFsKTsKLVdLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a1ZlcnRpY2FsU2Ny
b2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJl
Zik7Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tIb3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckZv
ckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci13a1Njcm9sbGVy
U3R5bGUgd2tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKFdLU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJSZWYpOwotCi0jZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQot
Ci0jZW5kaWYgLy8gU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRp
ZXNDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMubW0JKHJldmlzaW9u
IDEwMzI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92
ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwzNjQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLQot
I2luY2x1ZGUgIlNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oIgotI2luY2x1
ZGUgIlNjcm9sbFR5cGVzLmgiCi0jaW5jbHVkZSA8Q29jb2EvQ29jb2EuaD4KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLS8vIFRoaXMgZmlsZSBjb250YWlucyB1dGlsaXRpZXMgdG8gZHJhdyBv
dmVybGF5IHNjcm9sbGJhcnMuIFRoZXJlIGFyZSBubyBwdWJsaWMKLS8vIEFQSXMgeWV0IG9uIHRo
ZSBNYWMgdG8gZHJhdyBvdmVybGF5IHNjcm9sbGJhcnMgc28gd2UgdXNlIHByaXZhdGUgQVBJcyB0
aGF0Ci0vLyB3ZSBsb29rIHVwIGF0IHJ1bnRpbWUuIElmIHRoZSBwcml2YXRlIEFQSXMgZG9uJ3Qg
ZXhpc3QgdGhlbiB0aGUgd2tNYWtlKgotLy8gZnVuY3Rpb25zIHdpbGwgcmV0dXJuIG5pbC4KLS8v
Ci0vLyBOb3RlLCB0aGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIGNvcGllZCBmcm9tIFdlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UuaC4KLS8vIFVzaW5nIHRoZSBzYW1lIG5hbWVzIG1ha2VzIHRoZSBj
b2RlIGVhc2llciB0byBtYWludGFpbi4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFB1
YmxpYyBBUElzIG5vdCBhdmFpbGFibGUgb24gdmVyc2lvbnMgb2YgTWFjIG9uIHdoaWNoIHdlIGJ1
aWxkCi0jaWYgKGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgfHwgZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpKQotQGludGVyZmFjZSBOU1Njcm9sbGVyIChOU09iamVjdCkKLSsg
KE5TU2Nyb2xsZXJTdHlsZSlwcmVmZXJyZWRTY3JvbGxlclN0eWxlOwotQGVuZAotI2VuZGlmCi0K
LS8vIFRoZXNlIGFyZSBwcml2YXRlIEFQSXMgdG8gZHJhdyBvdmVybGF5IHNjcm9sbGJhcnMuCi1A
aW50ZXJmYWNlIE5TU2Nyb2xsZXJJbXAgOiBOU09iamVjdAotCi0rIChpZClzY3JvbGxlckltcFdp
dGhTdHlsZTooTlNTY3JvbGxlclN0eWxlKXN0eWxlCi0gICAgICAgICAgICAgICBjb250cm9sU2l6
ZTooTlNDb250cm9sU2l6ZSlzaXplCi0gICAgICAgICAgICAgICAgaG9yaXpvbnRhbDooQk9PTClo
b3Jpem9udGFsCi0gICAgICByZXBsYWNpbmdTY3JvbGxlckltcDooaWQpc2Nyb2xsZXI7Ci0KLUBw
cm9wZXJ0eSBDR0Zsb2F0IGtub2JBbHBoYTsKLUBwcm9wZXJ0eSBDR0Zsb2F0IHRyYWNrQWxwaGE7
Ci1AcHJvcGVydHkgQ0dGbG9hdCBrbm9iUHJvcG9ydGlvbjsKLUBwcm9wZXJ0eSBOU0ludGVnZXIg
a25vYlN0eWxlOwotQHByb3BlcnR5KGdldHRlcj1pc0VuYWJsZWQpIEJPT0wgZW5hYmxlZDsKLUBw
cm9wZXJ0eShnZXR0ZXI9aXNIb3Jpem9udGFsKSBCT09MIGhvcml6b250YWw7Ci1AcHJvcGVydHkg
ZG91YmxlIGRvdWJsZVZhbHVlOwotQHByb3BlcnR5KGFzc2lnbikgaWQgZGVsZWdhdGU7Ci0KLS0g
KENHRmxvYXQpa25vYk1pbkxlbmd0aDsKLS0gKENHRmxvYXQpdHJhY2tPdmVybGFwRW5kSW5zZXQ7
Ci0tIChDR0Zsb2F0KWtub2JPdmVybGFwRW5kSW5zZXQ7Ci0tIChDR0Zsb2F0KXRyYWNrRW5kSW5z
ZXQ7Ci0tIChDR0Zsb2F0KWtub2JFbmRJbnNldDsKLS0gKENHRmxvYXQpdHJhY2tCb3hXaWR0aDsK
LS0gKENHRmxvYXQpdHJhY2tXaWR0aDsKLS0gKHZvaWQpc2V0Qm91bmRzU2l6ZTooTlNTaXplKXNp
emU7Ci0tICh2b2lkKWRyYXdLbm9iU2xvdEluUmVjdDooTlNSZWN0KXJlY3QKLSAgICAgICAgICAg
ICAgICAgaGlnaGxpZ2h0OihCT09MKWZsYWc7Ci0tICh2b2lkKWRyYXdLbm9iOwotLSAodm9pZClz
ZXRPdmVybGF5U2Nyb2xsZXJTdGF0ZTooTlNTY3JvbGxlclN0eWxlKXN0YXRlCi0gICAgICAgICAg
ICAgICBmb3JjZUltbWVkaWF0ZWx5OihCT09MKWZsYWc7Ci0tICh2b2lkKXNldERlbGVnYXRlOihp
ZClkZWxlZ2F0ZTsKLS0gKE5TUmVjdClyZWN0Rm9yUGFydDooTlNVSW50ZWdlcilhcmcxOwotCi1A
ZW5kCi0KLS8vIFRoZXNlIGFyZSBwcml2YXRlIEFQSXMgdG8gbWFuYWdlIG92ZXJsYXkgc2Nyb2xs
YmFycy4KLUBpbnRlcmZhY2UgTlNTY3JvbGxlckltcFBhaXIgOiBOU09iamVjdAotCi1AcHJvcGVy
dHkgTlNTY3JvbGxlclN0eWxlIHNjcm9sbGVyU3R5bGU7Ci1AcHJvcGVydHkocmV0YWluKSBOU1Nj
cm9sbGVySW1wICpob3Jpem9udGFsU2Nyb2xsZXJJbXA7Ci1AcHJvcGVydHkocmV0YWluKSBOU1Nj
cm9sbGVySW1wICp2ZXJ0aWNhbFNjcm9sbGVySW1wOwotQHByb3BlcnR5KGFzc2lnbikgaWQgZGVs
ZWdhdGU7Ci0KLS0gKHZvaWQpaGlkZU92ZXJsYXlTY3JvbGxlcnM7Ci0tICh2b2lkKWZsYXNoU2Ny
b2xsZXJzOwotLSAodm9pZCljb250ZW50QXJlYVNjcm9sbGVkOwotLSAodm9pZCljb250ZW50QXJl
YVdpbGxEcmF3OwotLSAodm9pZCljb250ZW50QXJlYURpZEhpZGU7Ci0tICh2b2lkKXdpbmRvd09y
ZGVyZWRPdXQ7Ci0tICh2b2lkKXdpbmRvd09yZGVyZWRJbjsKLS0gKHZvaWQpbW91c2VFbnRlcmVk
Q29udGVudEFyZWE7Ci0tICh2b2lkKW1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhOwotLSAodm9pZClt
b3VzZUV4aXRlZENvbnRlbnRBcmVhOwotLSAodm9pZClzdGFydExpdmVSZXNpemU7Ci0tICh2b2lk
KWNvbnRlbnRBcmVhRGlkUmVzaXplOwotLSAodm9pZCllbmRMaXZlUmVzaXplOwotLSAodm9pZCli
ZWdpblNjcm9sbEdlc3R1cmU7Ci0tICh2b2lkKWVuZFNjcm9sbEdlc3R1cmU7Ci0KLUBlbmQKLQot
c3RhdGljIENsYXNzIGxvb2tVcE5TU2Nyb2xsZXJJbXBDbGFzcygpCi17Ci0gICAgc3RhdGljIENs
YXNzIHJlc3VsdCA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcCIpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBDbGFzcyBsb29rVXBOU1Njcm9sbGVySW1wUGFpckNs
YXNzKCkKLXsKLSAgICBzdGF0aWMgQ2xhc3MgcmVzdWx0ID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJO
U1Njcm9sbGVySW1wUGFpciIpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBOU0Nv
bnRyb2xTaXplIHNjcm9sbGJhckNvbnRyb2xTaXplVG9OU0NvbnRyb2xTaXplKGludCBjb250cm9s
U2l6ZSkKLXsKLSAgICByZXR1cm4gY29udHJvbFNpemUgPT0gV2ViQ29yZTo6UmVndWxhclNjcm9s
bGJhciA/IE5TUmVndWxhckNvbnRyb2xTaXplIDogTlNTbWFsbENvbnRyb2xTaXplOwotfQotCi1z
dGF0aWMgTlNTY3JvbGxlclN0eWxlIHByZWZlcnJlZFNjcm9sbGVyU3R5bGUoKQotewotICAgIGlm
IChbTlNTY3JvbGxlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHByZWZlcnJlZFNjcm9s
bGVyU3R5bGUpXSkKLSAgICAgICAgcmV0dXJuIFtOU1Njcm9sbGVyIHByZWZlcnJlZFNjcm9sbGVy
U3R5bGVdOwotICAgIHJldHVybiBOU1Njcm9sbGVyU3R5bGVMZWdhY3k7Ci19Ci0KLWJvb2wgd2tT
Y3JvbGxiYXJQYWludGVyVXNlc092ZXJsYXlTY3JvbGxlcnModm9pZCkKLXsKLSAgICByZXR1cm4g
cHJlZmVycmVkU2Nyb2xsZXJTdHlsZSgpID09IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXk7Ci19Ci0K
LWJvb2wgd2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZiBwYWludGVyKQotewotICAgIHJldHVybiBbcGFpbnRlciBpc0hvcml6b250YWxdOwotfQotCi1D
R0Zsb2F0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYg
cGFpbnRlcikKLXsKLSAgICByZXR1cm4gW3BhaW50ZXIga25vYkFscGhhXTsKLX0KLQotdm9pZCB3
a1Njcm9sbGJhclBhaW50ZXJTZXRPdmVybGF5U3RhdGUoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBh
aW50ZXIsIGludCBvdmVybGF5U2Nyb2xsZXJTdGF0ZSkKLXsKLSAgICBbcGFpbnRlciBzZXRPdmVy
bGF5U2Nyb2xsZXJTdGF0ZTpvdmVybGF5U2Nyb2xsZXJTdGF0ZQotICAgICAgICAgICAgICAgICAg
ICBmb3JjZUltbWVkaWF0ZWx5OllFU107Ci19Ci0KLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyUGFp
bnQoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZh
bHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIE5TUmVjdCBmcmFtZVJlY3QpCi17Ci0gICAgd2tTY3Jv
bGxiYXJQYWludGVyUGFpbnRUcmFjayhwYWludGVyLCBlbmFibGVkLCB2YWx1ZSwgcHJvcG9ydGlv
biwgZnJhbWVSZWN0KTsKLSAgICB3a1Njcm9sbGJhclBhaW50ZXJQYWludEtub2IocGFpbnRlcik7
Ci19Ci0KLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyUGFpbnRUcmFjayhXS1Njcm9sbGJhclBhaW50
ZXJSZWYgcGFpbnRlciwgYm9vbCBlbmFibGVkLCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9y
dGlvbiwgTlNSZWN0IGZyYW1lUmVjdCkKLXsKLSAgICBbcGFpbnRlciBzZXRFbmFibGVkOmVuYWJs
ZWRdOwotICAgIFtwYWludGVyIHNldEJvdW5kc1NpemU6ZnJhbWVSZWN0LnNpemVdOwotICAgIFtw
YWludGVyIHNldERvdWJsZVZhbHVlOnZhbHVlXTsKLSAgICBbcGFpbnRlciBzZXRLbm9iUHJvcG9y
dGlvbjpwcm9wb3J0aW9uXTsKLQotICAgIGlmIChbcGFpbnRlciBpc0hvcml6b250YWxdKQotICAg
ICAgICBmcmFtZVJlY3Quc2l6ZS5oZWlnaHQgPSBbcGFpbnRlciB0cmFja1dpZHRoXTsKLSAgICBl
bHNlCi0gICAgICAgIGZyYW1lUmVjdC5zaXplLndpZHRoID0gW3BhaW50ZXIgdHJhY2tXaWR0aF07
Ci0gICAgZnJhbWVSZWN0Lm9yaWdpbiA9IE5TWmVyb1BvaW50OwotCi0gICAgW3BhaW50ZXIgZHJh
d0tub2JTbG90SW5SZWN0OmZyYW1lUmVjdCBoaWdobGlnaHQ6Tk9dOwotfQotCi12b2lkIHdrU2Ny
b2xsYmFyUGFpbnRlclBhaW50S25vYihXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikKLXsK
LSAgICBbcGFpbnRlciBkcmF3S25vYl07Ci19Ci0KLWludCB3a1Njcm9sbGJhck1pbmltdW1UaHVt
Ykxlbmd0aChXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICByZXR1cm4gW3Bh
aW50ZXIga25vYk1pbkxlbmd0aF07Ci19Ci0KLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVs
ZWdhdGUoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIGlkIHNjcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZSkKLXsKLSAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpzY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGVdOwotfQotCi12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclNldEVuYWJsZWQoV0tTY3JvbGxi
YXJQYWludGVyUmVmIHBhaW50ZXIsIGJvb2wgZW5hYmxlZCkKLXsKLSAgICBbcGFpbnRlciBzZXRF
bmFibGVkOmVuYWJsZWRdOwotfQotCi1DR0Zsb2F0IHdrU2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxw
aGEoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIpCi17Ci0gICAgcmV0dXJuIFtwYWludGVy
IHRyYWNrQWxwaGFdOwotfQotCi1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xsYmFy
UGFpbnRlcihpbnQgY29udHJvbFNpemUsIGJvb2wgaXNIb3Jpem9udGFsKQotewotICAgIHJldHVy
biB3a01ha2VTY3JvbGxiYXJSZXBsYWNlbWVudFBhaW50ZXIobmlsLCBwcmVmZXJyZWRTY3JvbGxl
clN0eWxlKCksIGNvbnRyb2xTaXplLCBpc0hvcml6b250YWwpOwotfQotCi1pbnQgd2tTY3JvbGxi
YXJUaGlja25lc3MoaW50IGNvbnRyb2xTaXplKQotewotICAgIHJldHVybiBbd2tNYWtlU2Nyb2xs
YmFyUGFpbnRlcihjb250cm9sU2l6ZSwgZmFsc2UpIHRyYWNrQm94V2lkdGhdOwotfQotCi1pbnQg
d2tTY3JvbGxiYXJNaW5pbXVtVG90YWxMZW5ndGhOZWVkZWRGb3JUaHVtYihXS1Njcm9sbGJhclBh
aW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICByZXR1cm4gW3BhaW50ZXIga25vYk1pbkxlbmd0aF0g
KwotICAgICAgICAgICBbcGFpbnRlciB0cmFja092ZXJsYXBFbmRJbnNldF0gKwotICAgICAgICAg
ICBbcGFpbnRlciBrbm9iT3ZlcmxhcEVuZEluc2V0XSArCi0gICAgICAgICAgIChbcGFpbnRlciB0
cmFja0VuZEluc2V0XSArIFtwYWludGVyIGtub2JFbmRJbnNldF0pICogMjsKLX0KLQotV0tTY3Jv
bGxiYXJQYWludGVyUmVmIHdrVmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihX
S1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgcmV0dXJu
IFtjb250cm9sbGVyIHZlcnRpY2FsU2Nyb2xsZXJJbXBdOwotfQotCi1XS1Njcm9sbGJhclBhaW50
ZXJSZWYgd2tIb3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIHJldHVybiBbY29udHJv
bGxlciBob3Jpem9udGFsU2Nyb2xsZXJJbXBdOwotfQotCi13a1Njcm9sbGVyU3R5bGUgd2tTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJS
ZWYgY29udHJvbGxlcikKLXsKLSAgICByZXR1cm4gW2NvbnRyb2xsZXIgc2Nyb2xsZXJTdHlsZV07
Ci19Ci0KLVdLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a01ha2VTY3JvbGxiYXJSZXBsYWNlbWVudFBh
aW50ZXIoV0tTY3JvbGxiYXJQYWludGVyUmVmIG9sZFBhaW50ZXIsIGludCBuZXdTdHlsZSwgaW50
IGNvbnRyb2xTaXplLCBib29sIGlzSG9yaXpvbnRhbCkKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFy
T3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBb
bG9va1VwTlNTY3JvbGxlckltcENsYXNzKCkgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6bmV3U3R5bGUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xT
aXplOnNjcm9sbGJhckNvbnRyb2xTaXplVG9OU0NvbnRyb2xTaXplKGNvbnRyb2xTaXplKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6
aXNIb3Jpem9udGFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBs
YWNpbmdTY3JvbGxlckltcDpvbGRQYWludGVyXTsKLX0KLQotdm9pZCB3a1NldFBhaW50ZXJGb3JQ
YWludGVyQ29udHJvbGxlcihXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xs
ZXIsIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCBib29sIGlzSG9yaXpvbnRhbCkKLXsK
LSAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICBbY29udHJvbGxlciBzZXRIb3Jpem9udGFs
U2Nyb2xsZXJJbXA6cGFpbnRlcl07Ci0gICAgZWxzZQotICAgICAgICBbY29udHJvbGxlciBzZXRW
ZXJ0aWNhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwotfQotCi12b2lkIHdrU2V0U2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIHBhaW50
ZXIsIHdrU2Nyb2xsZXJTdHlsZSBuZXdTdHlsZSkKLXsKLSAgICBbcGFpbnRlciBzZXRTY3JvbGxl
clN0eWxlOm5ld1N0eWxlXTsKLX0KLQotQ0dSZWN0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0
KFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyKQotewotICAgIHJldHVybiBOU1JlY3RUb0NH
UmVjdChbcGFpbnRlciByZWN0Rm9yUGFydDpOU1Njcm9sbGVyS25vYl0pOwotfQotCi12b2lkIHdr
U2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRl
ciwgQ0dGbG9hdCBhbHBoYSkKLXsKLSAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6YWxwaGFdOwot
fQotCi12b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWlu
dGVyUmVmIHBhaW50ZXIsIENHRmxvYXQgYWxwaGEpCi17Ci0gICAgW3BhaW50ZXIgc2V0VHJhY2tB
bHBoYTphbHBoYV07Ci19Ci0KLXZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKFdL
U2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCB3a1Njcm9sbGVyS25vYlN0eWxlIHN0eWxlKQot
ewotICAgIFtwYWludGVyIHNldEtub2JTdHlsZTpzdHlsZV07Ci19Ci0KLVdLU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIoaWQgcGFp
bnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSkKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFyT3ZlcmxheUFQ
SUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIE5TU2Nyb2xsZXJJbXBQYWly
KiBjb250cm9sbGVyID0gW1tbbG9va1VwTlNTY3JvbGxlckltcFBhaXJDbGFzcygpIGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV07Ci0gICAgW2NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6cGFpbnRlckNv
bnRyb2xsZXJEZWxlZ2F0ZV07Ci0gICAgW2NvbnRyb2xsZXIgc2V0U2Nyb2xsZXJTdHlsZTpwcmVm
ZXJyZWRTY3JvbGxlclN0eWxlKCldOwotICAgIHJldHVybiBjb250cm9sbGVyOwotfQotCi12b2lk
IHdrQ29udGVudEFyZWFTY3JvbGxlZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNv
bnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgY29udGVudEFyZWFTY3JvbGxlZF07Ci19Ci0K
LXZvaWQgd2tDb250ZW50QXJlYVdpbGxQYWludChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
UmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgY29udGVudEFyZWFXaWxsRHJhd107
Ci19Ci0KLXZvaWQgd2tNb3VzZUVudGVyZWRDb250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgbW91c2VFbnRlcmVk
Q29udGVudEFyZWFdOwotfQotCi12b2lkIHdrTW91c2VFeGl0ZWRDb250ZW50QXJlYShXS1Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIg
bW91c2VFeGl0ZWRDb250ZW50QXJlYV07Ci19Ci0KLXZvaWQgd2tNb3VzZU1vdmVkSW5Db250ZW50
QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAg
W2NvbnRyb2xsZXIgbW91c2VNb3ZlZEluQ29udGVudEFyZWFdOwotfQotCi12b2lkIHdrV2lsbFN0
YXJ0TGl2ZVJlc2l6ZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIp
Ci17Ci0gICAgW2NvbnRyb2xsZXIgc3RhcnRMaXZlUmVzaXplXTsKLX0KLQotdm9pZCB3a0NvbnRl
bnRBcmVhUmVzaXplZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIp
Ci17Ci0gICAgW2NvbnRyb2xsZXIgY29udGVudEFyZWFEaWRSZXNpemVdOwotfQotCi12b2lkIHdr
V2lsbEVuZExpdmVSZXNpemUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9s
bGVyKQotewotICAgIFtjb250cm9sbGVyIGVuZExpdmVSZXNpemVdOwotfQotCi12b2lkIHdrQ29u
dGVudEFyZWFEaWRTaG93KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxl
cikKLXsKLSAgICBbY29udHJvbGxlciB3aW5kb3dPcmRlcmVkSW5dOwotfQotCi12b2lkIHdrQ29u
dGVudEFyZWFEaWRIaWRlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxl
cikKLXsKLSAgICBbY29udHJvbGxlciB3aW5kb3dPcmRlcmVkT3V0XTsKLX0KLQotdm9pZCB3a0Rp
ZEJlZ2luU2Nyb2xsR2VzdHVyZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRy
b2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKLX0KLQotdm9p
ZCB3a0RpZEVuZFNjcm9sbEdlc3R1cmUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBj
b250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIGVuZFNjcm9sbEdlc3R1cmVdOwotfQotCi12
b2lkIHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMoV0tTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIGhpZGVPdmVy
bGF5U2Nyb2xsZXJzXTsKLSAgICBbY29udHJvbGxlciBmbGFzaFNjcm9sbGVyc107Ci19Ci0KLWJv
b2wgaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBh
cGlBdmFpbGFibGUgPSBbbG9va1VwTlNTY3JvbGxlckltcENsYXNzKCkgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihzY3JvbGxlckltcFdpdGhTdHlsZTpjb250cm9sU2l6ZTpob3Jpem9udGFs
OnJlcGxhY2luZ1Njcm9sbGVySW1wOildICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW2xvb2tVcE5TU2Nyb2xsZXJJbXBQYWlyQ2xhc3MoKSBpbnN0YW5jZXNSZXNwb25kVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioc2Nyb2xsZXJTdHlsZSldOwotICAgIHJldHVybiBhcGlBdmFpbGFibGU7
Ci19Ci0KLSNlbmRpZiAvLyBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYy5oCShyZXZpc2lvbiAxMDMyODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYzICsyNywyMiBAQAogI2lmbmRlZiBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjX2gK
ICNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hY19oCiAKLSNpbmNsdWRlICJTY3JvbGxi
YXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZUNvbXBvc2l0ZS5oIgotCi0vLyBUaGlzIGZpbGUgKGFuZCBpdHMgYXNzb2NpYXRlZCAubW0gZmls
ZSkgaXMgYSBjbG9uZSBvZiBTY3JvbGxiYXJUaGVtZU1hYy5oLgotLy8gU2VlIHRoZSAubW0gZmls
ZSBmb3IgZGV0YWlscy4KKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZU1hYy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMgOiBwdWJsaWMg
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgeworY2xhc3MgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
YyA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZU1hYyB7CiBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYygpOwogICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMo
KTsKIAotICAgIHZvaWQgcHJlZmVyZW5jZXNDaGFuZ2VkKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlRW5hYmxlZFN0YXRlKFNjcm9sbGJhciopOwotCiAgICAgdmlydHVhbCBib29sIHBhaW50
KFNjcm9sbGJhciosIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFt
YWdlUmVjdCk7CiAKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFy
Q29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgdXNlc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXIqKTsKLQotICAgIHZpcnR1YWwgZG91Ymxl
IGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpOwotICAgIHZpcnR1YWwgZG91YmxlIGF1dG9z
Y3JvbGxUaW1lckRlbGF5KCk7Ci0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1l
bnQgYnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xs
YmFyKFNjcm9sbGJhciopOwotCi0gICAgdm9pZCBzZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKFNj
cm9sbGJhciosIFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7Ci0gICAgV0tTY3JvbGxiYXJQYWludGVy
UmVmIHBhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0KICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRPdmVyaGFuZ0FyZWFzKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0JiB2ZXJ0aWNhbE92
ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKICAgICAKLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIGJv
b2wgaGFzVGh1bWIoU2Nyb2xsYmFyKik7Ci0KLSAgICB2aXJ0dWFsIEludFJlY3QgYmFja0J1dHRv
blJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsK
LSAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xs
YmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdHJh
Y2tSZWN0KFNjcm9sbGJhciosIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7Ci0KLSAgICB2aXJ0dWFs
IGludCBtYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkgeyByZXR1cm4gNDA7IH0KLQotICAgIHZpcnR1
YWwgaW50IG1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXIqKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREcmFnRG9jdW1lbnRJbnN0ZWFkT2ZUaHVtYihT
Y3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLQogcHJpdmF0ZToKICAgICB2
b2lkIHBhaW50R2l2ZW5UaWNrbWFya3MoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpOwogCi1wcml2YXRlOgogICAgIFJl
ZlB0cjxQYXR0ZXJuPiBtX292ZXJoYW5nUGF0dGVybjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bU1hYy5tbQkocmV2aXNpb24gMTAzMjgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTA4ICsyNywyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lQ2hyb21pdW1NYWMuaCIKIAotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5TU2Nyb2xsZXJJbXBEZXRh
aWxzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCi0jaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRl
IDx3dGYvVW51c2VkUGFyYW0uaD4KIAogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dFNraWEuaCIKICNpbmNsdWRlICJza2lhL2V4dC9za2lhX3V0aWxzX21hYy5oIgogI2Vu
ZGlmCiAKLQotCi0vLyBGSVhNRTogVGhlcmUgYXJlIHJlcGFpbnRpbmcgcHJvYmxlbXMgZHVlIHRv
IEFxdWEgc2Nyb2xsIGJhciBidXR0b25zJyB2aXN1YWwgb3ZlcmZsb3cuCi0KLXVzaW5nIG5hbWVz
cGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotLy8gVGhpcyBmaWxlIChhbmQg
aXRzIGFzc29jaWF0ZWQgLmggZmlsZSkgaXMgYSBjbG9uZSBvZiBTY3JvbGxiYXJUaGVtZU1hYy5t
bS4KLS8vIEJlY2F1c2Ugd2Ugd2FudCB0byBkcmF3IHRpY2ttYXJrcyBpbiB0aGUgc2Nyb2xsYmFy
LCB3ZSBtdXN0IG1haW50YWluIGEgZm9yay4KLS8vIFBsZWFzZSBtYWludGFpbiB0aGlzIGZpbGUg
YnkgcGVyZm9ybWluZyBwYXJhbGxlbCBjaGFuZ2VzIHRvIGl0LgotLy8KLS8vIFRoZSBvbmx5IGNo
YW5nZXMgZnJvbSBTY3JvbGxiYXJUaGVtZU1hYyBzaG91bGQgYmU6Ci0vLyAtIFRoZSBjbGFzc25h
bWUgY2hhbmdlIGZyb20gU2Nyb2xsYmFyVGhlbWVNYWMgdG8gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bU1hYy4KLS8vIC0gSW4gcGFpbnQoKSB0aGUgY29kZSB0byBwYWludCB0aGUgdHJhY2ssIHRpY2tt
YXJrcywgYW5kIHRodW1iIHNlcGFyYXRlbHkuCi0vLyAtIEluIHBhaW50KCkgdGhlIHRodW1iIGlz
IGRyYXduIHZpYSBDaHJvbWVCcmlkZ2UvV2ViVGhlbWVFbmdpbmUuCi0vLyAtIFZhcmlvdXMgZnVu
Y3Rpb25zIHRoYXQgd2VyZSBzcGxpdCB1c2luZyAjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVS
KQotLy8gICBoYXZlIGJlZW4gY29tYmluZWQgdXNpbmcgcnVudGltZSBjaGVja3MgaW5zdGVhZC4K
LS8vCi0vLyBGb3IgYWxsIG90aGVyIGRpZmZlcmVuY2VzLCBpZiBpdCB3YXMgaW50cm9kdWNlZCBp
biB0aGlzIGZpbGUsIHRoZW4gdGhlCi0vLyBtYWludGFpbmVyIGZvcmdvdCB0byBpbmNsdWRlIGl0
IGluIHRoZSBsaXN0OyBvdGhlcndpc2UgaXQgaXMgYW4gdXBkYXRlIHRoYXQKLS8vIHNob3VsZCBo
YXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIGZpbGUgYnV0IHdhcyBub3QuCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNoTWFwPFNjcm9sbGJhciosIFJldGFpblB0cjxXS1Njcm9s
bGJhclBhaW50ZXJSZWY+ID4gU2Nyb2xsYmFyUGFpbnRlck1hcDsKLQotc3RhdGljIFNjcm9sbGJh
clBhaW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCi17Ci0gICAgc3RhdGljIFNjcm9sbGJhclBhaW50
ZXJNYXAqIG1hcCA9IG5ldyBTY3JvbGxiYXJQYWludGVyTWFwOwotICAgIHJldHVybiBtYXA7Ci19
Ci0KLX0KLQotQGludGVyZmFjZSBTY3JvbGxiYXJQcmVmc09ic2VydmVyIDogTlNPYmplY3QKLXsK
LX0KLQotKyAodm9pZClyZWdpc3RlckFzT2JzZXJ2ZXI7Ci0rICh2b2lkKWFwcGVhcmFuY2VQcmVm
c0NoYW5nZWQ6KE5TTm90aWZpY2F0aW9uKil0aGVOb3RpZmljYXRpb247Ci0rICh2b2lkKWJlaGF2
aW9yUHJlZnNDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiopdGhlTm90aWZpY2F0aW9uOwotCi1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQcmVmc09ic2VydmVyCi0KLSsgKHZvaWQpYXBw
ZWFyYW5jZVByZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24qKXVudXNlZE5vdGlmaWNhdGlvbgot
ewotICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwotCi0gICAgU2Nyb2xsYmFy
VGhlbWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAgaWYgKHRoZW1lLT5p
c01vY2tUaGVtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWNfY2FzdDxTY3JvbGxi
YXJUaGVtZUNocm9taXVtTWFjKj4odGhlbWUpLT5wcmVmZXJlbmNlc0NoYW5nZWQoKTsKLSAgICBp
ZiAoc2Nyb2xsYmFyTWFwKCktPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFNjcm9s
bGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHNjcm9sbGJhck1hcCgpLT5lbmQoKTsKLSAg
ICBmb3IgKFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYmFyTWFwKCkt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpdC0+Zmlyc3QtPnN0eWxlQ2hh
bmdlZCgpOwotICAgICAgICBpdC0+Zmlyc3QtPmludmFsaWRhdGUoKTsKLSAgICB9Ci19Ci0KLSsg
KHZvaWQpYmVoYXZpb3JQcmVmc0NoYW5nZWQ6KE5TTm90aWZpY2F0aW9uKil1bnVzZWROb3RpZmlj
YXRpb24KLXsKLSAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKLQotICAgIFNj
cm9sbGJhclRoZW1lKiB0aGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwotICAgIGlmICh0
aGVtZS0+aXNNb2NrVGhlbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhdGljX2Nhc3Q8
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyo+KHRoZW1lKS0+cHJlZmVyZW5jZXNDaGFuZ2VkKCk7
Ci19Ci0KLSsgKHZvaWQpcmVnaXN0ZXJBc09ic2VydmVyCi17Ci0gICAgW1tOU0Rpc3RyaWJ1dGVk
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKGFwcGVhcmFuY2VQcmVmc0NoYW5nZWQ6KSBuYW1lOkAiQXBwbGVBcXVhU2Ny
b2xsQmFyVmFyaWFudENoYW5nZWQiIG9iamVjdDpuaWwgc3VzcGVuc2lvbkJlaGF2aW9yOk5TTm90
aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZlckltbWVkaWF0ZWx5XTsKLSAgICBbW05T
RGlzdHJpYnV0ZWROb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoYmVoYXZpb3JQcmVmc0NoYW5nZWQ6KSBuYW1lOkAiQXBw
bGVOb1JlZGlzcGxheUFwcGVhcmFuY2VQcmVmZXJlbmNlQ2hhbmdlZCIgb2JqZWN0Om5pbCBzdXNw
ZW5zaW9uQmVoYXZpb3I6TlNOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JDb2FsZXNjZV07
Ci19Ci0KLUBlbmQKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JvbGxiYXJUaGVtZSogU2Ny
b2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKQEAgLTEzNywzMzMgKzUwLDE3IEBAIFNjcm9sbGJh
clRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGgKICAgICByZXR1cm4gJnRoZW1lOwogfQog
Ci0vLyBGSVhNRTogR2V0IHRoZXNlIG51bWJlcnMgZnJvbSBDb3JlVUkuCi1zdGF0aWMgaW50IGNT
Y3JvbGxiYXJUaGlja25lc3NbXSA9IHsgMTUsIDExIH07Ci1zdGF0aWMgaW50IGNSZWFsQnV0dG9u
TGVuZ3RoW10gPSB7IDI4LCAyMSB9Owotc3RhdGljIGludCBjQnV0dG9uSW5zZXRbXSA9IHsgMTQs
IDExIH07Ci1zdGF0aWMgaW50IGNCdXR0b25IaXRJbnNldFtdID0geyAzLCAyIH07Ci0vLyBjUmVh
bEJ1dHRvbkxlbmd0aCAtIGNCdXR0b25JbnNldAotc3RhdGljIGludCBjQnV0dG9uTGVuZ3RoW10g
PSB7IDE0LCAxMCB9Owotc3RhdGljIGludCBjVGh1bWJNaW5MZW5ndGhbXSA9IHsgMjYsIDIwIH07
Ci0KLXN0YXRpYyBpbnQgY091dGVyQnV0dG9uTGVuZ3RoW10gPSB7IDE2LCAxNCB9OyAvLyBUaGUg
b3V0ZXIgYnV0dG9uIGluIGEgZG91YmxlIGJ1dHRvbiBwYWlyIGlzIGEgYml0IGJpZ2dlci4KLXN0
YXRpYyBpbnQgY091dGVyQnV0dG9uT3ZlcmxhcCA9IDI7Ci0KLXN0YXRpYyBmbG9hdCBnSW5pdGlh
bEJ1dHRvbkRlbGF5ID0gMC41ZjsKLXN0YXRpYyBmbG9hdCBnQXV0b3Njcm9sbEJ1dHRvbkRlbGF5
ID0gMC4wNWY7Ci1zdGF0aWMgYm9vbCBnSnVtcE9uVHJhY2tDbGljayA9IGZhbHNlOwotc3RhdGlj
IFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgZ0J1dHRvblBsYWNlbWVudCA9IGlzU2Nyb2xsYmFy
T3ZlcmxheUFQSUF2YWlsYWJsZSgpID8gU2Nyb2xsYmFyQnV0dG9uc05vbmUgOiBTY3JvbGxiYXJC
dXR0b25zRG91YmxlRW5kOwotCi1zdGF0aWMgdm9pZCB1cGRhdGVBcnJvd1BsYWNlbWVudCgpCi17
Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBOU1N0cmluZyAqYnV0dG9uUGxhY2VtZW50ID0gW1tOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OkAiQXBwbGVTY3JvbGxCYXJWYXJpYW50
Il07Ci0gICAgaWYgKFtidXR0b25QbGFjZW1lbnQgaXNFcXVhbFRvU3RyaW5nOkAiU2luZ2xlIl0p
Ci0gICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlOwotICAg
IGVsc2UgaWYgKFtidXR0b25QbGFjZW1lbnQgaXNFcXVhbFRvU3RyaW5nOkAiRG91YmxlTWluIl0p
Ci0gICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQ7
Ci0gICAgZWxzZSBpZiAoW2J1dHRvblBsYWNlbWVudCBpc0VxdWFsVG9TdHJpbmc6QCJEb3VibGVC
b3RoIl0pCi0gICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zRG91Ymxl
Qm90aDsKLSAgICBlbHNlCi0gICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0
b25zRG91YmxlRW5kOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnJlZ2lz
dGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGJvb2wgaXNIb3Jpem9u
dGFsID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7Ci0g
ICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHNjcm9sbGJhclBhaW50ZXIgPSB3a01ha2VTY3JvbGxi
YXJQYWludGVyKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSwgaXNIb3Jpem9udGFsKTsKLSAgICBz
Y3JvbGxiYXJNYXAoKS0+YWRkKHNjcm9sbGJhciwgc2Nyb2xsYmFyUGFpbnRlcik7Ci0gICAgdXBk
YXRlRW5hYmxlZFN0YXRlKHNjcm9sbGJhcik7Ci0gICAgdXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dW5y
ZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBzY3JvbGxiYXJN
YXAoKS0+cmVtb3ZlKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bU1hYzo6c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgV0tT
Y3JvbGxiYXJQYWludGVyUmVmIG5ld1BhaW50ZXIpCi17Ci0gICAgc2Nyb2xsYmFyTWFwKCktPnNl
dChzY3JvbGxiYXIsIG5ld1BhaW50ZXIpOwotICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzY3JvbGxi
YXIpOwotICAgIHVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXIpOwotfQotCi1X
S1Njcm9sbGJhclBhaW50ZXJSZWYgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRlckZv
clNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFy
TWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpOwotfQotCiBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpbml0
aWFsaXplZDsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGluaXRpYWxpemVkID0g
dHJ1ZTsKLQotICAgICAgICAvLyBMb2FkIHRoZSBsaW5lbiBwYXR0ZXJuIGltYWdlIHVzZWQgZm9y
IG92ZXJoYW5nIGRyYXdpbmcuCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gcGF0dGVybkltYWdlID0g
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJvdmVyaGFuZ1BhdHRlcm4iKTsKLSAgICAgICAg
bV9vdmVyaGFuZ1BhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUocGF0dGVybkltYWdlLCB0cnVlLCB0
cnVlKTsKLQotICAgICAgICBbU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciByZWdpc3RlckFzT2JzZXJ2
ZXJdOwotICAgICAgICBwcmVmZXJlbmNlc0NoYW5nZWQoKTsKLSAgICB9CisgICAgLy8gTG9hZCB0
aGUgbGluZW4gcGF0dGVybiBpbWFnZSB1c2VkIGZvciBvdmVyaGFuZyBkcmF3aW5nLgorICAgIFJl
ZlB0cjxJbWFnZT4gcGF0dGVybkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJv
dmVyaGFuZ1BhdHRlcm4iKTsKKyAgICBtX292ZXJoYW5nUGF0dGVybiA9IFBhdHRlcm46OmNyZWF0
ZShwYXR0ZXJuSW1hZ2UsIHRydWUsIHRydWUpOwogfQogCiBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjp+U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYygpCiB7CiB9CiAKLXZvaWQgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYzo6cHJlZmVyZW5jZXNDaGFuZ2VkKCkKLXsKLSAgICBOU1VzZXJEZWZh
dWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwot
ICAgIFtkZWZhdWx0cyBzeW5jaHJvbml6ZV07Ci0gICAgdXBkYXRlQXJyb3dQbGFjZW1lbnQoKTsK
LSAgICBnSW5pdGlhbEJ1dHRvbkRlbGF5ID0gW2RlZmF1bHRzIGZsb2F0Rm9yS2V5OkAiTlNTY3Jv
bGxlckJ1dHRvbkRlbGF5Il07Ci0gICAgZ0F1dG9zY3JvbGxCdXR0b25EZWxheSA9IFtkZWZhdWx0
cyBmbG9hdEZvcktleTpAIk5TU2Nyb2xsZXJCdXR0b25QZXJpb2QiXTsKLSAgICBnSnVtcE9uVHJh
Y2tDbGljayA9IFtkZWZhdWx0cyBib29sRm9yS2V5OkAiQXBwbGVTY3JvbGxlclBhZ2luZ0JlaGF2
aW9yIl07Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpzY3JvbGxiYXJUaGlj
a25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCi17Ci0gICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJU
aGlja25lc3MoY29udHJvbFNpemUpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGNTY3JvbGxi
YXJUaGlja25lc3NbY29udHJvbFNpemVdOwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWM6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJQYWlu
dGVyVXNlc092ZXJsYXlTY3JvbGxlcnMoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotc3RhdGljIGlubGluZSB3a1Njcm9sbGVyS25vYlN0eWxlIHRvU2Nyb2xsYmFyUGFp
bnRlcktub2JTdHlsZShTY3JvbGxiYXJPdmVybGF5U3R5bGUgc3R5bGUpCi17Ci0gICAgc3dpdGNo
IChzdHlsZSkgewotICAgIGNhc2UgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGFyazoKLSAgICAgICAg
cmV0dXJuIHdrU2Nyb2xsZXJLbm9iU3R5bGVEYXJrOwotICAgIGNhc2UgU2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlTGlnaHQ6Ci0gICAgICAgIHJldHVybiB3a1Njcm9sbGVyS25vYlN0eWxlTGlnaHQ7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHdrU2Nyb2xsZXJLbm9iU3R5bGVEZWZhdWx0Owot
ICAgIH0KLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp1cGRhdGVTY3JvbGxi
YXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
cktub2JTdHlsZShwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhciksIHRvU2Nyb2xsYmFyUGFp
bnRlcktub2JTdHlsZShzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbGJhck92ZXJs
YXlTdHlsZSgpKSk7Ci0gICAgfQotfQotCi1kb3VibGUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yzo6aW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCkKLXsKLSAgICByZXR1cm4gZ0luaXRpYWxC
dXR0b25EZWxheTsKLX0KLQotZG91YmxlIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmF1dG9z
Y3JvbGxUaW1lckRlbGF5KCkKLXsKLSAgICByZXR1cm4gZ0F1dG9zY3JvbGxCdXR0b25EZWxheTsK
LX0KLQotU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFj
OjpidXR0b25zUGxhY2VtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ0J1dHRvblBsYWNlbWVu
dDsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpoYXNCdXR0b25zKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKSAmJiBn
QnV0dG9uUGxhY2VtZW50ICE9IFNjcm9sbGJhckJ1dHRvbnNOb25lCi0gICAgICAgICAgICAgJiYg
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyCi0gICAgICAg
ICAgICAgPyBzY3JvbGxiYXItPndpZHRoKCkKLSAgICAgICAgICAgICA6IHNjcm9sbGJhci0+aGVp
Z2h0KCkpID49IDIgKiAoY1JlYWxCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
XSAtIGNCdXR0b25IaXRJbnNldFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldKTsKLX0KLQotYm9v
bCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpoYXNUaHVtYihTY3JvbGxiYXIqIHNjcm9sbGJh
cikKLXsKLSAgICBpbnQgbWluTGVuZ3RoRm9yVGh1bWI7Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3Zl
cmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICBtaW5MZW5ndGhGb3JUaHVtYiA9IHdrU2Nyb2xs
YmFyTWluaW11bVRvdGFsTGVuZ3RoTmVlZGVkRm9yVGh1bWIoc2Nyb2xsYmFyTWFwKCktPmdldChz
Y3JvbGxiYXIpLmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIG1pbkxlbmd0aEZvclRodW1iID0g
MiAqIGNCdXR0b25JbnNldFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgY1RodW1iTWluTGVu
Z3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyAxOwotICAgIHJldHVybiBzY3JvbGxiYXIt
PmVuYWJsZWQoKSAmJiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIgPwotICAgICAgICAgICAgIHNjcm9sbGJhci0+d2lkdGgoKSA6Ci0gICAgICAgICAgICAg
c2Nyb2xsYmFyLT5oZWlnaHQoKSkgPj0gbWluTGVuZ3RoRm9yVGh1bWI7Ci19Ci0KLXN0YXRpYyBJ
bnRSZWN0IGJ1dHRvblJlcGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGJ1dHRvblJlY3QsIFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSwgYm9vbCBzdGFydCkKLXsKLSAgICBBU1NFUlQoZ0J1dHRvblBsYWNlbWVudCAhPSBTY3Jv
bGxiYXJCdXR0b25zTm9uZSk7Ci0KLSAgICBJbnRSZWN0IHBhaW50UmVjdChidXR0b25SZWN0KTsK
LSAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBw
YWludFJlY3Quc2V0V2lkdGgoY1JlYWxCdXR0b25MZW5ndGhbY29udHJvbFNpemVdKTsKLSAgICAg
ICAgaWYgKCFzdGFydCkKLSAgICAgICAgICAgIHBhaW50UmVjdC5zZXRYKGJ1dHRvblJlY3QueCgp
IC0gKGNSZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xTaXplXSAtIGJ1dHRvblJlY3Qud2lkdGgoKSkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhaW50UmVjdC5zZXRIZWlnaHQoY1JlYWxCdXR0b25M
ZW5ndGhbY29udHJvbFNpemVdKTsKLSAgICAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgICAgIHBh
aW50UmVjdC5zZXRZKGJ1dHRvblJlY3QueSgpIC0gKGNSZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xT
aXplXSAtIGJ1dHRvblJlY3QuaGVpZ2h0KCkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFpbnRS
ZWN0OwotfQotCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmJhY2tCdXR0b25S
ZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRp
bmcpCi17Ci0gICAgSW50UmVjdCByZXN1bHQ7Ci0KLSAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9u
U3RhcnRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUg
fHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQg
JiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25z
UGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0IHx8IGJ1dHRvbnNQbGFj
ZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLQotICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpKTsKLSAgICBib29sIG91dGVyQnV0dG9uID0gcGFydCA9PSBCYWNrQnV0dG9u
U3RhcnRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJs
ZVN0YXJ0IHx8IGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlQm90
aCk7Ci0gICAgaWYgKG91dGVyQnV0dG9uKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJlc3VsdCA9IElu
dFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBjT3V0ZXJCdXR0b25MZW5ndGhb
c2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIChwYWludGluZyA/IGNPdXRlckJ1dHRvbk92ZXJs
YXAgOiAwKSwgdGhpY2tuZXNzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0g
SW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHRoaWNrbmVzcywgY091dGVy
QnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyAocGFpbnRpbmcgPyBjT3V0
ZXJCdXR0b25PdmVybGFwIDogMCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQot
ICAgIC8vIE91ciByZXBhaW50IHJlY3QgaXMgc2xpZ2h0bHkgbGFyZ2VyLCBzaW5jZSB3ZSBhcmUg
YSBidXR0b24gdGhhdCBpcyBhZGphY2VudCB0byB0aGUgdHJhY2suCi0gICAgaWYgKHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGludCBz
dGFydCA9IHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCA/IHNjcm9sbGJhci0+eCgpIDogc2Ny
b2xsYmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRoKCkgLSBjT3V0ZXJCdXR0b25MZW5ndGhbc2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpXSAtIGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpXTsKLSAgICAgICAgcmVzdWx0ID0gSW50UmVjdChzdGFydCwgc2Nyb2xsYmFyLT55KCks
IGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSwgdGhpY2tuZXNzKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpbnQgc3RhcnQgPSBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBh
cnQgPyBzY3JvbGxiYXItPnkoKSA6IHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQo
KSAtIGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldIC0gY0J1dHRv
bkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldOwotICAgICAgICByZXN1bHQgPSBJbnRS
ZWN0KHNjcm9sbGJhci0+eCgpLCBzdGFydCwgdGhpY2tuZXNzLCBjQnV0dG9uTGVuZ3RoW3Njcm9s
bGJhci0+Y29udHJvbFNpemUoKV0pOwotICAgIH0KLQotICAgIGlmIChwYWludGluZykKLSAgICAg
ICAgcmV0dXJuIGJ1dHRvblJlcGFpbnRSZWN0KHJlc3VsdCwgc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpLCBzY3JvbGxiYXItPmNvbnRyb2xTaXplKCksIHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFy
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUNocm9t
aXVtTWFjOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFy
UGFydCBwYXJ0LCBib29sIHBhaW50aW5nKQotewotICAgIEludFJlY3QgcmVzdWx0OwotCi0gICAg
aWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgJiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9
PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFy
QnV0dG9uc0RvdWJsZVN0YXJ0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlmIChw
YXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgJiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBT
Y3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0
dG9uc0RvdWJsZUVuZCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc1Np
bmdsZSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpbnQgdGhpY2tuZXNzID0gc2Ny
b2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0gICAgaW50IG91dGVy
QnV0dG9uTGVuZ3RoID0gY091dGVyQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUo
KV07Ci0gICAgaW50IGJ1dHRvbkxlbmd0aCA9IGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250
cm9sU2l6ZSgpXTsKLQotICAgIGJvb2wgb3V0ZXJCdXR0b24gPSBwYXJ0ID09IEZvcndhcmRCdXR0
b25FbmRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJs
ZUVuZCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUJvdGgp
OwotICAgIGlmIChvdXRlckJ1dHRvbikgewotICAgICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IElu
dFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRoKCkgLSBvdXRlckJ1dHRvbkxl
bmd0aCwgc2Nyb2xsYmFyLT55KCksIG91dGVyQnV0dG9uTGVuZ3RoLCB0aGlja25lc3MpOwotICAg
ICAgICAgICAgaWYgKHBhaW50aW5nKQotICAgICAgICAgICAgICAgIHJlc3VsdC5pbmZsYXRlWChj
T3V0ZXJCdXR0b25PdmVybGFwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlc3Vs
dCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5o
ZWlnaHQoKSAtIG91dGVyQnV0dG9uTGVuZ3RoLCB0aGlja25lc3MsIG91dGVyQnV0dG9uTGVuZ3Ro
KTsKLSAgICAgICAgICAgIGlmIChwYWludGluZykKLSAgICAgICAgICAgICAgICByZXN1bHQuaW5m
bGF0ZVkoY091dGVyQnV0dG9uT3ZlcmxhcCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0KLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gcGFydCA9PSBGb3J3YXJkQnV0
dG9uRW5kUGFydCA/IHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgpIC0gYnV0dG9u
TGVuZ3RoIDogc2Nyb2xsYmFyLT54KCkgKyBvdXRlckJ1dHRvbkxlbmd0aDsKLSAgICAgICAgcmVz
dWx0ID0gSW50UmVjdChzdGFydCwgc2Nyb2xsYmFyLT55KCksIGJ1dHRvbkxlbmd0aCwgdGhpY2tu
ZXNzKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnQgc3RhcnQgPSBwYXJ0ID09IEZvcndhcmRC
dXR0b25FbmRQYXJ0ID8gc2Nyb2xsYmFyLT55KCkgKyBzY3JvbGxiYXItPmhlaWdodCgpIC0gYnV0
dG9uTGVuZ3RoIDogc2Nyb2xsYmFyLT55KCkgKyBvdXRlckJ1dHRvbkxlbmd0aDsKLSAgICAgICAg
cmVzdWx0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc3RhcnQsIHRoaWNrbmVzcywgYnV0dG9u
TGVuZ3RoKTsKLSAgICB9Ci0gICAgaWYgKHBhaW50aW5nKQotICAgICAgICByZXR1cm4gYnV0dG9u
UmVwYWludFJlY3QocmVzdWx0LCBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIHNjcm9sbGJhci0+
Y29udHJvbFNpemUoKSwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnRyYWNr
UmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9vbCBwYWludGluZykKLXsKLSAgICBpZiAocGFp
bnRpbmcgfHwgIWhhc0J1dHRvbnMoc2Nyb2xsYmFyKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCk7Ci0KLSAgICBJbnRSZWN0IHJlc3VsdDsKLSAgICBpbnQgdGhpY2tuZXNz
ID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0gICAgaW50
IHN0YXJ0V2lkdGggPSAwOwotICAgIGludCBlbmRXaWR0aCA9IDA7Ci0gICAgaW50IG91dGVyQnV0
dG9uTGVuZ3RoID0gY091dGVyQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV07
Ci0gICAgaW50IGJ1dHRvbkxlbmd0aCA9IGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpXTsKLSAgICBpbnQgZG91YmxlQnV0dG9uTGVuZ3RoID0gb3V0ZXJCdXR0b25MZW5ndGgg
KyBidXR0b25MZW5ndGg7Ci0gICAgc3dpdGNoIChidXR0b25zUGxhY2VtZW50KCkpIHsKLSAgICAg
ICAgY2FzZSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlOgotICAgICAgICAgICAgc3RhcnRXaWR0aCA9
IGJ1dHRvbkxlbmd0aDsKLSAgICAgICAgICAgIGVuZFdpZHRoID0gYnV0dG9uTGVuZ3RoOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0
OgotICAgICAgICAgICAgc3RhcnRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQ6Ci0gICAg
ICAgICAgICBlbmRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOgotICAgICAgICAgICAg
c3RhcnRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKLSAgICAgICAgICAgIGVuZFdpZHRoID0g
ZG91YmxlQnV0dG9uTGVuZ3RoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpbnQgdG90YWxXaWR0aCA9IHN0YXJ0
V2lkdGggKyBlbmRXaWR0aDsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgp
ICsgc3RhcnRXaWR0aCwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSAtIHRvdGFs
V2lkdGgsIHRoaWNrbmVzcyk7Ci0gICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNj
cm9sbGJhci0+eSgpICsgc3RhcnRXaWR0aCwgdGhpY2tuZXNzLCBzY3JvbGxiYXItPmhlaWdodCgp
IC0gdG90YWxXaWR0aCk7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjptaW5p
bXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJNaW5p
bXVtVGh1bWJMZW5ndGgoc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHJldHVybiBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpXTsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpzaG91bGRDZW50
ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQotewot
ICAgIGlmIChldnQuYnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChnSnVtcE9uVHJhY2tDbGljaykKLSAgICAgICAgcmV0dXJuICFldnQuYWx0S2V5
KCk7Ci0gICAgcmV0dXJuIGV2dC5hbHRLZXkoKTsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjOjpzaG91bGREcmFnRG9jdW1lbnRJbnN0ZWFkT2ZUaHVtYihTY3JvbGxiYXIqLCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQotewotICAgIHJldHVybiBldmVudC5hbHRL
ZXkoKTsKLX0KLQotc3RhdGljIGludCBzY3JvbGxiYXJQYXJ0VG9ISVByZXNzZWRTdGF0ZShTY3Jv
bGxiYXJQYXJ0IHBhcnQpCi17Ci0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgICAgIGNhc2UgQmFj
a0J1dHRvblN0YXJ0UGFydDoKLSAgICAgICAgICAgIHJldHVybiBrVGhlbWVUb3BPdXRzaWRlQXJy
b3dQcmVzc2VkOwotICAgICAgICBjYXNlIEJhY2tCdXR0b25FbmRQYXJ0OgotICAgICAgICAgICAg
cmV0dXJuIGtUaGVtZVRvcE91dHNpZGVBcnJvd1ByZXNzZWQ7IC8vIFRoaXMgZG9lcyBub3QgbWFr
ZSBtdWNoIHNlbnNlLiAgRm9yIHNvbWUgcmVhc29uIHRoZSBvdXRzaWRlIGNvbnN0YW50IGlzIHJl
cXVpcmVkLgotICAgICAgICBjYXNlIEZvcndhcmRCdXR0b25TdGFydFBhcnQ6Ci0gICAgICAgICAg
ICByZXR1cm4ga1RoZW1lVG9wSW5zaWRlQXJyb3dQcmVzc2VkOwotICAgICAgICBjYXNlIEZvcndh
cmRCdXR0b25FbmRQYXJ0OgotICAgICAgICAgICAgcmV0dXJuIGtUaGVtZUJvdHRvbU91dHNpZGVB
cnJvd1ByZXNzZWQ7Ci0gICAgICAgIGNhc2UgVGh1bWJQYXJ0OgotICAgICAgICAgICAgcmV0dXJu
IGtUaGVtZVRodW1iUHJlc3NlZDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgIH0KLX0KLQogc3RhdGljIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQYWludFN0YXRl
IHNjcm9sbGJhclN0YXRlVG9UaGVtZVN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAg
IGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCkBAIC00NzYsMTMgKzczLDI3IEBAIHN0YXRpYyBQ
bGF0Zm9ybVN1cHBvcnQ6OlRoZW1lUGFpbnRTdGF0ZSAKICAgICByZXR1cm4gUGxhdGZvcm1TdXBw
b3J0OjpTdGF0ZUFjdGl2ZTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp1
cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitzdGF0aWMgdm9pZCBzY3Jv
bGxiYXJQYWludGVyUGFpbnRUcmFjayhTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIs
IGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIENHUmVjdCBm
cmFtZVJlY3QpCiB7Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7
Ci0gICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldEVuYWJsZWQoc2Nyb2xsYmFyTWFwKCktPmdl
dChzY3JvbGxiYXIpLmdldCgpLCBzY3JvbGxiYXItPmVuYWJsZWQoKSk7Ci0gICAgfQorICAgIFtz
Y3JvbGxiYXJQYWludGVyIHNldEVuYWJsZWQ6ZW5hYmxlZF07CisgICAgW3Njcm9sbGJhclBhaW50
ZXIgc2V0Qm91bmRzU2l6ZTogTlNTaXplRnJvbUNHU2l6ZShmcmFtZVJlY3Quc2l6ZSldOworICAg
IFtzY3JvbGxiYXJQYWludGVyIHNldERvdWJsZVZhbHVlOnZhbHVlXTsKKyAgICBbc2Nyb2xsYmFy
UGFpbnRlciBzZXRLbm9iUHJvcG9ydGlvbjpwcm9wb3J0aW9uXTsKKworICAgIC8vIFRoZSBzY3Jv
bGxiYXIncyBmcmFtZVJlY3QgaW5jbHVkZXMgYSBzaWRlIGluc2V0IGZvciBvdmVybGF5IHNjcm9s
bGVycywgc28gd2UgaGF2ZSB0byB1c2UgdGhlIAorICAgIC8vIHRyYWNrV2lkdGggZm9yIGRyYXdL
bm9iU2xvdEluUmVjdAorICAgIE5TUmVjdCB0cmFja1JlY3Q7CisgICAgaWYgKFtzY3JvbGxiYXJQ
YWludGVyIGlzSG9yaXpvbnRhbF0pCisgICAgICAgIHRyYWNrUmVjdCA9IE5TTWFrZVJlY3QoMCwg
MCwgZnJhbWVSZWN0LnNpemUud2lkdGgsIFtzY3JvbGxiYXJQYWludGVyIHRyYWNrV2lkdGhdKTsK
KyAgICBlbHNlCisgICAgICAgIHRyYWNrUmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgW3Njcm9sbGJh
clBhaW50ZXIgdHJhY2tXaWR0aF0sIGZyYW1lUmVjdC5zaXplLmhlaWdodCk7CisgICAgW3Njcm9s
bGJhclBhaW50ZXIgZHJhd0tub2JTbG90SW5SZWN0OnRyYWNrUmVjdCBoaWdobGlnaHQ6Tk9dOwog
fQogCisvLyBPdmVycmlkZSBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQoKSB0byBhZGQgc3VwcG9y
dCBmb3IgdGhlIGZvbGxvd2luZzoKKy8vICAgICAtIGRyYXdpbmcgdXNpbmcgUGxhdGZvcm1TdXBw
b3J0IGZ1bmN0aW9ucworLy8gICAgIC0gZHJhd2luZyB0aWNrbWFya3MKKy8vICAgICAtIFNraWEg
c3BlY2lmaWMgY2hhbmdlcwogYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludChT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBkYW1hZ2VSZWN0KQogewogICAgIC8vIEdldCB0aGUgdGlja21hcmtzIGZvciB0aGUgZnJh
bWV2aWV3LgpAQCAtNTEwLDMzICsxMjEsMzIgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjpwYWludChTYwogICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKICAgICAgICAgfQogCi0g
ICAgICAgIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIHNjcm9sbEFuaW1hdG9yID0gc3RhdGlj
X2Nhc3Q8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyo+KHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFy
ZWEoKS0+c2Nyb2xsQW5pbWF0b3IoKSk7CiAjaWYgIVVTRShTS0lBKQotICAgICAgICBzY3JvbGxB
bmltYXRvci0+c2V0SXNEcmF3aW5nSW50b0xheWVyKGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQo
KSk7CisgICAgICAgIHNldElzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcihjb250ZXh0LT5pc0NB
TGF5ZXJDb250ZXh0KCkpOwogI2Vsc2UKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPnNldElzRHJh
d2luZ0ludG9MYXllcihmYWxzZSk7CisgICAgICAgIHNldElzQ3VycmVudGx5RHJhd2luZ0ludG9M
YXllcihmYWxzZSk7CiAjZW5kaWYKIAogICAgICAgICBDR0Zsb2F0IG9sZEtub2JBbHBoYSA9IDA7
CiAgICAgICAgIENHRmxvYXQgb2xkVHJhY2tBbHBoYSA9IDA7CiAgICAgICAgIGJvb2wgaGFzVGlj
a21hcmtzID0gdGlja21hcmtzLnNpemUoKSA+IDAgJiYgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsU2Nyb2xsYmFyOworICAgICAgICBTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJh
clBhaW50ZXIgPSBwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgICAgIGlmICho
YXNUaWNrbWFya3MpIHsKLSAgICAgICAgICBvbGRLbm9iQWxwaGEgPSB3a1Njcm9sbGJhclBhaW50
ZXJLbm9iQWxwaGEocGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpKTsKLSAgICAgICAgICB3
a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEocGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxi
YXIpLCAxLjApOwotICAgICAgICAgIG9sZFRyYWNrQWxwaGEgPSB3a1Njcm9sbGJhclBhaW50ZXJU
cmFja0FscGhhKHBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSk7Ci0gICAgICAgICAgd2tT
ZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJh
ciksIDEuMCk7CisgICAgICAgICAgICBvbGRLbm9iQWxwaGEgPSBbc2Nyb2xsYmFyUGFpbnRlciBr
bm9iQWxwaGFdOworICAgICAgICAgICAgW3Njcm9sbGJhclBhaW50ZXIgc2V0S25vYkFscGhhOjEu
MF07CisgICAgICAgICAgICBvbGRUcmFja0FscGhhID0gW3Njcm9sbGJhclBhaW50ZXIgdHJhY2tB
bHBoYV07CisgICAgICAgICAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRUcmFja0FscGhhOjEuMF07
CiAgICAgICAgIH0KIAogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmNvbnRleHQpOwogICAgICAgICBjb250ZXh0LT5jbGlwKGRhbWFnZVJlY3QpOwogICAgICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCksIHNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCkueSgpKTsKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0
IGxvY2FsQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHNj
cm9sbGJhclBhaW50ZXIgPSBzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCk7Ci0g
ICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50VHJhY2soc2Nyb2xsYmFyUGFpbnRlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmVuYWJsZWQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFy
LT52aXNpYmxlU2l6ZSgpKSAtIG92ZXJoYW5nKSAvIHNjcm9sbGJhci0+dG90YWxTaXplKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KSk7CisgICAgICAgIHNjcm9sbGJhclBhaW50ZXJQYWludFRyYWNrKHNjcm9sbGJhclBhaW50ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhci0+ZW5hYmxlZCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PENHRmxvYXQ+KHNjcm9sbGJhci0+
dmlzaWJsZVNpemUoKSkgLSBvdmVyaGFuZykgLyBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsK
IAogICAgICAgICBJbnRSZWN0IHRpY2ttYXJrVHJhY2tSZWN0KEludFBvaW50KCksIHRyYWNrUmVj
dChzY3JvbGxiYXIsIGZhbHNlKS5zaXplKCkpOwogICAgICAgICBpZiAodGlja21hcmtUcmFja1Jl
Y3Qud2lkdGgoKSA8PSAxMCkgewpAQCAtNTUwLDEzICsxNjAsMTQgQEAgYm9vbCBTY3JvbGxiYXJU
aGVtZUNocm9taXVtTWFjOjpwYWludChTYwogICAgICAgICB9CiAgICAgICAgIHBhaW50R2l2ZW5U
aWNrbWFya3MoY29udGV4dCwgc2Nyb2xsYmFyLCB0aWNrbWFya1RyYWNrUmVjdCwgdGlja21hcmtz
KTsKIAotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJQYWludEtub2Ioc2Nyb2xsYmFyUGFpbnRl
cik7CisgICAgICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkKKyAgICAgICAgICAgIFtzY3Jv
bGxiYXJQYWludGVyIGRyYXdLbm9iXTsKIAotICAgICAgICBzY3JvbGxBbmltYXRvci0+c2V0SXNE
cmF3aW5nSW50b0xheWVyKGZhbHNlKTsKKyAgICAgICAgc2V0SXNDdXJyZW50bHlEcmF3aW5nSW50
b0xheWVyKGZhbHNlKTsKIAogICAgICAgICBpZiAoaGFzVGlja21hcmtzKSB7Ci0gICAgICAgICAg
d2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHNjcm9sbGJhclBhaW50ZXIsIG9sZEtub2JB
bHBoYSk7Ci0gICAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShzY3JvbGxi
YXJQYWludGVyLCBvbGRUcmFja0FscGhhKTsKKyAgICAgICAgICAgIFtzY3JvbGxiYXJQYWludGVy
IHNldEtub2JBbHBoYTpvbGRLbm9iQWxwaGFdOworICAgICAgICAgICAgW3Njcm9sbGJhclBhaW50
ZXIgc2V0VHJhY2tBbHBoYTpvbGRUcmFja0FscGhhXTsKICAgICAgICAgfQogCiAgICAgICAgIHJl
dHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0VtcHR5UHJvdG9j
b2xEZWZpbml0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9FbXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaAkocmV2aXNpb24gMTAzMjgwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0VtcHR5UHJvdG9jb2xEZWZpbml0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiBFTVBUWV9QUk9UT0NPTChOU1RhYmxlVmlld0RhdGFT
b3VyY2UpCiBFTVBUWV9QUk9UT0NPTChOU1RhYmxlVmlld0RlbGVnYXRlKQogRU1QVFlfUFJPVE9D
T0woTlNXaW5kb3dEZWxlZ2F0ZSkKK0VNUFRZX1BST1RPQ09MKE5TQW5pbWF0aW9uRGVsZWdhdGUp
CiAKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNTY3JvbGxl
ckltcERldGFpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
TlNTY3JvbGxlckltcERldGFpbHMuaAkocmV2aXNpb24gMTAzMjgwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDcgKzI4LDI4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIFVTRShTQ1JPTExC
QVJfUEFJTlRFUikKKy8vIFB1YmxpYyBBUElzIG5vdCBhdmFpbGFibGUgb24gdmVyc2lvbnMgb2Yg
TWFjIG9uIHdoaWNoIHdlIGJ1aWxkCisjaWYgKGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkg
fHwgZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpKQorZW51bSB7CisgICAgTlNTY3Jv
bGxlclN0eWxlTGVnYWN5ICAgICAgID0gMCwKKyAgICBOU1Njcm9sbGVyU3R5bGVPdmVybGF5ICAg
ICAgPSAxCit9OwordHlwZWRlZiBOU0ludGVnZXIgTlNTY3JvbGxlclN0eWxlOworCitlbnVtIHsK
KyAgICBOU1Njcm9sbGVyS25vYlN0eWxlRGVmYXVsdCA9IDAsCisgICAgTlNTY3JvbGxlcktub2JT
dHlsZURhcmsgPSAxLAorICAgIE5TU2Nyb2xsZXJLbm9iU3R5bGVMaWdodCA9IDIKK307Cit0eXBl
ZGVmIE5TSW50ZWdlciBOU1Njcm9sbGVyS25vYlN0eWxlOworI2VuZGlmCisKKyNpZiAoZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkpCitAaW50ZXJmYWNlIE5TU2Nyb2xsZXIoTlNPYmplY3QpCisrIChOU1Njcm9sbGVyU3R5bGUp
cHJlZmVycmVkU2Nyb2xsZXJTdHlsZTsKK0BlbmQKKyNlbmRpZgorCiBAaW50ZXJmYWNlIE5TT2Jq
ZWN0IChTY3JvbGxiYXJQYWludGVyKQogKyAoaWQpc2Nyb2xsZXJJbXBXaXRoU3R5bGU6KE5TU2Ny
b2xsZXJTdHlsZSluZXdTY3JvbGxlclN0eWxlIGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKW5l
d0NvbnRyb2xTaXplIGhvcml6b250YWw6KEJPT0wpaG9yaXpvbnRhbCByZXBsYWNpbmdTY3JvbGxl
ckltcDooaWQpcHJldmlvdXM7CiAtIChDR0Zsb2F0KWtub2JBbHBoYTsKQEAgLTgxLDYgKzEwMiwy
NCBAQCBAaW50ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxiYXJQYWludGVyQ29uCiAtICh2b2lkKWJl
Z2luU2Nyb2xsR2VzdHVyZTsKIC0gKHZvaWQpZW5kU2Nyb2xsR2VzdHVyZTsKIEBlbmQKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCitib29sIGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Nj
cm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKQoreworI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRF
UikKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCit9
CisjZW5kaWYKKworTlNTY3JvbGxlclN0eWxlIHJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpOwor
Cit9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xs
ZXJJbXBEZXRhaWxzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTlNTY3JvbGxlckltcERldGFpbHMuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCitib29sIGlz
U2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpCit7CisgICAgc3RhdGljIGJvb2wgYXBpQXZh
aWxhYmxlOworICAgIHN0YXRpYyBib29sIHNob3VsZEluaXRpYWxpemUgPSB0cnVlOworICAgIGlm
IChzaG91bGRJbml0aWFsaXplKSB7CisgICAgICAgIHNob3VsZEluaXRpYWxpemUgPSBmYWxzZTsK
KyAgICAgICAgQ2xhc3Mgc2Nyb2xsZXJJbXBDbGFzcyA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiTlNT
Y3JvbGxlckltcCIpOworICAgICAgICBDbGFzcyBzY3JvbGxlckltcFBhaXJDbGFzcyA9IE5TQ2xh
c3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcFBhaXIiKTsKKyAgICAgICAgYXBpQXZhaWxhYmxl
ID0gW3Njcm9sbGVySW1wQ2xhc3MgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzY3JvbGxl
ckltcFdpdGhTdHlsZTpjb250cm9sU2l6ZTpob3Jpem9udGFsOnJlcGxhY2luZ1Njcm9sbGVySW1w
OildCisgICAgICAgICAgICAgICAgICAgICAgICYmIFtzY3JvbGxlckltcFBhaXJDbGFzcyBpbnN0
YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2Nyb2xsZXJTdHlsZSldOworICAgIH0K
KyAgICByZXR1cm4gYXBpQXZhaWxhYmxlOworfQorI2VuZGlmCisKK05TU2Nyb2xsZXJTdHlsZSBy
ZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSB7CisgICAgaWYgKFtOU1Njcm9sbGVyIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IocHJlZmVycmVkU2Nyb2xsZXJTdHlsZSldKQorICAgICAgICBy
ZXR1cm4gW05TU2Nyb2xsZXIgcHJlZmVycmVkU2Nyb2xsZXJTdHlsZV07CisgICAgcmV0dXJuIE5T
U2Nyb2xsZXJTdHlsZUxlZ2FjeTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHJldmlzaW9uIDEwMzI4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw5ICs0Niw3IEBAIGNsYXNzIFdlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWcKIGNsYXNzIFdlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKICNlbmRpZgogCi0jaWYg
VVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogdHlwZWRlZiBpZCBTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlcjsKLSNlbmRpZgogCiAjaWYgIUVOQUJMRShSVUJCRVJfQkFORElORykKIGNsYXNzIFNjcm9s
bEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50IHsgfTsKQEAgLTg2LDEzICs4NCwxMSBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY3RpdmUoKTsKIAotI2lmIFVTRShTQ1JPTExC
QVJfUEFJTlRFUikKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKIAogICAgIGJvb2wg
c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgY29uc3Q7CiAgICAgdm9pZCBzdGFydFNjcm9s
bGJhclBhaW50VGltZXIoKTsKICAgICB2b2lkIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0j
ZW5kaWYKIAogICAgIHZvaWQgc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJl
Y3QmKTsKIApAQCAtMTAwLDcgKzk2LDYgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ+IG1f
c2Nyb2xsQW5pbWF0aW9uSGVscGVyOwogICAgIFJldGFpblB0cjxXZWJTY3JvbGxBbmltYXRpb25I
ZWxwZXJEZWxlZ2F0ZT4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKIAotI2lmIFVT
RShTQ1JPTExCQVJfUEFJTlRFUikKICAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXI+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7CiAgICAgUmV0YWluUHRyPFdlYlNj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJEZWxlZ2F0ZTsKICAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRl
PiBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CkBAIC0xMDgsNyArMTAzLDYg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZChU
aW1lcjxTY3JvbGxBbmltYXRvck1hYz4qKTsKICAgICBUaW1lcjxTY3JvbGxBbmltYXRvck1hYz4g
bV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKLSNlbmRpZgogICAgIAogICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFy
ZWFXaWxsUGFpbnQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHJldmlzaW9uIDEwMzI4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgiCiAKICNpbmNs
dWRlICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJFbXB0eVByb3RvY29sRGVmaW5pdGlv
bnMuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiTlNTY3JvbGxlckltcERl
dGFpbHMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgpAQCAtNDUsNyArNDYs
MTIgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAot
I2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKKyNpZmRlZiBCVUlMRElOR19PTl9MRU9QQVJECitA
aW50ZXJmYWNlIE5TUHJvY2Vzc0luZm8gKFNjcm9sbEFuaW1hdG9yTWFjRXh0KQorLSAoTlNUaW1l
SW50ZXJ2YWwpc3lzdGVtVXB0aW1lOworQGVuZAorI2VuZGlmCisKIHN0YXRpYyBib29sIHN1cHBv
cnRzVUlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzcygpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
dGVtcG9yYXJ5IHVudGlsIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IFNjcm9sbGJhclBhaW50
ZXIgc3VwcG9ydCB0aGlzIHBhcnQgb2YgdGhlIEFQSS4KQEAgLTY2LDcgKzcyLDYgQEAgc3RhdGlj
IFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlcgogCiAgICAgcmV0dXJuIG5pbDsKIH0K
LSNlbmRpZgogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxBbmltYXRpb25IZWxwZXJEZXRh
aWxzKQogLSAoaWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQpZGVsZWdhdGU7CkBAIC0xNzIsOCArMTc3
LDYgQEAgLSAodm9pZClfcmVjdXJzaXZlUmVjb21wdXRlVG9vbFRpcHMKIAogQGVuZAogCi0jaWYg
VVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotCiBAaW50ZXJmYWNlIFdlYlNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGUgOiBOU09iamVjdAogewogICAgIFNjcm9sbGFibGVBcmVhKiBfc2Ny
b2xsYWJsZUFyZWE7CkBAIC00MDksNiArNDEyLDcgQEAgLSAoTlNSZWN0KWNvbnZlcnRSZWN0RnJv
bUJhY2tpbmc6KE5TUmVjdAogICAgIHJldHVybiBhUmVjdDsKIH0KIAorI2lmICFQTEFURk9STShD
SFJPTUlVTSkKIC0gKENBTGF5ZXIgKilsYXllcgogewogICAgIGlmICghX3Njcm9sbGJhcikKQEAg
LTQyMSw2ICs0MjUsNyBAQCAtIChDQUxheWVyICopbGF5ZXIKICAgICBzdGF0aWMgQ0FMYXllciAq
ZHVtbXlMYXllciA9IFtbQ0FMYXllciBhbGxvY10gaW5pdF07CiAgICAgcmV0dXJuIGR1bW15TGF5
ZXI7CiB9CisjZW5kaWYKIAogLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5TY3JvbGxlckZvclNj
cm9sbGVySW1wOihpZClzY3JvbGxlckltcAogewpAQCAtNTQxLDggKzU0Niw2IEBAIC0gKHZvaWQp
aW52YWxpZGF0ZQogCiBAZW5kCiAKLSNlbmRpZiAvLyBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xs
QW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCkBAIC01NTIs
OSArNTU1LDcgQEAgUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0bwogCiBT
Y3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEqIHNjcm9s
bGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCi0jaWYgVVNF
KFNDUk9MTEJBUl9QQUlOVEVSKQogICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcih0
aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQp
Ci0jZW5kaWYKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgLCBtX3Njcm9sbEVsYXN0
aWNpdHlDb250cm9sbGVyKHRoaXMpCiAgICAgLCBtX3NuYXBSdWJiZXJCYW5kVGltZXIodGhpcywg
JlNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpCkBAIC01NjUsMjUg
KzU2NiwyNSBAQCBTY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0b3JNYWMoU2NyCiAgICAg
bV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbV2ViU2Nyb2xsQW5pbWF0
aW9uSGVscGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOwog
ICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmFkb3B0TlMoW1tOU0NsYXNzRnJvbVN0cmluZyhA
Ik5TU2Nyb2xsQW5pbWF0aW9uSGVscGVyIikgYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6bV9zY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKV0pOwogCi0jaWYgVVNFKFNDUk9MTEJBUl9Q
QUlOVEVSKQotICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5hZG9wdE5T
KFtbV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhT
Y3JvbGxhYmxlQXJlYTpzY3JvbGxhYmxlQXJlYV0pOwotICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIgPSBbW1tOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXBQYWlyIikgYWxs
b2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSBzZXREZWxlZ2F0ZTptX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUu
Z2V0KCldOwotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldFNjcm9s
bGVyU3R5bGU6d2tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKV07Ci0jZW5kaWYKKyAgICBpZiAo
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGFibGVBcmVhOnNjcm9sbGFibGVB
cmVhXSk7CisgICAgICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgPSBbW1tOU0NsYXNz
RnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXBQYWlyIikgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdh
dGU6bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpXTsKKyAgICAgICAg
W21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0U2Nyb2xsZXJTdHlsZTpyZWNv
bW1lbmRlZFNjcm9sbGVyU3R5bGUoKV07CisgICAgfQogfQogCiBTY3JvbGxBbmltYXRvck1hYzo6
flNjcm9sbEFuaW1hdG9yTWFjKCkKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbbV9ob3Jpem9udGFsU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwotICAgIFttX3ZlcnRpY2Fs
U2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwotICAgIFttX3Njcm9s
bEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwotICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJ
QXZhaWxhYmxlKCkpIHsKKyAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
ICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpIGludmFsaWRh
dGVdOworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXREZWxl
Z2F0ZTpuaWxdOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRl
LmdldCgpIGludmFsaWRhdGVdOworICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZS5nZXQoKSBpbnZhbGlkYXRlXTsKKyAgICAgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07CisgICAgICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CisgICAgfQogfQogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGwoU2Ny
b2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQpAQCAtNjk1LDEzICs2OTYsMTMgQEAg
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVAogCiB2b2lkIFNjcm9sbEFu
aW1hdG9yTWFjOjpub3RpZnlQb3NpdGlvbkNoYW5nZWQoKQogewotI2lmIFVTRShTQ1JPTExCQVJf
UEFJTlRFUikKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyBn
b2luZyBpbnRvIHRoZSBwYWdlIGNhY2hlLCBidXQgdGhlIHBhZ2UgCi0gICAgLy8gaXNuJ3QgcmVh
bGx5IHNjcm9sbGluZyBpbiB0aGF0IGNhc2UuIFdlIHNob3VsZCBvbmx5IHBhc3MgdGhlIG1lc3Nh
Z2Ugb24gdG8gdGhlCi0gICAgLy8gU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgd2hlbiB3ZSdy
ZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFuIGFjdGl2ZSBwYWdlLgotICAgIGlmIChzY3JvbGxhYmxl
QXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQotICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlci5nZXQoKSBjb250ZW50QXJlYVNjcm9sbGVkXTsKLSNlbmRpZgorICAgIGlmIChpc1Nj
cm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyBnb2luZyBpbnRvIHRoZSBwYWdlIGNhY2hlLCBidXQg
dGhlIHBhZ2UgCisgICAgICAgIC8vIGlzbid0IHJlYWxseSBzY3JvbGxpbmcgaW4gdGhhdCBjYXNl
LiBXZSBzaG91bGQgb25seSBwYXNzIHRoZSBtZXNzYWdlIG9uIHRvIHRoZQorICAgICAgICAvLyBT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlciB3aGVuIHdlJ3JlIHJlYWxseSBzY3JvbGxpbmcgb24g
YW4gYWN0aXZlIHBhZ2UuCisgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZl
UGFnZSgpKQorICAgICAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkg
Y29udGVudEFyZWFTY3JvbGxlZF07CisgICAgfQogICAgIFNjcm9sbEFuaW1hdG9yOjpub3RpZnlQ
b3NpdGlvbkNoYW5nZWQoKTsKIH0KIApAQCAtNzA5LDIxNCArNzEwLDE5MCBAQCB2b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYVdpbGxQCiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJl
YSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJB
Ul9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGNvbnRl
bnRBcmVhV2lsbERyYXddOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2
YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBj
b250ZW50QXJlYVdpbGxEcmF3XTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VF
bnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+
aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJ
TlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBtb3VzZUVudGVy
ZWRDb250ZW50QXJlYV07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIG1v
dXNlRW50ZXJlZENvbnRlbnRBcmVhXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91
c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgp
LT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9Q
QUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIG1vdXNlRXhp
dGVkQ29udGVudEFyZWFdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2
YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBt
b3VzZUV4aXRlZENvbnRlbnRBcmVhXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91
c2VNb3ZlZEluQ29udGVudEFyZWEoKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEo
KS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJf
UEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBtb3VzZU1v
dmVkSW5Db250ZW50QXJlYV07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJ
QXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgp
IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
bW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewogICAg
IGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJu
OwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBpZiAoIXN1cHBvcnRzVUlTdGF0ZVRy
YW5zaXRpb25Qcm9ncmVzcygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKFNjcm9sbGJhclBh
aW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSkK
LSAgICAgICAgW3BhaW50ZXIgbW91c2VFbnRlcmVkU2Nyb2xsZXJdOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlB
UElBdmFpbGFibGUoKSkgeworICAgICAgICBpZiAoIXN1cHBvcnRzVUlTdGF0ZVRyYW5zaXRpb25Q
cm9ncmVzcygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoU2Nyb2xsYmFyUGFp
bnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpKQor
ICAgICAgICAgICAgW3BhaW50ZXIgbW91c2VFbnRlcmVkU2Nyb2xsZXJdOworICAgIH0KIH0KIAog
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZl
UGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAg
IGlmICghc3VwcG9ydHNVSVN0YXRlVHJhbnNpdGlvblByb2dyZXNzKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRlckZv
clNjcm9sbGJhcihzY3JvbGxiYXIpKQotICAgICAgICBbcGFpbnRlciBtb3VzZUV4aXRlZFNjcm9s
bGVyXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7Ci0jZW5kaWYKKyAgICBp
ZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKCFzdXBw
b3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JT
Y3JvbGxiYXIoc2Nyb2xsYmFyKSkKKyAgICAgICAgICAgIFtwYWludGVyIG1vdXNlRXhpdGVkU2Ny
b2xsZXJdOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2
ZVJlc2l6ZSgpCiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgp
KQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHN0YXJ0TGl2ZVJlc2l6ZV07Ci0jZW5kaWYK
KyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHN0YXJ0TGl2ZVJlc2l6ZV07CiB9CiAKIHZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0CiB7CiAgICAgaWYg
KCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0j
aWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyLmdldCgpIGNvbnRlbnRBcmVhRGlkUmVzaXplXTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9s
bGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkgY29udGVudEFyZWFEaWRSZXNpemVdOwogfQogCiB2b2lkIFNjcm9sbEFu
aW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJl
YSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJB
Ul9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGVuZExp
dmVSZXNpemVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJs
ZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBlbmRMaXZl
UmVzaXplXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93
KCkgY29uc3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkp
CiAgICAgICAgIHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgW21fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgd2luZG93T3JkZXJlZEluXTsKLSNlbmRpZgor
ICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgd2luZG93T3JkZXJlZEluXTsKIH0KIAogdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29uc3QKIHsKICAgICBp
ZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsK
LSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIuZ2V0KCkgd2luZG93T3JkZXJlZE91dF07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxi
YXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpIHdpbmRvd09yZGVyZWRPdXRdOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJs
ZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JP
TExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBi
ZWdpblNjcm9sbEdlc3R1cmVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQ
SUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQo
KSBiZWdpblNjcm9sbEdlc3R1cmVdOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRF
bmRTY3JvbGxHZXN0dXJlKCkgY29uc3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlz
T25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5U
RVIpCi0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgZW5kU2Nyb2xsR2Vz
dHVyZV07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkp
CisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGVuZFNjcm9sbEdl
c3R1cmVdOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9s
bGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIp
Ci0gICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9s
bGJhcihzY3JvbGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKCFtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlKTsKLSAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOwotCi0gICAg
W3BhaW50ZXIgc2V0RGVsZWdhdGU6bV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5n
ZXQoKV07Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0VmVydGlj
YWxTY3JvbGxlckltcDpwYWludGVyXTsKLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZl
UmVzaXplKCkpCi0gICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKLQotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92
ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIg
PSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgICAgIGlmICgh
cGFpbnRlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQoIW1fdmVydGlj
YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
UGFpbnRlckRlbGVnYXRlLmFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgYWxs
b2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOworCisgICAgICAgIFtwYWludGVyIHNl
dERlbGVnYXRlOm1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCldOworICAg
ICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRWZXJ0aWNhbFNjcm9s
bGVySW1wOnBhaW50ZXJdOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVz
aXplKCkpCisgICAgICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07CisgICAgfQogfQog
CiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFNj
cm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Ny
b2xsYmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNT
Y3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgU2Nyb2xsYmFyUGFpbnRl
ciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAg
ICAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJU
KG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUpOworICAgICAgICBbbV92ZXJ0aWNh
bFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBpbnZhbGlkYXRlXTsKKyAgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSA9IG51bGxwdHI7CiAKLSAgICBBU1NFUlQo
bV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSk7Ci0gICAgW21fdmVydGljYWxTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07Ci0gICAgbV92ZXJ0aWNhbFNj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSA9IG51bGxwdHI7Ci0KLSAgICBbcGFpbnRlciBzZXREZWxl
Z2F0ZTpuaWxdOwotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldFZl
cnRpY2FsU2Nyb2xsZXJJbXA6bmlsXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJh
cik7Ci0jZW5kaWYKKyAgICAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAg
W21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0VmVydGljYWxTY3JvbGxlcklt
cDpuaWxdOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkSG9yaXpv
bnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFS
X1BBSU5URVIpCi0gICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRl
ckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKCFtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUp
OwotICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbV2Vi
U2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpzY3JvbGxi
YXJdKTsKLQotICAgIFtwYWludGVyIHNldERlbGVnYXRlOm1faG9yaXpvbnRhbFNjcm9sbGJhclBh
aW50ZXJEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIu
Z2V0KCkgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwotICAgIGlmIChzY3JvbGxh
YmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKLSAgICAgICAgW3BhaW50ZXIgc2V0S25vYkFscGhh
OjFdOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRpZgorICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBTY3JvbGxiYXJQ
YWludGVyIHBhaW50ZXIgPSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7
CisgICAgICAgIGlmICghcGFpbnRlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBB
U1NFUlQoIW1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSk7CisgICAgICAgIG1f
aG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbV2ViU2Nyb2xsYmFy
UGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpzY3JvbGxiYXJdKTsKKwor
ICAgICAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTptX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVy
RGVsZWdhdGUuZ2V0KCldOworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5n
ZXQoKSBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6cGFpbnRlcl07CisgICAgICAgIGlmIChzY3Jv
bGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgICAgIFtwYWludGVyIHNldEtu
b2JBbHBoYToxXTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1v
dmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotI2lmIFVTRShT
Q1JPTExCQVJfUEFJTlRFUikKLSAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBzY3JvbGxi
YXJQYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWludGVyKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7
CisgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JT
Y3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgaWYgKCFwYWludGVyKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIEFTU0VSVChtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUpOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdl
dCgpIGludmFsaWRhdGVdOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUgPSBudWxscHRyOwogCi0gICAgQVNTRVJUKG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZSk7Ci0gICAgW21faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5n
ZXQoKSBpbnZhbGlkYXRlXTsKLSAgICBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUgPSBudWxscHRyOwotCi0gICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbbV9z
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6
bmlsXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7Ci0jZW5kaWYKKyAgICAg
ICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOm5pbF07CisgICAgfQog
fQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjYW5jZWxBbmltYXRpb25zKCkKIHsKICAgICBt
X2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBmYWxzZTsKIAotI2lmIFVTRShTQ1JPTExCQVJf
UEFJTlRFUikKLSAgICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkpCi0gICAgICAg
IHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0gICAgW21faG9yaXpvbnRhbFNjcm9sbGJhclBh
aW50ZXJEZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKLSAgICBbbV92ZXJ0aWNhbFNj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKLSNlbmRpZgor
ICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBpZiAo
c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkpCisgICAgICAgICAgICBzdG9wU2Nyb2xsYmFy
UGFpbnRUaW1lcigpOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlLmdldCgpIGNhbmNlbEFuaW1hdGlvbnNdOworICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJh
clBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKKyAgICB9CiB9CiAKICNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCkBAIC0xNDA0LDE1ICsxMzgxLDE3IEBAIHZvaWQgU2Ny
b2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJiZXJCYW5kVGkKIAogdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6c2V0SXNBY3RpdmUoKQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBpZiAo
bmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKCkpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGVyU3R5bGUo
KTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewor
ICAgICAgICBpZiAobmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKCkpCisgICAgICAgICAgICB1cGRh
dGVTY3JvbGxlclN0eWxlKCk7CisgICAgfQogfQogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVS
KQogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6dXBkYXRlU2Nyb2xsZXJTdHlsZSgpCiB7CisgICAg
aWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKSB7CiAgICAgICAg
IHNldE5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSh0cnVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MTQ4NiwxMiArMTQ2NSwxMyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzdG9wU2Nyb2xsYmFy
UGFpCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVy
RmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JNYWM+KikKIHsKLSAgICAvLyBUbyBmb3JjZSB0aGUg
c2Nyb2xsYmFycyB0byBmbGFzaCwgd2UgaGF2ZSB0byBjYWxsIGhpZGUgZmlyc3QuIE90aGVyd2lz
ZSwgdGhlIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyCi0gICAgLy8gbWlnaHQgdGhpbmsgdGhh
dCB0aGUgc2Nyb2xsYmFycyBhcmUgYWxyZWFkeSBzaG93aW5nIGFuZCBiYWlsIGVhcmx5LgotICAg
IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGhpZGVPdmVybGF5U2Nyb2xsZXJz
XTsKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBmbGFzaFNjcm9sbGVy
c107CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7CisgICAgICAg
IC8vIFRvIGZvcmNlIHRoZSBzY3JvbGxiYXJzIHRvIGZsYXNoLCB3ZSBoYXZlIHRvIGNhbGwgaGlk
ZSBmaXJzdC4gT3RoZXJ3aXNlLCB0aGUgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIKKyAgICAg
ICAgLy8gbWlnaHQgdGhpbmsgdGhhdCB0aGUgc2Nyb2xsYmFycyBhcmUgYWxyZWFkeSBzaG93aW5n
IGFuZCBiYWlsIGVhcmx5LgorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5n
ZXQoKSBoaWRlT3ZlcmxheVNjcm9sbGVyc107CisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpIGZsYXNoU2Nyb2xsZXJzXTsKKyAgICB9CiB9Ci0jZW5kaWYKIAogdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IElu
dFJlY3QmIHNjcm9sbGVyVGh1bWIpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaAkocmV2aXNpb24g
MTAzMjgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIAogI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKIAotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2lu
Y2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
YmFyVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsYmFyVGhlbWVNYWMuaAkocmV2aXNpb24gMTAzMjgwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkg
KzI4LDcgQEAKIAogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmgiCiAKLSNpZiBV
U0UoU0NST0xMQkFSX1BBSU5URVIpCiB0eXBlZGVmIGlkIFNjcm9sbGJhclBhaW50ZXI7Ci0jZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0MSw5IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyKik7CiAKKyNpZiAh
UExBVEZPUk0oQ0hST01JVU0pCiAgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhciosIEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisjZW5k
aWYKIAogICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9s
U2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOwogICAgIApAQCAtNTksMTIgKzU5LDExIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAgICAg
dmlydHVhbCB2b2lkIHVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAKLSNpZiBVU0Uo
U0NST0xMQkFSX1BBSU5URVIpCiAgICAgdm9pZCBzZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKFNj
cm9sbGJhciosIFNjcm9sbGJhclBhaW50ZXIpOwogICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRl
ckZvclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKIAogICAgIHN0YXRpYyBib29sIGlzQ3VycmVudGx5
RHJhd2luZ0ludG9MYXllcigpOwotI2VuZGlmCisgICAgc3RhdGljIHZvaWQgc2V0SXNDdXJyZW50
bHlEcmF3aW5nSW50b0xheWVyKGJvb2wpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29s
IGhhc0J1dHRvbnMoU2Nyb2xsYmFyKik7CkBAIC04MCw2ICs3OSw3IEBAIHByb3RlY3RlZDoKICAg
ICAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHJhZ0RvY3Vt
ZW50SW5zdGVhZE9mVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7
CisgICAgaW50IHNjcm9sbGJhclBhcnRUb0hJUHJlc3NlZFN0YXRlKFNjcm9sbGJhclBhcnQpOwog
fTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1l
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxi
YXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTAzMjgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYs
NyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0j
aWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogdHlwZWRlZiBIYXNoTWFwPFNjcm9sbGJhciosIFJl
dGFpblB0cjxTY3JvbGxiYXJQYWludGVyPiA+IFNjcm9sbGJhclBhaW50ZXJNYXA7Ci0jZWxzZQot
dHlwZWRlZiBIYXNoU2V0PFNjcm9sbGJhcio+IFNjcm9sbGJhclBhaW50ZXJNYXA7Ci0jZW5kaWYK
IAogc3RhdGljIFNjcm9sbGJhclBhaW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCiB7CkBAIC03Niwx
OCArNzIsMTcgQEAgKyAodm9pZClhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOihOU05vdGlmaQogewog
ICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwogCisgICAgU2Nyb2xsYmFyVGhl
bWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7CisgICAgaWYgKHRoZW1lLT5pc01v
Y2tUaGVtZSgpKQorICAgICAgICByZXR1cm47CisKICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJU
aGVtZU1hYyo+KFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpKS0+cHJlZmVyZW5jZXNDaGFuZ2VkKCk7
CiAgICAgaWYgKHNjcm9sbGJhck1hcCgpLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBTY3JvbGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBlbmQgPSBzY3JvbGxiYXJNYXAoKS0+ZW5k
KCk7CiAgICAgZm9yIChTY3JvbGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBpdCA9IHNjcm9sbGJh
ck1hcCgpLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BB
SU5URVIpCiAgICAgICAgIGl0LT5maXJzdC0+c3R5bGVDaGFuZ2VkKCk7CiAgICAgICAgIGl0LT5m
aXJzdC0+aW52YWxpZGF0ZSgpOwotI2Vsc2UKLSAgICAgICAgKCppdCktPnN0eWxlQ2hhbmdlZCgp
OwotICAgICAgICAoKml0KS0+aW52YWxpZGF0ZSgpOwotI2VuZGlmCiAgICAgfQogfQogCkBAIC05
NSw2ICs5MCwxMCBAQCArICh2b2lkKWJlaGF2aW9yUHJlZnNDaGFuZ2VkOihOU05vdGlmaWNhCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNhdGlvbik7CiAKKyAgICBTY3JvbGxiYXJU
aGVtZSogdGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKKyAgICBpZiAodGhlbWUtPmlz
TW9ja1RoZW1lKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHN0YXRpY19jYXN0PFNjcm9sbGJh
clRoZW1lTWFjKj4oU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkpLT5wcmVmZXJlbmNlc0NoYW5nZWQo
KTsKIH0KIApAQCAtMTA4LDIyICsxMDcsMjIgQEAgKyAodm9pZClyZWdpc3RlckFzT2JzZXJ2ZXIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQogU2Nyb2xs
YmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCiB7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTY3JvbGxiYXJUaGVtZU1hYywgdGhlbWUsICgpKTsKICAgICByZXR1cm4gJnRo
ZW1lOwogfQorI2VuZGlmCiAKIC8vIEZJWE1FOiBHZXQgdGhlc2UgbnVtYmVycyBmcm9tIENvcmVV
SS4KIHN0YXRpYyBpbnQgY1JlYWxCdXR0b25MZW5ndGhbXSA9IHsgMjgsIDIxIH07CiBzdGF0aWMg
aW50IGNCdXR0b25IaXRJbnNldFtdID0geyAzLCAyIH07CiAvLyBjUmVhbEJ1dHRvbkxlbmd0aCAt
IGNCdXR0b25JbnNldAogc3RhdGljIGludCBjQnV0dG9uTGVuZ3RoW10gPSB7IDE0LCAxMCB9Owot
I2lmICFVU0UoU0NST0xMQkFSX1BBSU5URVIpCiBzdGF0aWMgaW50IGNTY3JvbGxiYXJUaGlja25l
c3NbXSA9IHsgMTUsIDExIH07CiBzdGF0aWMgaW50IGNCdXR0b25JbnNldFtdID0geyAxNCwgMTEg
fTsKIHN0YXRpYyBpbnQgY1RodW1iTWluTGVuZ3RoW10gPSB7IDI2LCAyMCB9OwotI2VuZGlmCiAK
IHN0YXRpYyBpbnQgY091dGVyQnV0dG9uTGVuZ3RoW10gPSB7IDE2LCAxNCB9OyAvLyBUaGUgb3V0
ZXIgYnV0dG9uIGluIGEgZG91YmxlIGJ1dHRvbiBwYWlyIGlzIGEgYml0IGJpZ2dlci4KIHN0YXRp
YyBpbnQgY091dGVyQnV0dG9uT3ZlcmxhcCA9IDI7CkBAIC0xMzIsMTcgKzEzMSwxMyBAQCBzdGF0
aWMgZmxvYXQgZ0luaXRpYWxCdXR0b25EZWxheSA9IDAuNWY7CiBzdGF0aWMgZmxvYXQgZ0F1dG9z
Y3JvbGxCdXR0b25EZWxheSA9IDAuMDVmOwogc3RhdGljIGJvb2wgZ0p1bXBPblRyYWNrQ2xpY2sg
PSBmYWxzZTsKIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLXN0YXRpYyBTY3JvbGxiYXJC
dXR0b25zUGxhY2VtZW50IGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zTm9uZTsK
LSNlbHNlCiBzdGF0aWMgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBnQnV0dG9uUGxhY2VtZW50
ID0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZDsKLSNlbmRpZgogCiBzdGF0aWMgdm9pZCB1cGRh
dGVBcnJvd1BsYWNlbWVudCgpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIHJl
dHVybjsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgTlNTdHJpbmcgKmJ1dHRvblBsYWNlbWVudCA9IFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIG9iamVjdEZvcktleTpAIkFwcGxlU2Ny
b2xsQmFyVmFyaWFudCJdOwogICAgIGlmIChbYnV0dG9uUGxhY2VtZW50IGlzRXF1YWxUb1N0cmlu
ZzpAIlNpbmdsZSJdKQogICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0dG9u
c1NpbmdsZTsKQEAgLTE1OCwxNSArMTUzLDE1IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUFycm93UGxh
Y2VtZW50KCkKIAogdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIGJv
b2wgaXNIb3Jpem9udGFsID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXI7Ci0gICAgU2Nyb2xsYmFyUGFpbnRlciBzY3JvbGxiYXJQYWludGVyID0gW05TQ2xh
c3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcCIpIHNjcm9sbGVySW1wV2l0aFN0eWxlOndrUmVj
b21tZW5kZWRTY3JvbGxlclN0eWxlKCkgY29udHJvbFNpemU6KE5TQ29udHJvbFNpemUpc2Nyb2xs
YmFyLT5jb250cm9sU2l6ZSgpIGhvcml6b250YWw6aXNIb3Jpem9udGFsIHJlcGxhY2luZ1Njcm9s
bGVySW1wOm5pbF07Ci0gICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIsIHNjcm9sbGJh
clBhaW50ZXIpOwotICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzY3JvbGxiYXIpOwotICAgIHVwZGF0
ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXIpOwotI2Vsc2UKLSAgICBzY3JvbGxiYXJN
YXAoKS0+YWRkKHNjcm9sbGJhcik7Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5
QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgYm9vbCBpc0hvcml6b250YWwgPSBzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICAgICAgU2Nyb2xsYmFy
UGFpbnRlciBzY3JvbGxiYXJQYWludGVyID0gW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxl
ckltcCIpIHNjcm9sbGVySW1wV2l0aFN0eWxlOnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpIGNv
bnRyb2xTaXplOihOU0NvbnRyb2xTaXplKXNjcm9sbGJhci0+Y29udHJvbFNpemUoKSBob3Jpem9u
dGFsOmlzSG9yaXpvbnRhbCByZXBsYWNpbmdTY3JvbGxlckltcDpuaWxdOworICAgICAgICBzY3Jv
bGxiYXJNYXAoKS0+YWRkKHNjcm9sbGJhciwgc2Nyb2xsYmFyUGFpbnRlcik7CisgICAgICAgIHVw
ZGF0ZUVuYWJsZWRTdGF0ZShzY3JvbGxiYXIpOworICAgICAgICB1cGRhdGVTY3JvbGxiYXJPdmVy
bGF5U3R5bGUoc2Nyb2xsYmFyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzY3JvbGxiYXJNYXAo
KS0+YWRkKHNjcm9sbGJhciwgbmlsKTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVN
YWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCkBAIC0xNzQsNyAr
MTY5LDYgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6dW5yZWdpc3RlclNjcm9sbAogICAgIHNj
cm9sbGJhck1hcCgpLT5yZW1vdmUoc2Nyb2xsYmFyKTsKIH0KIAotI2lmIFVTRShTQ1JPTExCQVJf
UEFJTlRFUikKIHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnNldE5ld1BhaW50ZXJGb3JTY3JvbGxi
YXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhaW50ZXIgbmV3UGFpbnRlcikKIHsK
ICAgICBzY3JvbGxiYXJNYXAoKS0+c2V0KHNjcm9sbGJhciwgbmV3UGFpbnRlcik7CkBAIC0xOTQs
MTMgKzE4OCwxNyBAQCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjppc0N1cnJlbnRseURyYXdpCiAg
ICAgcmV0dXJuIGdfaXNDdXJyZW50bHlEcmF3aW5nSW50b0xheWVyOwogfQogCi0jZW5kaWYKK3Zv
aWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnNldElzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcihib29s
IGIpCit7CisgICAgZ19pc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIgPSBiOworfQogCiBTY3Jv
bGxiYXJUaGVtZU1hYzo6U2Nyb2xsYmFyVGhlbWVNYWMoKQogewogICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkOwogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgaW5pdGlhbGl6ZWQg
PSB0cnVlOworICAgICAgICBnQnV0dG9uUGxhY2VtZW50ID0gaXNTY3JvbGxiYXJPdmVybGF5QVBJ
QXZhaWxhYmxlKCkgPyBTY3JvbGxiYXJCdXR0b25zTm9uZSA6IFNjcm9sbGJhckJ1dHRvbnNEb3Vi
bGVFbmQ7CiAgICAgICAgIFtXZWJTY3JvbGxiYXJQcmVmc09ic2VydmVyIHJlZ2lzdGVyQXNPYnNl
cnZlcl07CiAgICAgICAgIHByZWZlcmVuY2VzQ2hhbmdlZCgpOwogICAgIH0KQEAgLTIyMiwyNiAr
MjIwLDIzIEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnByZWZlcmVuY2VzQ2hhbmcKIAogaW50
IFNjcm9sbGJhclRoZW1lTWFjOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNp
emUgY29udHJvbFNpemUpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFNjcm9s
bGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciA9IFtOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Ny
b2xsZXJJbXAiKSBzY3JvbGxlckltcFdpdGhTdHlsZTp3a1JlY29tbWVuZGVkU2Nyb2xsZXJTdHls
ZSgpIGNvbnRyb2xTaXplOmNvbnRyb2xTaXplIGhvcml6b250YWw6Tk8gcmVwbGFjaW5nU2Nyb2xs
ZXJJbXA6bmlsXTsKLSAgICByZXR1cm4gW3Njcm9sbGJhclBhaW50ZXIgdHJhY2tCb3hXaWR0aF07
Ci0jZWxzZQotICAgIHJldHVybiBjU2Nyb2xsYmFyVGhpY2tuZXNzW2NvbnRyb2xTaXplXTsKLSNl
bmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAg
ICBTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIgPSBbTlNDbGFzc0Zyb21TdHJpbmco
QCJOU1Njcm9sbGVySW1wIikgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6cmVjb21tZW5kZWRTY3JvbGxl
clN0eWxlKCkgY29udHJvbFNpemU6Y29udHJvbFNpemUgaG9yaXpvbnRhbDpOTyByZXBsYWNpbmdT
Y3JvbGxlckltcDpuaWxdOworICAgICAgICByZXR1cm4gW3Njcm9sbGJhclBhaW50ZXIgdHJhY2tC
b3hXaWR0aF07CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBjU2Nyb2xsYmFyVGhpY2tuZXNz
W2NvbnRyb2xTaXplXTsKIH0KIAogYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6dXNlc092ZXJsYXlT
Y3JvbGxiYXJzKCkgY29uc3QKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgcmV0
dXJuIHdrUmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgPT0gTlNTY3JvbGxlclN0eWxlT3Zlcmxh
eTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFy
T3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gcmVjb21tZW5kZWRTY3JvbGxl
clN0eWxlKCkgPT0gTlNTY3JvbGxlclN0eWxlT3ZlcmxheTsKKyAgICBlbHNlCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6dXBkYXRlU2Nyb2xsYmFy
T3ZlcmxheVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotI2lmIFVTRShTQ1JPTExCQVJf
UEFJTlRFUikKICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBwYWludGVyRm9yU2Nyb2xs
YmFyKHNjcm9sbGJhcik7CiAgICAgc3dpdGNoIChzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCkt
PnNjcm9sbGJhck92ZXJsYXlTdHlsZSgpKSB7CiAgICAgY2FzZSBTY3JvbGxiYXJPdmVybGF5U3R5
bGVEZWZhdWx0OgpAQCAtMjU0LDkgKzI0OSw2IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnVw
ZGF0ZVNjcm9sbGJhck8KICAgICAgICAgW3BhaW50ZXIgc2V0S25vYlN0eWxlOk5TU2Nyb2xsZXJL
bm9iU3R5bGVMaWdodF07CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHNjcm9sbGJhcik7Ci0jZW5kaWYKIH0KIAogZG91YmxlIFNjcm9sbGJhclRoZW1lTWFj
Ojppbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKQpAQCAtMjc2LDcgKzI2OCw3IEBAIFNjcm9s
bGJhckJ1dHRvbnNQbGFjZW1lbnQgU2Nyb2xsYmFyVGhlbWUKIAogYm9vbCBTY3JvbGxiYXJUaGVt
ZU1hYzo6aGFzQnV0dG9ucyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSAgICByZXR1cm4gc2Ny
b2xsYmFyLT5lbmFibGVkKCkgJiYgZ0J1dHRvblBsYWNlbWVudCAhPSBTY3JvbGxiYXJCdXR0b25z
Tm9uZQorICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKSAmJiBidXR0b25zUGxhY2VtZW50
KCkgIT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUKICAgICAgICAgICAgICAmJiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIKICAgICAgICAgICAgICA/IHNjcm9s
bGJhci0+d2lkdGgoKQogICAgICAgICAgICAgIDogc2Nyb2xsYmFyLT5oZWlnaHQoKSkgPj0gMiAq
IChjUmVhbEJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldIC0gY0J1dHRvbkhp
dEluc2V0W3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0pOwpAQCAtMjg1LDEzICsyNzcsMTIgQEAg
Ym9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6aGFzQnV0dG9ucyhTY3JvbAogYm9vbCBTY3JvbGxiYXJU
aGVtZU1hYzo6aGFzVGh1bWIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgaW50IG1pbkxl
bmd0aEZvclRodW1iOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBTY3JvbGxiYXJQ
YWludGVyIHBhaW50ZXIgPSBzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCk7Ci0g
ICAgbWluTGVuZ3RoRm9yVGh1bWIgPSBbcGFpbnRlciBrbm9iTWluTGVuZ3RoXSArIFtwYWludGVy
IHRyYWNrT3ZlcmxhcEVuZEluc2V0XSArIFtwYWludGVyIGtub2JPdmVybGFwRW5kSW5zZXRdCi0g
ICAgICAgICsgMiAqIChbcGFpbnRlciB0cmFja0VuZEluc2V0XSArIFtwYWludGVyIGtub2JFbmRJ
bnNldF0pOwotI2Vsc2UKLSAgICBtaW5MZW5ndGhGb3JUaHVtYiA9IDIgKiBjQnV0dG9uSW5zZXRb
c2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIGNUaHVtYk1pbkxlbmd0aFtzY3JvbGxiYXItPmNv
bnRyb2xTaXplKCldICsgMTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElB
dmFpbGFibGUoKSkgeworICAgICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBzY3JvbGxi
YXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCk7CisgICAgICAgIG1pbkxlbmd0aEZvclRodW1i
ID0gW3BhaW50ZXIga25vYk1pbkxlbmd0aF0gKyBbcGFpbnRlciB0cmFja092ZXJsYXBFbmRJbnNl
dF0gKyBbcGFpbnRlciBrbm9iT3ZlcmxhcEVuZEluc2V0XQorICAgICAgICAgICAgKyAyICogKFtw
YWludGVyIHRyYWNrRW5kSW5zZXRdICsgW3BhaW50ZXIga25vYkVuZEluc2V0XSk7CisgICAgfSBl
bHNlCisgICAgICAgIG1pbkxlbmd0aEZvclRodW1iID0gMiAqIGNCdXR0b25JbnNldFtzY3JvbGxi
YXItPmNvbnRyb2xTaXplKCldICsgY1RodW1iTWluTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNp
emUoKV0gKyAxOwogICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKSAmJiAoc2Nyb2xsYmFy
LT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyAKICAgICAgICAgICAgICBz
Y3JvbGxiYXItPndpZHRoKCkgOiAKICAgICAgICAgICAgICBzY3JvbGxiYXItPmhlaWdodCgpKSA+
PSBtaW5MZW5ndGhGb3JUaHVtYjsKQEAgLTQyOCwxMSArNDE5LDEwIEBAIEludFJlY3QgU2Nyb2xs
YmFyVGhlbWVNYWM6OnRyYWNrUmVjdChTY3IKIAogaW50IFNjcm9sbGJhclRoZW1lTWFjOjptaW5p
bXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJB
Ul9QQUlOVEVSKQotICAgIHJldHVybiBbc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdl
dCgpIGtub2JNaW5MZW5ndGhdOwotI2Vsc2UKLSAgICByZXR1cm4gY1RodW1iTWluTGVuZ3RoW3Nj
cm9sbGJhci0+Y29udHJvbFNpemUoKV07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVy
bGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBbc2Nyb2xsYmFyTWFwKCktPmdldChz
Y3JvbGxiYXIpLmdldCgpIGtub2JNaW5MZW5ndGhdOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IGNUaHVtYk1pbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldOwogfQogCiBib29sIFNj
cm9sbGJhclRoZW1lTWFjOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZ0KQpAQCAtNDQ5LDcgKzQzOSw3IEBAIGJvb2wgU2Nyb2xsYmFy
VGhlbWVNYWM6OnNob3VsZERyYWdEb2N1bWUKICAgICByZXR1cm4gZXZlbnQuYWx0S2V5KCk7CiB9
CiAKLXN0YXRpYyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUoU2Nyb2xsYmFyUGFy
dCBwYXJ0KQoraW50IFNjcm9sbGJhclRoZW1lTWFjOjpzY3JvbGxiYXJQYXJ0VG9ISVByZXNzZWRT
dGF0ZShTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAg
IGNhc2UgQmFja0J1dHRvblN0YXJ0UGFydDoKQEAgLTQ2OSwxNCArNDU5LDEwIEBAIHN0YXRpYyBp
bnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUKIAogdm9pZCBTY3JvbGxiYXJUaGVtZU1h
Yzo6dXBkYXRlRW5hYmxlZFN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotI2lmIFVTRShT
Q1JPTExCQVJfUEFJTlRFUikKLSAgICBbc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdl
dCgpIHNldEVuYWJsZWQ6c2Nyb2xsYmFyLT5lbmFibGVkKCldOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElB
dmFpbGFibGUoKSkKKyAgICAgICAgW3Njcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQo
KSBzZXRFbmFibGVkOnNjcm9sbGJhci0+ZW5hYmxlZCgpXTsKIH0KIAotI2lmIFVTRShTQ1JPTExC
QVJfUEFJTlRFUikKIHN0YXRpYyB2b2lkIHNjcm9sbGJhclBhaW50ZXJQYWludChTY3JvbGxiYXJQ
YWludGVyIHNjcm9sbGJhclBhaW50ZXIsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBDR0Zs
b2F0IHByb3BvcnRpb24sIENHUmVjdCBmcmFtZVJlY3QpCiB7CiAgICAgW3Njcm9sbGJhclBhaW50
ZXIgc2V0RW5hYmxlZDplbmFibGVkXTsKQEAgLTQ5OCw0NSArNDg0LDQ1IEBAIHN0YXRpYyB2b2lk
IHNjcm9sbGJhclBhaW50ZXJQYWludChTY3JvbGwKICAgICBpZiAoZW5hYmxlZCkKICAgICAgICAg
W3Njcm9sbGJhclBhaW50ZXIgZHJhd0tub2JdOwogfQotI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0o
Q0hST01JVU0pCiBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
KQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBmbG9hdCB2YWx1ZSA9IDA7Ci0g
ICAgZmxvYXQgb3ZlcmhhbmcgPSAwOworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFp
bGFibGUoKSkgeworICAgICAgICBmbG9hdCB2YWx1ZSA9IDA7CisgICAgICAgIGZsb2F0IG92ZXJo
YW5nID0gMDsKIAotICAgIGlmIChzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSA8IDApIHsKLSAgICAg
ICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgdG9wLgotICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAg
IG92ZXJoYW5nID0gLXNjcm9sbGJhci0+Y3VycmVudFBvcygpOwotICAgIH0gZWxzZSBpZiAoc2Ny
b2xsYmFyLT52aXNpYmxlU2l6ZSgpICsgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgPiBzY3JvbGxi
YXItPnRvdGFsU2l6ZSgpKSB7Ci0gICAgICAgIC8vIFNjcm9sbGVkIHBhc3QgdGhlIGJvdHRvbS4K
LSAgICAgICAgdmFsdWUgPSAxOwotICAgICAgICBvdmVyaGFuZyA9IHNjcm9sbGJhci0+Y3VycmVu
dFBvcygpICsgc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpIC0gc2Nyb2xsYmFyLT50b3RhbFNpemUo
KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXaXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgc2Ny
b2xsYWJsZSBhcmVhLgotICAgICAgICBpbnQgbWF4aW11bSA9IHNjcm9sbGJhci0+bWF4aW11bSgp
OwotICAgICAgICBpZiAobWF4aW11bSA+IDApCi0gICAgICAgICAgICB2YWx1ZSA9IHNjcm9sbGJh
ci0+Y3VycmVudFBvcygpIC8gbWF4aW11bTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAoc2Ny
b2xsYmFyLT5jdXJyZW50UG9zKCkgPCAwKSB7CisgICAgICAgICAgICAvLyBTY3JvbGxlZCBwYXN0
IHRoZSB0b3AuCiAgICAgICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgfQorICAgICAgICAgICAgb3Zl
cmhhbmcgPSAtc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2Ny
b2xsYmFyLT52aXNpYmxlU2l6ZSgpICsgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgPiBzY3JvbGxi
YXItPnRvdGFsU2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBTY3JvbGxlZCBwYXN0IHRoZSBib3R0
b20uCisgICAgICAgICAgICB2YWx1ZSA9IDE7CisgICAgICAgICAgICBvdmVyaGFuZyA9IHNjcm9s
bGJhci0+Y3VycmVudFBvcygpICsgc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpIC0gc2Nyb2xsYmFy
LT50b3RhbFNpemUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdpdGhpbiB0
aGUgYm91bmRzIG9mIHRoZSBzY3JvbGxhYmxlIGFyZWEuCisgICAgICAgICAgICBpbnQgbWF4aW11
bSA9IHNjcm9sbGJhci0+bWF4aW11bSgpOworICAgICAgICAgICAgaWYgKG1heGltdW0gPiAwKQor
ICAgICAgICAgICAgICAgIHZhbHVlID0gc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgLyBtYXhpbXVt
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAg
fQogCi0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGlzQ3VycmVudGx5RHJhd2luZ0ludG9MYXll
cihnX2lzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllciwgY29udGV4dC0+aXNDQUxheWVyQ29udGV4
dCgpKTsKLSAgICAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNv
bnRleHQpOwotICAgIGNvbnRleHQtPmNsaXAoZGFtYWdlUmVjdCk7Ci0gICAgY29udGV4dC0+dHJh
bnNsYXRlKHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgp
LnkoKSk7Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChjb250
ZXh0KTsKLSAgICBzY3JvbGxiYXJQYWludGVyUGFpbnQoc2Nyb2xsYmFyTWFwKCktPmdldChzY3Jv
bGxiYXIpLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhci0+ZW5h
YmxlZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDxDR0Zsb2F0PihzY3JvbGxiYXItPnZpc2libGVT
aXplKCkpIC0gb3ZlcmhhbmcpIC8gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICAgICAgVGVtcG9y
YXJ5Q2hhbmdlPGJvb2w+IGlzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcihnX2lzQ3VycmVudGx5
RHJhd2luZ0ludG9MYXllciwgY29udGV4dC0+aXNDQUxheWVyQ29udGV4dCgpKTsKKyAgICAgICAg
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7
CisgICAgICAgIGNvbnRleHQtPmNsaXAoZGFtYWdlUmVjdCk7CisgICAgICAgIGNvbnRleHQtPnRy
YW5zbGF0ZShzY3JvbGxiYXItPmZyYW1lUmVjdCgpLngoKSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KS55KCkpOworICAgICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0
KGNvbnRleHQpOworICAgICAgICBzY3JvbGxiYXJQYWludGVyUGFpbnQoc2Nyb2xsYmFyTWFwKCkt
PmdldChzY3JvbGxiYXIpLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y3JvbGxiYXItPmVuYWJsZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDxDR0Zsb2F0
PihzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIC0gb3ZlcmhhbmcpIC8gc2Nyb2xsYmFyLT50b3Rh
bFNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT5mcmFt
ZVJlY3QoKSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CiAKICAgICBISVRoZW1lVHJhY2tEcmF3SW5mbyB0cmFja0luZm87CiAgICAgdHJh
Y2tJbmZvLnZlcnNpb24gPSAwOwpAQCAtNjAxLDYgKzU4Nyw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhl
bWVNYWM6OnBhaW50KFNjcm9sbGJhcioKIAogICAgIHJldHVybiB0cnVlOwogfQorI2VuZGlmCiAK
IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120046</attachid>
            <date>2011-12-20 11:12:27 -0800</date>
            <delta_ts>2011-12-20 15:14:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61144-20111220111226.patch</filename>
            <type>text/plain</type>
            <size>154344</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDExLTEyLTE5ICBTYWlsZXNo
IEFncmF3YWwgPHNhaWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1lcmdlIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMubW0gYmFjayB0byBTY3JvbGxBbmltYXRvck1hYworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExNDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBCZXRoIERha2luLgorCisgICAgICAgIEF0IGEgaGlnaCBsZXZlbCB0aGUgbWFpbiBj
aGFuZ2VzIGFyZToKKyAgICAgICAgICAgIC0gcmVwbGFjZSAjaWZkZWZzIGluIFNjcm9sbEFuaW1h
dG9yTWFjIGFuZCBTY3JvbGxiYXJUaGVtZU1hYyB3aXRoIHJ1biB0aW1lIGNoZWNrcworICAgICAg
ICAgICAgLSBkZWxldGUgZHVwbGljYXRlIGNvZGUgaW4gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yy4gS2VlcCB0aGUgcGFpbnQgY29kZSBzaW5jZSBpdCBkb2VzIHRpY2ttYXJrcyBhbmQgU0tJQSBz
dHVmZi4KKyAgICAgICAgICAgIC0gZGVsZXRlIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMgc2lu
Y2UgU2Nyb2xsQW5pbWF0b3JNYWMgZG9lcyB0aGUgZXhhY3Qgc2FtZSB0aGluZworICAgICAgICAg
ICAgLSBkZWxldGUgU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjIHNpbmNlIE5T
U2Nyb2xsZXJJbXBEZXRhaWxzIGRvZXMgdGhlIHNhbWUgdGhpbmcKKworICAgICAgICBObyBuZXcg
dGVzdHMuIEp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRp
ZXNDaHJvbWl1bU1hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lQ2hyb21pdW1NYWM6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMpOgorICAgICAgICAo
V2ViQ29yZTo6c2Nyb2xsYmFyUGFpbnRlclBhaW50VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9FbXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvTlNT
Y3JvbGxlckltcERldGFpbHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYmFyT3Zlcmxh
eUFQSUF2YWlsYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRh
aWxzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2
YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAgICAgICAgKHNjcm9sbGJhclBhaW50
ZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OlNj
cm9sbEFuaW1hdG9yTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp+
U2Nyb2xsQW5pbWF0b3JNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6
Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JNYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZFNjcm9sbGJhcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJlc2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudHNSZXNpemVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRT
aG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURp
ZEhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Ny
b2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkRW5k
U2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JN
YWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck1hYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNhbmNlbEFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNldElzQWN0aXZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp1cGRhdGVTY3JvbGxlclN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRU
aW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06CisgICAgICAgICgrW1dl
YlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgYXBwZWFyYW5jZVByZWZzQ2hhbmdlZDpdKToKKyAgICAg
ICAgKCtbV2ViU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciBiZWhhdmlvclByZWZzQ2hhbmdlZDpdKToK
KyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUFycm93UGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lTWFjOjpyZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6c2V0SXNDdXJyZW50bHlEcmF3aW5nSW50b0xheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjpTY3JvbGxiYXJUaGVtZU1hYyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyVGhpY2tuZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjp1c2VzT3ZlcmxheVNjcm9s
bGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZVNjcm9s
bGJhck92ZXJsYXlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6
aGFzQnV0dG9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6aGFzVGh1
bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6Om1pbmltdW1UaHVtYkxl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyUGFy
dFRvSElQcmVzc2VkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6
OnVwZGF0ZUVuYWJsZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJQYWludGVy
UGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50KToKKwog
MjAxMS0xMi0xOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIFNlbmQgZ2VzdHVyZSBldmVudHMgdGhyb3VnaCB0aGUgZXZlbnQgZGlzcGF0Y2hlciBhbmQg
c2Nyb2xsaW5nIGNvb3JkaW5hdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDMy
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMz
MDgsMTAgKzMzMDgsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTGlz
dEJveC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVQcml2YXRl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9t
aXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYy5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjLm1tJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCcsCi0gICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLm1tJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVt
TGludXguY3BwJywKQEAgLTQxNTUsNiArNDE1MSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
bWFjL0xvY2FsaXplZFN0cmluZ3NNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9M
b2dnaW5nTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvTUlNRVR5cGVSZWdpc3Ry
eU1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxz
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbScs
CiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRIZWxwZXIuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL21hYy9QbGF0Zm9ybUNsb2NrQ0EuY3BwJywKQEAgLTQxNjYsNiArNDE2NCw4IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vbWFjL1NjaGVkdWxlUGFpck1hYy5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Nj
cm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9T
Y3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFj
L1Njcm9sbFZpZXdNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3JvbGxiYXJU
aGVtZU1hYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMu
bW0nLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9u
IDEwMzI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjk5LDEzICsxMjk5LDEzIEBACiAgICAgICAgICAgICAgICMgc3VjaCBh
czoKICAgICAgICAgICAgICAgIyBjb20uZ29vZ2xlLkNocm9tZVtdIG9iamNbXTogQ2xhc3MgU2Ny
b2xsYmFyUHJlZnNPYnNlcnZlciBpcyBpbXBsZW1lbnRlZCBpbiBib3RoIC4uLi9Hb29nbGUgQ2hy
b21lLmFwcC9Db250ZW50cy9WZXJzaW9ucy8uLi4vR29vZ2xlIENocm9tZSBIZWxwZXIuYXBwL0Nv
bnRlbnRzL01hY09TLy4uLy4uLy4uL0dvb2dsZSBDaHJvbWUgRnJhbWV3b3JrLmZyYW1ld29yay9H
b29nbGUgQ2hyb21lIEZyYW1ld29yayBhbmQgL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvV2Vi
S2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvV2ViQ29yZS5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9XZWJDb3JlLiBPbmUgb2YgdGhlIHR3byB3aWxsIGJlIHVzZWQuIFdoaWNoIG9uZSBp
cyB1bmRlZmluZWQuCiAgICAgICAgICAgICAgICdXZWJDYXNjYWRlTGlzdD1DaHJvbWl1bVdlYkNv
cmVPYmpDV2ViQ2FzY2FkZUxpc3QnLAotICAgICAgICAgICAgICAnU2Nyb2xsYmFyUHJlZnNPYnNl
cnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcicsCisgICAgICAg
ICAgICAgICdXZWJTY3JvbGxiYXJQcmVmc09ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNXZWJT
Y3JvbGxiYXJQcmVmc09ic2VydmVyJywKICAgICAgICAgICAgICAgJ1dlYkNvcmVSZW5kZXJUaGVt
ZU5vdGlmaWNhdGlvbk9ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNXZWJDb3JlUmVuZGVyVGhl
bWVOb3RpZmljYXRpb25PYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJGb250Q2FjaGU9Q2hy
b21pdW1XZWJDb3JlT2JqQ1dlYkZvbnRDYWNoZScsCi0gICAgICAgICAgICAgICdTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGUnLAotICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJE
ZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxl
Z2F0ZScsCi0gICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU9Q2hyb21pdW1X
ZWJDb3JlT2JqQ1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZScsCi0gICAgICAgICAgICAgICdTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQYXJ0QW5pbWF0
aW9uJywKKyAgICAgICAgICAgICAgJ1dlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlPUNo
cm9taXVtV2ViQ29yZU9iakNXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZScsCisgICAg
ICAgICAgICAgICdXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlPUNocm9taXVt
V2ViQ29yZU9iakNXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlJywKKyAgICAg
ICAgICAgICAgJ1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpD
V2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlJywKKyAgICAgICAgICAgICAgJ1dlYlNjcm9sbGJh
clBhcnRBbmltYXRpb249Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYlNjcm9sbGJhclBhcnRBbmltYXRp
b24nLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCiAgICAg
ICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2FwcGxlX3dlYmtpdCcs
CkBAIC0xNTY1LDcgKzE1NjUsMTEgQEAKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9tYWMvQmxvY2tFeGNlcHRpb25zXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dFxcLm1tJCddLAorICAg
ICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlsc1xc
Lm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9QdXJnZWFibGVC
dWZmZXJNYWNcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFj
L1Njcm9sbGJhclRoZW1lTWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyXFwubW0kJ10sCiAg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2VcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvV2ViQ29y
ZVRleHRSZW5kZXJlclxcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3Jt
L3RleHQvbWFjL1NoYXBlQXJhYmljXFwuYyQnXSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwMzI4MCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1MSw2ICsxNTUxLDcgQEAKIAkJNTFGQjU1MDUxMTNFM0U5MTAwODIxMTc2
IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAq
LzsgfTsKIAkJNTIxRDQ2RjYxMUFFQzk4MTAwNTE0NjEzIC8qIEtpbGxSaW5nTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxRDQ2RjUxMUFFQzk4
MTAwNTE0NjEzIC8qIEtpbGxSaW5nTWFjLm1tICovOyB9OwogCQk1MjFENDZGODExQUVDOUIxMDA1
MTQ2MTMgLyogS2lsbFJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyMUQ0NkY3MTFBRUM5QjEwMDUxNDYxMyAvKiBLaWxsUmluZy5oICovOyB9Owor
CQk1MkY1MkUxMTE0QTAxMzRGMDBBQ0MzOTcgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY1MkUxMDE0QTAx
MzRGMDBBQ0MzOTcgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0gKi87IH07CiAJCTUzMTc2MTIy
MTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzE3NjEyMDEzQzUxNjY5MDAyNkU0
NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwICovOyB9OwogCQk1MzE3NjEyMzEzQzUxNjY5
MDAyNkU0NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTc2MTIxMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHls
ZUZsZXhpYmxlQm94RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUzMjVFNEQ3MTNBNkM4OEIwMDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyNUU0RDUx
M0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi87IH07CkBAIC04ODIzLDYgKzg4
MjQsNyBAQAogCQk1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyMUQ0NkY1MTFBRUM5ODEwMDUxNDYxMyAvKiBL
aWxsUmluZ01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtp
bGxSaW5nTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjFENDZGNzExQUVD
OUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gS2lsbFJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJGNTJFMTAxNEEw
MTM0RjAwQUNDMzk3IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTlNTY3JvbGxlckltcERldGFpbHMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTc2MTIwMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZs
ZXhpYmxlQm94RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBT
dHlsZUZsZXhpYmxlQm94RGF0YS5jcHA7IHBhdGggPSBzdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTc2MTIxMTNDNTE2NjkwMDI2
RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBTdHlsZUZsZXhpYmxlQm94RGF0YS5oOyBwYXRoID0gc3R5bGUvU3R5bGVGbGV4aWJs
ZUJveERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNUU0RDUxM0E2Qzg4
QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NGbGV4VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTU2MDEsNiArMTU2MDMsNyBAQAogCQkJCTY1N0VEQTBBMTM4NUNCRDgwMDRFMDY0NSAvKiBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW0gKi8sCiAJCQkJQkM3NzJDNUQwQzRFQjM0NDAwODMy
ODVGIC8qIE1JTUVUeXBlUmVnaXN0cnlNYWMubW0gKi8sCiAJCQkJOTM1MDBGMzExM0ZERTNCRTAw
OTlFQzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggKi8sCisJCQkJNTJGNTJFMTAxNEEwMTM0
RjAwQUNDMzk3IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tICovLAogCQkJCUE3RDNDNTIzMEI1
NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggKi8sCiAJCQkJNEIyNzA5ODEwQUYy
RTVFMDAwNjUxMjdGIC8qIFBhc3RlYm9hcmRNYWMubW0gKi8sCiAJCQkJOTM1QzQ3NkYwOUFDNEQ3
MzAwQTZBQUI0IC8qIFBsYXRmb3JtTW91c2VFdmVudE1hYy5tbSAqLywKQEAgLTI3ODUwLDYgKzI3
ODUzLDcgQEAKIAkJCQkxQTFGMjhBMTE0OUU2Mjk4MDBGQkMzNUYgLyogU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBODBBOTQyMzE0OUYyMjVFMDA5ODkyOTEg
LyogSlNET01XaW5kb3dXZWJBdWRpb0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBB
OTQyNTE0OUYyMjcxMDA5ODkyOTEgLyogSlNET01XaW5kb3dXZWJTb2NrZXRDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTJGNTJFMTExNEEwMTM0RjAwQUNDMzk3IC8qIE5TU2Nyb2xsZXJJ
bXBEZXRhaWxzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5o
CShyZXZpc2lvbiAxMDMyODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNf
aAotI2RlZmluZSBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjX2gKLQotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJPdmVybGF5VXRp
bGl0aWVzQ2hyb21pdW1NYWMuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgU2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGU7Ci1AY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwotQGNsYXNzIFNj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7Ci1AY2xhc3MgU2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlOwotI2Vsc2UKLWNsYXNzIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOwot
Y2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwotY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJEZWxlZ2F0ZTsKLWNsYXNzIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGJhcjsKLQotY2xhc3MgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7Ci1wdWJsaWM6
Ci0gICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhTY3JvbGxhYmxlQXJlYSop
OwotICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBm
bG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9P
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLQotI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmKSBPVkVSUklERTsKLSNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMp
Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1
cmVFdmVudCYpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxBbmlt
YXRpb25zKCk7Ci0KLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgbmV3UG9zaXRpb24pOwotICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZmxv
YXQgZGVsdGFYKTsKLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGZsb2F0IGRlbHRh
WSk7Ci0KLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOwotCi0gICAgdm9pZCBzZXRJc0RyYXdpbmdJ
bnRvTGF5ZXIoYm9vbCBiKSB7IG1fZHJhd2luZ0ludG9MYXllciA9IGI7IH0KLSAgICBib29sIGlz
RHJhd2luZ0ludG9MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0ludG9MYXllcjsgfQot
Ci0gICAgYm9vbCBoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9o
YXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY3Rp
dmUoKTsKLQotI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLSAgICB2b2lkIHVwZGF0ZVNj
cm9sbGVyU3R5bGUoKTsKLQotICAgIGJvb2wgc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzdGFydFNjcm9sbGJhclBhaW50VGltZXIoKTsKLSAgICB2b2lkIHN0
b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0VmlzaWJsZVNj
cm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJlY3QmKTsKLQotcHJpdmF0ZToKLSAgICBSZXRhaW5Q
dHI8aWQ+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyOwotICAgIFJldGFpblB0cjxTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZT4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKLQot
I2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLSAgICBSZXRhaW5QdHI8V0tTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlclJlZj4gbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlcjsKLSAgICBS
ZXRhaW5QdHI8U2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZT4gbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlOwotICAgIFJldGFpblB0cjxpZD4gbV9zY3JvbGxiYXJQ
YWludGVyRGVsZWdhdGU7Ci0KLSAgICB2b2lkIGluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmly
ZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKTsKLSAgICBUaW1lcjxTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjPiBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyOwotI2VuZGlm
Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpOwotICAgIHZp
cnR1YWwgdm9pZCBjb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBtb3Vz
ZUV4aXRlZENvbnRlbnRBcmVhKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxTdGFydExpdmVSZXNp
emUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNSZXNpemVkKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRB
cmVhRGlkU2hvdygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZEhpZGUo
KSBjb25zdDsKLSAgICB2b2lkIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OwotICAgIHZv
aWQgZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGRpZEFk
ZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVt
b3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFk
ZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxS
ZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwotCi0gICAgdm9pZCBzZXROZWVk
c1Njcm9sbGVyU3R5bGVVcGRhdGUoYm9vbCBuZWVkc1VwZGF0ZSkgeyBtX25lZWRzU2Nyb2xsZXJT
dHlsZVVwZGF0ZSA9IG5lZWRzVXBkYXRlOyB9Ci0gICAgYm9vbCBuZWVkc1Njcm9sbGVyU3R5bGVV
cGRhdGUoKSBjb25zdCB7IHJldHVybiBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZTsgfQotCi0g
ICAgZmxvYXQgYWRqdXN0U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQpIGNvbnN0Owot
ICAgIGZsb2F0IGFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsK
LSAgICBGbG9hdFBvaW50IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0OwotCi0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGJvb2wg
YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd3NIb3Jpem9u
dGFsU3RyZXRjaGluZygpIGNvbnN0OwotICAgIGJvb2wgcGlubmVkSW5EaXJlY3Rpb24oZmxvYXQg
ZGVsdGFYLCBmbG9hdCBkZWx0YVkpOwotICAgIHZvaWQgc25hcFJ1YmJlckJhbmQoKTsKLSAgICB2
b2lkIHNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjPiopOwotICAgIHZvaWQgc21vb3RoU2Nyb2xsV2l0aEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYpOwotICAgIHZvaWQgYmVnaW5TY3JvbGxHZXN0dXJlKCk7Ci0gICAgdm9pZCBlbmRT
Y3JvbGxHZXN0dXJlKCk7Ci0KLSAgICBib29sIG1faW5TY3JvbGxHZXN0dXJlOwotICAgIGJvb2wg
bV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3M7Ci0gICAgYm9vbCBtX2lnbm9yZU1vbWVudHVtU2Ny
b2xsczsKLQotICAgIGJvb2wgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uTGVmdDsKLSAgICBi
b29sIG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPblJpZ2h0OwotICAgIGludCBtX2N1bXVsYXRp
dmVIb3Jpem9udGFsU2Nyb2xsOwotICAgIGJvb2wgbV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNj
cm9sbEV2ZXJTd2l0Y2hUb09wcG9zaXRlRGlyZWN0aW9uT2ZQaW47Ci0KLSAgICBDRlRpbWVJbnRl
cnZhbCBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKLSAgICBGbG9hdFNpemUgbV9vdmVy
Zmxvd1Njcm9sbERlbHRhOwotICAgIEZsb2F0U2l6ZSBtX3N0cmV0Y2hTY3JvbGxGb3JjZTsKLSAg
ICBGbG9hdFNpemUgbV9tb21lbnR1bVZlbG9jaXR5OwotCi0gICAgLy8gUnViYmVyIGJhbmQgc3Rh
dGUuCi0gICAgQ0ZUaW1lSW50ZXJ2YWwgbV9zdGFydFRpbWU7Ci0gICAgRmxvYXRTaXplIG1fc3Rh
cnRTdHJldGNoOwotICAgIEZsb2F0UG9pbnQgbV9vcmlnT3JpZ2luOwotICAgIEZsb2F0U2l6ZSBt
X29yaWdWZWxvY2l0eTsKLSAgICBUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiBtX3Nu
YXBSdWJiZXJCYW5kVGltZXI7Ci0jZW5kaWYKLSAgICBib29sIG1fZHJhd2luZ0ludG9MYXllcjsK
LSAgICBib29sIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZDsKLSAgICBib29sIG1fbmVlZHNT
Y3JvbGxlclN0eWxlVXBkYXRlOwotICAgIEludFJlY3QgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJl
Y3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbQkocmV2aXNp
b24gMTAzMjgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwxMzQ2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxzeXMvdGlt
ZS5oPgotI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KLQotI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMuaCIKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUdlc3R1cmVFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2lu
Y2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgotI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yy5oIgotI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotI2luY2x1ZGUgPFF1
YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5n
IG5hbWVzcGFjZSBzdGQ7Ci0KLSNpZiAhZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OXzEwXzYpIHx8
IE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCBNQUNfT1NfWF9WRVJTSU9OXzEwXzYKLUBw
cm90b2NvbCBOU0FuaW1hdGlvbkRlbGVnYXRlCi1AZW5kCi0KLUBpbnRlcmZhY2UgTlNQcm9jZXNz
SW5mbyAoU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hY0V4dCkKLS0gKE5TVGltZUludGVydmFsKXN5
c3RlbVVwdGltZTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIE5TUHJvY2Vzc0luZm8gKFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWNFeHQpCi0tIChOU1RpbWVJbnRlcnZhbClzeXN0ZW1VcHRpbWUK
LXsKLSAgICAvLyBHZXQgaG93IGxvbmcgc3lzdGVtIGhhcyBiZWVuIHVwLiBGb3VuZCBieSBsb29r
aW5nIGdldHRpbmcgImJvb3R0aW1lIiBmcm9tIHRoZSBrZXJuZWwuCi0gICAgc3RhdGljIHN0cnVj
dCB0aW1ldmFsIGJvb3R0aW1lID0gezB9OwotICAgIGlmICghYm9vdHRpbWUudHZfc2VjKSB7Ci0g
ICAgICAgIGludCBtaWJbMl0gPSB7Q1RMX0tFUk4sIEtFUk5fQk9PVFRJTUV9OwotICAgICAgICBz
aXplX3Qgc2l6ZSA9IHNpemVvZihib290dGltZSk7Ci0gICAgICAgIGlmICgtMSA9PSBzeXNjdGwo
bWliLCAyLCAmYm9vdHRpbWUsICZzaXplLCAwLCAwKSkKLSAgICAgICAgICAgIGJvb3R0aW1lLnR2
X3NlYyA9IDA7Ci0gICAgfQotICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsKLSAgICBpZiAoYm9vdHRp
bWUudHZfc2VjICYmIC0xICE9IGdldHRpbWVvZmRheSgmbm93LCAwKSkgewotICAgICAgICBzdHJ1
Y3QgdGltZXZhbCB1cHRpbWU7Ci0gICAgICAgIHRpbWVyc3ViKCZub3csICZib290dGltZSwgJnVw
dGltZSk7Ci0gICAgICAgIE5TVGltZUludGVydmFsIHJlc3VsdCA9IHVwdGltZS50dl9zZWMgKyAo
dXB0aW1lLnR2X3VzZWMgLyAxRSs2KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgcmV0dXJuIDA7Ci19Ci1AZW5kCi0jZW5kaWYKLQotQGludGVyZmFjZSBOU09iamVjdCAoU2Ny
b2xsQW5pbWF0aW9uSGVscGVyRGV0YWlscykKLS0gKGlkKWluaXRXaXRoRGVsZWdhdGU6KGlkKWRl
bGVnYXRlOwotLSAodm9pZClfc3RvcFJ1bjsKLS0gKEJPT0wpX2lzQW5pbWF0aW5nOwotLSAoTlNQ
b2ludCl0YXJnZXRPcmlnaW47Ci0tIChDR0Zsb2F0KV9wcm9ncmVzczsKLUBlbmQKLQotQGludGVy
ZmFjZSBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Ci17Ci0gICAgV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOwotfQotLSAoaWQpaW5p
dFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyop
c2Nyb2xsQW5pbWF0b3I7Ci1AZW5kCi0KLXN0YXRpYyBOU1NpemUgYWJzKE5TU2l6ZSBzaXplKQot
ewotICAgIE5TU2l6ZSBmaW5hbFNpemUgPSBzaXplOwotICAgIGlmIChmaW5hbFNpemUud2lkdGgg
PCAwKQotICAgICAgICBmaW5hbFNpemUud2lkdGggPSAtZmluYWxTaXplLndpZHRoOwotICAgIGlm
IChmaW5hbFNpemUuaGVpZ2h0IDwgMCkKLSAgICAgICAgZmluYWxTaXplLmhlaWdodCA9IC1maW5h
bFNpemUuaGVpZ2h0OwotICAgIHJldHVybiBmaW5hbFNpemU7ICAgIAotfQotCi1AaW1wbGVtZW50
YXRpb24gU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhTY3Jv
bGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5p
bWF0b3IKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOwotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNjcm9sbEFuaW1hdG9yRGVzdHJveWVkCi17Ci0gICAg
X2FuaW1hdG9yID0gMDsKLX0KLQotLSAoTlNSZWN0KWJvdW5kcwotewotICAgIGlmICghX2FuaW1h
dG9yKQotICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKLQotICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgY3VycmVudFBvc2l0aW9uID0gX2FuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKTsKLSAgICBy
ZXR1cm4gTlNNYWtlUmVjdChjdXJyZW50UG9zaXRpb24ueCgpLCBjdXJyZW50UG9zaXRpb24ueSgp
LCAwLCAwKTsKLX0KLQotLSAodm9pZClfaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludDooTlNQb2ludClu
ZXdQb3NpdGlvbgotewotICAgIGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0gICAg
X2FuaW1hdG9yLT5pbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKG5ld1Bv
c2l0aW9uKTsKLX0KLQotLSAoTlNQb2ludClfcGl4ZWxBbGlnblByb3Bvc2VkU2Nyb2xsUG9zaXRp
b246KE5TUG9pbnQpbmV3T3JpZ2luCi17Ci0gICAgcmV0dXJuIG5ld09yaWdpbjsKLX0KLQotLSAo
TlNTaXplKWNvbnZlcnRTaXplVG9CYXNlOihOU1NpemUpc2l6ZQotewotICAgIHJldHVybiBhYnMo
c2l6ZSk7Ci19Ci0KLS0gKE5TU2l6ZSljb252ZXJ0U2l6ZUZyb21CYXNlOihOU1NpemUpc2l6ZQot
ewotICAgIHJldHVybiBhYnMoc2l6ZSk7Ci19Ci0KLS0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFj
a2luZzooTlNTaXplKXNpemUKLXsKLSAgICByZXR1cm4gYWJzKHNpemUpOwotfQotCi0tIChOU1Np
emUpY29udmVydFNpemVGcm9tQmFja2luZzooTlNTaXplKXNpemUKLXsKLSAgICByZXR1cm4gYWJz
KHNpemUpOwotfQotCi0tIChpZClzdXBlcnZpZXcKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0t
IChpZClkb2N1bWVudFZpZXcKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChpZCl3aW5kb3cK
LXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKV9yZWN1cnNpdmVSZWNvbXB1dGVUb29s
VGlwcwotewotfQotCi1AZW5kCi0KLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi0KLUBp
bnRlcmZhY2UgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Ci17
Ci0gICAgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOwotfQot
LSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBTY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlCi0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0
b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCi17
Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgCi0gICAgX2FuaW1hdG9yID0gc2Nyb2xsQW5pbWF0b3I7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWQKLXsKLSAgICBfYW5p
bWF0b3IgPSAwOwotfQotCi0tIChOU1JlY3QpY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQ
YWlyOihpZClzY3JvbGxlckltcFBhaXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQ
YWlyKTsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci0K
LSAgICBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IF9hbmltYXRvci0+c2Nyb2xsYWJs
ZUFyZWEoKS0+Y29udGVudHNTaXplKCk7Ci0gICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgY29u
dGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLS0gKEJPT0wp
aW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIKLXsKLSAg
ICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBpZiAoIV9hbmltYXRvcikKLSAg
ICAgICAgcmV0dXJuIE5POwotCi0gICAgcmV0dXJuIF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEo
KS0+aW5MaXZlUmVzaXplKCk7Ci19Ci0KLS0gKE5TUG9pbnQpbW91c2VMb2NhdGlvbkluQ29udGVu
dEFyZWFGb3JTY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpcgotewotICAgIFVOVVNF
RF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwotICAgIGlmICghX2FuaW1hdG9yKQotICAgICAgICBy
ZXR1cm4gTlNaZXJvUG9pbnQ7Ci0KLSAgICByZXR1cm4gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJl
YSgpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpOwotfQotCi0tIChOU1BvaW50KXNjcm9sbGVySW1w
UGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIGNvbnZlcnRDb250ZW50UG9pbnQ6KE5TUG9pbnQpcG9p
bnRJbkNvbnRlbnRBcmVhIHRvU2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Ci0gICAgaWYgKCFfYW5pbWF0b3IpCi0gICAgICAg
IHJldHVybiBOU1plcm9Qb2ludDsKLQotICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFy
ID0gMDsKLSAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKChXS1Njcm9sbGJh
clBhaW50ZXJSZWYpc2Nyb2xsZXJJbXApKQotICAgICAgICBzY3JvbGxiYXIgPSBfYW5pbWF0b3It
PnNjcm9sbGFibGVBcmVhKCktPmhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICBlbHNlIAotICAg
ICAgICBzY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Ny
b2xsYmFyKCk7Ci0KLSAgICAvLyBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgbnVsbCBzY3JvbGxi
YXIgaGVyZSBzaW5jZSBpdCBpcyBwb3NzaWJsZSBmb3IgdGhpcyBkZWxlZ2F0ZQotICAgIC8vIG1l
dGhvZCB0byBiZSBjYWxsZWQgYmV0d2VlbiB0aGUgbW9tZW50IHdoZW4gYSBzY3JvbGxiYXIgaGFz
IGJlZW4gc2V0IHRvIDAgYW5kIHRoZQotICAgIC8vIG1vbWVudCB3aGVuIGl0cyBkZXN0cnVjdG9y
IGhhcyBiZWVuIGNhbGxlZC4gV2Ugc2hvdWxkIHByb2JhYmx5IGRlLWNvdXBsZSBzb21lCi0gICAg
Ly8gb2YgdGhlIGNsZWFuLXVwIHdvcmsgaW4gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dW5y
ZWdpc3RlclNjcm9sbGJhcigpIHRvIGF2b2lkIHRoaXMKLSAgICAvLyBpc3N1ZS4KLSAgICBpZiAo
IXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFBvaW50KCk7Ci0gICAgCi0g
ICAgcmV0dXJuIHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nVmlldyhXZWJDb3JlOjpJ
bnRQb2ludChwb2ludEluQ29udGVudEFyZWEpKTsKLX0KLQotLSAodm9pZClzY3JvbGxlckltcFBh
aXI6KGlkKXNjcm9sbGVySW1wUGFpciBzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDoo
TlNSZWN0KXJlY3QKLXsKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKLSAgICBV
TlVTRURfUEFSQU0ocmVjdCk7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3Jv
bGxlckltcFBhaXIgdXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJT
dHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZQotewotICAg
IGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3a1NldFNjcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyU3R5bGUoKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpc2Ny
b2xsZXJJbXBQYWlyLCBuZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUpOwotICAgIF9hbmltYXRv
ci0+dXBkYXRlU2Nyb2xsZXJTdHlsZSgpOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgU2Nyb2xs
YmFyUGFydEFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uCi17Ci0gICAgUmV0YWluUHRyPFdLU2Nyb2xs
YmFyUGFpbnRlclJlZj4gX3Njcm9sbGVyUGFpbnRlcjsKLSAgICBXZWJDb3JlOjpTY3JvbGxiYXJQ
YXJ0IF9wYXJ0OwotICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9hbmlt
YXRvcjsKLSAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGE7Ci0gICAgQ0dGbG9hdCBfbmV3QWxwaGE7
Ci19Ci0tIChpZClpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6KFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0IHNjcm9s
bEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmlt
YXRvciBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50
ZXJ2YWwpZHVyYXRpb247Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYXJ0QW5p
bWF0aW9uCi0KLS0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjooV0tTY3JvbGxiYXJQYWlu
dGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0KXBhcnQg
c2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9s
bEFuaW1hdG9yIGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9uOihOU1Rp
bWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhEdXJhdGlv
bjpkdXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIF9zY3JvbGxlclBhaW50ZXIg
PSBzY3JvbGxlclBhaW50ZXI7Ci0gICAgX3BhcnQgPSBwYXJ0OwotICAgIF9hbmltYXRvciA9IHNj
cm9sbEFuaW1hdG9yOwotICAgIF9pbml0aWFsQWxwaGEgPSBfcGFydCA9PSBXZWJDb3JlOjpUaHVt
YlBhcnQgPyB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoX3Njcm9sbGVyUGFpbnRlci5nZXQo
KSkgOiB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCkp
OwotICAgIF9uZXdBbHBoYSA9IG5ld0FscGhhOwotICAgIAotICAgIHJldHVybiBzZWxmOyAgICAK
LX0KLQotLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJv
Z3Jlc3MKLXsKLSAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKLQotICAg
IGlmICghX2FuaW1hdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0Zsb2F0IGN1cnJlbnRB
bHBoYTsKLSAgICBpZiAoX2luaXRpYWxBbHBoYSA+IF9uZXdBbHBoYSkKLSAgICAgICAgY3VycmVu
dEFscGhhID0gMSAtIHByb2dyZXNzOwotICAgIGVsc2UKLSAgICAgICAgY3VycmVudEFscGhhID0g
cHJvZ3Jlc3M7Ci0gICAgCi0gICAgaWYgKF9wYXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCkKLSAg
ICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0
KCksIGN1cnJlbnRBbHBoYSk7Ci0gICAgZWxzZQotICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50
ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCksIGN1cnJlbnRBbHBoYSk7Ci0KLSAg
ICAvLyBJbnZhbGlkYXRlIHRoZSBzY3JvbGxiYXJzIHNvIHRoYXQgdGhleSBwYWludCB0aGUgYW5p
bWF0aW9uCi0gICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBf
YW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAg
IHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChXZWJDb3JlOjpJbnRSZWN0KDAsIDAs
IHZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCB2ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkp
KTsKLSAgICBpZiAoV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gX2Fu
aW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAg
IGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwg
MCwgaG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwgaG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCkpKTsKLX0KLQotLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAotewotICAgIFtz
ZWxmIHN0b3BBbmltYXRpb25dOwotICAgIF9hbmltYXRvciA9IDA7Ci19Ci0KLUBlbmQKLQotQGlu
dGVyZmFjZSBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgOiBOU09iamVjdDxOU0FuaW1hdGlvbkRl
bGVnYXRlPgotewotICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9hbmlt
YXRvcjsKLQotICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdmVydGljYWxL
bm9iQW5pbWF0aW9uOwotICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfaG9y
aXpvbnRhbEtub2JBbmltYXRpb247Ci0KLSAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1h
dGlvbj4gX3ZlcnRpY2FsVHJhY2tBbmltYXRpb247Ci0gICAgUmV0YWluUHRyPFNjcm9sbGJhclBh
cnRBbmltYXRpb24+IF9ob3Jpem9udGFsVHJhY2tBbmltYXRpb247Ci19Ci0tIChpZClpbml0V2l0
aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3Jv
bGxBbmltYXRvcjsKLS0gKHZvaWQpY2FuY2VsQW5pbWF0aW9uczsKLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZQotCi0tIChpZClpbml0V2l0aFNjcm9sbEFu
aW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRv
cgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIAotICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOwotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKLXsKLSAgICBbX3ZlcnRp
Y2FsS25vYkFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKLSAgICBbX2hvcml6b250YWxL
bm9iQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOwotICAgIFtfdmVydGljYWxUcmFja0Fu
aW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKLSAgICBbX2hvcml6b250YWxUcmFja0FuaW1h
dGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKLX0KLQotLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9C
YWNraW5nOihOU1JlY3QpYVJlY3QKLXsKLSAgICByZXR1cm4gYVJlY3Q7Ci19Ci0KLS0gKE5TUmVj
dCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QpYVJlY3QKLXsKLSAgICByZXR1cm4gYVJl
Y3Q7Ci19Ci0KLSNpZiAhUExBVEZPUk0oQ0hST01JVU0pCi0tIChDQUxheWVyICopbGF5ZXIKLXsK
LSAgICBpZiAoIV9hbmltYXRvcikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBpZiAoIV9hbmlt
YXRvci0+aXNEcmF3aW5nSW50b0xheWVyKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYXR0ZW1wdCB0byByZXR1cm4gYW4gYWN0dWFsIGxheWVyLgot
ICAgIHN0YXRpYyBDQUxheWVyICpkdW1teUxheWVyID0gW1tDQUxheWVyIGFsbG9jXSBpbml0XTsK
LSAgICByZXR1cm4gZHVtbXlMYXllcjsKLX0KLSNlbmRpZgotCi0tICh2b2lkKXNldFVwQW5pbWF0
aW9uOihSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4mKXNjcm9sbGJhclBhcnRBbmlt
YXRpb24gc2Nyb2xsZXJQYWludGVyOihXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQYWlu
dGVyIHBhcnQ6KFdlYkNvcmU6OlNjcm9sbGJhclBhcnQpcGFydCBhbmltYXRlQWxwaGFUbzooQ0dG
bG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KLXsKLSAgICAv
LyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdGhlIHBhZ2UsIHRoZW4gdGhlIHNjcm9sbGJhcnMg
bXVzdCBiZSBhbmltYXRlZCBoZXJlLiAKLSAgICAvLyBUaGlzIG92ZXJyaWRlcyB0aGUgZWFybHkg
cmV0dXJucy4KLSAgICBib29sIG11c3RBbmltYXRlID0gX2FuaW1hdG9yLT5oYXZlU2Nyb2xsZWRT
aW5jZVBhZ2VMb2FkKCk7Ci0KLSAgICBpZiAoX2FuaW1hdG9yLT5zY3JvbGxiYXJQYWludFRpbWVy
SXNBY3RpdmUoKSAmJiAhbXVzdEFuaW1hdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChf
YW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25z
KCkgJiYgIW11c3RBbmltYXRlKSB7Ci0gICAgICAgIF9hbmltYXRvci0+c3RhcnRTY3JvbGxiYXJQ
YWludFRpbWVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBdCB0aGlzIHBv
aW50LCB3ZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBhbmltYXRlIG5vdywgc28gc3RvcCB0aGUg
dGltZXIuCi0gICAgX2FuaW1hdG9yLT5zdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotCi0gICAg
Ly8gSWYgd2UgYXJlIGN1cnJlbnRseSBhbmltYXRpbmcsIHN0b3AKLSAgICBpZiAoc2Nyb2xsYmFy
UGFydEFuaW1hdGlvbikgewotICAgICAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBz
dG9wQW5pbWF0aW9uXTsKLSAgICAgICAgc2Nyb2xsYmFyUGFydEFuaW1hdGlvbiA9IG5pbDsKLSAg
ICB9Ci0KLSAgICBpZiAocGFydCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQgJiYgIXdrU2Nyb2xsYmFy
UGFpbnRlcklzSG9yaXpvbnRhbChzY3JvbGxlclBhaW50ZXIpKSB7Ci0gICAgICAgIGlmIChuZXdB
bHBoYSA9PSAxKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHRodW1iUmVjdCA9IEludFJlY3Qod2tT
Y3JvbGxiYXJQYWludGVyS25vYlJlY3Qoc2Nyb2xsZXJQYWludGVyKSk7Ci0gICAgICAgICAgICBf
YW5pbWF0b3ItPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdCh0aHVtYlJlY3QpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIF9hbmltYXRvci0+c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJS
ZWN0KEludFJlY3QoKSk7Ci0gICAgfQotCi0gICAgW05TQW5pbWF0aW9uQ29udGV4dCBiZWdpbkdy
b3VwaW5nXTsKLSAgICBbW05TQW5pbWF0aW9uQ29udGV4dCBjdXJyZW50Q29udGV4dF0gc2V0RHVy
YXRpb246ZHVyYXRpb25dOwotICAgIHNjcm9sbGJhclBhcnRBbmltYXRpb24uYWRvcHROUyhbW1Nj
cm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjpzY3Jv
bGxlclBhaW50ZXIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ6cGFydAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxBbmlt
YXRvcjpfYW5pbWF0b3IgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVBbHBoYVRvOm5ld0FscGhhIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOwotICAgIFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9u
LmdldCgpIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nXTsK
LSAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzdGFydEFuaW1hdGlvbl07Ci0gICAg
W05TQW5pbWF0aW9uQ29udGV4dCBlbmRHcm91cGluZ107Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsZXJJ
bXA6KGlkKXNjcm9sbGVySW1wIGFuaW1hdGVLbm9iQWxwaGFUbzooQ0dGbG9hdCluZXdLbm9iQWxw
aGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0gICAgaWYgKCFfYW5pbWF0
b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxl
clBhaW50ZXIgPSAoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wOwotICAgIGlmICh3
a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVyKSkKLSAgICAgICAg
W3NlbGYgc2V0VXBBbmltYXRpb246X2hvcml6b250YWxLbm9iQW5pbWF0aW9uIHNjcm9sbGVyUGFp
bnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpUaHVtYlBhcnQgYW5pbWF0ZUFscGhh
VG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICBlbHNlCi0gICAgICAgIFtz
ZWxmIHNldFVwQW5pbWF0aW9uOl92ZXJ0aWNhbEtub2JBbmltYXRpb24gc2Nyb2xsZXJQYWludGVy
OnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6OlRodW1iUGFydCBhbmltYXRlQWxwaGFUbzpu
ZXdLbm9iQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOwotfQotCi0tICh2b2lkKXNjcm9sbGVySW1w
OihpZClzY3JvbGxlckltcCBhbmltYXRlVHJhY2tBbHBoYVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxw
aGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0gICAgaWYgKCFfYW5pbWF0
b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBzY3JvbGxl
clBhaW50ZXIgPSAoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wOwotICAgIGlmICh3
a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQYWludGVyKSkKLSAgICAgICAg
W3NlbGYgc2V0VXBBbmltYXRpb246X2hvcml6b250YWxUcmFja0FuaW1hdGlvbiBzY3JvbGxlclBh
aW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRl
QWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICBlbHNlCi0gICAg
ICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl92ZXJ0aWNhbFRyYWNrQW5pbWF0aW9uIHNjcm9sbGVy
UGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpCYWNrVHJhY2tQYXJ0IGFuaW1h
dGVBbHBoYVRvOm5ld1RyYWNrQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOwotfQotCi0tICh2b2lk
KXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBvdmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRU
bzooTlNVSW50ZWdlciluZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZQotewotICAgIFVOVVNFRF9QQVJB
TShzY3JvbGxlckltcCk7Ci0gICAgVU5VU0VEX1BBUkFNKG5ld092ZXJsYXlTY3JvbGxlclN0YXRl
KTsKLX0KLQotLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAotewotICAgIF9hbmltYXRv
ciA9IDA7Ci0gICAgW192ZXJ0aWNhbEtub2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JE
ZXN0cm95ZWRdOwotICAgIFtfaG9yaXpvbnRhbEtub2JBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5p
bWF0b3JEZXN0cm95ZWRdOwotICAgIFtfdmVydGljYWxUcmFja0FuaW1hdGlvbi5nZXQoKSBzY3Jv
bGxBbmltYXRvckRlc3Ryb3llZF07Ci0gICAgW19ob3Jpem9udGFsVHJhY2tBbmltYXRpb24uZ2V0
KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotfQotCi1AZW5kCi0KLSNlbmRpZiAvLyBVU0Uo
V0tfU0NST0xMQkFSX1BBSU5URVIpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc093blB0
cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSog
c2Nyb2xsYWJsZUFyZWEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjKHNjcm9sbGFibGVBcmVhKSk7Ci19Ci0KLXN0YXRpYyBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtTWFjKiBjaHJvbWl1bVNjcm9sbGJhclRoZW1lKCkKLXsKLSAgICBTY3JvbGxiYXJU
aGVtZSogc2Nyb2xsYmFyVGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKLSAgICByZXR1
cm4gIXNjcm9sbGJhclRoZW1lLT5pc01vY2tUaGVtZSgpID8gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYyo+KHNjcm9sbGJhclRoZW1lKSA6IDA7Ci19Ci0KLVNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhKQotICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCi0j
aWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQotICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFp
bnRUaW1lcih0aGlzLCAmU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW5pdGlhbFNjcm9sbGJh
clBhaW50VGltZXJGaXJlZCkKLSNlbmRpZgotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAg
ICAsIG1faW5TY3JvbGxHZXN0dXJlKGZhbHNlKQotICAgICwgbV9tb21lbnR1bVNjcm9sbEluUHJv
Z3Jlc3MoZmFsc2UpCi0gICAgLCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyhmYWxzZSkKLSAgICAs
IG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wKDApCi0gICAgLCBtX3N0YXJ0VGltZSgwKQot
ICAgICwgbV9zbmFwUnViYmVyQmFuZFRpbWVyKHRoaXMsICZTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpCi0jZW5kaWYKLSAgICAsIG1fZHJhd2luZ0lu
dG9MYXllcihmYWxzZSkKLSAgICAsIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZChmYWxzZSkK
LSAgICAsIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKGZhbHNlKQotewotICAgIG1fc2Nyb2xs
QW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuYWRvcHROUyhbW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRl
bGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKLSAgICBtX3Njcm9s
bEFuaW1hdGlvbkhlbHBlci5hZG9wdE5TKFtbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbEFu
aW1hdGlvbkhlbHBlciIpIGFsbG9jXSBpbml0V2l0aERlbGVnYXRlOm1fc2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGUuZ2V0KCldKTsKLQotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElB
dmFpbGFibGUoKSkgewotICAgICAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdh
dGUuYWRvcHROUyhbW1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGlu
aXRXaXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOwotICAgICAgICBtX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyID0gd2tNYWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpKTsKLSAgICAgICAgbV9zY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUuYWRvcHROUyhbW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10gaW5p
dFdpdGhTY3JvbGxBbmltYXRvcjp0aGlzXSk7Ci0gICAgfQotfQotCi1TY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjp+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYygpCi17Ci0gICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotICAg
ICAgICBbKGlkKW1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6
bmlsXTsKLSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFu
aW1hdG9yRGVzdHJveWVkXTsKLSAgICAgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdh
dGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOwotICAgIH0KLX0KLQotYm9vbCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBt
dWx0aXBsaWVyKQotewotICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCA9IHRydWU7Ci0K
LSNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCi0gICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9y
OjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKLSNl
bmRpZgotCi0gICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBi
b29sRm9yS2V5OkAiQXBwbGVTY3JvbGxBbmltYXRpb25FbmFibGVkIl0gfHwgIW1fc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gU2Nyb2xsQW5p
bWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIp
OwotCi0gICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UGl4ZWwpCi0gICAgICAgIHJldHVy
biBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwg
bXVsdGlwbGllcik7Ci0KLSAgICBmbG9hdCBjdXJyZW50UG9zID0gb3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IG1fY3VycmVudFBvc1ggOiBtX2N1cnJlbnRQb3NZOwotICAgIGZs
b2F0IG5ld1BvcyA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4oY3VycmVudFBvcyAr
IChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVh
LT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwKTsKLSAgICBpZiAoY3VycmVudFBvcyA9PSBu
ZXdQb3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5TUG9pbnQgbmV3UG9pbnQ7Ci0g
ICAgaWYgKFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfaXNBbmltYXRpbmddKSB7Ci0g
ICAgICAgIE5TUG9pbnQgdGFyZ2V0T3JpZ2luID0gW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdl
dCgpIHRhcmdldE9yaWdpbl07Ci0gICAgICAgIG5ld1BvaW50ID0gb3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IE5TTWFrZVBvaW50KG5ld1BvcywgdGFyZ2V0T3JpZ2luLnkpIDog
TlNNYWtlUG9pbnQodGFyZ2V0T3JpZ2luLngsIG5ld1Bvcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgbmV3UG9pbnQgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gTlNNYWtl
UG9pbnQobmV3UG9zLCBtX2N1cnJlbnRQb3NZKSA6IE5TTWFrZVBvaW50KG1fY3VycmVudFBvc1gs
IG5ld1Bvcyk7Ci0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZFN0YXJ0QW5pbWF0ZWRTY3Jv
bGwoKTsKLSAgICB9Ci0gICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIHNjcm9sbFRv
UG9pbnQ6bmV3UG9pbnRdOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50JiBvZmZzZXQpCi17Ci0gICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9z
dG9wUnVuXTsKLSAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG9mZnNldCk7Ci19Ci0KLWZsb2F0
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNz
YXJ5KGZsb2F0IHBvc2l0aW9uKSBjb25zdAotewotICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+
Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKLSAgICAgICAgcmV0dXJuIHBvc2l0
aW9uOwotCi0gICAgcmV0dXJuIG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbiwgbV9zY3Jv
bGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZp
c2libGVXaWR0aCgpKSwgMCk7Ci19Ci0KLWZsb2F0IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0IHBvc2l0aW9uKSBjb25zdAot
ewotICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UoKSkKLSAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwotCi0gICAgcmV0dXJuIG1heDxmbG9h
dD4obWluPGZsb2F0Pihwb3NpdGlvbiwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCku
aGVpZ2h0KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKLX0KLQot
RmxvYXRQb2ludCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlv
bklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSBjb25zdAotewotICAgIGlm
ICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkK
LSAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwotCi0gICAgZmxvYXQgbmV3WCA9IG1heDxmbG9hdD4o
bWluPGZsb2F0Pihwb3NpdGlvbi54KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgp
LndpZHRoKCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOwotICAgIGZs
b2F0IG5ld1kgPSBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueSgpLCBtX3Njcm9sbGFi
bGVBcmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2li
bGVIZWlnaHQoKSksIDApOwotCi0gICAgcmV0dXJuIEZsb2F0UG9pbnQobmV3WCwgbmV3WSk7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2lu
dChjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKLXsKLSAgICBGbG9hdFBvaW50IGFkanVz
dGVkUG9zaXRpb24gPSBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KG5ld1Bvc2l0aW9u
KTsKLSAKLSAgICBtX2N1cnJlbnRQb3NYID0gYWRqdXN0ZWRQb3NpdGlvbi54KCk7Ci0gICAgbV9j
dXJyZW50UG9zWSA9IGFkanVzdGVkUG9zaXRpb24ueSgpOwotICAgIG5vdGlmeVBvc2l0aW9uQ2hh
bmdlZCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNj
cm9sbEJ5RGVsdGFYKGZsb2F0IGRlbHRhWCkKLXsKLSAgICBmbG9hdCBuZXdQb3NYID0gYWRqdXN0
U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3NhcnkobV9jdXJyZW50UG9zWCArIGRlbHRhWCk7Ci0gICAg
Ci0gICAgaWYgKG5ld1Bvc1ggPT0gbV9jdXJyZW50UG9zWCkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIG1fY3VycmVudFBvc1ggPSBuZXdQb3NYOwotICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdl
ZCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9s
bEJ5RGVsdGFZKGZsb2F0IGRlbHRhWSkKLXsKLSAgICBmbG9hdCBuZXdQb3NZID0gYWRqdXN0U2Ny
b2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkobV9jdXJyZW50UG9zWSArIGRlbHRhWSk7Ci0gICAgCi0g
ICAgaWYgKG5ld1Bvc1kgPT0gbV9jdXJyZW50UG9zWSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIG1fY3VycmVudFBvc1kgPSBuZXdQb3NZOwotICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgp
OwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbFRv
UG9pbnRGb3JTY3JvbGxBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pCi17
Ci0gICAgQVNTRVJUKG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyKTsKLSAgICBDR0Zsb2F0IHByb2dy
ZXNzID0gW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9wcm9ncmVzc107Ci0gICAgCi0g
ICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChuZXdQb3NpdGlvbik7Ci0KLSAgICBpZiAocHJvZ3Jl
c3MgPj0gMS4wKQotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5kaWRDb21wbGV0ZUFuaW1hdGVk
U2Nyb2xsKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bm90aWZ5UG9z
aXRpb25DaGFuZ2VkKCkKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxl
KCkpCi0gICAgICAgIHdrQ29udGVudEFyZWFTY3JvbGxlZChtX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpKTsKLSAgICBTY3JvbGxBbmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2Vk
KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFXaWxs
UGFpbnQoKSBjb25zdAotewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUo
KSkKLSAgICAgICAgd2tDb250ZW50QXJlYVdpbGxQYWludChtX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3Vz
ZUVudGVyZWRDb250ZW50QXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3Zlcmxh
eUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a01vdXNlRW50ZXJlZENvbnRlbnRBcmVhKG1fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdAotewotICAgIGlmIChp
c1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tNb3VzZUV4aXRlZENv
bnRlbnRBcmVhKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29u
c3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAg
IHdrTW91c2VNb3ZlZEluQ29udGVudEFyZWEobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5n
ZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFN0YXJ0TGl2
ZVJlc2l6ZSgpCi17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQot
ICAgICAgICB3a1dpbGxTdGFydExpdmVSZXNpemUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudHNS
ZXNpemVkKCkgY29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxl
KCkpCi0gICAgICAgIHdrQ29udGVudEFyZWFSZXNpemVkKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxF
bmRMaXZlUmVzaXplKCkKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxl
KCkpCi0gICAgICAgIHdrV2lsbEVuZExpdmVSZXNpemUobV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlci5nZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVu
dEFyZWFEaWRTaG93KCkgY29uc3QKLXsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpCi0gICAgICAgIHdrQ29udGVudEFyZWFEaWRTaG93KG1fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmNvbnRlbnRBcmVhRGlkSGlkZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3Zlcmxh
eUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0NvbnRlbnRBcmVhRGlkSGlkZShtX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAotewotICAgIGlmIChpc1Njcm9s
bGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgd2tEaWRCZWdpblNjcm9sbEdlc3R1
cmUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICB3a0RpZEVuZFNj
cm9sbEdlc3R1cmUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci19Ci0KLXZv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFp
bGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBpZiAoU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYyogdGhlbWUgPSBjaHJvbWl1bVNjcm9sbGJhclRoZW1lKCkpIHsKLSAgICAg
ICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNjcm9s
bGJhcihzY3JvbGxiYXIpOwotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShw
YWludGVyLCBtX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSk7Ci0gICAgICAgIHdrU2V0
UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIu
Z2V0KCksIHBhaW50ZXIsIGZhbHNlKTsKLSAgICAgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmlu
TGl2ZVJlc2l6ZSgpKQotICAgICAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhh
KHBhaW50ZXIsIDEpOwotICAgIH0KLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
Ojp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0g
ICAgaWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21pdW1T
Y3JvbGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVy
ID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgd2tTY3Jv
bGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbmlsKTsKLSAgICAgICAgd2tTZXRQYWlu
dGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQo
KSwgbmlsLCBmYWxzZSk7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0g
ICAgaWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21pdW1T
Y3JvbGxiYXJUaGVtZSgpKSB7Ci0gICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVy
ID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAgd2tTY3Jv
bGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUuZ2V0KCkpOwotICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBwYWludGVyLCB0cnVlKTsKLSAgICAgICAg
aWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpKQotICAgICAgICAgICAgd2tTZXRT
Y3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXIsIDEpOwotICAgIH0KLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihT
Y3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2
YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYyogdGhlbWUgPSBjaHJvbWl1bVNjcm9sbGJhclRoZW1lKCkpIHsKLSAgICAgICAgV0tT
Y3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSB0aGVtZS0+cGFpbnRlckZvclNjcm9sbGJhcihz
Y3JvbGxiYXIpOwotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShwYWludGVy
LCBuaWwpOwotICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBuaWwsIHRydWUpOwotICAgIH0KLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjYW5jZWxBbmltYXRpb25zKCkKLXsKLSAgICBt
X2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBmYWxzZTsKLQotICAgIGlmIChpc1Njcm9sbGJh
ck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAgICAgICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1l
cklzQWN0aXZlKCkpCi0gICAgICAgICAgICBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOwotICAg
ICAgICBbbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgY2FuY2VsQW5pbWF0aW9uc107
Ci0gICAgfQotfQotCi0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotCi1zdGF0aWMgY29uc3Qg
ZmxvYXQgc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCA9IDAuMTBmOwotc3RhdGljIGNvbnN0
IGZsb2F0IHJ1YmJlcmJhbmRTdGlmZm5lc3MgPSAyMDsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJi
ZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbyA9IDE7Ci1zdGF0aWMgY29uc3QgZmxvYXQg
cnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOwotc3RhdGlj
IGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRBbXBsaXR1ZGUgPSAwLjMxZjsKLXN0YXRpYyBjb25zdCBm
bG9hdCBydWJiZXJiYW5kUGVyaW9kID0gMS42ZjsKLQotc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0
YUZvclRpbWVEZWx0YShmbG9hdCBpbml0aWFsUG9zaXRpb24sIGZsb2F0IGluaXRpYWxWZWxvY2l0
eSwgZmxvYXQgZWxhcHNlZFRpbWUpCi17Ci0gICAgZmxvYXQgYW1wbGl0dWRlID0gcnViYmVyYmFu
ZEFtcGxpdHVkZTsKLSAgICBmbG9hdCBwZXJpb2QgPSBydWJiZXJiYW5kUGVyaW9kOwotICAgIGZs
b2F0IGNyaXRpY2FsRGFtcGVuaW5nRmFjdG9yID0gZXhwZigoLWVsYXBzZWRUaW1lICogcnViYmVy
YmFuZFN0aWZmbmVzcykgLyBwZXJpb2QpOwotICAgICAgICAgICAgIAotICAgIHJldHVybiAoaW5p
dGlhbFBvc2l0aW9uICsgKC1pbml0aWFsVmVsb2NpdHkgKiBlbGFwc2VkVGltZSAqIGFtcGxpdHVk
ZSkpICogY3JpdGljYWxEYW1wZW5pbmdGYWN0b3I7Ci19Ci0KLXN0YXRpYyBmbG9hdCBlbGFzdGlj
RGVsdGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEpCi17Ci0gICAgZmxvYXQgc3RpZmZuZXNz
ID0gc3RkOjptYXgocnViYmVyYmFuZFN0aWZmbmVzcywgMS4wZik7Ci0gICAgcmV0dXJuIGRlbHRh
IC8gc3RpZmZuZXNzOwotfQotCi1zdGF0aWMgZmxvYXQgcmVib3VuZERlbHRhRm9yRWxhc3RpY0Rl
bHRhKGZsb2F0IGRlbHRhKQotewotICAgIHJldHVybiBkZWx0YSAqIHJ1YmJlcmJhbmRTdGlmZm5l
c3M7Ci19Ci0KLXN0YXRpYyBmbG9hdCBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKQotewotICAgIHN0
YXRpYyBmbG9hdCBtdWx0aXBsaWVyID0gLTE7Ci0gICAgaWYgKG11bHRpcGxpZXIgPCAwKSB7Ci0g
ICAgICAgIG11bHRpcGxpZXIgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSBmbG9hdEZvcktleTpAIk5TU2Nyb2xsV2hlZWxNdWx0aXBsaWVyIl07Ci0gICAgICAgIGlmICht
dWx0aXBsaWVyIDw9IDApCi0gICAgICAgICAgICBtdWx0aXBsaWVyID0gMTsKLSAgICB9Ci0gICAg
cmV0dXJuIG11bHRpcGxpZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Njcm9sbGluZ0xl
ZnRBbmRTaG91bGROb3RSdWJiZXJCYW5kKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxF
dmVudCwgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQotewotICAgIHJldHVybiB3aGVl
bEV2ZW50LmRlbHRhWCgpID4gMCAmJiAhc2Nyb2xsYWJsZUFyZWEtPnNob3VsZFJ1YmJlckJhbmRJ
bkRpcmVjdGlvbihTY3JvbGxMZWZ0KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzU2Nyb2xs
aW5nUmlnaHRBbmRTaG91bGROb3RSdWJiZXJCYW5kKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYg
d2hlZWxFdmVudCwgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQotewotICAgIHJldHVy
biB3aGVlbEV2ZW50LmRlbHRhWCgpIDwgMCAmJiAhc2Nyb2xsYWJsZUFyZWEtPnNob3VsZFJ1YmJl
ckJhbmRJbkRpcmVjdGlvbihTY3JvbGxSaWdodCk7Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCi17Ci0gICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKLQot
ICAgIGlmICghd2hlZWxFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkpCi0gICAgICAg
IHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKLQot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNvbWV3aGF0IHJvdW5kYWJvdXQgaGFjayB0byBhbGxvdyBm
b3J3YXJkaW5nIHdoZWVsIGV2ZW50cwotICAgIC8vIHVwIHRvIHRoZSBwYXJlbnQgc2Nyb2xsYWJs
ZSBhcmVhLiBJdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdAotICAgIC8vIHRoZSBi
YXNlIGNsYXNzIGltcGxlbWVuYXRhdGlvbiBvZiBoYW5kbGVXaGVlbEV2ZW50IHdpbGwgbm90IGFj
Y2VwdCB0aGUKLSAgICAvLyB3aGVlbCBldmVudCBpZiB0aGVyZSBpcyBub3doZXJlIHRvIHNjcm9s
bC4KLSAgICBpZiAoZmFic2Yod2hlZWxFdmVudC5kZWx0YVkoKSkgPj0gZmFic2Yod2hlZWxFdmVu
dC5kZWx0YVgoKSkpIHsKLSAgICAgICAgaWYgKCFhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSkK
LSAgICAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVl
bEV2ZW50KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWFsbG93c0hvcml6b250YWxTdHJl
dGNoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVs
RXZlbnQod2hlZWxFdmVudCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBh
IHNjcm9sbGJhciwgd2UgYWdncmVnYXRlIHRoZSB3aGVlbCBldmVudHMgdG8gZ2V0IGFuCi0gICAg
ICAgICAgICAvLyBvdmVyYWxsIHRyZW5kIG9mIHRoZSBzY3JvbGwuIElmIHRoZSBkaXJlY3Rpb24g
b2YgdGhlIHNjcm9sbCBpcyBldmVyCi0gICAgICAgICAgICAvLyBpbiB0aGUgb3Bwb3NpdGUgZGly
ZWN0aW9uIG9mIHRoZSBwaW4gbG9jYXRpb24sIHRoZW4gd2Ugc3dpdGNoIHRoZQotICAgICAgICAg
ICAgLy8gYm9vbGVhbiwgYW5kIHJ1YmJlciBiYW5kLiBUaGF0IGlzLCBpZiB3ZSB3ZXJlIHBpbm5l
ZCB0byB0aGUgbGVmdCwKLSAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmRlZCB1cCBzY3JvbGxpbmcg
dG8gdGhlIHJpZ2h0LCB3ZSBydWJiZXIgYmFuZC4KLSAgICAgICAgICAgIG1fY3VtdWxhdGl2ZUhv
cml6b250YWxTY3JvbGwgKz0gd2hlZWxFdmVudC5kZWx0YVgoKTsKLSAgICAgICAgICAgIGlmICht
X3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25MZWZ0ICYmIG1fY3VtdWxhdGl2ZUhvcml6b250YWxT
Y3JvbGwgPCAwKQotICAgICAgICAgICAgICAgIG1fZGlkQ3VtdWxhdGl2ZUhvcml6b250YWxTY3Jv
bGxFdmVyU3dpdGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9mUGluID0gdHJ1ZTsKLSAgICAgICAgICAg
IGlmIChtX3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25SaWdodCAmJiBtX2N1bXVsYXRpdmVIb3Jp
em9udGFsU2Nyb2xsID4gMCkKLSAgICAgICAgICAgICAgICBtX2RpZEN1bXVsYXRpdmVIb3Jpem9u
dGFsU2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25PZlBpbiA9IHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBBZnRlciBhIGdlc3R1cmUgYmVnaW5zLCB3ZSBnbyB0aHJvdWdo
OgotICAgICAgICAvLyAxKyBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUKLSAgICAgICAgLy8g
MCsgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkCi0gICAgICAgIC8vIDEgUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2VFbmRlZCBpZiB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lIGNoYW5nZWQgZXZl
bnQKLSAgICAgICAgaWYgKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlTm9uZSAmJiAhbV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbEV2ZXJT
d2l0Y2hUb09wcG9zaXRlRGlyZWN0aW9uT2ZQaW4pIHsKLSAgICAgICAgICAgIGlmICgoaXNTY3Jv
bGxpbmdMZWZ0QW5kU2hvdWxkTm90UnViYmVyQmFuZCh3aGVlbEV2ZW50LCBtX3Njcm9sbGFibGVB
cmVhKSAmJgotICAgICAgICAgICAgICAgIG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPbkxlZnQg
JiYKLSAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250YWxTY3JvbGxl
clBpbm5lZFRvTWluaW11bVBvc2l0aW9uKCkpIHx8Ci0gICAgICAgICAgICAgICAgKGlzU2Nyb2xs
aW5nUmlnaHRBbmRTaG91bGROb3RSdWJiZXJCYW5kKHdoZWVsRXZlbnQsIG1fc2Nyb2xsYWJsZUFy
ZWEpICYmCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uUmlnaHQg
JiYKLSAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250YWxTY3JvbGxl
clBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNj
cm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc01vbWVudHVtU2Nyb2xsRXZlbnQgPSAo
d2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgIT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25l
KTsKLSAgICBpZiAobV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgJiYgKGlzTW9tZW50dW1TY3JvbGxF
dmVudCB8fCBtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkpIHsKLSAgICAgICAgaWYg
KHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5k
ZWQpIHsKLSAgICAgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgc21vb3RoU2Nyb2xsV2l0aEV2ZW50KHdoZWVsRXZlbnQpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmhhbmRsZUdlc3R1
cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQotewotICAg
IGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxC
ZWdpbikKLSAgICAgICAgYmVnaW5TY3JvbGxHZXN0dXJlKCk7Ci0gICAgZWxzZSBpZiAoZ2VzdHVy
ZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kKQotICAgICAg
ICBlbmRTY3JvbGxHZXN0dXJlKCk7Ci19Ci0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6cGlubmVkSW5EaXJlY3Rpb24oZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpCi17Ci0gICAg
RmxvYXRTaXplIGxpbWl0RGVsdGE7Ci0gICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVs
dGFYKSkgewotICAgICAgICBpZiAoZGVsdGFZIDwgMCkgewotICAgICAgICAgICAgLy8gV2UgYXJl
IHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhl
IHRvcAotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+
dmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpICsgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmln
aW4oKS55KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWlu
ZyB0byBzY3JvbGwgZG93bi4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgYm90
dG9tCi0gICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVhLT5j
b250ZW50c1NpemUoKS5oZWlnaHQoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVu
dFJlY3QoKS5tYXhZKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS55KCkpKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZGVsdGFYICE9IDApIHsKLSAgICAgICAgaWYgKGRl
bHRhWCA8IDApIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGxlZnQu
ICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGxlZnQKLSAgICAgICAgICAgIGxp
bWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCku
eCgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueCgpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHJpZ2h0LiAgTWFr
ZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSByaWdodAotICAgICAgICAgICAgbGltaXRE
ZWx0YS5zZXRXaWR0aChtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0g
KG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLm1heFgoKSArIG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIGlmICgoZGVsdGFYICE9IDAgfHwgZGVsdGFZICE9IDApICYmIChsaW1pdERlbHRhLndpZHRo
KCkgPCAxICYmIGxpbWl0RGVsdGEuaGVpZ2h0KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3Njcm9s
bGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKSkgewotICAgIGNhc2UgU2Nyb2xs
RWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAgICAgICBTY3JvbGxiYXIqIGhTY3JvbGxlciA9IG1f
c2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICAgICAgU2Nyb2xsYmFy
KiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAg
ICAgICByZXR1cm4gKCgodlNjcm9sbGVyICYmIHZTY3JvbGxlci0+ZW5hYmxlZCgpKSB8fCAoIWhT
Y3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFibGVkKCkpKSk7Ci0gICAgfQotICAgIGNhc2UgU2Ny
b2xsRWxhc3RpY2l0eU5vbmU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIFNjcm9s
bEVsYXN0aWNpdHlBbGxvd2VkOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25zdAot
ewotICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHkoKSkgewotICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAgICAgICBT
Y3JvbGxiYXIqIGhTY3JvbGxlciA9IG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxi
YXIoKTsKLSAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52
ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgICAgICByZXR1cm4gKCgoaFNjcm9sbGVyICYmIGhTY3Jv
bGxlci0+ZW5hYmxlZCgpKSB8fCAoIXZTY3JvbGxlciB8fCAhdlNjcm9sbGVyLT5lbmFibGVkKCkp
KSk7Ci0gICAgfQotICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eU5vbmU6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBbGxvd2VkOgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c21vb3RoU2Nyb2xs
V2l0aEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBt
X2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOwotCi0gICAgZmxvYXQgZGVsdGFYID0g
bV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCk7Ci0gICAgZmxvYXQgZGVsdGFZID0gbV9vdmVy
Zmxvd1Njcm9sbERlbHRhLmhlaWdodCgpOwotCi0gICAgLy8gUmVzZXQgb3ZlcmZsb3cgdmFsdWVz
IGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byByZW1vdmUgZGVsdGEgYXQgdmFyaW91cyBwb2ludHMg
YW5kIHB1dCBpdCBpbnRvIG92ZXJmbG93LgotICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZs
b2F0U2l6ZSgpOwotCi0gICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVu
dC5kZWx0YVgoKTsKLSAgICBmbG9hdCBldmVudENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50
LmRlbHRhWSgpOwotCi0gICAgZGVsdGFYICs9IGV2ZW50Q29hbGVzY2VkRGVsdGFYOwotICAgIGRl
bHRhWSArPSBldmVudENvYWxlc2NlZERlbHRhWTsKLQotICAgIC8vIFNsaWdodGx5IHByZWZlciBz
Y3JvbGxpbmcgdmVydGljYWxseSBieSBhcHBseWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQotICAg
IGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpCi0gICAgICAgIGRlbHRhWCA9IDA7
Ci0gICAgZWxzZQotICAgICAgICBkZWx0YVkgPSAwOwotCi0gICAgYm9vbCBpc1ZlcnRpY2FsbHlT
dHJldGNoZWQgPSBmYWxzZTsKLSAgICBib29sIGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0gZmFs
c2U7Ci0gICAgYm9vbCBzaG91bGRTdHJldGNoID0gZmFsc2U7Ci0gICAgCi0gICAgSW50U2l6ZSBz
dHJldGNoQW1vdW50ID0gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKLQotICAg
IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0gc3RyZXRjaEFtb3VudC53aWR0aCgpOwotICAgIGlz
VmVydGljYWxseVN0cmV0Y2hlZCA9IHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCk7Ci0KLSAgICBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSA9IHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpOwot
Ci0gICAgLy8gSWYgd2UgYXJlIHN0YXJ0aW5nIG1vbWVudHVtIHNjcm9sbGluZyB0aGVuIGRvIHNv
bWUgc2V0dXAuCi0gICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAocGhhc2Ug
PT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbiB8fCBwaGFzZSA9PSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZUNoYW5nZWQpKQotICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9
IHRydWU7Ci0KLSAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSB3aGVlbEV2ZW50LnRpbWVz
dGFtcCgpIC0gbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7Ci0gICAgaWYgKG1faW5TY3Jv
bGxHZXN0dXJlIHx8IG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKSB7Ci0gICAgICAgIGlmICht
X2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVsdGEgPiAwICYmIHRpbWVEZWx0
YSA8IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpIHsKLSAgICAgICAgICAgIG1fbW9tZW50
dW1WZWxvY2l0eS5zZXRXaWR0aChldmVudENvYWxlc2NlZERlbHRhWCAvIChmbG9hdCl0aW1lRGVs
dGEpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNldEhlaWdodChldmVudENvYWxl
c2NlZERlbHRhWSAvIChmbG9hdCl0aW1lRGVsdGEpOwotICAgICAgICAgICAgbV9sYXN0TW9tZW50
dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2
ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRT
aXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNWZXJ0aWNhbGx5U3RyZXRjaGVkKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkICYmIHBpbm5lZEluRGly
ZWN0aW9uKGRlbHRhWCwgMCkpIHsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
U3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0aWNhbC4KLSAgICAgICAgICAgICAgICBpZiAoZGVs
dGFZICE9IDAgJiYgKGZhYnNmKGRlbHRhWCAvIGRlbHRhWSkgPCBydWJiZXJiYW5kRGlyZWN0aW9u
TG9ja1N0cmV0Y2hSYXRpbykpCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVsdGFYKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVx
dWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxv
d1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVs
dGFYKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRo
KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmIChpc0hvcml6b250YWxseVN0cmV0Y2hlZCkgewotICAgICAgICAg
ICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSBob3Jpem9udGFsLgotICAgICAgICAgICAgaWYg
KHBpbm5lZEluRGlyZWN0aW9uKDAsIGRlbHRhWSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGVs
dGFYICE9IDAgJiYgKGZhYnNmKGRlbHRhWSAvIGRlbHRhWCkgPCBydWJiZXJiYW5kRGlyZWN0aW9u
TG9ja1N0cmV0Y2hSYXRpbykpCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVsdGFZKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVx
dWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxv
d1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBk
ZWx0YVkpOwotICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVp
Z2h0KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBOb3Qgc3RyZXRjaGluZyBhdCBh
bGwgeWV0LgotICAgICAgICAgICAgaWYgKHBpbm5lZEluRGlyZWN0aW9uKGRlbHRhWCwgZGVsdGFZ
KSkgewotICAgICAgICAgICAgICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWlu
aW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndp
ZHRoKCkgKyBkZWx0YVgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX292ZXJm
bG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBk
ZWx0YVgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzaG91bGRTdHJldGNo
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChkZWx0
YVggIT0gMCB8fCBkZWx0YVkgIT0gMCkgewotICAgICAgICBpZiAoIShzaG91bGRTdHJldGNoIHx8
IGlzVmVydGljYWxseVN0cmV0Y2hlZCB8fCBpc0hvcml6b250YWxseVN0cmV0Y2hlZCkpIHsKLSAg
ICAgICAgICAgIGlmIChkZWx0YVkgIT0gMCkgewotICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBz
Y3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLSAgICAgICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxC
eURlbHRhWShkZWx0YVkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRlbHRhWCAh
PSAwKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigp
OwotICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGRlbHRhWCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWFsbG93c0hvcml6
b250YWxTdHJldGNoaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBkZWx0YVggPSAwOwotICAgICAg
ICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoKGRlbHRhWCAhPSAwKSAmJiAhaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgJiYgIXBpbm5lZElu
RGlyZWN0aW9uKGRlbHRhWCwgMCkpIHsKLSAgICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xs
V2hlZWxNdWx0aXBsaWVyKCk7Ci0KLSAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5z
ZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZGVsdGFYKTsKLSAgICAgICAgICAgICAgICBtX3Nj
cm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsK
LQotICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkpIHsKLSAgICAg
ICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVs
dGFZID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWSAhPSAwKSAmJiAhaXNWZXJ0
aWNhbGx5U3RyZXRjaGVkICYmICFwaW5uZWRJbkRpcmVjdGlvbigwLCBkZWx0YVkpKSB7Ci0gICAg
ICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwotCi0gICAgICAg
ICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UoZmFsc2UpOwotICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGRl
bHRhWSk7Ci0gICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICBkZWx0YVkgPSAw
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBJbnRTaXplIHN0cmV0
Y2hBbW91bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwotICAgICAgICAK
LSAgICAgICAgICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgewotICAgICAgICAg
ICAgICAgIGlmICgocGlubmVkSW5EaXJlY3Rpb24oZXZlbnRDb2FsZXNjZWREZWx0YVgsIGV2ZW50
Q29hbGVzY2VkRGVsdGFZKSB8fCAoZmFic2YoZXZlbnRDb2FsZXNjZWREZWx0YVgpICsgZmFic2Yo
ZXZlbnRDb2FsZXNjZWREZWx0YVkpIDw9IDApKSAmJiBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVz
dGFtcCkgewotICAgICAgICAgICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5z
ZXRXaWR0aChtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAg
ICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChtX3N0cmV0Y2hTY3JvbGxGb3JjZS5o
ZWlnaHQoKSArIGRlbHRhWSk7Ci0KLSAgICAgICAgICAgIEZsb2F0U2l6ZSBkYW1wZWREZWx0YShj
ZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lk
dGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xs
Rm9yY2UuaGVpZ2h0KCkpKSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IG9yaWdPcmlnaW4gPSAo
bV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIHN0cmV0Y2hBbW91bnQ7Ci0gICAgICAgICAg
ICBGbG9hdFBvaW50IG5ld09yaWdpbiA9IG9yaWdPcmlnaW4gKyBkYW1wZWREZWx0YTsKLQotICAg
ICAgICAgICAgaWYgKG9yaWdPcmlnaW4gIT0gbmV3T3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFs
c2UpOwotICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2luKTsK
LSAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZSh0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiBwaGFzZSA9PSBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZUVuZGVkKSB7Ci0gICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNz
ID0gZmFsc2U7Ci0gICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7Ci0gICAg
ICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YmVnaW5TY3JvbGxHZXN0dXJlKCkKLXsKLSAgICBk
aWRCZWdpblNjcm9sbEdlc3R1cmUoKTsKLQotICAgIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9h
ZCA9IHRydWU7Ci0gICAgbV9pblNjcm9sbEdlc3R1cmUgPSB0cnVlOwotICAgIG1fbW9tZW50dW1T
Y3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0gICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBm
YWxzZTsKLSAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7Ci0gICAgbV9tb21l
bnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAgbV9zY3JvbGxlckluaXRpYWxseVBpbm5l
ZE9uTGVmdCA9IG1fc2Nyb2xsYWJsZUFyZWEtPmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9N
aW5pbXVtUG9zaXRpb24oKTsKLSAgICBtX3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25SaWdodCA9
IG1fc2Nyb2xsYWJsZUFyZWEtPmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NYXhpbXVtUG9z
aXRpb24oKTsKLSAgICBtX2N1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsID0gMDsKLSAgICBtX2Rp
ZEN1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25P
ZlBpbiA9IGZhbHNlOwotICAgIAotICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fc2Nyb2xs
YWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7Ci0gICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0
V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQud2lkdGgoKSkp
OwotICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFz
dGljRGVsdGEoc3RyZXRjaEFtb3VudC5oZWlnaHQoKSkpOwotCi0gICAgbV9vdmVyZmxvd1Njcm9s
bERlbHRhID0gRmxvYXRTaXplKCk7Ci0gICAgCi0gICAgaWYgKG1fc25hcFJ1YmJlckJhbmRUaW1l
ci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOwotfQot
Ci12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmVuZFNjcm9sbEdlc3R1cmUoKQotewot
ICAgIGRpZEVuZFNjcm9sbEdlc3R1cmUoKTsKLQotICAgIHNuYXBSdWJiZXJCYW5kKCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1YmJlckJhbmQoKQotewotICAg
IENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIGlmICht
X2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2Np
dHlaZXJvaW5nVGltZW91dCkKLSAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXpl
KCk7Ci0KLSAgICBtX2luU2Nyb2xsR2VzdHVyZSA9IGZhbHNlOwotCi0gICAgaWYgKG1fc25hcFJ1
YmJlckJhbmRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXJ0
VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKLSAgICBtX3N0
YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQo
KTsKLSAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotCi0gICAgbV9zbmFwUnViYmVy
QmFuZFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEuMC82MC4wKTsKLX0KLQotc3RhdGljIGlubGluZSBm
bG9hdCByb3VuZFRvd2FyZFplcm8oZmxvYXQgbnVtKQotewotICAgIHJldHVybiBudW0gPiAwID8g
Y2VpbGYobnVtIC0gMC41ZikgOiBmbG9vcmYobnVtICsgMC41Zik7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgZmxvYXQgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhmbG9hdCBudW0pCi17Ci0gICAg
ZmxvYXQgcm91bmRlZE51bSA9IHJvdW5kZihudW0pOwotICAgIGlmIChmYWJzKG51bSAtIHJvdW5k
ZWROdW0pIDwgMC4xMjUpCi0gICAgICAgIG51bSA9IHJvdW5kZWROdW07Ci0KLSAgICByZXR1cm4g
cm91bmRUb3dhcmRaZXJvKG51bSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM+KikKLXsKLSAgICBpZiAoIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzIHx8IG1faWdub3Jl
TW9tZW50dW1TY3JvbGxzKSB7Ci0gICAgICAgIENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IFtO
U0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXSAtIG1fc3RhcnRUaW1lOwotCi0g
ICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBGbG9hdFNpemUoKSkgewotICAgICAgICAgICAg
bV9zdGFydFN0cmV0Y2ggPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwotICAg
ICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7ICAgIAotICAgICAg
ICAgICAgICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdG9wKCk7Ci0gICAgICAgICAgICAgICAg
bV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKLSAgICAgICAgICAgICAgICBtX3N0
YXJ0VGltZSA9IDA7Ci0gICAgICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUo
KTsKLSAgICAgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgICAg
ICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKLQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
ZGlkU3RhcnRSdWJiZXJCYW5kKHJvdW5kZWRJbnRTaXplKG1fc3RhcnRTdHJldGNoKSk7Ci0KLSAg
ICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVu
dFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkpIC0g
bV9zdGFydFN0cmV0Y2g7Ci0gICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IG1fbW9tZW50dW1W
ZWxvY2l0eTsKLQotICAgICAgICAgICAgLy8gSnVzdCBsaWtlIG5vcm1hbCBzY3JvbGxpbmcsIHBy
ZWZlciB2ZXJ0aWNhbCBydWJiZXJiYW5kaW5nCi0gICAgICAgICAgICBpZiAoZmFic2YobV9vcmln
VmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LndpZHRoKCkpKQotICAg
ICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCBob3Jpem9udGFsbHkgaWYgaXQncyBub3Qg
cG9zc2libGUgdG8gc2Nyb2xsIGhvcml6b250YWxseQotICAgICAgICAgICAgU2Nyb2xsYmFyKiBo
U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAg
ICAgICAgICBpZiAoIWhTY3JvbGxlciB8fCAhaFNjcm9sbGVyLT5lbmFibGVkKCkpCi0gICAgICAg
ICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0V2lkdGgoMCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5kIHZlcnRpY2FsbHkgaWYgaXQncyBub3QgcG9zc2li
bGUgdG8gc2Nyb2xsIGhvcml6b250YWxseQotICAgICAgICAgICAgU2Nyb2xsYmFyKiB2U2Nyb2xs
ZXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgICAgICAgICAg
aWYgKCF2U2Nyb2xsZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKQotICAgICAgICAgICAgICAg
IG1fb3JpZ1ZlbG9jaXR5LnNldEhlaWdodCgwKTsKLSAgICAgICAgfQotCi0gICAgICAgIEZsb2F0
UG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JU
aW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRoKCks
IChmbG9hdCl0aW1lRGVsdGEpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZFRvRGV2
aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRj
aC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCAoZmxvYXQpdGltZURlbHRhKSkp
OwotCi0gICAgICAgIGlmIChmYWJzKGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnkoKSkg
Pj0gMSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4gPSBtX29yaWdPcmlnaW4g
KyBkZWx0YTsKLQotICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xs
VG9Qb2ludChuZXdPcmlnaW4pOwotICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29u
c3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7Ci0KLSAgICAgICAgICAgIEZsb2F0
U2l6ZSBuZXdTdHJldGNoID0gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVi
b3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2gud2lkdGgoKSkpOwotICAgICAgICAg
ICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNE
ZWx0YShuZXdTdHJldGNoLmhlaWdodCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG1fb3JpZ09yaWdpbik7Ci0KLSAgICAgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPmRpZENvbXBsZXRlUnViYmVyQmFuZChyb3VuZGVkSW50U2l6ZShtX3N0
YXJ0U3RyZXRjaCkpOwotCi0gICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgp
OwotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwotICAgICAgICAgICAgbV9zdGFy
dFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0
UG9pbnQoKTsKLSAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUlu
dGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKLSAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9h
dFNpemUoKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpzZXRJc0FjdGl2ZSgpCi17Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWls
YWJsZSgpKSB7Ci0gICAgICAgIGlmIChuZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUoKSkKLSAgICAg
ICAgICAgIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKLSAgICB9Ci19Ci0KLSNpZiBVU0UoV0tfU0NS
T0xMQkFSX1BBSU5URVIpCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnVwZGF0ZVNj
cm9sbGVyU3R5bGUoKQotewotICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBh
Z2UoKSkgewotICAgICAgICBzZXROZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUodHJ1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKiBtYWNU
aGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhlbWUoKTsKLSAgICBpZiAoIW1hY1RoZW1lKSB7Ci0g
ICAgICAgIHNldE5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZShmYWxzZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpbnQgbmV3U3R5bGUgPSB3a1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyU3R5bGUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Ci0KLSAgICBpZiAo
U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsK
LQotICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgb2xkVmVydGljYWxQYWludGVyID0gd2tW
ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkpOwotICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgbmV3VmVydGlj
YWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKG9sZFZlcnRpY2Fs
UGFpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHlsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7Ci0gICAgICAgIG1hY1RoZW1lLT5zZXRO
ZXdQYWludGVyRm9yU2Nyb2xsYmFyKHZlcnRpY2FsU2Nyb2xsYmFyLCBuZXdWZXJ0aWNhbFBhaW50
ZXIpOwotICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihtX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBuZXdWZXJ0aWNhbFBhaW50ZXIsIGZhbHNlKTsKLQot
ICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQg
dGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZSAKLSAgICAgICAgLy8gZnJhbWVSZWN0
IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3Vy
ZSB0aGUgcG9zaXRpb24KLSAgICAgICAgLy8gYW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRl
ZC4KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3Mo
dmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwotICAgICAgICB2ZXJ0aWNhbFNjcm9s
bGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsK
LSAgICB9Ci0KLSAgICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xs
YWJsZUFyZWEoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIGhvcml6b250YWxT
Y3JvbGxiYXItPmludmFsaWRhdGUoKTsKLQotICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYg
b2xkSG9yaXpvbnRhbFBhaW50ZXIgPSB3a0hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRm9yQ29u
dHJvbGxlcihtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKLSAgICAgICAgV0tT
Y3JvbGxiYXJQYWludGVyUmVmIG5ld0hvcml6b250YWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFy
UmVwbGFjZW1lbnRQYWludGVyKG9sZEhvcml6b250YWxQYWludGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3U3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
b3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgIG1hY1RoZW1lLT5zZXROZXdQYWludGVyRm9yU2Nyb2xs
YmFyKGhvcml6b250YWxTY3JvbGxiYXIsIG5ld0hvcml6b250YWxQYWludGVyKTsKLSAgICAgICAg
d2tTZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlci5nZXQoKSwgbmV3SG9yaXpvbnRhbFBhaW50ZXIsIHRydWUpOwotCi0gICAgICAgIC8vIFRo
ZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywg
c28gd2UgbXVzdCByZS1zZXQgdGhlIAotICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0
aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlv
bgotICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgotICAgICAgICBp
bnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhob3Jpem9udGFsU2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKLSAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0
RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKLSAgICB9Ci0K
LSAgICAvLyBJZiBuZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUoKSBpcyB0cnVlLCB0aGVuIHRoZSBw
YWdlIGlzIHJlc3RvcmluZyBmcm9tIHRoZSBwYWdlIGNhY2hlLCBhbmQgCi0gICAgLy8gYSByZWxh
eW91dCB3aWxsIGhhcHBlbiBvbiBpdHMgb3duLiBPdGhlcndpc2UsIHdlIG11c3QgaW5pdGlhdGUg
YSByZS1sYXlvdXQgb3Vyc2VsdmVzLgotICAgIHNjcm9sbGFibGVBcmVhKCktPnNjcm9sbGJhclN0
eWxlQ2hhbmdlZChuZXdTdHlsZSwgIW5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSgpKTsKLQotICAg
IHNldE5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZShmYWxzZSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCkKLXsKLSAgICBtX2lu
aXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLnN0YXJ0T25lU2hvdCgwLjEpOwotfQotCi1ib29sIFNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuaXNBY3RpdmUo
KTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzdG9wU2Nyb2xsYmFyUGFp
bnRUaW1lcigpCi17Ci0gICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdG9wKCk7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50
VGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiopCi17Ci0gICAgd2tT
Y3JvbGxiYXJQYWludGVyRm9yY2VGbGFzaFNjcm9sbGVycyhtX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpKTsKLX0KLSNlbmRpZgotCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3JvbGxlclRo
dW1iKQotewotICAgIEludFJlY3QgcmVjdEluVmlld0Nvb3JkaW5hdGVzID0gc2Nyb2xsZXJUaHVt
YjsKLSAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJsZUFy
ZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJlY3RJblZpZXdDb29yZGluYXRlcyA9
IHZlcnRpY2FsU2Nyb2xsYmFyLT5jb252ZXJ0VG9Db250YWluaW5nVmlldyhzY3JvbGxlclRodW1i
KTsKLQotICAgIGlmIChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPT0gbV92aXNpYmxlU2Nyb2xsZXJU
aHVtYlJlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldFZp
c2libGVTY3JvbGxlclRodW1iUmVjdChyZWN0SW5WaWV3Q29vcmRpbmF0ZXMpOwotICAgIG1fdmlz
aWJsZVNjcm9sbGVyVGh1bWJSZWN0ID0gcmVjdEluVmlld0Nvb3JkaW5hdGVzOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVz
Q2hyb21pdW1NYWMuaAkocmV2aXNpb24gMTAzMjgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXND
aHJvbWl1bU1hY19oCi0jZGVmaW5lIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1h
Y19oCi0KLSNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCi0KLS8vIFB1YmxpYyBBUElzIG5v
dCBhdmFpbGFibGUgb24gdmVyc2lvbnMgb2YgTWFjIG9uIHdoaWNoIHdlIGJ1aWxkCi0jaWYgKGRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgfHwgZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xF
T1BBUkQpKQotZW51bSB7Ci0gICAgTlNTY3JvbGxlclN0eWxlTGVnYWN5ICAgICAgID0gMCwKLSAg
ICBOU1Njcm9sbGVyU3R5bGVPdmVybGF5ICAgICAgPSAxCi19OwotCi0jaWZkZWYgX19PQkpDX18K
LXR5cGVkZWYgTlNJbnRlZ2VyIE5TU2Nyb2xsZXJTdHlsZTsKLSNlbmRpZgotI2VuZGlmCi0KLXR5
cGVkZWYgdWludDMyIHdrU2Nyb2xsZXJTdHlsZTsKLQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3Mg
TlNTY3JvbGxlckltcDsKLUBjbGFzcyBOU1Njcm9sbGVySW1wUGFpcjsKLSNlbHNlCi1jbGFzcyBO
U1Njcm9sbGVySW1wOwotY2xhc3MgTlNTY3JvbGxlckltcFBhaXI7Ci0jZW5kaWYKLQotdHlwZWRl
ZiBOU1Njcm9sbGVySW1wKiBXS1Njcm9sbGJhclBhaW50ZXJSZWY7Ci10eXBlZGVmIE5TU2Nyb2xs
ZXJJbXBQYWlyKiBXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmOwotCi1ib29sIGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpOwotCi0vLyBTY3JvbGxiYXIgUGFpbnRlcgotYm9v
bCB3a1Njcm9sbGJhclBhaW50ZXJVc2VzT3ZlcmxheVNjcm9sbGVycyh2b2lkKTsKLWJvb2wgd2tT
Y3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7Ci1DR0Zs
b2F0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYpOwot
dm9pZCB3a1Njcm9sbGJhclBhaW50ZXJTZXRPdmVybGF5U3RhdGUoV0tTY3JvbGxiYXJQYWludGVy
UmVmLCBpbnQgb3ZlcmxheVNjcm9sbGVyU3RhdGUpOwotdm9pZCB3a1Njcm9sbGJhclBhaW50ZXJQ
YWludChXS1Njcm9sbGJhclBhaW50ZXJSZWYsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBD
R0Zsb2F0IHByb3BvcnRpb24sIE5TUmVjdCBmcmFtZVJlY3QpOwotdm9pZCB3a1Njcm9sbGJhclBh
aW50ZXJQYWludFRyYWNrKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiwgYm9vbCBlbmFibGVkLCBkb3Vi
bGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgTlNSZWN0IGZyYW1lUmVjdCk7Ci12b2lkIHdr
U2Nyb2xsYmFyUGFpbnRlclBhaW50S25vYihXS1Njcm9sbGJhclBhaW50ZXJSZWYpOwotaW50IHdr
U2Nyb2xsYmFyTWluaW11bVRodW1iTGVuZ3RoKFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7Ci12b2lk
IHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiwgaWQg
c2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlKTsKLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyU2V0RW5h
YmxlZChXS1Njcm9sbGJhclBhaW50ZXJSZWYsIGJvb2wgZW5hYmxlZCk7Ci1DR0Zsb2F0IHdrU2Ny
b2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmKTsKLVdLU2Nyb2xs
YmFyUGFpbnRlclJlZiB3a01ha2VTY3JvbGxiYXJQYWludGVyKGludCBjb250cm9sU2l6ZSwgYm9v
bCBpc0hvcml6b250YWwpOwotaW50IHdrU2Nyb2xsYmFyVGhpY2tuZXNzKGludCBjb250cm9sU2l6
ZSk7Ci1pbnQgd2tTY3JvbGxiYXJNaW5pbXVtVG90YWxMZW5ndGhOZWVkZWRGb3JUaHVtYihXS1Nj
cm9sbGJhclBhaW50ZXJSZWYpOwotQ0dSZWN0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KFdL
U2Nyb2xsYmFyUGFpbnRlclJlZik7Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xs
YmFyUmVwbGFjZW1lbnRQYWludGVyKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBvbGRQYWludGVyLCBp
bnQgbmV3U3R5bGUsIGludCBjb250cm9sU2l6ZSwgYm9vbCBpc0hvcml6b250YWwpOwotdm9pZCB3
a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmLCBDR0Zs
b2F0KTsKLXZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShXS1Njcm9sbGJhclBh
aW50ZXJSZWYsIENHRmxvYXQpOwotCi1lbnVtIHsKLSAgICB3a1Njcm9sbGVyS25vYlN0eWxlRGVm
YXVsdCA9IDAsCi0gICAgd2tTY3JvbGxlcktub2JTdHlsZURhcmsgPSAxLAotICAgIHdrU2Nyb2xs
ZXJLbm9iU3R5bGVMaWdodCA9IDIKLX07Ci10eXBlZGVmIHVpbnQzMiB3a1Njcm9sbGVyS25vYlN0
eWxlOwotZXh0ZXJuIHZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKFdLU2Nyb2xs
YmFyUGFpbnRlclJlZiwgd2tTY3JvbGxlcktub2JTdHlsZSk7Ci0KLS8vIFNjcm9sbGJhciBQYWlu
dGVyIENvbnRyb2xsZXIKLVdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgd2tNYWtlU2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIoaWQgcGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSk7Ci12
b2lkIHdrQ29udGVudEFyZWFTY3JvbGxlZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVm
KTsKLXZvaWQgd2tDb250ZW50QXJlYVdpbGxQYWludChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyUmVmKTsKLXZvaWQgd2tNb3VzZUVudGVyZWRDb250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyUmVmKTsKLXZvaWQgd2tNb3VzZUV4aXRlZENvbnRlbnRBcmVhKFdLU2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a01vdXNlTW92ZWRJbkNvbnRlbnRBcmVh
KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a1dpbGxTdGFydExpdmVS
ZXNpemUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrQ29udGVudEFy
ZWFSZXNpemVkKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a1dpbGxF
bmRMaXZlUmVzaXplKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwotdm9pZCB3a0Nv
bnRlbnRBcmVhRGlkU2hvdyhXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKLXZvaWQg
d2tDb250ZW50QXJlYURpZEhpZGUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12
b2lkIHdrRGlkQmVnaW5TY3JvbGxHZXN0dXJlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJS
ZWYpOwotdm9pZCB3a0RpZEVuZFNjcm9sbEdlc3R1cmUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlclJlZik7Ci12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMoV0tT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci12b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmLCB3a1Njcm9s
bGVyU3R5bGUgbmV3U3R5bGUpOwotdm9pZCB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxl
cihXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmLCBXS1Njcm9sbGJhclBhaW50ZXJSZWYs
IGJvb2wgaXNIb3Jpem9udGFsKTsKLVdLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a1ZlcnRpY2FsU2Ny
b2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJl
Zik7Ci1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tIb3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckZv
ckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Ci13a1Njcm9sbGVy
U3R5bGUgd2tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKFdLU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJSZWYpOwotCi0jZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQot
Ci0jZW5kaWYgLy8gU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRp
ZXNDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMubW0JKHJldmlzaW9u
IDEwMzI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92
ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwzNjQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKLQot
I2luY2x1ZGUgIlNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oIgotI2luY2x1
ZGUgIlNjcm9sbFR5cGVzLmgiCi0jaW5jbHVkZSA8Q29jb2EvQ29jb2EuaD4KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLS8vIFRoaXMgZmlsZSBjb250YWlucyB1dGlsaXRpZXMgdG8gZHJhdyBv
dmVybGF5IHNjcm9sbGJhcnMuIFRoZXJlIGFyZSBubyBwdWJsaWMKLS8vIEFQSXMgeWV0IG9uIHRo
ZSBNYWMgdG8gZHJhdyBvdmVybGF5IHNjcm9sbGJhcnMgc28gd2UgdXNlIHByaXZhdGUgQVBJcyB0
aGF0Ci0vLyB3ZSBsb29rIHVwIGF0IHJ1bnRpbWUuIElmIHRoZSBwcml2YXRlIEFQSXMgZG9uJ3Qg
ZXhpc3QgdGhlbiB0aGUgd2tNYWtlKgotLy8gZnVuY3Rpb25zIHdpbGwgcmV0dXJuIG5pbC4KLS8v
Ci0vLyBOb3RlLCB0aGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIGNvcGllZCBmcm9tIFdlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UuaC4KLS8vIFVzaW5nIHRoZSBzYW1lIG5hbWVzIG1ha2VzIHRoZSBj
b2RlIGVhc2llciB0byBtYWludGFpbi4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFB1
YmxpYyBBUElzIG5vdCBhdmFpbGFibGUgb24gdmVyc2lvbnMgb2YgTWFjIG9uIHdoaWNoIHdlIGJ1
aWxkCi0jaWYgKGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgfHwgZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpKQotQGludGVyZmFjZSBOU1Njcm9sbGVyIChOU09iamVjdCkKLSsg
KE5TU2Nyb2xsZXJTdHlsZSlwcmVmZXJyZWRTY3JvbGxlclN0eWxlOwotQGVuZAotI2VuZGlmCi0K
LS8vIFRoZXNlIGFyZSBwcml2YXRlIEFQSXMgdG8gZHJhdyBvdmVybGF5IHNjcm9sbGJhcnMuCi1A
aW50ZXJmYWNlIE5TU2Nyb2xsZXJJbXAgOiBOU09iamVjdAotCi0rIChpZClzY3JvbGxlckltcFdp
dGhTdHlsZTooTlNTY3JvbGxlclN0eWxlKXN0eWxlCi0gICAgICAgICAgICAgICBjb250cm9sU2l6
ZTooTlNDb250cm9sU2l6ZSlzaXplCi0gICAgICAgICAgICAgICAgaG9yaXpvbnRhbDooQk9PTClo
b3Jpem9udGFsCi0gICAgICByZXBsYWNpbmdTY3JvbGxlckltcDooaWQpc2Nyb2xsZXI7Ci0KLUBw
cm9wZXJ0eSBDR0Zsb2F0IGtub2JBbHBoYTsKLUBwcm9wZXJ0eSBDR0Zsb2F0IHRyYWNrQWxwaGE7
Ci1AcHJvcGVydHkgQ0dGbG9hdCBrbm9iUHJvcG9ydGlvbjsKLUBwcm9wZXJ0eSBOU0ludGVnZXIg
a25vYlN0eWxlOwotQHByb3BlcnR5KGdldHRlcj1pc0VuYWJsZWQpIEJPT0wgZW5hYmxlZDsKLUBw
cm9wZXJ0eShnZXR0ZXI9aXNIb3Jpem9udGFsKSBCT09MIGhvcml6b250YWw7Ci1AcHJvcGVydHkg
ZG91YmxlIGRvdWJsZVZhbHVlOwotQHByb3BlcnR5KGFzc2lnbikgaWQgZGVsZWdhdGU7Ci0KLS0g
KENHRmxvYXQpa25vYk1pbkxlbmd0aDsKLS0gKENHRmxvYXQpdHJhY2tPdmVybGFwRW5kSW5zZXQ7
Ci0tIChDR0Zsb2F0KWtub2JPdmVybGFwRW5kSW5zZXQ7Ci0tIChDR0Zsb2F0KXRyYWNrRW5kSW5z
ZXQ7Ci0tIChDR0Zsb2F0KWtub2JFbmRJbnNldDsKLS0gKENHRmxvYXQpdHJhY2tCb3hXaWR0aDsK
LS0gKENHRmxvYXQpdHJhY2tXaWR0aDsKLS0gKHZvaWQpc2V0Qm91bmRzU2l6ZTooTlNTaXplKXNp
emU7Ci0tICh2b2lkKWRyYXdLbm9iU2xvdEluUmVjdDooTlNSZWN0KXJlY3QKLSAgICAgICAgICAg
ICAgICAgaGlnaGxpZ2h0OihCT09MKWZsYWc7Ci0tICh2b2lkKWRyYXdLbm9iOwotLSAodm9pZClz
ZXRPdmVybGF5U2Nyb2xsZXJTdGF0ZTooTlNTY3JvbGxlclN0eWxlKXN0YXRlCi0gICAgICAgICAg
ICAgICBmb3JjZUltbWVkaWF0ZWx5OihCT09MKWZsYWc7Ci0tICh2b2lkKXNldERlbGVnYXRlOihp
ZClkZWxlZ2F0ZTsKLS0gKE5TUmVjdClyZWN0Rm9yUGFydDooTlNVSW50ZWdlcilhcmcxOwotCi1A
ZW5kCi0KLS8vIFRoZXNlIGFyZSBwcml2YXRlIEFQSXMgdG8gbWFuYWdlIG92ZXJsYXkgc2Nyb2xs
YmFycy4KLUBpbnRlcmZhY2UgTlNTY3JvbGxlckltcFBhaXIgOiBOU09iamVjdAotCi1AcHJvcGVy
dHkgTlNTY3JvbGxlclN0eWxlIHNjcm9sbGVyU3R5bGU7Ci1AcHJvcGVydHkocmV0YWluKSBOU1Nj
cm9sbGVySW1wICpob3Jpem9udGFsU2Nyb2xsZXJJbXA7Ci1AcHJvcGVydHkocmV0YWluKSBOU1Nj
cm9sbGVySW1wICp2ZXJ0aWNhbFNjcm9sbGVySW1wOwotQHByb3BlcnR5KGFzc2lnbikgaWQgZGVs
ZWdhdGU7Ci0KLS0gKHZvaWQpaGlkZU92ZXJsYXlTY3JvbGxlcnM7Ci0tICh2b2lkKWZsYXNoU2Ny
b2xsZXJzOwotLSAodm9pZCljb250ZW50QXJlYVNjcm9sbGVkOwotLSAodm9pZCljb250ZW50QXJl
YVdpbGxEcmF3OwotLSAodm9pZCljb250ZW50QXJlYURpZEhpZGU7Ci0tICh2b2lkKXdpbmRvd09y
ZGVyZWRPdXQ7Ci0tICh2b2lkKXdpbmRvd09yZGVyZWRJbjsKLS0gKHZvaWQpbW91c2VFbnRlcmVk
Q29udGVudEFyZWE7Ci0tICh2b2lkKW1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhOwotLSAodm9pZClt
b3VzZUV4aXRlZENvbnRlbnRBcmVhOwotLSAodm9pZClzdGFydExpdmVSZXNpemU7Ci0tICh2b2lk
KWNvbnRlbnRBcmVhRGlkUmVzaXplOwotLSAodm9pZCllbmRMaXZlUmVzaXplOwotLSAodm9pZCli
ZWdpblNjcm9sbEdlc3R1cmU7Ci0tICh2b2lkKWVuZFNjcm9sbEdlc3R1cmU7Ci0KLUBlbmQKLQot
c3RhdGljIENsYXNzIGxvb2tVcE5TU2Nyb2xsZXJJbXBDbGFzcygpCi17Ci0gICAgc3RhdGljIENs
YXNzIHJlc3VsdCA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcCIpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBDbGFzcyBsb29rVXBOU1Njcm9sbGVySW1wUGFpckNs
YXNzKCkKLXsKLSAgICBzdGF0aWMgQ2xhc3MgcmVzdWx0ID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJO
U1Njcm9sbGVySW1wUGFpciIpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBOU0Nv
bnRyb2xTaXplIHNjcm9sbGJhckNvbnRyb2xTaXplVG9OU0NvbnRyb2xTaXplKGludCBjb250cm9s
U2l6ZSkKLXsKLSAgICByZXR1cm4gY29udHJvbFNpemUgPT0gV2ViQ29yZTo6UmVndWxhclNjcm9s
bGJhciA/IE5TUmVndWxhckNvbnRyb2xTaXplIDogTlNTbWFsbENvbnRyb2xTaXplOwotfQotCi1z
dGF0aWMgTlNTY3JvbGxlclN0eWxlIHByZWZlcnJlZFNjcm9sbGVyU3R5bGUoKQotewotICAgIGlm
IChbTlNTY3JvbGxlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHByZWZlcnJlZFNjcm9s
bGVyU3R5bGUpXSkKLSAgICAgICAgcmV0dXJuIFtOU1Njcm9sbGVyIHByZWZlcnJlZFNjcm9sbGVy
U3R5bGVdOwotICAgIHJldHVybiBOU1Njcm9sbGVyU3R5bGVMZWdhY3k7Ci19Ci0KLWJvb2wgd2tT
Y3JvbGxiYXJQYWludGVyVXNlc092ZXJsYXlTY3JvbGxlcnModm9pZCkKLXsKLSAgICByZXR1cm4g
cHJlZmVycmVkU2Nyb2xsZXJTdHlsZSgpID09IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXk7Ci19Ci0K
LWJvb2wgd2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZiBwYWludGVyKQotewotICAgIHJldHVybiBbcGFpbnRlciBpc0hvcml6b250YWxdOwotfQotCi1D
R0Zsb2F0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYg
cGFpbnRlcikKLXsKLSAgICByZXR1cm4gW3BhaW50ZXIga25vYkFscGhhXTsKLX0KLQotdm9pZCB3
a1Njcm9sbGJhclBhaW50ZXJTZXRPdmVybGF5U3RhdGUoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBh
aW50ZXIsIGludCBvdmVybGF5U2Nyb2xsZXJTdGF0ZSkKLXsKLSAgICBbcGFpbnRlciBzZXRPdmVy
bGF5U2Nyb2xsZXJTdGF0ZTpvdmVybGF5U2Nyb2xsZXJTdGF0ZQotICAgICAgICAgICAgICAgICAg
ICBmb3JjZUltbWVkaWF0ZWx5OllFU107Ci19Ci0KLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyUGFp
bnQoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZh
bHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIE5TUmVjdCBmcmFtZVJlY3QpCi17Ci0gICAgd2tTY3Jv
bGxiYXJQYWludGVyUGFpbnRUcmFjayhwYWludGVyLCBlbmFibGVkLCB2YWx1ZSwgcHJvcG9ydGlv
biwgZnJhbWVSZWN0KTsKLSAgICB3a1Njcm9sbGJhclBhaW50ZXJQYWludEtub2IocGFpbnRlcik7
Ci19Ci0KLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyUGFpbnRUcmFjayhXS1Njcm9sbGJhclBhaW50
ZXJSZWYgcGFpbnRlciwgYm9vbCBlbmFibGVkLCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9y
dGlvbiwgTlNSZWN0IGZyYW1lUmVjdCkKLXsKLSAgICBbcGFpbnRlciBzZXRFbmFibGVkOmVuYWJs
ZWRdOwotICAgIFtwYWludGVyIHNldEJvdW5kc1NpemU6ZnJhbWVSZWN0LnNpemVdOwotICAgIFtw
YWludGVyIHNldERvdWJsZVZhbHVlOnZhbHVlXTsKLSAgICBbcGFpbnRlciBzZXRLbm9iUHJvcG9y
dGlvbjpwcm9wb3J0aW9uXTsKLQotICAgIGlmIChbcGFpbnRlciBpc0hvcml6b250YWxdKQotICAg
ICAgICBmcmFtZVJlY3Quc2l6ZS5oZWlnaHQgPSBbcGFpbnRlciB0cmFja1dpZHRoXTsKLSAgICBl
bHNlCi0gICAgICAgIGZyYW1lUmVjdC5zaXplLndpZHRoID0gW3BhaW50ZXIgdHJhY2tXaWR0aF07
Ci0gICAgZnJhbWVSZWN0Lm9yaWdpbiA9IE5TWmVyb1BvaW50OwotCi0gICAgW3BhaW50ZXIgZHJh
d0tub2JTbG90SW5SZWN0OmZyYW1lUmVjdCBoaWdobGlnaHQ6Tk9dOwotfQotCi12b2lkIHdrU2Ny
b2xsYmFyUGFpbnRlclBhaW50S25vYihXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikKLXsK
LSAgICBbcGFpbnRlciBkcmF3S25vYl07Ci19Ci0KLWludCB3a1Njcm9sbGJhck1pbmltdW1UaHVt
Ykxlbmd0aChXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICByZXR1cm4gW3Bh
aW50ZXIga25vYk1pbkxlbmd0aF07Ci19Ci0KLXZvaWQgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVs
ZWdhdGUoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIsIGlkIHNjcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZSkKLXsKLSAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpzY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGVdOwotfQotCi12b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclNldEVuYWJsZWQoV0tTY3JvbGxi
YXJQYWludGVyUmVmIHBhaW50ZXIsIGJvb2wgZW5hYmxlZCkKLXsKLSAgICBbcGFpbnRlciBzZXRF
bmFibGVkOmVuYWJsZWRdOwotfQotCi1DR0Zsb2F0IHdrU2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxw
aGEoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIpCi17Ci0gICAgcmV0dXJuIFtwYWludGVy
IHRyYWNrQWxwaGFdOwotfQotCi1XS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xsYmFy
UGFpbnRlcihpbnQgY29udHJvbFNpemUsIGJvb2wgaXNIb3Jpem9udGFsKQotewotICAgIHJldHVy
biB3a01ha2VTY3JvbGxiYXJSZXBsYWNlbWVudFBhaW50ZXIobmlsLCBwcmVmZXJyZWRTY3JvbGxl
clN0eWxlKCksIGNvbnRyb2xTaXplLCBpc0hvcml6b250YWwpOwotfQotCi1pbnQgd2tTY3JvbGxi
YXJUaGlja25lc3MoaW50IGNvbnRyb2xTaXplKQotewotICAgIHJldHVybiBbd2tNYWtlU2Nyb2xs
YmFyUGFpbnRlcihjb250cm9sU2l6ZSwgZmFsc2UpIHRyYWNrQm94V2lkdGhdOwotfQotCi1pbnQg
d2tTY3JvbGxiYXJNaW5pbXVtVG90YWxMZW5ndGhOZWVkZWRGb3JUaHVtYihXS1Njcm9sbGJhclBh
aW50ZXJSZWYgcGFpbnRlcikKLXsKLSAgICByZXR1cm4gW3BhaW50ZXIga25vYk1pbkxlbmd0aF0g
KwotICAgICAgICAgICBbcGFpbnRlciB0cmFja092ZXJsYXBFbmRJbnNldF0gKwotICAgICAgICAg
ICBbcGFpbnRlciBrbm9iT3ZlcmxhcEVuZEluc2V0XSArCi0gICAgICAgICAgIChbcGFpbnRlciB0
cmFja0VuZEluc2V0XSArIFtwYWludGVyIGtub2JFbmRJbnNldF0pICogMjsKLX0KLQotV0tTY3Jv
bGxiYXJQYWludGVyUmVmIHdrVmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihX
S1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgcmV0dXJu
IFtjb250cm9sbGVyIHZlcnRpY2FsU2Nyb2xsZXJJbXBdOwotfQotCi1XS1Njcm9sbGJhclBhaW50
ZXJSZWYgd2tIb3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIHJldHVybiBbY29udHJv
bGxlciBob3Jpem9udGFsU2Nyb2xsZXJJbXBdOwotfQotCi13a1Njcm9sbGVyU3R5bGUgd2tTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJS
ZWYgY29udHJvbGxlcikKLXsKLSAgICByZXR1cm4gW2NvbnRyb2xsZXIgc2Nyb2xsZXJTdHlsZV07
Ci19Ci0KLVdLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a01ha2VTY3JvbGxiYXJSZXBsYWNlbWVudFBh
aW50ZXIoV0tTY3JvbGxiYXJQYWludGVyUmVmIG9sZFBhaW50ZXIsIGludCBuZXdTdHlsZSwgaW50
IGNvbnRyb2xTaXplLCBib29sIGlzSG9yaXpvbnRhbCkKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFy
T3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBb
bG9va1VwTlNTY3JvbGxlckltcENsYXNzKCkgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6bmV3U3R5bGUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xT
aXplOnNjcm9sbGJhckNvbnRyb2xTaXplVG9OU0NvbnRyb2xTaXplKGNvbnRyb2xTaXplKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6
aXNIb3Jpem9udGFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBs
YWNpbmdTY3JvbGxlckltcDpvbGRQYWludGVyXTsKLX0KLQotdm9pZCB3a1NldFBhaW50ZXJGb3JQ
YWludGVyQ29udHJvbGxlcihXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xs
ZXIsIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCBib29sIGlzSG9yaXpvbnRhbCkKLXsK
LSAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICBbY29udHJvbGxlciBzZXRIb3Jpem9udGFs
U2Nyb2xsZXJJbXA6cGFpbnRlcl07Ci0gICAgZWxzZQotICAgICAgICBbY29udHJvbGxlciBzZXRW
ZXJ0aWNhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwotfQotCi12b2lkIHdrU2V0U2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIHBhaW50
ZXIsIHdrU2Nyb2xsZXJTdHlsZSBuZXdTdHlsZSkKLXsKLSAgICBbcGFpbnRlciBzZXRTY3JvbGxl
clN0eWxlOm5ld1N0eWxlXTsKLX0KLQotQ0dSZWN0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0
KFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyKQotewotICAgIHJldHVybiBOU1JlY3RUb0NH
UmVjdChbcGFpbnRlciByZWN0Rm9yUGFydDpOU1Njcm9sbGVyS25vYl0pOwotfQotCi12b2lkIHdr
U2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRl
ciwgQ0dGbG9hdCBhbHBoYSkKLXsKLSAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6YWxwaGFdOwot
fQotCi12b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWlu
dGVyUmVmIHBhaW50ZXIsIENHRmxvYXQgYWxwaGEpCi17Ci0gICAgW3BhaW50ZXIgc2V0VHJhY2tB
bHBoYTphbHBoYV07Ci19Ci0KLXZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKFdL
U2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCB3a1Njcm9sbGVyS25vYlN0eWxlIHN0eWxlKQot
ewotICAgIFtwYWludGVyIHNldEtub2JTdHlsZTpzdHlsZV07Ci19Ci0KLVdLU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJSZWYgd2tNYWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIoaWQgcGFp
bnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSkKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYmFyT3ZlcmxheUFQ
SUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIE5TU2Nyb2xsZXJJbXBQYWly
KiBjb250cm9sbGVyID0gW1tbbG9va1VwTlNTY3JvbGxlckltcFBhaXJDbGFzcygpIGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV07Ci0gICAgW2NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6cGFpbnRlckNv
bnRyb2xsZXJEZWxlZ2F0ZV07Ci0gICAgW2NvbnRyb2xsZXIgc2V0U2Nyb2xsZXJTdHlsZTpwcmVm
ZXJyZWRTY3JvbGxlclN0eWxlKCldOwotICAgIHJldHVybiBjb250cm9sbGVyOwotfQotCi12b2lk
IHdrQ29udGVudEFyZWFTY3JvbGxlZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNv
bnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgY29udGVudEFyZWFTY3JvbGxlZF07Ci19Ci0K
LXZvaWQgd2tDb250ZW50QXJlYVdpbGxQYWludChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
UmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgY29udGVudEFyZWFXaWxsRHJhd107
Ci19Ci0KLXZvaWQgd2tNb3VzZUVudGVyZWRDb250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgbW91c2VFbnRlcmVk
Q29udGVudEFyZWFdOwotfQotCi12b2lkIHdrTW91c2VFeGl0ZWRDb250ZW50QXJlYShXS1Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIg
bW91c2VFeGl0ZWRDb250ZW50QXJlYV07Ci19Ci0KLXZvaWQgd2tNb3VzZU1vdmVkSW5Db250ZW50
QXJlYShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCi17Ci0gICAg
W2NvbnRyb2xsZXIgbW91c2VNb3ZlZEluQ29udGVudEFyZWFdOwotfQotCi12b2lkIHdrV2lsbFN0
YXJ0TGl2ZVJlc2l6ZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIp
Ci17Ci0gICAgW2NvbnRyb2xsZXIgc3RhcnRMaXZlUmVzaXplXTsKLX0KLQotdm9pZCB3a0NvbnRl
bnRBcmVhUmVzaXplZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIp
Ci17Ci0gICAgW2NvbnRyb2xsZXIgY29udGVudEFyZWFEaWRSZXNpemVdOwotfQotCi12b2lkIHdr
V2lsbEVuZExpdmVSZXNpemUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9s
bGVyKQotewotICAgIFtjb250cm9sbGVyIGVuZExpdmVSZXNpemVdOwotfQotCi12b2lkIHdrQ29u
dGVudEFyZWFEaWRTaG93KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxl
cikKLXsKLSAgICBbY29udHJvbGxlciB3aW5kb3dPcmRlcmVkSW5dOwotfQotCi12b2lkIHdrQ29u
dGVudEFyZWFEaWRIaWRlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxl
cikKLXsKLSAgICBbY29udHJvbGxlciB3aW5kb3dPcmRlcmVkT3V0XTsKLX0KLQotdm9pZCB3a0Rp
ZEJlZ2luU2Nyb2xsR2VzdHVyZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRy
b2xsZXIpCi17Ci0gICAgW2NvbnRyb2xsZXIgYmVnaW5TY3JvbGxHZXN0dXJlXTsKLX0KLQotdm9p
ZCB3a0RpZEVuZFNjcm9sbEdlc3R1cmUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBj
b250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIGVuZFNjcm9sbEdlc3R1cmVdOwotfQotCi12
b2lkIHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMoV0tTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQotewotICAgIFtjb250cm9sbGVyIGhpZGVPdmVy
bGF5U2Nyb2xsZXJzXTsKLSAgICBbY29udHJvbGxlciBmbGFzaFNjcm9sbGVyc107Ci19Ci0KLWJv
b2wgaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBh
cGlBdmFpbGFibGUgPSBbbG9va1VwTlNTY3JvbGxlckltcENsYXNzKCkgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihzY3JvbGxlckltcFdpdGhTdHlsZTpjb250cm9sU2l6ZTpob3Jpem9udGFs
OnJlcGxhY2luZ1Njcm9sbGVySW1wOildICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW2xvb2tVcE5TU2Nyb2xsZXJJbXBQYWlyQ2xhc3MoKSBpbnN0YW5jZXNSZXNwb25kVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioc2Nyb2xsZXJTdHlsZSldOwotICAgIHJldHVybiBhcGlBdmFpbGFibGU7
Ci19Ci0KLSNlbmRpZiAvLyBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYy5oCShyZXZpc2lvbiAxMDMyODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYzICsyNywyMiBAQAogI2lmbmRlZiBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjX2gK
ICNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hY19oCiAKLSNpbmNsdWRlICJTY3JvbGxi
YXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZUNvbXBvc2l0ZS5oIgotCi0vLyBUaGlzIGZpbGUgKGFuZCBpdHMgYXNzb2NpYXRlZCAubW0gZmls
ZSkgaXMgYSBjbG9uZSBvZiBTY3JvbGxiYXJUaGVtZU1hYy5oLgotLy8gU2VlIHRoZSAubW0gZmls
ZSBmb3IgZGV0YWlscy4KKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZU1hYy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMgOiBwdWJsaWMg
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgeworY2xhc3MgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
YyA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZU1hYyB7CiBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYygpOwogICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMo
KTsKIAotICAgIHZvaWQgcHJlZmVyZW5jZXNDaGFuZ2VkKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlRW5hYmxlZFN0YXRlKFNjcm9sbGJhciopOwotCiAgICAgdmlydHVhbCBib29sIHBhaW50
KFNjcm9sbGJhciosIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFt
YWdlUmVjdCk7CiAKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFy
Q29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgdXNlc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXIqKTsKLQotICAgIHZpcnR1YWwgZG91Ymxl
IGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpOwotICAgIHZpcnR1YWwgZG91YmxlIGF1dG9z
Y3JvbGxUaW1lckRlbGF5KCk7Ci0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1l
bnQgYnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xs
YmFyKFNjcm9sbGJhciopOwotCi0gICAgdm9pZCBzZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKFNj
cm9sbGJhciosIFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7Ci0gICAgV0tTY3JvbGxiYXJQYWludGVy
UmVmIHBhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKik7Ci0KICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRPdmVyaGFuZ0FyZWFzKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0JiB2ZXJ0aWNhbE92
ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKICAgICAKLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIGJv
b2wgaGFzVGh1bWIoU2Nyb2xsYmFyKik7Ci0KLSAgICB2aXJ0dWFsIEludFJlY3QgYmFja0J1dHRv
blJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsK
LSAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xs
YmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdHJh
Y2tSZWN0KFNjcm9sbGJhciosIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7Ci0KLSAgICB2aXJ0dWFs
IGludCBtYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkgeyByZXR1cm4gNDA7IH0KLQotICAgIHZpcnR1
YWwgaW50IG1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXIqKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREcmFnRG9jdW1lbnRJbnN0ZWFkT2ZUaHVtYihT
Y3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLQogcHJpdmF0ZToKICAgICB2
b2lkIHBhaW50R2l2ZW5UaWNrbWFya3MoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpOwogCi1wcml2YXRlOgogICAgIFJl
ZlB0cjxQYXR0ZXJuPiBtX292ZXJoYW5nUGF0dGVybjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bU1hYy5tbQkocmV2aXNpb24gMTAzMjgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTA4ICsyNywyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lQ2hyb21pdW1NYWMuaCIKIAotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5TU2Nyb2xsZXJJbXBEZXRh
aWxzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCi0jaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRl
IDx3dGYvVW51c2VkUGFyYW0uaD4KIAogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dFNraWEuaCIKICNpbmNsdWRlICJza2lhL2V4dC9za2lhX3V0aWxzX21hYy5oIgogI2Vu
ZGlmCiAKLQotCi0vLyBGSVhNRTogVGhlcmUgYXJlIHJlcGFpbnRpbmcgcHJvYmxlbXMgZHVlIHRv
IEFxdWEgc2Nyb2xsIGJhciBidXR0b25zJyB2aXN1YWwgb3ZlcmZsb3cuCi0KLXVzaW5nIG5hbWVz
cGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotLy8gVGhpcyBmaWxlIChhbmQg
aXRzIGFzc29jaWF0ZWQgLmggZmlsZSkgaXMgYSBjbG9uZSBvZiBTY3JvbGxiYXJUaGVtZU1hYy5t
bS4KLS8vIEJlY2F1c2Ugd2Ugd2FudCB0byBkcmF3IHRpY2ttYXJrcyBpbiB0aGUgc2Nyb2xsYmFy
LCB3ZSBtdXN0IG1haW50YWluIGEgZm9yay4KLS8vIFBsZWFzZSBtYWludGFpbiB0aGlzIGZpbGUg
YnkgcGVyZm9ybWluZyBwYXJhbGxlbCBjaGFuZ2VzIHRvIGl0LgotLy8KLS8vIFRoZSBvbmx5IGNo
YW5nZXMgZnJvbSBTY3JvbGxiYXJUaGVtZU1hYyBzaG91bGQgYmU6Ci0vLyAtIFRoZSBjbGFzc25h
bWUgY2hhbmdlIGZyb20gU2Nyb2xsYmFyVGhlbWVNYWMgdG8gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bU1hYy4KLS8vIC0gSW4gcGFpbnQoKSB0aGUgY29kZSB0byBwYWludCB0aGUgdHJhY2ssIHRpY2tt
YXJrcywgYW5kIHRodW1iIHNlcGFyYXRlbHkuCi0vLyAtIEluIHBhaW50KCkgdGhlIHRodW1iIGlz
IGRyYXduIHZpYSBDaHJvbWVCcmlkZ2UvV2ViVGhlbWVFbmdpbmUuCi0vLyAtIFZhcmlvdXMgZnVu
Y3Rpb25zIHRoYXQgd2VyZSBzcGxpdCB1c2luZyAjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVS
KQotLy8gICBoYXZlIGJlZW4gY29tYmluZWQgdXNpbmcgcnVudGltZSBjaGVja3MgaW5zdGVhZC4K
LS8vCi0vLyBGb3IgYWxsIG90aGVyIGRpZmZlcmVuY2VzLCBpZiBpdCB3YXMgaW50cm9kdWNlZCBp
biB0aGlzIGZpbGUsIHRoZW4gdGhlCi0vLyBtYWludGFpbmVyIGZvcmdvdCB0byBpbmNsdWRlIGl0
IGluIHRoZSBsaXN0OyBvdGhlcndpc2UgaXQgaXMgYW4gdXBkYXRlIHRoYXQKLS8vIHNob3VsZCBo
YXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIGZpbGUgYnV0IHdhcyBub3QuCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNoTWFwPFNjcm9sbGJhciosIFJldGFpblB0cjxXS1Njcm9s
bGJhclBhaW50ZXJSZWY+ID4gU2Nyb2xsYmFyUGFpbnRlck1hcDsKLQotc3RhdGljIFNjcm9sbGJh
clBhaW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCi17Ci0gICAgc3RhdGljIFNjcm9sbGJhclBhaW50
ZXJNYXAqIG1hcCA9IG5ldyBTY3JvbGxiYXJQYWludGVyTWFwOwotICAgIHJldHVybiBtYXA7Ci19
Ci0KLX0KLQotQGludGVyZmFjZSBTY3JvbGxiYXJQcmVmc09ic2VydmVyIDogTlNPYmplY3QKLXsK
LX0KLQotKyAodm9pZClyZWdpc3RlckFzT2JzZXJ2ZXI7Ci0rICh2b2lkKWFwcGVhcmFuY2VQcmVm
c0NoYW5nZWQ6KE5TTm90aWZpY2F0aW9uKil0aGVOb3RpZmljYXRpb247Ci0rICh2b2lkKWJlaGF2
aW9yUHJlZnNDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiopdGhlTm90aWZpY2F0aW9uOwotCi1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQcmVmc09ic2VydmVyCi0KLSsgKHZvaWQpYXBw
ZWFyYW5jZVByZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24qKXVudXNlZE5vdGlmaWNhdGlvbgot
ewotICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwotCi0gICAgU2Nyb2xsYmFy
VGhlbWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAgaWYgKHRoZW1lLT5p
c01vY2tUaGVtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWNfY2FzdDxTY3JvbGxi
YXJUaGVtZUNocm9taXVtTWFjKj4odGhlbWUpLT5wcmVmZXJlbmNlc0NoYW5nZWQoKTsKLSAgICBp
ZiAoc2Nyb2xsYmFyTWFwKCktPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFNjcm9s
bGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHNjcm9sbGJhck1hcCgpLT5lbmQoKTsKLSAg
ICBmb3IgKFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYmFyTWFwKCkt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpdC0+Zmlyc3QtPnN0eWxlQ2hh
bmdlZCgpOwotICAgICAgICBpdC0+Zmlyc3QtPmludmFsaWRhdGUoKTsKLSAgICB9Ci19Ci0KLSsg
KHZvaWQpYmVoYXZpb3JQcmVmc0NoYW5nZWQ6KE5TTm90aWZpY2F0aW9uKil1bnVzZWROb3RpZmlj
YXRpb24KLXsKLSAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKLQotICAgIFNj
cm9sbGJhclRoZW1lKiB0aGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwotICAgIGlmICh0
aGVtZS0+aXNNb2NrVGhlbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhdGljX2Nhc3Q8
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyo+KHRoZW1lKS0+cHJlZmVyZW5jZXNDaGFuZ2VkKCk7
Ci19Ci0KLSsgKHZvaWQpcmVnaXN0ZXJBc09ic2VydmVyCi17Ci0gICAgW1tOU0Rpc3RyaWJ1dGVk
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKGFwcGVhcmFuY2VQcmVmc0NoYW5nZWQ6KSBuYW1lOkAiQXBwbGVBcXVhU2Ny
b2xsQmFyVmFyaWFudENoYW5nZWQiIG9iamVjdDpuaWwgc3VzcGVuc2lvbkJlaGF2aW9yOk5TTm90
aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZlckltbWVkaWF0ZWx5XTsKLSAgICBbW05T
RGlzdHJpYnV0ZWROb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoYmVoYXZpb3JQcmVmc0NoYW5nZWQ6KSBuYW1lOkAiQXBw
bGVOb1JlZGlzcGxheUFwcGVhcmFuY2VQcmVmZXJlbmNlQ2hhbmdlZCIgb2JqZWN0Om5pbCBzdXNw
ZW5zaW9uQmVoYXZpb3I6TlNOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JDb2FsZXNjZV07
Ci19Ci0KLUBlbmQKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JvbGxiYXJUaGVtZSogU2Ny
b2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKQEAgLTEzNywzMzMgKzUwLDE3IEBAIFNjcm9sbGJh
clRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGgKICAgICByZXR1cm4gJnRoZW1lOwogfQog
Ci0vLyBGSVhNRTogR2V0IHRoZXNlIG51bWJlcnMgZnJvbSBDb3JlVUkuCi1zdGF0aWMgaW50IGNT
Y3JvbGxiYXJUaGlja25lc3NbXSA9IHsgMTUsIDExIH07Ci1zdGF0aWMgaW50IGNSZWFsQnV0dG9u
TGVuZ3RoW10gPSB7IDI4LCAyMSB9Owotc3RhdGljIGludCBjQnV0dG9uSW5zZXRbXSA9IHsgMTQs
IDExIH07Ci1zdGF0aWMgaW50IGNCdXR0b25IaXRJbnNldFtdID0geyAzLCAyIH07Ci0vLyBjUmVh
bEJ1dHRvbkxlbmd0aCAtIGNCdXR0b25JbnNldAotc3RhdGljIGludCBjQnV0dG9uTGVuZ3RoW10g
PSB7IDE0LCAxMCB9Owotc3RhdGljIGludCBjVGh1bWJNaW5MZW5ndGhbXSA9IHsgMjYsIDIwIH07
Ci0KLXN0YXRpYyBpbnQgY091dGVyQnV0dG9uTGVuZ3RoW10gPSB7IDE2LCAxNCB9OyAvLyBUaGUg
b3V0ZXIgYnV0dG9uIGluIGEgZG91YmxlIGJ1dHRvbiBwYWlyIGlzIGEgYml0IGJpZ2dlci4KLXN0
YXRpYyBpbnQgY091dGVyQnV0dG9uT3ZlcmxhcCA9IDI7Ci0KLXN0YXRpYyBmbG9hdCBnSW5pdGlh
bEJ1dHRvbkRlbGF5ID0gMC41ZjsKLXN0YXRpYyBmbG9hdCBnQXV0b3Njcm9sbEJ1dHRvbkRlbGF5
ID0gMC4wNWY7Ci1zdGF0aWMgYm9vbCBnSnVtcE9uVHJhY2tDbGljayA9IGZhbHNlOwotc3RhdGlj
IFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgZ0J1dHRvblBsYWNlbWVudCA9IGlzU2Nyb2xsYmFy
T3ZlcmxheUFQSUF2YWlsYWJsZSgpID8gU2Nyb2xsYmFyQnV0dG9uc05vbmUgOiBTY3JvbGxiYXJC
dXR0b25zRG91YmxlRW5kOwotCi1zdGF0aWMgdm9pZCB1cGRhdGVBcnJvd1BsYWNlbWVudCgpCi17
Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBOU1N0cmluZyAqYnV0dG9uUGxhY2VtZW50ID0gW1tOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OkAiQXBwbGVTY3JvbGxCYXJWYXJpYW50
Il07Ci0gICAgaWYgKFtidXR0b25QbGFjZW1lbnQgaXNFcXVhbFRvU3RyaW5nOkAiU2luZ2xlIl0p
Ci0gICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlOwotICAg
IGVsc2UgaWYgKFtidXR0b25QbGFjZW1lbnQgaXNFcXVhbFRvU3RyaW5nOkAiRG91YmxlTWluIl0p
Ci0gICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQ7
Ci0gICAgZWxzZSBpZiAoW2J1dHRvblBsYWNlbWVudCBpc0VxdWFsVG9TdHJpbmc6QCJEb3VibGVC
b3RoIl0pCi0gICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zRG91Ymxl
Qm90aDsKLSAgICBlbHNlCi0gICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0
b25zRG91YmxlRW5kOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnJlZ2lz
dGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIGJvb2wgaXNIb3Jpem9u
dGFsID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7Ci0g
ICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHNjcm9sbGJhclBhaW50ZXIgPSB3a01ha2VTY3JvbGxi
YXJQYWludGVyKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSwgaXNIb3Jpem9udGFsKTsKLSAgICBz
Y3JvbGxiYXJNYXAoKS0+YWRkKHNjcm9sbGJhciwgc2Nyb2xsYmFyUGFpbnRlcik7Ci0gICAgdXBk
YXRlRW5hYmxlZFN0YXRlKHNjcm9sbGJhcik7Ci0gICAgdXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dW5y
ZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICBzY3JvbGxiYXJN
YXAoKS0+cmVtb3ZlKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bU1hYzo6c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgV0tT
Y3JvbGxiYXJQYWludGVyUmVmIG5ld1BhaW50ZXIpCi17Ci0gICAgc2Nyb2xsYmFyTWFwKCktPnNl
dChzY3JvbGxiYXIsIG5ld1BhaW50ZXIpOwotICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzY3JvbGxi
YXIpOwotICAgIHVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXIpOwotfQotCi1X
S1Njcm9sbGJhclBhaW50ZXJSZWYgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRlckZv
clNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFy
TWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpOwotfQotCiBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpbml0
aWFsaXplZDsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGluaXRpYWxpemVkID0g
dHJ1ZTsKLQotICAgICAgICAvLyBMb2FkIHRoZSBsaW5lbiBwYXR0ZXJuIGltYWdlIHVzZWQgZm9y
IG92ZXJoYW5nIGRyYXdpbmcuCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gcGF0dGVybkltYWdlID0g
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJvdmVyaGFuZ1BhdHRlcm4iKTsKLSAgICAgICAg
bV9vdmVyaGFuZ1BhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUocGF0dGVybkltYWdlLCB0cnVlLCB0
cnVlKTsKLQotICAgICAgICBbU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciByZWdpc3RlckFzT2JzZXJ2
ZXJdOwotICAgICAgICBwcmVmZXJlbmNlc0NoYW5nZWQoKTsKLSAgICB9CisgICAgLy8gTG9hZCB0
aGUgbGluZW4gcGF0dGVybiBpbWFnZSB1c2VkIGZvciBvdmVyaGFuZyBkcmF3aW5nLgorICAgIFJl
ZlB0cjxJbWFnZT4gcGF0dGVybkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJv
dmVyaGFuZ1BhdHRlcm4iKTsKKyAgICBtX292ZXJoYW5nUGF0dGVybiA9IFBhdHRlcm46OmNyZWF0
ZShwYXR0ZXJuSW1hZ2UsIHRydWUsIHRydWUpOwogfQogCiBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjp+U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYygpCiB7CiB9CiAKLXZvaWQgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYzo6cHJlZmVyZW5jZXNDaGFuZ2VkKCkKLXsKLSAgICBOU1VzZXJEZWZh
dWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwot
ICAgIFtkZWZhdWx0cyBzeW5jaHJvbml6ZV07Ci0gICAgdXBkYXRlQXJyb3dQbGFjZW1lbnQoKTsK
LSAgICBnSW5pdGlhbEJ1dHRvbkRlbGF5ID0gW2RlZmF1bHRzIGZsb2F0Rm9yS2V5OkAiTlNTY3Jv
bGxlckJ1dHRvbkRlbGF5Il07Ci0gICAgZ0F1dG9zY3JvbGxCdXR0b25EZWxheSA9IFtkZWZhdWx0
cyBmbG9hdEZvcktleTpAIk5TU2Nyb2xsZXJCdXR0b25QZXJpb2QiXTsKLSAgICBnSnVtcE9uVHJh
Y2tDbGljayA9IFtkZWZhdWx0cyBib29sRm9yS2V5OkAiQXBwbGVTY3JvbGxlclBhZ2luZ0JlaGF2
aW9yIl07Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpzY3JvbGxiYXJUaGlj
a25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCi17Ci0gICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJU
aGlja25lc3MoY29udHJvbFNpemUpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGNTY3JvbGxi
YXJUaGlja25lc3NbY29udHJvbFNpemVdOwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWM6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJQYWlu
dGVyVXNlc092ZXJsYXlTY3JvbGxlcnMoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotc3RhdGljIGlubGluZSB3a1Njcm9sbGVyS25vYlN0eWxlIHRvU2Nyb2xsYmFyUGFp
bnRlcktub2JTdHlsZShTY3JvbGxiYXJPdmVybGF5U3R5bGUgc3R5bGUpCi17Ci0gICAgc3dpdGNo
IChzdHlsZSkgewotICAgIGNhc2UgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGFyazoKLSAgICAgICAg
cmV0dXJuIHdrU2Nyb2xsZXJLbm9iU3R5bGVEYXJrOwotICAgIGNhc2UgU2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlTGlnaHQ6Ci0gICAgICAgIHJldHVybiB3a1Njcm9sbGVyS25vYlN0eWxlTGlnaHQ7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHdrU2Nyb2xsZXJLbm9iU3R5bGVEZWZhdWx0Owot
ICAgIH0KLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp1cGRhdGVTY3JvbGxi
YXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
cktub2JTdHlsZShwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhciksIHRvU2Nyb2xsYmFyUGFp
bnRlcktub2JTdHlsZShzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbGJhck92ZXJs
YXlTdHlsZSgpKSk7Ci0gICAgfQotfQotCi1kb3VibGUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yzo6aW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCkKLXsKLSAgICByZXR1cm4gZ0luaXRpYWxC
dXR0b25EZWxheTsKLX0KLQotZG91YmxlIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmF1dG9z
Y3JvbGxUaW1lckRlbGF5KCkKLXsKLSAgICByZXR1cm4gZ0F1dG9zY3JvbGxCdXR0b25EZWxheTsK
LX0KLQotU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFj
OjpidXR0b25zUGxhY2VtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ0J1dHRvblBsYWNlbWVu
dDsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpoYXNCdXR0b25zKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKSAmJiBn
QnV0dG9uUGxhY2VtZW50ICE9IFNjcm9sbGJhckJ1dHRvbnNOb25lCi0gICAgICAgICAgICAgJiYg
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyCi0gICAgICAg
ICAgICAgPyBzY3JvbGxiYXItPndpZHRoKCkKLSAgICAgICAgICAgICA6IHNjcm9sbGJhci0+aGVp
Z2h0KCkpID49IDIgKiAoY1JlYWxCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
XSAtIGNCdXR0b25IaXRJbnNldFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldKTsKLX0KLQotYm9v
bCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpoYXNUaHVtYihTY3JvbGxiYXIqIHNjcm9sbGJh
cikKLXsKLSAgICBpbnQgbWluTGVuZ3RoRm9yVGh1bWI7Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3Zl
cmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICBtaW5MZW5ndGhGb3JUaHVtYiA9IHdrU2Nyb2xs
YmFyTWluaW11bVRvdGFsTGVuZ3RoTmVlZGVkRm9yVGh1bWIoc2Nyb2xsYmFyTWFwKCktPmdldChz
Y3JvbGxiYXIpLmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIG1pbkxlbmd0aEZvclRodW1iID0g
MiAqIGNCdXR0b25JbnNldFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgY1RodW1iTWluTGVu
Z3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyAxOwotICAgIHJldHVybiBzY3JvbGxiYXIt
PmVuYWJsZWQoKSAmJiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIgPwotICAgICAgICAgICAgIHNjcm9sbGJhci0+d2lkdGgoKSA6Ci0gICAgICAgICAgICAg
c2Nyb2xsYmFyLT5oZWlnaHQoKSkgPj0gbWluTGVuZ3RoRm9yVGh1bWI7Ci19Ci0KLXN0YXRpYyBJ
bnRSZWN0IGJ1dHRvblJlcGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGJ1dHRvblJlY3QsIFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSwgYm9vbCBzdGFydCkKLXsKLSAgICBBU1NFUlQoZ0J1dHRvblBsYWNlbWVudCAhPSBTY3Jv
bGxiYXJCdXR0b25zTm9uZSk7Ci0KLSAgICBJbnRSZWN0IHBhaW50UmVjdChidXR0b25SZWN0KTsK
LSAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBw
YWludFJlY3Quc2V0V2lkdGgoY1JlYWxCdXR0b25MZW5ndGhbY29udHJvbFNpemVdKTsKLSAgICAg
ICAgaWYgKCFzdGFydCkKLSAgICAgICAgICAgIHBhaW50UmVjdC5zZXRYKGJ1dHRvblJlY3QueCgp
IC0gKGNSZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xTaXplXSAtIGJ1dHRvblJlY3Qud2lkdGgoKSkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhaW50UmVjdC5zZXRIZWlnaHQoY1JlYWxCdXR0b25M
ZW5ndGhbY29udHJvbFNpemVdKTsKLSAgICAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgICAgIHBh
aW50UmVjdC5zZXRZKGJ1dHRvblJlY3QueSgpIC0gKGNSZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xT
aXplXSAtIGJ1dHRvblJlY3QuaGVpZ2h0KCkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFpbnRS
ZWN0OwotfQotCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmJhY2tCdXR0b25S
ZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRp
bmcpCi17Ci0gICAgSW50UmVjdCByZXN1bHQ7Ci0KLSAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9u
U3RhcnRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUg
fHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQg
JiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25z
UGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0IHx8IGJ1dHRvbnNQbGFj
ZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLQotICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpKTsKLSAgICBib29sIG91dGVyQnV0dG9uID0gcGFydCA9PSBCYWNrQnV0dG9u
U3RhcnRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJs
ZVN0YXJ0IHx8IGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlQm90
aCk7Ci0gICAgaWYgKG91dGVyQnV0dG9uKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJlc3VsdCA9IElu
dFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBjT3V0ZXJCdXR0b25MZW5ndGhb
c2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIChwYWludGluZyA/IGNPdXRlckJ1dHRvbk92ZXJs
YXAgOiAwKSwgdGhpY2tuZXNzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0g
SW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHRoaWNrbmVzcywgY091dGVy
QnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyAocGFpbnRpbmcgPyBjT3V0
ZXJCdXR0b25PdmVybGFwIDogMCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQot
ICAgIC8vIE91ciByZXBhaW50IHJlY3QgaXMgc2xpZ2h0bHkgbGFyZ2VyLCBzaW5jZSB3ZSBhcmUg
YSBidXR0b24gdGhhdCBpcyBhZGphY2VudCB0byB0aGUgdHJhY2suCi0gICAgaWYgKHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGludCBz
dGFydCA9IHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCA/IHNjcm9sbGJhci0+eCgpIDogc2Ny
b2xsYmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRoKCkgLSBjT3V0ZXJCdXR0b25MZW5ndGhbc2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpXSAtIGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpXTsKLSAgICAgICAgcmVzdWx0ID0gSW50UmVjdChzdGFydCwgc2Nyb2xsYmFyLT55KCks
IGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSwgdGhpY2tuZXNzKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpbnQgc3RhcnQgPSBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBh
cnQgPyBzY3JvbGxiYXItPnkoKSA6IHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQo
KSAtIGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldIC0gY0J1dHRv
bkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldOwotICAgICAgICByZXN1bHQgPSBJbnRS
ZWN0KHNjcm9sbGJhci0+eCgpLCBzdGFydCwgdGhpY2tuZXNzLCBjQnV0dG9uTGVuZ3RoW3Njcm9s
bGJhci0+Y29udHJvbFNpemUoKV0pOwotICAgIH0KLQotICAgIGlmIChwYWludGluZykKLSAgICAg
ICAgcmV0dXJuIGJ1dHRvblJlcGFpbnRSZWN0KHJlc3VsdCwgc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpLCBzY3JvbGxiYXItPmNvbnRyb2xTaXplKCksIHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFy
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUNocm9t
aXVtTWFjOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFy
UGFydCBwYXJ0LCBib29sIHBhaW50aW5nKQotewotICAgIEludFJlY3QgcmVzdWx0OwotCi0gICAg
aWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgJiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9
PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFy
QnV0dG9uc0RvdWJsZVN0YXJ0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlmIChw
YXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgJiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBT
Y3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0
dG9uc0RvdWJsZUVuZCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc1Np
bmdsZSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpbnQgdGhpY2tuZXNzID0gc2Ny
b2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0gICAgaW50IG91dGVy
QnV0dG9uTGVuZ3RoID0gY091dGVyQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUo
KV07Ci0gICAgaW50IGJ1dHRvbkxlbmd0aCA9IGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250
cm9sU2l6ZSgpXTsKLQotICAgIGJvb2wgb3V0ZXJCdXR0b24gPSBwYXJ0ID09IEZvcndhcmRCdXR0
b25FbmRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJs
ZUVuZCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUJvdGgp
OwotICAgIGlmIChvdXRlckJ1dHRvbikgewotICAgICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IElu
dFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRoKCkgLSBvdXRlckJ1dHRvbkxl
bmd0aCwgc2Nyb2xsYmFyLT55KCksIG91dGVyQnV0dG9uTGVuZ3RoLCB0aGlja25lc3MpOwotICAg
ICAgICAgICAgaWYgKHBhaW50aW5nKQotICAgICAgICAgICAgICAgIHJlc3VsdC5pbmZsYXRlWChj
T3V0ZXJCdXR0b25PdmVybGFwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlc3Vs
dCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5o
ZWlnaHQoKSAtIG91dGVyQnV0dG9uTGVuZ3RoLCB0aGlja25lc3MsIG91dGVyQnV0dG9uTGVuZ3Ro
KTsKLSAgICAgICAgICAgIGlmIChwYWludGluZykKLSAgICAgICAgICAgICAgICByZXN1bHQuaW5m
bGF0ZVkoY091dGVyQnV0dG9uT3ZlcmxhcCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0KLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gcGFydCA9PSBGb3J3YXJkQnV0
dG9uRW5kUGFydCA/IHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgpIC0gYnV0dG9u
TGVuZ3RoIDogc2Nyb2xsYmFyLT54KCkgKyBvdXRlckJ1dHRvbkxlbmd0aDsKLSAgICAgICAgcmVz
dWx0ID0gSW50UmVjdChzdGFydCwgc2Nyb2xsYmFyLT55KCksIGJ1dHRvbkxlbmd0aCwgdGhpY2tu
ZXNzKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnQgc3RhcnQgPSBwYXJ0ID09IEZvcndhcmRC
dXR0b25FbmRQYXJ0ID8gc2Nyb2xsYmFyLT55KCkgKyBzY3JvbGxiYXItPmhlaWdodCgpIC0gYnV0
dG9uTGVuZ3RoIDogc2Nyb2xsYmFyLT55KCkgKyBvdXRlckJ1dHRvbkxlbmd0aDsKLSAgICAgICAg
cmVzdWx0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc3RhcnQsIHRoaWNrbmVzcywgYnV0dG9u
TGVuZ3RoKTsKLSAgICB9Ci0gICAgaWYgKHBhaW50aW5nKQotICAgICAgICByZXR1cm4gYnV0dG9u
UmVwYWludFJlY3QocmVzdWx0LCBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIHNjcm9sbGJhci0+
Y29udHJvbFNpemUoKSwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnRyYWNr
UmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9vbCBwYWludGluZykKLXsKLSAgICBpZiAocGFp
bnRpbmcgfHwgIWhhc0J1dHRvbnMoc2Nyb2xsYmFyKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCk7Ci0KLSAgICBJbnRSZWN0IHJlc3VsdDsKLSAgICBpbnQgdGhpY2tuZXNz
ID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0gICAgaW50
IHN0YXJ0V2lkdGggPSAwOwotICAgIGludCBlbmRXaWR0aCA9IDA7Ci0gICAgaW50IG91dGVyQnV0
dG9uTGVuZ3RoID0gY091dGVyQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV07
Ci0gICAgaW50IGJ1dHRvbkxlbmd0aCA9IGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpXTsKLSAgICBpbnQgZG91YmxlQnV0dG9uTGVuZ3RoID0gb3V0ZXJCdXR0b25MZW5ndGgg
KyBidXR0b25MZW5ndGg7Ci0gICAgc3dpdGNoIChidXR0b25zUGxhY2VtZW50KCkpIHsKLSAgICAg
ICAgY2FzZSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlOgotICAgICAgICAgICAgc3RhcnRXaWR0aCA9
IGJ1dHRvbkxlbmd0aDsKLSAgICAgICAgICAgIGVuZFdpZHRoID0gYnV0dG9uTGVuZ3RoOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0
OgotICAgICAgICAgICAgc3RhcnRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQ6Ci0gICAg
ICAgICAgICBlbmRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOgotICAgICAgICAgICAg
c3RhcnRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKLSAgICAgICAgICAgIGVuZFdpZHRoID0g
ZG91YmxlQnV0dG9uTGVuZ3RoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpbnQgdG90YWxXaWR0aCA9IHN0YXJ0
V2lkdGggKyBlbmRXaWR0aDsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgp
ICsgc3RhcnRXaWR0aCwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSAtIHRvdGFs
V2lkdGgsIHRoaWNrbmVzcyk7Ci0gICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNj
cm9sbGJhci0+eSgpICsgc3RhcnRXaWR0aCwgdGhpY2tuZXNzLCBzY3JvbGxiYXItPmhlaWdodCgp
IC0gdG90YWxXaWR0aCk7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjptaW5p
bXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJNaW5p
bXVtVGh1bWJMZW5ndGgoc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHJldHVybiBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpXTsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpzaG91bGRDZW50
ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQotewot
ICAgIGlmIChldnQuYnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChnSnVtcE9uVHJhY2tDbGljaykKLSAgICAgICAgcmV0dXJuICFldnQuYWx0S2V5
KCk7Ci0gICAgcmV0dXJuIGV2dC5hbHRLZXkoKTsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjOjpzaG91bGREcmFnRG9jdW1lbnRJbnN0ZWFkT2ZUaHVtYihTY3JvbGxiYXIqLCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQotewotICAgIHJldHVybiBldmVudC5hbHRL
ZXkoKTsKLX0KLQotc3RhdGljIGludCBzY3JvbGxiYXJQYXJ0VG9ISVByZXNzZWRTdGF0ZShTY3Jv
bGxiYXJQYXJ0IHBhcnQpCi17Ci0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgICAgIGNhc2UgQmFj
a0J1dHRvblN0YXJ0UGFydDoKLSAgICAgICAgICAgIHJldHVybiBrVGhlbWVUb3BPdXRzaWRlQXJy
b3dQcmVzc2VkOwotICAgICAgICBjYXNlIEJhY2tCdXR0b25FbmRQYXJ0OgotICAgICAgICAgICAg
cmV0dXJuIGtUaGVtZVRvcE91dHNpZGVBcnJvd1ByZXNzZWQ7IC8vIFRoaXMgZG9lcyBub3QgbWFr
ZSBtdWNoIHNlbnNlLiAgRm9yIHNvbWUgcmVhc29uIHRoZSBvdXRzaWRlIGNvbnN0YW50IGlzIHJl
cXVpcmVkLgotICAgICAgICBjYXNlIEZvcndhcmRCdXR0b25TdGFydFBhcnQ6Ci0gICAgICAgICAg
ICByZXR1cm4ga1RoZW1lVG9wSW5zaWRlQXJyb3dQcmVzc2VkOwotICAgICAgICBjYXNlIEZvcndh
cmRCdXR0b25FbmRQYXJ0OgotICAgICAgICAgICAgcmV0dXJuIGtUaGVtZUJvdHRvbU91dHNpZGVB
cnJvd1ByZXNzZWQ7Ci0gICAgICAgIGNhc2UgVGh1bWJQYXJ0OgotICAgICAgICAgICAgcmV0dXJu
IGtUaGVtZVRodW1iUHJlc3NlZDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgIH0KLX0KLQogc3RhdGljIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQYWludFN0YXRl
IHNjcm9sbGJhclN0YXRlVG9UaGVtZVN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAg
IGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCkBAIC00NzYsMTMgKzczLDI3IEBAIHN0YXRpYyBQ
bGF0Zm9ybVN1cHBvcnQ6OlRoZW1lUGFpbnRTdGF0ZSAKICAgICByZXR1cm4gUGxhdGZvcm1TdXBw
b3J0OjpTdGF0ZUFjdGl2ZTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp1
cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitzdGF0aWMgdm9pZCBzY3Jv
bGxiYXJQYWludGVyUGFpbnRUcmFjayhTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIs
IGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIENHUmVjdCBm
cmFtZVJlY3QpCiB7Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7
Ci0gICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldEVuYWJsZWQoc2Nyb2xsYmFyTWFwKCktPmdl
dChzY3JvbGxiYXIpLmdldCgpLCBzY3JvbGxiYXItPmVuYWJsZWQoKSk7Ci0gICAgfQorICAgIFtz
Y3JvbGxiYXJQYWludGVyIHNldEVuYWJsZWQ6ZW5hYmxlZF07CisgICAgW3Njcm9sbGJhclBhaW50
ZXIgc2V0Qm91bmRzU2l6ZTogTlNTaXplRnJvbUNHU2l6ZShmcmFtZVJlY3Quc2l6ZSldOworICAg
IFtzY3JvbGxiYXJQYWludGVyIHNldERvdWJsZVZhbHVlOnZhbHVlXTsKKyAgICBbc2Nyb2xsYmFy
UGFpbnRlciBzZXRLbm9iUHJvcG9ydGlvbjpwcm9wb3J0aW9uXTsKKworICAgIC8vIFRoZSBzY3Jv
bGxiYXIncyBmcmFtZVJlY3QgaW5jbHVkZXMgYSBzaWRlIGluc2V0IGZvciBvdmVybGF5IHNjcm9s
bGVycywgc28gd2UgaGF2ZSB0byB1c2UgdGhlIAorICAgIC8vIHRyYWNrV2lkdGggZm9yIGRyYXdL
bm9iU2xvdEluUmVjdAorICAgIE5TUmVjdCB0cmFja1JlY3Q7CisgICAgaWYgKFtzY3JvbGxiYXJQ
YWludGVyIGlzSG9yaXpvbnRhbF0pCisgICAgICAgIHRyYWNrUmVjdCA9IE5TTWFrZVJlY3QoMCwg
MCwgZnJhbWVSZWN0LnNpemUud2lkdGgsIFtzY3JvbGxiYXJQYWludGVyIHRyYWNrV2lkdGhdKTsK
KyAgICBlbHNlCisgICAgICAgIHRyYWNrUmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgW3Njcm9sbGJh
clBhaW50ZXIgdHJhY2tXaWR0aF0sIGZyYW1lUmVjdC5zaXplLmhlaWdodCk7CisgICAgW3Njcm9s
bGJhclBhaW50ZXIgZHJhd0tub2JTbG90SW5SZWN0OnRyYWNrUmVjdCBoaWdobGlnaHQ6Tk9dOwog
fQogCisvLyBPdmVycmlkZSBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQoKSB0byBhZGQgc3VwcG9y
dCBmb3IgdGhlIGZvbGxvd2luZzoKKy8vICAgICAtIGRyYXdpbmcgdXNpbmcgUGxhdGZvcm1TdXBw
b3J0IGZ1bmN0aW9ucworLy8gICAgIC0gZHJhd2luZyB0aWNrbWFya3MKKy8vICAgICAtIFNraWEg
c3BlY2lmaWMgY2hhbmdlcwogYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludChT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBkYW1hZ2VSZWN0KQogewogICAgIC8vIEdldCB0aGUgdGlja21hcmtzIGZvciB0aGUgZnJh
bWV2aWV3LgpAQCAtNTEwLDMzICsxMjEsMzIgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjpwYWludChTYwogICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKICAgICAgICAgfQogCi0g
ICAgICAgIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIHNjcm9sbEFuaW1hdG9yID0gc3RhdGlj
X2Nhc3Q8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyo+KHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFy
ZWEoKS0+c2Nyb2xsQW5pbWF0b3IoKSk7CiAjaWYgIVVTRShTS0lBKQotICAgICAgICBzY3JvbGxB
bmltYXRvci0+c2V0SXNEcmF3aW5nSW50b0xheWVyKGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQo
KSk7CisgICAgICAgIHNldElzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcihjb250ZXh0LT5pc0NB
TGF5ZXJDb250ZXh0KCkpOwogI2Vsc2UKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPnNldElzRHJh
d2luZ0ludG9MYXllcihmYWxzZSk7CisgICAgICAgIHNldElzQ3VycmVudGx5RHJhd2luZ0ludG9M
YXllcihmYWxzZSk7CiAjZW5kaWYKIAogICAgICAgICBDR0Zsb2F0IG9sZEtub2JBbHBoYSA9IDA7
CiAgICAgICAgIENHRmxvYXQgb2xkVHJhY2tBbHBoYSA9IDA7CiAgICAgICAgIGJvb2wgaGFzVGlj
a21hcmtzID0gdGlja21hcmtzLnNpemUoKSA+IDAgJiYgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsU2Nyb2xsYmFyOworICAgICAgICBTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJh
clBhaW50ZXIgPSBwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgICAgIGlmICho
YXNUaWNrbWFya3MpIHsKLSAgICAgICAgICBvbGRLbm9iQWxwaGEgPSB3a1Njcm9sbGJhclBhaW50
ZXJLbm9iQWxwaGEocGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpKTsKLSAgICAgICAgICB3
a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEocGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxi
YXIpLCAxLjApOwotICAgICAgICAgIG9sZFRyYWNrQWxwaGEgPSB3a1Njcm9sbGJhclBhaW50ZXJU
cmFja0FscGhhKHBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSk7Ci0gICAgICAgICAgd2tT
ZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJh
ciksIDEuMCk7CisgICAgICAgICAgICBvbGRLbm9iQWxwaGEgPSBbc2Nyb2xsYmFyUGFpbnRlciBr
bm9iQWxwaGFdOworICAgICAgICAgICAgW3Njcm9sbGJhclBhaW50ZXIgc2V0S25vYkFscGhhOjEu
MF07CisgICAgICAgICAgICBvbGRUcmFja0FscGhhID0gW3Njcm9sbGJhclBhaW50ZXIgdHJhY2tB
bHBoYV07CisgICAgICAgICAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRUcmFja0FscGhhOjEuMF07
CiAgICAgICAgIH0KIAogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmNvbnRleHQpOwogICAgICAgICBjb250ZXh0LT5jbGlwKGRhbWFnZVJlY3QpOwogICAgICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCksIHNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCkueSgpKTsKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0
IGxvY2FsQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHNj
cm9sbGJhclBhaW50ZXIgPSBzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCk7Ci0g
ICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclBhaW50VHJhY2soc2Nyb2xsYmFyUGFpbnRlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmVuYWJsZWQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFy
LT52aXNpYmxlU2l6ZSgpKSAtIG92ZXJoYW5nKSAvIHNjcm9sbGJhci0+dG90YWxTaXplKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KSk7CisgICAgICAgIHNjcm9sbGJhclBhaW50ZXJQYWludFRyYWNrKHNjcm9sbGJhclBhaW50ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhci0+ZW5hYmxlZCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PENHRmxvYXQ+KHNjcm9sbGJhci0+
dmlzaWJsZVNpemUoKSkgLSBvdmVyaGFuZykgLyBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsK
IAogICAgICAgICBJbnRSZWN0IHRpY2ttYXJrVHJhY2tSZWN0KEludFBvaW50KCksIHRyYWNrUmVj
dChzY3JvbGxiYXIsIGZhbHNlKS5zaXplKCkpOwogICAgICAgICBpZiAodGlja21hcmtUcmFja1Jl
Y3Qud2lkdGgoKSA8PSAxMCkgewpAQCAtNTUwLDEzICsxNjAsMTQgQEAgYm9vbCBTY3JvbGxiYXJU
aGVtZUNocm9taXVtTWFjOjpwYWludChTYwogICAgICAgICB9CiAgICAgICAgIHBhaW50R2l2ZW5U
aWNrbWFya3MoY29udGV4dCwgc2Nyb2xsYmFyLCB0aWNrbWFya1RyYWNrUmVjdCwgdGlja21hcmtz
KTsKIAotICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJQYWludEtub2Ioc2Nyb2xsYmFyUGFpbnRl
cik7CisgICAgICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkKKyAgICAgICAgICAgIFtzY3Jv
bGxiYXJQYWludGVyIGRyYXdLbm9iXTsKIAotICAgICAgICBzY3JvbGxBbmltYXRvci0+c2V0SXNE
cmF3aW5nSW50b0xheWVyKGZhbHNlKTsKKyAgICAgICAgc2V0SXNDdXJyZW50bHlEcmF3aW5nSW50
b0xheWVyKGZhbHNlKTsKIAogICAgICAgICBpZiAoaGFzVGlja21hcmtzKSB7Ci0gICAgICAgICAg
d2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHNjcm9sbGJhclBhaW50ZXIsIG9sZEtub2JB
bHBoYSk7Ci0gICAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShzY3JvbGxi
YXJQYWludGVyLCBvbGRUcmFja0FscGhhKTsKKyAgICAgICAgICAgIFtzY3JvbGxiYXJQYWludGVy
IHNldEtub2JBbHBoYTpvbGRLbm9iQWxwaGFdOworICAgICAgICAgICAgW3Njcm9sbGJhclBhaW50
ZXIgc2V0VHJhY2tBbHBoYTpvbGRUcmFja0FscGhhXTsKICAgICAgICAgfQogCiAgICAgICAgIHJl
dHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0VtcHR5UHJvdG9j
b2xEZWZpbml0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9FbXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaAkocmV2aXNpb24gMTAzMjgwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0VtcHR5UHJvdG9jb2xEZWZpbml0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiBFTVBUWV9QUk9UT0NPTChOU1RhYmxlVmlld0RhdGFT
b3VyY2UpCiBFTVBUWV9QUk9UT0NPTChOU1RhYmxlVmlld0RlbGVnYXRlKQogRU1QVFlfUFJPVE9D
T0woTlNXaW5kb3dEZWxlZ2F0ZSkKK0VNUFRZX1BST1RPQ09MKE5TQW5pbWF0aW9uRGVsZWdhdGUp
CiAKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNTY3JvbGxl
ckltcERldGFpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
TlNTY3JvbGxlckltcERldGFpbHMuaAkocmV2aXNpb24gMTAzMjgwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDcgKzI4LDI4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIFVTRShTQ1JPTExC
QVJfUEFJTlRFUikKKy8vIFB1YmxpYyBBUElzIG5vdCBhdmFpbGFibGUgb24gdmVyc2lvbnMgb2Yg
TWFjIG9uIHdoaWNoIHdlIGJ1aWxkCisjaWYgKGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkg
fHwgZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpKQorZW51bSB7CisgICAgTlNTY3Jv
bGxlclN0eWxlTGVnYWN5ICAgICAgID0gMCwKKyAgICBOU1Njcm9sbGVyU3R5bGVPdmVybGF5ICAg
ICAgPSAxCit9OwordHlwZWRlZiBOU0ludGVnZXIgTlNTY3JvbGxlclN0eWxlOworCitlbnVtIHsK
KyAgICBOU1Njcm9sbGVyS25vYlN0eWxlRGVmYXVsdCA9IDAsCisgICAgTlNTY3JvbGxlcktub2JT
dHlsZURhcmsgPSAxLAorICAgIE5TU2Nyb2xsZXJLbm9iU3R5bGVMaWdodCA9IDIKK307Cit0eXBl
ZGVmIE5TSW50ZWdlciBOU1Njcm9sbGVyS25vYlN0eWxlOworI2VuZGlmCisKKyNpZiAoZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkpCitAaW50ZXJmYWNlIE5TU2Nyb2xsZXIoTlNPYmplY3QpCisrIChOU1Njcm9sbGVyU3R5bGUp
cHJlZmVycmVkU2Nyb2xsZXJTdHlsZTsKK0BlbmQKKyNlbmRpZgorCiBAaW50ZXJmYWNlIE5TT2Jq
ZWN0IChTY3JvbGxiYXJQYWludGVyKQogKyAoaWQpc2Nyb2xsZXJJbXBXaXRoU3R5bGU6KE5TU2Ny
b2xsZXJTdHlsZSluZXdTY3JvbGxlclN0eWxlIGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKW5l
d0NvbnRyb2xTaXplIGhvcml6b250YWw6KEJPT0wpaG9yaXpvbnRhbCByZXBsYWNpbmdTY3JvbGxl
ckltcDooaWQpcHJldmlvdXM7CiAtIChDR0Zsb2F0KWtub2JBbHBoYTsKQEAgLTgxLDYgKzEwMiwy
NCBAQCBAaW50ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxiYXJQYWludGVyQ29uCiAtICh2b2lkKWJl
Z2luU2Nyb2xsR2VzdHVyZTsKIC0gKHZvaWQpZW5kU2Nyb2xsR2VzdHVyZTsKIEBlbmQKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCitib29sIGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Nj
cm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKQoreworI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRF
UikKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCit9
CisjZW5kaWYKKworTlNTY3JvbGxlclN0eWxlIHJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpOwor
Cit9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xs
ZXJJbXBEZXRhaWxzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTlNTY3JvbGxlckltcERldGFpbHMuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCitib29sIGlz
U2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpCit7CisgICAgc3RhdGljIGJvb2wgYXBpQXZh
aWxhYmxlOworICAgIHN0YXRpYyBib29sIHNob3VsZEluaXRpYWxpemUgPSB0cnVlOworICAgIGlm
IChzaG91bGRJbml0aWFsaXplKSB7CisgICAgICAgIHNob3VsZEluaXRpYWxpemUgPSBmYWxzZTsK
KyAgICAgICAgQ2xhc3Mgc2Nyb2xsZXJJbXBDbGFzcyA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiTlNT
Y3JvbGxlckltcCIpOworICAgICAgICBDbGFzcyBzY3JvbGxlckltcFBhaXJDbGFzcyA9IE5TQ2xh
c3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcFBhaXIiKTsKKyAgICAgICAgYXBpQXZhaWxhYmxl
ID0gW3Njcm9sbGVySW1wQ2xhc3MgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzY3JvbGxl
ckltcFdpdGhTdHlsZTpjb250cm9sU2l6ZTpob3Jpem9udGFsOnJlcGxhY2luZ1Njcm9sbGVySW1w
OildCisgICAgICAgICAgICAgICAgICAgICAgICYmIFtzY3JvbGxlckltcFBhaXJDbGFzcyBpbnN0
YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2Nyb2xsZXJTdHlsZSldOworICAgIH0K
KyAgICByZXR1cm4gYXBpQXZhaWxhYmxlOworfQorI2VuZGlmCisKK05TU2Nyb2xsZXJTdHlsZSBy
ZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSB7CisgICAgaWYgKFtOU1Njcm9sbGVyIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IocHJlZmVycmVkU2Nyb2xsZXJTdHlsZSldKQorICAgICAgICBy
ZXR1cm4gW05TU2Nyb2xsZXIgcHJlZmVycmVkU2Nyb2xsZXJTdHlsZV07CisgICAgcmV0dXJuIE5T
U2Nyb2xsZXJTdHlsZUxlZ2FjeTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHJldmlzaW9uIDEwMzI4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw5ICs0Niw3IEBAIGNsYXNzIFdlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWcKIGNsYXNzIFdlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKICNlbmRpZgogCi0jaWYg
VVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogdHlwZWRlZiBpZCBTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlcjsKLSNlbmRpZgogCiAjaWYgIUVOQUJMRShSVUJCRVJfQkFORElORykKIGNsYXNzIFNjcm9s
bEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50IHsgfTsKQEAgLTg2LDEzICs4NCwxMSBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY3RpdmUoKTsKIAotI2lmIFVTRShTQ1JPTExC
QVJfUEFJTlRFUikKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKIAogICAgIGJvb2wg
c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgY29uc3Q7CiAgICAgdm9pZCBzdGFydFNjcm9s
bGJhclBhaW50VGltZXIoKTsKICAgICB2b2lkIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0j
ZW5kaWYKIAogICAgIHZvaWQgc2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJl
Y3QmKTsKIApAQCAtMTAwLDcgKzk2LDYgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ+IG1f
c2Nyb2xsQW5pbWF0aW9uSGVscGVyOwogICAgIFJldGFpblB0cjxXZWJTY3JvbGxBbmltYXRpb25I
ZWxwZXJEZWxlZ2F0ZT4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKIAotI2lmIFVT
RShTQ1JPTExCQVJfUEFJTlRFUikKICAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXI+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7CiAgICAgUmV0YWluUHRyPFdlYlNj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJEZWxlZ2F0ZTsKICAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRl
PiBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CkBAIC0xMDgsNyArMTAzLDYg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZChU
aW1lcjxTY3JvbGxBbmltYXRvck1hYz4qKTsKICAgICBUaW1lcjxTY3JvbGxBbmltYXRvck1hYz4g
bV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKLSNlbmRpZgogICAgIAogICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFy
ZWFXaWxsUGFpbnQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHJldmlzaW9uIDEwMzI4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgiCiAKICNpbmNs
dWRlICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJFbXB0eVByb3RvY29sRGVmaW5pdGlv
bnMuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiTlNTY3JvbGxlckltcERl
dGFpbHMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgpAQCAtMzksMTMgKzQw
LDIwIEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZU1hYy5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbmNsdWRl
IDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BB
SU5URVIpCisjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRAorQGludGVyZmFjZSBOU1Byb2Nlc3NJ
bmZvIChTY3JvbGxBbmltYXRvck1hY0V4dCkKKy0gKE5TVGltZUludGVydmFsKXN5c3RlbVVwdGlt
ZTsKK0BlbmQKKyNlbmRpZgorCiBzdGF0aWMgYm9vbCBzdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9u
UHJvZ3Jlc3MoKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCBhbGwg
cGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBTY3JvbGxiYXJQYWludGVyIHN1cHBvcnQgdGhpcyBwYXJ0
IG9mIHRoZSBBUEkuCkBAIC02Niw3ICs3NCwyOCBAQCBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRlciBz
Y3JvbGxiYXJQYWludGVyCiAKICAgICByZXR1cm4gbmlsOwogfQotI2VuZGlmCisKK3N0YXRpYyBO
U1RpbWVJbnRlcnZhbCBzeXN0ZW1VcHRpbWUoKSB7CisgICAgaWYgKFtbTlNQcm9jZXNzSW5mbyBw
cm9jZXNzSW5mb10gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzeXN0ZW1VcHRpbWUpXSkK
KyAgICAgICAgcmV0dXJuIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1l
XTsKKworICAgIC8vIEdldCBob3cgbG9uZyBzeXN0ZW0gaGFzIGJlZW4gdXAuIEZvdW5kIGJ5IGxv
b2tpbmcgZ2V0dGluZyAiYm9vdHRpbWUiIGZyb20gdGhlIGtlcm5lbC4KKyAgICBzdGF0aWMgc3Ry
dWN0IHRpbWV2YWwgYm9vdHRpbWUgPSB7fTsKKyAgICBpZiAoIWJvb3R0aW1lLnR2X3NlYykgewor
ICAgICAgICBpbnQgbWliWzJdID0ge0NUTF9LRVJOLCBLRVJOX0JPT1RUSU1FfTsKKyAgICAgICAg
c2l6ZV90IHNpemUgPSBzaXplb2YoYm9vdHRpbWUpOworICAgICAgICBpZiAoLTEgPT0gc3lzY3Rs
KG1pYiwgMiwgJmJvb3R0aW1lLCAmc2l6ZSwgMCwgMCkpCisgICAgICAgICAgICBib290dGltZS50
dl9zZWMgPSAwOworICAgIH0KKyAgICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgICAgaWYgKGJvb3R0
aW1lLnR2X3NlYyAmJiAtMSAhPSBnZXR0aW1lb2ZkYXkoJm5vdywgMCkpIHsKKyAgICAgICAgc3Ry
dWN0IHRpbWV2YWwgdXB0aW1lOworICAgICAgICB0aW1lcnN1Yigmbm93LCAmYm9vdHRpbWUsICZ1
cHRpbWUpOworICAgICAgICBOU1RpbWVJbnRlcnZhbCByZXN1bHQgPSB1cHRpbWUudHZfc2VjICsg
KHVwdGltZS50dl91c2VjIC8gMUUrNik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIHJldHVybiAwOworfQogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxBbmltYXRpb25I
ZWxwZXJEZXRhaWxzKQogLSAoaWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQpZGVsZWdhdGU7CkBAIC0x
NzIsOCArMjAxLDYgQEAgLSAodm9pZClfcmVjdXJzaXZlUmVjb21wdXRlVG9vbFRpcHMKIAogQGVu
ZAogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotCiBAaW50ZXJmYWNlIFdlYlNjcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgOiBOU09iamVjdAogewogICAgIFNjcm9sbGFibGVB
cmVhKiBfc2Nyb2xsYWJsZUFyZWE7CkBAIC00MDksNiArNDM2LDcgQEAgLSAoTlNSZWN0KWNvbnZl
cnRSZWN0RnJvbUJhY2tpbmc6KE5TUmVjdAogICAgIHJldHVybiBhUmVjdDsKIH0KIAorI2lmICFQ
TEFURk9STShDSFJPTUlVTSkKIC0gKENBTGF5ZXIgKilsYXllcgogewogICAgIGlmICghX3Njcm9s
bGJhcikKQEAgLTQyMSw2ICs0NDksNyBAQCAtIChDQUxheWVyICopbGF5ZXIKICAgICBzdGF0aWMg
Q0FMYXllciAqZHVtbXlMYXllciA9IFtbQ0FMYXllciBhbGxvY10gaW5pdF07CiAgICAgcmV0dXJu
IGR1bW15TGF5ZXI7CiB9CisjZW5kaWYKIAogLSAoTlNQb2ludCltb3VzZUxvY2F0aW9uSW5TY3Jv
bGxlckZvclNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcAogewpAQCAtNTQxLDggKzU3MCw2IEBA
IC0gKHZvaWQpaW52YWxpZGF0ZQogCiBAZW5kCiAKLSNlbmRpZiAvLyBVU0UoU0NST0xMQkFSX1BB
SU5URVIpCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc093blB0cjxTY3JvbGxBbmltYXRv
cj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEp
CkBAIC01NTIsOSArNTc5LDcgQEAgUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5p
bWF0bwogCiBTY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFy
ZWEqIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEp
Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogICAgICwgbV9pbml0aWFsU2Nyb2xsYmFyUGFp
bnRUaW1lcih0aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRp
bWVyRmlyZWQpCi0jZW5kaWYKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgLCBtX3Nj
cm9sbEVsYXN0aWNpdHlDb250cm9sbGVyKHRoaXMpCiAgICAgLCBtX3NuYXBSdWJiZXJCYW5kVGlt
ZXIodGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpCkBA
IC01NjUsMjUgKzU5MCwyNSBAQCBTY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0b3JNYWMo
U2NyCiAgICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbV2ViU2Ny
b2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6
dGhpc10pOwogICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmFkb3B0TlMoW1tOU0NsYXNzRnJv
bVN0cmluZyhAIk5TU2Nyb2xsQW5pbWF0aW9uSGVscGVyIikgYWxsb2NdIGluaXRXaXRoRGVsZWdh
dGU6bV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQoKV0pOwogCi0jaWYgVVNFKFND
Uk9MTEJBUl9QQUlOVEVSKQotICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0
ZS5hZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10g
aW5pdFdpdGhTY3JvbGxhYmxlQXJlYTpzY3JvbGxhYmxlQXJlYV0pOwotICAgIG1fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIgPSBbW1tOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXBQ
YWlyIikgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAgICBbbV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTptX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWdhdGUuZ2V0KCldOwotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgp
IHNldFNjcm9sbGVyU3R5bGU6d2tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKV07Ci0jZW5kaWYK
KyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgbV9z
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGFibGVBcmVhOnNj
cm9sbGFibGVBcmVhXSk7CisgICAgICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgPSBb
W1tOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXBQYWlyIikgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkg
c2V0RGVsZWdhdGU6bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpXTsK
KyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0U2Nyb2xsZXJT
dHlsZTpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKV07CisgICAgfQogfQogCiBTY3JvbGxBbmlt
YXRvck1hYzo6flNjcm9sbEFuaW1hdG9yTWFjKCkKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5U
RVIpCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFttX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07Ci0gICAgW21fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbbV9ob3Jp
em9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwotICAgIFtt
X3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwotICAg
IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwotICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJP
dmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgp
IGludmFsaWRhdGVdOworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQo
KSBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOworICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJh
clBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBpbnZhbGlkYXRlXTsKKyAgICAgICAgW21fc2Nyb2xsQW5p
bWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07CisgICAgICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgfQogfQogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpz
Y3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQpAQCAtNjk1LDEzICs3
MjAsMTMgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVAogCiB2b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjpub3RpZnlQb3NpdGlvbkNoYW5nZWQoKQogewotI2lmIFVTRShT
Q1JPTExCQVJfUEFJTlRFUikKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEg
cGFnZSBpcyBnb2luZyBpbnRvIHRoZSBwYWdlIGNhY2hlLCBidXQgdGhlIHBhZ2UgCi0gICAgLy8g
aXNuJ3QgcmVhbGx5IHNjcm9sbGluZyBpbiB0aGF0IGNhc2UuIFdlIHNob3VsZCBvbmx5IHBhc3Mg
dGhlIG1lc3NhZ2Ugb24gdG8gdGhlCi0gICAgLy8gU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIg
d2hlbiB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFuIGFjdGl2ZSBwYWdlLgotICAgIGlmIChz
Y3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQotICAgICAgICBbbV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlci5nZXQoKSBjb250ZW50QXJlYVNjcm9sbGVkXTsKLSNlbmRpZgorICAg
IGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICAvLyBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyBnb2luZyBpbnRvIHRoZSBwYWdlIGNh
Y2hlLCBidXQgdGhlIHBhZ2UgCisgICAgICAgIC8vIGlzbid0IHJlYWxseSBzY3JvbGxpbmcgaW4g
dGhhdCBjYXNlLiBXZSBzaG91bGQgb25seSBwYXNzIHRoZSBtZXNzYWdlIG9uIHRvIHRoZQorICAg
ICAgICAvLyBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciB3aGVuIHdlJ3JlIHJlYWxseSBzY3Jv
bGxpbmcgb24gYW4gYWN0aXZlIHBhZ2UuCisgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5p
c09uQWN0aXZlUGFnZSgpKQorICAgICAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXIuZ2V0KCkgY29udGVudEFyZWFTY3JvbGxlZF07CisgICAgfQogICAgIFNjcm9sbEFuaW1hdG9y
Ojpub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKIH0KIApAQCAtNzA5LDIxNCArNzM0LDE5MCBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYVdpbGxQCiB7CiAgICAgaWYgKCFzY3Jv
bGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNF
KFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdl
dCgpIGNvbnRlbnRBcmVhV2lsbERyYXddOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3Zl
cmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSBjb250ZW50QXJlYVdpbGxEcmF3XTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJs
ZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShTQ1JP
TExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBt
b3VzZUVudGVyZWRDb250ZW50QXJlYV07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVy
bGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
LmdldCgpIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxh
YmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFND
Uk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgp
IG1vdXNlRXhpdGVkQ29udGVudEFyZWFdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3Zl
cmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSBtb3VzZUV4aXRlZENvbnRlbnRBcmVhXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBjb25zdAogewogICAgIGlmICghc2Nyb2xs
YWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFVTRShT
Q1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQo
KSBtb3VzZU1vdmVkSW5Db250ZW50QXJlYV07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJP
dmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyLmdldCgpIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhXTsKIH0KIAogdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25z
dAogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAg
ICAgcmV0dXJuOwotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBpZiAoIXN1cHBvcnRz
VUlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzcygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKFNj
cm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Ny
b2xsYmFyKSkKLSAgICAgICAgW3BhaW50ZXIgbW91c2VFbnRlcmVkU2Nyb2xsZXJdOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJh
ck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBpZiAoIXN1cHBvcnRzVUlTdGF0ZVRy
YW5zaXRpb25Qcm9ncmVzcygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoU2Ny
b2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihzY3Jv
bGxiYXIpKQorICAgICAgICAgICAgW3BhaW50ZXIgbW91c2VFbnRlcmVkU2Nyb2xsZXJdOworICAg
IH0KIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5p
c09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlO
VEVSKQotICAgIGlmICghc3VwcG9ydHNVSVN0YXRlVHJhbnNpdGlvblByb2dyZXNzKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFy
UGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpKQotICAgICAgICBbcGFpbnRlciBtb3VzZUV4
aXRlZFNjcm9sbGVyXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7Ci0jZW5k
aWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAg
aWYgKCFzdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBh
aW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSkKKyAgICAgICAgICAgIFtwYWludGVyIG1vdXNl
RXhpdGVkU2Nyb2xsZXJdOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2ls
bFN0YXJ0TGl2ZVJlc2l6ZSgpCiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0
aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQot
ICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHN0YXJ0TGl2ZVJlc2l6ZV07
Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAg
ICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHN0YXJ0TGl2ZVJlc2l6ZV07
CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0CiB7
CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICBy
ZXR1cm47Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyLmdldCgpIGNvbnRlbnRBcmVhRGlkUmVzaXplXTsKLSNlbmRpZgorICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgY29udGVudEFyZWFEaWRSZXNpemVdOwogfQogCiB2b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCiB7CiAgICAgaWYgKCFzY3Jv
bGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgVVNF
KFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdl
dCgpIGVuZExpdmVSZXNpemVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQ
SUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQo
KSBlbmRMaXZlUmVzaXplXTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFy
ZWFEaWRTaG93KCkgY29uc3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3Rp
dmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0g
ICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgd2luZG93T3JkZXJlZEluXTsK
LSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAg
ICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgd2luZG93T3JkZXJlZEluXTsK
IH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29uc3QK
IHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAg
IHJldHVybjsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXIuZ2V0KCkgd2luZG93T3JkZXJlZE91dF07Ci0jZW5kaWYKKyAgICBpZiAo
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyLmdldCgpIHdpbmRvd09yZGVyZWRPdXRdOwogfQogCiB2b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAogewogICAgIGlmICgh
c2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotI2lm
IFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSBiZWdpblNjcm9sbEdlc3R1cmVdOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFy
T3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlci5nZXQoKSBiZWdpblNjcm9sbEdlc3R1cmVdOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVB
cmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBVU0UoU0NST0xM
QkFSX1BBSU5URVIpCi0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgZW5k
U2Nyb2xsR2VzdHVyZV07Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpCisgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGVu
ZFNjcm9sbEdlc3R1cmVdOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpkaWRBZGRWZXJ0
aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFS
X1BBSU5URVIpCi0gICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRl
ckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKCFtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlKTsK
LSAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmFkb3B0TlMoW1tXZWJTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0p
OwotCi0gICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZS5nZXQoKV07Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkg
c2V0VmVydGljYWxTY3JvbGxlckltcDpwYWludGVyXTsKLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEo
KS0+aW5MaXZlUmVzaXplKCkpCi0gICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKLQot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRpZgorICAgIGlmIChpc1Nj
cm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBTY3JvbGxiYXJQYWludGVy
IHBhaW50ZXIgPSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAg
ICAgIGlmICghcGFpbnRlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQo
IW1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUpOworICAgICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsYmFyOnNjcm9sbGJhcl0pOworCisgICAgICAgIFtw
YWludGVyIHNldERlbGVnYXRlOm1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0
KCldOworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRWZXJ0
aWNhbFNjcm9sbGVySW1wOnBhaW50ZXJdOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+
aW5MaXZlUmVzaXplKCkpCisgICAgICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07Cisg
ICAgfQogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsUmVtb3ZlVmVydGljYWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVS
KQotICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKLSAgICBpZiAoIXBhaW50ZXIpCi0gICAgICAgIHJldHVybjsKKyAg
ICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgU2Nyb2xs
YmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxi
YXIpOworICAgICAgICBpZiAoIXBhaW50ZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUpOworICAgICAgICBb
bV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBpbnZhbGlkYXRlXTsKKyAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSA9IG51bGxwdHI7CiAKLSAg
ICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSk7Ci0gICAgW21fdmVy
dGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07Ci0gICAgbV92
ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSA9IG51bGxwdHI7Ci0KLSAgICBbcGFpbnRl
ciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdl
dCgpIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmlsXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KHNjcm9sbGJhcik7Ci0jZW5kaWYKKyAgICAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsK
KyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0VmVydGljYWxT
Y3JvbGxlckltcDpuaWxdOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlk
QWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSNpZiBVU0Uo
U0NST0xMQkFSX1BBSU5URVIpCi0gICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xs
YmFyUGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwotICAgIGlmICghcGFpbnRlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVy
RGVsZWdhdGUpOwotICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5hZG9w
dE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJh
cjpzY3JvbGxiYXJdKTsKLQotICAgIFtwYWludGVyIHNldERlbGVnYXRlOm1faG9yaXpvbnRhbFNj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOnBhaW50ZXJdOwotICAgIGlm
IChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKLSAgICAgICAgW3BhaW50ZXIgc2V0
S25vYkFscGhhOjFdOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKLSNlbmRp
ZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBT
Y3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKHNj
cm9sbGJhcik7CisgICAgICAgIGlmICghcGFpbnRlcikKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBBU1NFUlQoIW1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSk7Cisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbV2Vi
U2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGJhcjpzY3JvbGxi
YXJdKTsKKworICAgICAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTptX2hvcml6b250YWxTY3JvbGxi
YXJQYWludGVyRGVsZWdhdGUuZ2V0KCldOworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlci5nZXQoKSBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6cGFpbnRlcl07CisgICAgICAg
IGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgICAgIFtwYWlu
dGVyIHNldEtub2JBbHBoYToxXTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6
OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewot
I2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIg
PSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgaWYgKCFwYWlu
dGVyKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWls
YWJsZSgpKSB7CisgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBh
aW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgaWYgKCFwYWludGVyKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVChtX2hvcml6b250YWxTY3JvbGxiYXJQ
YWludGVyRGVsZWdhdGUpOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRl
bGVnYXRlLmdldCgpIGludmFsaWRhdGVdOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJQ
YWludGVyRGVsZWdhdGUgPSBudWxscHRyOwogCi0gICAgQVNTRVJUKG1faG9yaXpvbnRhbFNjcm9s
bGJhclBhaW50ZXJEZWxlZ2F0ZSk7Ci0gICAgW21faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZS5nZXQoKSBpbnZhbGlkYXRlXTsKLSAgICBtX2hvcml6b250YWxTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUgPSBudWxscHRyOwotCi0gICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsK
LSAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRIb3Jpem9udGFsU2Ny
b2xsZXJJbXA6bmlsXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7Ci0jZW5k
aWYKKyAgICAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0SG9yaXpvbnRhbFNjcm9sbGVySW1wOm5pbF07
CisgICAgfQogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjYW5jZWxBbmltYXRpb25zKCkK
IHsKICAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSBmYWxzZTsKIAotI2lmIFVTRShT
Q1JPTExCQVJfUEFJTlRFUikKLSAgICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkp
Ci0gICAgICAgIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7Ci0gICAgW21faG9yaXpvbnRhbFNj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKLSAgICBbbV92
ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsK
LSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAg
ICAgICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkpCisgICAgICAgICAgICBzdG9w
U2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFp
bnRlckRlbGVnYXRlLmdldCgpIGNhbmNlbEFuaW1hdGlvbnNdOworICAgICAgICBbbV92ZXJ0aWNh
bFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKKyAgICB9
CiB9CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCkBAIC0xMjk1LDcgKzEyOTYsNyBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjplbmRTY3JvbGxHZXN0dXJlCiAKIHZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OnNuYXBSdWJiZXJCYW5kKCkKIHsKLSAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVs
dGEgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0gLSBtX3Njcm9s
bEVsYXN0aWNpdHlDb250cm9sbGVyLm1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOworICAg
IENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IHN5c3RlbVVwdGltZSgpIC0gbV9zY3JvbGxFbGFz
dGljaXR5Q29udHJvbGxlci5tX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKICAgICBpZiAo
bV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFt
cCAmJiB0aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCkKICAgICAgICAg
bV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNp
emUoKTsKIApAQCAtMTQwNCwxNSArMTQwNSwxNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpz
bmFwUnViYmVyQmFuZFRpCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNldElzQWN0aXZlKCkK
IHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgaWYgKG5lZWRzU2Nyb2xsZXJTdHls
ZVVwZGF0ZSgpKQotICAgICAgICB1cGRhdGVTY3JvbGxlclN0eWxlKCk7Ci0jZW5kaWYKKyAgICBp
ZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKG5lZWRz
U2Nyb2xsZXJTdHlsZVVwZGF0ZSgpKQorICAgICAgICAgICAgdXBkYXRlU2Nyb2xsZXJTdHlsZSgp
OworICAgIH0KIH0KIAotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OnVwZGF0ZVNjcm9sbGVyU3R5bGUoKQogeworICAgIGlmICghaXNTY3JvbGxiYXJP
dmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICghc2Nyb2xs
YWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkgewogICAgICAgICBzZXROZWVkc1Njcm9sbGVy
U3R5bGVVcGRhdGUodHJ1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0ODYsMTIgKzE0ODksMTMg
QEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c3RvcFNjcm9sbGJhclBhaQogCiB2b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRpbWVyPFNjcm9s
bEFuaW1hdG9yTWFjPiopCiB7Ci0gICAgLy8gVG8gZm9yY2UgdGhlIHNjcm9sbGJhcnMgdG8gZmxh
c2gsIHdlIGhhdmUgdG8gY2FsbCBoaWRlIGZpcnN0LiBPdGhlcndpc2UsIHRoZSBTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlcgotICAgIC8vIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHNjcm9sbGJhcnMg
YXJlIGFscmVhZHkgc2hvd2luZyBhbmQgYmFpbCBlYXJseS4KLSAgICBbbV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlci5nZXQoKSBoaWRlT3ZlcmxheVNjcm9sbGVyc107Ci0gICAgW21fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgZmxhc2hTY3JvbGxlcnNdOworICAgIGlmIChpc1Nj
cm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICAvLyBUbyBmb3JjZSB0aGUg
c2Nyb2xsYmFycyB0byBmbGFzaCwgd2UgaGF2ZSB0byBjYWxsIGhpZGUgZmlyc3QuIE90aGVyd2lz
ZSwgdGhlIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyCisgICAgICAgIC8vIG1pZ2h0IHRoaW5r
IHRoYXQgdGhlIHNjcm9sbGJhcnMgYXJlIGFscmVhZHkgc2hvd2luZyBhbmQgYmFpbCBlYXJseS4K
KyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgaGlkZU92ZXJsYXlT
Y3JvbGxlcnNdOworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBm
bGFzaFNjcm9sbGVyc107CisgICAgfQogfQotI2VuZGlmCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0JiBzY3JvbGxlclRo
dW1iKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNp
dHlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmgJKHJldmlzaW9uIDEwMzI4MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
CiAKLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0U2l6ZS5oPgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUu
aCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFj
LmgJKHJldmlzaW9uIDEwMzI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxiYXJUaGVtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAKICNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIgogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlO
VEVSKQogdHlwZWRlZiBpZCBTY3JvbGxiYXJQYWludGVyOwotI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDMsNyArNDEsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlRW5hYmxlZFN0YXRlKFNjcm9sbGJhciopOwogCisjaWYgIVBMQVRGT1JNKENIUk9NSVVN
KQogICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXIqLCBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworI2VuZGlmCiAKICAgICB2aXJ0dWFs
IGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Ny
b2xsYmFyKTsKICAgICAKQEAgLTU5LDEyICs1OSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCB1bnJl
Z2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciopOwogCi0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVS
KQogICAgIHZvaWQgc2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqLCBTY3JvbGxi
YXJQYWludGVyKTsKICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXJGb3JTY3JvbGxiYXIoU2Ny
b2xsYmFyKik7CiAKICAgICBzdGF0aWMgYm9vbCBpc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIo
KTsKLSNlbmRpZgorICAgIHN0YXRpYyB2b2lkIHNldElzQ3VycmVudGx5RHJhd2luZ0ludG9MYXll
cihib29sKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9s
bGJhciopOwpAQCAtODAsNiArNzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdmlydHVhbCBi
b29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50Jik7CiAgICAgdmlydHVhbCBib29sIHNob3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1i
KFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIGludCBzY3JvbGxi
YXJQYXJ0VG9ISVByZXNzZWRTdGF0ZShTY3JvbGxiYXJQYXJ0KTsKIH07CiAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHJl
dmlzaW9uIDEwMzI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJU
aGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShTQ1JPTExCQVJf
UEFJTlRFUikKIHR5cGVkZWYgSGFzaE1hcDxTY3JvbGxiYXIqLCBSZXRhaW5QdHI8U2Nyb2xsYmFy
UGFpbnRlcj4gPiBTY3JvbGxiYXJQYWludGVyTWFwOwotI2Vsc2UKLXR5cGVkZWYgSGFzaFNldDxT
Y3JvbGxiYXIqPiBTY3JvbGxiYXJQYWludGVyTWFwOwotI2VuZGlmCiAKIHN0YXRpYyBTY3JvbGxi
YXJQYWludGVyTWFwKiBzY3JvbGxiYXJNYXAoKQogewpAQCAtNzYsMTggKzcyLDE3IEBAICsgKHZv
aWQpYXBwZWFyYW5jZVByZWZzQ2hhbmdlZDooTlNOb3RpZmkKIHsKICAgICBVTlVTRURfUEFSQU0o
dW51c2VkTm90aWZpY2F0aW9uKTsKIAorICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSA9IFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpOworICAgIGlmICh0aGVtZS0+aXNNb2NrVGhlbWUoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPihTY3JvbGxi
YXJUaGVtZTo6dGhlbWUoKSktPnByZWZlcmVuY2VzQ2hhbmdlZCgpOwogICAgIGlmIChzY3JvbGxi
YXJNYXAoKS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgU2Nyb2xsYmFyUGFpbnRl
ck1hcDo6aXRlcmF0b3IgZW5kID0gc2Nyb2xsYmFyTWFwKCktPmVuZCgpOwogICAgIGZvciAoU2Ny
b2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3IgaXQgPSBzY3JvbGxiYXJNYXAoKS0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogICAgICAgICBp
dC0+Zmlyc3QtPnN0eWxlQ2hhbmdlZCgpOwogICAgICAgICBpdC0+Zmlyc3QtPmludmFsaWRhdGUo
KTsKLSNlbHNlCi0gICAgICAgICgqaXQpLT5zdHlsZUNoYW5nZWQoKTsKLSAgICAgICAgKCppdCkt
PmludmFsaWRhdGUoKTsKLSNlbmRpZgogICAgIH0KIH0KIApAQCAtOTUsNiArOTAsMTAgQEAgKyAo
dm9pZCliZWhhdmlvclByZWZzQ2hhbmdlZDooTlNOb3RpZmljYQogewogICAgIFVOVVNFRF9QQVJB
TSh1bnVzZWROb3RpZmljYXRpb24pOwogCisgICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lID0gU2Ny
b2xsYmFyVGhlbWU6OnRoZW1lKCk7CisgICAgaWYgKHRoZW1lLT5pc01vY2tUaGVtZSgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpKS0+cHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiB9CiAKQEAgLTEwOCwy
MiArMTA3LDIyIEBAICsgKHZvaWQpcmVnaXN0ZXJBc09ic2VydmVyCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorI2lmICFQTEFURk9STShDSFJPTUlVTSkKIFNjcm9sbGJhclRoZW1lKiBTY3JvbGxi
YXJUaGVtZTo6bmF0aXZlVGhlbWUoKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2Nyb2xs
YmFyVGhlbWVNYWMsIHRoZW1lLCAoKSk7CiAgICAgcmV0dXJuICZ0aGVtZTsKIH0KKyNlbmRpZgog
CiAvLyBGSVhNRTogR2V0IHRoZXNlIG51bWJlcnMgZnJvbSBDb3JlVUkuCiBzdGF0aWMgaW50IGNS
ZWFsQnV0dG9uTGVuZ3RoW10gPSB7IDI4LCAyMSB9Owogc3RhdGljIGludCBjQnV0dG9uSGl0SW5z
ZXRbXSA9IHsgMywgMiB9OwogLy8gY1JlYWxCdXR0b25MZW5ndGggLSBjQnV0dG9uSW5zZXQKIHN0
YXRpYyBpbnQgY0J1dHRvbkxlbmd0aFtdID0geyAxNCwgMTAgfTsKLSNpZiAhVVNFKFNDUk9MTEJB
Ul9QQUlOVEVSKQogc3RhdGljIGludCBjU2Nyb2xsYmFyVGhpY2tuZXNzW10gPSB7IDE1LCAxMSB9
Owogc3RhdGljIGludCBjQnV0dG9uSW5zZXRbXSA9IHsgMTQsIDExIH07CiBzdGF0aWMgaW50IGNU
aHVtYk1pbkxlbmd0aFtdID0geyAyNiwgMjAgfTsKLSNlbmRpZgogCiBzdGF0aWMgaW50IGNPdXRl
ckJ1dHRvbkxlbmd0aFtdID0geyAxNiwgMTQgfTsgLy8gVGhlIG91dGVyIGJ1dHRvbiBpbiBhIGRv
dWJsZSBidXR0b24gcGFpciBpcyBhIGJpdCBiaWdnZXIuCiBzdGF0aWMgaW50IGNPdXRlckJ1dHRv
bk92ZXJsYXAgPSAyOwpAQCAtMTMyLDE3ICsxMzEsMTMgQEAgc3RhdGljIGZsb2F0IGdJbml0aWFs
QnV0dG9uRGVsYXkgPSAwLjVmOwogc3RhdGljIGZsb2F0IGdBdXRvc2Nyb2xsQnV0dG9uRGVsYXkg
PSAwLjA1ZjsKIHN0YXRpYyBib29sIGdKdW1wT25UcmFja0NsaWNrID0gZmFsc2U7CiAKLSNpZiBV
U0UoU0NST0xMQkFSX1BBSU5URVIpCi1zdGF0aWMgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBn
QnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0dG9uc05vbmU7Ci0jZWxzZQogc3RhdGljIFNj
cm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgZ0J1dHRvblBsYWNlbWVudCA9IFNjcm9sbGJhckJ1dHRv
bnNEb3VibGVFbmQ7Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgdXBkYXRlQXJyb3dQbGFjZW1lbnQo
KQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICByZXR1cm47Ci0jZW5kaWYKKyAg
ICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIE5TU3RyaW5nICpidXR0b25QbGFjZW1lbnQgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSBvYmplY3RGb3JLZXk6QCJBcHBsZVNjcm9sbEJhclZhcmlhbnQiXTsK
ICAgICBpZiAoW2J1dHRvblBsYWNlbWVudCBpc0VxdWFsVG9TdHJpbmc6QCJTaW5nbGUiXSkKICAg
ICAgICAgZ0J1dHRvblBsYWNlbWVudCA9IFNjcm9sbGJhckJ1dHRvbnNTaW5nbGU7CkBAIC0xNTgs
MTUgKzE1MywxNSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVBcnJvd1BsYWNlbWVudCgpCiAKIHZvaWQg
U2Nyb2xsYmFyVGhlbWVNYWM6OnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBib29sIGlzSG9yaXpvbnRhbCA9
IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwotICAgIFNj
cm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciA9IFtOU0NsYXNzRnJvbVN0cmluZyhAIk5T
U2Nyb2xsZXJJbXAiKSBzY3JvbGxlckltcFdpdGhTdHlsZTp3a1JlY29tbWVuZGVkU2Nyb2xsZXJT
dHlsZSgpIGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKXNjcm9sbGJhci0+Y29udHJvbFNpemUo
KSBob3Jpem9udGFsOmlzSG9yaXpvbnRhbCByZXBsYWNpbmdTY3JvbGxlckltcDpuaWxdOwotICAg
IHNjcm9sbGJhck1hcCgpLT5hZGQoc2Nyb2xsYmFyLCBzY3JvbGxiYXJQYWludGVyKTsKLSAgICB1
cGRhdGVFbmFibGVkU3RhdGUoc2Nyb2xsYmFyKTsKLSAgICB1cGRhdGVTY3JvbGxiYXJPdmVybGF5
U3R5bGUoc2Nyb2xsYmFyKTsKLSNlbHNlCi0gICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxi
YXIpOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7
CisgICAgICAgIGJvb2wgaXNIb3Jpem9udGFsID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09
IEhvcml6b250YWxTY3JvbGxiYXI7CisgICAgICAgIFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFy
UGFpbnRlciA9IFtOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAiKSBzY3JvbGxlcklt
cFdpdGhTdHlsZTpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSBjb250cm9sU2l6ZTooTlNDb250
cm9sU2l6ZSlzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkgaG9yaXpvbnRhbDppc0hvcml6b250YWwg
cmVwbGFjaW5nU2Nyb2xsZXJJbXA6bmlsXTsKKyAgICAgICAgc2Nyb2xsYmFyTWFwKCktPmFkZChz
Y3JvbGxiYXIsIHNjcm9sbGJhclBhaW50ZXIpOworICAgICAgICB1cGRhdGVFbmFibGVkU3RhdGUo
c2Nyb2xsYmFyKTsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKHNjcm9sbGJh
cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIs
IG5pbCk7CisgICAgfQogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1bnJlZ2lzdGVyU2Ny
b2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQpAQCAtMTc0LDcgKzE2OSw2IEBAIHZvaWQgU2Ny
b2xsYmFyVGhlbWVNYWM6OnVucmVnaXN0ZXJTY3JvbGwKICAgICBzY3JvbGxiYXJNYXAoKS0+cmVt
b3ZlKHNjcm9sbGJhcik7CiB9CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiB2b2lkIFNj
cm9sbGJhclRoZW1lTWFjOjpzZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBTY3JvbGxiYXJQYWludGVyIG5ld1BhaW50ZXIpCiB7CiAgICAgc2Nyb2xsYmFyTWFw
KCktPnNldChzY3JvbGxiYXIsIG5ld1BhaW50ZXIpOwpAQCAtMTk0LDEzICsxODgsMTcgQEAgYm9v
bCBTY3JvbGxiYXJUaGVtZU1hYzo6aXNDdXJyZW50bHlEcmF3aQogICAgIHJldHVybiBnX2lzQ3Vy
cmVudGx5RHJhd2luZ0ludG9MYXllcjsKIH0KIAotI2VuZGlmCit2b2lkIFNjcm9sbGJhclRoZW1l
TWFjOjpzZXRJc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoYm9vbCBiKQoreworICAgIGdfaXND
dXJyZW50bHlEcmF3aW5nSW50b0xheWVyID0gYjsKK30KIAogU2Nyb2xsYmFyVGhlbWVNYWM6OlNj
cm9sbGJhclRoZW1lTWFjKCkKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKICAgICBp
ZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAg
Z0J1dHRvblBsYWNlbWVudCA9IGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpID8gU2Ny
b2xsYmFyQnV0dG9uc05vbmUgOiBTY3JvbGxiYXJCdXR0b25zRG91YmxlRW5kOwogICAgICAgICBb
V2ViU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciByZWdpc3RlckFzT2JzZXJ2ZXJdOwogICAgICAgICBw
cmVmZXJlbmNlc0NoYW5nZWQoKTsKICAgICB9CkBAIC0yMjIsMjYgKzIyMCwyMyBAQCB2b2lkIFNj
cm9sbGJhclRoZW1lTWFjOjpwcmVmZXJlbmNlc0NoYW5nCiAKIGludCBTY3JvbGxiYXJUaGVtZU1h
Yzo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQog
ewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBTY3JvbGxiYXJQYWludGVyIHNjcm9s
bGJhclBhaW50ZXIgPSBbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVySW1wIikgc2Nyb2xs
ZXJJbXBXaXRoU3R5bGU6d2tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSBjb250cm9sU2l6ZTpj
b250cm9sU2l6ZSBob3Jpem9udGFsOk5PIHJlcGxhY2luZ1Njcm9sbGVySW1wOm5pbF07Ci0gICAg
cmV0dXJuIFtzY3JvbGxiYXJQYWludGVyIHRyYWNrQm94V2lkdGhdOwotI2Vsc2UKLSAgICByZXR1
cm4gY1Njcm9sbGJhclRoaWNrbmVzc1tjb250cm9sU2l6ZV07Ci0jZW5kaWYKKyAgICBpZiAoaXNT
Y3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgU2Nyb2xsYmFyUGFpbnRl
ciBzY3JvbGxiYXJQYWludGVyID0gW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlckltcCIp
IHNjcm9sbGVySW1wV2l0aFN0eWxlOnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpIGNvbnRyb2xT
aXplOmNvbnRyb2xTaXplIGhvcml6b250YWw6Tk8gcmVwbGFjaW5nU2Nyb2xsZXJJbXA6bmlsXTsK
KyAgICAgICAgcmV0dXJuIFtzY3JvbGxiYXJQYWludGVyIHRyYWNrQm94V2lkdGhdOworICAgIH0g
ZWxzZQorICAgICAgICByZXR1cm4gY1Njcm9sbGJhclRoaWNrbmVzc1tjb250cm9sU2l6ZV07CiB9
CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0
CiB7Ci0jaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQotICAgIHJldHVybiB3a1JlY29tbWVuZGVk
U2Nyb2xsZXJTdHlsZSgpID09IE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXk7Ci0jZWxzZQotICAgIHJl
dHVybiBmYWxzZTsKLSNlbmRpZgorICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFi
bGUoKSkKKyAgICAgICAgcmV0dXJuIHJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpID09IE5TU2Ny
b2xsZXJTdHlsZU92ZXJsYXk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiAgICAgU2Ny
b2xsYmFyUGFpbnRlciBwYWludGVyID0gcGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwog
ICAgIHN3aXRjaCAoc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxiYXJPdmVybGF5
U3R5bGUoKSkgewogICAgIGNhc2UgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGVmYXVsdDoKQEAgLTI1
NCw5ICsyNDksNiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1cGRhdGVTY3JvbGxiYXJPCiAg
ICAgICAgIFtwYWludGVyIHNldEtub2JTdHlsZTpOU1Njcm9sbGVyS25vYlN0eWxlTGlnaHRdOwog
ICAgICAgICBicmVhazsKICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIp
OwotI2VuZGlmCiB9CiAKIGRvdWJsZSBTY3JvbGxiYXJUaGVtZU1hYzo6aW5pdGlhbEF1dG9zY3Jv
bGxUaW1lckRlbGF5KCkKQEAgLTI3Niw3ICsyNjgsNyBAQCBTY3JvbGxiYXJCdXR0b25zUGxhY2Vt
ZW50IFNjcm9sbGJhclRoZW1lCiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6Omhhc0J1dHRvbnMo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgp
ICYmIGdCdXR0b25QbGFjZW1lbnQgIT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUKKyAgICByZXR1cm4g
c2Nyb2xsYmFyLT5lbmFibGVkKCkgJiYgYnV0dG9uc1BsYWNlbWVudCgpICE9IFNjcm9sbGJhckJ1
dHRvbnNOb25lCiAgICAgICAgICAgICAgJiYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyCiAgICAgICAgICAgICAgPyBzY3JvbGxiYXItPndpZHRoKCkKICAg
ICAgICAgICAgICA6IHNjcm9sbGJhci0+aGVpZ2h0KCkpID49IDIgKiAoY1JlYWxCdXR0b25MZW5n
dGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSAtIGNCdXR0b25IaXRJbnNldFtzY3JvbGxiYXIt
PmNvbnRyb2xTaXplKCldKTsKQEAgLTI4NSwxMyArMjc3LDEyIEBAIGJvb2wgU2Nyb2xsYmFyVGhl
bWVNYWM6Omhhc0J1dHRvbnMoU2Nyb2wKIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6Omhhc1RodW1i
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAgIGludCBtaW5MZW5ndGhGb3JUaHVtYjsKLSNp
ZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCi0gICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0g
c2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpOwotICAgIG1pbkxlbmd0aEZvclRo
dW1iID0gW3BhaW50ZXIga25vYk1pbkxlbmd0aF0gKyBbcGFpbnRlciB0cmFja092ZXJsYXBFbmRJ
bnNldF0gKyBbcGFpbnRlciBrbm9iT3ZlcmxhcEVuZEluc2V0XQotICAgICAgICArIDIgKiAoW3Bh
aW50ZXIgdHJhY2tFbmRJbnNldF0gKyBbcGFpbnRlciBrbm9iRW5kSW5zZXRdKTsKLSNlbHNlCi0g
ICAgbWluTGVuZ3RoRm9yVGh1bWIgPSAyICogY0J1dHRvbkluc2V0W3Njcm9sbGJhci0+Y29udHJv
bFNpemUoKV0gKyBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIDE7
Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAg
ICAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyTWFwKCktPmdldChzY3Jv
bGxiYXIpLmdldCgpOworICAgICAgICBtaW5MZW5ndGhGb3JUaHVtYiA9IFtwYWludGVyIGtub2JN
aW5MZW5ndGhdICsgW3BhaW50ZXIgdHJhY2tPdmVybGFwRW5kSW5zZXRdICsgW3BhaW50ZXIga25v
Yk92ZXJsYXBFbmRJbnNldF0KKyAgICAgICAgICAgICsgMiAqIChbcGFpbnRlciB0cmFja0VuZElu
c2V0XSArIFtwYWludGVyIGtub2JFbmRJbnNldF0pOworICAgIH0gZWxzZQorICAgICAgICBtaW5M
ZW5ndGhGb3JUaHVtYiA9IDIgKiBjQnV0dG9uSW5zZXRbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
XSArIGNUaHVtYk1pbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgMTsKICAgICBy
ZXR1cm4gc2Nyb2xsYmFyLT5lbmFibGVkKCkgJiYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAgc2Nyb2xsYmFyLT53aWR0aCgp
IDogCiAgICAgICAgICAgICAgc2Nyb2xsYmFyLT5oZWlnaHQoKSkgPj0gbWluTGVuZ3RoRm9yVGh1
bWI7CkBAIC00MjgsMTEgKzQxOSwxMCBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lTWFjOjp0cmFj
a1JlY3QoU2NyCiAKIGludCBTY3JvbGxiYXJUaGVtZU1hYzo6bWluaW11bVRodW1iTGVuZ3RoKFNj
cm9sbGJhciogc2Nyb2xsYmFyKQogewotI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKLSAgICBy
ZXR1cm4gW3Njcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSBrbm9iTWluTGVuZ3Ro
XTsKLSNlbHNlCi0gICAgcmV0dXJuIGNUaHVtYk1pbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xT
aXplKCldOwotI2VuZGlmCisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgp
KQorICAgICAgICByZXR1cm4gW3Njcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSBr
bm9iTWluTGVuZ3RoXTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBjVGh1bWJNaW5MZW5ndGhb
c2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXTsKIH0KIAogYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6
c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2dCkKQEAgLTQ0OSw3ICs0MzksNyBAQCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpzaG91bGRE
cmFnRG9jdW1lCiAgICAgcmV0dXJuIGV2ZW50LmFsdEtleSgpOwogfQogCi1zdGF0aWMgaW50IHNj
cm9sbGJhclBhcnRUb0hJUHJlc3NlZFN0YXRlKFNjcm9sbGJhclBhcnQgcGFydCkKK2ludCBTY3Jv
bGxiYXJUaGVtZU1hYzo6c2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUoU2Nyb2xsYmFyUGFy
dCBwYXJ0KQogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIEJhY2tCdXR0b25T
dGFydFBhcnQ6CkBAIC00NjksMTQgKzQ1OSwxMCBAQCBzdGF0aWMgaW50IHNjcm9sbGJhclBhcnRU
b0hJUHJlc3NlZFN0YXRlCiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZUVuYWJsZWRT
dGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIp
Ci0gICAgW3Njcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSBzZXRFbmFibGVkOnNj
cm9sbGJhci0+ZW5hYmxlZCgpXTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7
Ci0jZW5kaWYKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAg
ICAgIFtzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCkgc2V0RW5hYmxlZDpzY3Jv
bGxiYXItPmVuYWJsZWQoKV07CiB9CiAKLSNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiBzdGF0
aWMgdm9pZCBzY3JvbGxiYXJQYWludGVyUGFpbnQoU2Nyb2xsYmFyUGFpbnRlciBzY3JvbGxiYXJQ
YWludGVyLCBib29sIGVuYWJsZWQsIGRvdWJsZSB2YWx1ZSwgQ0dGbG9hdCBwcm9wb3J0aW9uLCBD
R1JlY3QgZnJhbWVSZWN0KQogewogICAgIFtzY3JvbGxiYXJQYWludGVyIHNldEVuYWJsZWQ6ZW5h
YmxlZF07CkBAIC00OTgsNDUgKzQ4NCw0NSBAQCBzdGF0aWMgdm9pZCBzY3JvbGxiYXJQYWludGVy
UGFpbnQoU2Nyb2xsCiAgICAgaWYgKGVuYWJsZWQpCiAgICAgICAgIFtzY3JvbGxiYXJQYWludGVy
IGRyYXdLbm9iXTsKIH0KLSNlbmRpZgogCisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQogYm9vbCBT
Y3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKIHsKLSNpZiBVU0UoU0NS
T0xMQkFSX1BBSU5URVIpCi0gICAgZmxvYXQgdmFsdWUgPSAwOwotICAgIGZsb2F0IG92ZXJoYW5n
ID0gMDsKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAg
ICAgZmxvYXQgdmFsdWUgPSAwOworICAgICAgICBmbG9hdCBvdmVyaGFuZyA9IDA7CiAKLSAgICBp
ZiAoc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgPCAwKSB7Ci0gICAgICAgIC8vIFNjcm9sbGVkIHBh
c3QgdGhlIHRvcC4KLSAgICAgICAgdmFsdWUgPSAwOwotICAgICAgICBvdmVyaGFuZyA9IC1zY3Jv
bGxiYXItPmN1cnJlbnRQb3MoKTsKLSAgICB9IGVsc2UgaWYgKHNjcm9sbGJhci0+dmlzaWJsZVNp
emUoKSArIHNjcm9sbGJhci0+Y3VycmVudFBvcygpID4gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSkg
ewotICAgICAgICAvLyBTY3JvbGxlZCBwYXN0IHRoZSBib3R0b20uCi0gICAgICAgIHZhbHVlID0g
MTsKLSAgICAgICAgb3ZlcmhhbmcgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSArIHNjcm9sbGJh
ci0+dmlzaWJsZVNpemUoKSAtIHNjcm9sbGJhci0+dG90YWxTaXplKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gV2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIHNjcm9sbGFibGUgYXJlYS4KLSAg
ICAgICAgaW50IG1heGltdW0gPSBzY3JvbGxiYXItPm1heGltdW0oKTsKLSAgICAgICAgaWYgKG1h
eGltdW0gPiAwKQotICAgICAgICAgICAgdmFsdWUgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAv
IG1heGltdW07Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYgKHNjcm9sbGJhci0+Y3VycmVudFBv
cygpIDwgMCkgeworICAgICAgICAgICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgdG9wLgogICAgICAg
ICAgICAgdmFsdWUgPSAwOwotICAgIH0KKyAgICAgICAgICAgIG92ZXJoYW5nID0gLXNjcm9sbGJh
ci0+Y3VycmVudFBvcygpOworICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbGJhci0+dmlzaWJsZVNp
emUoKSArIHNjcm9sbGJhci0+Y3VycmVudFBvcygpID4gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSkg
eworICAgICAgICAgICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgYm90dG9tLgorICAgICAgICAgICAg
dmFsdWUgPSAxOworICAgICAgICAgICAgb3ZlcmhhbmcgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3Mo
KSArIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSAtIHNjcm9sbGJhci0+dG90YWxTaXplKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXaXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUg
c2Nyb2xsYWJsZSBhcmVhLgorICAgICAgICAgICAgaW50IG1heGltdW0gPSBzY3JvbGxiYXItPm1h
eGltdW0oKTsKKyAgICAgICAgICAgIGlmIChtYXhpbXVtID4gMCkKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IHNjcm9sbGJhci0+Y3VycmVudFBvcygpIC8gbWF4aW11bTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgIH0KIAotICAgIFRlbXBvcmFy
eUNoYW5nZTxib29sPiBpc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoZ19pc0N1cnJlbnRseURy
YXdpbmdJbnRvTGF5ZXIsIGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7Ci0gICAgCi0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKLSAgICBjb250
ZXh0LT5jbGlwKGRhbWFnZVJlY3QpOwotICAgIGNvbnRleHQtPnRyYW5zbGF0ZShzY3JvbGxiYXIt
PmZyYW1lUmVjdCgpLngoKSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkpOwotICAgIExvY2Fs
Q3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7Ci0gICAgc2Nyb2xs
YmFyUGFpbnRlclBhaW50KHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmVuYWJsZWQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAtIG92ZXJoYW5n
KSAvIHNjcm9sbGJhci0+dG90YWxTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CisgICAgICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBp
c0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoZ19pc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIs
IGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7CisgICAgICAgIAorICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOworICAgICAgICBjb250ZXh0
LT5jbGlwKGRhbWFnZVJlY3QpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoc2Nyb2xsYmFy
LT5mcmFtZVJlY3QoKS54KCksIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueSgpKTsKKyAgICAgICAg
TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChjb250ZXh0KTsKKyAgICAg
ICAgc2Nyb2xsYmFyUGFpbnRlclBhaW50KHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5n
ZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT5lbmFibGVk
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFyLT52aXNp
YmxlU2l6ZSgpKSAtIG92ZXJoYW5nKSAvIHNjcm9sbGJhci0+dG90YWxTaXplKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwogCi0gICAg
cmV0dXJuIHRydWU7Ci0jZW5kaWYKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAg
SElUaGVtZVRyYWNrRHJhd0luZm8gdHJhY2tJbmZvOwogICAgIHRyYWNrSW5mby52ZXJzaW9uID0g
MDsKQEAgLTYwMSw2ICs1ODcsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChTY3Jv
bGxiYXIqCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZgogCiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>