<?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>69416</bug_id>
          
          <creation_ts>2011-10-05 06:38:26 -0700</creation_ts>
          <short_desc>Prepare SVGImage intrinsic size negotiation: Introduce an IntSize &lt;-&gt; SVGImage cache in CachedImage</short_desc>
          <delta_ts>2011-10-14 02:07:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>47156</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jamesr</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>478305</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-05 06:38:26 -0700</bug_when>
    <thetext>Prepare SVGImage intrinsic size negotiation: Make it possible to reuse the same SVGImage at different sizes.
The intrinsic width of a SVGImage is dependent on the place where it&apos;s embedded, soon.
To make this work, we have to associate Images with their owners, by passing a ImageUser pointer to the various GraphicsContext/Image draw() methods.
SVGImage::draw() and friends, will use that to lookup a size for a renderer from a HashMap. This will be done in a follow-up patch, covered by bug 47156.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478314</commentid>
    <comment_count>1</comment_count>
      <attachid>109784</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-05 06:53:59 -0700</bug_when>
    <thetext>Created attachment 109784
Patch v1

Adding draft patch, unlikely to build on non-Mac platforms yet, as it touches a lot of call sites in platform/.
Uploading early to receive EWS results...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478315</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-05 06:56:30 -0700</bug_when>
    <thetext>Attachment 109784 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/loader/cache/CachedImage.h:64:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/loader/cache/CachedImage.h:65:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 2 in 77 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478325</commentid>
    <comment_count>3</comment_count>
      <attachid>109784</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-05 07:15:13 -0700</bug_when>
    <thetext>Comment on attachment 109784
Patch v1

Attachment 109784 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9959182</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478328</commentid>
    <comment_count>4</comment_count>
      <attachid>109784</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-05 07:16:35 -0700</bug_when>
    <thetext>Comment on attachment 109784
Patch v1

Attachment 109784 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9954403</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478332</commentid>
    <comment_count>5</comment_count>
      <attachid>109784</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-05 07:23:05 -0700</bug_when>
    <thetext>Comment on attachment 109784
Patch v1

Attachment 109784 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9940730</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478356</commentid>
    <comment_count>6</comment_count>
      <attachid>109793</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-05 08:06:37 -0700</bug_when>
    <thetext>Created attachment 109793
Patch v2

First stab at fixing non-mac platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478370</commentid>
    <comment_count>7</comment_count>
      <attachid>109793</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-05 08:20:17 -0700</bug_when>
    <thetext>Comment on attachment 109793
Patch v2

Attachment 109793 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9944762</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478375</commentid>
    <comment_count>8</comment_count>
      <attachid>109793</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-05 08:28:00 -0700</bug_when>
    <thetext>Comment on attachment 109793
Patch v2

Attachment 109793 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9958278</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478381</commentid>
    <comment_count>9</comment_count>
      <attachid>109793</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-05 08:35:36 -0700</bug_when>
    <thetext>Comment on attachment 109793
Patch v2

Attachment 109793 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9940745</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478397</commentid>
    <comment_count>10</comment_count>
      <attachid>109805</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-05 08:50:05 -0700</bug_when>
    <thetext>Created attachment 109805
Patch v3

Next round of fixes...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478415</commentid>
    <comment_count>11</comment_count>
      <attachid>109805</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-05 09:16:58 -0700</bug_when>
    <thetext>Comment on attachment 109805
Patch v3

Attachment 109805 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9959212</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478447</commentid>
    <comment_count>12</comment_count>
      <attachid>109805</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-05 09:53:44 -0700</bug_when>
    <thetext>Comment on attachment 109805
Patch v3

Attachment 109805 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9954471</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478613</commentid>
    <comment_count>13</comment_count>
      <attachid>109844</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-05 13:14:26 -0700</bug_when>
    <thetext>Created attachment 109844
Patch v4

Next round of fixes...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478636</commentid>
    <comment_count>14</comment_count>
      <attachid>109844</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-05 13:31:44 -0700</bug_when>
    <thetext>Comment on attachment 109844
Patch v4

I don&apos;t think it makes any sense to impose this upon the platform notion of Image.  Image::size() is already virtual so can&apos;t you just implement the behavior you want in SVGImage&apos;s override?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479061</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-06 04:17:39 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 109844 [details])
&gt; I don&apos;t think it makes any sense to impose this upon the platform notion of Image.  Image::size() is already virtual so can&apos;t you just implement the behavior you want in SVGImage&apos;s override?
You&apos;re right, now that I had some sleep I agree :-)

It was a lazy approach with high cost on platform layer, I already have a different, cleaner solution in mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479907</commentid>
    <comment_count>16</comment_count>
      <attachid>110115</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-07 02:59:32 -0700</bug_when>
    <thetext>Created attachment 110115
New approach - v1

A less intrusive approach, with minimal impact on the platform layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479908</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 03:00:51 -0700</bug_when>
    <thetext>Attachment 110115 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/rendering/style/StyleImage.h:110:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/rendering/style/StyleImage.h:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480406</commentid>
    <comment_count>18</comment_count>
      <attachid>110115</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-07 17:13:00 -0700</bug_when>
    <thetext>Comment on attachment 110115
New approach - v1

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

&gt; Source/WebCore/ChangeLog:41
&gt; +        ImageUser is just a simple typedef const void*, as we can&apos;t use RenderObject in platform/ as that would
&gt; +        be a layering violation (and its also needed for non-RenderObject derived classes to use SVGImages).

What is done with the ImageUser in SVGImage? We should create an abstract base class for that which RenderObject can inherit from and not use a const void*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480708</commentid>
    <comment_count>19</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-09 05:56:40 -0700</bug_when>
    <thetext>(In reply to comment #18) 
&gt; What is done with the ImageUser in SVGImage? We should create an abstract base class for that which RenderObject can inherit from and not use a const void*.

In a follow-up patch (see master bug 47156, whose patch makes us of this) SVGImage maintains a HashMap&lt;ImageUser, IntSize&gt; to return the correct override container sizes for a certain user of that Image. SVGImage::setImageContainerSize adds values to the HashMap, size() and paint() etc. query the HashMap.

Your suggestion to use a new abstract base class instead of a typdef to const void* would work as well, though it&apos;s not only RenderObject who would need to inherit from it, but also eg. SVGFEImage (non RenderObject derived but uses SVGImages).

Would you prefer if I&apos;d introduce a &quot;class ImageUser { }&quot; and let RenderObject/SVGFEImage inherit from it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480781</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-09 19:18:43 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Would you prefer if I&apos;d introduce a &quot;class ImageUser { }&quot; and let RenderObject/SVGFEImage inherit from it?

I do think there is value even if the class has no members, but the value is not as great was I though if an “image user” truly is only a hash table key.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480884</commentid>
    <comment_count>21</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-10 02:24:45 -0700</bug_when>
    <thetext>I wish you had tried my suggestion in https://bugs.webkit.org/show_bug.cgi?id=67087#c9 of going with multiple SVGImages per CachedImage, one per size the image is used in. I suspect (though have no proof, as this code is complex and I may be missing subtleties) that that would have led to a cleaner architecture without closing any avenues for future optimizations.

Having to use out-of-band information transfer tricks like ImageUser here is usually a sign of architecture heading to a wrong direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480890</commentid>
    <comment_count>22</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-10 02:34:41 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; I wish you had tried my suggestion in https://bugs.webkit.org/show_bug.cgi?id=67087#c9 of going with multiple SVGImages per CachedImage, one per size the image is used in. I suspect (though have no proof, as this code is complex and I may be missing subtleties) that that would have led to a cleaner architecture without closing any avenues for future optimizations.
Well, I told you on IRC how heavy constructing SVGImages are. The better approach is to cache multiple rendered ImageBuffers per size, but that&apos;s a future optimization. Your suggested approach would work, but you&apos;re creating seperated dom/render trees/documents for each of the SVGImages. I don&apos;t think that&apos;s a good idea. I plan to add an additional caching layering in CachedImage in future, that handles caching rendered ImageBuffers, but that&apos;s not going to avoid ImageUser.

&gt; Having to use out-of-band information transfer tricks like ImageUser here is usually a sign of architecture heading to a wrong direction.
I&apos;d agree if I&apos;d use the ImageUser for anything else than putting it into a HashMap as key to map an arbitrary user of the CachedImage (eg. RenderObject or SVGFEImage) to a certain IntSize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483127</commentid>
    <comment_count>23</comment_count>
      <attachid>110828</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-13 04:50:53 -0700</bug_when>
    <thetext>Created attachment 110828
Next try

Awaiting EWS results...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483130</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-13 04:55:09 -0700</bug_when>
    <thetext>Attachment 110828 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/loader/cache/ImageBySizeCache.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/ChangeLog:76:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Total errors found: 2 in 65 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483135</commentid>
    <comment_count>25</comment_count>
      <attachid>110828</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-13 05:14:21 -0700</bug_when>
    <thetext>Comment on attachment 110828
Next try

Attachment 110828 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10067169</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483140</commentid>
    <comment_count>26</comment_count>
      <attachid>110834</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-13 05:37:57 -0700</bug_when>
    <thetext>Created attachment 110834
Next try - v2

Fix qt build &amp; style issues - should be done now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483157</commentid>
    <comment_count>27</comment_count>
      <attachid>110834</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-13 06:38:32 -0700</bug_when>
    <thetext>Comment on attachment 110834
Next try - v2

Attachment 110834 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10062192</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483177</commentid>
    <comment_count>28</comment_count>
      <attachid>110834</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-13 07:24:58 -0700</bug_when>
    <thetext>Comment on attachment 110834
Next try - v2

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

Looks generally good, my comments are mostly about naming and style.

&gt; Source/WebCore/bindings/objc/DOM.mm:442
&gt; -    return cachedImage-&gt;image()-&gt;getNSImage();
&gt; +    return cachedImage-&gt;image(renderer)-&gt;getNSImage();

I think there should be a separate call for getting renderer specific version of the image, imageForRenderer() perhaps. CacheImage::image() (instead of image(0) as this patch does) should still return the generic image (or assert if that doesn&apos;t make sense).

&gt; Source/WebCore/html/HTMLImageElement.cpp:260
&gt; -            return m_imageLoader.image()-&gt;imageSize(1.0f).width();
&gt; +            return m_imageLoader.image()-&gt;imageSize(renderer(), 1.0f).width();

Similarly imageSizeForRenderer.

&gt; Source/WebCore/loader/cache/CachedImage.cpp:217
&gt; -void CachedImage::setImageContainerSize(const IntSize&amp; containerSize)
&gt; +void CachedImage::setImageContainerSize(const RenderObject* renderer, const IntSize&amp; containerSize)

setContainerSizeForRenderer perhaps?

&gt; Source/WebCore/loader/cache/CachedImage.cpp:239
&gt; +    // FIXME: Turn this on once, webkit.org/b/47156 lands.
&gt; +#if ENABLE(SVG) &amp;&amp; 0
&gt; +    // SVGImages are independently cached per size in the ImageBySizeCache.
&gt; +    RenderObjectSizeCountMap::const_iterator it = m_svgImageCache.clients().find(renderer);
&gt; +    if (it != m_svgImageCache.clients().end()) {
&gt; +        IntSize currentSize = it-&gt;second.first;
&gt; +        ASSERT(!currentSize.isEmpty());
&gt; +        if (currentSize == containerSize)
&gt; +            return;
&gt; +        m_svgImageCache.removeClient(renderer);
&gt; +        if (!containerSize.isEmpty())
&gt; +            m_svgImageCache.addClient(renderer, containerSize);
&gt; +        return;
&gt; +    }

There is quite of bit of caching logic added to CachedImage here and elsewhere. I wonder if more of it could live in the cache class.

&gt; Source/WebCore/loader/cache/CachedImage.cpp:297
&gt; -IntRect CachedImage::imageRect(float multiplier) const
&gt; +IntRect CachedImage::imageRect(const RenderObject* renderer, float multiplier)

I can&apos;t find any clients for this call in this patch. Can the method be removed?

&gt; Source/WebCore/loader/cache/ImageBySizeCache.cpp:22
&gt; -#include &quot;CSSImageGeneratorValue.h&quot;
&gt; +#include &quot;ImageBySizeCache.h&quot;

This shouldn&apos;t be under loader/cache, that is really for classes closer to networking. rendering/ would probably be appropriate as this deals with mappings from RenderObjects.

&gt; Source/WebCore/loader/cache/ImageBySizeCache.cpp:66
&gt; -Image* CSSImageGeneratorValue::getImage(RenderObject* renderer, const IntSize&amp; size)
&gt; +Image* ImageBySizeCache::getImage(const RenderObject* renderer, const IntSize&amp; size)

Not a fan of the name &quot;ImageBySizeCache&quot;. It doesn&apos;t really capture what this class does. From client perspective it really maps from RenderObject to Image. I couldn&apos;t came up with any great names though.

&gt; Source/WebCore/loader/cache/ImageBySizeCache.h:35
&gt; +typedef pair&lt;IntSize, int&gt; SizeCountPair;
&gt; +typedef HashMap&lt;const RenderObject*, SizeCountPair&gt; RenderObjectSizeCountMap;

Copy code I know, but I would rather use a struct instead of pair&lt;IntSize, int&gt;. The resulting code reads much better.

&gt; Source/WebCore/platform/win/ClipboardWin.cpp:242
&gt; -    ASSERT(image-&gt;image()-&gt;data());
&gt; +    ASSERT(image-&gt;image(0)-&gt;data());

These all go away if you just keep image() for non-renderer specific case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483189</commentid>
    <comment_count>29</comment_count>
      <attachid>110844</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-13 08:08:20 -0700</bug_when>
    <thetext>Created attachment 110844
Next try - v3

Fixed Anttis comments. I hope merging worked fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483824</commentid>
    <comment_count>30</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-14 01:03:32 -0700</bug_when>
    <thetext>r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483827</commentid>
    <comment_count>31</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-14 01:08:34 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; r=me

Thanks a lot, landed in r97448. Now continuing work on a new patch for bug 47156.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483860</commentid>
    <comment_count>32</comment_count>
      <attachid>110844</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-14 02:07:12 -0700</bug_when>
    <thetext>Comment on attachment 110844
Next try - v3

Fixed mac builds in r97452. On recreating the XCode additions on my other machine, I forgot to mark ImageBySizeCache.h private.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109784</attachid>
            <date>2011-10-05 06:53:59 -0700</date>
            <delta_ts>2011-10-05 08:06:37 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>SVGImage-splitoff-v1.diff</filename>
            <type>text/plain</type>
            <size>136708</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjI4IEBACisyMDExLTEwLTA1ICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFByZXBhcmUgU1ZH
SW1hZ2UgaW50cmluc2ljIHNpemUgbmVnb3RpYXRpb246IE1ha2UgaXQgcG9zc2libGUgdG8gcmV1
c2UgdGhlIHNhbWUgU1ZHSW1hZ2UgYXQgZGlmZmVyZW50IHNpemVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRvIGltcGxlbWVudCBpbnRyaW5jaWMgc2l6
ZSBuZWdvdGlhdGlvbiBmb3IgU1ZHIGltYWdlcyBlbWJlZGRlZCB0aHJvdWdoIGJvcmRlci1pbWFn
ZS9iYWNrZ3JvdW5kLWltYWdlLzxodG1sOmltZz4vPHN2ZzppbWFnZT4vLi4uCisgICAgICAgIFNW
R0ltYWdlIG5lZWRzIHRvIHN0b3JlIHRoZSBkZXNpcmVkIGNvbnRhaW5lciBzaXplIGZvciB0aGUg
dGFyZ2V0IHdoZXJlIHRoZSBpbWFnZSBpcyBlbWJlZGRlZCwgaWYgaXRzIHByb3ZpZGVkLgorCisg
ICAgICAgIEFzIFNWR0ltYWdlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgaW5zdGFuY2Vz
IHRoYXQgcmVmZXIgdG8gaXQsIHdlIG5lZWQgdG8gbWFrZSBpdCBjb250YWluIGEgSGFzaE1hcCB0
aGF0IG1hcHMgZnJvbQorICAgICAgICBhIFJlbmRlck9iamVjdCogdG8gYSBJbnRTaXplLiBBcyBT
VkdJbWFnZSBpcyBuZXZlciB1c2VkIGRpcmVjdGx5LCB0aGUgSW1hZ2UgQVBJcyBuZWVkIHRvIGJl
IGFkanVzdGVkLiBJdCBjYW4ndCByZWZlcmVuY2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0cyBh
cyB0aGF0IHdvdWxkIGJlIGEgcGxhdGZvcm0gbGF5ZXIgdmlvbGF0aW9uIC0gaW5zdGVhZCBpbnRy
b2R1Y2UgYSAiSW1hZ2VVc2VyIiB0eXBlZGVmIHRvIGNvbnN0IHZvaWQqCisgICAgICAgIGFuZCBw
YXNzIEltYWdlVXNlciBhcmd1bWVudHMgdG8gR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UvZHJh
d1RpbGVkSW1hZ2UvZHJhd1BhdHRlcm4sIGFuZCB0byBJbWFnZTo6c2l6ZS93aWR0aC9oZWlnaHQK
KyAgICAgICAgc28gdGhhdCBTVkdJbWFnZSBjYW4gYWx3YXlzIGZpZ3VyZSBvdXQgd2hvcyBhc2tp
bmcgZm9yIHRoZSBzaXplIGFuZCByZXR1cm4gdGhlIHJpZ2h0IGFuc3dlcnMuCisKKyAgICAgICAg
Tm90IHRlc3RhYmxlIHlldCwgYXMgdGhlIG5ldyBJbWFnZVVzZXIgY29uY2VwdCBpc24ndCB1c2Vk
IHlldC4gQnVnIDQ3MTU2IHdpbGwgbWFrZSB1c2Ugb2YgaXQgc29vbi4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6Cisg
ICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQ6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1l
bnQ6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpuYXR1cmFs
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbEhlaWdo
dCk6CisgICAgICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURv
Y3VtZW50OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpyZXNpemVJ
bWFnZVRvRml0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OmltYWdlVXBkYXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OmltYWdlRml0c0luV2luZG93KToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmRyYXdJbWFnZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
SW1hZ2UyREltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhTdWJJbWFnZTJESW1wbCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmltYWdlU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZEltYWdlOjpkYXRhKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjYW5SZW5kZXIpOgorICAgICAgICAqIHBhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRv
SW1hZ2VEcmFnKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6CisgICAgICAgICogcGxhdGZvcm0v
Q3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZUhvdFNwb3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6d2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZVNpemUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6Om5vdFNvbGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRl
ZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYXRlZEltYWdlOjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Okdl
bmVyYXRlZEltYWdlOjpzZXRDb250YWluZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVy
YXRlZEltYWdlOjpzaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3VGls
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZTo6aXNTVkdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6aXNOdWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpzZXRDb250YWluZXJTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlOjpyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjp3aWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1h
Z2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhdyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29u
OjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWludENv
bnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRl
eHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NMYXllclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJR
dDo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZUJ1ZmZlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjbGlwKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0aWxsSW1hZ2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3RpbGxJbWFn
ZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVRdDo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnVpZEZvckltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmg6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpk
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpkcmF3
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OnBsYXRmb3JtUGF0dGVybik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjb250ZW50U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmdldEhCSVRNQVBPZlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRy
YXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQ2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Omdl
dEhCSVRNQVBPZlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXdGcmFt
ZU1hdGNoaW5nU291cmNlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
SW1hZ2VXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0SEJJVE1B
UE9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hp
bmdTb3VyY2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4
L0ltYWdlV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvRHJhZ0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJv
bUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFs
aXR5Q29udHJvbGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUZpbGxUaWxlU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllY2VJ
bWFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckltYWdlOjppbWFnZVNpemVGb3JFcnJvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bWFnZTo6cGFpbnRJbnRvUmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlUmVz
b3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VSZXNvdXJjZTo6bnVsbElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlUmVzb3VyY2U6OmltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlUmVzb3VyY2U6OnNldEltYWdlQ29udGFpbmVyU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZVJlc291cmNlOjppbWFnZVNpemUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJJbWFnZVJlc291cmNlOjpyZW5kZXJlcik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVByZWZl
cnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hl
ZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5l
clNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6YWRkQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OnJlbW92ZUNsaWVudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlSW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVQZW5k
aW5nSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGVuZGluZ0ltYWdlOjpzZXRJbWFn
ZUNvbnRhaW5lclNpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6OmxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6cGFpbnQpOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6c2V0Q29udGFpbmVy
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5o
OgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisKIDIwMTEtMTAtMDUgIElseWEgVGlraG9ub3Zza3kg
IDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGZv
ciB3aW5kb3dzIGJvdHMgYWZ0ZXIgcjk2Njc5LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJl
dmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTQzMCw3ICs0MzAsNyBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhm
aWxsUGF0aEVSCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzlG
bG9hdFJlY3RFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzlG
bG9hdFJlY3RFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQ5Y2xlYXJSZWN0RVJLTlNfOUZsb2F0UmVjdEUKLV9fWk43V2ViQ29yZTE1R3Jh
cGhpY3NDb250ZXh0OWRyYXdJbWFnZUVQTlNfNUltYWdlRU5TXzEwQ29sb3JTcGFjZUVSS05TXzhJ
bnRQb2ludEVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQ5ZHJhd0ltYWdlRVBLdlBOU181SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJLTlNfOEludFBv
aW50RU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDlzZXRTaGFkb3dFUktOU185RmxvYXRTaXplRWZSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VF
CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDl0cmFuc2xhdGVFZmYKIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0QzFFUDlDR0NvbnRleHQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEyLDcgKzE5MTIs
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liCiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgcmVuZGVyZWQgaW1hZ2Ugd2FzIHN0cmV0
Y2hlZCBmcm9tIG9uZS1kaW1lbnNpb25hbCBmaWxlIGltYWdlCiAgICAgICAgICAgICBpZiAoaW1h
Z2UtPmNhY2hlZEltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRTaXplIGltYWdlU2l6
ZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUoaW1hZ2UtPnZpZXcoKS0+em9vbUZh
Y3RvcigpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IGltYWdlLT5j
YWNoZWRJbWFnZSgpLT5pbWFnZVNpemUobV9yZW5kZXJlciwgaW1hZ2UtPnZpZXcoKS0+em9vbUZh
Y3RvcigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2VTaXplLmhlaWdodCgpIDw9IDEg
fHwgaW1hZ2VTaXplLndpZHRoKCkgPD0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDk2
Njk4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYWlu
dChHcmFwaGljc0NvCiAgICAgICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGJ1ZmZlcigp
OwogICAgICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAgIGlmIChtX3ByZXNlbnRl
ZEltYWdlKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX3ByZXNlbnRlZElt
YWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByLCBDb21wb3NpdGVTb3VyY2VPdmVyLCB1
c2VMb3dRdWFsaXR5U2NhbGUpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShy
ZW5kZXJlcigpLCBtX3ByZXNlbnRlZEltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBy
LCBDb21wb3NpdGVTb3VyY2VPdmVyLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ciwgQ29sb3JTcGFjZURldmljZVJHQiwgciwgQ29tcG9zaXRlU291cmNlT3ZlciwgdXNlTG93UXVh
bGl0eVNjYWxlKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw3ICsyNTcsNyBAQCBpbnQg
SFRNTEltYWdlRWxlbWVudDo6d2lkdGgoYm9vbCBpZ25vcmVQCiAKICAgICAgICAgLy8gaWYgdGhl
IGltYWdlIGlzIGF2YWlsYWJsZSwgdXNlIGl0cyB3aWR0aAogICAgICAgICBpZiAobV9pbWFnZUxv
YWRlci5pbWFnZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKS0+
aW1hZ2VTaXplKDEuMGYpLndpZHRoKCk7CisgICAgICAgICAgICByZXR1cm4gbV9pbWFnZUxvYWRl
ci5pbWFnZSgpLT5pbWFnZVNpemUocmVuZGVyZXIoKSwgMS4wZikud2lkdGgoKTsKICAgICB9CiAK
ICAgICBpZiAoaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKQpAQCAtMjgwLDcgKzI4MCw3IEBAIGlu
dCBIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQoYm9vbCBpZ25vcmUKIAogICAgICAgICAvLyBpZiB0
aGUgaW1hZ2UgaXMgYXZhaWxhYmxlLCB1c2UgaXRzIGhlaWdodAogICAgICAgICBpZiAobV9pbWFn
ZUxvYWRlci5pbWFnZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2Uo
KS0+aW1hZ2VTaXplKDEuMGYpLmhlaWdodCgpOworICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2VM
b2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyKCksIDEuMGYpLmhlaWdodCgpOwogICAg
IH0KIAogICAgIGlmIChpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpCkBAIC0yOTcsNyArMjk3LDcg
QEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6Om5hdHVyYWxXaWR0aCgpIGNvbgogICAgIGlmICghbV9p
bWFnZUxvYWRlci5pbWFnZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBtX2lt
YWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZSgxLjBmKS53aWR0aCgpOworICAgIHJldHVybiBt
X2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlcigpLCAxLjBmKS53aWR0aCgp
OwogfQogCiBpbnQgSFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbEhlaWdodCgpIGNvbnN0CkBAIC0z
MDUsNyArMzA1LDcgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6Om5hdHVyYWxIZWlnaHQoKSBjbwog
ICAgIGlmICghbV9pbWFnZUxvYWRlci5pbWFnZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZSgxLjBmKS5oZWlnaHQoKTsK
KyAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUocmVuZGVyZXIoKSwg
MS4wZikuaGVpZ2h0KCk7CiB9CiAKIGJvb2wgSFRNTEltYWdlRWxlbWVudDo6aXNVUkxBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VE
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIEltYWdl
RG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCiAKICAgICAgICAgLy8gUmVwb3J0IHRoZSBuYXR1cmFs
IGltYWdlIHNpemUgaW4gdGhlIHBhZ2UgdGl0bGUsIHJlZ2FyZGxlc3Mgb2Ygem9vbQogICAgICAg
ICAvLyBsZXZlbC4KLSAgICAgICAgTGF5b3V0U2l6ZSBzaXplID0gY2FjaGVkSW1hZ2UtPmltYWdl
U2l6ZSgxLjBmKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBzaXplID0gY2FjaGVkSW1hZ2UtPmltYWdl
U2l6ZShkb2N1bWVudCgpLT5pbWFnZUVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgMS4wZik7CiAgICAg
ICAgIGlmIChzaXplLndpZHRoKCkpIHsKICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIHRpdGxl
LCB3ZSB1c2UgdGhlIGRlY29kZWQgZmlsZW5hbWUgb2YgdGhlIHJlc291cmNlLCBmYWxsaW5nCiAg
ICAgICAgICAgICAvLyBiYWNrIG9uIHRoZSAoZGVjb2RlZCkgaG9zdG5hbWUgaWYgdGhlcmUgaXMg
bm8gcGF0aC4KQEAgLTIzMyw3ICsyMzMsNyBAQCBmbG9hdCBJbWFnZURvY3VtZW50OjpzY2FsZSgp
IGNvbnN0CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gMTsKIAotICAgIExheW91dFNp
emUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShw
YWdlWm9vbUZhY3Rvcih0aGlzKSk7CisgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdl
RWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKG1faW1hZ2VFbGVtZW50LT5yZW5kZXJl
cigpLCBwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CiAgICAgTGF5b3V0U2l6ZSB3aW5kb3dTaXplID0g
SW50U2l6ZSh2aWV3LT53aWR0aCgpLCB2aWV3LT5oZWlnaHQoKSk7CiAgICAgCiAgICAgZmxvYXQg
d2lkdGhTY2FsZSA9IChmbG9hdCl3aW5kb3dTaXplLndpZHRoKCkgLyBpbWFnZVNpemUud2lkdGgo
KTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OnJlc2l6ZUltYWdlVG9G
aXQoKQogICAgIGlmICghbV9pbWFnZUVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIExh
eW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdl
U2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CisgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBt
X2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKG1faW1hZ2VFbGVtZW50LT5y
ZW5kZXJlcigpLCBwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CiAKICAgICBmbG9hdCBzY2FsZSA9IHRo
aXMtPnNjYWxlKCk7CiAgICAgbV9pbWFnZUVsZW1lbnQtPnNldFdpZHRoKHN0YXRpY19jYXN0PGlu
dD4oaW1hZ2VTaXplLndpZHRoKCkgKiBzY2FsZSkpOwpAQCAtMjg3LDcgKzI4Nyw3IEBAIHZvaWQg
SW1hZ2VEb2N1bWVudDo6aW1hZ2VVcGRhdGVkKCkKICAgICBpZiAobV9pbWFnZVNpemVJc0tub3du
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdl
KCktPmltYWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSkuaXNFbXB0eSgpKQorICAgIGlmICht
X2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKG1faW1hZ2VFbGVtZW50LT5y
ZW5kZXJlcigpLCBwYWdlWm9vbUZhY3Rvcih0aGlzKSkuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgbV9pbWFnZVNpemVJc0tub3duID0gdHJ1ZTsKQEAgLTMwMyw4ICszMDMs
OSBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OnJlc3RvcmVJbWFnZVNpemUoKQogICAgIGlmICghbV9p
bWFnZUVsZW1lbnQgfHwgIW1faW1hZ2VTaXplSXNLbm93bikKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIG1faW1hZ2VFbGVtZW50LT5zZXRXaWR0aChtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1h
Z2UoKS0+aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKHRoaXMpKS53aWR0aCgpKTsKLSAgICBtX2lt
YWdlRWxlbWVudC0+c2V0SGVpZ2h0KG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFn
ZVNpemUocGFnZVpvb21GYWN0b3IodGhpcykpLmhlaWdodCgpKTsKKyAgICBJbnRTaXplIGltYWdl
U2l6ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUobV9pbWFnZUVs
ZW1lbnQtPnJlbmRlcmVyKCksIHBhZ2Vab29tRmFjdG9yKHRoaXMpKTsKKyAgICBtX2ltYWdlRWxl
bWVudC0+c2V0V2lkdGgoaW1hZ2VTaXplLndpZHRoKCkpOworICAgIG1faW1hZ2VFbGVtZW50LT5z
ZXRIZWlnaHQoaW1hZ2VTaXplLmhlaWdodCgpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVj
OwogICAgIGlmIChpbWFnZUZpdHNJbldpbmRvdygpKQpAQCAtMzI0LDcgKzMyNSw3IEBAIGJvb2wg
SW1hZ2VEb2N1bWVudDo6aW1hZ2VGaXRzSW5XaW5kb3coKSAKICAgICBpZiAoIXZpZXcpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlRWxl
bWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKHRoaXMpKTsKKyAg
ICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5p
bWFnZVNpemUobV9pbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCksIHBhZ2Vab29tRmFjdG9yKHRoaXMp
KTsKICAgICBMYXlvdXRTaXplIHdpbmRvd1NpemUgPSBMYXlvdXRTaXplKHZpZXctPndpZHRoKCks
IHZpZXctPmhlaWdodCgpKTsKICAgICAKICAgICByZXR1cm4gaW1hZ2VTaXplLndpZHRoKCkgPD0g
d2luZG93U2l6ZS53aWR0aCgpICYmIGltYWdlU2l6ZS5oZWlnaHQoKSA8PSB3aW5kb3dTaXplLmhl
aWdodCgpOyAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjIwLDcgKzEyMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6YXBwbHlTaGFkCiBzdGF0aWMgTGF5b3V0U2l6ZSBzaXplKEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlKQogewogICAgIGlmIChDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2Fj
aGVkSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlLT5pbWFnZVNpemUoMS4wZik7
IC8vIEZJWE1FOiBOb3Qgc3VyZSBhYm91dCB0aGlzLgorICAgICAgICByZXR1cm4gY2FjaGVkSW1h
Z2UtPmltYWdlU2l6ZShpbWFnZS0+cmVuZGVyZXIoKSwgMS4wZik7IC8vIEZJWE1FOiBOb3Qgc3Vy
ZSBhYm91dCB0aGlzLgogICAgIHJldHVybiBJbnRTaXplKCk7CiB9CiAKQEAgLTEzMjAsNyArMTMy
MCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKIAogICAgIGNo
ZWNrT3JpZ2luKGltYWdlKTsKIAotICAgIGMtPmRyYXdJbWFnZShjYWNoZWRJbWFnZS0+aW1hZ2Uo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgbm9ybWFsaXplZERzdFJlY3QsIG5vcm1hbGl6ZWRTcmNS
ZWN0LCBvcCk7CisgICAgYy0+ZHJhd0ltYWdlKGltYWdlLT5yZW5kZXJlcigpLCBjYWNoZWRJbWFn
ZS0+aW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgbm9ybWFsaXplZERzdFJlY3QsIG5vcm1h
bGl6ZWRTcmNSZWN0LCBvcCk7CiAgICAgZGlkRHJhdyhub3JtYWxpemVkRHN0UmVjdCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTA3LDcg
KzMxMDcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltCiAgICAg
fQogICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQogICAgICAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0
ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2UtPndpZHRo
KCksIGltYWdlLT5oZWlnaHQoKSwgMCwKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2UtPndpZHRoKDApLCBpbWFnZS0+aGVpZ2h0KDApLCAwLAog
ICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCksIGVjKTsKICAgICBp
ZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3Jl
aShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQp
OwpAQCAtMzMxNiw3ICszMzE2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1
YkltYWdlMgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0ZXhT
dWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lk
dGgoKSwgaW1hZ2UtPmhlaWdodCgpLAorICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgwKSwgaW1hZ2UtPmhlaWdodCgwKSwK
ICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpLCBlYyk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAko
cmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsMTAgKzE0NiwxMCBAQCBJbWFnZSogQ2FjaGVk
SW1hZ2U6OmltYWdlKCkgY29uc3QKICAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOwogfQog
Ci12b2lkIENhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYg
Y29udGFpbmVyU2l6ZSkKK3ZvaWQgQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShJ
bWFnZVVzZXIgdXNlciwgY29uc3QgSW50U2l6ZSYgY29udGFpbmVyU2l6ZSkKIHsKICAgICBpZiAo
bV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS0+c2V0Q29udGFpbmVyU2l6ZShjb250YWluZXJTaXpl
KTsKKyAgICAgICAgbV9pbWFnZS0+c2V0Q29udGFpbmVyU2l6ZSh1c2VyLCBjb250YWluZXJTaXpl
KTsKIH0KIAogYm9vbCBDYWNoZWRJbWFnZTo6dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0
CkBAIC0xNzYsMjAgKzE3NiwyMiBAQCBib29sIENhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZl
SGVpZ2h0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1JbnRTaXplIENhY2hlZEltYWdlOjppbWFn
ZVNpemUoZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK0ludFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdl
U2l6ZShJbWFnZVVzZXIgdXNlciwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QKIHsKICAgICBBU1NF
UlQoIWlzUHVyZ2VhYmxlKCkpOwogCiAgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4g
SW50U2l6ZSgpOworCisgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlLT5zaXplKHVzZXIp
OwogICAgIGlmIChtdWx0aXBsaWVyID09IDEuMGYpCi0gICAgICAgIHJldHVybiBtX2ltYWdlLT5z
aXplKCk7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gaW1hZ2VTaXplOworCiAgICAgLy8gRG9u
J3QgbGV0IGltYWdlcyB0aGF0IGhhdmUgYSB3aWR0aC9oZWlnaHQgPj0gMSBzaHJpbmsgYmVsb3cg
MSB3aGVuIHpvb21lZC4KLSAgICBib29sIGhhc1dpZHRoID0gbV9pbWFnZS0+c2l6ZSgpLndpZHRo
KCkgPiAwOwotICAgIGJvb2wgaGFzSGVpZ2h0ID0gbV9pbWFnZS0+c2l6ZSgpLmhlaWdodCgpID4g
MDsKLSAgICBpbnQgd2lkdGggPSBtX2ltYWdlLT5zaXplKCkud2lkdGgoKSAqIChtX2ltYWdlLT5o
YXNSZWxhdGl2ZVdpZHRoKCkgPyAxLjBmIDogbXVsdGlwbGllcik7Ci0gICAgaW50IGhlaWdodCA9
IG1faW1hZ2UtPnNpemUoKS5oZWlnaHQoKSAqIChtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgp
ID8gMS4wZiA6IG11bHRpcGxpZXIpOworICAgIGJvb2wgaGFzV2lkdGggPSBpbWFnZVNpemUud2lk
dGgoKSA+IDA7CisgICAgYm9vbCBoYXNIZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0KCkgPiAwOwor
ICAgIGludCB3aWR0aCA9IGltYWdlU2l6ZS53aWR0aCgpICogKG1faW1hZ2UtPmhhc1JlbGF0aXZl
V2lkdGgoKSA/IDEuMGYgOiBtdWx0aXBsaWVyKTsKKyAgICBpbnQgaGVpZ2h0ID0gaW1hZ2VTaXpl
LmhlaWdodCgpICogKG1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCkgPyAxLjBmIDogbXVsdGlw
bGllcik7CiAgICAgaWYgKGhhc1dpZHRoKQogICAgICAgICB3aWR0aCA9IG1heCgxLCB3aWR0aCk7
CiAgICAgaWYgKGhhc0hlaWdodCkKQEAgLTE5NywzMSArMTk5LDMzIEBAIEludFNpemUgQ2FjaGVk
SW1hZ2U6OmltYWdlU2l6ZShmbG9hdCBtdWwKICAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKIH0KIAotSW50UmVjdCBDYWNoZWRJbWFnZTo6aW1hZ2VSZWN0KGZsb2F0IG11bHRpcGxp
ZXIpIGNvbnN0CitJbnRSZWN0IENhY2hlZEltYWdlOjppbWFnZVJlY3QoSW1hZ2VVc2VyIHVzZXIs
IGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc1B1cmdlYWJsZSgpKTsK
IAogICAgIGlmICghbV9pbWFnZSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIElu
dFJlY3QgaW1hZ2VSZWN0ID0gbV9pbWFnZS0+cmVjdCh1c2VyKTsKICAgICBpZiAobXVsdGlwbGll
ciA9PSAxLjBmIHx8ICghbV9pbWFnZS0+aGFzUmVsYXRpdmVXaWR0aCgpICYmICFtX2ltYWdlLT5o
YXNSZWxhdGl2ZUhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2UtPnJlY3QoKTsKKyAg
ICAgICAgcmV0dXJuIGltYWdlUmVjdDsKIAogICAgIGZsb2F0IHdpZHRoTXVsdGlwbGllciA9ICht
X2ltYWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCkgPyAxLjBmIDogbXVsdGlwbGllcik7CiAgICAgZmxv
YXQgaGVpZ2h0TXVsdGlwbGllciA9IChtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpID8gMS4w
ZiA6IG11bHRpcGxpZXIpOwogCiAgICAgLy8gRG9uJ3QgbGV0IGltYWdlcyB0aGF0IGhhdmUgYSB3
aWR0aC9oZWlnaHQgPj0gMSBzaHJpbmsgYmVsb3cgMSB3aGVuIHpvb21lZC4KLSAgICBib29sIGhh
c1dpZHRoID0gbV9pbWFnZS0+cmVjdCgpLndpZHRoKCkgPiAwOwotICAgIGJvb2wgaGFzSGVpZ2h0
ID0gbV9pbWFnZS0+cmVjdCgpLmhlaWdodCgpID4gMDsKKyAgICBib29sIGhhc1dpZHRoID0gaW1h
Z2VSZWN0LndpZHRoKCkgPiAwOworICAgIGJvb2wgaGFzSGVpZ2h0ID0gaW1hZ2VSZWN0LmhlaWdo
dCgpID4gMDsKIAotICAgIGludCB3aWR0aCA9IHN0YXRpY19jYXN0PGludD4obV9pbWFnZS0+cmVj
dCgpLndpZHRoKCkgKiB3aWR0aE11bHRpcGxpZXIpOwotICAgIGludCBoZWlnaHQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KG1faW1hZ2UtPnJlY3QoKS5oZWlnaHQoKSAqIGhlaWdodE11bHRpcGxpZXIpOwor
ICAgIGludCB3aWR0aCA9IHN0YXRpY19jYXN0PGludD4oaW1hZ2VSZWN0LndpZHRoKCkgKiB3aWR0
aE11bHRpcGxpZXIpOworICAgIGludCBoZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KGltYWdlUmVj
dC5oZWlnaHQoKSAqIGhlaWdodE11bHRpcGxpZXIpOwogICAgIGlmIChoYXNXaWR0aCkKICAgICAg
ICAgd2lkdGggPSBtYXgoMSwgd2lkdGgpOwogICAgIGlmIChoYXNIZWlnaHQpCiAgICAgICAgIGhl
aWdodCA9IG1heCgxLCBoZWlnaHQpOwogCi0gICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KG1f
aW1hZ2UtPnJlY3QoKS54KCkgKiB3aWR0aE11bHRpcGxpZXIpOwotICAgIGludCB5ID0gc3RhdGlj
X2Nhc3Q8aW50PihtX2ltYWdlLT5yZWN0KCkueSgpICogaGVpZ2h0TXVsdGlwbGllcik7CisgICAg
aW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KGltYWdlUmVjdC54KCkgKiB3aWR0aE11bHRpcGxpZXIp
OworICAgIGludCB5ID0gc3RhdGljX2Nhc3Q8aW50PihpbWFnZVJlY3QueSgpICogaGVpZ2h0TXVs
dGlwbGllcik7CiAKICAgICByZXR1cm4gSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0K
QEAgLTI5Nyw3ICszMDEsNyBAQCB2b2lkIENhY2hlZEltYWdlOjpkYXRhKFBhc3NSZWZQdHI8U2hh
cmVkCiAgICAgLy8gdG8gZGVjb2RlLgogICAgIGlmIChzaXplQXZhaWxhYmxlIHx8IGFsbERhdGFS
ZWNlaXZlZCkgewogICAgICAgICBzaXplX3QgbWF4RGVjb2RlZEltYWdlU2l6ZSA9IG1heGltdW1E
ZWNvZGVkSW1hZ2VTaXplKCk7Ci0gICAgICAgIEludFNpemUgcyA9IGltYWdlU2l6ZSgxLjBmKTsK
KyAgICAgICAgSW50U2l6ZSBzID0gaW1hZ2VTaXplKDAsIDEuMGYpOwogICAgICAgICBzaXplX3Qg
ZXN0aW1hdGVkRGVjb2RlZEltYWdlU2l6ZSA9IHMud2lkdGgoKSAqIHMuaGVpZ2h0KCkgKiA0OyAv
LyBubyBvdmVyZmxvdyBjaGVjawogICAgICAgICBpZiAobV9pbWFnZS0+aXNOdWxsKCkgfHwgKG1h
eERlY29kZWRJbWFnZVNpemUgPiAwICYmIGVzdGltYXRlZERlY29kZWRJbWFnZVNpemUgPiBtYXhE
ZWNvZGVkSW1hZ2VTaXplKSkgewogICAgICAgICAgICAgZXJyb3IoZXJyb3JPY2N1cnJlZCgpID8g
c3RhdHVzKCkgOiBEZWNvZGVFcnJvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAog
I2RlZmluZSBDYWNoZWRJbWFnZV9oCiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKICNpbmNsdWRlICJUaW1lci5oIgpAQCAtNTAsMTggKzUxLDE4IEBAIHB1YmxpYzoK
ICAgICBzdGQ6OnBhaXI8SW1hZ2UqLCBmbG9hdD4gYnJva2VuSW1hZ2UoZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpIGNvbnN0OyAvLyBSZXR1cm5zIGFuIGltYWdlIGFuZCB0aGUgaW1hZ2UncyByZXNv
bHV0aW9uIHNjYWxlIGZhY3Rvci4KICAgICBib29sIHdpbGxQYWludEJyb2tlbkltYWdlKCkgY29u
c3Q7IAogCi0gICAgYm9vbCBjYW5SZW5kZXIoZmxvYXQgbXVsdGlwbGllcikgY29uc3QgeyByZXR1
cm4gIWVycm9yT2NjdXJyZWQoKSAmJiAhaW1hZ2VTaXplKG11bHRpcGxpZXIpLmlzRW1wdHkoKTsg
fQorICAgIGJvb2wgY2FuUmVuZGVyKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0IHsgcmV0dXJuICFl
cnJvck9jY3VycmVkKCkgJiYgIWltYWdlU2l6ZSgwLCBtdWx0aXBsaWVyKS5pc0VtcHR5KCk7IH0K
IAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZm9yIFNWR0ltYWdlIHJpZ2h0IG5vdwotICAg
IHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNl
dEltYWdlQ29udGFpbmVyU2l6ZShJbWFnZVVzZXIsIGNvbnN0IEludFNpemUmKTsKICAgICBib29s
IHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdDsKICAgICBib29sIGltYWdlSGFzUmVsYXRp
dmVXaWR0aCgpIGNvbnN0OwogICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0
OwogICAgIAogICAgIC8vIEJvdGggb2YgdGhlc2UgbWV0aG9kcyB0YWtlIGEgem9vbSBtdWx0aXBs
aWVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW5jcmVhc2UgdGhlIG5hdHVyYWwgc2l6ZSBvZiB0aGUg
aW1hZ2UgYnkgdGhlCiAgICAgLy8gem9vbS4KLSAgICBJbnRTaXplIGltYWdlU2l6ZShmbG9hdCBt
dWx0aXBsaWVyKSBjb25zdDsgIC8vIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNvbXBsZXRlIGlt
YWdlLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0OyAgLy8g
VGhlIHNpemUgb2YgdGhlIGN1cnJlbnRseSBkZWNvZGVkIHBvcnRpb24gb2YgdGhlIGltYWdlLgor
ICAgIEludFNpemUgaW1hZ2VTaXplKEltYWdlVXNlciwgZmxvYXQgbXVsdGlwbGllcikgY29uc3Q7
ICAvLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBpbWFnZS4KKyAgICBJbnRSZWN0
IGltYWdlUmVjdChJbWFnZVVzZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0OyAgLy8gVGhlIHNp
emUgb2YgdGhlIGN1cnJlbnRseSBkZWNvZGVkIHBvcnRpb24gb2YgdGhlIGltYWdlLgogCiAgICAg
dmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwogICAgIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDk2Njk4
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4Niw3ICs3ODYsOCBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpkb0ltYWdlRHJhZyhF
bGVtZW50CiAgICAgSW50UG9pbnQgb3JpZ2luOwogCiAgICAgSW1hZ2UqIGltYWdlID0gZ2V0SW1h
Z2UoZWxlbWVudCk7Ci0gICAgaWYgKGltYWdlICYmIGltYWdlLT5zaXplKCkuaGVpZ2h0KCkgKiBp
bWFnZS0+c2l6ZSgpLndpZHRoKCkgPD0gTWF4T3JpZ2luYWxJbWFnZUFyZWEKKyAgICBJbnRTaXpl
IGltYWdlU2l6ZSA9IGltYWdlLT5zaXplKGVsZW1lbnQtPnJlbmRlcmVyKCkpOworICAgIGlmIChp
bWFnZSAmJiBpbWFnZVNpemUuaGVpZ2h0KCkgKiBpbWFnZVNpemUud2lkdGgoKSA8PSBNYXhPcmln
aW5hbEltYWdlQXJlYQogICAgICAgICAmJiAoZHJhZ0ltYWdlID0gY3JlYXRlRHJhZ0ltYWdlRnJv
bUltYWdlKGltYWdlKSkpIHsKICAgICAgICAgSW50U2l6ZSBvcmlnaW5hbFNpemUgPSByZWN0LnNp
emUoKTsKICAgICAgICAgb3JpZ2luID0gcmVjdC5sb2NhdGlvbigpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMTAsNyArMTIxMCw3
IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc28KICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEludFBvaW50IGhvdFNwb3QgPSAoKmN1cnNvcnMp
W2ldLmhvdFNwb3QoKTsKICAgICAgICAgICAgIC8vIExpbWl0IHRoZSBzaXplIG9mIGN1cnNvcnMg
c28gdGhhdCB0aGV5IGNhbm5vdCBiZSB1c2VkIHRvIGNvdmVyIFVJIGVsZW1lbnRzIGluIGNocm9t
ZS4KLSAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGNpbWFnZS0+aW1hZ2UoKS0+c2l6ZSgpOwor
ICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gY2ltYWdlLT5pbWFnZSgpLT5zaXplKDApOwogICAg
ICAgICAgICAgaWYgKHNpemUud2lkdGgoKSA+IDEyOCB8fCBzaXplLmhlaWdodCgpID4gMTI4KQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFjaW1hZ2UtPmVycm9y
T2NjdXJyZWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmNwcAkocmV2aXNpb24g
OTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw3ICszNiw3IEBAIEludFBvaW50IGRldGVybWluZUhvdFNwb3QoSW1hZ2UqIGlt
YWdlLCAKICAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CiAKICAgICAvLyBIb3Qgc3BvdCBtdXN0
IGJlIGluc2lkZSBjdXJzb3IgcmVjdGFuZ2xlLgotICAgIEludFJlY3QgaW1hZ2VSZWN0ID0gaW1h
Z2UtPnJlY3QoKTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdCA9IGltYWdlLT5yZWN0KDApOwogICAg
IGlmIChpbWFnZVJlY3QuY29udGFpbnMoc3BlY2lmaWVkSG90U3BvdCkpCiAgICAgICAgIHJldHVy
biBzcGVjaWZpZWRIb3RTcG90OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc0LDggKzk3NCw5IEBAIHZvaWQgU2Nyb2xs
Vmlldzo6cGFpbnRTY3JvbGxiYXJzKEdyYXBoaWMKIAogdm9pZCBTY3JvbGxWaWV3OjpwYWludFBh
blNjcm9sbEljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogeworICAgIC8vIFBhc3Npbmcg
MCBhcyBJbWFnZVVzZXIgYXMgZmluZSBhcyB0aGUgcGFuSWNvbiBpcyBub3QgYSBTVkcgaW1hZ2Uu
CiAgICAgc3RhdGljIEltYWdlKiBwYW5TY3JvbGxJY29uID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKCJwYW5JY29uIikubGVha1JlZigpOwotICAgIGNvbnRleHQtPmRyYXdJbWFnZShwYW5T
Y3JvbGxJY29uLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBtX3BhblNjcm9sbEljb25Qb2ludCk7Cisg
ICAgY29udGV4dC0+ZHJhd0ltYWdlKDAsIHBhblNjcm9sbEljb24sIENvbG9yU3BhY2VEZXZpY2VS
R0IsIG1fcGFuU2Nyb2xsSWNvblBvaW50KTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpwYWludChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZp
c2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgQml0bWFwSW1h
Z2U6OmRpZERlY29kZVByb3BlcnRpZXMoKSAKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNv
ZGVkU2l6ZUNoYW5nZWQodGhpcywgZGVsdGFCeXRlcyk7CiB9CiAKLUludFNpemUgQml0bWFwSW1h
Z2U6OnNpemUoKSBjb25zdAorSW50U2l6ZSBCaXRtYXBJbWFnZTo6c2l6ZShJbWFnZVVzZXIpIGNv
bnN0CiB7CiAgICAgaWYgKG1fc2l6ZUF2YWlsYWJsZSAmJiAhbV9oYXZlU2l6ZSkgewogICAgICAg
ICBtX3NpemUgPSBtX3NvdXJjZS5zaXplKCk7CkBAIC0xODAsNyArMTgwLDcgQEAgSW50U2l6ZSBC
aXRtYXBJbWFnZTo6c2l6ZSgpIGNvbnN0CiBJbnRTaXplIEJpdG1hcEltYWdlOjpjdXJyZW50RnJh
bWVTaXplKCkgY29uc3QKIHsKICAgICBpZiAoIW1fY3VycmVudEZyYW1lIHx8IG1faGFzVW5pZm9y
bUZyYW1lU2l6ZSkKLSAgICAgICAgcmV0dXJuIHNpemUoKTsKKyAgICAgICAgcmV0dXJuIHNpemUo
MCk7CiAgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBtX3NvdXJjZS5mcmFtZVNpemVBdEluZGV4KG1f
Y3VycmVudEZyYW1lKTsKICAgICBkaWREZWNvZGVQcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIGZy
YW1lU2l6ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZShJbWFnZVVzZXIpIGNvbnN0OwogICAgIEludFNpemUg
Y3VycmVudEZyYW1lU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRIb3RTcG90KElu
dFBvaW50JikgY29uc3Q7CiAKQEAgLTE1MywxNCArMTUzLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIEdka1BpeGJ1ZiogZ2V0R2RrUGl4YnVmKCk7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgTmF0
aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBmcmFtZUF0
SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZShJbWFnZVVzZXIpIHsgcmV0dXJuIGZyYW1lQXRJbmRleChj
dXJyZW50RnJhbWUoKSk7IH0KICAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCk7
CiAgICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0FscGhhKCkgeyByZXR1cm4gZnJhbWVI
YXNBbHBoYUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVE
CiAgICAgdmlydHVhbCBib29sIG5vdFNvbGlkQ29sb3IoKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHNpemUoKS53aWR0aCgpICE9IDEgfHwgc2l6ZSgpLmhlaWdodCgpICE9IDEgfHwgZnJhbWVDb3Vu
dCgpID4gMTsKKyAgICAgICAgcmV0dXJuIHNpemUoMCkud2lkdGgoKSAhPSAxIHx8IHNpemUoMCku
aGVpZ2h0KCkgIT0gMSB8fCBmcmFtZUNvdW50KCkgPiAxOwogICAgIH0KICNlbmRpZgogCkBAIC0x
NzUsMTIgKzE3NSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgQml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZl
ciogPSAwKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1l
TWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdT
b3VyY2VTaXplKEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7
CisgICAgdmlydHVhbCB2b2lkIGRyYXcoSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAogI2lmIChPUyhXSU5DRSkg
JiYgIVBMQVRGT1JNKFFUKSkKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlVXNl
ciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0
ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjks
MTEgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOworI2lu
Y2x1ZGUgIkxlbmd0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR2VuZXJhdGVk
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3KEltYWdlVXNlciwg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3ApCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250
ZXh0KTsKICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3ApOwpA
QCAtNDYsNyArNDUsNyBAQCB2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
CiAgICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9zaXplKSwg
Km1fZ2VuZXJhdG9yLmdldCgpKTsKIH0KIAotdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKK3ZvaWQgR2VuZXJhdGVkSW1h
Z2U6OmRyYXdQYXR0ZXJuKEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8gQWxsb3cgdGhl
IGdlbmVyYXRvciB0byBwcm92aWRlIHZpc3VhbGx5LWVxdWl2YWxlbnQgdGlsaW5nIHBhcmFtZXRl
cnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwyMSArNDQsMjEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhh
c1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgLy8g
VGhlc2UgYXJlIG9ubHkgdXNlZCBmb3IgU1ZHR2VuZXJhdGVkSW1hZ2UgcmlnaHQgbm93Ci0gICAg
dmlydHVhbCB2b2lkIHNldENvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgeyBtX3Np
emUgPSBzaXplOyB9CisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBmb3IgU1ZHSW1hZ2Ugcmln
aHQgbm93CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRhaW5lclNpemUoSW1hZ2VVc2VyLCBjb25z
dCBJbnRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNl
c0NvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IGhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBi
b29sIGhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmly
dHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICB2aXJ0dWFs
IEludFNpemUgc2l6ZShJbWFnZVVzZXIpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAg
Ly8gQXNzdW1lIHRoYXQgZ2VuZXJhdGVkIGNvbnRlbnQgaGFzIG5vIGRlY29kZWQgZGF0YSB3ZSBu
ZWVkIHRvIHdvcnJ5IGFib3V0CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShi
b29sIC8qZGVzdHJveUFsbCovID0gdHJ1ZSkgeyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNv
ZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhJbWFnZVVzZXIsIEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKICAgICAKICAgICBHZW5lcmF0ZWRJbWFnZShQYXNzUmVm
UHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBzaXplKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYs
OCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8vIFRoZSBpbWFnZSBkYXRhIGlzIHRpZ2h0bHkgcGFj
a2VkLCBhbmQgd2UgdXBsb2FkIGl0IGFzIHN1Y2guCiAgICAgICAgIHVuc2lnbmVkIGludCB1bnBh
Y2tBbGlnbm1lbnQgPSAxOwotICAgICAgICBmbGlwVmVydGljYWxseShkYXRhLmRhdGEoKSwgaW1h
Z2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwKKyAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMg
bmV2ZXIgdXNlZCB0byBkcmF3IGFuIFNWR0ltYWdlLCBzbyBwYXNzaW5nIDAgYXMgSW1hZ2VVc2Vy
IGlzIGZpbmUuCisgICAgICAgIGZsaXBWZXJ0aWNhbGx5KGRhdGEuZGF0YSgpLCBpbWFnZS0+d2lk
dGgoMCksIGltYWdlLT5oZWlnaHQoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVu
dHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50LAogICAgICAgICAgICAgICAgICAgICAgICB1
bnBhY2tBbGlnbm1lbnQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gOTY2OTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MzcsMjcgKzQzNywyNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0hpZ2hsaWdodEZvclRlCiAgICAgZmlsbFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4
dChydW4sIHBvaW50LCBoLCBmcm9tLCB0byksIGJhY2tncm91bmRDb2xvciwgY29sb3JTcGFjZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIHAsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZVVzZXIgdXNlciwg
SW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQm
IHAsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewotICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVD
b2xvclNwYWNlLCBwLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wKTsKKyAgICBkcmF3SW1hZ2Uo
dXNlciwgaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgcCwgSW50UmVjdCgwLCAwLCAtMSwgLTEpLCBv
cCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgciwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZShJbWFnZVVzZXIgdXNlciwgSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxlKQogewotICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNw
YWNlLCByLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwor
ICAgIGRyYXdJbWFnZSh1c2VyLCBpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCByLCBJbnRSZWN0KDAs
IDAsIC0xLCAtMSksIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbnN0IEludFBvaW50JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3Np
dGVPcGVyYXRvciBvcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2VVc2Vy
IHVzZXIsIEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IElu
dFBvaW50JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBv
cCkKIHsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgSW50UmVjdChkZXN0
LCBzcmNSZWN0LnNpemUoKSksIHNyY1JlY3QsIG9wKTsKKyAgICBkcmF3SW1hZ2UodXNlciwgaW1h
Z2UsIHN0eWxlQ29sb3JTcGFjZSwgSW50UmVjdChkZXN0LCBzcmNSZWN0LnNpemUoKSksIHNyY1Jl
Y3QsIG9wKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1h
Z2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFs
aXR5U2NhbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlVXNlciB1c2Vy
LCBJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0
JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9v
bCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7Ci0gICAgZHJhd0ltYWdlKGltYWdlLCBzdHlsZUNvbG9y
U3BhY2UsIEZsb2F0UmVjdChkZXN0KSwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7
CisgICAgZHJhd0ltYWdlKHVzZXIsIGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVjdChk
ZXN0KSwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZShJbWFnZVVzZXIgdXNlciwgSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQogICAgICAgICByZXR1cm47CkBA
IC00NjgsMjYgKzQ2OCwyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdl
KiBpCiAgICAgZmxvYXQgdGggPSBkZXN0LmhlaWdodCgpOwogCiAgICAgaWYgKHRzdyA9PSAtMSkK
LSAgICAgICAgdHN3ID0gaW1hZ2UtPndpZHRoKCk7CisgICAgICAgIHRzdyA9IGltYWdlLT53aWR0
aCh1c2VyKTsKICAgICBpZiAodHNoID09IC0xKQotICAgICAgICB0c2ggPSBpbWFnZS0+aGVpZ2h0
KCk7CisgICAgICAgIHRzaCA9IGltYWdlLT5oZWlnaHQodXNlcik7CiAKICAgICBpZiAodHcgPT0g
LTEpCi0gICAgICAgIHR3ID0gaW1hZ2UtPndpZHRoKCk7CisgICAgICAgIHR3ID0gaW1hZ2UtPndp
ZHRoKHVzZXIpOwogICAgIGlmICh0aCA9PSAtMSkKLSAgICAgICAgdGggPSBpbWFnZS0+aGVpZ2h0
KCk7CisgICAgICAgIHRoID0gaW1hZ2UtPmhlaWdodCh1c2VyKTsKIAogICAgIGlmICh1c2VMb3dR
dWFsaXR5U2NhbGUpIHsKICAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgcHJldmlvdXNJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsKICAgICAgICAg
Ly8gRklYTUU6IFNob3VsZCBiZSBJbnRlcnBvbGF0aW9uTG93CiAgICAgICAgIHNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbk5vbmUpOwotICAgICAgICBpbWFnZS0+ZHJh
dyh0aGlzLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZs
b2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSksIHN0eWxlQ29sb3JT
cGFjZSwgb3ApOworICAgICAgICBpbWFnZS0+ZHJhdyh1c2VyLCB0aGlzLCBGbG9hdFJlY3QoZGVz
dC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24o
KSwgRmxvYXRTaXplKHRzdywgdHNoKSksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogICAgICAgICBz
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkp
OwogICAgIH0gZWxzZQotICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBGbG9hdFJlY3QoZGVzdC5s
b2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwg
RmxvYXRTaXplKHRzdywgdHNoKSksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICBpbWFn
ZS0+ZHJhdyh1c2VyLCB0aGlzLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUo
dHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSks
IHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgY29uc3QgSW50UG9pbnQmIHNyY1BvaW50LCBjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlVXNlciB1c2VyLCBJbWFn
ZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBJbnRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTQ5NSwxMyAr
NDk1LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWEKICAgICBp
ZiAodXNlTG93UXVhbGl0eVNjYWxlKSB7CiAgICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5IHBy
ZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCk7
CiAgICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbkxvdyk7
Ci0gICAgICAgIGltYWdlLT5kcmF3VGlsZWQodGhpcywgcmVjdCwgc3JjUG9pbnQsIHRpbGVTaXpl
LCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAgICAgaW1hZ2UtPmRyYXdUaWxlZCh1c2VyLCB0
aGlzLCByZWN0LCBzcmNQb2ludCwgdGlsZVNpemUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogICAg
ICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHByZXZpb3VzSW50ZXJwb2xhdGlvblF1
YWxpdHkpOwogICAgIH0gZWxzZQotICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIHJlY3Qs
IHNyY1BvaW50LCB0aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGltYWdl
LT5kcmF3VGlsZWQodXNlciwgdGhpcywgcmVjdCwgc3JjUG9pbnQsIHRpbGVTaXplLCBzdHlsZUNv
bG9yU3BhY2UsIG9wKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdl
KEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3Qm
IGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RpbGVkSW1hZ2UoSW1hZ2VVc2VyIHVzZXIsIEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
CiAgICAgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBo
UnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1
c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1h
Z2UpCkBAIC01MDksMTcgKzUwOSwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVk
SW1hZ2UoSW1hCiAKICAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxl
ID09IEltYWdlOjpTdHJldGNoVGlsZSkgewogICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCi0g
ICAgICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0LCBzcmNSZWN0LCBv
cCk7CisgICAgICAgIGRyYXdJbWFnZSh1c2VyLCBpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0
LCBzcmNSZWN0LCBvcCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAodXNlTG93
UXVhbGl0eVNjYWxlKSB7CiAgICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5IHByZXZpb3VzSW50
ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCk7CiAgICAgICAg
IHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbkxvdyk7Ci0gICAgICAg
IGltYWdlLT5kcmF3VGlsZWQodGhpcywgZGVzdCwgc3JjUmVjdCwgdGlsZVNjYWxlRmFjdG9yLCBo
UnVsZSwgdlJ1bGUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICBpbWFnZS0+ZHJhd1Rp
bGVkKHVzZXIsIHRoaXMsIGRlc3QsIHNyY1JlY3QsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZS
dWxlLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShwcmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICB9IGVsc2UKLSAgICAg
ICAgaW1hZ2UtPmRyYXdUaWxlZCh0aGlzLCBkZXN0LCBzcmNSZWN0LCB0aWxlU2NhbGVGYWN0b3Is
IGhSdWxlLCB2UnVsZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGltYWdlLT5kcmF3
VGlsZWQodXNlciwgdGhpcywgZGVzdCwgc3JjUmVjdCwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwg
dlJ1bGUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEludFBvaW50JiBwLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsMTUgKzMwMiwxNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGxpbmVXaWR0aCk7CiAKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmLCBDb21wb3NpdGVPcGVy
YXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwotICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFn
ZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiwgQ29tcG9zaXRl
T3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9
IGZhbHNlKTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKLSAgICAgICAg
dm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJh
dG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxz
ZSk7Ci0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLAorICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFn
ZVVzZXIsIEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50
JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAgdm9p
ZCBkcmF3SW1hZ2UoSW1hZ2VVc2VyLCBJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBjb25zdCBJbnRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVy
LCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBkcmF3SW1h
Z2UoSW1hZ2VVc2VyLCBJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVy
YXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFn
ZVVzZXIsIEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENv
bXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOworICAg
ICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZVVzZXIsIEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLAogICAgICAgICAgICAgICAgICAgICAgICBD
b21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0
eVNjYWxlID0gZmFsc2UpOwotICAgICAgICB2b2lkIGRyYXdUaWxlZEltYWdlKEltYWdlKiwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJ
bnRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLAorICAgICAgICB2b2lk
IGRyYXdUaWxlZEltYWdlKEltYWdlVXNlciwgSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwg
Y29uc3QgSW50U2l6ZSYgdGlsZVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0
ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUg
PSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsCisgICAgICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2VVc2VyLCBJbWFnZSos
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlID0gSW1hZ2U6
OlN0cmV0Y2hUaWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3Np
dGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAkocmV2aXNpb24gOTY2
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJMZW5ndGguaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtODgsNyArODksNyBAQCB2b2lkIElt
YWdlOjpmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDCiAgICAgY3R4dC0+c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0b3IpOwogfQogCi12b2lkIEltYWdlOjpkcmF3VGlsZWQo
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFBvaW50JiBzcmNQb2ludCwgY29uc3QgRmxvYXRTaXplJiBzY2FsZWRUaWxlU2l6ZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBJbWFn
ZTo6ZHJhd1RpbGVkKEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBjb25zdCBG
bG9hdFNpemUmIHNjYWxlZFRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3ApCiB7ICAgIAogICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3Io
KSkgewogICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIHNvbGlkQ29s
b3IoKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CkBAIC0xMDAsMTIgKzEwMSw3IEBAIHZvaWQgSW1h
Z2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGMKICAgICBBU1NFUlQoIWlzQml0bWFwSW1h
Z2UoKSB8fCBub3RTb2xpZENvbG9yKCkpOwogI2VuZGlmCiAKLSAgICBGbG9hdFNpemUgaW50cmlu
c2ljVGlsZVNpemUgPSBzaXplKCk7Ci0gICAgaWYgKGhhc1JlbGF0aXZlV2lkdGgoKSkKLSAgICAg
ICAgaW50cmluc2ljVGlsZVNpemUuc2V0V2lkdGgoc2NhbGVkVGlsZVNpemUud2lkdGgoKSk7Ci0g
ICAgaWYgKGhhc1JlbGF0aXZlSGVpZ2h0KCkpCi0gICAgICAgIGludHJpbnNpY1RpbGVTaXplLnNl
dEhlaWdodChzY2FsZWRUaWxlU2l6ZS5oZWlnaHQoKSk7Ci0KKyAgICBGbG9hdFNpemUgaW50cmlu
c2ljVGlsZVNpemUgPSBzaXplKHVzZXIpOwogICAgIEZsb2F0U2l6ZSBzY2FsZShzY2FsZWRUaWxl
U2l6ZS53aWR0aCgpIC8gaW50cmluc2ljVGlsZVNpemUud2lkdGgoKSwKICAgICAgICAgICAgICAg
ICAgICAgc2NhbGVkVGlsZVNpemUuaGVpZ2h0KCkgLyBpbnRyaW5zaWNUaWxlU2l6ZS5oZWlnaHQo
KSk7CiAKQEAgLTEyMSwxOSArMTE3LDE5IEBAIHZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGlj
c0NvbnRleHQqIGMKICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0WSgoZGVzdFJlY3QueSgpIC0g
b25lVGlsZVJlY3QueSgpKSAvIHNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgdmlzaWJsZVNyY1Jl
Y3Quc2V0V2lkdGgoZGVzdFJlY3Qud2lkdGgoKSAvIHNjYWxlLndpZHRoKCkpOwogICAgICAgICB2
aXNpYmxlU3JjUmVjdC5zZXRIZWlnaHQoZGVzdFJlY3QuaGVpZ2h0KCkgLyBzY2FsZS5oZWlnaHQo
KSk7Ci0gICAgICAgIGRyYXcoY3R4dCwgZGVzdFJlY3QsIHZpc2libGVTcmNSZWN0LCBzdHlsZUNv
bG9yU3BhY2UsIG9wKTsKKyAgICAgICAgZHJhdyh1c2VyLCBjdHh0LCBkZXN0UmVjdCwgdmlzaWJs
ZVNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0o
KS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAgIEZs
b2F0UmVjdCB0aWxlUmVjdChGbG9hdFBvaW50KCksIGludHJpbnNpY1RpbGVTaXplKTsgICAgCi0g
ICAgZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIG9uZVRpbGVS
ZWN0LmxvY2F0aW9uKCksIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICBkcmF3
UGF0dGVybih1c2VyLCBjdHh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgb25lVGlsZVJl
Y3QubG9jYXRpb24oKSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogICAgIAogICAg
IHN0YXJ0QW5pbWF0aW9uKCk7CiB9CiAKIC8vIEZJWE1FOiBNZXJnZSB3aXRoIHRoZSBvdGhlciBk
cmF3VGlsZWQgZXZlbnR1YWxseSwgc2luY2Ugd2UgbmVlZCBhIGNvbWJpbmF0aW9uIG9mIGJvdGgg
Zm9yIHNvbWUgdGhpbmdzLgotdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
Cit2b2lkIEltYWdlOjpkcmF3VGlsZWQoSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
CiAgICAgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIFRpbGVSdWxlIGhSdWxlLCBU
aWxlUnVsZSB2UnVsZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQogeyAgICAKICAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKQEAgLTE2
MSwxMCArMTU3LDkgQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogYwog
ICAgICAgICB2UGhhc2UgLT0gKGRzdFJlY3QuaGVpZ2h0KCkgLSBzY2FsZWRUaWxlSGVpZ2h0KSAv
IDI7IAogICAgIEZsb2F0UG9pbnQgcGF0dGVyblBoYXNlKGRzdFJlY3QueCgpIC0gaFBoYXNlLCBk
c3RSZWN0LnkoKSAtIHZQaGFzZSk7CiAgICAgCi0gICAgZHJhd1BhdHRlcm4oY3R4dCwgc3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGF0dGVyblBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBk
c3RSZWN0KTsKKyAgICBkcmF3UGF0dGVybih1c2VyLCBjdHh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwYXR0ZXJuUGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRzdFJlY3QpOwogCiAg
ICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIAotCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDEx
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShNQUMpCiAjaWZkZWYgX19P
QkpDX18KQEAgLTY2LDE2ICs2NiwyMSBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrUGl4YnVmIEdka1Bp
eGJ1ZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBj
bGFzcyBGbG9hdFBvaW50OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRmxvYXRTaXplOwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgU2hhcmVkQnVmZmVy
OwotY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogCiAvLyBUaGlzIGNsYXNzIGdldHMgbm90aWZpZWQg
d2hlbiBhbiBpbWFnZSBjcmVhdGVzIG9yIGRlc3Ryb3lzIGRlY29kZWQgZnJhbWVzIGFuZCB3aGVu
IGl0IGFkdmFuY2VzIGFuaW1hdGlvbiBmcmFtZXMuCiBjbGFzcyBJbWFnZU9ic2VydmVyOwogCisv
LyBUeXBpY2FsbHkgYSBSZW5kZXJPYmplY3QgcG9pbnRlciwgaWRlbnRpZnlpbmcgdGhlIHVzZXIg
b2YgdGhlIGltYWdlLiBUaGUgaW50cmluc2ljIHNpemUgb2YgYW4gU1ZHIGltYWdlIG1heSBkZXBl
bmQKKy8vIG9uIHRoZSBwbGFjZSB3aGVyZSBpdHMgZW1iZWRkZWQgLSB0aHVzIGEgU1ZHSW1hZ2Ug
bWF5IHJlcG9ydCBkaWZmZXJlbnQgc2l6ZXMgZGVwZW5kaW5nIG9uIHRoZSAidXNlciIuCit0eXBl
ZGVmIGNvbnN0IHZvaWQqIEltYWdlVXNlcjsKKwogY2xhc3MgSW1hZ2UgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbWFnZT4gewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmll
bmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwpAQCAtODcsNiArOTIsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIq
IG5hbWUpOwogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmKTsgCiAK
KyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgpIHsgcmV0dXJuIGZhbHNlOyB9
CiAKQEAgLTk1LDE4ICsxMDEsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNTaW5n
bGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBzdGF0aWMg
SW1hZ2UqIG51bGxJbWFnZSgpOwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gc2l6
ZSgpLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgw
KS5pc0VtcHR5KCk7IH0KIAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZm9yIFNWR0ltYWdl
IHJpZ2h0IG5vdwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJTaXplKGNvbnN0IEludFNp
emUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShJbWFnZVVzZXIsIGNv
bnN0IEludFNpemUmKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNlc0NvbnRhaW5lclNpemUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2ZVdpZHRo
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBJbnRTaXplIHNp
emUoKSBjb25zdCA9IDA7Ci0gICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVj
dChJbnRQb2ludCgpLCBzaXplKCkpOyB9Ci0gICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4g
c2l6ZSgpLndpZHRoKCk7IH0KLSAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgp
LmhlaWdodCgpOyB9CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoSW1hZ2VVc2VyKSBjb25zdCA9
IDA7CisgICAgSW50UmVjdCByZWN0KEltYWdlVXNlciB1c2VyKSBjb25zdCB7IHJldHVybiBJbnRS
ZWN0KEludFBvaW50KCksIHNpemUodXNlcikpOyB9CisgICAgaW50IHdpZHRoKEltYWdlVXNlciB1
c2VyKSBjb25zdCB7IHJldHVybiBzaXplKHVzZXIpLndpZHRoKCk7IH0KKyAgICBpbnQgaGVpZ2h0
KEltYWdlVXNlciB1c2VyKSBjb25zdCB7IHJldHVybiBzaXplKHVzZXIpLmhlaWdodCgpOyB9CiAg
ICAgdmlydHVhbCBib29sIGdldEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCiAgICAgYm9vbCBzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCk7CkBAIC0xMzAsNyArMTM2LDcgQEAgcHVibGljOgogCiAgICAg
ZW51bSBUaWxlUnVsZSB7IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUsIFNwYWNlVGlsZSwgUmVwZWF0
VGlsZSB9OwogCi0gICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKEltYWdlVXNlcikgeyByZXR1cm4gMDsgfQogICAgIAogI2lm
IFBMQVRGT1JNKE1BQykKICAgICAvLyBBY2Nlc3NvcnMgZm9yIG5hdGl2ZSBpbWFnZSBmb3JtYXRz
LgpAQCAtMTU1LDcgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFn
ZT4gbG9hZFBsYXRmb3JtVGhlbWVJY29uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzaXplKTsKICNl
bmRpZgogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAorICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZVVzZXIsIEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIAogI2lmICFBU1NFUlRfRElTQUJM
RUQKQEAgLTE2OSwxMSArMTc1LDExIEBAIHByb3RlY3RlZDoKIAogICAgIC8vIFRoZSBDb2xvclNw
YWNlIHBhcmFtZXRlciB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgdW50YWdnZWQgaW1hZ2VzLgogI2lm
IFBMQVRGT1JNKFdJTikKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VT
aXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50
U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKElt
YWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IpIHsgfQogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikgPSAwOwotICAg
IHZvaWQgZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgdm9p
ZCBkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9y
LCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoSW1hZ2VVc2Vy
LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yKSA9IDA7CisgICAgdm9pZCBkcmF3VGlsZWQoSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBj
b25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IpOworICAgIHZvaWQgZHJhd1RpbGVkKEltYWdlVXNlciwgR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBUaWxlUnVsZSBoUnVsZSwgVGls
ZVJ1bGUgdlJ1bGUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
cik7CiAKICAgICAvLyBTdXBwb3J0aW5nIHRpbGVkIGRyYXdpbmcKICAgICB2aXJ0dWFsIGJvb2wg
bWF5RmlsbFdpdGhTb2xpZENvbG9yKCkgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTIsNyArNjkyLDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9CYWNrZwogdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7CiAgICAgaWYgKGlt
YWdlKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgbmV3SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgQ0dJbWFnZVJlZiBuZXdJbWFnZSA9IGltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICAgICAgaWYgKCFuZXdJbWFnZSkKICAg
ICAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5j
cHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcg
KzUzLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbWFnZVN1cmZhY2UgPSBkZWNvZGVyLmNyZWF0
ZUZyYW1lQXRJbmRleCgwKTsKICAgICB9IGVsc2UgewotICAgICAgICBpbWFnZVN1cmZhY2UgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgaW1hZ2VTdXJmYWNl
ID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApOwogICAgICAgICBpZiAoIXBy
ZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBhbHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDcgKzkyLDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKGNhaXJvX3N1cmZhY2Vf
dAogICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
YywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewog
ICAgIEZsb2F0UmVjdCBzcmNSZWN0KHNyYyk7CiAgICAgRmxvYXRSZWN0IGRzdFJlY3QoZHN0KTsK
QEAgLTEyNywxNSArMTI3LDE1IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiAKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCi12b2lk
IEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
K3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGNhaXJvX3N1cmZhY2VfdCogaW1h
Z2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKICAgICBpZiAoIWltYWdl
KSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKTsKLSAgICBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNyLCBpbWFnZSwgc2l6ZSgp
LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHRvQ2Fpcm9PcGVyYXRvcihvcCks
IGRlc3RSZWN0KTsKKyAgICBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNyLCBpbWFnZSwgc2l6
ZSh1c2VyKSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCB0b0NhaXJvT3BlcmF0
b3Iob3ApLCBkZXN0UmVjdCk7CiAKICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQogICAgICAgICBp
bWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAJKHJldmlz
aW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0
dGVybkNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNhaXJvX3BhdHRlcm5fdCogUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0
ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0CiB7Ci0gICAgY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Cisg
ICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKDApOwogICAgIGlmICghc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIDA7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dDNEQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
SW1hZ2VEYXRhKEltYQogICAgICAgICBkZWNvZGVkSW1hZ2UuYWRvcHRDRihkZWNvZGVyLmNyZWF0
ZUZyYW1lQXRJbmRleCgwKSk7CiAgICAgICAgIGNnSW1hZ2UgPSBkZWNvZGVkSW1hZ2UuZ2V0KCk7
CiAgICAgfSBlbHNlCi0gICAgICAgIGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKKyAgICAgICAgY2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgwKTsKICAgICBpZiAoIWNnSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOCwx
NCArMjM4LDE0IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ28KICAg
ICBpZiAoIW1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewogICAgICAgICBpZiAo
Y29udGV4dCA9PSBtX2NvbnRleHQpIHsKICAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9
IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVm
ZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGNv
bnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2Us
IG9wLCBkZXN0UmVjdCk7CisgICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybigwLCBjb250ZXh0
LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwg
ZGVzdFJlY3QpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBp
bWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAg
ICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsK
KyAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybigwLCBjb250ZXh0LCBz
cmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVz
dFJlY3QpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgUmVmUHRyPEltYWdlPiBj
b3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBjb3B5LT5kcmF3UGF0
dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xv
clNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAgICBjb3B5LT5kcmF3UGF0dGVybigwLCBjb250
ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBv
cCwgZGVzdFJlY3QpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4Miw3ICsxODIsNyBAQCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0bWFwSW1hZ2U6Omdl
dENHCiAgICAgcmV0dXJuIFJldGFpblB0cjxDRkFycmF5UmVmPihBZG9wdENGLCBhcnJheSk7CiB9
CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQml0
bWFwSW1hZ2U6OmRyYXcoSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIHN0
YXJ0QW5pbWF0aW9uKCk7CiAKQEAgLTIwOSwxMCArMjA5LDExIEBAIHN0YXRpYyB2b2lkIGRyYXdQ
YXR0ZXJuQ2FsbGJhY2sodm9pZCogaW4KICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwg
R3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAs
IDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKSksIGlt
YWdlKTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihJbWFnZVVzZXIgdXNlciwgR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmICgh
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKKyAgICBDR0ltYWdlUmVmIHRpbGVJbWFnZSA9
IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHVzZXIpOworICAgIGlmICghdGlsZUltYWdlKQog
ICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQocGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGli
bGUoKSk7CkBAIC0yMzUsMTYgKzIzNiwxNSBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqCiAgICAgZmxvYXQgYWRqdXN0ZWRYID0gcGhhc2UueCgpIC0gZGVzdFJlY3Qu
eCgpICsgdGlsZVJlY3QueCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNm
b3JtLmEoKSk7IC8vIFdlIHRyYW5zbGF0ZWQgdGhlIGNvbnRleHQgc28gdGhhdCBkZXN0UmVjdC54
KCkgaXMgdGhlIG9yaWdpbiwgc28gc3VidHJhY3QgaXQgb3V0LgogICAgIGZsb2F0IGFkanVzdGVk
WSA9IGRlc3RSZWN0LmhlaWdodCgpIC0gKHBoYXNlLnkoKSAtIGRlc3RSZWN0LnkoKSArIHRpbGVS
ZWN0LnkoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5kKCkpICsg
c2NhbGVkVGlsZUhlaWdodCk7CiAKLSAgICBDR0ltYWdlUmVmIHRpbGVJbWFnZSA9IG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgZmxvYXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGls
ZUltYWdlKTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzdWJJbWFnZTsKLSAgICBpZiAo
dGlsZVJlY3Quc2l6ZSgpID09IHNpemUoKSkKKyAgICBpZiAodGlsZVJlY3Quc2l6ZSgpID09IHNp
emUodXNlcikpCiAgICAgICAgIHN1YkltYWdlID0gdGlsZUltYWdlOwogICAgIGVsc2UgewogICAg
ICAgICAvLyBDb3B5aW5nIGEgc3ViLWltYWdlIG91dCBvZiBhIHBhcnRpYWxseS1kZWNvZGVkIGlt
YWdlIHN0b3BzIHRoZSBkZWNvZGluZyBvZiB0aGUgb3JpZ2luYWwgaW1hZ2UuIEl0IHNob3VsZCBu
ZXZlciBoYXBwZW4KICAgICAgICAgLy8gYmVjYXVzZSBzdWItaW1hZ2VzIGFyZSBvbmx5IHVzZWQg
Zm9yIGJvcmRlci1pbWFnZSwgd2hpY2ggb25seSByZW5kZXJzIHdoZW4gdGhlIGltYWdlIGlzIGZ1
bGx5IGRlY29kZWQuCi0gICAgICAgIEFTU0VSVChoID09IGhlaWdodCgpKTsKKyAgICAgICAgQVNT
RVJUKGggPT0gaGVpZ2h0KHVzZXIpKTsKICAgICAgICAgc3ViSW1hZ2UuYWRvcHRDRihDR0ltYWdl
Q3JlYXRlV2l0aEltYWdlSW5SZWN0KHRpbGVJbWFnZSwgdGlsZVJlY3QpKTsKICAgICB9CiAKQEAg
LTI1OCw5ICsyNTgsOSBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQq
CiAgICAgZmxvYXQgc2NhbGVkVGlsZVdpZHRoID0gdGlsZVJlY3Qud2lkdGgoKSAqIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOwogICAgIGZsb2F0IHcgPSBDR0lt
YWdlR2V0V2lkdGgodGlsZUltYWdlKTsKICNpZmRlZiBCVUlMRElOR19PTl9MRU9QQVJECi0gICAg
aWYgKHcgPT0gc2l6ZSgpLndpZHRoKCkgJiYgaCA9PSBzaXplKCkuaGVpZ2h0KCkgJiYgc2NhbGVk
VGlsZVdpZHRoID09IHRpbGVSZWN0LndpZHRoKCkgJiYgc2NhbGVkVGlsZUhlaWdodCA9PSB0aWxl
UmVjdC5oZWlnaHQoKSkKKyAgICBpZiAodyA9PSBzaXplKHVzZXIpLndpZHRoKCkgJiYgaCA9PSBz
aXplKHVzZXIpLmhlaWdodCgpICYmIHNjYWxlZFRpbGVXaWR0aCA9PSB0aWxlUmVjdC53aWR0aCgp
ICYmIHNjYWxlZFRpbGVIZWlnaHQgPT0gdGlsZVJlY3QuaGVpZ2h0KCkpCiAjZWxzZQotICAgIGlm
ICh3ID09IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6ZSgpLmhlaWdodCgpKQorICAgIGlmICh3
ID09IHNpemUodXNlcikud2lkdGgoKSAmJiBoID09IHNpemUodXNlcikuaGVpZ2h0KCkpCiAjZW5k
aWYKICAgICAgICAgQ0dDb250ZXh0RHJhd1RpbGVkSW1hZ2UoY29udGV4dCwgRmxvYXRSZWN0KGFk
anVzdGVkWCwgYWRqdXN0ZWRZLCBzY2FsZWRUaWxlV2lkdGgsIHNjYWxlZFRpbGVIZWlnaHQpLCBz
dWJJbWFnZS5nZXQoKSk7CiAgICAgZWxzZSB7CkBAIC0yNzAsNyArMjcwLDcgQEAgdm9pZCBJbWFn
ZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KgogICAgIENHQWZmaW5lVHJhbnNmb3JtIG1h
dHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZShuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQocGF0
dGVyblRyYW5zZm9ybS5hKCkpLCAwLCAwLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQocGF0dGVy
blRyYW5zZm9ybS5kKCkpLCBhZGp1c3RlZFgsIGFkanVzdGVkWSk7CiAgICAgbWF0cml4ID0gQ0dB
ZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpOwog
ICAgIC8vIFRoZSB0b3Agb2YgYSBwYXJ0aWFsbHktZGVjb2RlZCBpbWFnZSBpcyBkcmF3biBhdCB0
aGUgYm90dG9tIG9mIHRoZSB0aWxlLiBNYXAgaXQgdG8gdGhlIHRvcC4KLSAgICBtYXRyaXggPSBD
R0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZShtYXRyaXgsIDAsIHNpemUoKS5oZWlnaHQoKSAtIGgp
OworICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRlKG1hdHJpeCwgMCwgc2l6
ZSh1c2VyKS5oZWlnaHQoKSAtIGgpOwogICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBhdHRl
cm4oQWRvcHRDRiwgQ0dQYXR0ZXJuQ3JlYXRlKHN1YkltYWdlLmdldCgpLCBDR1JlY3RNYWtlKDAs
IDAsIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeCwgdGlsZVJlY3Qud2lkdGgoKSwg
dGlsZVJlY3QuaGVpZ2h0KCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgdHJ1ZSwgJnBhdHRlcm5D
YWxsYmFja3MpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFN0cmluZyBQREZEb2N1bWVudEltYWdlOjpm
aWxlbmFtZUV4dGVuc2kKICAgICByZXR1cm4gInBkZiI7CiB9CiAKLUludFNpemUgUERGRG9jdW1l
bnRJbWFnZTo6c2l6ZSgpIGNvbnN0CitJbnRTaXplIFBERkRvY3VtZW50SW1hZ2U6OnNpemUoSW1h
Z2VVc2VyKSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0IHNpbmEgPSBzaW5mKC1tX3JvdGF0aW9u
KTsKICAgICBjb25zdCBmbG9hdCBjb3NhID0gY29zZigtbV9yb3RhdGlvbik7CkBAIC0xNTUsNyAr
MTU1LDcgQEAgaW50IFBERkRvY3VtZW50SW1hZ2U6OnBhZ2VDb3VudCgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fZG9jdW1lbnQgPyBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhtX2RvY3VtZW50
KSA6IDA7CiB9CiAKLXZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgUERGRG9jdW1lbnRJ
bWFnZTo6ZHJhdyhJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmICghbV9kb2N1bWVudCB8fCBtX2N1cnJlbnRQ
YWdlID09IC0xKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCShyZXZpc2lvbiA5
NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTAgKzU5LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIC8qZGVz
dHJveUFsbCovID0gdHJ1ZSkgeyB9CiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNp
emUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUo
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoSW1hZ2VVc2VyKSBjb25zdDsK
IAogICAgICAgICBQREZEb2N1bWVudEltYWdlKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBzZXRDdXJyZW50UGFnZShpbnQpOwogICAgICAgICBpbnQgcGFnZUNvdW50
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0
ZXJuQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdHRlcm5DRy5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyAr
NjUsNyBAQCBzdGF0aWMgdm9pZCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrKHZvaWQqCiAKIENHUGF0
dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3QKIHsKLSAgICBJbnRSZWN0IHRpbGVS
ZWN0ID0gdGlsZUltYWdlKCktPnJlY3QoKTsKKyAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdGlsZUlt
YWdlKCktPnJlY3QoMCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9
IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uICogbV9wYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbjsK
ICAgICBwYXR0ZXJuVHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybSgxLCAtMSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lj
b25DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNyArNTIsNyBAQCB2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4CiAK
ICAgICAvLyBBbiBJY29uIGRvZXNuJ3Qga25vdyB0aGUgY29sb3Igc3BhY2Ugb2YgdGhlIGZpbGUg
dXBsb2FkIGNvbnRyb2wuCiAgICAgLy8gU28gdXNlIENvbG9yU3BhY2VEZXZpY2VSR0IuCi0gICAg
Y29udGV4dC0+ZHJhd0ltYWdlKG1faWNvbi5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVj
dCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKDAsIG1faWNvbi5nZXQoKSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgcmVjdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsMTEgKzEzNCwxMSBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1
bTo6c2V0Q29udGVudHMoSW1hCiAgICAgLy8gc3R5bGUgY2hhbmdlIHRoYXQgYWZmZWN0cyB0aGUg
bGF5ZXIgZXZlbiBpZiB0aGF0IGNoYW5nZSBkb2Vzbid0CiAgICAgLy8gYWZmZWN0IHRoZSBhY3R1
YWwgY29udGVudHMgb2YgdGhlIGltYWdlIChlLmcuIGEgQ1NTIGFuaW1hdGlvbikuCiAgICAgLy8g
V2l0aCB0aGlzIGNoZWNrIGluIHBsYWNlIHdlIGF2b2lkIHVuZWNlc3NhcnkgdGV4dHVyZSB1cGxv
YWRzLgotICAgIGlmICgobV9jb250ZW50cyA9PSBjb250ZW50cykgJiYgKG1fY29udGVudHMtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgPT0gbV9pbWFnZUZvckN1cnJlbnRGcmFtZSkpCisg
ICAgaWYgKChtX2NvbnRlbnRzID09IGNvbnRlbnRzKSAmJiAobV9jb250ZW50cy0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoMCkgPT0gbV9pbWFnZUZvckN1cnJlbnRGcmFtZSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fY29udGVudHMgPSBjb250ZW50czsKLSAgICBtX2ltYWdlRm9yQ3Vy
cmVudEZyYW1lID0gbV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICBtX2ltYWdlRm9yQ3VycmVudEZyYW1lID0gbV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoMCk7CiAgICAgbV9kaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBi
b3VuZHMoKSk7CiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9CkBAIC0xNDYsNyArMTQ2LDcgQEAg
dm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYQogdm9pZCBJbWFnZUxheWVy
Q2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKIHsKICAgICBpZiAoIW1fZGlydHlSZWN0
LmlzRW1wdHkoKSkgewotICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT51cGRhdGVGcm9tSW1hZ2Uo
bV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CisgICAgICAgIG1fdGV4
dHVyZVVwZGF0ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgwKSk7CiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7
CiAgICAgICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7
CiAgICAgICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAkocmV2aXNpb24gOTY2OTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1Nyw3ICsxNDU3LDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KAogICAgIGlmICghZ3N0
SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHQtPmRyYXdJbWFnZShyZWludGVy
cHJldF9jYXN0PEltYWdlKj4oZ3N0SW1hZ2UtPmltYWdlKCkuZ2V0KCkpLCBDb2xvclNwYWNlU1JH
QiwKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UoMCwgcmVpbnRlcnByZXRfY2FzdDxJbWFnZSo+KGdz
dEltYWdlLT5pbWFnZSgpLmdldCgpKSwgQ29sb3JTcGFjZVNSR0IsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHJlY3QsIENvbXBvc2l0ZUNvcHksIGZhbHNlKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVN
YXBwZXJHTC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYx
Nyw3ICs2MTcsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlCiAg
ICAgICAgIHJlc2V0KGltYWdlLT5zaXplKCksIGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3VuZCkg
ewogICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoYmVnaW5QYWludChJbnRSZWN0
KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpKTsK
LSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBJbnRQb2ludCgwLCAwKSwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgICAgICBjb250ZXh0LmRy
YXdJbWFnZSgwLCBpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCksIENv
bXBvc2l0ZUNvcHkpOwogICAgICAgICAgICAgZW5kUGFpbnQoKTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5W
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnZnL0ltYWdlT3BlblZHLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OSw3ICs4OSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAg
ICAgVGlsZWRJbWFnZU9wZW5WRyogdGlsZWRJbWFnZSA9IDA7CiAKICAgICBpZiAobV9mcmFtZUNv
dW50ID09IDEgJiYgbV9zaXplLndpZHRoKCkgPT0gMSAmJiBtX3NpemUuaGVpZ2h0KCkgPT0gMSkK
LSAgICAgICAgdGlsZWRJbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
ICAgIHRpbGVkSW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKIAogICAgIGlm
ICh0aWxlZEltYWdlKSB7CiAgICAgICAgIG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKQEAgLTEyOSwx
MiArMTI5LDEyIEBAIHN0YXRpYyB2b2lkIGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGwKIH0K
ICNlbmRpZgogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEJpdG1hcEltYWdl
OjpkcmF3KEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmIChkc3QuaXNFbXB0eSgpIHx8
IHNyYy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5hdGl2ZUltYWdlUHRyIGlt
YWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBp
bWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHVzZXIpOwogICAgIGlmICghaW1hZ2Up
CiAgICAgICAgIHJldHVybjsKIApAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKIAogICAgIEZsb2F0UmVjdCBzcmNSZWN0TG9jYWwoc3Jj
KTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIGFkanVzdFNv
dXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoc3JjUmVjdExvY2FsLCBzaXplKCksIGltYWdlLT5zaXpl
KCkpOworICAgIGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoc3JjUmVjdExvY2FsLCBz
aXplKHVzZXIpLCBpbWFnZS0+c2l6ZSgpKTsKICNlbmRpZgogCiAgICAgY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmFjdGl2ZVBhaW50ZXIoKS0+ZHJhd0ltYWdlKGltYWdlLCBkc3QsIHNyY1Jl
Y3RMb2NhbCk7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFw
aGljc0NvbnRleHQqIAogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CiB9
CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBzcmMsCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihJbWFnZVVzZXIgdXNl
ciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bWF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZHN0KQpAQCAtMTczLDcgKzE3Myw3
IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICBpZiAoZHN0
LmlzRW1wdHkoKSB8fCBzcmMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBOYXRp
dmVJbWFnZVB0ciBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgTmF0
aXZlSW1hZ2VQdHIgaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKICAg
ICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY3LDcgKzE1
NjcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hCiAgICAgaWYg
KGltYWdlLT5kYXRhKCkpCiAgICAgICAgIG5hdGl2ZUltYWdlID0gUUltYWdlOjpmcm9tRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVjaGFyKj4oaW1hZ2UtPmRhdGEoKS0+ZGF0YSgpKSwgaW1h
Z2UtPmRhdGEoKS0+c2l6ZSgpKS5jb252ZXJ0VG9Gb3JtYXQoUUltYWdlOjpGb3JtYXRfQVJHQjMy
KTsKICAgICBlbHNlIHsKLSAgICAgICAgUVBpeG1hcCogbmF0aXZlUGl4bWFwID0gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFQaXhtYXAqIG5hdGl2ZVBpeG1h
cCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICAgICAgbmF0aXZl
SW1hZ2UgPSBuYXRpdmVQaXhtYXAtPnRvSW1hZ2UoKS5jb252ZXJ0VG9Gb3JtYXQoUUltYWdlOjpG
b3JtYXRfQVJHQjMyKTsKICAgICB9CiAgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFE
b05vdGhpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjY4LDcgKzY2OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG8KICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7
CiAKICAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikgewotICAgICAgICBRUGl4bWFwKiBpbWFn
ZSA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPnRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOworICAgICAgICBRUGl4bWFwKiBpbWFnZSA9IG1fc3RhdGUuZmlsbFBhdHRlcm4t
PnRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gaGFzU2hhZG93KCkgPyBzaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpIDogMDsKICAgICAgICAgaWYgKHNoYWRv
d0NvbnRleHQpIHsKICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAJKHJldmlzaW9u
IDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NM
YXllclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyNiw3ICsxMjI2LDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyUXQ6OnNldENvbnRlbnRzVG9JbWFnZQogICAgIG1faW1wbC0+bV9wZW5kaW5nQ29u
dGVudC5jb250ZW50VHlwZSA9IEdyYXBoaWNzTGF5ZXJRdEltcGw6OkhUTUxDb250ZW50VHlwZTsK
ICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwogICAgIGlmIChp
bWFnZSkgewotICAgICAgICBRUGl4bWFwKiBweG0gPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKKyAgICAgICAgUVBpeG1hcCogcHhtID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKDApOwogICAgICAgICBpZiAocHhtKSB7CiAgICAgICAgICAgICBtX2ltcGwt
Pm1fcGVuZGluZ0NvbnRlbnQucGl4bWFwID0gKnB4bTsKICAgICAgICAgICAgIG1faW1wbC0+bV9w
ZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IEdyYXBoaWNzTGF5ZXJRdEltcGw6OlBpeG1hcENv
bnRlbnRUeXBlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvCiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkgY29uc3QKIHsKLSAgICBRUGl4bWFwKiBuYXRp
dmVJbWFnZSA9IG1fZGF0YS5tX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgIFFQaXhtYXAqIG5hdGl2ZUltYWdlID0gbV9kYXRhLm1faW1hZ2UtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKDApOwogICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgIHJldHVybjsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VR
dC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMCArMTAxLDEwIEBAIFBh
c3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXMKICAgICByZXR1cm4gU3RpbGxJ
bWFnZTo6Y3JlYXRlKGxvYWRSZXNvdXJjZVBpeG1hcChuYW1lKSk7CiB9CiAKLXZvaWQgSW1hZ2U6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAordm9pZCBJbWFn
ZTo6ZHJhd1BhdHRlcm4oSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQogewotICAgIFFQaXhtYXAqIGZyYW1lUGl4bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICBRUGl4bWFwKiBmcmFtZVBpeG1hcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKHVzZXIpOwogICAgIGlmICghZnJhbWVQaXhtYXApIC8vIElmIGl0J3MgdG9vIGVhcmx5
IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAKQEAgLTIwMSw3
ICsyMDEsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhCiB9CiAK
IC8vIERyYXdpbmcgUm91dGluZXMKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXco
SW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgUVJlY3RG
IG5vcm1hbGl6ZWREc3QgPSBkc3Qubm9ybWFsaXplZCgpOwpAQCAtMjEyLDcgKzIxMiw3IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBpZiAobm9ybWFsaXpl
ZFNyYy5pc0VtcHR5KCkgfHwgbm9ybWFsaXplZERzdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFFQaXhtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
KyAgICBRUGl4bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHVzZXIpOwog
ICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCShyZXZpc2lvbiA5NjY5
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBR
QnJ1c2ggUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpIGNvbnN0CiB7Ci0gICAgUVBpeG1hcCogcGl4bWFwID0gdGlsZUltYWdlKCktPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgUVBpeG1hcCogcGl4bWFwID0gdGlsZUltYWdlKCkt
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApOwogICAgIGlmICghcGl4bWFwKQogICAgICAg
ICByZXR1cm4gUUJydXNoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MiwxNyArNTIsMTcgQEAgU3RpbGxJbWFnZTo6flN0aWxsSW1hZ2UoKQog
ICAgICAgICBkZWxldGUgbV9waXhtYXA7CiB9CiAKLUludFNpemUgU3RpbGxJbWFnZTo6c2l6ZSgp
IGNvbnN0CitJbnRTaXplIFN0aWxsSW1hZ2U6OnNpemUoSW1hZ2VVc2VyKSBjb25zdAogewogICAg
IHJldHVybiBJbnRTaXplKG1fcGl4bWFwLT53aWR0aCgpLCBtX3BpeG1hcC0+aGVpZ2h0KCkpOwog
fQogCi1OYXRpdmVJbWFnZVB0ciBTdGlsbEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCitOYXRpdmVJbWFnZVB0ciBTdGlsbEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZShJbWFnZVVzZXIpCiB7CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8TmF0aXZlSW1hZ2VQdHI+KG1f
cGl4bWFwKTsKIH0KIAotdm9pZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCit2b2lkIFN0aWxsSW1hZ2U6OmRyYXcoSW1hZ2VVc2Vy
LCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBvcCkKIHsKICAgICBpZiAobV9waXhtYXAtPmlzTnVsbCgpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgJKHJl
dmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3Rp
bGxJbWFnZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVz
dHJveUFsbCA9IHRydWUpIHsgUV9VTlVTRUQoZGVzdHJveUFsbCk7IH0KICAgICAgICAgdmlydHVh
bCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgICAgICB2
aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdl
UHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IpOworICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZShJbWFnZVVzZXIpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KEltYWdlVXNlcik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEltYWdlVXNlciwgR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBTdGlsbEltYWdlKGNvbnN0IFFQaXhtYXAmIHBpeG1hcCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVy
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1RleHR1cmVNYXBwZXJRdC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODYsNyArODYsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVRdDo6c2V0Q29udGVudHNUb0ltYWdl
CiB7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IFFQaXhtYXAq
IHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGNvbnN0
IFFQaXhtYXAqIHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsK
ICAgICBpZiAoIXBpeG1hcCkKICAgICAgICAgcmV0dXJuOwogICAgIEJpdG1hcFRleHR1cmU6OnJl
c2V0KHBpeG1hcC0+c2l6ZSgpLCAhcGl4bWFwLT5oYXNBbHBoYUNoYW5uZWwoKSk7CkBAIC0yNTgs
NyArMjU4LDcgQEAgUGFzc093blB0cjxCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gQgogCiB1
aW50NjRfdCB1aWRGb3JJbWFnZShJbWFnZSogaW1hZ2UpCiB7Ci0gICAgcmV0dXJuIGltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLT5zZXJpYWxOdW1iZXIoKTsKKyAgICByZXR1cm4g
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApLT5zZXJpYWxOdW1iZXIoKTsKIH0K
ICNlbmRpZgogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgJKHJl
dmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9C
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgpIHsg
cmV0dXJuICFtX25hdGl2ZUltYWdlLmJpdG1hcCgpLmlzT3BhcXVlKCk7IH0KIAotICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QKKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZShJbWFnZVVz
ZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gSW50U2l6ZShtX25hdGl2ZUltYWdlLmJp
dG1hcCgpLndpZHRoKCksIG1fbmF0aXZlSW1hZ2UuYml0bWFwKCkuaGVpZ2h0KCkpOwogICAgIH0K
QEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFdlIG9ubHkgaGF2ZSBh
IHNpbmdsZSBmcmFtZS4KLSAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCkKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKEltYWdlVXNlcikKICAgICB7CiAgICAgICAgIHJldHVybiAmbV9uYXRpdmVJ
bWFnZTsKICAgICB9CkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoSW1h
Z2VVc2VyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yKTsKIAogcHJpdmF0ZToKICAgICBOYXRpdmVJbWFnZVNraWEgbV9uYXRpdmVJbWFn
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0M0RTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAJKHJldmlzaW9uIDk2Njk4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQz
RFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWEKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gcGl4ZWxzOwotICAgIE5hdGl2
ZUltYWdlU2tpYSogc2tpYUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoMCk7CiAgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb05v
dGhpbmc7CiAgICAgYm9vbCBoYXNBbHBoYSA9IHNraWFJbWFnZSA/ICFza2lhSW1hZ2UtPmJpdG1h
cCgpLmlzT3BhcXVlKCkgOiB0cnVlOwogICAgIGlmICgoIXNraWFJbWFnZSB8fCBpZ25vcmVHYW1t
YUFuZENvbG9yUHJvZmlsZSB8fCAoaGFzQWxwaGEgJiYgIXByZW11bHRpcGx5QWxwaGEpKSAmJiBp
bWFnZS0+ZGF0YSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg4LDcgKzI4OCw3IEBAIGJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0
YWRhdGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEltYWdlVXNl
ciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIGZsb2F0U3JjUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLApAQCAtMzAwLDcgKzMwMCw3IEBAIHZv
aWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICBpZiAoZGVzdFJlY3Qu
aXNFbXB0eSgpIHx8IG5vcm1TcmNSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOyAvLyBu
b3RoaW5nIHRvIGRyYXcKIAotICAgIE5hdGl2ZUltYWdlU2tpYSogYml0bWFwID0gbmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBOYXRpdmVJbWFnZVNraWEqIGJpdG1hcCA9IG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKHVzZXIpOwogICAgIGlmICghYml0bWFwKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNv
bGlkQ29sb3IoKQogCiAgICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhKiBmcmFtZSA9IGZyYW1l
QXRJbmRleCgwKTsKIAotICAgIGlmIChmcmFtZSAmJiBzaXplKCkud2lkdGgoKSA9PSAxICYmIHNp
emUoKS5oZWlnaHQoKSA9PSAxKSB7CisgICAgaWYgKGZyYW1lICYmIHNpemUoMCkud2lkdGgoKSA9
PSAxICYmIHNpemUoMCkuaGVpZ2h0KCkgPT0gMSkgewogICAgICAgICBTa0F1dG9Mb2NrUGl4ZWxz
IGxvY2soZnJhbWUtPmJpdG1hcCgpKTsKICAgICAgICAgaWYgKCFmcmFtZS0+Yml0bWFwKCkuZ2V0
UGl4ZWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00MDEsNyArNDAxLDcgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKICAgICB9CiB9CiAKLXZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRl
eHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6
ZWQoKSkKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCogCiAgICAgLy8gY2F1c2luZyBmbGlja2VyIGFuZCB3YXN0aW5nIENQVS4KICAgICBz
dGFydEFuaW1hdGlvbigpOwogCi0gICAgTmF0aXZlSW1hZ2VTa2lhKiBibSA9IG5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CisgICAgTmF0aXZlSW1hZ2VTa2lhKiBibSA9IG5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKHVzZXIpOwogICAgIGlmICghYm0pCiAgICAgICAgIHJldHVybjsgIC8v
IEl0J3MgdG9vIGVhcmx5IGFuZCB3ZSBkb24ndCBoYXZlIGFuIGltYWdlIHlldC4KIApAQCAtNDM0
LDcgKzQzNCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKIAog
Ly8gRklYTUU6IFRoZXNlIHNob3VsZCBnbyBpbnRvIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lh
LmNwcAogCi12b2lkIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwKK3ZvaWQgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmRyYXcoSW1hZ2VV
c2VyLCBHcmFwaGljc0NvbnRleHQqIGN0eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0
dGVyblNraWEuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1
OSw3IEBAIFBsYXRmb3JtUGF0dGVyblB0ciBQYXR0ZXJuOjpwbGF0Zm9ybVBhdHQKICAgICAvLyBh
bmQgZXhwYW5kZWQgc2NhbGUgYW5kIHNrZXcgaW46CiAgICAgLy8gTGF5b3V0VGVzdHMvc3ZnL1cz
Qy1TVkctMS4xL3BzZXJ2ZXJzLWdyYWQtMDYtYi5zdmcKIAotICAgIGNvbnN0IE5hdGl2ZUltYWdl
U2tpYSogaW1hZ2UgPSBtX3RpbGVJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
KyAgICBjb25zdCBOYXRpdmVJbWFnZVNraWEqIGltYWdlID0gbV90aWxlSW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKDApOwogICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBiaXRtYXAs
IHJldHVybiBhIHRyYW5zcGFyZW50IHNoYWRlci4KICAgICBpZiAoIWltYWdlKQogICAgICAgICBt
X3BhdHRlcm4gPSBuZXcgU2tDb2xvclNoYWRlcihTa0NvbG9yU2V0QVJHQigwLCAwLCAwLCAwKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDcgKzI4MCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnJlbmRlckNvbnRlbnQoVGUKICAgICAgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRDb250ZW50
UmVjdChjb250ZW50UmVjdCk7CiAgICAgICAgICAgICBzY2FsZWRDb250ZW50UmVjdC5zY2FsZSgx
LjAgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSk7CiAgICAgICAgICAgICBpZiAobV9jdXJyZW50Q29u
dGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKQotICAgICAgICAgICAg
ICAgIGNvbnRleHQuZHJhd0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LmRyYXdJbWFnZSgwLCBtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGVuY2xvc2luZ0lu
dFJlY3Qoc2NhbGVkQ29udGVudFJlY3QpKTsKICAgICAgICAgICAgIHRleHR1cmUtPmVuZFBhaW50
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBAIHByaXZhdGU6CiAKICAgICBGbG9hdFNp
emUgY29udGVudFNpemUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudENv
bnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSAmJiBtX2N1cnJlbnRD
b250ZW50LmltYWdlID8gbV9jdXJyZW50Q29udGVudC5pbWFnZS0+c2l6ZSgpIDogbV9zaXplOwor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFn
ZUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPyBtX2N1cnJlbnRDb250ZW50
LmltYWdlLT5zaXplKDApIDogbV9zaXplOwogICAgIH0KICAgICBzdHJ1Y3QgVGlsZSB7CiAgICAg
ICAgIEZsb2F0UmVjdCByZWN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDExICs3NCwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZT
aXplKEhCSVRNCiAgIAogICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjZ0NvbnRleHQpOwogCi0gICAg
SW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOworICAgIEludFNpemUgaW1h
Z2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoMCk7CiAgICAgaWYgKHNpemUpCi0gICAgICAgIGRy
YXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZSgmZ2MsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJ
bmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBJbnRTaXplKCpzaXplKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGRyYXdGcmFtZU1hdGNoaW5nU291
cmNlU2l6ZSgwLCAmZ2MsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJbmZvLmJtV2lkdGgsIGJt
cEluZm8uYm1IZWlnaHQpLCBJbnRTaXplKCpzaXplKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29t
cG9zaXRlQ29weSk7CiAgICAgZWxzZQotICAgICAgICBkcmF3KCZnYywgRmxvYXRSZWN0KDAuMGYs
IDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEZsb2F0UmVjdCgwLjBm
LCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGRyYXcoMCwgJmdjLCBGbG9hdFJl
Y3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKIAogICAgIC8vIERvIGNsZWFudXAK
ICAgICBDR0NvbnRleHRSZWxlYXNlKGNnQ29udGV4dCk7CkBAIC04Niw3ICs4Niw3IEBAIGJvb2wg
Qml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE0KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNz
Q29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBz
cmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUo
SW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgc2l6ZV90IGZyYW1lcyA9
IGZyYW1lQ291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7
CkBAIC05NCwxNSArOTQsMTUgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdT
b3VyYwogICAgICAgICBpZiAoQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgPT0gc3RhdGljX2Nhc3Q8
c2l6ZV90PihzcmNTaXplLmhlaWdodCgpKSAmJiBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpID09IHN0
YXRpY19jYXN0PHNpemVfdD4oc3JjU2l6ZS53aWR0aCgpKSkgewogICAgICAgICAgICAgc2l6ZV90
IGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lOwogICAgICAgICAgICAgbV9jdXJyZW50RnJh
bWUgPSBpOwotICAgICAgICAgICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4wZiwg
MC4wZiwgc3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdodCgpKSwgc3R5bGVDb2xvclNwYWNl
LCBjb21wb3NpdGVPcCk7CisgICAgICAgICAgICBkcmF3KHVzZXIsIGN0eHQsIGRzdFJlY3QsIEZs
b2F0UmVjdCgwLjBmLCAwLjBmLCBzcmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCBz
dHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1l
ID0gY3VycmVudEZyYW1lOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgLy8gTm8gaW1hZ2Ugb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3YXMgZm91bmQsIGZhbGxiYWNr
IHRvIGRyYXdpbmcgdGhlIGN1cnJlbnQgZnJhbWUKLSAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJp
dG1hcEltYWdlOjpzaXplKCk7Ci0gICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4w
ZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29s
b3JTcGFjZSwgY29tcG9zaXRlT3ApOworICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1h
Z2U6OnNpemUodXNlcik7CisgICAgZHJhdyh1c2VyLCBjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3Qo
MC4wZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIHN0eWxl
Q29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNyBAQCBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBCaXRtYXBJbWFnZTo6Y3JlCiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBJbWFnZShpbWFnZSkpOwogfQogCi1ib29sIEJpdG1h
cEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1wLCBMUFNJWkUgc2l6ZSkKK2Jvb2wg
Qml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCBibXBuLCBMUFNJWkUgc2l6ZSkK
IHsKICAgICBBU1NFUlQoYm1wKTsKIApAQCAtODAsMTEgKzgwLDExIEBAIGJvb2wgQml0bWFwSW1h
Z2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE0KIAogICAgIEdyYXBoaWNzQ29udGV4dCBnYyh0YXJn
ZXRSZWYpOwogCi0gICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwor
ICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoMCk7CiAgICAgaWYgKHNp
emUpCi0gICAgICAgIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZSgmZ2MsIEZsb2F0UmVjdCgw
LjBmLCAwLjBmLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBJbnRTaXplKCpz
aXplKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGRyYXdG
cmFtZU1hdGNoaW5nU291cmNlU2l6ZSgwLCAmZ2MsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJ
bmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBJbnRTaXplKCpzaXplKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CiAgICAgZWxzZQotICAgICAgICBkcmF3KCZnYywg
RmxvYXRSZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCks
IEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdo
dCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGRyYXco
MCwgJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJt
SGVpZ2h0KSwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNp
emUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKIAogICAg
IC8vIERvIGNsZWFudXAKICAgICBjYWlyb19kZXN0cm95KHRhcmdldFJlZik7CkBAIC05Miw3ICs5
Miw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VT
aXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGlu
Z1NvdXJjZVNpemUoSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgc2l6
ZV90IGZyYW1lcyA9IGZyYW1lQ291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZy
YW1lczsgKytpKSB7CkBAIC0xMDAsMTUgKzEwMCwxNSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3
RnJhbWVNYXRjaGluZ1NvdXJjCiAgICAgICAgIGlmIChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQoaW1hZ2UpID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3JjU2l6ZS5oZWlnaHQoKSkgJiYg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2UpID09IHN0YXRpY19jYXN0PHNpemVf
dD4oc3JjU2l6ZS53aWR0aCgpKSkgewogICAgICAgICAgICAgc2l6ZV90IGN1cnJlbnRGcmFtZSA9
IG1fY3VycmVudEZyYW1lOwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBpOwotICAgICAg
ICAgICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgc3JjU2l6ZS53
aWR0aCgpLCBzcmNTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgY29tcG9zaXRl
T3ApOworICAgICAgICAgICAgZHJhdyh1c2VyLCBjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4w
ZiwgMC4wZiwgc3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgY29tcG9zaXRlT3ApOwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBjdXJy
ZW50RnJhbWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICAv
LyBObyBpbWFnZSBvZiB0aGUgY29ycmVjdCBzaXplIHdhcyBmb3VuZCwgZmFsbGJhY2sgdG8gZHJh
d2luZyB0aGUgY3VycmVudCBmcmFtZQotICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1h
Z2U6OnNpemUoKTsKLSAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBm
LCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgY29tcG9zaXRlT3ApOworICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6
OnNpemUodXNlcik7CisgICAgZHJhdyh1c2VyLCBjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4w
ZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGNvbXBvc2l0ZU9wKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
SW1hZ2VXaW5DRS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEx
ICs3NiwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNCiAgICAg
ewogICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoaGRjLmdldCgpKTsKIAotICAgICAgICBJbnRT
aXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7CisgICAgICAgIEludFNpemUgaW1h
Z2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoMCk7CiAgICAgICAgIGlmIChzaXplKQotICAgICAg
ICAgICAgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKCZnYywgRmxvYXRSZWN0KDAsIDAsIGJt
cEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEludFNpemUoKnNpemUpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgICAgIGRyYXdGcmFtZU1hdGNo
aW5nU291cmNlU2l6ZSgwLCAmZ2MsIEZsb2F0UmVjdCgwLCAwLCBibXBJbmZvLmJtV2lkdGgsIGJt
cEluZm8uYm1IZWlnaHQpLCBJbnRTaXplKCpzaXplKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29t
cG9zaXRlQ29weSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRyYXcoJmdjLCBGbG9hdFJl
Y3QoMCwgMCwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgRmxvYXRSZWN0KDAs
IDAsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgICAgIGRyYXcoMCwgJmdjLCBGbG9hdFJl
Y3QoMCwgMCwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgRmxvYXRSZWN0KDAs
IDAsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKICAgICB9CiAKICAgICBTZWxlY3RPYmplY3QoaGRjLmdl
dCgpLCBoT2xkQm1wKTsKQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJ
VE1BUE9mU2l6ZShIQklUTQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEJpdG1hcEltYWdl
OjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQml0
bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShJbWFnZVVzZXIgdXNlciwgR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNp
emUmIHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCkKIHsKICAgICBpbnQgZnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKQEAgLTk4LDE3ICs5OCwxNyBAQCB2b2lk
IEJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjCiAKICAgICAgICAgc2l6ZV90IGN1
cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lOwogICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGk7
Ci0gICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAsIDAsIHNyY1NpemUud2lk
dGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOwor
ICAgICAgICBkcmF3KHVzZXIsIGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLCAwLCBzcmNTaXpl
LndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9w
KTsKICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBjdXJyZW50RnJhbWU7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBObyBpbWFnZSBvZiB0aGUgY29ycmVjdCBzaXplIHdhcyBmb3Vu
ZCwgZmFsbGJhY2sgdG8gZHJhd2luZyB0aGUgY3VycmVudCBmcmFtZQotICAgIEludFNpemUgaW1h
Z2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKLSAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZs
b2F0UmVjdCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgc3R5
bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRt
YXBJbWFnZTo6c2l6ZSh1c2VyKTsKKyAgICBkcmF3KHVzZXIsIGN0eHQsIGRzdFJlY3QsIEZsb2F0
UmVjdCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgc3R5bGVD
b2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdEluLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEltYWdlVXNlciwgR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdEluLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgaWYgKCFtX3NvdXJjZS5pbml0aWFsaXplZCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xMzMsMTYgKzEzMywxNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIAotdm9pZCBJ
bWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCit2b2lk
IEltYWdlOjpkcmF3UGF0dGVybihJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lk
IEJpdG1hcEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLAordm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oSW1hZ2VVc2VyIHVzZXIsIEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIFJlZlB0
cjxTaGFyZWRCaXRtYXA+IGJtcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
UmVmUHRyPFNoYXJlZEJpdG1hcD4gYm1wID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUodXNl
cik7CiAgICAgaWYgKCFibXApCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAJKHJldmlzaW9uIDk2Njk4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW5pdFBsYXRm
b3JtRGF0YSgpCiAKIC8vIERyYXdpbmcgUm91dGluZXMKIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKCFt
X3NvdXJjZS5pbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNzcsMTQgKzE3Nywx
NCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIG9i
c2VydmVyLT5kaWREcmF3KHRoaXMpOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKK3Zv
aWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKIHsKICNpZiBVU0UoV1hHQykK
ICAgICB3eEdDREMqIGNvbnRleHQgPSAod3hHQ0RDKiljdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICB3eEdyYXBoaWNzQml0bWFwKiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOworICAgIHd4R3JhcGhpY3NCaXRtYXAqIGJpdG1hcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKHVzZXIpOwogI2Vsc2UKICAgICB3eFdpbmRvd0RDKiBjb250ZXh0ID0gY3R4dC0+cGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgd3hCaXRtYXAqIGJpdG1hcCA9IG5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CisgICAgd3hCaXRtYXAqIGJpdG1hcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKHVzZXIpOwogI2VuZGlmCiAKICAgICBpZiAoIWJpdG1hcCkgLy8gSWYgaXQncyB0b28g
ZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0JKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
ODcsNyArODcsNyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gZGlzc29sdmVEcmFnSW1hZ2VUb0ZyCiBS
ZXRhaW5QdHI8TlNJbWFnZT4gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSkK
IHsKICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gZHJhZ0ltYWdlKEFkb3B0TlMsIFtpbWFnZS0+Z2V0
TlNJbWFnZSgpIGNvcHldKTsKLSAgICBbZHJhZ0ltYWdlLmdldCgpIHNldFNpemU6KE5TU2l6ZSko
aW1hZ2UtPnNpemUoKSldOworICAgIFtkcmFnSW1hZ2UuZ2V0KCkgc2V0U2l6ZTooTlNTaXplKShp
bWFnZS0+c2l6ZSgwKSldOwogICAgIHJldHVybiBkcmFnSW1hZ2U7CiB9CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCShyZXZpc2lv
biA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDE2ICsyMjUsMTYgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3
cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIEhEQyBkYyA9IEdldERDKDApOwogICAgIEhEQyBj
b21wYXRpYmxlREMgPSBDcmVhdGVDb21wYXRpYmxlREMoMCk7CiAgICAgSERDIHNvdXJjZURDID0g
Q3JlYXRlQ29tcGF0aWJsZURDKDApOwotICAgIE93blB0cjxIQklUTUFQPiByZXN1bHRCaXRtYXAg
PSBhZG9wdFB0cihDcmVhdGVDb21wYXRpYmxlQml0bWFwKGRjLCBpbWFnZS0+d2lkdGgoKSwgaW1h
Z2UtPmhlaWdodCgpKSk7CisgICAgT3duUHRyPEhCSVRNQVA+IHJlc3VsdEJpdG1hcCA9IGFkb3B0
UHRyKENyZWF0ZUNvbXBhdGlibGVCaXRtYXAoZGMsIGltYWdlLT53aWR0aChyZW5kZXJlciksIGlt
YWdlLT5oZWlnaHQocmVuZGVyZXIpKSk7CiAgICAgSEdESU9CSiBvbGRCaXRtYXAgPSBTZWxlY3RP
YmplY3QoY29tcGF0aWJsZURDLCByZXN1bHRCaXRtYXAuZ2V0KCkpOwogCi0gICAgQml0bWFwSW5m
byBibUluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoaW1hZ2UtPnNpemUoKSk7CisgICAgQml0bWFw
SW5mbyBibUluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoaW1hZ2UtPnNpemUocmVuZGVyZXIpKTsK
IAogICAgIEhCSVRNQVAgY29yZUJpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24oZGMsICZibUluZm8s
IERJQl9SR0JfQ09MT1JTLCAwLCAwLCAwKTsKICAgICBIR0RJT0JKIG9sZFNvdXJjZSA9IFNlbGVj
dE9iamVjdChzb3VyY2VEQywgY29yZUJpdG1hcCk7CiAgICAgaW1hZ2UtPmdldEhCSVRNQVAoY29y
ZUJpdG1hcCk7CiAKLSAgICBCaXRCbHQoY29tcGF0aWJsZURDLCAwLCAwLCBpbWFnZS0+d2lkdGgo
KSwgaW1hZ2UtPmhlaWdodCgpLCBzb3VyY2VEQywgMCwgMCwgU1JDQ09QWSk7CisgICAgQml0Qmx0
KGNvbXBhdGlibGVEQywgMCwgMCwgaW1hZ2UtPndpZHRoKHJlbmRlcmVyKSwgaW1hZ2UtPmhlaWdo
dChyZW5kZXJlciksIHNvdXJjZURDLCAwLCAwLCBTUkNDT1BZKTsKIAogICAgIFNlbGVjdE9iamVj
dChzb3VyY2VEQywgb2xkU291cmNlKTsKICAgICBEZWxldGVPYmplY3QoY29yZUJpdG1hcCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGJv
b2wgSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6c2hvdWxkUGFpbnQKICAgICAKICAgICAvLyBNYWtl
IHN1cmUgdG8gdXNlIHRoZSB1bnpvb21lZCBpbWFnZSBzaXplLCBzaW5jZSBpZiBhIGZ1bGwgcGFn
ZSB6b29tIGlzIGluIGVmZmVjdCwgdGhlIGltYWdlCiAgICAgLy8gaXMgYWN0dWFsbHkgYmVpbmcg
c2NhbGVkLgotICAgIEludFNpemUgaW1hZ2VTaXplKGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVp
Z2h0KCkpOworICAgIEludFNpemUgaW1hZ2VTaXplKGltYWdlLT53aWR0aChvYmplY3QpLCBpbWFn
ZS0+aGVpZ2h0KG9iamVjdCkpOwogCiAgICAgLy8gTG9vayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhh
c2h0YWJsZXMuCiAgICAgT2JqZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpID0gbV9vYmplY3RM
YXllclNpemVNYXAuZmluZChvYmplY3QpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIGJvb2wgSW1hZ2VR
dWFsaXR5Q29udHJvbGxlcjo6c2hvdWxkUGFpbnQKIAogICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQg
dG8gaGFzaCBzY2FsZWQgaW1hZ2VzIHRoYXQgYWx3YXlzIHVzZSBsb3cgcXVhbGl0eSBtb2RlIHdo
ZW4gdGhlIHBhZ2UgZGVtYW5kcyBpdC4gVGhpcyBpcyB0aGUgaUNoYXQgY2FzZS4KICAgICBpZiAo
b2JqZWN0LT5kb2N1bWVudCgpLT5wYWdlKCktPmluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlv
bk1vZGUoKSkgewotICAgICAgICBkb3VibGUgdG90YWxQaXhlbHMgPSBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGltYWdlLT53aWR0aCgpKSAqIHN0YXRpY19jYXN0PGRvdWJsZT4oaW1hZ2UtPmhlaWdodCgp
KTsKKyAgICAgICAgZG91YmxlIHRvdGFsUGl4ZWxzID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihpbWFn
ZS0+d2lkdGgob2JqZWN0KSkgKiBzdGF0aWNfY2FzdDxkb3VibGU+KGltYWdlLT5oZWlnaHQob2Jq
ZWN0KSk7CiAgICAgICAgIGlmICh0b3RhbFBpeGVscyA+IGNJbnRlcnBvbGF0aW9uQ3V0b2ZmKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKICAgICAgICAgICAgIFJlbmRlck9i
amVjdCogY2xpZW50Rm9yQmFja2dyb3VuZEltYWdlID0gYmFja2dyb3VuZE9iamVjdCA/IGJhY2tn
cm91bmRPYmplY3QgOiB0aGlzOwogICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJn
SW1hZ2UtPmltYWdlKGNsaWVudEZvckJhY2tncm91bmRJbWFnZSwgZ2VvbWV0cnkudGlsZVNpemUo
KSk7CiAgICAgICAgICAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gc2hvdWxkUGFpbnRB
dExvd1F1YWxpdHkoY29udGV4dCwgaW1hZ2UuZ2V0KCksIGJnTGF5ZXIsIGdlb21ldHJ5LnRpbGVT
aXplKCkpOwotICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCks
IHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgZ2VvbWV0cnkuZGVzdFJlY3QoKSwgZ2VvbWV0cnkucmVs
YXRpdmVQaGFzZSgpLCBnZW9tZXRyeS50aWxlU2l6ZSgpLCAKKyAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdUaWxlZEltYWdlKHRoaXMsIGltYWdlLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCks
IGdlb21ldHJ5LmRlc3RSZWN0KCksIGdlb21ldHJ5LnJlbGF0aXZlUGhhc2UoKSwgZ2VvbWV0cnku
dGlsZVNpemUoKSwgCiAgICAgICAgICAgICAgICAgY29tcG9zaXRlT3AsIHVzZUxvd1F1YWxpdHlT
Y2FsaW5nKTsKICAgICAgICAgfQogICAgIH0KQEAgLTgwMyw3ICs4MDMsNyBAQCB2b2lkIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiBMYXlvdXRTaXplIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpjYWxjdWxhdGVGaWxsVGlsZVNpemUoY29uc3QgRmlsbExheWVyKiBmaWxsTGF5ZXIs
IExheW91dFNpemUgcG9zaXRpb25pbmdBcmVhU2l6ZSkgY29uc3QKIHsKICAgICBTdHlsZUltYWdl
KiBpbWFnZSA9IGZpbGxMYXllci0+aW1hZ2UoKTsKLSAgICBpbWFnZS0+c2V0SW1hZ2VDb250YWlu
ZXJTaXplKHBvc2l0aW9uaW5nQXJlYVNpemUpOyAvLyBVc2UgdGhlIGJveCBlc3RhYmxpc2hlZCBi
eSBiYWNrZ3JvdW5kLW9yaWdpbi4KKyAgICBpbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHRo
aXMsIHBvc2l0aW9uaW5nQXJlYVNpemUpOyAvLyBVc2UgdGhlIGJveCBlc3RhYmxpc2hlZCBieSBi
YWNrZ3JvdW5kLW9yaWdpbi4KIAogICAgIEVGaWxsU2l6ZVR5cGUgdHlwZSA9IGZpbGxMYXllci0+
c2l6ZSgpLnR5cGU7CiAKQEAgLTEwMDUsNyArMTAwNSw3IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50TmluZVBpZWMKICAgICBMYXlvdXRVbml0IHJpZ2h0V2l0aE91dHNldCA9IHJl
Y3QubWF4WCgpICsgcmlnaHRPdXRzZXQ7CiAgICAgTGF5b3V0UmVjdCBib3JkZXJJbWFnZVJlY3Qg
PSBMYXlvdXRSZWN0KGxlZnRXaXRoT3V0c2V0LCB0b3BXaXRoT3V0c2V0LCByaWdodFdpdGhPdXRz
ZXQgLSBsZWZ0V2l0aE91dHNldCwgYm90dG9tV2l0aE91dHNldCAtIHRvcFdpdGhPdXRzZXQpOwog
Ci0gICAgc3R5bGVJbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKGJvcmRlckltYWdlUmVjdC5z
aXplKCkpOworICAgIHN0eWxlSW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZSh0aGlzLCBib3Jk
ZXJJbWFnZVJlY3Quc2l6ZSgpKTsKICAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IHN0eWxlSW1h
Z2UtPmltYWdlU2l6ZSh0aGlzLCAxLjBmKTsKICAgICBMYXlvdXRVbml0IGltYWdlV2lkdGggPSBp
bWFnZVNpemUud2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGltYWdlSGVpZ2h0ID0gaW1hZ2VTaXpl
LmhlaWdodCgpOwpAQCAtMTA2NCwxOCArMTA2NCwxOCBAQCBib29sIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludE5pbmVQaWVjCiAgICAgICAgIC8vIFRoZSB0b3AgbGVmdCBjb3JuZXIgcmVjdCBp
cyAodHgsIHR5LCBsZWZ0V2lkdGgsIHRvcFdpZHRoKQogICAgICAgICAvLyBUaGUgcmVjdCB0byB1
c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzIG9idGFpbmVkIGZyb20gb3VyIHNsaWNlLCBhbmQg
aXMgKDAsIDAsIGxlZnRTbGljZSwgdG9wU2xpY2UpCiAgICAgICAgIGlmIChkcmF3VG9wKQotICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3Bh
Y2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0LmxvY2F0aW9uKCksIExheW91dFNpemUobGVm
dFdpZHRoLCB0b3BXaWR0aCkpLAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1h
Z2UodGhpcywgaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VS
ZWN0LmxvY2F0aW9uKCksIExheW91dFNpemUobGVmdFdpZHRoLCB0b3BXaWR0aCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCgwLCAwLCBsZWZ0U2xp
Y2UsIHRvcFNsaWNlKSwgb3ApOwogCiAgICAgICAgIC8vIFRoZSBib3R0b20gbGVmdCBjb3JuZXIg
cmVjdCBpcyAodHgsIHR5ICsgaCAtIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGgsIGJvdHRvbVdpZHRo
KQogICAgICAgICAvLyBUaGUgcmVjdCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzICgw
LCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBsZWZ0U2xpY2UsIGJvdG9tU2xpY2UpCiAgICAg
ICAgIGlmIChkcmF3Qm90dG9tKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1h
Z2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0Lngo
KSwgYm9yZGVySW1hZ2VSZWN0Lm1heFkoKSAtIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGgsIGJvdHRv
bVdpZHRoKSwKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKHRoaXMsIGlt
YWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCksIGJv
cmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0
aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KDAs
IGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIGxlZnRTbGljZSwgYm90dG9tU2xpY2UpLCBvcCk7
CiAKICAgICAgICAgLy8gUGFpbnQgdGhlIGxlZnQgZWRnZS4KICAgICAgICAgLy8gSGF2ZSB0byBz
Y2FsZSBhbmQgdGlsZSBpbnRvIHRoZSBib3JkZXIgcmVjdC4KLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChi
b3JkZXJJbWFnZVJlY3QueCgpLCBib3JkZXJJbWFnZVJlY3QueSgpICsgdG9wV2lkdGgsIGxlZnRX
aWR0aCwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZSh0aGlzLCBpbWFn
ZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QueCgpLCBib3Jk
ZXJJbWFnZVJlY3QueSgpICsgdG9wV2lkdGgsIGxlZnRXaWR0aCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkhlaWdodCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCgwLCB0b3BTbGljZSwgbGVmdFNs
aWNlLCBzb3VyY2VIZWlnaHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZsb2F0U2l6ZShsZWZ0U2lkZVNjYWxlLCBsZWZ0U2lkZVNjYWxlKSwgSW1hZ2U6OlN0cmV0
Y2hUaWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlLCBvcCk7CkBAIC0xMDg2LDE3ICsxMDg2LDE3
IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICAgICAgLy8g
VGhlIHRvcCByaWdodCBjb3JuZXIgcmVjdCBpcyAodHggKyB3IC0gcmlnaHRXaWR0aCwgdHksIHJp
Z2h0V2lkdGgsIHRvcFdpZHRoKQogICAgICAgICAvLyBUaGUgcmVjdCB0byB1c2UgZnJvbSB3aXRo
aW4gdGhlIGltYWdlIGlzIG9idGFpbmVkIGZyb20gb3VyIHNsaWNlLCBhbmQgaXMgKGltYWdlV2lk
dGggLSByaWdodFNsaWNlLCAwLCByaWdodFNsaWNlLCB0b3BTbGljZSkKICAgICAgICAgaWYgKGRy
YXdUb3ApCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQo
KSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRX
aWR0aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSwgcmlnaHRXaWR0aCwgdG9wV2lkdGgpLAorICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCksIGNvbG9y
U3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1heFgoKSAtIHJpZ2h0V2lkdGgsIGJv
cmRlckltYWdlUmVjdC55KCksIHJpZ2h0V2lkdGgsIHRvcFdpZHRoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFJlY3QoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xp
Y2UsIDAsIHJpZ2h0U2xpY2UsIHRvcFNsaWNlKSwgb3ApOwogCiAgICAgICAgIC8vIFRoZSBib3R0
b20gcmlnaHQgY29ybmVyIHJlY3QgaXMgKHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5ICsgaCAtIGJv
dHRvbVdpZHRoLCByaWdodFdpZHRoLCBib3R0b21XaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3Qg
dG8gdXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyAoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2Us
IGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIHJpZ2h0U2xpY2UsIGJvdHRvbVNsaWNlKQogICAg
ICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0lt
YWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC5t
YXhYKCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgs
IHJpZ2h0V2lkdGgsIGJvdHRvbVdpZHRoKSwKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
ZHJhd0ltYWdlKHRoaXMsIGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRl
ckltYWdlUmVjdC5tYXhYKCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QubWF4WSgpIC0g
Ym90dG9tV2lkdGgsIHJpZ2h0V2lkdGgsIGJvdHRvbVdpZHRoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIExheW91dFJlY3QoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2Us
IGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIHJpZ2h0U2xpY2UsIGJvdHRvbVNsaWNlKSwgb3Ap
OwogCiAgICAgICAgIC8vIFBhaW50IHRoZSByaWdodCBlZGdlLgotICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0
KGJvcmRlckltYWdlUmVjdC5tYXhYKCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgp
ICsgdG9wV2lkdGgsIHJpZ2h0V2lkdGgsCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1Rp
bGVkSW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVy
SW1hZ2VSZWN0Lm1heFgoKSAtIHJpZ2h0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BX
aWR0aCwgcmlnaHRXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvbkhlaWdodCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGF5b3V0UmVjdChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgdG9wU2xpY2UsIHJpZ2h0
U2xpY2UsIHNvdXJjZUhlaWdodCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRmxvYXRTaXplKHJpZ2h0U2lkZVNjYWxlLCByaWdodFNpZGVTY2FsZSksCkBAIC0xMTA1
LDEzICsxMTA1LDEzIEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMK
IAogICAgIC8vIFBhaW50IHRoZSB0b3AgZWRnZS4KICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwg
TGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QueCgpICsgbGVmdFdpZHRoLCBib3JkZXJJbWFnZVJl
Y3QueSgpLCBkZXN0aW5hdGlvbldpZHRoLCB0b3BXaWR0aCksCisgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZHJhd1RpbGVkSW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91
dFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0Lnko
KSwgZGVzdGluYXRpb25XaWR0aCwgdG9wV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExheW91dFJlY3QobGVmdFNsaWNlLCAwLCBzb3VyY2VXaWR0aCwgdG9w
U2xpY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0U2l6
ZSh0b3BTaWRlU2NhbGUsIHRvcFNpZGVTY2FsZSksIChJbWFnZTo6VGlsZVJ1bGUpaFJ1bGUsIElt
YWdlOjpTdHJldGNoVGlsZSwgb3ApOwogCiAgICAgLy8gUGFpbnQgdGhlIGJvdHRvbSBlZGdlLgog
ICAgIGlmIChkcmF3Qm90dG9tKQotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZElt
YWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54
KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwKKyAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZSh0aGlzLCBpbWFnZS5nZXQoKSwg
Y29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QueCgpICsgbGVmdFdpZHRoLCBi
b3JkZXJJbWFnZVJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25XaWR0aCwgYm90dG9tV2lkdGgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFJlY3QobGVmdFNsaWNl
LCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBzb3VyY2VXaWR0aCwgYm90dG9tU2xpY2UpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0U2l6ZShib3R0b21T
aWRlU2NhbGUsIGJvdHRvbVNpZGVTY2FsZSksCkBAIC0xMTM5LDcgKzExMzksNyBAQCBib29sIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjCiAgICAgICAgIGlmICh2UnVsZSA9PSBT
dHJldGNoSW1hZ2VSdWxlKQogICAgICAgICAgICAgbWlkZGxlU2NhbGVGYWN0b3Iuc2V0SGVpZ2h0
KGRlc3RpbmF0aW9uSGVpZ2h0IC8gc291cmNlSGVpZ2h0KTsKICAgICAgICAgCi0gICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsCisg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCks
IGNvbG9yU3BhY2UsCiAgICAgICAgICAgICBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCkg
KyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgZGVzdGluYXRpb25X
aWR0aCwgZGVzdGluYXRpb25IZWlnaHQpLAogICAgICAgICAgICAgTGF5b3V0UmVjdChsZWZ0U2xp
Y2UsIHRvcFNsaWNlLCBzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0KSwKICAgICAgICAgICAgIG1p
ZGRsZVNjYWxlRmFjdG9yLCAoSW1hZ2U6OlRpbGVSdWxlKWhSdWxlLCAoSW1hZ2U6OlRpbGVSdWxl
KXZSdWxlLCBvcCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5j
cHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDEwIEBAIEludFNpemUgUmVuZGVy
SW1hZ2U6OmltYWdlU2l6ZUZvckVycm9yKEMKICAgICBpZiAobmV3SW1hZ2UtPndpbGxQYWludEJy
b2tlbkltYWdlKCkpIHsKICAgICAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBXZWJDb3Jl
OjpkZXZpY2VTY2FsZUZhY3RvcihmcmFtZSgpKTsKICAgICAgICAgcGFpcjxJbWFnZSosIGZsb2F0
PiBicm9rZW5JbWFnZUFuZEltYWdlU2NhbGVGYWN0b3IgPSBuZXdJbWFnZS0+YnJva2VuSW1hZ2Uo
ZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICBpbWFnZVNpemUgPSBicm9rZW5JbWFnZUFuZElt
YWdlU2NhbGVGYWN0b3IuZmlyc3QtPnNpemUoKTsKKyAgICAgICAgaW1hZ2VTaXplID0gYnJva2Vu
SW1hZ2VBbmRJbWFnZVNjYWxlRmFjdG9yLmZpcnN0LT5zaXplKHRoaXMpOwogICAgICAgICBpbWFn
ZVNpemUuc2NhbGUoMSAvIGJyb2tlbkltYWdlQW5kSW1hZ2VTY2FsZUZhY3Rvci5zZWNvbmQpOwog
ICAgIH0gZWxzZQotICAgICAgICBpbWFnZVNpemUgPSBuZXdJbWFnZS0+aW1hZ2UoKS0+c2l6ZSgp
OworICAgICAgICBpbWFnZVNpemUgPSBuZXdJbWFnZS0+aW1hZ2UoKS0+c2l6ZSh0aGlzKTsKIAog
ICAgIC8vIGltYWdlU2l6ZSgpIHJldHVybnMgMCBmb3IgdGhlIGVycm9yIGltYWdlLiBXZSBuZWVk
IHRoZSB0cnVlIHNpemUgb2YgdGhlCiAgICAgLy8gZXJyb3IgaW1hZ2UsIHNvIHdlIGhhdmUgdG8g
Z2V0IGl0IGJ5IGdyYWJiaW5nIGltYWdlKCkgZGlyZWN0bHkuCkBAIC0yNzYsMTIgKzI3NiwxMiBA
QCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAKICAgICAgICAgICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlKCk7CiAKLSAgICAg
ICAgICAgIGlmIChtX2ltYWdlUmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSAmJiAhaW1hZ2UtPmlz
TnVsbCgpICYmIHVzYWJsZVdpZHRoID49IGltYWdlLT53aWR0aCgpICYmIHVzYWJsZUhlaWdodCA+
PSBpbWFnZS0+aGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2ltYWdlUmVzb3VyY2UtPmVy
cm9yT2NjdXJyZWQoKSAmJiAhaW1hZ2UtPmlzTnVsbCgpICYmIHVzYWJsZVdpZHRoID49IGltYWdl
LT53aWR0aCh0aGlzKSAmJiB1c2FibGVIZWlnaHQgPj0gaW1hZ2UtPmhlaWdodCh0aGlzKSkgewog
ICAgICAgICAgICAgICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gV2ViQ29yZTo6ZGV2aWNl
U2NhbGVGYWN0b3IoZnJhbWUoKSk7CiAgICAgICAgICAgICAgICAgLy8gQ2FsbCBicm9rZW5JbWFn
ZSgpIGV4cGxpY2l0bHkgdG8gZW5zdXJlIHdlIGdldCB0aGUgYnJva2VuIGltYWdlIGljb24gYXQg
dGhlIGFwcHJvcHJpYXRlIHJlc29sdXRpb24uCiAgICAgICAgICAgICAgICAgcGFpcjxJbWFnZSos
IGZsb2F0PiBicm9rZW5JbWFnZUFuZEltYWdlU2NhbGVGYWN0b3IgPSBtX2ltYWdlUmVzb3VyY2Ut
PmNhY2hlZEltYWdlKCktPmJyb2tlbkltYWdlKGRldmljZVNjYWxlRmFjdG9yKTsKICAgICAgICAg
ICAgICAgICBpbWFnZSA9IGJyb2tlbkltYWdlQW5kSW1hZ2VTY2FsZUZhY3Rvci5maXJzdDsKLSAg
ICAgICAgICAgICAgICBJbnRTaXplIGltYWdlU2l6ZSA9IGltYWdlLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBpbWFnZS0+c2l6ZSh0aGlzKTsKICAgICAgICAg
ICAgICAgICBpbWFnZVNpemUuc2NhbGUoMSAvIGJyb2tlbkltYWdlQW5kSW1hZ2VTY2FsZUZhY3Rv
ci5zZWNvbmQpOwogICAgICAgICAgICAgICAgIC8vIENlbnRlciB0aGUgZXJyb3IgaW1hZ2UsIGFj
Y291bnRpbmcgZm9yIGJvcmRlciBhbmQgcGFkZGluZy4KICAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IGNlbnRlclggPSAodXNhYmxlV2lkdGggLSBpbWFnZVNpemUud2lkdGgoKSkgLyAyOwpAQCAt
MjkxLDcgKzI5MSw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYK
ICAgICAgICAgICAgICAgICBpZiAoY2VudGVyWSA8IDApCiAgICAgICAgICAgICAgICAgICAgIGNl
bnRlclkgPSAwOwogICAgICAgICAgICAgICAgIGltYWdlT2Zmc2V0ID0gTGF5b3V0U2l6ZShsZWZ0
Qm9yZGVyICsgbGVmdFBhZCArIGNlbnRlclggKyAxLCB0b3BCb3JkZXIgKyB0b3BQYWQgKyBjZW50
ZXJZICsgMSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgp
LCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIEludFJlY3QocGFpbnRPZmZzZXQgKyBpbWFnZU9mZnNl
dCwgaW1hZ2VTaXplKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHRoaXMs
IGltYWdlLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIEludFJlY3QocGFpbnRPZmZzZXQg
KyBpbWFnZU9mZnNldCwgaW1hZ2VTaXplKSk7CiAgICAgICAgICAgICAgICAgZXJyb3JQaWN0dXJl
RHJhd24gPSB0cnVlOwogICAgICAgICAgICAgfQogCkBAIC00MDAsNyArNDAwLDcgQEAgdm9pZCBS
ZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChHcmFwaGljcwogICAgIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yID0gaW1hZ2VFbHQgPyBpbWFnZUVsdC0+Y29tcG9zaXRlT3BlcmF0
b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7CiAgICAgSW1hZ2UqIGltYWdlID0gbV9pbWFnZVJl
c291cmNlLT5pbWFnZSgpLmdldCgpOwogICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBz
aG91bGRQYWludEF0TG93UXVhbGl0eShjb250ZXh0LCBpbWFnZSwgaW1hZ2UsIHJlY3Quc2l6ZSgp
KTsKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9pbWFnZVJlc291cmNlLT5pbWFnZShyZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIHJlY3Qs
IGNvbXBvc2l0ZU9wZXJhdG9yLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7CisgICAgY29udGV4dC0+
ZHJhd0ltYWdlKHRoaXMsIG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2UocmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCByZWN0LCBjb21wb3NpdGVP
cGVyYXRvciwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOwogfQogCiBib29sIFJlbmRlckltYWdlOjpi
YWNrZ3JvdW5kSXNPYnNjdXJlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODksMTkgKzg5LDI5IEBAIHZvaWQgUmVuZGVySW1hZ2VSZXNvdXJjZTo6cmVzZXRB
bmltYXRpb24KICAgICAgICAgbV9yZW5kZXJlci0+cmVwYWludCgpOwogfQogCi12b2lkIFJlbmRl
ckltYWdlUmVzb3VyY2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KSBjb25zdAorSW1hZ2UqIFJlbmRlckltYWdlUmVzb3VyY2U6Om51bGxJbWFnZSgpCiB7Ci0gICAg
QVNTRVJUKG1fcmVuZGVyZXIpOworICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7Cit9CiAK
LSAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybjsKK1Bhc3NSZWZQdHI8SW1h
Z2U+IFJlbmRlckltYWdlUmVzb3VyY2U6OmltYWdlKGludCwgaW50KSBjb25zdAoreworICAgIGlm
IChtX2NhY2hlZEltYWdlKQorICAgICAgICByZXR1cm4gbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKTsK
KyAgICByZXR1cm4gbnVsbEltYWdlKCk7Cit9CiAKLSAgICBtX2NhY2hlZEltYWdlLT5zZXRJbWFn
ZUNvbnRhaW5lclNpemUoc2l6ZSk7Cit2b2lkIFJlbmRlckltYWdlUmVzb3VyY2U6OnNldEltYWdl
Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBpbWFnZUNvbnRhaW5lclNpemUpCit7CisgICAg
aWYgKG1fY2FjaGVkSW1hZ2UpCisgICAgICAgIG1fY2FjaGVkSW1hZ2UtPnNldEltYWdlQ29udGFp
bmVyU2l6ZShtX3JlbmRlcmVyLCBpbWFnZUNvbnRhaW5lclNpemUpOwogfQogCi1JbWFnZSogUmVu
ZGVySW1hZ2VSZXNvdXJjZTo6bnVsbEltYWdlKCkKK0ludFNpemUgUmVuZGVySW1hZ2VSZXNvdXJj
ZTo6aW1hZ2VTaXplKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEltYWdl
OjpudWxsSW1hZ2UoKTsKKyAgICBpZiAobV9jYWNoZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG1f
Y2FjaGVkSW1hZ2UtPmltYWdlU2l6ZShtX3JlbmRlcmVyLCBtdWx0aXBsaWVyKTsKKyAgICByZXR1
cm4gSW50U2l6ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmgJKHJldmlzaW9uIDk2
Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNTQsMTcgKzU0LDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVz
ZXRBbmltYXRpb24oKTsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoaW50
IC8qIHdpZHRoICovID0gMCwgaW50IC8qIGhlaWdodCAqLyA9IDApIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT5pbWFnZSgpIDogbnVsbEltYWdlKCk7IH0KKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKGludCB3aWR0aCA9IDAsIGludCBoZWln
aHQgPSAwKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkSW1hZ2UgJiYgbV9jYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpOyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUm
IHNpemUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29u
c3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPnVzZXNJbWFnZUNv
bnRhaW5lclNpemUoKSA6IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRp
dmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT5p
bWFnZUhhc1JlbGF0aXZlV2lkdGgoKSA6IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGltYWdl
SGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlID8gbV9jYWNo
ZWRJbWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIDogZmFsc2U7IH0KLQotICAgIHZpcnR1
YWwgSW50U2l6ZSBpbWFnZVNpemUoZmxvYXQgbXVsdGlwbGllcikgY29uc3QgeyByZXR1cm4gbV9j
YWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPmltYWdlU2l6ZShtdWx0aXBsaWVyKSA6IEludFNp
emUoKTsgfQorICAgIHZpcnR1YWwgSW50U2l6ZSBpbWFnZVNpemUoZmxvYXQgbXVsdGlwbGllcikg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIFdyYXBwZWRJbWFnZVB0ciBpbWFnZVB0cigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkSW1hZ2UuZ2V0KCk7IH0KKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVy
SW1hZ2VSZXNvdXJjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlUmVzb3VyY2VTdHlsZUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmgJKHJldmlzaW9uIDk2Njk4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoaW50IHdpZHRoID0gMCwgaW50IGhlaWdodCA9IDApIGNv
bnN0IHsgcmV0dXJuIG1fc3R5bGVJbWFnZS0+aW1hZ2UobV9yZW5kZXJlciwgSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3R5bGVJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpOyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0IHsgbV9z
dHlsZUltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUoc2l6ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9zdHlsZUlt
YWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUobV9yZW5kZXJlciwgc2l6ZSk7IH0KICAgICB2aXJ0
dWFsIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVJ
bWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpOyB9CiAgICAgdmlydHVhbCBib29sIGltYWdl
SGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVJbWFnZS0+aW1hZ2VIYXNS
ZWxhdGl2ZVdpZHRoKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVJbWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgp
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlz
aW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQxNywyMSArMjQxNywyMiBAQCB2b2lkIFJlbmRlckxheWVyOjpk
cmF3UGxhdGZvcm1SZXNpemVySW1hCiB7CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBX
ZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3RvcihyZW5kZXJlcigpLT5mcmFtZSgpKTsKIAorICAgIC8v
IFBhc3NpbmcgMCBhcyBJbWFnZVVzZXIgdG8gdGhlIHNpemUoKS9kcmF3SW1hZ2UoKSBtZXRob2Rz
IGFzIGZpbmUsIGFzIHRoZXNlIGFyZSBubyBTVkcgaW1hZ2VzLgogICAgIFJlZlB0cjxJbWFnZT4g
cmVzaXplQ29ybmVySW1hZ2U7CiAgICAgSW50U2l6ZSBjb3JuZXJSZXNpemVyU2l6ZTsKICAgICBp
ZiAoZGV2aWNlU2NhbGVGYWN0b3IgPj0gMikgewogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEltYWdlKiwgcmVzaXplQ29ybmVySW1hZ2VIaVJlcywgKEltYWdlOjpsb2FkUGxhdGZvcm1SZXNv
dXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpKTsKICAgICAgICAgcmVz
aXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhpUmVzOwotICAgICAgICBjb3JuZXJS
ZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgICAgIGNvcm5lclJl
c2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoMCk7CiAgICAgICAgIGNvcm5lclJl
c2l6ZXJTaXplLnNjYWxlKDAuNWYpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSW1hZ2UqLCByZXNpemVDb3JuZXJJbWFnZUxvUmVzLCAoSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSkpOwogICAgICAg
ICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlTG9SZXM7Ci0gICAgICAgIGNv
cm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICAgICAgY29y
bmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgwKTsKICAgICB9CiAKICAg
ICBJbnRSZWN0IGltYWdlUmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0g
Y29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKTsKLSAgICBjb250ZXh0LT5kcmF3
SW1hZ2UocmVzaXplQ29ybmVySW1hZ2UuZ2V0KCksIHJlbmRlcmVyKCktPnN0eWxlKCktPmNvbG9y
U3BhY2UoKSwgaW1hZ2VSZWN0KTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UoMCwgcmVzaXplQ29y
bmVySW1hZ2UuZ2V0KCksIHJlbmRlcmVyKCktPnN0eWxlKCktPmNvbG9yU3BhY2UoKSwgaW1hZ2VS
ZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRS
ZWN0JiBkYW1hZ2VSZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMzAsNyArMTEz
MCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICAgICAg
aWYgKHN0eWxlKCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICAgICAgcGFpbnRDdXN0b21IaWdobGlnaHQo
cGFpbnRPZmZzZXQsIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKICNlbmRpZgotICAgICAg
ICBjb250ZXh0LT5kcmF3SW1hZ2UobV9pbWFnZS0+aW1hZ2UodGhpcywgbWFya2VyLnNpemUoKSku
Z2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgbWFya2VyKTsKKyAgICAgICAgY29udGV4dC0+
ZHJhd0ltYWdlKHRoaXMsIG1faW1hZ2UtPmltYWdlKHRoaXMsIG1hcmtlci5zaXplKCkpLmdldCgp
LCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIG1hcmtlcik7CiAgICAgICAgIGlmIChzZWxlY3Rpb25T
dGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKICAgICAgICAgICAgIExheW91dFJlY3Qgc2VsUmVj
dCA9IGxvY2FsU2VsZWN0aW9uUmVjdCgpOwogICAgICAgICAgICAgc2VsUmVjdC5tb3ZlQnkoYm94
T3JpZ2luKTsKQEAgLTEzNTAsNyArMTM1MCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y29t
cHV0ZVByZWZlcnJlZEwKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBzb21ld2hhdCBhcmJp
dHJhcnkgd2lkdGguICBHZW5lcmF0ZWQgaW1hZ2VzIGZvciBtYXJrZXJzIHJlYWxseSB3b24ndCBi
ZWNvbWUgcGFydGljdWxhcmx5IHVzZWZ1bAogICAgICAgICAvLyB1bnRpbCB3ZSBzdXBwb3J0IHRo
ZSBDU1MzIG1hcmtlciBwc2V1ZG9jbGFzcyB0byBhbGxvdyBjb250cm9sIG92ZXIgdGhlIHdpZHRo
IGFuZCBoZWlnaHQgb2YgdGhlIG1hcmtlciBib3guCiAgICAgICAgIExheW91dFVuaXQgYnVsbGV0
V2lkdGggPSBmb250TWV0cmljcy5hc2NlbnQoKSAvIDI7Ci0gICAgICAgIG1faW1hZ2UtPnNldElt
YWdlQ29udGFpbmVyU2l6ZShMYXlvdXRTaXplKGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCkpOwor
ICAgICAgICBtX2ltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUodGhpcywgTGF5b3V0U2l6ZShi
dWxsZXRXaWR0aCwgYnVsbGV0V2lkdGgpKTsKICAgICAgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUg
PSBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAg
ICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBpbWFnZVNpemUud2lk
dGgoKSA6IGltYWdlU2l6ZS5oZWlnaHQoKTsKICAgICAgICAgc2V0UHJlZmVycmVkTG9naWNhbFdp
ZHRoc0RpcnR5KGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUNhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw5ICs0OSw5IEBAIGJvb2wgU3R5bGVDYWNoZWRJbWFnZTo6ZXJyb3JPY2N1cnJl
ZCgpIGMKICAgICByZXR1cm4gbV9pbWFnZS0+ZXJyb3JPY2N1cnJlZCgpOwogfQogCi1JbnRTaXpl
IFN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqIC8qcmVuZGVy
ZXIqLywgZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK0ludFNpemUgU3R5bGVDYWNoZWRJbWFnZTo6
aW1hZ2VTaXplKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UtPmltYWdlU2l6ZShtdWx0aXBsaWVyKTsKKyAg
ICByZXR1cm4gbV9pbWFnZS0+aW1hZ2VTaXplKHJlbmRlcmVyLCBtdWx0aXBsaWVyKTsKIH0KIAog
Ym9vbCBTdHlsZUNhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdApAQCAt
NjksMTkgKzY5LDE5IEBAIGJvb2wgU3R5bGVDYWNoZWRJbWFnZTo6dXNlc0ltYWdlQ29udGFpbmUK
ICAgICByZXR1cm4gbV9pbWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpOwogfQogCi12b2lk
IFN0eWxlQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBz
aXplKQordm9pZCBTdHlsZUNhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3Qg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgaW1hZ2VDb250YWluZXJTaXpl
KQogewotICAgIHJldHVybiBtX2ltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUoc2l6ZSk7Cisg
ICAgbV9pbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHJlbmRlcmVyLCBpbWFnZUNvbnRhaW5l
clNpemUpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVkSW1hZ2U6OmFkZENsaWVudChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBtX2ltYWdlLT5hZGRDbGllbnQocmVuZGVyZXIp
OworICAgIG1faW1hZ2UtPmFkZENsaWVudChyZW5kZXJlcik7CiB9CiAKIHZvaWQgU3R5bGVDYWNo
ZWRJbWFnZTo6cmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0
dXJuIG1faW1hZ2UtPnJlbW92ZUNsaWVudChyZW5kZXJlcik7CisgICAgbV9pbWFnZS0+cmVtb3Zl
Q2xpZW50KHJlbmRlcmVyKTsKIH0KIAogUGFzc1JlZlB0cjxJbWFnZT4gU3R5bGVDYWNoZWRJbWFn
ZTo6aW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgJKHJl
dmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2Fj
aGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHVz
ZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VD
b250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VD
b250YWluZXJTaXplKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdl
PiBpbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1h
Z2UuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZUdlbmVyYXRlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDYg
QEAgSW50U2l6ZSBTdHlsZUdlbmVyYXRlZEltYWdlOjppbWFnZVNpemUoYwogICAgIHJldHVybiBt
X2NvbnRhaW5lclNpemU7CiB9CiAKLXZvaWQgU3R5bGVHZW5lcmF0ZWRJbWFnZTo6c2V0SW1hZ2VD
b250YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgbV9jb250YWluZXJTaXpl
ID0gc2l6ZTsKLX0KLQogdm9pZCBTdHlsZUdlbmVyYXRlZEltYWdlOjphZGRDbGllbnQoUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBtX2dlbmVyYXRvci0+YWRkQ2xpZW50KHJlbmRlcmVy
LCBJbnRTaXplKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
R2VuZXJhdGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1Jl
bGF0aXZlV2lkdGgoKSBjb25zdCB7IHJldHVybiAhbV9maXhlZFNpemU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuICFtX2ZpeGVkU2l6
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QgeyBy
ZXR1cm4gIW1fZml4ZWRTaXplOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVy
U2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVy
U2l6ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJiBjb250YWluZXJTaXplKSB7
IG1fY29udGFpbmVyU2l6ZSA9IGNvbnRhaW5lclNpemU7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWRk
Q2xpZW50KFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQoUmVu
ZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZShSZW5kZXJP
YmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0
aCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IElu
dFNpemUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25z
dCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBh
ZGRDbGllbnQoUmVuZGVyT2JqZWN0KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGll
bnQoUmVuZGVyT2JqZWN0KikgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1h
Z2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oCShy
ZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBl
bmRpbmdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRh
aW5lclNpemUoY29uc3QgSW50U2l6ZSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNv
bnRhaW5lclNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoUmVuZGVyT2JqZWN0KikgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqKSB7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJ
KHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgdm9pZCBSZW5kZXJT
VkdJbWFnZTo6bGF5b3V0KCkKIAogICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMs
IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpKTsKICAg
ICBTVkdJbWFnZUVsZW1lbnQqIGltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4o
bm9kZSgpKTsKKyAgICBtX2ltYWdlUmVzb3VyY2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShlbmNs
b3NpbmdJbnRSZWN0KG1fb2JqZWN0Qm91bmRpbmdCb3gpLnNpemUoKSk7CiAKICAgICBib29sIHRy
YW5zZm9ybU9yQm91bmRhcmllc1VwZGF0ZSA9IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgfHwgbV91
cGRhdGVDYWNoZWRSZXBhaW50UmVjdDsKICAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkg
ewpAQCAtMTI1LDEzICsxMjYsMTMgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJ
bmZvJiBwYQogICAgICAgICAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRl
clNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8pKSB7CiAgICAgICAgICAgICAgICAgUmVm
UHRyPEltYWdlPiBpbWFnZSA9IG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2UoKTsKICAgICAgICAgICAg
ICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBtX29iamVjdEJvdW5kaW5nQm94OwotICAgICAgICAg
ICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVp
Z2h0KCkpOworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIGltYWdlLT53
aWR0aCh0aGlzKSwgaW1hZ2UtPmhlaWdodCh0aGlzKSk7CiAKICAgICAgICAgICAgICAgICBTVkdJ
bWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCo+
KG5vZGUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGltYWdlRWxlbWVudC0+cHJlc2VydmVBc3Bl
Y3RSYXRpbygpLmFsaWduKCkgIT0gU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fTk9ORSkKICAgICAgICAgICAgICAgICAgICAgaW1hZ2VFbGVtZW50LT5wcmVz
ZXJ2ZUFzcGVjdFJhdGlvKCkudHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7CiAKLSAg
ICAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0
KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKKyAgICAgICAgICAg
ICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCks
IENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0
aGlzLCBjaGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw3ICsxMDEsNyBAQCBTVkdJbWFnZTo6flNWR0ltYWdlKCkKICAgICBBU1NFUlQoIW1fY2hyb21l
Q2xpZW50IHx8ICFtX2Nocm9tZUNsaWVudC0+aW1hZ2UoKSk7CiB9CiAKLXZvaWQgU1ZHSW1hZ2U6
OnNldENvbnRhaW5lclNpemUoY29uc3QgTGF5b3V0U2l6ZSYgY29udGFpbmVyU2l6ZSkKK3ZvaWQg
U1ZHSW1hZ2U6OnNldENvbnRhaW5lclNpemUoSW1hZ2VVc2VyLCBjb25zdCBJbnRTaXplJiBjb250
YWluZXJTaXplKQogewogICAgIGlmIChjb250YWluZXJTaXplLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTI4LDcgKzEyOCw3IEBAIGJvb2wgU1ZHSW1hZ2U6OnVzZXNDb250YWluZXJT
aXplKCkgY29uc3QKICAgICByZXR1cm4gcm9vdEVsZW1lbnQtPmhhc1NldENvbnRhaW5lclNpemUo
KTsKIH0KIAotSW50U2l6ZSBTVkdJbWFnZTo6c2l6ZSgpIGNvbnN0CitJbnRTaXplIFNWR0ltYWdl
OjpzaXplKEltYWdlVXNlcikgY29uc3QKIHsKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKQEAgLTE3Niw3ICsxNzYsNyBAQCBib29sIFNWR0ltYWdlOjpoYXNSZWxh
dGl2ZUhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHJvb3RFbGVtZW50LT5oZWlnaHQoKS51bml0
VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdlOwogfQogCi12b2lkIFNWR0ltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wKQordm9pZCBTVkdJbWFnZTo6ZHJhdyhJbWFnZVVzZXIgdXNlciwgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAg
ICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lk
IFNWR0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgY29udGV4dC0+dHJhbnNs
YXRlKGRlc3RPZmZzZXQueCgpLCBkZXN0T2Zmc2V0LnkoKSk7CiAgICAgY29udGV4dC0+c2NhbGUo
c2NhbGUpOwogCi0gICAgdmlldy0+cmVzaXplKHNpemUoKSk7CisgICAgdmlldy0+cmVzaXplKHNp
emUodXNlcikpOwogCiAgICAgaWYgKHZpZXctPm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHZpZXct
PmxheW91dCgpOwpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgU1ZHSW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiBjb24KICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwog
fQogCi1OYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KQorTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKElt
YWdlVXNlciB1c2VyKQogewogICAgIC8vIEZJWE1FOiBJbiBvcmRlciB0byBzdXBwb3J0IGR5bmFt
aWMgU1ZHcyB3ZSBuZWVkIHRvIGhhdmUgYSB3YXkgdG8gaW52YWxpZGF0ZSB0aGlzCiAgICAgLy8g
ZnJhbWUgY2FjaGUsIG9yIGJldHRlciB5ZXQsIG5vdCB1c2UgYSBjYWNoZSBmb3IgdGlsZWQgZHJh
d2luZyBhdCBhbGwsIGluc3RlYWQKQEAgLTIyMywxMyArMjIzLDEzIEBAIE5hdGl2ZUltYWdlUHRy
IFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckMKICAgICBpZiAoIW1fZnJhbWVDYWNoZSkgewogICAg
ICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpKTsKKyAgICAg
ICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUo
dXNlcikpOwogICAgICAgICBpZiAoIWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdl
CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZHJhdyhidWZmZXItPmNvbnRleHQoKSwg
cmVjdCgpLCByZWN0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIp
OworICAgICAgICBkcmF3KHVzZXIsIGJ1ZmZlci0+Y29udGV4dCgpLCByZWN0KHVzZXIpLCByZWN0
KHVzZXIpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICAg
ICAgbV9mcmFtZUNhY2hlID0gYnVmZmVyLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAg
ICAgfQotICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
dXNlcik7CiB9CiAKIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHJldmlzaW9u
IDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDEyICs0OSwxMiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBTdHJp
bmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
YWluZXJTaXplKGNvbnN0IExheW91dFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFp
bmVyU2l6ZShJbWFnZVVzZXIsIGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIGJvb2wgdXNl
c0NvbnRhaW5lclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVXaWR0
aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUg
c2l6ZShJbWFnZVVzZXIpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJv
b2wgYWxsRGF0YVJlY2VpdmVkKTsKIApAQCAtNjYsOSArNjYsOSBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgTmF0aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCkgeyByZXR1cm4gMDsgfQog
CiAgICAgU1ZHSW1hZ2UoSW1hZ2VPYnNlcnZlciopOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZnJvbVJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdG9SZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Ip
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRSZWN0JiBmcm9tUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0b1JlY3QsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKLSAgICB2aXJ0dWFsIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShJbWFnZVVzZXIpOwogCiAg
ICAgT3duUHRyPFNWR0ltYWdlQ2hyb21lQ2xpZW50PiBtX2Nocm9tZUNsaWVudDsKICAgICBPd25Q
dHI8UGFnZT4gbV9wYWdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDcgQEAgUGFzc1JlZlB0cjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGUoRmls
dAogdm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiB7CiAgICAgQVNT
RVJUKG1faW1hZ2UpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFn
ZS0+c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2Ut
PnNpemUoMCkpOwogICAgIEZsb2F0UmVjdCBwYWludFJlY3QobV9hYnNvbHV0ZVN1YnJlZ2lvbik7
CiAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QocGFpbnRSZWN0LCBzcmNS
ZWN0KTsKICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CkBAIC02NSwx
NCArNjUsMTQgQEAgdm9pZCBGRUltYWdlOjphcHBseSgpCiAgICAgaWYgKCFyZXN1bHRJbWFnZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBt
X2ltYWdlLT5zaXplKCkpOworICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgbV9p
bWFnZS0+c2l6ZSh0aGlzKSk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KG1fYWJzb2x1dGVTdWJy
ZWdpb24pOwogICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0
LCBzcmNSZWN0KTsKIAogICAgIEludFBvaW50IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgZGVzdFJlY3QubW92ZSgtcGFpbnRMb2NhdGlvbi54KCks
IC1wYWludExvY2F0aW9uLnkoKSk7CiAKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3
SW1hZ2UobV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1Jl
Y3QpOworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZSh0aGlzLCBtX2ltYWdl
LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CiB9CiAKIHZv
aWQgRkVJbWFnZTo6ZHVtcCgpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgRkVJbWFnZTo6ZHVtcCgp
CiBUZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KSBjb25zdAogewogICAgIEFTU0VSVChtX2ltYWdlKTsKLSAgICBJbnRT
aXplIGltYWdlU2l6ZSA9IG1faW1hZ2UtPnNpemUoKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9
IG1faW1hZ2UtPnNpemUodGhpcyk7CiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAgICAg
dHMgPDwgIltmZUltYWdlIjsKICAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0xMC0wNSAg
Tmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KKworICAgICAgICBQcmVw
YXJlIFNWR0ltYWdlIGludHJpbnNpYyBzaXplIG5lZ290aWF0aW9uOiBNYWtlIGl0IHBvc3NpYmxl
IHRvIHJldXNlIHRoZSBzYW1lIFNWR0ltYWdlIGF0IGRpZmZlcmVudCBzaXplcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk0MTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwOiBBZGFwdCB0byBJbWFnZSBBUEkgY2hhbmdlcy4KKyAgICAgICAgKENv
cmVJUEM6OmVuY29kZUltYWdlKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKwogMjAx
MS0xMC0wNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dUS10gVXNlIFdLUmV0YWluUHRyIGZvciBXSyB0eXBlcyBpbiBXZWJLaXQyIEdUSysK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOCArMjkwLDggQEAgYm9vbCBB
cmd1bWVudENvZGVyPENyZWRlbnRpYWw+OjpkZWNvZGUoQQogCiBzdGF0aWMgdm9pZCBlbmNvZGVJ
bWFnZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIEltYWdlKiBpbWFnZSkKIHsKLSAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJl
YWJsZShpbWFnZS0+c2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwotICAg
IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JT
cGFjZURldmljZVJHQiwgSW50UG9pbnQoKSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
Yml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoMCks
IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgYml0bWFwLT5jcmVhdGVHcmFw
aGljc0NvbnRleHQoKS0+ZHJhd0ltYWdlKDAsIGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJ
bnRQb2ludCgpKTsKIAogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKICAgICBi
aXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwpAQCAtMzY3LDcgKzM2Nyw3IEBAIGJvb2wgQXJn
dW1lbnRDb2RlcjxDdXJzb3I+OjpkZWNvZGUoQXJndW0KICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShob3RTcG90KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFpbWFnZS0+cmVj
dCgpLmNvbnRhaW5zKGhvdFNwb3QpKQorICAgIGlmICghaW1hZ2UtPnJlY3QoMCkuY29udGFpbnMo
aG90U3BvdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGN1cnNvciA9IEN1cnNvcihp
bWFnZS5nZXQoKSwgaG90U3BvdCk7Cg==
</data>
<flag name="commit-queue"
          id="107099"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109793</attachid>
            <date>2011-10-05 08:06:37 -0700</date>
            <delta_ts>2011-10-05 08:50:05 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>SVGImage-splitoff-v2.diff</filename>
            <type>text/plain</type>
            <size>146730</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NzA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjU0IEBACisyMDExLTEwLTA1ICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFByZXBhcmUgU1ZH
SW1hZ2UgaW50cmluc2ljIHNpemUgbmVnb3RpYXRpb246IE1ha2UgaXQgcG9zc2libGUgdG8gcmV1
c2UgdGhlIHNhbWUgU1ZHSW1hZ2UgYXQgZGlmZmVyZW50IHNpemVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRvIGltcGxlbWVudCBpbnRyaW5jaWMgc2l6
ZSBuZWdvdGlhdGlvbiBmb3IgU1ZHIGltYWdlcyBlbWJlZGRlZCB0aHJvdWdoIGJvcmRlci1pbWFn
ZS9iYWNrZ3JvdW5kLWltYWdlLzxodG1sOmltZz4vPHN2ZzppbWFnZT4vLi4uCisgICAgICAgIFNW
R0ltYWdlIG5lZWRzIHRvIHN0b3JlIHRoZSBkZXNpcmVkIGNvbnRhaW5lciBzaXplIGZvciB0aGUg
dGFyZ2V0IHdoZXJlIHRoZSBpbWFnZSBpcyBlbWJlZGRlZCwgaWYgaXRzIHByb3ZpZGVkLgorCisg
ICAgICAgIEFzIFNWR0ltYWdlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgaW5zdGFuY2Vz
IHRoYXQgcmVmZXIgdG8gaXQsIHdlIG5lZWQgdG8gbWFrZSBpdCBjb250YWluIGEgSGFzaE1hcCB0
aGF0IG1hcHMgZnJvbQorICAgICAgICBhIFJlbmRlck9iamVjdCogdG8gYSBJbnRTaXplLiBBcyBT
VkdJbWFnZSBpcyBuZXZlciB1c2VkIGRpcmVjdGx5LCB0aGUgSW1hZ2UgQVBJcyBuZWVkIHRvIGJl
IGFkanVzdGVkLiBJdCBjYW4ndCByZWZlcmVuY2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0cyBh
cyB0aGF0IHdvdWxkIGJlIGEgcGxhdGZvcm0gbGF5ZXIgdmlvbGF0aW9uIC0gaW5zdGVhZCBpbnRy
b2R1Y2UgYSAiSW1hZ2VVc2VyIiB0eXBlZGVmIHRvIGNvbnN0IHZvaWQqCisgICAgICAgIGFuZCBw
YXNzIEltYWdlVXNlciBhcmd1bWVudHMgdG8gR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UvZHJh
d1RpbGVkSW1hZ2UvZHJhd1BhdHRlcm4sIGFuZCB0byBJbWFnZTo6c2l6ZS93aWR0aC9oZWlnaHQK
KyAgICAgICAgc28gdGhhdCBTVkdJbWFnZSBjYW4gYWx3YXlzIGZpZ3VyZSBvdXQgd2hvcyBhc2tp
bmcgZm9yIHRoZSBzaXplIGFuZCByZXR1cm4gdGhlIHJpZ2h0IGFuc3dlcnMuCisKKyAgICAgICAg
Tm90IHRlc3RhYmxlIHlldCwgYXMgdGhlIG5ldyBJbWFnZVVzZXIgY29uY2VwdCBpc24ndCB1c2Vk
IHlldC4gQnVnIDQ3MTU2IHdpbGwgbWFrZSB1c2Ugb2YgaXQgc29vbi4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcGl4bWFw
cnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcEluc3RhbmNlOjp2
YXJpYW50RnJvbU9iamVjdCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQpOgorICAgICAgICAq
IGh0bWwvSFRNTEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VF
bGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpoZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbFdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6Om5hdHVyYWxIZWlnaHQpOgorICAg
ICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURv
Y3VtZW50UGFyc2VyOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6
c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzaXplSW1hZ2VUb0Zp
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjppbWFnZVVwZGF0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzdG9yZUltYWdlU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjppbWFnZUZpdHNJbldpbmRvdyk6CisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyREltcGwpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkSW1hZ2U6OmltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6
ZGF0YSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6Y2FuUmVuZGVyKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkb0ltYWdlRHJh
Zyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAqIHBsYXRmb3JtL0N1cnNvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkZXRlcm1pbmVIb3RTcG90KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVs
RXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtTWFj
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmQ6OndyaXRlSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVTaXplKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpub3RTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmF0ZWRJbWFnZTo6ZHJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmg6CisgICAgICAgIChXZWJD
b3JlOjpHZW5lcmF0ZWRJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHZW5lcmF0ZWRJbWFnZTo6c2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
ZHJhd1RpbGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmlzU1ZHSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
OmlzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZTo6cmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmhlaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGF0dGVybkNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBs
YXRmb3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRl
cm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpzZXRDb250ZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpzZXRDb250ZW50c1Rv
SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5WRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclF0OjpzZXRDb250ZW50c1RvSW1hZ2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0
dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9TdGlsbEltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZVF0OjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6dWlkRm9y
SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5n
bGVGcmFtZVNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2luZ2xlRnJhbWVT
a2lhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lh
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVy
bjo6cGxhdGZvcm1QYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OnJlbmRlckNvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OmNvbnRlbnRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VT
aXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3UGF0dGVy
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJh
Z0ltYWdlRnJvbUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6Y3JlYXRlRHJhZ0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZFF0OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L0N1cnNvclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUN1c3RvbUN1cnNvcik6CisgICAgICAgICogcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6d3JpdGVJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vd2luY2UvUGFzdGVi
b2FyZFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2Up
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpzaG91bGRQYWludEF0TG93UXVhbGl0
eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5
ZXJFeHRlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2Fs
Y3VsYXRlRmlsbFRpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludE5pbmVQaWVjZUltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmltYWdlU2l6ZUZvckVycm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludEludG9SZWN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bWFnZVJlc291cmNlOjpudWxsSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VS
ZXNvdXJjZTo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VSZXNvdXJjZTo6
c2V0SW1hZ2VDb250YWluZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlUmVz
b3VyY2U6OmltYWdlU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3Vy
Y2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlUmVzb3VyY2U6OnJlbmRlcmVyKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlOjpzZXRJbWFnZUNv
bnRhaW5lclNpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0TWFya2VyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVD
YWNoZWRJbWFnZTo6aW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1h
Z2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hl
ZEltYWdlOjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6
cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFn
ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVHZW5lcmF0ZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQ
ZW5kaW5nSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFn
ZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpwYWludCk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ltYWdlOjpzZXRDb250YWluZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgICogc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKwogMjAxMS0xMC0w
NSAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBBZGQgc3VwcG9ydCBmb3Igc2VhcmNoIGluIHNjcmlwdCBjb250ZW50LgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0MzAsNyBAQCBfX1pON1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUGF0aEVSCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDhmaWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDhmaWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFUktOU181Q29sb3JFTlNfMTBDb2xvclNw
YWNlRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5Y2xlYXJSZWN0RVJLTlNfOUZsb2F0
UmVjdEUKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OWRyYXdJbWFnZUVQTlNfNUltYWdl
RU5TXzEwQ29sb3JTcGFjZUVSS05TXzhJbnRQb2ludEVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRQor
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5ZHJhd0ltYWdlRVBLdlBOU181SW1hZ2VFTlNf
MTBDb2xvclNwYWNlRVJLTlNfOEludFBvaW50RU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlzZXRTaGFkb3dFUktOU185RmxvYXRTaXplRWZSS05T
XzVDb2xvckVOU18xMENvbG9yU3BhY2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDl0
cmFuc2xhdGVFZmYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0QzFFUDlDR0NvbnRleHQK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmFjY2Vzc2liCiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIg
cmVuZGVyZWQgaW1hZ2Ugd2FzIHN0cmV0Y2hlZCBmcm9tIG9uZS1kaW1lbnNpb25hbCBmaWxlIGlt
YWdlCiAgICAgICAgICAgICBpZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsKLSAgICAgICAgICAg
ICAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNp
emUoaW1hZ2UtPnZpZXcoKS0+em9vbUZhY3RvcigpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRT
aXplIGltYWdlU2l6ZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUobV9yZW5kZXJl
ciwgaW1hZ2UtPnZpZXcoKS0+em9vbUZhY3RvcigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
aW1hZ2VTaXplLmhlaWdodCgpIDw9IDEgfHwgaW1hZ2VTaXplLndpZHRoKCkgPD0gMTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3Bp
eG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9x
dF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Miw3ICsz
ODIsNyBAQCBRVmFyaWFudCBRdFBpeG1hcEluc3RhbmNlOjp2YXJpYW50RnJvbU9iCiAgICAgICAg
IGlmICghaW1hZ2UpCiAgICAgICAgICAgICBnb3RvIHJldHVybkVtcHR5VmFyaWFudDsKIAotICAg
ICAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKKyAgICAgICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKGltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmICghcGl4bWFwKQog
ICAgICAgICAgICAgZ290byByZXR1cm5FbXB0eVZhcmlhbnQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODIsNyArMjgyLDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDbwog
ICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBidWZmZXIoKTsKICAgICAgICAgaWYg
KGltYWdlQnVmZmVyKSB7CiAgICAgICAgICAgICBpZiAobV9wcmVzZW50ZWRJbWFnZSkKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9wcmVzZW50ZWRJbWFnZS5nZXQoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgciwgQ29tcG9zaXRlU291cmNlT3ZlciwgdXNlTG93UXVhbGl0eVNj
YWxlKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVuZGVyZXIoKSwgbV9w
cmVzZW50ZWRJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgciwgQ29tcG9zaXRlU291
cmNlT3ZlciwgdXNlTG93UXVhbGl0eVNjYWxlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIHIsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAko
cmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsNyArMjU3LDcgQEAgaW50IEhUTUxJbWFnZUVsZW1l
bnQ6OndpZHRoKGJvb2wgaWdub3JlUAogCiAgICAgICAgIC8vIGlmIHRoZSBpbWFnZSBpcyBhdmFp
bGFibGUsIHVzZSBpdHMgd2lkdGgKICAgICAgICAgaWYgKG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkK
LSAgICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZSgxLjBm
KS53aWR0aCgpOworICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKS0+aW1h
Z2VTaXplKHJlbmRlcmVyKCksIDEuMGYpLndpZHRoKCk7CiAgICAgfQogCiAgICAgaWYgKGlnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cykKQEAgLTI4MCw3ICsyODAsNyBAQCBpbnQgSFRNTEltYWdlRWxl
bWVudDo6aGVpZ2h0KGJvb2wgaWdub3JlCiAKICAgICAgICAgLy8gaWYgdGhlIGltYWdlIGlzIGF2
YWlsYWJsZSwgdXNlIGl0cyBoZWlnaHQKICAgICAgICAgaWYgKG1faW1hZ2VMb2FkZXIuaW1hZ2Uo
KSkKLSAgICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZSgx
LjBmKS5oZWlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCkt
PmltYWdlU2l6ZShyZW5kZXJlcigpLCAxLjBmKS5oZWlnaHQoKTsKICAgICB9CiAKICAgICBpZiAo
aWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKQpAQCAtMjk3LDcgKzI5Nyw3IEBAIGludCBIVE1MSW1h
Z2VFbGVtZW50OjpuYXR1cmFsV2lkdGgoKSBjb24KICAgICBpZiAoIW1faW1hZ2VMb2FkZXIuaW1h
Z2UoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFn
ZSgpLT5pbWFnZVNpemUoMS4wZikud2lkdGgoKTsKKyAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5p
bWFnZSgpLT5pbWFnZVNpemUocmVuZGVyZXIoKSwgMS4wZikud2lkdGgoKTsKIH0KIAogaW50IEhU
TUxJbWFnZUVsZW1lbnQ6Om5hdHVyYWxIZWlnaHQoKSBjb25zdApAQCAtMzA1LDcgKzMwNSw3IEBA
IGludCBIVE1MSW1hZ2VFbGVtZW50OjpuYXR1cmFsSGVpZ2h0KCkgY28KICAgICBpZiAoIW1faW1h
Z2VMb2FkZXIuaW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbV9pbWFn
ZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUoMS4wZikuaGVpZ2h0KCk7CisgICAgcmV0dXJuIG1f
aW1hZ2VMb2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyKCksIDEuMGYpLmhlaWdodCgp
OwogfQogCiBib29sIEhUTUxJbWFnZUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSog
YXR0cikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAkocmV2
aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBJbWFnZURvY3VtZW50UGFyc2Vy
OjpmaW5pc2goKQogCiAgICAgICAgIC8vIFJlcG9ydCB0aGUgbmF0dXJhbCBpbWFnZSBzaXplIGlu
IHRoZSBwYWdlIHRpdGxlLCByZWdhcmRsZXNzIG9mIHpvb20KICAgICAgICAgLy8gbGV2ZWwuCi0g
ICAgICAgIExheW91dFNpemUgc2l6ZSA9IGNhY2hlZEltYWdlLT5pbWFnZVNpemUoMS4wZik7Cisg
ICAgICAgIExheW91dFNpemUgc2l6ZSA9IGNhY2hlZEltYWdlLT5pbWFnZVNpemUoZG9jdW1lbnQo
KS0+aW1hZ2VFbGVtZW50KCktPnJlbmRlcmVyKCksIDEuMGYpOwogICAgICAgICBpZiAoc2l6ZS53
aWR0aCgpKSB7CiAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSB0aXRsZSwgd2UgdXNlIHRoZSBk
ZWNvZGVkIGZpbGVuYW1lIG9mIHRoZSByZXNvdXJjZSwgZmFsbGluZwogICAgICAgICAgICAgLy8g
YmFjayBvbiB0aGUgKGRlY29kZWQpIGhvc3RuYW1lIGlmIHRoZXJlIGlzIG5vIHBhdGguCkBAIC0y
MzMsNyArMjMzLDcgQEAgZmxvYXQgSW1hZ2VEb2N1bWVudDo6c2NhbGUoKSBjb25zdAogICAgIGlm
ICghdmlldykKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9
IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUocGFnZVpvb21GYWN0b3Io
dGhpcykpOworICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hl
ZEltYWdlKCktPmltYWdlU2l6ZShtX2ltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSwgcGFnZVpvb21G
YWN0b3IodGhpcykpOwogICAgIExheW91dFNpemUgd2luZG93U2l6ZSA9IEludFNpemUodmlldy0+
d2lkdGgoKSwgdmlldy0+aGVpZ2h0KCkpOwogICAgIAogICAgIGZsb2F0IHdpZHRoU2NhbGUgPSAo
ZmxvYXQpd2luZG93U2l6ZS53aWR0aCgpIC8gaW1hZ2VTaXplLndpZHRoKCk7CkBAIC0yNDcsNyAr
MjQ3LDcgQEAgdm9pZCBJbWFnZURvY3VtZW50OjpyZXNpemVJbWFnZVRvRml0KCkKICAgICBpZiAo
IW1faW1hZ2VFbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRTaXplIGltYWdl
U2l6ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUocGFnZVpvb21G
YWN0b3IodGhpcykpOworICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQt
PmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShtX2ltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSwgcGFn
ZVpvb21GYWN0b3IodGhpcykpOwogCiAgICAgZmxvYXQgc2NhbGUgPSB0aGlzLT5zY2FsZSgpOwog
ICAgIG1faW1hZ2VFbGVtZW50LT5zZXRXaWR0aChzdGF0aWNfY2FzdDxpbnQ+KGltYWdlU2l6ZS53
aWR0aCgpICogc2NhbGUpKTsKQEAgLTI4Nyw3ICsyODcsNyBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6
OmltYWdlVXBkYXRlZCgpCiAgICAgaWYgKG1faW1hZ2VTaXplSXNLbm93bikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUo
cGFnZVpvb21GYWN0b3IodGhpcykpLmlzRW1wdHkoKSkKKyAgICBpZiAobV9pbWFnZUVsZW1lbnQt
PmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShtX2ltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSwgcGFn
ZVpvb21GYWN0b3IodGhpcykpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IG1faW1hZ2VTaXplSXNLbm93biA9IHRydWU7CkBAIC0zMDMsOCArMzAzLDkgQEAgdm9pZCBJbWFn
ZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VTaXplKCkKICAgICBpZiAoIW1faW1hZ2VFbGVtZW50IHx8
ICFtX2ltYWdlU2l6ZUlzS25vd24pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX2ltYWdl
RWxlbWVudC0+c2V0V2lkdGgobV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6
ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSkud2lkdGgoKSk7Ci0gICAgbV9pbWFnZUVsZW1lbnQtPnNl
dEhlaWdodChtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKHBhZ2Vab29t
RmFjdG9yKHRoaXMpKS5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdl
RWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKG1faW1hZ2VFbGVtZW50LT5yZW5kZXJl
cigpLCBwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CisgICAgbV9pbWFnZUVsZW1lbnQtPnNldFdpZHRo
KGltYWdlU2l6ZS53aWR0aCgpKTsKKyAgICBtX2ltYWdlRWxlbWVudC0+c2V0SGVpZ2h0KGltYWdl
U2l6ZS5oZWlnaHQoKSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBpZiAoaW1h
Z2VGaXRzSW5XaW5kb3coKSkKQEAgLTMyNCw3ICszMjUsNyBAQCBib29sIEltYWdlRG9jdW1lbnQ6
OmltYWdlRml0c0luV2luZG93KCkgCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hlZElt
YWdlKCktPmltYWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CisgICAgTGF5b3V0U2l6ZSBp
bWFnZVNpemUgPSBtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKG1faW1h
Z2VFbGVtZW50LT5yZW5kZXJlcigpLCBwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CiAgICAgTGF5b3V0
U2l6ZSB3aW5kb3dTaXplID0gTGF5b3V0U2l6ZSh2aWV3LT53aWR0aCgpLCB2aWV3LT5oZWlnaHQo
KSk7CiAgICAgCiAgICAgcmV0dXJuIGltYWdlU2l6ZS53aWR0aCgpIDw9IHdpbmRvd1NpemUud2lk
dGgoKSAmJiBpbWFnZVNpemUuaGVpZ2h0KCkgPD0gd2luZG93U2l6ZS5oZWlnaHQoKTsgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIyMCw3ICsxMjIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFwcGx5U2hh
ZAogc3RhdGljIExheW91dFNpemUgc2l6ZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSkKIHsKICAg
ICBpZiAoQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdlKCkpCi0g
ICAgICAgIHJldHVybiBjYWNoZWRJbWFnZS0+aW1hZ2VTaXplKDEuMGYpOyAvLyBGSVhNRTogTm90
IHN1cmUgYWJvdXQgdGhpcy4KKyAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlLT5pbWFnZVNpemUo
aW1hZ2UtPnJlbmRlcmVyKCksIDEuMGYpOyAvLyBGSVhNRTogTm90IHN1cmUgYWJvdXQgdGhpcy4K
ICAgICByZXR1cm4gSW50U2l6ZSgpOwogfQogCkBAIC0xMzIwLDcgKzEzMjAsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAKICAgICBjaGVja09yaWdpbihpbWFn
ZSk7CiAKLSAgICBjLT5kcmF3SW1hZ2UoY2FjaGVkSW1hZ2UtPmltYWdlKCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIG5vcm1hbGl6ZWREc3RSZWN0LCBub3JtYWxpemVkU3JjUmVjdCwgb3ApOworICAg
IGMtPmRyYXdJbWFnZShpbWFnZS0+cmVuZGVyZXIoKSwgY2FjaGVkSW1hZ2UtPmltYWdlKCksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIG5vcm1hbGl6ZWREc3RSZWN0LCBub3JtYWxpemVkU3JjUmVjdCwg
b3ApOwogICAgIGRpZERyYXcobm9ybWFsaXplZERzdFJlY3QpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEwNyw3ICszMTA3LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbQogICAgIH0KICAgICBpZiAobV91
bnBhY2tBbGlnbm1lbnQgIT0gMSkKICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4SW1hZ2UyREJhc2Uo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVp
Z2h0KCksIDAsCisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGltYWdlLT53aWR0aCgwKSwgaW1hZ2UtPmhlaWdodCgwKSwgMCwKICAgICAgICAgICAgICAg
ICAgICBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpLCBlYyk7CiAgICAgaWYgKG1fdW5wYWNrQWxp
Z25tZW50ICE9IDEpCiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKQEAgLTMzMTYsNyAr
MzMxNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2Uo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5o
ZWlnaHQoKSwKKyAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCBpbWFnZS0+d2lkdGgoMCksIGltYWdlLT5oZWlnaHQoMCksCiAgICAgICAgICAgICAg
ICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSwgZWMpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDk2Njk4
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ2LDEwICsxNDYsMTAgQEAgSW1hZ2UqIENhY2hlZEltYWdlOjppbWFnZSgp
IGNvbnN0CiAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKIH0KIAotdm9pZCBDYWNoZWRJ
bWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUp
Cit2b2lkIENhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoSW1hZ2VVc2VyIHVzZXIs
IGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUpCiB7CiAgICAgaWYgKG1faW1hZ2UpCi0gICAg
ICAgIG1faW1hZ2UtPnNldENvbnRhaW5lclNpemUoY29udGFpbmVyU2l6ZSk7CisgICAgICAgIG1f
aW1hZ2UtPnNldENvbnRhaW5lclNpemUodXNlciwgY29udGFpbmVyU2l6ZSk7CiB9CiAKIGJvb2wg
Q2FjaGVkSW1hZ2U6OnVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdApAQCAtMTc2LDIwICsx
NzYsMjIgQEAgYm9vbCBDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotSW50U2l6ZSBDYWNoZWRJbWFnZTo6aW1hZ2VTaXplKGZsb2F0IG11
bHRpcGxpZXIpIGNvbnN0CitJbnRTaXplIENhY2hlZEltYWdlOjppbWFnZVNpemUoSW1hZ2VVc2Vy
IHVzZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc1B1cmdlYWJs
ZSgpKTsKIAogICAgIGlmICghbV9pbWFnZSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKwor
ICAgIEludFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZS0+c2l6ZSh1c2VyKTsKICAgICBpZiAobXVs
dGlwbGllciA9PSAxLjBmKQotICAgICAgICByZXR1cm4gbV9pbWFnZS0+c2l6ZSgpOwotICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIGltYWdlU2l6ZTsKKwogICAgIC8vIERvbid0IGxldCBpbWFnZXMg
dGhhdCBoYXZlIGEgd2lkdGgvaGVpZ2h0ID49IDEgc2hyaW5rIGJlbG93IDEgd2hlbiB6b29tZWQu
Ci0gICAgYm9vbCBoYXNXaWR0aCA9IG1faW1hZ2UtPnNpemUoKS53aWR0aCgpID4gMDsKLSAgICBi
b29sIGhhc0hlaWdodCA9IG1faW1hZ2UtPnNpemUoKS5oZWlnaHQoKSA+IDA7Ci0gICAgaW50IHdp
ZHRoID0gbV9pbWFnZS0+c2l6ZSgpLndpZHRoKCkgKiAobV9pbWFnZS0+aGFzUmVsYXRpdmVXaWR0
aCgpID8gMS4wZiA6IG11bHRpcGxpZXIpOwotICAgIGludCBoZWlnaHQgPSBtX2ltYWdlLT5zaXpl
KCkuaGVpZ2h0KCkgKiAobV9pbWFnZS0+aGFzUmVsYXRpdmVIZWlnaHQoKSA/IDEuMGYgOiBtdWx0
aXBsaWVyKTsKKyAgICBib29sIGhhc1dpZHRoID0gaW1hZ2VTaXplLndpZHRoKCkgPiAwOworICAg
IGJvb2wgaGFzSGVpZ2h0ID0gaW1hZ2VTaXplLmhlaWdodCgpID4gMDsKKyAgICBpbnQgd2lkdGgg
PSBpbWFnZVNpemUud2lkdGgoKSAqIChtX2ltYWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCkgPyAxLjBm
IDogbXVsdGlwbGllcik7CisgICAgaW50IGhlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQoKSAqICht
X2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpID8gMS4wZiA6IG11bHRpcGxpZXIpOwogICAgIGlm
IChoYXNXaWR0aCkKICAgICAgICAgd2lkdGggPSBtYXgoMSwgd2lkdGgpOwogICAgIGlmIChoYXNI
ZWlnaHQpCkBAIC0xOTcsMzEgKzE5OSwzMyBAQCBJbnRTaXplIENhY2hlZEltYWdlOjppbWFnZVNp
emUoZmxvYXQgbXVsCiAgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7CiB9CiAKLUlu
dFJlY3QgQ2FjaGVkSW1hZ2U6OmltYWdlUmVjdChmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAorSW50
UmVjdCBDYWNoZWRJbWFnZTo6aW1hZ2VSZWN0KEltYWdlVXNlciB1c2VyLCBmbG9hdCBtdWx0aXBs
aWVyKSBjb25zdAogewogICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7CiAKICAgICBpZiAoIW1f
aW1hZ2UpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBJbnRSZWN0IGltYWdlUmVj
dCA9IG1faW1hZ2UtPnJlY3QodXNlcik7CiAgICAgaWYgKG11bHRpcGxpZXIgPT0gMS4wZiB8fCAo
IW1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKSAmJiAhbV9pbWFnZS0+aGFzUmVsYXRpdmVIZWln
aHQoKSkpCi0gICAgICAgIHJldHVybiBtX2ltYWdlLT5yZWN0KCk7CisgICAgICAgIHJldHVybiBp
bWFnZVJlY3Q7CiAKICAgICBmbG9hdCB3aWR0aE11bHRpcGxpZXIgPSAobV9pbWFnZS0+aGFzUmVs
YXRpdmVXaWR0aCgpID8gMS4wZiA6IG11bHRpcGxpZXIpOwogICAgIGZsb2F0IGhlaWdodE11bHRp
cGxpZXIgPSAobV9pbWFnZS0+aGFzUmVsYXRpdmVIZWlnaHQoKSA/IDEuMGYgOiBtdWx0aXBsaWVy
KTsKIAogICAgIC8vIERvbid0IGxldCBpbWFnZXMgdGhhdCBoYXZlIGEgd2lkdGgvaGVpZ2h0ID49
IDEgc2hyaW5rIGJlbG93IDEgd2hlbiB6b29tZWQuCi0gICAgYm9vbCBoYXNXaWR0aCA9IG1faW1h
Z2UtPnJlY3QoKS53aWR0aCgpID4gMDsKLSAgICBib29sIGhhc0hlaWdodCA9IG1faW1hZ2UtPnJl
Y3QoKS5oZWlnaHQoKSA+IDA7CisgICAgYm9vbCBoYXNXaWR0aCA9IGltYWdlUmVjdC53aWR0aCgp
ID4gMDsKKyAgICBib29sIGhhc0hlaWdodCA9IGltYWdlUmVjdC5oZWlnaHQoKSA+IDA7CiAKLSAg
ICBpbnQgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KG1faW1hZ2UtPnJlY3QoKS53aWR0aCgpICog
d2lkdGhNdWx0aXBsaWVyKTsKLSAgICBpbnQgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihtX2lt
YWdlLT5yZWN0KCkuaGVpZ2h0KCkgKiBoZWlnaHRNdWx0aXBsaWVyKTsKKyAgICBpbnQgd2lkdGgg
PSBzdGF0aWNfY2FzdDxpbnQ+KGltYWdlUmVjdC53aWR0aCgpICogd2lkdGhNdWx0aXBsaWVyKTsK
KyAgICBpbnQgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihpbWFnZVJlY3QuaGVpZ2h0KCkgKiBo
ZWlnaHRNdWx0aXBsaWVyKTsKICAgICBpZiAoaGFzV2lkdGgpCiAgICAgICAgIHdpZHRoID0gbWF4
KDEsIHdpZHRoKTsKICAgICBpZiAoaGFzSGVpZ2h0KQogICAgICAgICBoZWlnaHQgPSBtYXgoMSwg
aGVpZ2h0KTsKIAotICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihtX2ltYWdlLT5yZWN0KCku
eCgpICogd2lkdGhNdWx0aXBsaWVyKTsKLSAgICBpbnQgeSA9IHN0YXRpY19jYXN0PGludD4obV9p
bWFnZS0+cmVjdCgpLnkoKSAqIGhlaWdodE11bHRpcGxpZXIpOworICAgIGludCB4ID0gc3RhdGlj
X2Nhc3Q8aW50PihpbWFnZVJlY3QueCgpICogd2lkdGhNdWx0aXBsaWVyKTsKKyAgICBpbnQgeSA9
IHN0YXRpY19jYXN0PGludD4oaW1hZ2VSZWN0LnkoKSAqIGhlaWdodE11bHRpcGxpZXIpOwogCiAg
ICAgcmV0dXJuIEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CkBAIC0yOTcsNyArMzAx
LDcgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGF0YShQYXNzUmVmUHRyPFNoYXJlZAogICAgIC8vIHRv
IGRlY29kZS4KICAgICBpZiAoc2l6ZUF2YWlsYWJsZSB8fCBhbGxEYXRhUmVjZWl2ZWQpIHsKICAg
ICAgICAgc2l6ZV90IG1heERlY29kZWRJbWFnZVNpemUgPSBtYXhpbXVtRGVjb2RlZEltYWdlU2l6
ZSgpOwotICAgICAgICBJbnRTaXplIHMgPSBpbWFnZVNpemUoMS4wZik7CisgICAgICAgIEludFNp
emUgcyA9IGltYWdlU2l6ZSgwLCAxLjBmKTsKICAgICAgICAgc2l6ZV90IGVzdGltYXRlZERlY29k
ZWRJbWFnZVNpemUgPSBzLndpZHRoKCkgKiBzLmhlaWdodCgpICogNDsgLy8gbm8gb3ZlcmZsb3cg
Y2hlY2sKICAgICAgICAgaWYgKG1faW1hZ2UtPmlzTnVsbCgpIHx8IChtYXhEZWNvZGVkSW1hZ2VT
aXplID4gMCAmJiBlc3RpbWF0ZWREZWNvZGVkSW1hZ2VTaXplID4gbWF4RGVjb2RlZEltYWdlU2l6
ZSkpIHsKICAgICAgICAgICAgIGVycm9yKGVycm9yT2NjdXJyZWQoKSA/IHN0YXR1cygpIDogRGVj
b2RlRXJyb3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmgJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgQ2FjaGVk
SW1hZ2VfaAogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbWFnZS5o
IgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKQEAgLTUwLDE4ICs1MSwxOCBAQCBwdWJsaWM6CiAgICAgc3RkOjpwYWly
PEltYWdlKiwgZmxvYXQ+IGJyb2tlbkltYWdlKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKSBjb25z
dDsgLy8gUmV0dXJucyBhbiBpbWFnZSBhbmQgdGhlIGltYWdlJ3MgcmVzb2x1dGlvbiBzY2FsZSBm
YWN0b3IuCiAgICAgYm9vbCB3aWxsUGFpbnRCcm9rZW5JbWFnZSgpIGNvbnN0OyAKIAotICAgIGJv
b2wgY2FuUmVuZGVyKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0IHsgcmV0dXJuICFlcnJvck9jY3Vy
cmVkKCkgJiYgIWltYWdlU2l6ZShtdWx0aXBsaWVyKS5pc0VtcHR5KCk7IH0KKyAgICBib29sIGNh
blJlbmRlcihmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCB7IHJldHVybiAhZXJyb3JPY2N1cnJlZCgp
ICYmICFpbWFnZVNpemUoMCwgbXVsdGlwbGllcikuaXNFbXB0eSgpOyB9CiAKICAgICAvLyBUaGVz
ZSBhcmUgb25seSB1c2VkIGZvciBTVkdJbWFnZSByaWdodCBub3cKLSAgICB2b2lkIHNldEltYWdl
Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBzZXRJbWFnZUNvbnRhaW5l
clNpemUoSW1hZ2VVc2VyLCBjb25zdCBJbnRTaXplJik7CiAgICAgYm9vbCB1c2VzSW1hZ2VDb250
YWluZXJTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25z
dDsKICAgICBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKICAgICAKICAgICAv
LyBCb3RoIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBhIHpvb20gbXVsdGlwbGllciB0aGF0IGNhbiBi
ZSB1c2VkIHRvIGluY3JlYXNlIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIGltYWdlIGJ5IHRoZQog
ICAgIC8vIHpvb20uCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoZmxvYXQgbXVsdGlwbGllcikgY29u
c3Q7ICAvLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBpbWFnZS4KLSAgICBJbnRS
ZWN0IGltYWdlUmVjdChmbG9hdCBtdWx0aXBsaWVyKSBjb25zdDsgIC8vIFRoZSBzaXplIG9mIHRo
ZSBjdXJyZW50bHkgZGVjb2RlZCBwb3J0aW9uIG9mIHRoZSBpbWFnZS4KKyAgICBJbnRTaXplIGlt
YWdlU2l6ZShJbWFnZVVzZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0OyAvLyByZXR1cm5zIHRo
ZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBpbWFnZS4KKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbWFn
ZVVzZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0OyAvLyBUaGUgc2l6ZSBvZiB0aGUgY3VycmVu
dGx5IGRlY29kZWQgcG9ydGlvbiBvZiB0aGUgaW1hZ2UuCiAKICAgICB2aXJ0dWFsIHZvaWQgZGlk
QWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CiAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzg2LDcgKzc4
Niw4IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VEcmFnKEVsZW1lbnQKICAgICBJbnRQ
b2ludCBvcmlnaW47CiAKICAgICBJbWFnZSogaW1hZ2UgPSBnZXRJbWFnZShlbGVtZW50KTsKLSAg
ICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSAqIGltYWdlLT5zaXplKCkud2lk
dGgoKSA8PSBNYXhPcmlnaW5hbEltYWdlQXJlYQorICAgIEludFNpemUgaW1hZ2VTaXplID0gaW1h
Z2UtPnNpemUoZWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgaWYgKGltYWdlICYmIGltYWdlU2l6
ZS5oZWlnaHQoKSAqIGltYWdlU2l6ZS53aWR0aCgpIDw9IE1heE9yaWdpbmFsSW1hZ2VBcmVhCiAg
ICAgICAgICYmIChkcmFnSW1hZ2UgPSBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoaW1hZ2UpKSkg
ewogICAgICAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZSA9IHJlY3Quc2l6ZSgpOwogICAgICAgICBv
cmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxMCw3ICsxMjEwLDcgQEAgT3B0aW9uYWxDdXJz
b3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzbwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgSW50UG9pbnQgaG90U3BvdCA9ICgqY3Vyc29ycylbaV0uaG90U3BvdCgpOwog
ICAgICAgICAgICAgLy8gTGltaXQgdGhlIHNpemUgb2YgY3Vyc29ycyBzbyB0aGF0IHRoZXkgY2Fu
bm90IGJlIHVzZWQgdG8gY292ZXIgVUkgZWxlbWVudHMgaW4gY2hyb21lLgotICAgICAgICAgICAg
SW50U2l6ZSBzaXplID0gY2ltYWdlLT5pbWFnZSgpLT5zaXplKCk7CisgICAgICAgICAgICBJbnRT
aXplIHNpemUgPSBjaW1hZ2UtPmltYWdlKCktPnNpemUoMCk7CiAgICAgICAgICAgICBpZiAoc2l6
ZS53aWR0aCgpID4gMTI4IHx8IHNpemUuaGVpZ2h0KCkgPiAxMjgpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBpZiAoIWNpbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2
LDcgQEAgSW50UG9pbnQgZGV0ZXJtaW5lSG90U3BvdChJbWFnZSogaW1hZ2UsIAogICAgICAgICBy
ZXR1cm4gSW50UG9pbnQoKTsKIAogICAgIC8vIEhvdCBzcG90IG11c3QgYmUgaW5zaWRlIGN1cnNv
ciByZWN0YW5nbGUuCi0gICAgSW50UmVjdCBpbWFnZVJlY3QgPSBpbWFnZS0+cmVjdCgpOworICAg
IEludFJlY3QgaW1hZ2VSZWN0ID0gaW1hZ2UtPnJlY3QoMCk7CiAgICAgaWYgKGltYWdlUmVjdC5j
b250YWlucyhzcGVjaWZpZWRIb3RTcG90KSkKICAgICAgICAgcmV0dXJuIHNwZWNpZmllZEhvdFNw
b3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lv
biA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NzQsOCArOTc0LDkgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWludFNjcm9s
bGJhcnMoR3JhcGhpYwogCiB2b2lkIFNjcm9sbFZpZXc6OnBhaW50UGFuU2Nyb2xsSWNvbihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQpCiB7CisgICAgLy8gUGFzc2luZyAwIGFzIEltYWdlVXNlciBh
cyBmaW5lIGFzIHRoZSBwYW5JY29uIGlzIG5vdCBhIFNWRyBpbWFnZS4KICAgICBzdGF0aWMgSW1h
Z2UqIHBhblNjcm9sbEljb24gPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInBhbkljb24i
KS5sZWFrUmVmKCk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdlKHBhblNjcm9sbEljb24sIENvbG9y
U3BhY2VEZXZpY2VSR0IsIG1fcGFuU2Nyb2xsSWNvblBvaW50KTsKKyAgICBjb250ZXh0LT5kcmF3
SW1hZ2UoMCwgcGFuU2Nyb2xsSWNvbiwgQ29sb3JTcGFjZURldmljZVJHQiwgbV9wYW5TY3JvbGxJ
Y29uUG9pbnQpOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bU1hYy5jcHAJKHJl
dmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0lt
YWdlQ2hyb21pdW1NYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgRHJh
Z0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbQogewogICAgIGlmICghaW1hZ2Up
CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBDR0ltYWdlQ3JlYXRlQ29weShpbWFnZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIENHSW1hZ2VDcmVhdGVD
b3B5KGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKSk7CiB9CiAKIERyYWdJbWFn
ZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UqKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFn
SW1hZ2VDaHJvbWl1bVNraWEuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtU2tpYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk2LDcgKzk2LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFn
ZShJbQogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgTmF0aXZlSW1h
Z2VTa2lhKiBiaXRtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICBOYXRpdmVJbWFnZVNraWEqIGJpdG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgwKTsKICAgICBpZiAoIWJpdG1hcCkKICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENo
cm9taXVtLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyAr
MTMzLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIElt
YWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOwogICAgIEFTU0VSVChpbWFnZSk7CiAK
LSAgICBOYXRpdmVJbWFnZVB0ciBiaXRtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBiaXRtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUocmVuZGVyZXIpOwogICAgIGlmICghYml0bWFwKQogICAgICAgICByZXR1
cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGlkRGVjb2RlUHJvcGVydGllcygpIAogICAgICAgICBpbWFn
ZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCBkZWx0YUJ5dGVzKTsKIH0KIAot
SW50U2l6ZSBCaXRtYXBJbWFnZTo6c2l6ZSgpIGNvbnN0CitJbnRTaXplIEJpdG1hcEltYWdlOjpz
aXplKEltYWdlVXNlcikgY29uc3QKIHsKICAgICBpZiAobV9zaXplQXZhaWxhYmxlICYmICFtX2hh
dmVTaXplKSB7CiAgICAgICAgIG1fc2l6ZSA9IG1fc291cmNlLnNpemUoKTsKQEAgLTE4MCw3ICsx
ODAsNyBAQCBJbnRTaXplIEJpdG1hcEltYWdlOjpzaXplKCkgY29uc3QKIEludFNpemUgQml0bWFw
SW1hZ2U6OmN1cnJlbnRGcmFtZVNpemUoKSBjb25zdAogewogICAgIGlmICghbV9jdXJyZW50RnJh
bWUgfHwgbV9oYXNVbmlmb3JtRnJhbWVTaXplKQotICAgICAgICByZXR1cm4gc2l6ZSgpOworICAg
ICAgICByZXR1cm4gc2l6ZSgwKTsKICAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IG1fc291cmNlLmZy
YW1lU2l6ZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogICAgIGRpZERlY29kZVByb3BlcnRpZXMo
KTsKICAgICByZXR1cm4gZnJhbWVTaXplOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2luZ2xlU2Vj
dXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIEludFNp
emUgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKEltYWdlVXNlcikgY29u
c3Q7CiAgICAgSW50U2l6ZSBjdXJyZW50RnJhbWVTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGdldEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdDsKIApAQCAtMTUzLDE0ICsxNTMsMTQgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgR2RrUGl4YnVmKiBnZXRHZGtQaXhidWYoKTsKICNlbmRpZgog
Ci0gICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
IHsgcmV0dXJuIGZyYW1lQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICB2aXJ0dWFsIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKEltYWdlVXNlcikgeyByZXR1
cm4gZnJhbWVBdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQogICAgIGJvb2wgZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90KTsKICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEo
KSB7IHJldHVybiBmcmFtZUhhc0FscGhhQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KIAogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXJ0dWFsIGJvb2wgbm90U29saWRDb2xvcigpCiAgICAg
ewotICAgICAgICByZXR1cm4gc2l6ZSgpLndpZHRoKCkgIT0gMSB8fCBzaXplKCkuaGVpZ2h0KCkg
IT0gMSB8fCBmcmFtZUNvdW50KCkgPiAxOworICAgICAgICByZXR1cm4gc2l6ZSgwKS53aWR0aCgp
ICE9IDEgfHwgc2l6ZSgwKS5oZWlnaHQoKSAhPSAxIHx8IGZyYW1lQ291bnQoKSA+IDE7CiAgICAg
fQogI2VuZGlmCiAKQEAgLTE3NSwxMiArMTc1LDEyIEBAIHByb3RlY3RlZDoKICAgICBCaXRtYXBJ
bWFnZShJbWFnZU9ic2VydmVyKiA9IDApOwogCiAjaWYgUExBVEZPUk0oV0lOKQotICAgIHZpcnR1
YWwgdm9pZCBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAjZW5kaWYKLSAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhJbWFnZVVzZXIsIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwog
CiAjaWYgKE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d1BhdHRlcm4oSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2VuZXJhdGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDEyICsyOSwxMSBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLXVzaW5nIG5h
bWVzcGFjZSBzdGQ7CisjaW5jbHVkZSAiTGVuZ3RoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgR2VuZXJhdGVkSW1hZ2U6
OmRyYXcoSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoKmNvbnRleHQpOwogICAgIGNvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlv
bihjb21wb3NpdGVPcCk7CkBAIC00Niw3ICs0NSw3IEBAIHZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXgKICAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBtX3NpemUpLCAqbV9nZW5lcmF0b3IuZ2V0KCkpOwogfQogCi12b2lkIEdlbmVyYXRl
ZEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAor
dm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4oSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsK
ICAgICAvLyBBbGxvdyB0aGUgZ2VuZXJhdG9yIHRvIHByb3ZpZGUgdmlzdWFsbHktZXF1aXZhbGVu
dCB0aWxpbmcgcGFyYW1ldGVycyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCShyZXZp
c2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRl
ZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDIxICs0NCwyMSBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKLSAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGZvciBTVkdHZW5lcmF0ZWRJbWFn
ZSByaWdodCBub3cKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2Vk
IGZvciBTVkdJbWFnZSByaWdodCBub3cKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6
ZShJbWFnZVVzZXIsIGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQogICAg
IHZpcnR1YWwgYm9vbCB1c2VzQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQorICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKEltYWdlVXNlcikgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CiAKICAgICAvLyBBc3N1bWUgdGhhdCBnZW5lcmF0ZWQgY29udGVudCBoYXMgbm8g
ZGVjb2RlZCBkYXRhIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQKICAgICB2aXJ0dWFsIHZvaWQgZGVz
dHJveURlY29kZWREYXRhKGJvb2wgLypkZXN0cm95QWxsKi8gPSB0cnVlKSB7IH0KICAgICB2aXJ0
dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgIHZpcnR1YWwgdm9pZCBkcmF3KElt
YWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlVXNlciwgR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwogICAgIAogICAgIEdlbmVy
YXRlZEltYWdlKFBhc3NSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IsIGNvbnN0IEludFNpemUm
IHNpemUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg2LDcgKzE4Niw4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFn
ZURhdGEKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgLy8gVGhlIGltYWdlIGRh
dGEgaXMgdGlnaHRseSBwYWNrZWQsIGFuZCB3ZSB1cGxvYWQgaXQgYXMgc3VjaC4KICAgICAgICAg
dW5zaWduZWQgaW50IHVucGFja0FsaWdubWVudCA9IDE7Ci0gICAgICAgIGZsaXBWZXJ0aWNhbGx5
KGRhdGEuZGF0YSgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLAorICAgICAgICAv
LyBUaGlzIG1ldGhvZCBpcyBuZXZlciB1c2VkIHRvIGRyYXcgYW4gU1ZHSW1hZ2UsIHNvIHBhc3Np
bmcgMCBhcyBJbWFnZVVzZXIgaXMgZmluZS4KKyAgICAgICAgZmxpcFZlcnRpY2FsbHkoZGF0YS5k
YXRhKCksIGltYWdlLT53aWR0aCgwKSwgaW1hZ2UtPmhlaWdodCgwKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHVucGFja0FsaWdubWVudCk7CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShy
ZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNywyNyArNDM3LDI3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3SGlnaGxpZ2h0Rm9yVGUKICAgICBmaWxsUmVjdChmb250LnNl
bGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgcG9pbnQsIGgsIGZyb20sIHRvKSwgYmFja2dyb3VuZENv
bG9yLCBjb2xvclNwYWNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJ
bWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYg
cCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
KEltYWdlVXNlciB1c2VyLCBJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBjb25zdCBJbnRQb2ludCYgcCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7Ci0gICAgZHJhd0lt
YWdlKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIHAsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3Ap
OworICAgIGRyYXdJbWFnZSh1c2VyLCBpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBwLCBJbnRSZWN0
KDAsIDAsIC0xLCAtMSksIG9wKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0
JiByLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlVXNlciB1c2VyLCBJbWFnZSogaW1hZ2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7Ci0gICAgZHJhd0ltYWdlKGlt
YWdlLCBzdHlsZUNvbG9yU3BhY2UsIHIsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3AsIHVzZUxv
d1F1YWxpdHlTY2FsZSk7CisgICAgZHJhd0ltYWdlKHVzZXIsIGltYWdlLCBzdHlsZUNvbG9yU3Bh
Y2UsIHIsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3QsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZVVzZXIgdXNlciwgSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wKQogewotICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNw
YWNlLCBJbnRSZWN0KGRlc3QsIHNyY1JlY3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOworICAgIGRy
YXdJbWFnZSh1c2VyLCBpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBJbnRSZWN0KGRlc3QsIHNyY1Jl
Y3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IElu
dFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2VVc2VyIHVzZXIsIEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKLSAgICBkcmF3SW1hZ2Uo
aW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNl
TG93UXVhbGl0eVNjYWxlKTsKKyAgICBkcmF3SW1hZ2UodXNlciwgaW1hZ2UsIHN0eWxlQ29sb3JT
cGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlVXNlciB1c2VyLCBJbWFnZSog
aW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dR
dWFsaXR5U2NhbGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKQEAgLTQ2OCwyNiArNDY4LDI2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UoSW1hZ2UqIGkKICAgICBmbG9hdCB0aCA9IGRlc3QuaGVpZ2h0KCk7CiAKICAg
ICBpZiAodHN3ID09IC0xKQotICAgICAgICB0c3cgPSBpbWFnZS0+d2lkdGgoKTsKKyAgICAgICAg
dHN3ID0gaW1hZ2UtPndpZHRoKHVzZXIpOwogICAgIGlmICh0c2ggPT0gLTEpCi0gICAgICAgIHRz
aCA9IGltYWdlLT5oZWlnaHQoKTsKKyAgICAgICAgdHNoID0gaW1hZ2UtPmhlaWdodCh1c2VyKTsK
IAogICAgIGlmICh0dyA9PSAtMSkKLSAgICAgICAgdHcgPSBpbWFnZS0+d2lkdGgoKTsKKyAgICAg
ICAgdHcgPSBpbWFnZS0+d2lkdGgodXNlcik7CiAgICAgaWYgKHRoID09IC0xKQotICAgICAgICB0
aCA9IGltYWdlLT5oZWlnaHQoKTsKKyAgICAgICAgdGggPSBpbWFnZS0+aGVpZ2h0KHVzZXIpOwog
CiAgICAgaWYgKHVzZUxvd1F1YWxpdHlTY2FsZSkgewogICAgICAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBwcmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSgpOwogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIGJlIEludGVycG9sYXRpb25Mb3cKICAg
ICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTm9uZSk7Ci0g
ICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0
U2l6ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0
c2gpKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGltYWdlLT5kcmF3KHVzZXIsIHRo
aXMsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRS
ZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgc3R5bGVDb2xvclNwYWNl
LCBvcCk7CiAgICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkocHJldmlvdXNJbnRl
cnBvbGF0aW9uUXVhbGl0eSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGltYWdlLT5kcmF3KHRoaXMs
IEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRSZWN0
KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgc3R5bGVDb2xvclNwYWNlLCBv
cCk7CisgICAgICAgIGltYWdlLT5kcmF3KHVzZXIsIHRoaXMsIEZsb2F0UmVjdChkZXN0LmxvY2F0
aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9h
dFNpemUodHN3LCB0c2gpKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRQb2ludCYgc3JjUG9pbnQs
IGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1h
Z2VVc2VyIHVzZXIsIEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6
ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2Fs
ZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFpbWFnZSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDk1LDEzICs0OTUsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZEltYWdlKEltYQogICAgIGlmICh1c2VMb3dRdWFsaXR5U2NhbGUpIHsKICAgICAgICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgcHJldmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJ
bnRlcnBvbGF0aW9uTG93KTsKLSAgICAgICAgaW1hZ2UtPmRyYXdUaWxlZCh0aGlzLCByZWN0LCBz
cmNQb2ludCwgdGlsZVNpemUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICBpbWFnZS0+
ZHJhd1RpbGVkKHVzZXIsIHRoaXMsIHJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwgc3R5bGVDb2xv
clNwYWNlLCBvcCk7CiAgICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkocHJldmlv
dXNJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGltYWdlLT5kcmF3
VGlsZWQodGhpcywgcmVjdCwgc3JjUG9pbnQsIHRpbGVTaXplLCBzdHlsZUNvbG9yU3BhY2UsIG9w
KTsKKyAgICAgICAgaW1hZ2UtPmRyYXdUaWxlZCh1c2VyLCB0aGlzLCByZWN0LCBzcmNQb2ludCwg
dGlsZVNpemUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgSW50UmVjdCYgZGVzdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZVVzZXIgdXNlciwgSW1hZ2UqIGltYWdl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwKICAgICBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3Rvciwg
SW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpIHx8ICFpbWFnZSkKQEAgLTUwOSwxNyArNTA5LDE3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWEKIAogICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3Ry
ZXRjaFRpbGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKSB7CiAgICAgICAgIC8vIEp1
c3QgZG8gYSBzY2FsZS4KLSAgICAgICAgZHJhd0ltYWdlKGltYWdlLCBzdHlsZUNvbG9yU3BhY2Us
IGRlc3QsIHNyY1JlY3QsIG9wKTsKKyAgICAgICAgZHJhd0ltYWdlKHVzZXIsIGltYWdlLCBzdHls
ZUNvbG9yU3BhY2UsIGRlc3QsIHNyY1JlY3QsIG9wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmICh1c2VMb3dRdWFsaXR5U2NhbGUpIHsKICAgICAgICAgSW50ZXJwb2xhdGlvblF1
YWxpdHkgcHJldmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkoKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0
aW9uTG93KTsKLSAgICAgICAgaW1hZ2UtPmRyYXdUaWxlZCh0aGlzLCBkZXN0LCBzcmNSZWN0LCB0
aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAg
ICAgIGltYWdlLT5kcmF3VGlsZWQodXNlciwgdGhpcywgZGVzdCwgc3JjUmVjdCwgdGlsZVNjYWxl
RmFjdG9yLCBoUnVsZSwgdlJ1bGUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogICAgICAgICBzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkpOwog
ICAgIH0gZWxzZQotICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIGRlc3QsIHNyY1JlY3Qs
IHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAg
ICAgICAgaW1hZ2UtPmRyYXdUaWxlZCh1c2VyLCB0aGlzLCBkZXN0LCBzcmNSZWN0LCB0aWxlU2Nh
bGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIHAsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMiwx
NSArMzAyLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKTsKIAotICAgICAgICB2b2lkIGRy
YXdJbWFnZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2lu
dCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0gICAgICAgIHZv
aWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IElu
dFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNl
TG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwotICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSos
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJj
ZU92ZXIpOwotICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1
YWxpdHlTY2FsZSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksCisgICAgICAgIHZv
aWQgZHJhd0ltYWdlKEltYWdlVXNlciwgSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgSW50UG9pbnQmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92
ZXIpOworICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZVVzZXIsIEltYWdlKiwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENv
bXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOworICAg
ICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZVVzZXIsIEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgICAgIHZv
aWQgZHJhd0ltYWdlKEltYWdlVXNlciwgSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBv
c2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2Nh
bGUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlVXNlciwgSW1hZ2UqLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksCiAgICAgICAg
ICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlciwg
Ym9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd1RpbGVk
SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsCisgICAgICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2VVc2VyLCBJbWFnZSosIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50
UG9pbnQmIHNyY1BvaW50LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVz
ZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJ
bWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwKKyAgICAgICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJ
bWFnZVVzZXIsIEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1
bGUgaFJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSA9IElt
YWdlOjpTdHJldGNoVGlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVP
cGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0g
ZmFsc2UpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
Y3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxtYXRoLmg+CkBAIC04OCw3
ICs4OSw3IEBAIHZvaWQgSW1hZ2U6OmZpbGxXaXRoU29saWRDb2xvcihHcmFwaGljc0MKICAgICBj
dHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7CiB9CiAKLXZvaWQg
SW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBjb25zdCBGbG9hdFNpemUmIHNj
YWxlZFRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3ApCit2b2lkIEltYWdlOjpkcmF3VGlsZWQoSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRQb2ludCYg
c3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVkVGlsZVNpemUsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsgICAgCiAgICAgaWYgKG1heUZp
bGxXaXRoU29saWRDb2xvcigpKSB7CiAgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBk
ZXN0UmVjdCwgc29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKQEAgLTEwMCwxMiAr
MTAxLDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogYwogICAgIEFT
U0VSVCghaXNCaXRtYXBJbWFnZSgpIHx8IG5vdFNvbGlkQ29sb3IoKSk7CiAjZW5kaWYKIAotICAg
IEZsb2F0U2l6ZSBpbnRyaW5zaWNUaWxlU2l6ZSA9IHNpemUoKTsKLSAgICBpZiAoaGFzUmVsYXRp
dmVXaWR0aCgpKQotICAgICAgICBpbnRyaW5zaWNUaWxlU2l6ZS5zZXRXaWR0aChzY2FsZWRUaWxl
U2l6ZS53aWR0aCgpKTsKLSAgICBpZiAoaGFzUmVsYXRpdmVIZWlnaHQoKSkKLSAgICAgICAgaW50
cmluc2ljVGlsZVNpemUuc2V0SGVpZ2h0KHNjYWxlZFRpbGVTaXplLmhlaWdodCgpKTsKLQorICAg
IEZsb2F0U2l6ZSBpbnRyaW5zaWNUaWxlU2l6ZSA9IHNpemUodXNlcik7CiAgICAgRmxvYXRTaXpl
IHNjYWxlKHNjYWxlZFRpbGVTaXplLndpZHRoKCkgLyBpbnRyaW5zaWNUaWxlU2l6ZS53aWR0aCgp
LAogICAgICAgICAgICAgICAgICAgICBzY2FsZWRUaWxlU2l6ZS5oZWlnaHQoKSAvIGludHJpbnNp
Y1RpbGVTaXplLmhlaWdodCgpKTsKIApAQCAtMTIxLDE5ICsxMTcsMTkgQEAgdm9pZCBJbWFnZTo6
ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogYwogICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRZ
KChkZXN0UmVjdC55KCkgLSBvbmVUaWxlUmVjdC55KCkpIC8gc2NhbGUuaGVpZ2h0KCkpOwogICAg
ICAgICB2aXNpYmxlU3JjUmVjdC5zZXRXaWR0aChkZXN0UmVjdC53aWR0aCgpIC8gc2NhbGUud2lk
dGgoKSk7CiAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldEhlaWdodChkZXN0UmVjdC5oZWlnaHQo
KSAvIHNjYWxlLmhlaWdodCgpKTsKLSAgICAgICAgZHJhdyhjdHh0LCBkZXN0UmVjdCwgdmlzaWJs
ZVNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICBkcmF3KHVzZXIsIGN0eHQs
IGRlc3RSZWN0LCB2aXNpYmxlU3JjUmVjdCwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9
IEFmZmluZVRyYW5zZm9ybSgpLnNjYWxlTm9uVW5pZm9ybShzY2FsZS53aWR0aCgpLCBzY2FsZS5o
ZWlnaHQoKSk7CiAgICAgRmxvYXRSZWN0IHRpbGVSZWN0KEZsb2F0UG9pbnQoKSwgaW50cmluc2lj
VGlsZVNpemUpOyAgICAKLSAgICBkcmF3UGF0dGVybihjdHh0LCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgb25lVGlsZVJlY3QubG9jYXRpb24oKSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVz
dFJlY3QpOworICAgIGRyYXdQYXR0ZXJuKHVzZXIsIGN0eHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBvbmVUaWxlUmVjdC5sb2NhdGlvbigpLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0
UmVjdCk7CiAgICAgCiAgICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIAogLy8gRklYTUU6IE1lcmdl
IHdpdGggdGhlIG90aGVyIGRyYXdUaWxlZCBldmVudHVhbGx5LCBzaW5jZSB3ZSBuZWVkIGEgY29t
YmluYXRpb24gb2YgYm90aCBmb3Igc29tZSB0aGluZ3MuCi12b2lkIEltYWdlOjpkcmF3VGlsZWQo
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwKK3ZvaWQgSW1hZ2U6OmRyYXdUaWxlZChJbWFnZVVzZXIgdXNlciwg
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwKICAgICBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3Rvciwg
VGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7ICAgIAogICAgIGlmIChtYXlGaWxsV2l0aFNvbGlk
Q29sb3IoKSkgewpAQCAtMTYxLDEwICsxNTcsOSBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3Jh
cGhpY3NDb250ZXh0KiBjCiAgICAgICAgIHZQaGFzZSAtPSAoZHN0UmVjdC5oZWlnaHQoKSAtIHNj
YWxlZFRpbGVIZWlnaHQpIC8gMjsgCiAgICAgRmxvYXRQb2ludCBwYXR0ZXJuUGhhc2UoZHN0UmVj
dC54KCkgLSBoUGhhc2UsIGRzdFJlY3QueSgpIC0gdlBoYXNlKTsKICAgICAKLSAgICBkcmF3UGF0
dGVybihjdHh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwYXR0ZXJuUGhhc2UsIHN0eWxl
Q29sb3JTcGFjZSwgb3AsIGRzdFJlY3QpOworICAgIGRyYXdQYXR0ZXJuKHVzZXIsIGN0eHQsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBhdHRlcm5QaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBv
cCwgZHN0UmVjdCk7CiAKICAgICBzdGFydEFuaW1hdGlvbigpOwogfQogCi0KIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JN
KE1BQykKICNpZmRlZiBfX09CSkNfXwpAQCAtNjYsMTYgKzY2LDIxIEBAIHR5cGVkZWYgc3RydWN0
IF9HZGtQaXhidWYgR2RrUGl4YnVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFm
ZmluZVRyYW5zZm9ybTsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFz
cyBGbG9hdFNpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBSZW5kZXJCb3g7CiBj
bGFzcyBTaGFyZWRCdWZmZXI7Ci1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiAKIC8vIFRoaXMgY2xh
c3MgZ2V0cyBub3RpZmllZCB3aGVuIGFuIGltYWdlIGNyZWF0ZXMgb3IgZGVzdHJveXMgZGVjb2Rl
ZCBmcmFtZXMgYW5kIHdoZW4gaXQgYWR2YW5jZXMgYW5pbWF0aW9uIGZyYW1lcy4KIGNsYXNzIElt
YWdlT2JzZXJ2ZXI7CiAKKy8vIFR5cGljYWxseSBhIFJlbmRlck9iamVjdCBwb2ludGVyLCBpZGVu
dGlmeWluZyB0aGUgdXNlciBvZiB0aGUgaW1hZ2UuIFRoZSBpbnRyaW5zaWMgc2l6ZSBvZiBhbiBT
VkcgaW1hZ2UgbWF5IGRlcGVuZAorLy8gb24gdGhlIHBsYWNlIHdoZXJlIGl0cyBlbWJlZGRlZCAt
IHRodXMgYSBTVkdJbWFnZSBtYXkgcmVwb3J0IGRpZmZlcmVudCBzaXplcyBkZXBlbmRpbmcgb24g
dGhlICJ1c2VyIi4KK3R5cGVkZWYgY29uc3Qgdm9pZCogSW1hZ2VVc2VyOworCiBjbGFzcyBJbWFn
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlPiB7CiAgICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRl
ZEltYWdlOwogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBAIC04Nyw2ICs5Miw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gbG9hZFBsYXRmb3JtUmVz
b3VyY2UoY29uc3QgY2hhciogbmFtZSk7CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNUeXBlKGNv
bnN0IFN0cmluZyYpOyAKIAorICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0FscGhhKCkg
eyByZXR1cm4gZmFsc2U7IH0KIApAQCAtOTUsMTggKzEwMSwxOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KIAogICAgIHN0YXRpYyBJbWFnZSogbnVsbEltYWdlKCk7Ci0gICAgYm9vbCBpc051bGwoKSBj
b25zdCB7IHJldHVybiBzaXplKCkuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc051bGwoKSBjb25z
dCB7IHJldHVybiBzaXplKDApLmlzRW1wdHkoKTsgfQogCiAgICAgLy8gVGhlc2UgYXJlIG9ubHkg
dXNlZCBmb3IgU1ZHSW1hZ2UgcmlnaHQgbm93Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRhaW5l
clNpemUoY29uc3QgSW50U2l6ZSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJT
aXplKEltYWdlVXNlciwgY29uc3QgSW50U2l6ZSYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCB1c2Vz
Q29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBoYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2
aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsKLSAgICBJbnRSZWN0IHJlY3QoKSBjb25z
dCB7IHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSk7IH0KLSAgICBpbnQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBzaXplKCkud2lkdGgoKTsgfQotICAgIGludCBoZWlnaHQoKSBjb25z
dCB7IHJldHVybiBzaXplKCkuaGVpZ2h0KCk7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZShJ
bWFnZVVzZXIpIGNvbnN0ID0gMDsKKyAgICBJbnRSZWN0IHJlY3QoSW1hZ2VVc2VyIHVzZXIpIGNv
bnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSh1c2VyKSk7IH0KKyAgICBpbnQg
d2lkdGgoSW1hZ2VVc2VyIHVzZXIpIGNvbnN0IHsgcmV0dXJuIHNpemUodXNlcikud2lkdGgoKTsg
fQorICAgIGludCBoZWlnaHQoSW1hZ2VVc2VyIHVzZXIpIGNvbnN0IHsgcmV0dXJuIHNpemUodXNl
cikuaGVpZ2h0KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29sIHNldERhdGEoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKQEAgLTEzMCw3ICsxMzYsNyBA
QCBwdWJsaWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwg
U3BhY2VUaWxlLCBSZXBlYXRUaWxlIH07CiAKLSAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgTmF0
aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoSW1hZ2VVc2VyKSB7IHJldHVy
biAwOyB9CiAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0
aXZlIGltYWdlIGZvcm1hdHMuCkBAIC0xNTUsNyArMTYxLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEltYWdlPiBsb2FkUGxhdGZvcm1UaGVtZUljb24oY29uc3QgY2hhciogbmFt
ZSwgaW50IHNpemUpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKElt
YWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwogCiAj
aWYgIUFTU0VSVF9ESVNBQkxFRApAQCAtMTY5LDExICsxNzUsMTEgQEAgcHJvdGVjdGVkOgogCiAg
ICAgLy8gVGhlIENvbG9yU3BhY2UgcGFyYW1ldGVyIHdpbGwgb25seSBiZSB1c2VkIGZvciB1bnRh
Z2dlZCBpbWFnZXMuCiAjaWYgUExBVEZPUk0oV0lOKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJh
bWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRj
aGluZ1NvdXJjZVNpemUoSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikgeyB9CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yKSA9IDA7Ci0gICAgdm9pZCBkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgY29uc3QgRmxv
YXRTaXplJiB0aWxlU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yKTsKLSAgICB2b2lkIGRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIFRpbGVSdWxlIGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhdyhJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IpID0gMDsKKyAgICB2b2lkIGRyYXdUaWxlZChJbWFnZVVzZXIs
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRQ
b2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdm9pZCBkcmF3VGlsZWQoSW1h
Z2VVc2VyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIFRp
bGVSdWxlIGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yKTsKIAogICAgIC8vIFN1cHBvcnRpbmcgdGlsZWQgZHJhd2luZwog
ICAgIHZpcnR1YWwgYm9vbCBtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSB7IHJldHVybiBmYWxzZTsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY5Miw3ICs2OTIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0Jh
Y2tnCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFn
ZSkKIHsKICAgICBpZiAoaW1hZ2UpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBuZXdJbWFnZSA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBDR0ltYWdlUmVmIG5l
d0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApOwogICAgICAgICBp
ZiAoIW5ld0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHQzRENhaXJvLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFn
ZURhdGEoSW1hCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGltYWdlU3VyZmFj
ZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVBdEluZGV4KDApOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGltYWdlU3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAg
ICAgICBpbWFnZVN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7
CiAgICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSkKICAgICAgICAgICAgIGFscGhhT3AgPSBB
bHBoYURvVW5tdWx0aXBseTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2
aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHZv
aWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKIHsKICAgICAvLyBCaXRtYXBJ
bWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCiAg
ICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoY2Fpcm9fc3VyZmFj
ZV9yZWZlcmVuY2UobV9kYXRhLm1fc3VyZmFjZSkpOwotICAgIGNvbnRleHQtPmRyYXdJbWFnZShp
bWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxv
d1F1YWxpdHlTY2FsZSk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKDAsIGltYWdlLmdldCgpLCBz
dHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxl
KTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvCiB7CiAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNl
IHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgogICAgIFJlZlB0cjxJbWFnZT4g
aW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKG1fZGF0
YS5tX3N1cmZhY2UpKTsKLSAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsK
KyAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oMCwgY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKIH0KIAogdm9pZCBJ
bWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+
JiBsb29rVXBUYWJsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShjYWlyb19z
dXJmYWNlX3QKICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhJbWFnZVVzZXIgdXNlciwgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCkKIHsKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOwogICAgIEZsb2F0UmVjdCBkc3RSZWN0
KGRzdCk7CkBAIC0xMjcsMTUgKzEyNywxNSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogCiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0K
IAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihJbWFnZVVzZXIgdXNlciwgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBjYWlyb19zdXJmYWNl
X3QqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBjYWlyb19zdXJm
YWNlX3QqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUodXNlcik7CiAgICAgaWYg
KCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQu
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmNyKCk7Ci0gICAgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4dChjciwgaW1hZ2Us
IHNpemUoKSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCB0b0NhaXJvT3BlcmF0
b3Iob3ApLCBkZXN0UmVjdCk7CisgICAgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4dChjciwgaW1h
Z2UsIHNpemUodXNlciksIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgdG9DYWly
b09wZXJhdG9yKG9wKSwgZGVzdFJlY3QpOwogCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKICAg
ICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3Bw
CShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdHRlcm5DYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjYWlyb19wYXR0ZXJuX3QqIFBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdAogewotICAgIGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICBpZiAoIXN1cmZhY2UpCiAgICAgICAgIHJldHVy
biAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHQzRENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEltYWdlRGF0YShJbWEKICAgICAgICAgZGVjb2RlZEltYWdlLmFkb3B0Q0YoZGVjb2Rl
ci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOwogICAgICAgICBjZ0ltYWdlID0gZGVjb2RlZEltYWdl
LmdldCgpOwogICAgIH0gZWxzZQotICAgICAgICBjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoMCk7CiAgICAgaWYgKCFjZ0ltYWdlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzgsMTQgKzIzOCwxNCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvCiAgICAgaWYgKCFtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKICAgICAg
ICAgaWYgKGNvbnRleHQgPT0gbV9jb250ZXh0KSB7CiAgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+
IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7IC8vIERyYXdpbmcgaW50byBvdXIg
b3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0
dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xv
clNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oMCwg
Y29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFj
ZSwgb3AsIGRlc3RSZWN0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwotICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0
UmVjdCk7CisgICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oMCwgY29u
dGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIGRlc3RSZWN0KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxJ
bWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgY29weS0+
ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0
eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4o
MCwgY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JT
cGFjZSwgb3AsIGRlc3RSZWN0KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODIsNyArMTgyLDcgQEAgUmV0YWluUHRyPENGQXJyYXlSZWY+IEJpdG1hcElt
YWdlOjpnZXRDRwogICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4oQWRvcHRDRiwgYXJy
YXkpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2
b2lkIEJpdG1hcEltYWdlOjpkcmF3KEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsK
ICAgICBzdGFydEFuaW1hdGlvbigpOwogCkBAIC0yMDksMTAgKzIwOSwxMSBAQCBzdGF0aWMgdm9p
ZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluCiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNv
bnRleHQsIEdyYXBoaWNzQ29udGV4dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0
UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdl
KSkpLCBpbWFnZSk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLAordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oSW1hZ2VVc2VyIHVz
ZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAg
ICBpZiAoIW5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpCisgICAgQ0dJbWFnZVJlZiB0aWxl
SW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKKyAgICBpZiAoIXRpbGVJ
bWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKHBhdHRlcm5UcmFuc2Zvcm0uaXNJ
bnZlcnRpYmxlKCkpOwpAQCAtMjM1LDE2ICsyMzYsMTUgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KgogICAgIGZsb2F0IGFkanVzdGVkWCA9IHBoYXNlLngoKSAtIGRl
c3RSZWN0LngoKSArIHRpbGVSZWN0LngoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVy
blRyYW5zZm9ybS5hKCkpOyAvLyBXZSB0cmFuc2xhdGVkIHRoZSBjb250ZXh0IHNvIHRoYXQgZGVz
dFJlY3QueCgpIGlzIHRoZSBvcmlnaW4sIHNvIHN1YnRyYWN0IGl0IG91dC4KICAgICBmbG9hdCBh
ZGp1c3RlZFkgPSBkZXN0UmVjdC5oZWlnaHQoKSAtIChwaGFzZS55KCkgLSBkZXN0UmVjdC55KCkg
KyB0aWxlUmVjdC55KCkgKiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0u
ZCgpKSArIHNjYWxlZFRpbGVIZWlnaHQpOwogCi0gICAgQ0dJbWFnZVJlZiB0aWxlSW1hZ2UgPSBu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGZsb2F0IGggPSBDR0ltYWdlR2V0SGVp
Z2h0KHRpbGVJbWFnZSk7CiAKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc3ViSW1hZ2U7Ci0g
ICAgaWYgKHRpbGVSZWN0LnNpemUoKSA9PSBzaXplKCkpCisgICAgaWYgKHRpbGVSZWN0LnNpemUo
KSA9PSBzaXplKHVzZXIpKQogICAgICAgICBzdWJJbWFnZSA9IHRpbGVJbWFnZTsKICAgICBlbHNl
IHsKICAgICAgICAgLy8gQ29weWluZyBhIHN1Yi1pbWFnZSBvdXQgb2YgYSBwYXJ0aWFsbHktZGVj
b2RlZCBpbWFnZSBzdG9wcyB0aGUgZGVjb2Rpbmcgb2YgdGhlIG9yaWdpbmFsIGltYWdlLiBJdCBz
aG91bGQgbmV2ZXIgaGFwcGVuCiAgICAgICAgIC8vIGJlY2F1c2Ugc3ViLWltYWdlcyBhcmUgb25s
eSB1c2VkIGZvciBib3JkZXItaW1hZ2UsIHdoaWNoIG9ubHkgcmVuZGVycyB3aGVuIHRoZSBpbWFn
ZSBpcyBmdWxseSBkZWNvZGVkLgotICAgICAgICBBU1NFUlQoaCA9PSBoZWlnaHQoKSk7CisgICAg
ICAgIEFTU0VSVChoID09IGhlaWdodCh1c2VyKSk7CiAgICAgICAgIHN1YkltYWdlLmFkb3B0Q0Yo
Q0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdCh0aWxlSW1hZ2UsIHRpbGVSZWN0KSk7CiAgICAg
fQogCkBAIC0yNTgsOSArMjU4LDkgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0KgogICAgIGZsb2F0IHNjYWxlZFRpbGVXaWR0aCA9IHRpbGVSZWN0LndpZHRoKCkgKiBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKTsKICAgICBmbG9hdCB3
ID0gQ0dJbWFnZUdldFdpZHRoKHRpbGVJbWFnZSk7CiAjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFS
RAotICAgIGlmICh3ID09IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6ZSgpLmhlaWdodCgpICYm
IHNjYWxlZFRpbGVXaWR0aCA9PSB0aWxlUmVjdC53aWR0aCgpICYmIHNjYWxlZFRpbGVIZWlnaHQg
PT0gdGlsZVJlY3QuaGVpZ2h0KCkpCisgICAgaWYgKHcgPT0gc2l6ZSh1c2VyKS53aWR0aCgpICYm
IGggPT0gc2l6ZSh1c2VyKS5oZWlnaHQoKSAmJiBzY2FsZWRUaWxlV2lkdGggPT0gdGlsZVJlY3Qu
d2lkdGgoKSAmJiBzY2FsZWRUaWxlSGVpZ2h0ID09IHRpbGVSZWN0LmhlaWdodCgpKQogI2Vsc2UK
LSAgICBpZiAodyA9PSBzaXplKCkud2lkdGgoKSAmJiBoID09IHNpemUoKS5oZWlnaHQoKSkKKyAg
ICBpZiAodyA9PSBzaXplKHVzZXIpLndpZHRoKCkgJiYgaCA9PSBzaXplKHVzZXIpLmhlaWdodCgp
KQogI2VuZGlmCiAgICAgICAgIENHQ29udGV4dERyYXdUaWxlZEltYWdlKGNvbnRleHQsIEZsb2F0
UmVjdChhZGp1c3RlZFgsIGFkanVzdGVkWSwgc2NhbGVkVGlsZVdpZHRoLCBzY2FsZWRUaWxlSGVp
Z2h0KSwgc3ViSW1hZ2UuZ2V0KCkpOwogICAgIGVsc2UgewpAQCAtMjcwLDcgKzI3MCw3IEBAIHZv
aWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICBDR0FmZmluZVRyYW5z
Zm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UobmFycm93UHJlY2lzaW9uVG9DR0Zs
b2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKSwgMCwgMCwgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0
KHBhdHRlcm5UcmFuc2Zvcm0uZCgpKSwgYWRqdXN0ZWRYLCBhZGp1c3RlZFkpOwogICAgIG1hdHJp
eCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRl
eHQpKTsKICAgICAvLyBUaGUgdG9wIG9mIGEgcGFydGlhbGx5LWRlY29kZWQgaW1hZ2UgaXMgZHJh
d24gYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGlsZS4gTWFwIGl0IHRvIHRoZSB0b3AuCi0gICAgbWF0
cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUobWF0cml4LCAwLCBzaXplKCkuaGVpZ2h0
KCkgLSBoKTsKKyAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZShtYXRyaXgs
IDAsIHNpemUodXNlcikuaGVpZ2h0KCkgLSBoKTsKICAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVm
PiBwYXR0ZXJuKEFkb3B0Q0YsIENHUGF0dGVybkNyZWF0ZShzdWJJbWFnZS5nZXQoKSwgQ0dSZWN0
TWFrZSgwLCAwLCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgsIHRpbGVSZWN0Lndp
ZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcsIHRydWUsICZw
YXR0ZXJuQ2FsbGJhY2tzKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAkocmV2aXNpb24gOTY2OTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBTdHJpbmcgUERGRG9jdW1lbnRJ
bWFnZTo6ZmlsZW5hbWVFeHRlbnNpCiAgICAgcmV0dXJuICJwZGYiOwogfQogCi1JbnRTaXplIFBE
RkRvY3VtZW50SW1hZ2U6OnNpemUoKSBjb25zdAorSW50U2l6ZSBQREZEb2N1bWVudEltYWdlOjpz
aXplKEltYWdlVXNlcikgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCBzaW5hID0gc2luZigtbV9y
b3RhdGlvbik7CiAgICAgY29uc3QgZmxvYXQgY29zYSA9IGNvc2YoLW1fcm90YXRpb24pOwpAQCAt
MTU1LDcgKzE1NSw3IEBAIGludCBQREZEb2N1bWVudEltYWdlOjpwYWdlQ291bnQoKSBjb25zdAog
ICAgIHJldHVybiBtX2RvY3VtZW50ID8gQ0dQREZEb2N1bWVudEdldE51bWJlck9mUGFnZXMobV9k
b2N1bWVudCkgOiAwOwogfQogCi12b2lkIFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIFBERkRv
Y3VtZW50SW1hZ2U6OmRyYXcoSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQgfHwgbV9j
dXJyZW50UGFnZSA9PSAtMSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAkocmV2
aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEwICs1OSwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9v
bCAvKmRlc3Ryb3lBbGwqLyA9IHRydWUpIHsgfQogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRl
Y29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAgICAgIHZpcnR1YWwgSW50U2l6
ZSBzaXplKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKEltYWdlVXNlcikg
Y29uc3Q7CiAKICAgICAgICAgUERGRG9jdW1lbnRJbWFnZSgpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoSW1hZ2VVc2VyLCBHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICAg
ICAgICAgCiAgICAgICAgIHZvaWQgc2V0Q3VycmVudFBhZ2UoaW50KTsKICAgICAgICAgaW50IHBh
Z2VDb3VudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDcgKzY1LDcgQEAgc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKgog
CiBDR1BhdHRlcm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0CiB7Ci0gICAgSW50UmVj
dCB0aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7CisgICAgSW50UmVjdCB0aWxlUmVjdCA9
IHRpbGVJbWFnZSgpLT5yZWN0KDApOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFu
c2Zvcm0gPSB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbiAqIG1fcGF0dGVyblNwYWNlVHJhbnNmb3Jt
YXRpb247CiAgICAgcGF0dGVyblRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oMSwgLTEpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JY29uQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNv
bnRleAogCiAgICAgLy8gQW4gSWNvbiBkb2Vzbid0IGtub3cgdGhlIGNvbG9yIHNwYWNlIG9mIHRo
ZSBmaWxlIHVwbG9hZCBjb250cm9sLgogICAgIC8vIFNvIHVzZSBDb2xvclNwYWNlRGV2aWNlUkdC
LgotICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2ljb24uZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIHJlY3QpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZSgwLCBtX2ljb24uZ2V0KCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIHJlY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDExICsxMzQsMTEgQEAgdm9pZCBJbWFnZUxheWVy
Q2hyb21pdW06OnNldENvbnRlbnRzKEltYQogICAgIC8vIHN0eWxlIGNoYW5nZSB0aGF0IGFmZmVj
dHMgdGhlIGxheWVyIGV2ZW4gaWYgdGhhdCBjaGFuZ2UgZG9lc24ndAogICAgIC8vIGFmZmVjdCB0
aGUgYWN0dWFsIGNvbnRlbnRzIG9mIHRoZSBpbWFnZSAoZS5nLiBhIENTUyBhbmltYXRpb24pLgog
ICAgIC8vIFdpdGggdGhpcyBjaGVjayBpbiBwbGFjZSB3ZSBhdm9pZCB1bmVjZXNzYXJ5IHRleHR1
cmUgdXBsb2Fkcy4KLSAgICBpZiAoKG1fY29udGVudHMgPT0gY29udGVudHMpICYmIChtX2NvbnRl
bnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpID09IG1faW1hZ2VGb3JDdXJyZW50RnJh
bWUpKQorICAgIGlmICgobV9jb250ZW50cyA9PSBjb250ZW50cykgJiYgKG1fY29udGVudHMtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApID09IG1faW1hZ2VGb3JDdXJyZW50RnJhbWUpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRlbnRzID0gY29udGVudHM7Ci0gICAgbV9pbWFn
ZUZvckN1cnJlbnRGcmFtZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgbV9pbWFnZUZvckN1cnJlbnRGcmFtZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKDApOwogICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgYm91bmRzKCkpOwogICAgIHNldE5lZWRzRGlzcGxheSgpOwogfQpAQCAtMTQ2LDcgKzE0
Niw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpzZXRDb250ZW50cyhJbWEKIHZvaWQgSW1h
Z2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiB7CiAgICAgaWYgKCFtX2Rp
cnR5UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV90ZXh0dXJlVXBkYXRlci0+dXBkYXRlRnJv
bUltYWdlKG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpOworICAgICAg
ICBtX3RleHR1cmVVcGRhdGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoMCkpOwogICAgICAgICB1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09w
dGlvbigpOwogICAgICAgICBJbnRSZWN0IHBhaW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91
bmRzKCkpOwogICAgICAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAJKHJldmlzaW9u
IDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTcsNyAr
MTQ1Nyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYWludCgKICAgICBp
ZiAoIWdzdEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2Uo
cmVpbnRlcnByZXRfY2FzdDxJbWFnZSo+KGdzdEltYWdlLT5pbWFnZSgpLmdldCgpKSwgQ29sb3JT
cGFjZVNSR0IsCisgICAgY29udGV4dC0+ZHJhd0ltYWdlKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8SW1h
Z2UqPihnc3RJbWFnZS0+aW1hZ2UoKS5nZXQoKSksIENvbG9yU3BhY2VTUkdCLAogICAgICAgICAg
ICAgICAgICAgICAgICByZWN0LCBDb21wb3NpdGVDb3B5LCBmYWxzZSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MTcsNyArNjE3LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9J
bWFnZQogICAgICAgICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7CiAgICAgICAgIGlmICgh
Zm91bmQpIHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGJlZ2luUGFpbnQo
SW50UmVjdCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0
KCkpKSk7Ci0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgSW50UG9pbnQoMCwgMCksIENvbXBvc2l0ZUNvcHkpOworICAgICAgICAgICAgY29u
dGV4dC5kcmF3SW1hZ2UoMCwgaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAs
IDApLCBDb21wb3NpdGVDb3B5KTsKICAgICAgICAgICAgIGVuZFBhaW50KCk7CiAgICAgICAgIH0K
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1h
Z2VPcGVuVkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW52Zy9JbWFnZU9wZW5WRy5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODksNyArODksNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29s
b3IoKQogICAgIFRpbGVkSW1hZ2VPcGVuVkcqIHRpbGVkSW1hZ2UgPSAwOwogCiAgICAgaWYgKG1f
ZnJhbWVDb3VudCA9PSAxICYmIG1fc2l6ZS53aWR0aCgpID09IDEgJiYgbV9zaXplLmhlaWdodCgp
ID09IDEpCi0gICAgICAgIHRpbGVkSW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OworICAgICAgICB0aWxlZEltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiAK
ICAgICBpZiAodGlsZWRJbWFnZSkgewogICAgICAgICBtX2lzU29saWRDb2xvciA9IHRydWU7CkBA
IC0xMjksMTIgKzEyOSwxMiBAQCBzdGF0aWMgdm9pZCBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNh
bXBsCiB9CiAjZW5kaWYKIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBCaXRt
YXBJbWFnZTo6ZHJhdyhJbWFnZVVzZXIgdXNlciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAoZHN0LmlzRW1w
dHkoKSB8fCBzcmMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBOYXRpdmVJbWFn
ZVB0ciBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgTmF0aXZlSW1h
Z2VQdHIgaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKICAgICBpZiAo
IWltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIEJpdG1h
cEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAKICAgICBGbG9hdFJlY3Qgc3JjUmVjdExv
Y2FsKHNyYyk7CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICBh
ZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3RMb2NhbCwgc2l6ZSgpLCBpbWFn
ZS0+c2l6ZSgpKTsKKyAgICBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3RM
b2NhbCwgc2l6ZSh1c2VyKSwgaW1hZ2UtPnNpemUoKSk7CiAjZW5kaWYKIAogICAgIGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5hY3RpdmVQYWludGVyKCktPmRyYXdJbWFnZShpbWFnZSwgZHN0
LCBzcmNSZWN0TG9jYWwpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRo
aXMpOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLAordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oSW1hZ2VV
c2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmMs
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm1hdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdCkKQEAgLTE3Myw3
ICsxNzMsNyBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAg
aWYgKGRzdC5pc0VtcHR5KCkgfHwgc3JjLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUodXNl
cik7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2
Nyw3ICsxNTY3LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYQog
ICAgIGlmIChpbWFnZS0+ZGF0YSgpKQogICAgICAgICBuYXRpdmVJbWFnZSA9IFFJbWFnZTo6ZnJv
bURhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1Y2hhcio+KGltYWdlLT5kYXRhKCktPmRhdGEo
KSksIGltYWdlLT5kYXRhKCktPnNpemUoKSkuY29udmVydFRvRm9ybWF0KFFJbWFnZTo6Rm9ybWF0
X0FSR0IzMik7CiAgICAgZWxzZSB7Ci0gICAgICAgIFFQaXhtYXAqIG5hdGl2ZVBpeG1hcCA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBRUGl4bWFwKiBuYXRp
dmVQaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiAgICAgICAg
IG5hdGl2ZUltYWdlID0gbmF0aXZlUGl4bWFwLT50b0ltYWdlKCkuY29udmVydFRvRm9ybWF0KFFJ
bWFnZTo6Rm9ybWF0X0FSR0IzMik7CiAgICAgfQogICAgIEFscGhhT3AgbmVlZGVkQWxwaGFPcCA9
IEFscGhhRG9Ob3RoaW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gOTY2OTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2OCw3ICs2NjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gc2hhZG93
Qmx1cigpOwogCiAgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgUVBpeG1h
cCogaW1hZ2UgPSBtX3N0YXRlLmZpbGxQYXR0ZXJuLT50aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgUVBpeG1hcCogaW1hZ2UgPSBtX3N0YXRlLmZpbGxQ
YXR0ZXJuLT50aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGhhc1NoYWRvdygpID8gc2hhZG93
LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7CiAgICAgICAgIGlm
IChzaGFkb3dDb250ZXh0KSB7CiAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9
IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwCShy
ZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzTGF5ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjYsNyArMTIyNiw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllclF0OjpzZXRDb250ZW50c1RvSW1hZ2UKICAgICBtX2ltcGwtPm1fcGVu
ZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBHcmFwaGljc0xheWVyUXRJbXBsOjpIVE1MQ29udGVu
dFR5cGU7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKICAg
ICBpZiAoaW1hZ2UpIHsKLSAgICAgICAgUVBpeG1hcCogcHhtID0gaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFQaXhtYXAqIHB4bSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICAgICAgaWYgKHB4bSkgewogICAgICAgICAgICAg
bV9pbXBsLT5tX3BlbmRpbmdDb250ZW50LnBpeG1hcCA9ICpweG07CiAgICAgICAgICAgICBtX2lt
cGwtPm1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBHcmFwaGljc0xheWVyUXRJbXBsOjpQ
aXhtYXBDb250ZW50VHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDbwogCiB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBmbG9hdFJlY3QpIGNvbnN0CiB7Ci0gICAgUVBpeG1h
cCogbmF0aXZlSW1hZ2UgPSBtX2RhdGEubV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKKyAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IG1fZGF0YS5tX2ltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICBpZiAoIW5hdGl2ZUltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdl
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ltYWdlUXQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTAgKzEwMSwx
MCBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzCiAgICAgcmV0dXJu
IFN0aWxsSW1hZ2U6OmNyZWF0ZShsb2FkUmVzb3VyY2VQaXhtYXAobmFtZSkpOwogfQogCi12b2lk
IEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKK3Zv
aWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKIHsKLSAgICBRUGl4bWFwKiBmcmFtZVBpeG1hcCA9IG5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7CisgICAgUVBpeG1hcCogZnJhbWVQaXhtYXAgPSBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSh1c2VyKTsKICAgICBpZiAoIWZyYW1lUGl4bWFwKSAvLyBJZiBpdCdzIHRv
byBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCkBA
IC0yMDEsNyArMjAxLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0
YQogfQogCiAvLyBEcmF3aW5nIFJvdXRpbmVzCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCit2b2lkIEJpdG1hcEltYWdl
OjpkcmF3KEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyYywg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAg
IFFSZWN0RiBub3JtYWxpemVkRHN0ID0gZHN0Lm5vcm1hbGl6ZWQoKTsKQEAgLTIxMiw3ICsyMTIs
NyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgaWYgKG5v
cm1hbGl6ZWRTcmMuaXNFbXB0eSgpIHx8IG5vcm1hbGl6ZWREc3QuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBRUGl4bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgUVBpeG1hcCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1
c2VyKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcAkocmV2aXNp
b24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJu
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogUUJydXNoIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKSBjb25zdAogewotICAgIFFQaXhtYXAqIHBpeG1hcCA9IHRpbGVJbWFnZSgpLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIFFQaXhtYXAqIHBpeG1hcCA9IHRpbGVJ
bWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICBpZiAoIXBpeG1hcCkK
ICAgICAgICAgcmV0dXJuIFFCcnVzaCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAJKHJldmlzaW9uIDk2Njk4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTcgKzUyLDE3IEBAIFN0aWxsSW1hZ2U6On5TdGlsbElt
YWdlKCkKICAgICAgICAgZGVsZXRlIG1fcGl4bWFwOwogfQogCi1JbnRTaXplIFN0aWxsSW1hZ2U6
OnNpemUoKSBjb25zdAorSW50U2l6ZSBTdGlsbEltYWdlOjpzaXplKEltYWdlVXNlcikgY29uc3QK
IHsKICAgICByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC0+d2lkdGgoKSwgbV9waXhtYXAtPmhlaWdo
dCgpKTsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgU3RpbGxJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKQorTmF0aXZlSW1hZ2VQdHIgU3RpbGxJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoSW1hZ2VVc2VyKQogewogICAgIHJldHVybiBjb25zdF9jYXN0PE5hdGl2ZUltYWdl
UHRyPihtX3BpeG1hcCk7CiB9CiAKLXZvaWQgU3RpbGxJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LAordm9pZCBTdGlsbEltYWdlOjpkcmF3KElt
YWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKG1fcGl4bWFwLT5pc051bGwoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VR
dC5oCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L1N0aWxsSW1hZ2VRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShi
b29sIGRlc3Ryb3lBbGwgPSB0cnVlKSB7IFFfVU5VU0VEKGRlc3Ryb3lBbGwpOyB9CiAgICAgICAg
IHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAg
ICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBOYXRp
dmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKKyAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoSW1hZ2VVc2VyKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZShJbWFnZVVzZXIpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhJbWFnZVVzZXIs
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU3RpbGxJbWFnZShjb25zdCBRUGl4bWFwJiBw
aXhtYXApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVy
ZU1hcHBlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnNldENvbnRlbnRz
VG9JbWFnZQogewogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdCBR
UGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICBjb25zdCBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoMCk7CiAgICAgaWYgKCFwaXhtYXApCiAgICAgICAgIHJldHVybjsKICAgICBCaXRtYXBUZXh0
dXJlOjpyZXNldChwaXhtYXAtPnNpemUoKSwgIXBpeG1hcC0+aGFzQWxwaGFDaGFubmVsKCkpOwpA
QCAtMjU4LDcgKzI1OCw3IEBAIFBhc3NPd25QdHI8QkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+
IEIKIAogdWludDY0X3QgdWlkRm9ySW1hZ2UoSW1hZ2UqIGltYWdlKQogewotICAgIHJldHVybiBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c2VyaWFsTnVtYmVyKCk7CisgICAg
cmV0dXJuIGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKS0+c2VyaWFsTnVtYmVy
KCk7CiB9CiAjZW5kaWYKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YS5oCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxw
aGEoKSB7IHJldHVybiAhbV9uYXRpdmVJbWFnZS5iaXRtYXAoKS5pc09wYXF1ZSgpOyB9CiAKLSAg
ICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUo
SW1hZ2VVc2VyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIEludFNpemUobV9uYXRpdmVJ
bWFnZS5iaXRtYXAoKS53aWR0aCgpLCBtX25hdGl2ZUltYWdlLmJpdG1hcCgpLmhlaWdodCgpKTsK
ICAgICB9CkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBXZSBvbmx5
IGhhdmUgYSBzaW5nbGUgZnJhbWUuCi0gICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZShJbWFnZVVzZXIpCiAgICAgewogICAgICAgICByZXR1cm4gJm1f
bmF0aXZlSW1hZ2U7CiAgICAgfQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3KEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvcik7CiAKIHByaXZhdGU6CiAgICAgTmF0aXZlSW1hZ2VTa2lhIG1fbmF0
aXZlSW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dy
YXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCShyZXZpc2lvbiA5
NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0M0RTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hCiAgICAgaWYgKCFpbWFnZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IHBpeGVsczsKLSAg
ICBOYXRpdmVJbWFnZVNraWEqIHNraWFJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOworICAgIE5hdGl2ZUltYWdlU2tpYSogc2tpYUltYWdlID0gaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApOwogICAgIEFscGhhT3AgbmVlZGVkQWxwaGFPcCA9IEFs
cGhhRG9Ob3RoaW5nOwogICAgIGJvb2wgaGFzQWxwaGEgPSBza2lhSW1hZ2UgPyAhc2tpYUltYWdl
LT5iaXRtYXAoKS5pc09wYXF1ZSgpIDogdHJ1ZTsKICAgICBpZiAoKCFza2lhSW1hZ2UgfHwgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhh
KSkgJiYgaW1hZ2UtPmRhdGEoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4OCw3ICsyODgsNyBAQCBib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBj
bGVhck1ldGFkYXRhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihJ
bWFnZVVzZXIgdXNlciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBmbG9hdFNyY1JlY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwKQEAgLTMwMCw3ICszMDAs
NyBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgaWYgKGRl
c3RSZWN0LmlzRW1wdHkoKSB8fCBub3JtU3JjUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsgLy8gbm90aGluZyB0byBkcmF3CiAKLSAgICBOYXRpdmVJbWFnZVNraWEqIGJpdG1hcCA9IG5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgTmF0aXZlSW1hZ2VTa2lhKiBiaXRtYXAg
PSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKICAgICBpZiAoIWJpdG1hcCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zOTEsNyArMzkxLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hl
Y2tGb3JTb2xpZENvbG9yKCkKIAogICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYSogZnJhbWUg
PSBmcmFtZUF0SW5kZXgoMCk7CiAKLSAgICBpZiAoZnJhbWUgJiYgc2l6ZSgpLndpZHRoKCkgPT0g
MSAmJiBzaXplKCkuaGVpZ2h0KCkgPT0gMSkgeworICAgIGlmIChmcmFtZSAmJiBzaXplKDApLndp
ZHRoKCkgPT0gMSAmJiBzaXplKDApLmhlaWdodCgpID09IDEpIHsKICAgICAgICAgU2tBdXRvTG9j
a1BpeGVscyBsb2NrKGZyYW1lLT5iaXRtYXAoKSk7CiAgICAgICAgIGlmICghZnJhbWUtPmJpdG1h
cCgpLmdldFBpeGVscygpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDAxLDcgKzQwMSw3IEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAgICAgfQogfQogCi12b2lk
IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LAordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhJbWFnZVVzZXIgdXNlciwgR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBpZiAoIW1fc291cmNlLmlu
aXRpYWxpemVkKCkpCkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIAogICAgIC8vIGNhdXNpbmcgZmxpY2tlciBhbmQgd2FzdGluZyBDUFUu
CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIAotICAgIE5hdGl2ZUltYWdlU2tpYSogYm0gPSBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIE5hdGl2ZUltYWdlU2tpYSogYm0gPSBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKICAgICBpZiAoIWJtKQogICAgICAgICByZXR1
cm47ICAvLyBJdCdzIHRvbyBlYXJseSBhbmQgd2UgZG9uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAK
QEAgLTQzNCw3ICs0MzQsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCogCiAKIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgZ28gaW50byBCaXRtYXBJbWFnZVNpbmdsZUZy
YW1lU2tpYS5jcHAKIAotdm9pZCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyhHcmFw
aGljc0NvbnRleHQqIGN0eHQsCit2b2lkIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpkcmF3
KEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiBjdHh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5T
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BhdHRlcm5Ta2lhLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNyBAQCBQbGF0Zm9ybVBhdHRlcm5QdHIgUGF0dGVybjo6cGxhdGZvcm1QYXR0CiAg
ICAgLy8gYW5kIGV4cGFuZGVkIHNjYWxlIGFuZCBza2V3IGluOgogICAgIC8vIExheW91dFRlc3Rz
L3N2Zy9XM0MtU1ZHLTEuMS9wc2VydmVycy1ncmFkLTA2LWIuc3ZnCiAKLSAgICBjb25zdCBOYXRp
dmVJbWFnZVNraWEqIGltYWdlID0gbV90aWxlSW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgY29uc3QgTmF0aXZlSW1hZ2VTa2lhKiBpbWFnZSA9IG1fdGlsZUltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEg
Yml0bWFwLCByZXR1cm4gYSB0cmFuc3BhcmVudCBzaGFkZXIuCiAgICAgaWYgKCFpbWFnZSkKICAg
ICAgICAgbV9wYXR0ZXJuID0gbmV3IFNrQ29sb3JTaGFkZXIoU2tDb2xvclNldEFSR0IoMCwgMCwg
MCwgMCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCShyZXZpc2lvbiA5NjY5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KFRlCiAgICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVk
Q29udGVudFJlY3QoY29udGVudFJlY3QpOwogICAgICAgICAgICAgc2NhbGVkQ29udGVudFJlY3Qu
c2NhbGUoMS4wIC8gbV9zdGF0ZS5jb250ZW50U2NhbGUpOwogICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC5kcmF3SW1hZ2UoMCwgbV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBlbmNs
b3NpbmdJbnRSZWN0KHNjYWxlZENvbnRlbnRSZWN0KSk7CiAgICAgICAgICAgICB0ZXh0dXJlLT5l
bmRQYWludCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgJKHJldmlzaW9uIDk2Njk4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBwcml2YXRlOgogCiAgICAg
RmxvYXRTaXplIGNvbnRlbnRTaXplKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2N1
cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUgJiYgbV9j
dXJyZW50Q29udGVudC5pbWFnZSA/IG1fY3VycmVudENvbnRlbnQuaW1hZ2UtPnNpemUoKSA6IG1f
c2l6ZTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGly
ZWN0SW1hZ2VDb250ZW50VHlwZSAmJiBtX2N1cnJlbnRDb250ZW50LmltYWdlID8gbV9jdXJyZW50
Q29udGVudC5pbWFnZS0+c2l6ZSgwKSA6IG1fc2l6ZTsKICAgICB9CiAgICAgc3RydWN0IFRpbGUg
ewogICAgICAgICBGbG9hdFJlY3QgcmVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAJKHJldmlzaW9uIDk2Njk4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NCwxMSArNzQsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJ
VE1BUE9mU2l6ZShIQklUTQogICAKICAgICBHcmFwaGljc0NvbnRleHQgZ2MoY2dDb250ZXh0KTsK
IAotICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKKyAgICBJbnRT
aXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKDApOwogICAgIGlmIChzaXplKQotICAg
ICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4w
ZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBkcmF3RnJhbWVNYXRj
aGluZ1NvdXJjZVNpemUoMCwgJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdp
ZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIENvbXBvc2l0ZUNvcHkpOwogICAgIGVsc2UKLSAgICAgICAgZHJhdygmZ2MsIEZsb2F0UmVj
dCgwLjBmLCAwLjBmLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJl
Y3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBkcmF3KDAsICZnYywg
RmxvYXRSZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCks
IEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdo
dCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CiAKICAgICAvLyBEbyBj
bGVhbnVwCiAgICAgQ0dDb250ZXh0UmVsZWFzZShjZ0NvbnRleHQpOwpAQCAtODYsNyArODYsNyBA
QCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShH
cmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50
U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3Vy
Y2VTaXplKEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIHNpemVfdCBm
cmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZXM7
ICsraSkgewpAQCAtOTQsMTUgKzk0LDE1IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1h
dGNoaW5nU291cmMKICAgICAgICAgaWYgKENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpID09IHN0YXRp
Y19jYXN0PHNpemVfdD4oc3JjU2l6ZS5oZWlnaHQoKSkgJiYgQ0dJbWFnZUdldFdpZHRoKGltYWdl
KSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNyY1NpemUud2lkdGgoKSkpIHsKICAgICAgICAgICAg
IHNpemVfdCBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFtZTsKICAgICAgICAgICAgIG1fY3Vy
cmVudEZyYW1lID0gaTsKLSAgICAgICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0
KDAuMGYsIDAuMGYsIHNyY1NpemUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29s
b3JTcGFjZSwgY29tcG9zaXRlT3ApOworICAgICAgICAgICAgZHJhdyh1c2VyLCBjdHh0LCBkc3RS
ZWN0LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgc3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdo
dCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CiAgICAgICAgICAgICBtX2N1cnJl
bnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIC8vIE5vIGltYWdlIG9mIHRoZSBjb3JyZWN0IHNpemUgd2FzIGZvdW5kLCBm
YWxsYmFjayB0byBkcmF3aW5nIHRoZSBjdXJyZW50IGZyYW1lCi0gICAgSW50U2l6ZSBpbWFnZVNp
emUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwotICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBz
dHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJp
dG1hcEltYWdlOjpzaXplKHVzZXIpOworICAgIGRyYXcodXNlciwgY3R4dCwgZHN0UmVjdCwgRmxv
YXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkp
LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fp
cm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUNhaXJvV2luLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gQml0bWFwSW1hZ2U6OmNy
ZQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwSW1hZ2UoaW1hZ2UpKTsKIH0KIAotYm9v
bCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgTFBTSVpFIHNpemUp
Citib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1wbiwgTFBTSVpF
IHNpemUpCiB7CiAgICAgQVNTRVJUKGJtcCk7CiAKQEAgLTgwLDExICs4MCwxMSBAQCBib29sIEJp
dG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNCiAKICAgICBHcmFwaGljc0NvbnRleHQg
Z2ModGFyZ2V0UmVmKTsKIAotICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNp
emUoKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKDApOwogICAg
IGlmIChzaXplKQotICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9h
dFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50
U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAg
ICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoMCwgJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4w
ZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOwogICAgIGVsc2UKLSAgICAgICAgZHJh
dygmZ2MsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1I
ZWlnaHQpLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6
ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAg
ICBkcmF3KDAsICZnYywgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1w
SW5mby5ibUhlaWdodCksIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwg
aW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7
CiAKICAgICAvLyBEbyBjbGVhbnVwCiAgICAgY2Fpcm9fZGVzdHJveSh0YXJnZXRSZWYpOwpAQCAt
OTIsNyArOTIsNyBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5n
U291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1l
TWF0Y2hpbmdTb3VyY2VTaXplKEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGN0eHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewog
ICAgIHNpemVfdCBmcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmcmFtZXM7ICsraSkgewpAQCAtMTAwLDE1ICsxMDAsMTUgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyYwogICAgICAgICBpZiAoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfaGVpZ2h0KGltYWdlKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNyY1NpemUuaGVpZ2h0
KCkpICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSA9PSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNyY1NpemUud2lkdGgoKSkpIHsKICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50
RnJhbWUgPSBtX2N1cnJlbnRGcmFtZTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lID0gaTsK
LSAgICAgICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIHNy
Y1NpemUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGNv
bXBvc2l0ZU9wKTsKKyAgICAgICAgICAgIGRyYXcodXNlciwgY3R4dCwgZHN0UmVjdCwgRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIHNyY1NpemUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGNvbXBvc2l0ZU9wKTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1l
ID0gY3VycmVudEZyYW1lOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgLy8gTm8gaW1hZ2Ugb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3YXMgZm91bmQsIGZhbGxiYWNr
IHRvIGRyYXdpbmcgdGhlIGN1cnJlbnQgZnJhbWUKLSAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJp
dG1hcEltYWdlOjpzaXplKCk7Ci0gICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4w
ZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGNvbXBvc2l0ZU9wKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1h
cEltYWdlOjpzaXplKHVzZXIpOworICAgIGRyYXcodXNlciwgY3R4dCwgZHN0UmVjdCwgRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBjb21wb3NpdGVPcCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdl
V2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ltYWdlV2luQ0UuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NiwxMSArNzYsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklU
TQogICAgIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKGhkYy5nZXQoKSk7CiAKLSAgICAg
ICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOworICAgICAgICBJbnRT
aXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKDApOwogICAgICAgICBpZiAoc2l6ZSkK
LSAgICAgICAgICAgIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZSgmZ2MsIEZsb2F0UmVjdCgw
LCAwLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBJbnRTaXplKCpzaXplKSwg
Q29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgICAgICBkcmF3RnJh
bWVNYXRjaGluZ1NvdXJjZVNpemUoMCwgJmdjLCBGbG9hdFJlY3QoMCwgMCwgYm1wSW5mby5ibVdp
ZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIENvbXBvc2l0ZUNvcHkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3KCZnYywg
RmxvYXRSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEZsb2F0
UmVjdCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgICAgICBkcmF3KDAsICZnYywg
RmxvYXRSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEZsb2F0
UmVjdCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CiAgICAgfQogCiAgICAgU2VsZWN0T2JqZWN0
KGhkYy5nZXQoKSwgaE9sZEJtcCk7CkBAIC04OCw3ICs4OCw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6
OmdldEhCSVRNQVBPZlNpemUoSEJJVE0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2
b2lkIEJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoSW1hZ2VVc2VyIHVz
ZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgaW50IGZyYW1lcyA9IGZyYW1lQ291bnQoKTsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7CkBAIC05OCwxNyArOTgsMTcg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyYwogCiAgICAgICAgIHNp
emVfdCBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFtZTsKICAgICAgICAgbV9jdXJyZW50RnJh
bWUgPSBpOwotICAgICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLCAwLCBzcmNT
aXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0
ZU9wKTsKKyAgICAgICAgZHJhdyh1c2VyLCBjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMCwgMCwg
c3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdodCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21w
b3NpdGVPcCk7CiAgICAgICAgIG1fY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gTm8gaW1hZ2Ugb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3
YXMgZm91bmQsIGZhbGxiYWNrIHRvIGRyYXdpbmcgdGhlIGN1cnJlbnQgZnJhbWUKLSAgICBJbnRT
aXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7Ci0gICAgZHJhdyhjdHh0LCBkc3RS
ZWN0LCBGbG9hdFJlY3QoMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQo
KSksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOworICAgIEludFNpemUgaW1hZ2VTaXpl
ID0gQml0bWFwSW1hZ2U6OnNpemUodXNlcik7CisgICAgZHJhdyh1c2VyLCBjdHh0LCBkc3RSZWN0
LCBGbG9hdFJlY3QoMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSks
IHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3RJbiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhJbWFnZVVz
ZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3RJbiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMzLDE2ICsxMzMsMTYgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiB9CiAK
LXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LAordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEltYWdlVXNlciB1c2Vy
LCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAg
ICBSZWZQdHI8U2hhcmVkQml0bWFwPiBibXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OworICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJtcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKHVzZXIpOwogICAgIGlmICghYm1wKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCShyZXZpc2lv
biA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6Omlu
aXRQbGF0Zm9ybURhdGEoKQogCiAvLyBEcmF3aW5nIFJvdXRpbmVzCiAKLXZvaWQgQml0bWFwSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBvcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoSW1hZ2VVc2VyLCBHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAg
IGlmICghbV9zb3VyY2UuaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc3LDE0
ICsxNzcsMTQgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAg
ICAgICBvYnNlcnZlci0+ZGlkRHJhdyh0aGlzKTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QpCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihJbWFnZVVzZXIgdXNlciwgR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCiB7CiAjaWYgVVNF
KFdYR0MpCiAgICAgd3hHQ0RDKiBjb250ZXh0ID0gKHd4R0NEQyopY3R4dC0+cGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgd3hHcmFwaGljc0JpdG1hcCogYml0bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKKyAgICB3eEdyYXBoaWNzQml0bWFwKiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSh1c2VyKTsKICNlbHNlCiAgICAgd3hXaW5kb3dEQyogY29udGV4dCA9IGN0
eHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHd4Qml0bWFwKiBiaXRtYXAgPSBuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHd4Qml0bWFwKiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSh1c2VyKTsKICNlbmRpZgogCiAgICAgaWYgKCFiaXRtYXApIC8vIElmIGl0
J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAJKHJldmlzaW9uIDk2Njk4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDcgKzc1LDcgQEAgRHJhZ0ltYWdlUmVmIGRpc3NvbHZlRHJhZ0ltYWdlVG9G
cmFjdGlvbgogCiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBp
bWFnZSkKIHsKLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UoaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3JlZmVy
ZW5jZShpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCkpOwogfQogCiBEcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQkocmV2aXNp
b24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBkaXNz
b2x2ZURyYWdJbWFnZVRvRnIKIFJldGFpblB0cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VGcm9t
SW1hZ2UoSW1hZ2UqIGltYWdlKQogewogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2Uo
QWRvcHROUywgW2ltYWdlLT5nZXROU0ltYWdlKCkgY29weV0pOwotICAgIFtkcmFnSW1hZ2UuZ2V0
KCkgc2V0U2l6ZTooTlNTaXplKShpbWFnZS0+c2l6ZSgpKV07CisgICAgW2RyYWdJbWFnZS5nZXQo
KSBzZXRTaXplOihOU1NpemUpKGltYWdlLT5zaXplKDApKV07CiAgICAgcmV0dXJuIGRyYWdJbWFn
ZTsKIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRR
dC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xp
cGJvYXJkUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgRHJhZ0ltYWdl
UmVmIENsaXBib2FyZFF0OjpjcmVhdGVEcmFnSW1hZwogICAgIGlmICghbV9kcmFnSW1hZ2UpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIGRyYWdMb2MgPSBtX2RyYWdMb2M7Ci0gICAgcmV0dXJuIG1f
ZHJhZ0ltYWdlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHJl
dHVybiBtX2RyYWdJbWFnZS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7
CiB9CiAKIApAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgQ2xpcGJvYXJkUXQ6OmRlY2xhcmVBbmRX
cml0ZURyYWdJbWEKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBnZXRDYWNoZWRJbWFn
ZShlbGVtZW50KTsKICAgICBpZiAoIWNhY2hlZEltYWdlIHx8ICFjYWNoZWRJbWFnZS0+aW1hZ2Uo
KSB8fCAhY2FjaGVkSW1hZ2UtPmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBRUGl4
bWFwKiBwaXhtYXAgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICBRUGl4bWFwKiBwaXhtYXAgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoZWxlbWVudC0+cmVuZGVyZXIoKSk7CiAgICAgaWYgKHBp
eG1hcCkKICAgICAgICAgbV93cml0YWJsZURhdGEtPnNldEltYWdlRGF0YSgqcGl4bWFwKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ3Vyc29yUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0LmNwcAkocmV2aXNpb24gOTY2
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDEwICs3NSwxMCBAQCBDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0
IEN1cnNvciYgCiAjaWZuZGVmIFFUX05PX0NVUlNPUgogc3RhdGljIFFDdXJzb3IqIGNyZWF0ZUN1
c3RvbUN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQogewotICAg
IGlmICghaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpCisgICAgaWYgKCFpbWFn
ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IEludFBvaW50IGVmZmVjdGl2ZUhvdFNwb3QgPSBkZXRlcm1pbmVIb3RTcG90KGltYWdlLCBob3RT
cG90KTsKLSAgICByZXR1cm4gbmV3IFFDdXJzb3IoKihpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSksIGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBlZmZlY3RpdmVIb3RTcG90LnkoKSk7
CisgICAgcmV0dXJuIG5ldyBRQ3Vyc29yKCooaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKDApKSwgZWZmZWN0aXZlSG90U3BvdC54KCksIGVmZmVjdGl2ZUhvdFNwb3QueSgpKTsKIH0K
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQu
Y3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RyYWdJ
bWFnZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTAgKzYzLDEwIEBAIERyYWdJbWFnZVJl
ZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24KIAogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJ
bWFnZUZyb21JbWFnZShJbWFnZSogaW1hZ2UpCiB7Ci0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpCisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBuZXcgUVBpeG1hcCgqaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkp
OworICAgIHJldHVybiBuZXcgUVBpeG1hcCgqaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKDApKTsKIH0KIAogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJ
bWFnZShDYWNoZWRJbWFnZSopCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0
ZWJvYXJkUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bh
c3RlYm9hcmRRdC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvUGFzdGVib2FyZFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBA
IHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKICAgICBJbWFnZSogaW1h
Z2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKICAgICBBU1NFUlQoaW1hZ2UpOwogCi0gICAgUVBp
eG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
UVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKG5vZGUt
PnJlbmRlcmVyKCkpOwogICAgIGlmICghcGl4bWFwKQogICAgICAgICByZXR1cm47CiAgICAgUUFw
cGxpY2F0aW9uOjpjbGlwYm9hcmQoKS0+c2V0UGl4bWFwKCpwaXhtYXAsIFFDbGlwYm9hcmQ6OkNs
aXBib2FyZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fp
cm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFn
SW1hZ2VDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcg
KzE1OSw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW0KICAgICAg
ICAgZ290byBleGl0OwogCiAgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIGRyYXdDb250ZXh0ID0g
MDsKLSAgICBoYm1wID0gYWxsb2NJbWFnZSh3b3JraW5nREMsIGltZy0+c2l6ZSgpLCAmZHJhd0Nv
bnRleHQpOworICAgIGhibXAgPSBhbGxvY0ltYWdlKHdvcmtpbmdEQywgaW1nLT5zaXplKDApLCAm
ZHJhd0NvbnRleHQpOwogICAgIGlmICghaGJtcCkKICAgICAgICAgZ290byBleGl0OwogCkBAIC0x
NzIsNyArMTcyLDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbQog
ICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAxLjAsIDAuMCwgMS4wKTsKICAgICBjYWlyb19m
aWxsX3ByZXNlcnZlKGNyKTsKIAotICAgIGNhaXJvX3N1cmZhY2VfdCogc3JjSW1hZ2UgPSBpbWct
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzcmNJ
bWFnZSA9IGltZy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiAKICAgICAvLyBEcmF3
IHRoZSBpbWFnZS4KICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHNyY0ltYWdlLCAw
LjAsIDAuMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9h
cmRXaW4uY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDE2ICsyMjUsMTYgQEAg
dm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIEhEQyBkYyA9IEdl
dERDKDApOwogICAgIEhEQyBjb21wYXRpYmxlREMgPSBDcmVhdGVDb21wYXRpYmxlREMoMCk7CiAg
ICAgSERDIHNvdXJjZURDID0gQ3JlYXRlQ29tcGF0aWJsZURDKDApOwotICAgIE93blB0cjxIQklU
TUFQPiByZXN1bHRCaXRtYXAgPSBhZG9wdFB0cihDcmVhdGVDb21wYXRpYmxlQml0bWFwKGRjLCBp
bWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpKSk7CisgICAgT3duUHRyPEhCSVRNQVA+IHJl
c3VsdEJpdG1hcCA9IGFkb3B0UHRyKENyZWF0ZUNvbXBhdGlibGVCaXRtYXAoZGMsIGltYWdlLT53
aWR0aChyZW5kZXJlciksIGltYWdlLT5oZWlnaHQocmVuZGVyZXIpKSk7CiAgICAgSEdESU9CSiBv
bGRCaXRtYXAgPSBTZWxlY3RPYmplY3QoY29tcGF0aWJsZURDLCByZXN1bHRCaXRtYXAuZ2V0KCkp
OwogCi0gICAgQml0bWFwSW5mbyBibUluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoaW1hZ2UtPnNp
emUoKSk7CisgICAgQml0bWFwSW5mbyBibUluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoaW1hZ2Ut
PnNpemUocmVuZGVyZXIpKTsKIAogICAgIEhCSVRNQVAgY29yZUJpdG1hcCA9IENyZWF0ZURJQlNl
Y3Rpb24oZGMsICZibUluZm8sIERJQl9SR0JfQ09MT1JTLCAwLCAwLCAwKTsKICAgICBIR0RJT0JK
IG9sZFNvdXJjZSA9IFNlbGVjdE9iamVjdChzb3VyY2VEQywgY29yZUJpdG1hcCk7CiAgICAgaW1h
Z2UtPmdldEhCSVRNQVAoY29yZUJpdG1hcCk7CiAKLSAgICBCaXRCbHQoY29tcGF0aWJsZURDLCAw
LCAwLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCBzb3VyY2VEQywgMCwgMCwgU1JD
Q09QWSk7CisgICAgQml0Qmx0KGNvbXBhdGlibGVEQywgMCwgMCwgaW1hZ2UtPndpZHRoKHJlbmRl
cmVyKSwgaW1hZ2UtPmhlaWdodChyZW5kZXJlciksIHNvdXJjZURDLCAwLCAwLCBTUkNDT1BZKTsK
IAogICAgIFNlbGVjdE9iamVjdChzb3VyY2VEQywgb2xkU291cmNlKTsKICAgICBEZWxldGVPYmpl
Y3QoY29yZUJpdG1hcCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9QYXN0
ZWJvYXJkV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bmNlL1Bhc3RlYm9hcmRXaW5DRS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luY2UvUGFzdGVib2FyZFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEzLDcgKzIxMyw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAK
IAogICAgIGNsZWFyKCk7CiAKLSAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBzb3VyY2VCbXAgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBSZWZQdHI8U2hhcmVkQml0
bWFwPiBzb3VyY2VCbXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUocmVuZGVy
ZXIpOwogICAgIGlmICghc291cmNlQm1wKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2
aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgYm9vbCBJbWFnZVF1
YWxpdHlDb250cm9sbGVyOjpzaG91bGRQYWludAogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0byB1
c2UgdGhlIHVuem9vbWVkIGltYWdlIHNpemUsIHNpbmNlIGlmIGEgZnVsbCBwYWdlIHpvb20gaXMg
aW4gZWZmZWN0LCB0aGUgaW1hZ2UKICAgICAvLyBpcyBhY3R1YWxseSBiZWluZyBzY2FsZWQuCi0g
ICAgSW50U2l6ZSBpbWFnZVNpemUoaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7Cisg
ICAgSW50U2l6ZSBpbWFnZVNpemUoaW1hZ2UtPndpZHRoKG9iamVjdCksIGltYWdlLT5oZWlnaHQo
b2JqZWN0KSk7CiAKICAgICAvLyBMb29rIG91cnNlbHZlcyB1cCBpbiB0aGUgaGFzaHRhYmxlcy4K
ICAgICBPYmplY3RMYXllclNpemVNYXA6Oml0ZXJhdG9yIGkgPSBtX29iamVjdExheWVyU2l6ZU1h
cC5maW5kKG9iamVjdCk7CkBAIC0xNzEsNyArMTcxLDcgQEAgYm9vbCBJbWFnZVF1YWxpdHlDb250
cm9sbGVyOjpzaG91bGRQYWludAogCiAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBoYXNoIHNj
YWxlZCBpbWFnZXMgdGhhdCBhbHdheXMgdXNlIGxvdyBxdWFsaXR5IG1vZGUgd2hlbiB0aGUgcGFn
ZSBkZW1hbmRzIGl0LiBUaGlzIGlzIHRoZSBpQ2hhdCBjYXNlLgogICAgIGlmIChvYmplY3QtPmRv
Y3VtZW50KCktPnBhZ2UoKS0+aW5Mb3dRdWFsaXR5SW1hZ2VJbnRlcnBvbGF0aW9uTW9kZSgpKSB7
Ci0gICAgICAgIGRvdWJsZSB0b3RhbFBpeGVscyA9IHN0YXRpY19jYXN0PGRvdWJsZT4oaW1hZ2Ut
PndpZHRoKCkpICogc3RhdGljX2Nhc3Q8ZG91YmxlPihpbWFnZS0+aGVpZ2h0KCkpOworICAgICAg
ICBkb3VibGUgdG90YWxQaXhlbHMgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGltYWdlLT53aWR0aChv
YmplY3QpKSAqIHN0YXRpY19jYXN0PGRvdWJsZT4oaW1hZ2UtPmhlaWdodChvYmplY3QpKTsKICAg
ICAgICAgaWYgKHRvdGFsUGl4ZWxzID4gY0ludGVycG9sYXRpb25DdXRvZmYpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGll
bnRGb3JCYWNrZ3JvdW5kSW1hZ2UgPSBiYWNrZ3JvdW5kT2JqZWN0ID8gYmFja2dyb3VuZE9iamVj
dCA6IHRoaXM7CiAgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYmdJbWFnZS0+aW1h
Z2UoY2xpZW50Rm9yQmFja2dyb3VuZEltYWdlLCBnZW9tZXRyeS50aWxlU2l6ZSgpKTsKICAgICAg
ICAgICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBzaG91bGRQYWludEF0TG93UXVhbGl0
eShjb250ZXh0LCBpbWFnZS5nZXQoKSwgYmdMYXllciwgZ2VvbWV0cnkudGlsZVNpemUoKSk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgc3R5bGUoKS0+
Y29sb3JTcGFjZSgpLCBnZW9tZXRyeS5kZXN0UmVjdCgpLCBnZW9tZXRyeS5yZWxhdGl2ZVBoYXNl
KCksIGdlb21ldHJ5LnRpbGVTaXplKCksIAorICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RpbGVk
SW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgZ2VvbWV0cnku
ZGVzdFJlY3QoKSwgZ2VvbWV0cnkucmVsYXRpdmVQaGFzZSgpLCBnZW9tZXRyeS50aWxlU2l6ZSgp
LCAKICAgICAgICAgICAgICAgICBjb21wb3NpdGVPcCwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtODAzLDcgKzgwMyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50RmlsbExheWUKIExheW91dFNpemUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNh
bGN1bGF0ZUZpbGxUaWxlU2l6ZShjb25zdCBGaWxsTGF5ZXIqIGZpbGxMYXllciwgTGF5b3V0U2l6
ZSBwb3NpdGlvbmluZ0FyZWFTaXplKSBjb25zdAogewogICAgIFN0eWxlSW1hZ2UqIGltYWdlID0g
ZmlsbExheWVyLT5pbWFnZSgpOwotICAgIGltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUocG9z
aXRpb25pbmdBcmVhU2l6ZSk7IC8vIFVzZSB0aGUgYm94IGVzdGFibGlzaGVkIGJ5IGJhY2tncm91
bmQtb3JpZ2luLgorICAgIGltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUodGhpcywgcG9zaXRp
b25pbmdBcmVhU2l6ZSk7IC8vIFVzZSB0aGUgYm94IGVzdGFibGlzaGVkIGJ5IGJhY2tncm91bmQt
b3JpZ2luLgogCiAgICAgRUZpbGxTaXplVHlwZSB0eXBlID0gZmlsbExheWVyLT5zaXplKCkudHlw
ZTsKIApAQCAtMTAwNSw3ICsxMDA1LDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnROaW5lUGllYwogICAgIExheW91dFVuaXQgcmlnaHRXaXRoT3V0c2V0ID0gcmVjdC5tYXhYKCkg
KyByaWdodE91dHNldDsKICAgICBMYXlvdXRSZWN0IGJvcmRlckltYWdlUmVjdCA9IExheW91dFJl
Y3QobGVmdFdpdGhPdXRzZXQsIHRvcFdpdGhPdXRzZXQsIHJpZ2h0V2l0aE91dHNldCAtIGxlZnRX
aXRoT3V0c2V0LCBib3R0b21XaXRoT3V0c2V0IC0gdG9wV2l0aE91dHNldCk7CiAKLSAgICBzdHls
ZUltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUoYm9yZGVySW1hZ2VSZWN0LnNpemUoKSk7Cisg
ICAgc3R5bGVJbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHRoaXMsIGJvcmRlckltYWdlUmVj
dC5zaXplKCkpOwogICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gc3R5bGVJbWFnZS0+aW1hZ2VT
aXplKHRoaXMsIDEuMGYpOwogICAgIExheW91dFVuaXQgaW1hZ2VXaWR0aCA9IGltYWdlU2l6ZS53
aWR0aCgpOwogICAgIExheW91dFVuaXQgaW1hZ2VIZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0KCk7
CkBAIC0xMDY0LDE4ICsxMDY0LDE4IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
TmluZVBpZWMKICAgICAgICAgLy8gVGhlIHRvcCBsZWZ0IGNvcm5lciByZWN0IGlzICh0eCwgdHks
IGxlZnRXaWR0aCwgdG9wV2lkdGgpCiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdp
dGhpbiB0aGUgaW1hZ2UgaXMgb2J0YWluZWQgZnJvbSBvdXIgc2xpY2UsIGFuZCBpcyAoMCwgMCwg
bGVmdFNsaWNlLCB0b3BTbGljZSkKICAgICAgICAgaWYgKGRyYXdUb3ApCi0gICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0
UmVjdChib3JkZXJJbWFnZVJlY3QubG9jYXRpb24oKSwgTGF5b3V0U2l6ZShsZWZ0V2lkdGgsIHRv
cFdpZHRoKSksCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZSh0aGlzLCBp
bWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QubG9jYXRp
b24oKSwgTGF5b3V0U2l6ZShsZWZ0V2lkdGgsIHRvcFdpZHRoKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KDAsIDAsIGxlZnRTbGljZSwgdG9wU2xp
Y2UpLCBvcCk7CiAKICAgICAgICAgLy8gVGhlIGJvdHRvbSBsZWZ0IGNvcm5lciByZWN0IGlzICh0
eCwgdHkgKyBoIC0gYm90dG9tV2lkdGgsIGxlZnRXaWR0aCwgYm90dG9tV2lkdGgpCiAgICAgICAg
IC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgKDAsIGltYWdlSGVp
Z2h0IC0gYm90dG9tU2xpY2UsIGxlZnRTbGljZSwgYm90b21TbGljZSkKICAgICAgICAgaWYgKGRy
YXdCb3R0b20pCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5n
ZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QueCgpLCBib3JkZXJJ
bWFnZVJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgsIGxlZnRXaWR0aCwgYm90dG9tV2lkdGgpLAor
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCks
IGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSwgYm9yZGVySW1hZ2VS
ZWN0Lm1heFkoKSAtIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGgsIGJvdHRvbVdpZHRoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFJlY3QoMCwgaW1hZ2VIZWln
aHQgLSBib3R0b21TbGljZSwgbGVmdFNsaWNlLCBib3R0b21TbGljZSksIG9wKTsKIAogICAgICAg
ICAvLyBQYWludCB0aGUgbGVmdCBlZGdlLgogICAgICAgICAvLyBIYXZlIHRvIHNjYWxlIGFuZCB0
aWxlIGludG8gdGhlIGJvcmRlciByZWN0LgotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdU
aWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdl
UmVjdC54KCksIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgbGVmdFdpZHRoLAorICAg
ICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKHRoaXMsIGltYWdlLmdldCgpLCBj
b2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlckltYWdlUmVj
dC55KCkgKyB0b3BXaWR0aCwgbGVmdFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uSGVpZ2h0KSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KDAsIHRvcFNsaWNlLCBsZWZ0U2xpY2UsIHNvdXJj
ZUhlaWdodCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRT
aXplKGxlZnRTaWRlU2NhbGUsIGxlZnRTaWRlU2NhbGUpLCBJbWFnZTo6U3RyZXRjaFRpbGUsIChJ
bWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9wKTsKQEAgLTEwODYsMTcgKzEwODYsMTcgQEAgYm9vbCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllYwogICAgICAgICAvLyBUaGUgdG9wIHJp
Z2h0IGNvcm5lciByZWN0IGlzICh0eCArIHcgLSByaWdodFdpZHRoLCB0eSwgcmlnaHRXaWR0aCwg
dG9wV2lkdGgpCiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1h
Z2UgaXMgb2J0YWluZWQgZnJvbSBvdXIgc2xpY2UsIGFuZCBpcyAoaW1hZ2VXaWR0aCAtIHJpZ2h0
U2xpY2UsIDAsIHJpZ2h0U2xpY2UsIHRvcFNsaWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNw
YWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC5tYXhYKCkgLSByaWdodFdpZHRoLCBib3Jk
ZXJJbWFnZVJlY3QueSgpLCByaWdodFdpZHRoLCB0b3BXaWR0aCksCisgICAgICAgICAgICBncmFw
aGljc0NvbnRleHQtPmRyYXdJbWFnZSh0aGlzLCBpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5
b3V0UmVjdChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVySW1hZ2VS
ZWN0LnkoKSwgcmlnaHRXaWR0aCwgdG9wV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0UmVjdChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgMCwgcmln
aHRTbGljZSwgdG9wU2xpY2UpLCBvcCk7CiAKICAgICAgICAgLy8gVGhlIGJvdHRvbSByaWdodCBj
b3JuZXIgcmVjdCBpcyAodHggKyB3IC0gcmlnaHRXaWR0aCwgdHkgKyBoIC0gYm90dG9tV2lkdGgs
IHJpZ2h0V2lkdGgsIGJvdHRvbVdpZHRoKQogICAgICAgICAvLyBUaGUgcmVjdCB0byB1c2UgZnJv
bSB3aXRoaW4gdGhlIGltYWdlIGlzIChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgaW1hZ2VIZWln
aHQgLSBib3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90dG9tU2xpY2UpCiAgICAgICAgIGlmIChk
cmF3Qm90dG9tKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2Uu
Z2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1heFgoKSAtIHJp
Z2h0V2lkdGgsIGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwgcmlnaHRXaWR0
aCwgYm90dG9tV2lkdGgpLAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2Uo
dGhpcywgaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0
Lm1heFgoKSAtIHJpZ2h0V2lkdGgsIGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21XaWR0
aCwgcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0UmVjdChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgaW1hZ2VIZWln
aHQgLSBib3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90dG9tU2xpY2UpLCBvcCk7CiAKICAgICAg
ICAgLy8gUGFpbnQgdGhlIHJpZ2h0IGVkZ2UuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJh
d1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1h
Z2VSZWN0Lm1heFgoKSAtIHJpZ2h0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0
aCwgcmlnaHRXaWR0aCwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZSh0
aGlzLCBpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3Qu
bWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCByaWdo
dFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uSGVpZ2h0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlv
dXRSZWN0KGltYWdlV2lkdGggLSByaWdodFNsaWNlLCB0b3BTbGljZSwgcmlnaHRTbGljZSwgc291
cmNlSGVpZ2h0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h
dFNpemUocmlnaHRTaWRlU2NhbGUsIHJpZ2h0U2lkZVNjYWxlKSwKQEAgLTExMDUsMTMgKzExMDUs
MTMgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllYwogCiAgICAgLy8g
UGFpbnQgdGhlIHRvcCBlZGdlLgogICAgIGlmIChkcmF3VG9wKQotICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0
KGJvcmRlckltYWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCksIGRl
c3RpbmF0aW9uV2lkdGgsIHRvcFdpZHRoKSwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
VGlsZWRJbWFnZSh0aGlzLCBpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3Jk
ZXJJbWFnZVJlY3QueCgpICsgbGVmdFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpLCBkZXN0aW5h
dGlvbldpZHRoLCB0b3BXaWR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGF5b3V0UmVjdChsZWZ0U2xpY2UsIDAsIHNvdXJjZVdpZHRoLCB0b3BTbGljZSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKHRvcFNpZGVT
Y2FsZSwgdG9wU2lkZVNjYWxlKSwgKEltYWdlOjpUaWxlUnVsZSloUnVsZSwgSW1hZ2U6OlN0cmV0
Y2hUaWxlLCBvcCk7CiAKICAgICAvLyBQYWludCB0aGUgYm90dG9tIGVkZ2UuCiAgICAgaWYgKGRy
YXdCb3R0b20pCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2Uu
Z2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRX
aWR0aCwgYm9yZGVySW1hZ2VSZWN0Lm1heFkoKSAtIGJvdHRvbVdpZHRoLAorICAgICAgICBncmFw
aGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKHRoaXMsIGltYWdlLmdldCgpLCBjb2xvclNwYWNl
LCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdl
UmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbldpZHRoLCBib3R0b21XaWR0aCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdChsZWZ0U2xpY2UsIGltYWdlSGVp
Z2h0IC0gYm90dG9tU2xpY2UsIHNvdXJjZVdpZHRoLCBib3R0b21TbGljZSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKGJvdHRvbVNpZGVTY2FsZSwg
Ym90dG9tU2lkZVNjYWxlKSwKQEAgLTExMzksNyArMTEzOSw3IEBAIGJvb2wgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICAgICAgaWYgKHZSdWxlID09IFN0cmV0Y2hJbWFn
ZVJ1bGUpCiAgICAgICAgICAgICBtaWRkbGVTY2FsZUZhY3Rvci5zZXRIZWlnaHQoZGVzdGluYXRp
b25IZWlnaHQgLyBzb3VyY2VIZWlnaHQpOwogICAgICAgICAKLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwKKyAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZSh0aGlzLCBpbWFnZS5nZXQoKSwgY29sb3JTcGFj
ZSwKICAgICAgICAgICAgIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0
aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCBkZXN0aW5hdGlvbldpZHRoLCBkZXN0
aW5hdGlvbkhlaWdodCksCiAgICAgICAgICAgICBMYXlvdXRSZWN0KGxlZnRTbGljZSwgdG9wU2xp
Y2UsIHNvdXJjZVdpZHRoLCBzb3VyY2VIZWlnaHQpLAogICAgICAgICAgICAgbWlkZGxlU2NhbGVG
YWN0b3IsIChJbWFnZTo6VGlsZVJ1bGUpaFJ1bGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9w
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNp
b24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCwxMCArODgsMTAgQEAgSW50U2l6ZSBSZW5kZXJJbWFnZTo6aW1h
Z2VTaXplRm9yRXJyb3IoQwogICAgIGlmIChuZXdJbWFnZS0+d2lsbFBhaW50QnJva2VuSW1hZ2Uo
KSkgewogICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNj
YWxlRmFjdG9yKGZyYW1lKCkpOwogICAgICAgICBwYWlyPEltYWdlKiwgZmxvYXQ+IGJyb2tlbklt
YWdlQW5kSW1hZ2VTY2FsZUZhY3RvciA9IG5ld0ltYWdlLT5icm9rZW5JbWFnZShkZXZpY2VTY2Fs
ZUZhY3Rvcik7Ci0gICAgICAgIGltYWdlU2l6ZSA9IGJyb2tlbkltYWdlQW5kSW1hZ2VTY2FsZUZh
Y3Rvci5maXJzdC0+c2l6ZSgpOworICAgICAgICBpbWFnZVNpemUgPSBicm9rZW5JbWFnZUFuZElt
YWdlU2NhbGVGYWN0b3IuZmlyc3QtPnNpemUodGhpcyk7CiAgICAgICAgIGltYWdlU2l6ZS5zY2Fs
ZSgxIC8gYnJva2VuSW1hZ2VBbmRJbWFnZVNjYWxlRmFjdG9yLnNlY29uZCk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIGltYWdlU2l6ZSA9IG5ld0ltYWdlLT5pbWFnZSgpLT5zaXplKCk7CisgICAgICAg
IGltYWdlU2l6ZSA9IG5ld0ltYWdlLT5pbWFnZSgpLT5zaXplKHRoaXMpOwogCiAgICAgLy8gaW1h
Z2VTaXplKCkgcmV0dXJucyAwIGZvciB0aGUgZXJyb3IgaW1hZ2UuIFdlIG5lZWQgdGhlIHRydWUg
c2l6ZSBvZiB0aGUKICAgICAvLyBlcnJvciBpbWFnZSwgc28gd2UgaGF2ZSB0byBnZXQgaXQgYnkg
Z3JhYmJpbmcgaW1hZ2UoKSBkaXJlY3RseS4KQEAgLTI3NiwxMiArMjc2LDEyIEBAIHZvaWQgUmVu
ZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYKIAogICAgICAgICAgICAgUmVmUHRyPElt
YWdlPiBpbWFnZSA9IG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2UoKTsKIAotICAgICAgICAgICAgaWYg
KG1faW1hZ2VSZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpICYmICFpbWFnZS0+aXNOdWxsKCkgJiYg
dXNhYmxlV2lkdGggPj0gaW1hZ2UtPndpZHRoKCkgJiYgdXNhYmxlSGVpZ2h0ID49IGltYWdlLT5o
ZWlnaHQoKSkgeworICAgICAgICAgICAgaWYgKG1faW1hZ2VSZXNvdXJjZS0+ZXJyb3JPY2N1cnJl
ZCgpICYmICFpbWFnZS0+aXNOdWxsKCkgJiYgdXNhYmxlV2lkdGggPj0gaW1hZ2UtPndpZHRoKHRo
aXMpICYmIHVzYWJsZUhlaWdodCA+PSBpbWFnZS0+aGVpZ2h0KHRoaXMpKSB7CiAgICAgICAgICAg
ICAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3Rv
cihmcmFtZSgpKTsKICAgICAgICAgICAgICAgICAvLyBDYWxsIGJyb2tlbkltYWdlKCkgZXhwbGlj
aXRseSB0byBlbnN1cmUgd2UgZ2V0IHRoZSBicm9rZW4gaW1hZ2UgaWNvbiBhdCB0aGUgYXBwcm9w
cmlhdGUgcmVzb2x1dGlvbi4KICAgICAgICAgICAgICAgICBwYWlyPEltYWdlKiwgZmxvYXQ+IGJy
b2tlbkltYWdlQW5kSW1hZ2VTY2FsZUZhY3RvciA9IG1faW1hZ2VSZXNvdXJjZS0+Y2FjaGVkSW1h
Z2UoKS0+YnJva2VuSW1hZ2UoZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGlt
YWdlID0gYnJva2VuSW1hZ2VBbmRJbWFnZVNjYWxlRmFjdG9yLmZpcnN0OwotICAgICAgICAgICAg
ICAgIEludFNpemUgaW1hZ2VTaXplID0gaW1hZ2UtPnNpemUoKTsKKyAgICAgICAgICAgICAgICBJ
bnRTaXplIGltYWdlU2l6ZSA9IGltYWdlLT5zaXplKHRoaXMpOwogICAgICAgICAgICAgICAgIGlt
YWdlU2l6ZS5zY2FsZSgxIC8gYnJva2VuSW1hZ2VBbmRJbWFnZVNjYWxlRmFjdG9yLnNlY29uZCk7
CiAgICAgICAgICAgICAgICAgLy8gQ2VudGVyIHRoZSBlcnJvciBpbWFnZSwgYWNjb3VudGluZyBm
b3IgYm9yZGVyIGFuZCBwYWRkaW5nLgogICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2VudGVy
WCA9ICh1c2FibGVXaWR0aCAtIGltYWdlU2l6ZS53aWR0aCgpKSAvIDI7CkBAIC0yOTEsNyArMjkx
LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAgICAg
ICAgICAgIGlmIChjZW50ZXJZIDwgMCkKICAgICAgICAgICAgICAgICAgICAgY2VudGVyWSA9IDA7
CiAgICAgICAgICAgICAgICAgaW1hZ2VPZmZzZXQgPSBMYXlvdXRTaXplKGxlZnRCb3JkZXIgKyBs
ZWZ0UGFkICsgY2VudGVyWCArIDEsIHRvcEJvcmRlciArIHRvcFBhZCArIGNlbnRlclkgKyAxKTsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSwgSW50UmVjdChwYWludE9mZnNldCArIGltYWdlT2Zmc2V0LCBpbWFnZVNp
emUpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UodGhpcywgaW1hZ2UuZ2V0
KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgSW50UmVjdChwYWludE9mZnNldCArIGltYWdlT2Zm
c2V0LCBpbWFnZVNpemUpKTsKICAgICAgICAgICAgICAgICBlcnJvclBpY3R1cmVEcmF3biA9IHRy
dWU7CiAgICAgICAgICAgICB9CiAKQEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lkIFJlbmRlckltYWdl
OjpwYWludEludG9SZWN0KEdyYXBoaWNzCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IgPSBpbWFnZUVsdCA/IGltYWdlRWx0LT5jb21wb3NpdGVPcGVyYXRvcigpIDogQ29t
cG9zaXRlU291cmNlT3ZlcjsKICAgICBJbWFnZSogaW1hZ2UgPSBtX2ltYWdlUmVzb3VyY2UtPmlt
YWdlKCkuZ2V0KCk7CiAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50
QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdlLCBpbWFnZSwgcmVjdC5zaXplKCkpOwotICAgIGNv
bnRleHQtPmRyYXdJbWFnZShtX2ltYWdlUmVzb3VyY2UtPmltYWdlKHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSkuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgcmVjdCwgY29tcG9zaXRl
T3BlcmF0b3IsIHVzZUxvd1F1YWxpdHlTY2FsaW5nKTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2Uo
dGhpcywgbV9pbWFnZVJlc291cmNlLT5pbWFnZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
LmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIHJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCB1
c2VMb3dRdWFsaXR5U2NhbGluZyk7CiB9CiAKIGJvb2wgUmVuZGVySW1hZ2U6OmJhY2tncm91bmRJ
c09ic2N1cmVkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZVJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2VSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OSwxOSArODksMjkgQEAgdm9pZCBSZW5kZXJJbWFnZVJlc291cmNlOjpyZXNldEFuaW1hdGlvbgog
ICAgICAgICBtX3JlbmRlcmVyLT5yZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVuZGVySW1hZ2VSZXNv
dXJjZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CitJ
bWFnZSogUmVuZGVySW1hZ2VSZXNvdXJjZTo6bnVsbEltYWdlKCkKIHsKLSAgICBBU1NFUlQobV9y
ZW5kZXJlcik7CisgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKK30KIAotICAgIGlmICgh
bV9jYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworUGFzc1JlZlB0cjxJbWFnZT4gUmVuZGVy
SW1hZ2VSZXNvdXJjZTo6aW1hZ2UoaW50LCBpbnQpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVk
SW1hZ2UpCisgICAgICAgIHJldHVybiBtX2NhY2hlZEltYWdlLT5pbWFnZSgpOworICAgIHJldHVy
biBudWxsSW1hZ2UoKTsKK30KIAotICAgIG1fY2FjaGVkSW1hZ2UtPnNldEltYWdlQ29udGFpbmVy
U2l6ZShzaXplKTsKK3ZvaWQgUmVuZGVySW1hZ2VSZXNvdXJjZTo6c2V0SW1hZ2VDb250YWluZXJT
aXplKGNvbnN0IEludFNpemUmIGltYWdlQ29udGFpbmVyU2l6ZSkKK3sKKyAgICBpZiAobV9jYWNo
ZWRJbWFnZSkKKyAgICAgICAgbV9jYWNoZWRJbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKG1f
cmVuZGVyZXIsIGltYWdlQ29udGFpbmVyU2l6ZSk7CiB9CiAKLUltYWdlKiBSZW5kZXJJbWFnZVJl
c291cmNlOjpudWxsSW1hZ2UoKQorSW50U2l6ZSBSZW5kZXJJbWFnZVJlc291cmNlOjppbWFnZVNp
emUoZmxvYXQgbXVsdGlwbGllcikgY29uc3QKIHsKLSAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFn
ZSgpOworICAgIGlmIChtX2NhY2hlZEltYWdlKQorICAgICAgICByZXR1cm4gbV9jYWNoZWRJbWFn
ZS0+aW1hZ2VTaXplKG1fcmVuZGVyZXIsIG11bHRpcGxpZXIpOworICAgIHJldHVybiBJbnRTaXpl
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NCwxNyArNTQsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldEFuaW1hdGlv
bigpOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZShpbnQgLyogd2lkdGgg
Ki8gPSAwLCBpbnQgLyogaGVpZ2h0ICovID0gMCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFn
ZSA/IG1fY2FjaGVkSW1hZ2UtPmltYWdlKCkgOiBudWxsSW1hZ2UoKTsgfQorICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoaW50IHdpZHRoID0gMCwgaW50IGhlaWdodCA9IDApIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3QgeyByZXR1cm4gbV9j
YWNoZWRJbWFnZSAmJiBtX2NhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCk7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXpl
Jik7CiAgICAgdmlydHVhbCBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6
ZSgpIDogZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPmltYWdlSGFzUmVs
YXRpdmVXaWR0aCgpIDogZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2
ZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT5p
bWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgOiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCBJbnRTaXpl
IGltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdl
ID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2VTaXplKG11bHRpcGxpZXIpIDogSW50U2l6ZSgpOyB9Cisg
ICAgdmlydHVhbCBJbnRTaXplIGltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVyKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgV3JhcHBlZEltYWdlUHRyIGltYWdlUHRyKCkgY29uc3QgeyByZXR1cm4gbV9j
YWNoZWRJbWFnZS5nZXQoKTsgfQorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7
IHJldHVybiBtX3JlbmRlcmVyOyB9CiAKIHByb3RlY3RlZDoKICAgICBSZW5kZXJJbWFnZVJlc291
cmNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJj
ZVN0eWxlSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEltYWdlPiBpbWFnZShpbnQgd2lkdGggPSAwLCBpbnQgaGVpZ2h0ID0gMCkgY29uc3QgeyByZXR1
cm4gbV9zdHlsZUltYWdlLT5pbWFnZShtX3JlbmRlcmVyLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQp
KTsgfQogICAgIHZpcnR1YWwgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3QgeyByZXR1cm4gbV9z
dHlsZUltYWdlLT5lcnJvck9jY3VycmVkKCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFn
ZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QgeyBtX3N0eWxlSW1hZ2Ut
PnNldEltYWdlQ29udGFpbmVyU2l6ZShzaXplKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFn
ZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgeyBtX3N0eWxlSW1hZ2UtPnNldElt
YWdlQ29udGFpbmVyU2l6ZShtX3JlbmRlcmVyLCBzaXplKTsgfQogICAgIHZpcnR1YWwgYm9vbCB1
c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZUltYWdlLT51c2Vz
SW1hZ2VDb250YWluZXJTaXplKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2
ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZUltYWdlLT5pbWFnZUhhc1JlbGF0aXZlV2lk
dGgoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHlsZUltYWdlLT5pbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCk7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gOTY2OTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDE3LDIxICsyNDE3LDIyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9y
bVJlc2l6ZXJJbWEKIHsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRl
dmljZVNjYWxlRmFjdG9yKHJlbmRlcmVyKCktPmZyYW1lKCkpOwogCisgICAgLy8gUGFzc2luZyAw
IGFzIEltYWdlVXNlciB0byB0aGUgc2l6ZSgpL2RyYXdJbWFnZSgpIG1ldGhvZHMgYXMgZmluZSwg
YXMgdGhlc2UgYXJlIG5vIFNWRyBpbWFnZXMuCiAgICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3Ju
ZXJJbWFnZTsKICAgICBJbnRTaXplIGNvcm5lclJlc2l6ZXJTaXplOwogICAgIGlmIChkZXZpY2VT
Y2FsZUZhY3RvciA+PSAyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW1hZ2UqLCBy
ZXNpemVDb3JuZXJJbWFnZUhpUmVzLCAoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0
QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSkpOwogICAgICAgICByZXNpemVDb3JuZXJJ
bWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXpl
ID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUg
PSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgwKTsKICAgICAgICAgY29ybmVyUmVzaXplclNpemUu
c2NhbGUoMC41Zik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJ
bWFnZSosIHJlc2l6ZUNvcm5lckltYWdlTG9SZXMsIChJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKSk7CiAgICAgICAgIHJlc2l6ZUNv
cm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsKLSAgICAgICAgY29ybmVyUmVzaXpl
clNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVy
U2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKDApOwogICAgIH0KIAogICAgIEludFJlY3Qg
aW1hZ2VSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNp
emVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpOwotICAgIGNvbnRleHQtPmRyYXdJbWFnZShyZXNp
emVDb3JuZXJJbWFnZS5nZXQoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBp
bWFnZVJlY3QpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZSgwLCByZXNpemVDb3JuZXJJbWFnZS5n
ZXQoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBpbWFnZVJlY3QpOwogfQog
CiB2b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFn
ZVJlY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzMCw3ICsxMTMwLDcgQEAgdm9p
ZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAgICBpZiAoc3R5bGUo
KS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChwYWludE9mZnNl
dCwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOwogI2VuZGlmCi0gICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZShtX2ltYWdlLT5pbWFnZSh0aGlzLCBtYXJrZXIuc2l6ZSgpKS5nZXQoKSwgc3R5
bGUoKS0+Y29sb3JTcGFjZSgpLCBtYXJrZXIpOworICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2Uo
dGhpcywgbV9pbWFnZS0+aW1hZ2UodGhpcywgbWFya2VyLnNpemUoKSkuZ2V0KCksIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSwgbWFya2VyKTsKICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0g
U2VsZWN0aW9uTm9uZSkgewogICAgICAgICAgICAgTGF5b3V0UmVjdCBzZWxSZWN0ID0gbG9jYWxT
ZWxlY3Rpb25SZWN0KCk7CiAgICAgICAgICAgICBzZWxSZWN0Lm1vdmVCeShib3hPcmlnaW4pOwpA
QCAtMTM1MCw3ICsxMzUwLDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVy
cmVkTAogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHNvbWV3aGF0IGFyYml0cmFyeSB3aWR0
aC4gIEdlbmVyYXRlZCBpbWFnZXMgZm9yIG1hcmtlcnMgcmVhbGx5IHdvbid0IGJlY29tZSBwYXJ0
aWN1bGFybHkgdXNlZnVsCiAgICAgICAgIC8vIHVudGlsIHdlIHN1cHBvcnQgdGhlIENTUzMgbWFy
a2VyIHBzZXVkb2NsYXNzIHRvIGFsbG93IGNvbnRyb2wgb3ZlciB0aGUgd2lkdGggYW5kIGhlaWdo
dCBvZiB0aGUgbWFya2VyIGJveC4KICAgICAgICAgTGF5b3V0VW5pdCBidWxsZXRXaWR0aCA9IGZv
bnRNZXRyaWNzLmFzY2VudCgpIC8gMjsKLSAgICAgICAgbV9pbWFnZS0+c2V0SW1hZ2VDb250YWlu
ZXJTaXplKExheW91dFNpemUoYnVsbGV0V2lkdGgsIGJ1bGxldFdpZHRoKSk7CisgICAgICAgIG1f
aW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZSh0aGlzLCBMYXlvdXRTaXplKGJ1bGxldFdpZHRo
LCBidWxsZXRXaWR0aCkpOwogICAgICAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IG1faW1hZ2Ut
PmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gc3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGltYWdlU2l6ZS53aWR0aCgpIDogaW1h
Z2VTaXplLmhlaWdodCgpOwogICAgICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHko
ZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVk
SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUNhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDkgKzQ5LDkgQEAgYm9vbCBTdHlsZUNhY2hlZEltYWdlOjplcnJvck9jY3VycmVkKCkgYwogICAg
IHJldHVybiBtX2ltYWdlLT5lcnJvck9jY3VycmVkKCk7CiB9CiAKLUludFNpemUgU3R5bGVDYWNo
ZWRJbWFnZTo6aW1hZ2VTaXplKGNvbnN0IFJlbmRlck9iamVjdCogLypyZW5kZXJlciovLCBmbG9h
dCBtdWx0aXBsaWVyKSBjb25zdAorSW50U2l6ZSBTdHlsZUNhY2hlZEltYWdlOjppbWFnZVNpemUo
Y29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9pbWFnZS0+aW1hZ2VTaXplKG11bHRpcGxpZXIpOworICAgIHJldHVybiBt
X2ltYWdlLT5pbWFnZVNpemUocmVuZGVyZXIsIG11bHRpcGxpZXIpOwogfQogCiBib29sIFN0eWxl
Q2FjaGVkSW1hZ2U6OmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0CkBAIC02OSwxOSArNjks
MTkgQEAgYm9vbCBTdHlsZUNhY2hlZEltYWdlOjp1c2VzSW1hZ2VDb250YWluZQogICAgIHJldHVy
biBtX2ltYWdlLT51c2VzSW1hZ2VDb250YWluZXJTaXplKCk7CiB9CiAKLXZvaWQgU3R5bGVDYWNo
ZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lk
IFN0eWxlQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBpbWFnZUNvbnRhaW5lclNpemUpCiB7Ci0gICAg
cmV0dXJuIG1faW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShzaXplKTsKKyAgICBtX2ltYWdl
LT5zZXRJbWFnZUNvbnRhaW5lclNpemUocmVuZGVyZXIsIGltYWdlQ29udGFpbmVyU2l6ZSk7CiB9
CiAKIHZvaWQgU3R5bGVDYWNoZWRJbWFnZTo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UtPmFkZENsaWVudChyZW5kZXJlcik7CisgICAgbV9p
bWFnZS0+YWRkQ2xpZW50KHJlbmRlcmVyKTsKIH0KIAogdm9pZCBTdHlsZUNhY2hlZEltYWdlOjpy
ZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gbV9pbWFn
ZS0+cmVtb3ZlQ2xpZW50KHJlbmRlcmVyKTsKKyAgICBtX2ltYWdlLT5yZW1vdmVDbGllbnQocmVu
ZGVyZXIpOwogfQogCiBQYXNzUmVmUHRyPEltYWdlPiBTdHlsZUNhY2hlZEltYWdlOjppbWFnZShS
ZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gOTY2
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGltYWdl
SGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc0ltYWdlQ29u
dGFpbmVyU2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNp
emUoY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNp
emUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBhZGRDbGllbnQoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVu
dChSZW5kZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJl
bmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAJKHJl
dmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2Vu
ZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSArNTgsNiBAQCBJbnRTaXpl
IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmltYWdlU2l6ZShjCiAgICAgcmV0dXJuIG1fY29udGFpbmVy
U2l6ZTsKIH0KIAotdm9pZCBTdHlsZUdlbmVyYXRlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX2NvbnRhaW5lclNpemUgPSBzaXplOwot
fQotCiB2b2lkIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmFkZENsaWVudChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogewogICAgIG1fZ2VuZXJhdG9yLT5hZGRDbGllbnQocmVuZGVyZXIsIEludFNpemUo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJ
bWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUdlbmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NyArNDYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuICFtX2ZpeGVkU2l6ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpbWFn
ZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gIW1fZml4ZWRTaXplOyB9CiAgICAg
dmlydHVhbCBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiAhbV9m
aXhlZFNpemU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0
IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0
IFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUpIHsgbV9jb250YWlu
ZXJTaXplID0gY29udGFpbmVyU2l6ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoUmVu
ZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJPYmplY3Qq
KTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNv
bnN0IEludFNpemUmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlSW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IFJlbmRlck9i
amVjdCosIGNvbnN0IEludFNpemUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChS
ZW5kZXJPYmplY3QqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJP
YmplY3QqKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZShSZW5kZXJP
YmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3QgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmgJKHJldmlzaW9uIDk2
Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShj
b25zdCBJbnRTaXplJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6
ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGFkZENsaWVudChSZW5kZXJPYmplY3QqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
Q2xpZW50KFJlbmRlck9iamVjdCopIHsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZT4g
aW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2aXNpb24g
OTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjps
YXlvdXQoKQogCiAgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JS
ZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOwogICAgIFNWR0ltYWdl
RWxlbWVudCogaW1hZ2UgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQqPihub2RlKCkpOwor
ICAgIG1faW1hZ2VSZXNvdXJjZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKGVuY2xvc2luZ0ludFJl
Y3QobV9vYmplY3RCb3VuZGluZ0JveCkuc2l6ZSgpKTsKIAogICAgIGJvb2wgdHJhbnNmb3JtT3JC
b3VuZGFyaWVzVXBkYXRlID0gbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSB8fCBtX3VwZGF0ZUNhY2hl
ZFJlcGFpbnRSZWN0OwogICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7CkBAIC0xMjUs
MTMgKzEyNiwxMyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8mIHBhCiAg
ICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVu
dCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+
IGltYWdlID0gbV9pbWFnZVJlc291cmNlLT5pbWFnZSgpOwogICAgICAgICAgICAgICAgIEZsb2F0
UmVjdCBkZXN0UmVjdCA9IG1fb2JqZWN0Qm91bmRpbmdCb3g7Ci0gICAgICAgICAgICAgICAgRmxv
YXRSZWN0IHNyY1JlY3QoMCwgMCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgaW1hZ2UtPndpZHRoKHRoaXMp
LCBpbWFnZS0+aGVpZ2h0KHRoaXMpKTsKIAogICAgICAgICAgICAgICAgIFNWR0ltYWdlRWxlbWVu
dCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsK
ICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VFbGVtZW50LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCku
YWxpZ24oKSAhPSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJ
T19OT05FKQogICAgICAgICAgICAgICAgICAgICBpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNwZWN0
UmF0aW8oKS50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKIAotICAgICAgICAgICAg
ICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgICAgICAgICAgICAgIGNoaWxk
UGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZSh0aGlzLCBpbWFnZS5nZXQoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxk
UGFpbnRJbmZvLCBzYXZlZEluZm8uY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3
IEBAIFNWR0ltYWdlOjp+U1ZHSW1hZ2UoKQogICAgIEFTU0VSVCghbV9jaHJvbWVDbGllbnQgfHwg
IW1fY2hyb21lQ2xpZW50LT5pbWFnZSgpKTsKIH0KIAotdm9pZCBTVkdJbWFnZTo6c2V0Q29udGFp
bmVyU2l6ZShjb25zdCBMYXlvdXRTaXplJiBjb250YWluZXJTaXplKQordm9pZCBTVkdJbWFnZTo6
c2V0Q29udGFpbmVyU2l6ZShJbWFnZVVzZXIsIGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUp
CiB7CiAgICAgaWYgKGNvbnRhaW5lclNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBA
IC0xMjgsNyArMTI4LDcgQEAgYm9vbCBTVkdJbWFnZTo6dXNlc0NvbnRhaW5lclNpemUoKSBjb25z
dAogICAgIHJldHVybiByb290RWxlbWVudC0+aGFzU2V0Q29udGFpbmVyU2l6ZSgpOwogfQogCi1J
bnRTaXplIFNWR0ltYWdlOjpzaXplKCkgY29uc3QKK0ludFNpemUgU1ZHSW1hZ2U6OnNpemUoSW1h
Z2VVc2VyKSBjb25zdAogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm4gSW50U2l6
ZSgpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgU1ZHSW1hZ2U6Omhhc1JlbGF0aXZlSGVpZ2h0
KCkgY29uc3QKICAgICByZXR1cm4gcm9vdEVsZW1lbnQtPmhlaWdodCgpLnVuaXRUeXBlKCkgPT0g
TGVuZ3RoVHlwZVBlcmNlbnRhZ2U7CiB9CiAKLXZvaWQgU1ZHSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2
b2lkIFNWR0ltYWdlOjpkcmF3KEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBpZiAoIW1f
cGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgU1ZHSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb24KICAgICBjb250ZXh0LT50cmFuc2xhdGUoZGVzdE9m
ZnNldC54KCksIGRlc3RPZmZzZXQueSgpKTsKICAgICBjb250ZXh0LT5zY2FsZShzY2FsZSk7CiAK
LSAgICB2aWV3LT5yZXNpemUoc2l6ZSgpKTsKKyAgICB2aWV3LT5yZXNpemUoc2l6ZSh1c2VyKSk7
CiAKICAgICBpZiAodmlldy0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAgdmlldy0+bGF5b3V0KCk7
CkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGNvbgogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CiB9CiAKLU5hdGl2
ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJ
bWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoSW1hZ2VVc2VyIHVz
ZXIpCiB7CiAgICAgLy8gRklYTUU6IEluIG9yZGVyIHRvIHN1cHBvcnQgZHluYW1pYyBTVkdzIHdl
IG5lZWQgdG8gaGF2ZSBhIHdheSB0byBpbnZhbGlkYXRlIHRoaXMKICAgICAvLyBmcmFtZSBjYWNo
ZSwgb3IgYmV0dGVyIHlldCwgbm90IHVzZSBhIGNhY2hlIGZvciB0aWxlZCBkcmF3aW5nIGF0IGFs
bCwgaW5zdGVhZApAQCAtMjIzLDEzICsyMjMsMTMgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6
Om5hdGl2ZUltYWdlRm9yQwogICAgIGlmICghbV9mcmFtZUNhY2hlKSB7CiAgICAgICAgIGlmICgh
bV9wYWdlKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCkpOworICAgICAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh1c2VyKSk7CiAg
ICAgICAgIGlmICghYnVmZmVyKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBkcmF3KGJ1ZmZlci0+Y29udGV4dCgpLCByZWN0KCksIHJl
Y3QoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgICAg
IGRyYXcodXNlciwgYnVmZmVyLT5jb250ZXh0KCksIHJlY3QodXNlciksIHJlY3QodXNlciksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgICAgICBtX2ZyYW1l
Q2FjaGUgPSBidWZmZXItPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKICAgICB9Ci0gICAg
cmV0dXJuIG1fZnJhbWVDYWNoZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBy
ZXR1cm4gbV9mcmFtZUNhY2hlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKIH0K
IAogYm9vbCBTVkdJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksMTIgKzQ5LDEyIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHNldENvbnRhaW5lclNpemUo
Y29uc3QgTGF5b3V0U2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJTaXplKElt
YWdlVXNlciwgY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgYm9vbCB1c2VzQ29udGFpbmVy
U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKEltYWdl
VXNlcikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpOwogCkBAIC02Niw5ICs2Niw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBOYXRp
dmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90KSB7IHJldHVybiAwOyB9CiAKICAgICBTVkdJ
bWFnZShJbWFnZU9ic2VydmVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBmcm9tUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0b1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmly
dHVhbCB2b2lkIGRyYXcoSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmIGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQ
dHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdl
UHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKEltYWdlVXNlcik7CiAKICAgICBPd25QdHI8
U1ZHSW1hZ2VDaHJvbWVDbGllbnQ+IG1fY2hyb21lQ2xpZW50OwogICAgIE93blB0cjxQYWdlPiBt
X3BhZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyAr
NDksNyBAQCBQYXNzUmVmUHRyPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZShGaWx0CiB2b2lkIEZF
SW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIHsKICAgICBBU1NFUlQobV9pbWFn
ZSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkp
OworICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgwKSk7
CiAgICAgRmxvYXRSZWN0IHBhaW50UmVjdChtX2Fic29sdXRlU3VicmVnaW9uKTsKICAgICBtX3By
ZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChwYWludFJlY3QsIHNyY1JlY3QpOwogICAg
IHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKQEAgLTY1LDE0ICs2NSwxNCBA
QCB2b2lkIEZFSW1hZ2U6OmFwcGx5KCkKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNp
emUoKSk7CisgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXpl
KHRoaXMpKTsKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QobV9hYnNvbHV0ZVN1YnJlZ2lvbik7CiAg
ICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3Qp
OwogCiAgICAgSW50UG9pbnQgcGFpbnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRSZWN0KCkubG9j
YXRpb24oKTsKICAgICBkZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0aW9uLngoKSwgLXBhaW50TG9j
YXRpb24ueSgpKTsKIAotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZShtX2lt
YWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAg
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKHRoaXMsIG1faW1hZ2UuZ2V0KCksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKIH0KIAogdm9pZCBGRUltYWdl
OjpkdW1wKCkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBGRUltYWdlOjpkdW1wKCkKIFRleHRTdHJl
YW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBp
bmRlbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1faW1hZ2UpOwotICAgIEludFNpemUgaW1hZ2VT
aXplID0gbV9pbWFnZS0+c2l6ZSgpOworICAgIEludFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZS0+
c2l6ZSh0aGlzKTsKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKICAgICB0cyA8PCAiW2Zl
SW1hZ2UiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTEwLTA1ICBOaWtvbGFzIFpp
bW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFByZXBhcmUgU1ZHSW1h
Z2UgaW50cmluc2ljIHNpemUgbmVnb3RpYXRpb246IE1ha2UgaXQgcG9zc2libGUgdG8gcmV1c2Ug
dGhlIHNhbWUgU1ZHSW1hZ2UgYXQgZGlmZmVyZW50IHNpemVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQxNgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHA6IEFkYXB0IHRvIEltYWdlIEFQSSBjaGFuZ2VzLgorICAgICAgICAoQ29yZUlQQzo6ZW5j
b2RlSW1hZ2UpOgorICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUpOgorCiAyMDExLTEwLTA1ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XSBVc2UgV0tSZXRhaW5QdHIgZm9yIFdLIHR5cGVzIGluIFdlYktpdDIgR1RLKwpJbmRleDogU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlz
aW9uIDk2Njk4KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw4ICsyOTAsOCBAQCBib29sIEFyZ3VtZW50Q29k
ZXI8Q3JlZGVudGlhbD46OmRlY29kZShBCiAKIHN0YXRpYyB2b2lkIGVuY29kZUltYWdlKEFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlciwgSW1hZ2UqIGltYWdlKQogewotICAgIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdl
LT5zaXplKCksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7Ci0gICAgYml0bWFwLT5j
cmVhdGVHcmFwaGljc0NvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBJbnRQb2ludCgpKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgwKSwgU2hhcmVhYmxl
Qml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCgpLT5kcmF3SW1hZ2UoMCwgaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KCkp
OwogCiAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwogICAgIGJpdG1hcC0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSk7CkBAIC0zNjcsNyArMzY3LDcgQEAgYm9vbCBBcmd1bWVudENvZGVy
PEN1cnNvcj46OmRlY29kZShBcmd1bQogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhvdFNwb3Qp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWltYWdlLT5yZWN0KCkuY29udGFp
bnMoaG90U3BvdCkpCisgICAgaWYgKCFpbWFnZS0+cmVjdCgwKS5jb250YWlucyhob3RTcG90KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY3Vyc29yID0gQ3Vyc29yKGltYWdlLmdldCgp
LCBob3RTcG90KTsK
</data>
<flag name="commit-queue"
          id="107111"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109805</attachid>
            <date>2011-10-05 08:50:05 -0700</date>
            <delta_ts>2011-10-05 13:14:26 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>SVGImage-splitoff-v3.diff</filename>
            <type>text/plain</type>
            <size>159505</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NzA3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjczIEBACisyMDExLTEwLTA1ICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFByZXBhcmUgU1ZH
SW1hZ2UgaW50cmluc2ljIHNpemUgbmVnb3RpYXRpb246IE1ha2UgaXQgcG9zc2libGUgdG8gcmV1
c2UgdGhlIHNhbWUgU1ZHSW1hZ2UgYXQgZGlmZmVyZW50IHNpemVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRvIGltcGxlbWVudCBpbnRyaW5jaWMgc2l6
ZSBuZWdvdGlhdGlvbiBmb3IgU1ZHIGltYWdlcyBlbWJlZGRlZCB0aHJvdWdoIGJvcmRlci1pbWFn
ZS9iYWNrZ3JvdW5kLWltYWdlLzxodG1sOmltZz4vPHN2ZzppbWFnZT4vLi4uCisgICAgICAgIFNW
R0ltYWdlIG5lZWRzIHRvIHN0b3JlIHRoZSBkZXNpcmVkIGNvbnRhaW5lciBzaXplIGZvciB0aGUg
dGFyZ2V0IHdoZXJlIHRoZSBpbWFnZSBpcyBlbWJlZGRlZCwgaWYgaXRzIHByb3ZpZGVkLgorCisg
ICAgICAgIEFzIFNWR0ltYWdlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgaW5zdGFuY2Vz
IHRoYXQgcmVmZXIgdG8gaXQsIHdlIG5lZWQgdG8gbWFrZSBpdCBjb250YWluIGEgSGFzaE1hcCB0
aGF0IG1hcHMgZnJvbQorICAgICAgICBhIFJlbmRlck9iamVjdCogdG8gYSBJbnRTaXplLiBBcyBT
VkdJbWFnZSBpcyBuZXZlciB1c2VkIGRpcmVjdGx5LCB0aGUgSW1hZ2UgQVBJcyBuZWVkIHRvIGJl
IGFkanVzdGVkLiBJdCBjYW4ndCByZWZlcmVuY2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0cyBh
cyB0aGF0IHdvdWxkIGJlIGEgcGxhdGZvcm0gbGF5ZXIgdmlvbGF0aW9uIC0gaW5zdGVhZCBpbnRy
b2R1Y2UgYSAiSW1hZ2VVc2VyIiB0eXBlZGVmIHRvIGNvbnN0IHZvaWQqCisgICAgICAgIGFuZCBw
YXNzIEltYWdlVXNlciBhcmd1bWVudHMgdG8gR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UvZHJh
d1RpbGVkSW1hZ2UvZHJhd1BhdHRlcm4sIGFuZCB0byBJbWFnZTo6c2l6ZS93aWR0aC9oZWlnaHQK
KyAgICAgICAgc28gdGhhdCBTVkdJbWFnZSBjYW4gYWx3YXlzIGZpZ3VyZSBvdXQgd2hvcyBhc2tp
bmcgZm9yIHRoZSBzaXplIGFuZCByZXR1cm4gdGhlIHJpZ2h0IGFuc3dlcnMuCisKKyAgICAgICAg
Tm90IHRlc3RhYmxlIHlldCwgYXMgdGhlIG5ldyBJbWFnZVVzZXIgY29uY2VwdCBpc24ndCB1c2Vk
IHlldC4gQnVnIDQ3MTU2IHdpbGwgbWFrZSB1c2Ugb2YgaXQgc29vbi4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcGl4bWFw
cnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcEluc3RhbmNlOjp2
YXJpYW50RnJvbU9iamVjdCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQpOgorICAgICAgICAq
IGh0bWwvSFRNTEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VF
bGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpoZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbFdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6Om5hdHVyYWxIZWlnaHQpOgorICAg
ICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURv
Y3VtZW50UGFyc2VyOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6
c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzaXplSW1hZ2VUb0Zp
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjppbWFnZVVwZGF0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzdG9yZUltYWdlU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjppbWFnZUZpdHNJbldpbmRvdyk6CisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyREltcGwpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkSW1hZ2U6OmltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6
ZGF0YSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6Y2FuUmVuZGVyKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkb0ltYWdlRHJh
Zyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAqIHBsYXRmb3JtL0N1cnNvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkZXRlcm1pbmVIb3RTcG90KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVs
RXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtTWFj
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmQ6OndyaXRlSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BvcHVw
TGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OnBhaW50Um93KToK
KyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6Z2V0Um93SGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6bGF5b3V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJv
bWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lQ2hyb21pdW06OnBhaW50VGlja21hcmtzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lU2l6ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bm90U29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJh
dGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJhdGVkSW1hZ2U6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6R2VuZXJhdGVkSW1hZ2U6OnNldENvbnRhaW5lclNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6R2VuZXJhdGVkSW1hZ2U6OnNpemUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjppc1NWR0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjppc051bGwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnNldENvbnRh
aW5lclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0
ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1Bh
dHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJu
OjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ljb25DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZE
aXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6
c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcv
SW1hZ2VPcGVuVkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9y
U29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NMYXllclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdDo6c2V0Q29u
dGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZl
clF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6Y2xpcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L1BhdHRlcm5RdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpjcmVhdGVQbGF0
Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0aWxsSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L1N0aWxsSW1hZ2VRdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlUXQ6OnNldENv
bnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjp1aWRGb3JJbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OnNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6Om5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNz
Q29udGV4dDNEU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVm
ZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2hlY2tGb3JT
b2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpkcmF3KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhdHRlcm46OnBsYXRmb3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpjb250ZW50U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldEhCSVRN
QVBPZlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNo
aW5nU291cmNlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fp
cm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291
cmNlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJX
aW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZEltYWdlOjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFF0OjpjcmVhdGVEcmFnSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkUXQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6
CisgICAgICAgICogcGxhdGZvcm0vcXQvQ3Vyc29yUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlQ3VzdG9tQ3Vyc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fp
cm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jZS9Q
YXN0ZWJvYXJkV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJ
bWFnZSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnBhaW50TWlzc2luZ1BsdWdpbkljb24pOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1
YWxpdHlDb250cm9sbGVyOjpzaG91bGRQYWludEF0TG93UXVhbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlRmlsbFRpbGVTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVj
ZUltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2U6OmltYWdlU2l6ZUZvckVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckltYWdlOjpwYWludEludG9SZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2VS
ZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZVJlc291cmNlOjpudWxs
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VSZXNvdXJjZTo6aW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VSZXNvdXJjZTo6c2V0SW1hZ2VDb250YWluZXJT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlUmVzb3VyY2U6OmltYWdlU2l6ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckltYWdlUmVzb3VyY2U6OnJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2Vy
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2Fj
aGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2VT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFp
bmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjphZGRDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6cmVtb3ZlQ2xpZW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAgKiByZW5kZXJp
bmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVH
ZW5lcmF0ZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3R5bGUvU3R5bGVJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVBl
bmRpbmdJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQZW5kaW5nSW1hZ2U6OnNldElt
YWdlQ29udGFpbmVyU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6bGF5b3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpwYWludCk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpzZXRDb250YWlu
ZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
Lmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdl
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKwogMjAxMS0xMC0wNSAgQWJoaXNoZWsgQXJ5YSAg
PGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENyYXNoIGluIFNWR1RSZWZFbGVtZW50
Ojp1cGRhdGVSZWZlcmVuY2VkVGV4dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lv
biA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkp
CkBAIC00MzAsNyArNDMwLDcgQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFBh
dGhFUgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktOU185RmxvYXRS
ZWN0RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktOU185RmxvYXRS
ZWN0RVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0OWNsZWFyUmVjdEVSS05TXzlGbG9hdFJlY3RFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDlkcmF3SW1hZ2VFUE5TXzVJbWFnZUVOU18xMENvbG9yU3BhY2VFUktOU184SW50UG9p
bnRFTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0
OWRyYXdJbWFnZUVQS3ZQTlNfNUltYWdlRU5TXzEwQ29sb3JTcGFjZUVSS05TXzhJbnRQb2ludEVO
U18xN0NvbXBvc2l0ZU9wZXJhdG9yRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5c2V0
U2hhZG93RVJLTlNfOUZsb2F0U2l6ZUVmUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19a
TjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5dHJhbnNsYXRlRWZmCiBfX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dEMxRVA5Q0dDb250ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxMiw3ICsxOTEyLDcgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYgogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHJlbmRlcmVkIGltYWdlIHdhcyBzdHJldGNoZWQg
ZnJvbSBvbmUtZGltZW5zaW9uYWwgZmlsZSBpbWFnZQogICAgICAgICAgICAgaWYgKGltYWdlLT5j
YWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBp
bWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKGltYWdlLT52aWV3KCktPnpvb21GYWN0b3Io
KSk7CisgICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZS0+Y2FjaGVk
SW1hZ2UoKS0+aW1hZ2VTaXplKG1fcmVuZGVyZXIsIGltYWdlLT52aWV3KCktPnpvb21GYWN0b3Io
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlU2l6ZS5oZWlnaHQoKSA8PSAxIHx8IGlt
YWdlU2l6ZS53aWR0aCgpIDw9IDE7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHJldmlzaW9u
IDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODIsNyArMzgyLDcgQEAgUVZhcmlhbnQgUXRQaXhtYXBJbnN0
YW5jZTo6dmFyaWFudEZyb21PYgogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgZ290
byByZXR1cm5FbXB0eVZhcmlhbnQ7CiAKLSAgICAgICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFQaXhtYXAqIHBpeG1hcCA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShpbWFnZUVsZW1lbnQtPnJlbmRlcmVy
KCkpOwogICAgICAgICBpZiAoIXBpeG1hcCkKICAgICAgICAgICAgIGdvdG8gcmV0dXJuRW1wdHlW
YXJpYW50OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgSFRNTENhbnZh
c0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ28KICAgICAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVm
ZmVyID0gYnVmZmVyKCk7CiAgICAgICAgIGlmIChpbWFnZUJ1ZmZlcikgewogICAgICAgICAgICAg
aWYgKG1fcHJlc2VudGVkSW1hZ2UpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdl
KG1fcHJlc2VudGVkSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHIsIENvbXBvc2l0
ZVNvdXJjZU92ZXIsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZHJhd0ltYWdlKHJlbmRlcmVyKCksIG1fcHJlc2VudGVkSW1hZ2UuZ2V0KCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIHIsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIHVzZUxvd1F1YWxpdHlTY2FsZSk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVm
ZmVyKGltYWdlQnVmZmVyLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByLCBDb21wb3NpdGVTb3VyY2VP
dmVyLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDcg
KzI1Nyw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aChib29sIGlnbm9yZVAKIAogICAg
ICAgICAvLyBpZiB0aGUgaW1hZ2UgaXMgYXZhaWxhYmxlLCB1c2UgaXRzIHdpZHRoCiAgICAgICAg
IGlmIChtX2ltYWdlTG9hZGVyLmltYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9pbWFnZUxv
YWRlci5pbWFnZSgpLT5pbWFnZVNpemUoMS4wZikud2lkdGgoKTsKKyAgICAgICAgICAgIHJldHVy
biBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlcigpLCAxLjBmKS53aWR0
aCgpOwogICAgIH0KIAogICAgIGlmIChpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpCkBAIC0yODAs
NyArMjgwLDcgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6OmhlaWdodChib29sIGlnbm9yZQogCiAg
ICAgICAgIC8vIGlmIHRoZSBpbWFnZSBpcyBhdmFpbGFibGUsIHVzZSBpdHMgaGVpZ2h0CiAgICAg
ICAgIGlmIChtX2ltYWdlTG9hZGVyLmltYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9pbWFn
ZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUoMS4wZikuaGVpZ2h0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUocmVuZGVyZXIoKSwgMS4wZiku
aGVpZ2h0KCk7CiAgICAgfQogCiAgICAgaWYgKGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykKQEAg
LTI5Nyw3ICsyOTcsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbFdpZHRoKCkgY29u
CiAgICAgaWYgKCFtX2ltYWdlTG9hZGVyLmltYWdlKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKDEuMGYpLndpZHRoKCk7
CisgICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyKCks
IDEuMGYpLndpZHRoKCk7CiB9CiAKIGludCBIVE1MSW1hZ2VFbGVtZW50OjpuYXR1cmFsSGVpZ2h0
KCkgY29uc3QKQEAgLTMwNSw3ICszMDUsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6bmF0dXJh
bEhlaWdodCgpIGNvCiAgICAgaWYgKCFtX2ltYWdlTG9hZGVyLmltYWdlKCkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKDEu
MGYpLmhlaWdodCgpOworICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6
ZShyZW5kZXJlcigpLCAxLjBmKS5oZWlnaHQoKTsKIH0KIAogYm9vbCBIVE1MSW1hZ2VFbGVtZW50
Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3
IEBAIHZvaWQgSW1hZ2VEb2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKIAogICAgICAgICAvLyBSZXBv
cnQgdGhlIG5hdHVyYWwgaW1hZ2Ugc2l6ZSBpbiB0aGUgcGFnZSB0aXRsZSwgcmVnYXJkbGVzcyBv
ZiB6b29tCiAgICAgICAgIC8vIGxldmVsLgotICAgICAgICBMYXlvdXRTaXplIHNpemUgPSBjYWNo
ZWRJbWFnZS0+aW1hZ2VTaXplKDEuMGYpOworICAgICAgICBMYXlvdXRTaXplIHNpemUgPSBjYWNo
ZWRJbWFnZS0+aW1hZ2VTaXplKGRvY3VtZW50KCktPmltYWdlRWxlbWVudCgpLT5yZW5kZXJlcigp
LCAxLjBmKTsKICAgICAgICAgaWYgKHNpemUud2lkdGgoKSkgewogICAgICAgICAgICAgLy8gQ29t
cHV0ZSB0aGUgdGl0bGUsIHdlIHVzZSB0aGUgZGVjb2RlZCBmaWxlbmFtZSBvZiB0aGUgcmVzb3Vy
Y2UsIGZhbGxpbmcKICAgICAgICAgICAgIC8vIGJhY2sgb24gdGhlIChkZWNvZGVkKSBob3N0bmFt
ZSBpZiB0aGVyZSBpcyBubyBwYXRoLgpAQCAtMjMzLDcgKzIzMyw3IEBAIGZsb2F0IEltYWdlRG9j
dW1lbnQ6OnNjYWxlKCkgY29uc3QKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiAxOwog
Ci0gICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2Uo
KS0+aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKHRoaXMpKTsKKyAgICBMYXlvdXRTaXplIGltYWdl
U2l6ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUobV9pbWFnZUVs
ZW1lbnQtPnJlbmRlcmVyKCksIHBhZ2Vab29tRmFjdG9yKHRoaXMpKTsKICAgICBMYXlvdXRTaXpl
IHdpbmRvd1NpemUgPSBJbnRTaXplKHZpZXctPndpZHRoKCksIHZpZXctPmhlaWdodCgpKTsKICAg
ICAKICAgICBmbG9hdCB3aWR0aFNjYWxlID0gKGZsb2F0KXdpbmRvd1NpemUud2lkdGgoKSAvIGlt
YWdlU2l6ZS53aWR0aCgpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6
cmVzaXplSW1hZ2VUb0ZpdCgpCiAgICAgaWYgKCFtX2ltYWdlRWxlbWVudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlRWxlbWVudC0+Y2FjaGVk
SW1hZ2UoKS0+aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKHRoaXMpKTsKKyAgICBMYXlvdXRTaXpl
IGltYWdlU2l6ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUobV9p
bWFnZUVsZW1lbnQtPnJlbmRlcmVyKCksIHBhZ2Vab29tRmFjdG9yKHRoaXMpKTsKIAogICAgIGZs
b2F0IHNjYWxlID0gdGhpcy0+c2NhbGUoKTsKICAgICBtX2ltYWdlRWxlbWVudC0+c2V0V2lkdGgo
c3RhdGljX2Nhc3Q8aW50PihpbWFnZVNpemUud2lkdGgoKSAqIHNjYWxlKSk7CkBAIC0yODcsNyAr
Mjg3LDcgQEAgdm9pZCBJbWFnZURvY3VtZW50OjppbWFnZVVwZGF0ZWQoKQogICAgIGlmIChtX2lt
YWdlU2l6ZUlzS25vd24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltYWdlRWxlbWVu
dC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKHRoaXMpKS5pc0VtcHR5
KCkpCisgICAgaWYgKG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUobV9p
bWFnZUVsZW1lbnQtPnJlbmRlcmVyKCksIHBhZ2Vab29tRmFjdG9yKHRoaXMpKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBtX2ltYWdlU2l6ZUlzS25vd24gPSB0cnVlOwpA
QCAtMzAzLDggKzMwMyw5IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6cmVzdG9yZUltYWdlU2l6ZSgp
CiAgICAgaWYgKCFtX2ltYWdlRWxlbWVudCB8fCAhbV9pbWFnZVNpemVJc0tub3duKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgbV9pbWFnZUVsZW1lbnQtPnNldFdpZHRoKG1faW1hZ2VFbGVt
ZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUocGFnZVpvb21GYWN0b3IodGhpcykpLndpZHRo
KCkpOwotICAgIG1faW1hZ2VFbGVtZW50LT5zZXRIZWlnaHQobV9pbWFnZUVsZW1lbnQtPmNhY2hl
ZEltYWdlKCktPmltYWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSkuaGVpZ2h0KCkpOworICAg
IEludFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdl
U2l6ZShtX2ltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSwgcGFnZVpvb21GYWN0b3IodGhpcykpOwor
ICAgIG1faW1hZ2VFbGVtZW50LT5zZXRXaWR0aChpbWFnZVNpemUud2lkdGgoKSk7CisgICAgbV9p
bWFnZUVsZW1lbnQtPnNldEhlaWdodChpbWFnZVNpemUuaGVpZ2h0KCkpOwogICAgIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWM7CiAgICAgaWYgKGltYWdlRml0c0luV2luZG93KCkpCkBAIC0zMjQsNyAr
MzI1LDcgQEAgYm9vbCBJbWFnZURvY3VtZW50OjppbWFnZUZpdHNJbldpbmRvdygpIAogICAgIGlm
ICghdmlldykKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBMYXlvdXRTaXplIGltYWdlU2l6
ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUocGFnZVpvb21GYWN0
b3IodGhpcykpOworICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNh
Y2hlZEltYWdlKCktPmltYWdlU2l6ZShtX2ltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSwgcGFnZVpv
b21GYWN0b3IodGhpcykpOwogICAgIExheW91dFNpemUgd2luZG93U2l6ZSA9IExheW91dFNpemUo
dmlldy0+d2lkdGgoKSwgdmlldy0+aGVpZ2h0KCkpOwogICAgIAogICAgIHJldHVybiBpbWFnZVNp
emUud2lkdGgoKSA8PSB3aW5kb3dTaXplLndpZHRoKCkgJiYgaW1hZ2VTaXplLmhlaWdodCgpIDw9
IHdpbmRvd1NpemUuaGVpZ2h0KCk7ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA5
NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjAsNyArMTIyMCw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjphcHBseVNoYWQKIHN0YXRpYyBMYXlvdXRTaXplIHNpemUoSFRN
TEltYWdlRWxlbWVudCogaW1hZ2UpCiB7CiAgICAgaWYgKENhY2hlZEltYWdlKiBjYWNoZWRJbWFn
ZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2UtPmlt
YWdlU2l6ZSgxLjBmKTsgLy8gRklYTUU6IE5vdCBzdXJlIGFib3V0IHRoaXMuCisgICAgICAgIHJl
dHVybiBjYWNoZWRJbWFnZS0+aW1hZ2VTaXplKGltYWdlLT5yZW5kZXJlcigpLCAxLjBmKTsgLy8g
RklYTUU6IE5vdCBzdXJlIGFib3V0IHRoaXMuCiAgICAgcmV0dXJuIEludFNpemUoKTsKIH0KIApA
QCAtMTMyMCw3ICsxMzIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJ
bWFnZQogCiAgICAgY2hlY2tPcmlnaW4oaW1hZ2UpOwogCi0gICAgYy0+ZHJhd0ltYWdlKGNhY2hl
ZEltYWdlLT5pbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBub3JtYWxpemVkRHN0UmVjdCwg
bm9ybWFsaXplZFNyY1JlY3QsIG9wKTsKKyAgICBjLT5kcmF3SW1hZ2UoaW1hZ2UtPnJlbmRlcmVy
KCksIGNhY2hlZEltYWdlLT5pbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBub3JtYWxpemVk
RHN0UmVjdCwgbm9ybWFsaXplZFNyY1JlY3QsIG9wKTsKICAgICBkaWREcmF3KG5vcm1hbGl6ZWRE
c3RSZWN0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxMDcsNyArMzEwNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJESW0KICAgICB9CiAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCiAgICAgICAg
IG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1F
TlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLAorICAgIHRleEltYWdlMkRCYXNl
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoMCksIGltYWdlLT5o
ZWlnaHQoMCksIDAsCiAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEo
KSwgZWMpOwogICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQogICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7CkBAIC0zMzE2LDcgKzMzMTYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4U3ViSW1hZ2UyCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksCisgICAgdGV4U3ViSW1hZ2UyREJh
c2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKDApLCBpbWFn
ZS0+aGVpZ2h0KDApLAogICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgZGF0YS5k
YXRhKCksIGVjKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NiwxMCArMTQ2LDEwIEBA
IEltYWdlKiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBjb25zdAogICAgIHJldHVybiBJbWFnZTo6bnVs
bEltYWdlKCk7CiB9CiAKLXZvaWQgQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShj
b25zdCBJbnRTaXplJiBjb250YWluZXJTaXplKQordm9pZCBDYWNoZWRJbWFnZTo6c2V0SW1hZ2VD
b250YWluZXJTaXplKEltYWdlVXNlciB1c2VyLCBjb25zdCBJbnRTaXplJiBjb250YWluZXJTaXpl
KQogewogICAgIGlmIChtX2ltYWdlKQotICAgICAgICBtX2ltYWdlLT5zZXRDb250YWluZXJTaXpl
KGNvbnRhaW5lclNpemUpOworICAgICAgICBtX2ltYWdlLT5zZXRDb250YWluZXJTaXplKHVzZXIs
IGNvbnRhaW5lclNpemUpOwogfQogCiBib29sIENhY2hlZEltYWdlOjp1c2VzSW1hZ2VDb250YWlu
ZXJTaXplKCkgY29uc3QKQEAgLTE3NiwyMCArMTc2LDIyIEBAIGJvb2wgQ2FjaGVkSW1hZ2U6Omlt
YWdlSGFzUmVsYXRpdmVIZWlnaHQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUludFNpemUgQ2Fj
aGVkSW1hZ2U6OmltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAorSW50U2l6ZSBDYWNo
ZWRJbWFnZTo6aW1hZ2VTaXplKEltYWdlVXNlciB1c2VyLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25z
dAogewogICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7CiAKICAgICBpZiAoIW1faW1hZ2UpCiAg
ICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IG1faW1h
Z2UtPnNpemUodXNlcik7CiAgICAgaWYgKG11bHRpcGxpZXIgPT0gMS4wZikKLSAgICAgICAgcmV0
dXJuIG1faW1hZ2UtPnNpemUoKTsKLSAgICAgICAgCisgICAgICAgIHJldHVybiBpbWFnZVNpemU7
CisKICAgICAvLyBEb24ndCBsZXQgaW1hZ2VzIHRoYXQgaGF2ZSBhIHdpZHRoL2hlaWdodCA+PSAx
IHNocmluayBiZWxvdyAxIHdoZW4gem9vbWVkLgotICAgIGJvb2wgaGFzV2lkdGggPSBtX2ltYWdl
LT5zaXplKCkud2lkdGgoKSA+IDA7Ci0gICAgYm9vbCBoYXNIZWlnaHQgPSBtX2ltYWdlLT5zaXpl
KCkuaGVpZ2h0KCkgPiAwOwotICAgIGludCB3aWR0aCA9IG1faW1hZ2UtPnNpemUoKS53aWR0aCgp
ICogKG1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKSA/IDEuMGYgOiBtdWx0aXBsaWVyKTsKLSAg
ICBpbnQgaGVpZ2h0ID0gbV9pbWFnZS0+c2l6ZSgpLmhlaWdodCgpICogKG1faW1hZ2UtPmhhc1Jl
bGF0aXZlSGVpZ2h0KCkgPyAxLjBmIDogbXVsdGlwbGllcik7CisgICAgYm9vbCBoYXNXaWR0aCA9
IGltYWdlU2l6ZS53aWR0aCgpID4gMDsKKyAgICBib29sIGhhc0hlaWdodCA9IGltYWdlU2l6ZS5o
ZWlnaHQoKSA+IDA7CisgICAgaW50IHdpZHRoID0gaW1hZ2VTaXplLndpZHRoKCkgKiAobV9pbWFn
ZS0+aGFzUmVsYXRpdmVXaWR0aCgpID8gMS4wZiA6IG11bHRpcGxpZXIpOworICAgIGludCBoZWln
aHQgPSBpbWFnZVNpemUuaGVpZ2h0KCkgKiAobV9pbWFnZS0+aGFzUmVsYXRpdmVIZWlnaHQoKSA/
IDEuMGYgOiBtdWx0aXBsaWVyKTsKICAgICBpZiAoaGFzV2lkdGgpCiAgICAgICAgIHdpZHRoID0g
bWF4KDEsIHdpZHRoKTsKICAgICBpZiAoaGFzSGVpZ2h0KQpAQCAtMTk3LDMxICsxOTksMzMgQEAg
SW50U2l6ZSBDYWNoZWRJbWFnZTo6aW1hZ2VTaXplKGZsb2F0IG11bAogICAgIHJldHVybiBJbnRT
aXplKHdpZHRoLCBoZWlnaHQpOwogfQogCi1JbnRSZWN0IENhY2hlZEltYWdlOjppbWFnZVJlY3Qo
ZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK0ludFJlY3QgQ2FjaGVkSW1hZ2U6OmltYWdlUmVjdChJ
bWFnZVVzZXIgdXNlciwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QKIHsKICAgICBBU1NFUlQoIWlz
UHVyZ2VhYmxlKCkpOwogCiAgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOworCisgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBtX2ltYWdlLT5yZWN0KHVzZXIpOwogICAg
IGlmIChtdWx0aXBsaWVyID09IDEuMGYgfHwgKCFtX2ltYWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCkg
JiYgIW1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCkpKQotICAgICAgICByZXR1cm4gbV9pbWFn
ZS0+cmVjdCgpOworICAgICAgICByZXR1cm4gaW1hZ2VSZWN0OwogCiAgICAgZmxvYXQgd2lkdGhN
dWx0aXBsaWVyID0gKG1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKSA/IDEuMGYgOiBtdWx0aXBs
aWVyKTsKICAgICBmbG9hdCBoZWlnaHRNdWx0aXBsaWVyID0gKG1faW1hZ2UtPmhhc1JlbGF0aXZl
SGVpZ2h0KCkgPyAxLjBmIDogbXVsdGlwbGllcik7CiAKICAgICAvLyBEb24ndCBsZXQgaW1hZ2Vz
IHRoYXQgaGF2ZSBhIHdpZHRoL2hlaWdodCA+PSAxIHNocmluayBiZWxvdyAxIHdoZW4gem9vbWVk
LgotICAgIGJvb2wgaGFzV2lkdGggPSBtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSA+IDA7Ci0gICAg
Ym9vbCBoYXNIZWlnaHQgPSBtX2ltYWdlLT5yZWN0KCkuaGVpZ2h0KCkgPiAwOworICAgIGJvb2wg
aGFzV2lkdGggPSBpbWFnZVJlY3Qud2lkdGgoKSA+IDA7CisgICAgYm9vbCBoYXNIZWlnaHQgPSBp
bWFnZVJlY3QuaGVpZ2h0KCkgPiAwOwogCi0gICAgaW50IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50
PihtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSAqIHdpZHRoTXVsdGlwbGllcik7Ci0gICAgaW50IGhl
aWdodCA9IHN0YXRpY19jYXN0PGludD4obV9pbWFnZS0+cmVjdCgpLmhlaWdodCgpICogaGVpZ2h0
TXVsdGlwbGllcik7CisgICAgaW50IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihpbWFnZVJlY3Qu
d2lkdGgoKSAqIHdpZHRoTXVsdGlwbGllcik7CisgICAgaW50IGhlaWdodCA9IHN0YXRpY19jYXN0
PGludD4oaW1hZ2VSZWN0LmhlaWdodCgpICogaGVpZ2h0TXVsdGlwbGllcik7CiAgICAgaWYgKGhh
c1dpZHRoKQogICAgICAgICB3aWR0aCA9IG1heCgxLCB3aWR0aCk7CiAgICAgaWYgKGhhc0hlaWdo
dCkKICAgICAgICAgaGVpZ2h0ID0gbWF4KDEsIGhlaWdodCk7CiAKLSAgICBpbnQgeCA9IHN0YXRp
Y19jYXN0PGludD4obV9pbWFnZS0+cmVjdCgpLngoKSAqIHdpZHRoTXVsdGlwbGllcik7Ci0gICAg
aW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KG1faW1hZ2UtPnJlY3QoKS55KCkgKiBoZWlnaHRNdWx0
aXBsaWVyKTsKKyAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oaW1hZ2VSZWN0LngoKSAqIHdp
ZHRoTXVsdGlwbGllcik7CisgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KGltYWdlUmVjdC55
KCkgKiBoZWlnaHRNdWx0aXBsaWVyKTsKIAogICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQpAQCAtMjk3LDcgKzMwMSw3IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmRhdGEo
UGFzc1JlZlB0cjxTaGFyZWQKICAgICAvLyB0byBkZWNvZGUuCiAgICAgaWYgKHNpemVBdmFpbGFi
bGUgfHwgYWxsRGF0YVJlY2VpdmVkKSB7CiAgICAgICAgIHNpemVfdCBtYXhEZWNvZGVkSW1hZ2VT
aXplID0gbWF4aW11bURlY29kZWRJbWFnZVNpemUoKTsKLSAgICAgICAgSW50U2l6ZSBzID0gaW1h
Z2VTaXplKDEuMGYpOworICAgICAgICBJbnRTaXplIHMgPSBpbWFnZVNpemUoMCwgMS4wZik7CiAg
ICAgICAgIHNpemVfdCBlc3RpbWF0ZWREZWNvZGVkSW1hZ2VTaXplID0gcy53aWR0aCgpICogcy5o
ZWlnaHQoKSAqIDQ7IC8vIG5vIG92ZXJmbG93IGNoZWNrCiAgICAgICAgIGlmIChtX2ltYWdlLT5p
c051bGwoKSB8fCAobWF4RGVjb2RlZEltYWdlU2l6ZSA+IDAgJiYgZXN0aW1hdGVkRGVjb2RlZElt
YWdlU2l6ZSA+IG1heERlY29kZWRJbWFnZVNpemUpKSB7CiAgICAgICAgICAgICBlcnJvcihlcnJv
ck9jY3VycmVkKCkgPyBzdGF0dXMoKSA6IERlY29kZUVycm9yKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw2ICsyNCw3IEBACiAjZGVmaW5lIENhY2hlZEltYWdlX2gKIAogI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC01MCwxOCArNTEs
MTggQEAgcHVibGljOgogICAgIHN0ZDo6cGFpcjxJbWFnZSosIGZsb2F0PiBicm9rZW5JbWFnZShm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvcikgY29uc3Q7IC8vIFJldHVybnMgYW4gaW1hZ2UgYW5kIHRo
ZSBpbWFnZSdzIHJlc29sdXRpb24gc2NhbGUgZmFjdG9yLgogICAgIGJvb2wgd2lsbFBhaW50QnJv
a2VuSW1hZ2UoKSBjb25zdDsgCiAKLSAgICBib29sIGNhblJlbmRlcihmbG9hdCBtdWx0aXBsaWVy
KSBjb25zdCB7IHJldHVybiAhZXJyb3JPY2N1cnJlZCgpICYmICFpbWFnZVNpemUobXVsdGlwbGll
cikuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBjYW5SZW5kZXIoZmxvYXQgbXVsdGlwbGllcikgY29u
c3QgeyByZXR1cm4gIWVycm9yT2NjdXJyZWQoKSAmJiAhaW1hZ2VTaXplKDAsIG11bHRpcGxpZXIp
LmlzRW1wdHkoKTsgfQogCiAgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBmb3IgU1ZHSW1hZ2Ug
cmlnaHQgbm93Ci0gICAgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYp
OworICAgIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKEltYWdlVXNlciwgY29uc3QgSW50U2l6
ZSYpOwogICAgIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0OwogICAgIGJvb2wg
aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3Q7CiAgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZl
SGVpZ2h0KCkgY29uc3Q7CiAgICAgCiAgICAgLy8gQm90aCBvZiB0aGVzZSBtZXRob2RzIHRha2Ug
YSB6b29tIG11bHRpcGxpZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBpbmNyZWFzZSB0aGUgbmF0dXJh
bCBzaXplIG9mIHRoZSBpbWFnZSBieSB0aGUKICAgICAvLyB6b29tLgotICAgIEludFNpemUgaW1h
Z2VTaXplKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0OyAgLy8gcmV0dXJucyB0aGUgc2l6ZSBvZiB0
aGUgY29tcGxldGUgaW1hZ2UuCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoZmxvYXQgbXVsdGlwbGll
cikgY29uc3Q7ICAvLyBUaGUgc2l6ZSBvZiB0aGUgY3VycmVudGx5IGRlY29kZWQgcG9ydGlvbiBv
ZiB0aGUgaW1hZ2UuCisgICAgSW50U2l6ZSBpbWFnZVNpemUoSW1hZ2VVc2VyLCBmbG9hdCBtdWx0
aXBsaWVyKSBjb25zdDsgLy8gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29tcGxldGUgaW1hZ2Uu
CisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW1hZ2VVc2VyLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25z
dDsgLy8gVGhlIHNpemUgb2YgdGhlIGN1cnJlbnRseSBkZWNvZGVkIHBvcnRpb24gb2YgdGhlIGlt
YWdlLgogCiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVu
dCopOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4Niw3ICs3ODYsOCBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpk
b0ltYWdlRHJhZyhFbGVtZW50CiAgICAgSW50UG9pbnQgb3JpZ2luOwogCiAgICAgSW1hZ2UqIGlt
YWdlID0gZ2V0SW1hZ2UoZWxlbWVudCk7Ci0gICAgaWYgKGltYWdlICYmIGltYWdlLT5zaXplKCku
aGVpZ2h0KCkgKiBpbWFnZS0+c2l6ZSgpLndpZHRoKCkgPD0gTWF4T3JpZ2luYWxJbWFnZUFyZWEK
KyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IGltYWdlLT5zaXplKGVsZW1lbnQtPnJlbmRlcmVyKCkp
OworICAgIGlmIChpbWFnZSAmJiBpbWFnZVNpemUuaGVpZ2h0KCkgKiBpbWFnZVNpemUud2lkdGgo
KSA8PSBNYXhPcmlnaW5hbEltYWdlQXJlYQogICAgICAgICAmJiAoZHJhZ0ltYWdlID0gY3JlYXRl
RHJhZ0ltYWdlRnJvbUltYWdlKGltYWdlKSkpIHsKICAgICAgICAgSW50U2l6ZSBvcmlnaW5hbFNp
emUgPSByZWN0LnNpemUoKTsKICAgICAgICAgb3JpZ2luID0gcmVjdC5sb2NhdGlvbigpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MTAsNyArMTIxMCw3IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc28K
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEludFBvaW50IGhvdFNwb3Qg
PSAoKmN1cnNvcnMpW2ldLmhvdFNwb3QoKTsKICAgICAgICAgICAgIC8vIExpbWl0IHRoZSBzaXpl
IG9mIGN1cnNvcnMgc28gdGhhdCB0aGV5IGNhbm5vdCBiZSB1c2VkIHRvIGNvdmVyIFVJIGVsZW1l
bnRzIGluIGNocm9tZS4KLSAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGNpbWFnZS0+aW1hZ2Uo
KS0+c2l6ZSgpOworICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gY2ltYWdlLT5pbWFnZSgpLT5z
aXplKDApOwogICAgICAgICAgICAgaWYgKHNpemUud2lkdGgoKSA+IDEyOCB8fCBzaXplLmhlaWdo
dCgpID4gMTI4KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFj
aW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1
cnNvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmNw
cAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIEludFBvaW50IGRldGVybWluZUhvdFNw
b3QoSW1hZ2UqIGltYWdlLCAKICAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CiAKICAgICAvLyBI
b3Qgc3BvdCBtdXN0IGJlIGluc2lkZSBjdXJzb3IgcmVjdGFuZ2xlLgotICAgIEludFJlY3QgaW1h
Z2VSZWN0ID0gaW1hZ2UtPnJlY3QoKTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdCA9IGltYWdlLT5y
ZWN0KDApOwogICAgIGlmIChpbWFnZVJlY3QuY29udGFpbnMoc3BlY2lmaWVkSG90U3BvdCkpCiAg
ICAgICAgIHJldHVybiBzcGVjaWZpZWRIb3RTcG90OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc0LDggKzk3NCw5IEBA
IHZvaWQgU2Nyb2xsVmlldzo6cGFpbnRTY3JvbGxiYXJzKEdyYXBoaWMKIAogdm9pZCBTY3JvbGxW
aWV3OjpwYWludFBhblNjcm9sbEljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogeworICAg
IC8vIFBhc3NpbmcgMCBhcyBJbWFnZVVzZXIgYXMgZmluZSBhcyB0aGUgcGFuSWNvbiBpcyBub3Qg
YSBTVkcgaW1hZ2UuCiAgICAgc3RhdGljIEltYWdlKiBwYW5TY3JvbGxJY29uID0gSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKCJwYW5JY29uIikubGVha1JlZigpOwotICAgIGNvbnRleHQtPmRy
YXdJbWFnZShwYW5TY3JvbGxJY29uLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBtX3BhblNjcm9sbElj
b25Qb2ludCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKDAsIHBhblNjcm9sbEljb24sIENvbG9y
U3BhY2VEZXZpY2VSR0IsIG1fcGFuU2Nyb2xsSWNvblBvaW50KTsKIH0KIAogdm9pZCBTY3JvbGxW
aWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3Qp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1
bU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
RHJhZ0ltYWdlQ2hyb21pdW1NYWMuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtTWFjLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9t
SW1hZ2UoSW0KIHsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gQ0dJbWFnZUNyZWF0ZUNvcHkoaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkp
OworICAgIHJldHVybiBDR0ltYWdlQ3JlYXRlQ29weShpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoMCkpOwogfQogCiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNh
Y2hlZEltYWdlKENhY2hlZEltYWdlKikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0RyYWdJbWFnZUNocm9taXVtU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcAkocmV2aXNp
b24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VD
aHJvbWl1bVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIERyYWdJbWFn
ZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW0KICAgICBpZiAoIWltYWdlKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIE5hdGl2ZUltYWdlU2tpYSogYml0bWFwID0gaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgTmF0aXZlSW1hZ2VTa2lhKiBiaXRtYXAgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiAgICAgaWYgKCFiaXRtYXApCiAg
ICAgICAgIHJldHVybiAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk2Njk4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3Jp
dGVJbWFnZShOb2RlKiBub2RlLCAKICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1h
Z2UoKTsKICAgICBBU1NFUlQoaW1hZ2UpOwogCi0gICAgTmF0aXZlSW1hZ2VQdHIgYml0bWFwID0g
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgTmF0aXZlSW1hZ2VQdHIg
Yml0bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHJlbmRlcmVyKTsKICAg
ICBpZiAoIWJpdG1hcCkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cExpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTGlzdEJveC5jcHAJKHJldmlzaW9uIDk2Njk4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBMaXN0Qm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgyLDExICs0ODIsMTEgQEAgdm9pZCBQb3B1cExpc3RCb3g6OnBh
aW50Um93KEdyYXBoaWNzQ29udAogICAgIC8vIERyYXcgdGhlIGljb24gaWYgYXBwbGljYWJsZS4K
ICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlKEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShpdGVt
SWNvbi51dGY4KCkuZGF0YSgpKSk7CiAgICAgaWYgKGltYWdlICYmICFpbWFnZS0+aXNOdWxsKCkp
IHsKLSAgICAgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBpbWFnZS0+cmVjdCgpOworICAgICAgICBJ
bnRSZWN0IGltYWdlUmVjdCA9IGltYWdlLT5yZWN0KDApOwogICAgICAgICByZW1haW5pbmdXaWR0
aCAtPSAoaW1hZ2VSZWN0LndpZHRoKCkgKyBrTGFiZWxUb0ljb25QYWRkaW5nKTsKICAgICAgICAg
aW1hZ2VSZWN0LnNldFgocm93UmVjdC53aWR0aCgpIC0gcmlnaHRQYWRkaW5nIC0gaW1hZ2VSZWN0
LndpZHRoKCkpOwogICAgICAgICBpbWFnZVJlY3Quc2V0WShyb3dSZWN0LnkoKSArIChyb3dSZWN0
LmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDIpOwotICAgICAgICBnYy0+ZHJhd0lt
YWdlKGltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBpbWFnZVJlY3QpOworICAgICAg
ICBnYy0+ZHJhd0ltYWdlKDAsIGltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBpbWFn
ZVJlY3QpOwogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIHRoZSBsYWJlbCBpZiBhcHBsaWNhYmxl
LgpAQCAtNjI5LDcgKzYyOSw3IEBAIGludCBQb3B1cExpc3RCb3g6OmdldFJvd0hlaWdodChpbnQg
aW5kZXgKICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlKEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZShpY29uLnV0ZjgoKS5kYXRhKCkpKTsKIAogICAgIGludCBmb250SGVpZ2h0ID0gZ2V0Um93Rm9u
dChpbmRleCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICBpbnQgaWNvbkhlaWdodCA9IChp
bWFnZSAmJiAhaW1hZ2UtPmlzTnVsbCgpKSA/IGltYWdlLT5yZWN0KCkuaGVpZ2h0KCkgOiAwOwor
ICAgIGludCBpY29uSGVpZ2h0ID0gKGltYWdlICYmICFpbWFnZS0+aXNOdWxsKCkpID8gaW1hZ2Ut
PnJlY3QoMCkuaGVpZ2h0KCkgOiAwOwogCiAgICAgaW50IGxpbmVQYWRkaW5nSGVpZ2h0ID0gbV9w
b3B1cENsaWVudC0+bWVudVN0eWxlKCkubWVudVR5cGUoKSA9PSBQb3B1cE1lbnVTdHlsZTo6QXV0
b2ZpbGxQb3B1cCA/IGtMaW5lUGFkZGluZ0hlaWdodCA6IDA7CiAgICAgaW50IGNhbGN1bGF0ZWRS
b3dIZWlnaHQgPSBtYXgoZm9udEhlaWdodCwgaWNvbkhlaWdodCkgKyBsaW5lUGFkZGluZ0hlaWdo
dCAqIDI7CkBAIC04MjcsNyArODI3LDcgQEAgdm9pZCBQb3B1cExpc3RCb3g6OmxheW91dCgpCiAg
ICAgICAgIGlmIChpY29uSW1hZ2UgJiYgIWljb25JbWFnZS0+aXNOdWxsKCkpIHsKICAgICAgICAg
ICAgIGlmICh3aWR0aCA+IDApCiAgICAgICAgICAgICAgICAgd2lkdGggKz0ga0xhYmVsVG9JY29u
UGFkZGluZzsKLSAgICAgICAgICAgIHdpZHRoICs9IGljb25JbWFnZS0+cmVjdCgpLndpZHRoKCk7
CisgICAgICAgICAgICB3aWR0aCArPSBpY29uSW1hZ2UtPnJlY3QoMCkud2lkdGgoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGJhc2VXaWR0aCA9IG1heChiYXNlV2lkdGgsIHdpZHRoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bGJhclRoZW1lQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpwYWlu
dFRpY2ttYQogICAgICAgICBjb25zdCBpbnQgeVBvcyA9IHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0
KCkgKiBwZXJjZW50KTsKIAogICAgICAgICBJbnRQb2ludCB0aWNrKHNjcm9sbGJhci0+eCgpLCB5
UG9zKTsKLSAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGRhc2guZ2V0KCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIHRpY2spOworICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoMCwgZGFzaC5nZXQo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgdGljayk7CiAgICAgfQogCiAgICAgY29udGV4dC0+cmVz
dG9yZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcs
NyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkaWREZWNvZGVQcm9wZXJ0aWVzKCkgCiAgICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIGRlbHRhQnl0ZXMpOwogfQog
Ci1JbnRTaXplIEJpdG1hcEltYWdlOjpzaXplKCkgY29uc3QKK0ludFNpemUgQml0bWFwSW1hZ2U6
OnNpemUoSW1hZ2VVc2VyKSBjb25zdAogewogICAgIGlmIChtX3NpemVBdmFpbGFibGUgJiYgIW1f
aGF2ZVNpemUpIHsKICAgICAgICAgbV9zaXplID0gbV9zb3VyY2Uuc2l6ZSgpOwpAQCAtMTgwLDcg
KzE4MCw3IEBAIEludFNpemUgQml0bWFwSW1hZ2U6OnNpemUoKSBjb25zdAogSW50U2l6ZSBCaXRt
YXBJbWFnZTo6Y3VycmVudEZyYW1lU2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2N1cnJlbnRG
cmFtZSB8fCBtX2hhc1VuaWZvcm1GcmFtZVNpemUpCi0gICAgICAgIHJldHVybiBzaXplKCk7Cisg
ICAgICAgIHJldHVybiBzaXplKDApOwogICAgIEludFNpemUgZnJhbWVTaXplID0gbV9zb3VyY2Uu
ZnJhbWVTaXplQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAgZGlkRGVjb2RlUHJvcGVydGll
cygpOwogICAgIHJldHVybiBmcmFtZVNpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNTaW5nbGVT
ZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgSW50
U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoSW1hZ2VVc2VyKSBj
b25zdDsKICAgICBJbnRTaXplIGN1cnJlbnRGcmFtZVNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0OwogCkBAIC0xNTMsMTQgKzE1MywxNCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBHZGtQaXhidWYqIGdldEdka1BpeGJ1ZigpOwogI2VuZGlm
CiAKLSAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCkgeyByZXR1cm4gZnJhbWVBdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQorICAgIHZpcnR1YWwg
TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoSW1hZ2VVc2VyKSB7IHJl
dHVybiBmcmFtZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CiAgICAgYm9vbCBmcmFtZUhhc0Fs
cGhhQXRJbmRleChzaXplX3QpOwogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVIYXNBbHBo
YSgpIHsgcmV0dXJuIGZyYW1lSGFzQWxwaGFBdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQogCiAj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENvbG9yKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBzaXplKCkud2lkdGgoKSAhPSAxIHx8IHNpemUoKS5oZWlnaHQo
KSAhPSAxIHx8IGZyYW1lQ291bnQoKSA+IDE7CisgICAgICAgIHJldHVybiBzaXplKDApLndpZHRo
KCkgIT0gMSB8fCBzaXplKDApLmhlaWdodCgpICE9IDEgfHwgZnJhbWVDb3VudCgpID4gMTsKICAg
ICB9CiAjZW5kaWYKIApAQCAtMTc1LDEyICsxNzUsMTIgQEAgcHJvdGVjdGVkOgogICAgIEJpdG1h
cEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgdmly
dHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICNlbmRpZgotICAgIHZp
cnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEltYWdlVXNlciwgR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7
CiAKICNpZiAoT1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkpCi0gICAgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HZW5lcmF0ZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTIgKzI5LDExIEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKKyNpbmNsdWRlICJMZW5ndGguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBHZW5lcmF0ZWRJbWFn
ZTo6ZHJhdyhJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKGNvbXBvc2l0ZU9wKTsKQEAgLTQ2LDcgKzQ1LDcgQEAgdm9pZCBHZW5lcmF0ZWRJbWFnZTo6
ZHJhdyhHcmFwaGljc0NvbnRleAogICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIG1fc2l6ZSksICptX2dlbmVyYXRvci5nZXQoKSk7CiB9CiAKLXZvaWQgR2VuZXJh
dGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
Cit2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybihJbWFnZVVzZXIsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQog
ewogICAgIC8vIEFsbG93IHRoZSBnZW5lcmF0b3IgdG8gcHJvdmlkZSB2aXN1YWxseS1lcXVpdmFs
ZW50IHRpbGluZyBwYXJhbWV0ZXJzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgJKHJl
dmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJh
dGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjEgKzQ0LDIxIEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZm9yIFNWR0dlbmVyYXRlZElt
YWdlIHJpZ2h0IG5vdwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJTaXplKGNvbnN0IElu
dFNpemUmIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVz
ZWQgZm9yIFNWR0ltYWdlIHJpZ2h0IG5vdworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJT
aXplKEltYWdlVXNlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CiAg
ICAgdmlydHVhbCBib29sIHVzZXNDb250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoSW1hZ2VVc2VyKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KIAogICAgIC8vIEFzc3VtZSB0aGF0IGdlbmVyYXRlZCBjb250ZW50IGhhcyBu
byBkZWNvZGVkIGRhdGEgd2UgbmVlZCB0byB3b3JyeSBhYm91dAogICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95RGVjb2RlZERhdGEoYm9vbCAvKmRlc3Ryb3lBbGwqLyA9IHRydWUpIHsgfQogICAgIHZp
cnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKIHByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgdmlydHVhbCB2b2lkIGRyYXco
SW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VVc2VyLCBH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CiAgICAgCiAgICAgR2Vu
ZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvciwgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODYsNyArMTg2LDggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdElt
YWdlRGF0YQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBUaGUgaW1hZ2Ug
ZGF0YSBpcyB0aWdodGx5IHBhY2tlZCwgYW5kIHdlIHVwbG9hZCBpdCBhcyBzdWNoLgogICAgICAg
ICB1bnNpZ25lZCBpbnQgdW5wYWNrQWxpZ25tZW50ID0gMTsKLSAgICAgICAgZmxpcFZlcnRpY2Fs
bHkoZGF0YS5kYXRhKCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksCisgICAgICAg
IC8vIFRoaXMgbWV0aG9kIGlzIG5ldmVyIHVzZWQgdG8gZHJhdyBhbiBTVkdJbWFnZSwgc28gcGFz
c2luZyAwIGFzIEltYWdlVXNlciBpcyBmaW5lLgorICAgICAgICBmbGlwVmVydGljYWxseShkYXRh
LmRhdGEoKSwgaW1hZ2UtPndpZHRoKDApLCBpbWFnZS0+aGVpZ2h0KDApLAogICAgICAgICAgICAg
ICAgICAgICAgICBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgdW5wYWNrQWxpZ25tZW50KTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM3LDI3ICs0MzcsMjcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZQogICAgIGZpbGxSZWN0KGZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBwb2ludCwgaCwgZnJvbSwgdG8pLCBiYWNrZ3JvdW5k
Q29sb3IsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
KEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50
JiBwLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2VVc2VyIHVzZXIsIEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbnN0IEludFBvaW50JiBwLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKLSAgICBkcmF3
SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgcCwgSW50UmVjdCgwLCAwLCAtMSwgLTEpLCBv
cCk7CisgICAgZHJhd0ltYWdlKHVzZXIsIGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIHAsIEludFJl
Y3QoMCwgMCwgLTEsIC0xKSwgb3ApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJl
Y3QmIHIsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2VVc2VyIHVzZXIsIEltYWdlKiBpbWFn
ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIHIsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKLSAgICBkcmF3SW1hZ2Uo
aW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgciwgSW50UmVjdCgwLCAwLCAtMSwgLTEpLCBvcCwgdXNl
TG93UXVhbGl0eVNjYWxlKTsKKyAgICBkcmF3SW1hZ2UodXNlciwgaW1hZ2UsIHN0eWxlQ29sb3JT
cGFjZSwgciwgSW50UmVjdCgwLCAwLCAtMSwgLTEpLCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVzdCwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlKEltYWdlVXNlciB1c2VyLCBJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVzdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Q29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7Ci0gICAgZHJhd0ltYWdlKGltYWdlLCBzdHlsZUNvbG9y
U3BhY2UsIEludFJlY3QoZGVzdCwgc3JjUmVjdC5zaXplKCkpLCBzcmNSZWN0LCBvcCk7CisgICAg
ZHJhd0ltYWdlKHVzZXIsIGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIEludFJlY3QoZGVzdCwgc3Jj
UmVjdC5zaXplKCkpLCBzcmNSZWN0LCBvcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
SW50UmVjdCYgZGVzdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZShJbWFnZVVzZXIgdXNlciwgSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewotICAgIGRyYXdJbWFn
ZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBGbG9hdFJlY3QoZGVzdCksIHNyY1JlY3QsIG9wLCB1
c2VMb3dRdWFsaXR5U2NhbGUpOworICAgIGRyYXdJbWFnZSh1c2VyLCBpbWFnZSwgc3R5bGVDb2xv
clNwYWNlLCBGbG9hdFJlY3QoZGVzdCksIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2Fs
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2VVc2VyIHVzZXIsIEltYWdl
KiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxv
d1F1YWxpdHlTY2FsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFpbWFnZSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDY4LDI2ICs0NjgsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZShJbWFnZSogaQogICAgIGZsb2F0IHRoID0gZGVzdC5oZWlnaHQoKTsKIAog
ICAgIGlmICh0c3cgPT0gLTEpCi0gICAgICAgIHRzdyA9IGltYWdlLT53aWR0aCgpOworICAgICAg
ICB0c3cgPSBpbWFnZS0+d2lkdGgodXNlcik7CiAgICAgaWYgKHRzaCA9PSAtMSkKLSAgICAgICAg
dHNoID0gaW1hZ2UtPmhlaWdodCgpOworICAgICAgICB0c2ggPSBpbWFnZS0+aGVpZ2h0KHVzZXIp
OwogCiAgICAgaWYgKHR3ID09IC0xKQotICAgICAgICB0dyA9IGltYWdlLT53aWR0aCgpOworICAg
ICAgICB0dyA9IGltYWdlLT53aWR0aCh1c2VyKTsKICAgICBpZiAodGggPT0gLTEpCi0gICAgICAg
IHRoID0gaW1hZ2UtPmhlaWdodCgpOworICAgICAgICB0aCA9IGltYWdlLT5oZWlnaHQodXNlcik7
CiAKICAgICBpZiAodXNlTG93UXVhbGl0eVNjYWxlKSB7CiAgICAgICAgIEludGVycG9sYXRpb25R
dWFsaXR5IHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgSW50ZXJwb2xhdGlvbkxvdwog
ICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25Ob25lKTsK
LSAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24oKSwgRmxv
YXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0c3cs
IHRzaCkpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAgICAgaW1hZ2UtPmRyYXcodXNlciwg
dGhpcywgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9h
dFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0c3csIHRzaCkpLCBzdHlsZUNvbG9yU3Bh
Y2UsIG9wKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShwcmV2aW91c0lu
dGVycG9sYXRpb25RdWFsaXR5KTsKICAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2UtPmRyYXcodGhp
cywgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJl
Y3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0c3csIHRzaCkpLCBzdHlsZUNvbG9yU3BhY2Us
IG9wKTsKKyAgICAgICAgaW1hZ2UtPmRyYXcodXNlciwgdGhpcywgRmxvYXRSZWN0KGRlc3QubG9j
YXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZs
b2F0U2l6ZSh0c3csIHRzaCkpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2lu
dCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVz
ZUxvd1F1YWxpdHlTY2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJ
bWFnZVVzZXIgdXNlciwgSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UG9pbnQmIHNyY1BvaW50LCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNj
YWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQogICAgICAgICBy
ZXR1cm47CkBAIC00OTUsMTMgKzQ5NSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hCiAgICAgaWYgKHVzZUxvd1F1YWxpdHlTY2FsZSkgewogICAgICAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBwcmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSgpOwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KEludGVycG9sYXRpb25Mb3cpOwotICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIHJlY3Qs
IHNyY1BvaW50LCB0aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGltYWdl
LT5kcmF3VGlsZWQodXNlciwgdGhpcywgcmVjdCwgc3JjUG9pbnQsIHRpbGVTaXplLCBzdHlsZUNv
bG9yU3BhY2UsIG9wKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShwcmV2
aW91c0ludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2UtPmRy
YXdUaWxlZCh0aGlzLCByZWN0LCBzcmNQb2ludCwgdGlsZVNpemUsIHN0eWxlQ29sb3JTcGFjZSwg
b3ApOworICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHVzZXIsIHRoaXMsIHJlY3QsIHNyY1BvaW50
LCB0aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LAordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlVXNlciB1c2VyLCBJbWFnZSogaW1h
Z2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LAogICAgIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9y
LCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkgfHwgIWltYWdlKQpAQCAtNTA5LDE3ICs1MDksMTcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYQogCiAgICAgaWYgKGhSdWxlID09IEltYWdlOjpT
dHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKICAgICAgICAgLy8g
SnVzdCBkbyBhIHNjYWxlLgotICAgICAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFj
ZSwgZGVzdCwgc3JjUmVjdCwgb3ApOworICAgICAgICBkcmF3SW1hZ2UodXNlciwgaW1hZ2UsIHN0
eWxlQ29sb3JTcGFjZSwgZGVzdCwgc3JjUmVjdCwgb3ApOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKHVzZUxvd1F1YWxpdHlTY2FsZSkgewogICAgICAgICBJbnRlcnBvbGF0aW9u
UXVhbGl0eSBwcmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpOwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9s
YXRpb25Mb3cpOwotICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRoaXMsIGRlc3QsIHNyY1JlY3Qs
IHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAg
ICAgICAgaW1hZ2UtPmRyYXdUaWxlZCh1c2VyLCB0aGlzLCBkZXN0LCBzcmNSZWN0LCB0aWxlU2Nh
bGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiAgICAgICAgIHNl
dEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkocHJldmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0eSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIGltYWdlLT5kcmF3VGlsZWQodGhpcywgZGVzdCwgc3JjUmVj
dCwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwor
ICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHVzZXIsIHRoaXMsIGRlc3QsIHNyY1JlY3QsIHRpbGVT
Y2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgcCwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAy
LDE1ICszMDIsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpOwogCi0gICAgICAgIHZvaWQg
ZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBv
aW50JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKLSAgICAgICAg
dm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
SW50UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1
c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdl
KiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291
cmNlT3Zlcik7Ci0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93
UXVhbGl0eVNjYWxlID0gZmFsc2UpOwotICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSosIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAg
dm9pZCBkcmF3SW1hZ2UoSW1hZ2VVc2VyLCBJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBjb25zdCBJbnRQb2ludCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNl
T3Zlcik7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlVXNlciwgSW1hZ2UqLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0g
Q29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7Cisg
ICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlVXNlciwgSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAg
dm9pZCBkcmF3SW1hZ2UoSW1hZ2VVc2VyLCBJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29t
cG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2VVc2VyLCBJbWFnZSos
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVy
LCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBkcmF3VGls
ZWRJbWFnZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNyY1BvaW50LCBjb25zdCBJbnRTaXplJiB0aWxl
U2l6ZSwKKyAgICAgICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJbWFnZVVzZXIsIEltYWdlKiwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJ
bnRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLAogICAgICAgICAgICAg
ICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwotICAgICAgICB2b2lkIGRyYXdUaWxlZEltYWdl
KEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LAorICAgICAgICB2b2lkIGRyYXdUaWxlZEltYWdl
KEltYWdlVXNlciwgSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxl
UnVsZSBoUnVsZSA9IEltYWdlOjpTdHJldGNoVGlsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlID0g
SW1hZ2U6OlN0cmV0Y2hUaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0
ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUg
PSBmYWxzZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
Qml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTg4
LDcgKzg5LDcgQEAgdm9pZCBJbWFnZTo6ZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQwogICAg
IGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2aW91c09wZXJhdG9yKTsKIH0KIAotdm9p
ZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYg
c2NhbGVkVGlsZVNpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBvcCkKK3ZvaWQgSW1hZ2U6OmRyYXdUaWxlZChJbWFnZVVzZXIgdXNlciwgR3JhcGhpY3ND
b250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFBvaW50
JiBzcmNQb2ludCwgY29uc3QgRmxvYXRTaXplJiBzY2FsZWRUaWxlU2l6ZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogeyAgICAKICAgICBpZiAobWF5
RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQs
IGRlc3RSZWN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwpAQCAtMTAwLDEy
ICsxMDEsNyBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAg
QVNTRVJUKCFpc0JpdG1hcEltYWdlKCkgfHwgbm90U29saWRDb2xvcigpKTsKICNlbmRpZgogCi0g
ICAgRmxvYXRTaXplIGludHJpbnNpY1RpbGVTaXplID0gc2l6ZSgpOwotICAgIGlmIChoYXNSZWxh
dGl2ZVdpZHRoKCkpCi0gICAgICAgIGludHJpbnNpY1RpbGVTaXplLnNldFdpZHRoKHNjYWxlZFRp
bGVTaXplLndpZHRoKCkpOwotICAgIGlmIChoYXNSZWxhdGl2ZUhlaWdodCgpKQotICAgICAgICBp
bnRyaW5zaWNUaWxlU2l6ZS5zZXRIZWlnaHQoc2NhbGVkVGlsZVNpemUuaGVpZ2h0KCkpOwotCisg
ICAgRmxvYXRTaXplIGludHJpbnNpY1RpbGVTaXplID0gc2l6ZSh1c2VyKTsKICAgICBGbG9hdFNp
emUgc2NhbGUoc2NhbGVkVGlsZVNpemUud2lkdGgoKSAvIGludHJpbnNpY1RpbGVTaXplLndpZHRo
KCksCiAgICAgICAgICAgICAgICAgICAgIHNjYWxlZFRpbGVTaXplLmhlaWdodCgpIC8gaW50cmlu
c2ljVGlsZVNpemUuaGVpZ2h0KCkpOwogCkBAIC0xMjEsMTkgKzExNywxOSBAQCB2b2lkIEltYWdl
OjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAgICAgIHZpc2libGVTcmNSZWN0LnNl
dFkoKGRlc3RSZWN0LnkoKSAtIG9uZVRpbGVSZWN0LnkoKSkgLyBzY2FsZS5oZWlnaHQoKSk7CiAg
ICAgICAgIHZpc2libGVTcmNSZWN0LnNldFdpZHRoKGRlc3RSZWN0LndpZHRoKCkgLyBzY2FsZS53
aWR0aCgpKTsKICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0SGVpZ2h0KGRlc3RSZWN0LmhlaWdo
dCgpIC8gc2NhbGUuaGVpZ2h0KCkpOwotICAgICAgICBkcmF3KGN0eHQsIGRlc3RSZWN0LCB2aXNp
YmxlU3JjUmVjdCwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGRyYXcodXNlciwgY3R4
dCwgZGVzdFJlY3QsIHZpc2libGVTcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3Jt
ID0gQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGVOb25Vbmlmb3JtKHNjYWxlLndpZHRoKCksIHNjYWxl
LmhlaWdodCgpKTsKICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoRmxvYXRQb2ludCgpLCBpbnRyaW5z
aWNUaWxlU2l6ZSk7ICAgIAotICAgIGRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBvbmVUaWxlUmVjdC5sb2NhdGlvbigpLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBk
ZXN0UmVjdCk7CisgICAgZHJhd1BhdHRlcm4odXNlciwgY3R4dCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIG9uZVRpbGVSZWN0LmxvY2F0aW9uKCksIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRl
c3RSZWN0KTsKICAgICAKICAgICBzdGFydEFuaW1hdGlvbigpOwogfQogCiAvLyBGSVhNRTogTWVy
Z2Ugd2l0aCB0aGUgb3RoZXIgZHJhd1RpbGVkIGV2ZW50dWFsbHksIHNpbmNlIHdlIG5lZWQgYSBj
b21iaW5hdGlvbiBvZiBib3RoIGZvciBzb21lIHRoaW5ncy4KLXZvaWQgSW1hZ2U6OmRyYXdUaWxl
ZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LAordm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEltYWdlVXNlciB1c2Vy
LCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LAogICAgIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9y
LCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsgICAgCiAgICAgaWYgKG1heUZpbGxXaXRoU29s
aWRDb2xvcigpKSB7CkBAIC0xNjEsMTAgKzE1Nyw5IEBAIHZvaWQgSW1hZ2U6OmRyYXdUaWxlZChH
cmFwaGljc0NvbnRleHQqIGMKICAgICAgICAgdlBoYXNlIC09IChkc3RSZWN0LmhlaWdodCgpIC0g
c2NhbGVkVGlsZUhlaWdodCkgLyAyOyAKICAgICBGbG9hdFBvaW50IHBhdHRlcm5QaGFzZShkc3RS
ZWN0LngoKSAtIGhQaGFzZSwgZHN0UmVjdC55KCkgLSB2UGhhc2UpOwogICAgIAotICAgIGRyYXdQ
YXR0ZXJuKGN0eHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBhdHRlcm5QaGFzZSwgc3R5
bGVDb2xvclNwYWNlLCBvcCwgZHN0UmVjdCk7CisgICAgZHJhd1BhdHRlcm4odXNlciwgY3R4dCwg
c3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGF0dGVyblBoYXNlLCBzdHlsZUNvbG9yU3BhY2Us
IG9wLCBkc3RSZWN0KTsKIAogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiB9CiAKLQogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZpc2lvbiA5NjY5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDExICszMiwxMSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNs
dWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgUExBVEZP
Uk0oTUFDKQogI2lmZGVmIF9fT0JKQ19fCkBAIC02NiwxNiArNjYsMjEgQEAgdHlwZWRlZiBzdHJ1
Y3QgX0dka1BpeGJ1ZiBHZGtQaXhidWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
QWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNs
YXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFJlbmRlckJveDsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLWNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIAogLy8gVGhpcyBj
bGFzcyBnZXRzIG5vdGlmaWVkIHdoZW4gYW4gaW1hZ2UgY3JlYXRlcyBvciBkZXN0cm95cyBkZWNv
ZGVkIGZyYW1lcyBhbmQgd2hlbiBpdCBhZHZhbmNlcyBhbmltYXRpb24gZnJhbWVzLgogY2xhc3Mg
SW1hZ2VPYnNlcnZlcjsKIAorLy8gVHlwaWNhbGx5IGEgUmVuZGVyT2JqZWN0IHBvaW50ZXIsIGlk
ZW50aWZ5aW5nIHRoZSB1c2VyIG9mIHRoZSBpbWFnZS4gVGhlIGludHJpbnNpYyBzaXplIG9mIGFu
IFNWRyBpbWFnZSBtYXkgZGVwZW5kCisvLyBvbiB0aGUgcGxhY2Ugd2hlcmUgaXRzIGVtYmVkZGVk
IC0gdGh1cyBhIFNWR0ltYWdlIG1heSByZXBvcnQgZGlmZmVyZW50IHNpemVzIGRlcGVuZGluZyBv
biB0aGUgInVzZXIiLgordHlwZWRlZiBjb25zdCB2b2lkKiBJbWFnZVVzZXI7CisKIGNsYXNzIElt
YWdlIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJh
dGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKQEAgLTg3LDYgKzky
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlPiBsb2FkUGxhdGZvcm1S
ZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKTsKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1R5cGUo
Y29uc3QgU3RyaW5nJik7IAogCisgICAgdmlydHVhbCBib29sIGlzU1ZHSW1hZ2UoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEo
KSB7IHJldHVybiBmYWxzZTsgfQogCkBAIC05NSwxOCArMTAxLDE4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCiAgICAgc3RhdGljIEltYWdlKiBudWxsSW1hZ2UoKTsKLSAgICBib29sIGlzTnVsbCgp
IGNvbnN0IHsgcmV0dXJuIHNpemUoKS5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuIHNpemUoMCkuaXNFbXB0eSgpOyB9CiAKICAgICAvLyBUaGVzZSBhcmUgb25s
eSB1c2VkIGZvciBTVkdJbWFnZSByaWdodCBub3cKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFp
bmVyU2l6ZShjb25zdCBJbnRTaXplJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRhaW5l
clNpemUoSW1hZ2VVc2VyLCBjb25zdCBJbnRTaXplJikgeyB9CiAgICAgdmlydHVhbCBib29sIHVz
ZXNDb250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAg
IHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOwotICAgIEludFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKTsgfQotICAgIGludCB3aWR0
aCgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKS53aWR0aCgpOyB9Ci0gICAgaW50IGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIHNpemUoKS5oZWlnaHQoKTsgfQorICAgIHZpcnR1YWwgSW50U2l6ZSBzaXpl
KEltYWdlVXNlcikgY29uc3QgPSAwOworICAgIEludFJlY3QgcmVjdChJbWFnZVVzZXIgdXNlcikg
Y29uc3QgeyByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBzaXplKHVzZXIpKTsgfQorICAgIGlu
dCB3aWR0aChJbWFnZVVzZXIgdXNlcikgY29uc3QgeyByZXR1cm4gc2l6ZSh1c2VyKS53aWR0aCgp
OyB9CisgICAgaW50IGhlaWdodChJbWFnZVVzZXIgdXNlcikgY29uc3QgeyByZXR1cm4gc2l6ZSh1
c2VyKS5oZWlnaHQoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRIb3RTcG90KEludFBvaW50Jikg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIGJvb2wgc2V0RGF0YShQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTMwLDcgKzEzNiw3
IEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91bmRUaWxl
LCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAotICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShJbWFnZVVzZXIpIHsgcmV0
dXJuIDA7IH0KICAgICAKICNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gQWNjZXNzb3JzIGZvciBu
YXRpdmUgaW1hZ2UgZm9ybWF0cy4KQEAgLTE1NSw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybVRoZW1lSWNvbihjb25zdCBjaGFyKiBu
YW1lLCBpbnQgc2l6ZSk7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4o
SW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CiAK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0xNjksMTEgKzE3NSwxMSBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICAvLyBUaGUgQ29sb3JTcGFjZSBwYXJhbWV0ZXIgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHVu
dGFnZ2VkIGltYWdlcy4KICNpZiBQTEFURk9STShXSU4pCi0gICAgdmlydHVhbCB2b2lkIGRyYXdG
cmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZU1h
dGNoaW5nU291cmNlU2l6ZShJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKSB7IH0KICNlbmRpZgotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IpID0gMDsKLSAgICB2b2lkIGRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IpOwotICAgIHZvaWQgZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFNp
emUmIHRpbGVTY2FsZUZhY3RvciwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcikgPSAwOworICAgIHZvaWQgZHJhd1RpbGVkKEltYWdlVXNl
ciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9h
dFBvaW50JiBzcmNQb2ludCwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2b2lkIGRyYXdUaWxlZChJ
bWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3Rvciwg
VGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgLy8gU3VwcG9ydGluZyB0aWxlZCBkcmF3aW5n
CiAgICAgdmlydHVhbCBib29sIG1heUZpbGxXaXRoU29saWRDb2xvcigpIHsgcmV0dXJuIGZhbHNl
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjkyLDcgKzY5Miw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1Rv
QmFja2cKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGlt
YWdlKQogewogICAgIGlmIChpbWFnZSkgewotICAgICAgICBDR0ltYWdlUmVmIG5ld0ltYWdlID0g
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIENHSW1hZ2VSZWYg
bmV3SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiAgICAgICAg
IGlmICghbmV3SW1hZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dDNEQ2Fpcm8uY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldElt
YWdlRGF0YShJbWEKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaW1hZ2VTdXJm
YWNlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgaW1hZ2VTdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Cisg
ICAgICAgIGltYWdlU3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgw
KTsKICAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQogICAgICAgICAgICAgYWxwaGFPcCA9
IEFscGhhRG9Vbm11bHRpcGx5OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShy
ZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAg
dm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogewogICAgIC8vIEJpdG1h
cEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24K
ICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShjYWlyb19zdXJm
YWNlX3JlZmVyZW5jZShtX2RhdGEubV9zdXJmYWNlKSk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdl
KGltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNl
TG93UXVhbGl0eVNjYWxlKTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UoMCwgaW1hZ2UuZ2V0KCks
IHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2Nh
bGUpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLApAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ28KIHsKICAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVh
c2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCiAgICAgUmVmUHRyPEltYWdl
PiBpbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobV9k
YXRhLm1fc3VyZmFjZSkpOwotICAgIGltYWdlLT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3Qp
OworICAgIGltYWdlLT5kcmF3UGF0dGVybigwLCBjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogfQogCiB2b2lk
IEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGlu
dD4mIGxvb2tVcFRhYmxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKGNhaXJv
X3N1cmZhY2VfdAogICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwogfQogCi12b2lkIEJpdG1hcElt
YWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEltYWdlVXNlciB1c2VyLCBH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQogewogICAgIEZsb2F0UmVjdCBzcmNSZWN0KHNyYyk7CiAgICAgRmxvYXRSZWN0IGRzdFJl
Y3QoZHN0KTsKQEAgLTEyNywxNSArMTI3LDE1IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0KiAKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwog
fQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEltYWdlVXNlciB1c2VyLCBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGNhaXJvX3N1cmZh
Y2VfdCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGNhaXJvX3N1
cmZhY2VfdCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKICAgICBp
ZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHll
dC4KICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKTsKLSAgICBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNyLCBpbWFn
ZSwgc2l6ZSgpLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHRvQ2Fpcm9PcGVy
YXRvcihvcCksIGRlc3RSZWN0KTsKKyAgICBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNyLCBp
bWFnZSwgc2l6ZSh1c2VyKSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCB0b0Nh
aXJvT3BlcmF0b3Iob3ApLCBkZXN0UmVjdCk7CiAKICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQog
ICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5j
cHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0dGVybkNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNhaXJvX3BhdHRlcm5fdCogUGF0dGVybjo6Y3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0CiB7Ci0gICAgY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gdGlsZUltYWdlKCktPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApOwogICAgIGlmICghc3VyZmFjZSkKICAgICAgICAgcmV0
dXJuIDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dDNEQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0SW1hZ2VEYXRhKEltYQogICAgICAgICBkZWNvZGVkSW1hZ2UuYWRvcHRDRihkZWNv
ZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7CiAgICAgICAgIGNnSW1hZ2UgPSBkZWNvZGVkSW1h
Z2UuZ2V0KCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgY2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICBpZiAoIWNnSW1hZ2UpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzOCwxNCArMjM4LDE0IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ28KICAgICBpZiAoIW1fY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewogICAg
ICAgICBpZiAoY29udGV4dCA9PSBtX2NvbnRleHQpIHsKICAgICAgICAgICAgIFJlZlB0cjxJbWFn
ZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsgLy8gRHJhd2luZyBpbnRvIG91
ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAgICAgIGNvcHktPmRyYXdQ
YXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNv
bG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybigw
LCBjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNw
YWNlLCBvcCwgZGVzdFJlY3QpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUmVmUHRy
PEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSk7Ci0gICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oY29udGV4dCwg
c3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRl
c3RSZWN0KTsKKyAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybigwLCBj
b250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNl
LCBvcCwgZGVzdFJlY3QpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgUmVmUHRy
PEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBjb3B5
LT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAgICBjb3B5LT5kcmF3UGF0dGVy
bigwLCBjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xv
clNwYWNlLCBvcCwgZGVzdFJlY3QpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDk2Njk4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4Miw3ICsxODIsNyBAQCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0bWFw
SW1hZ2U6OmdldENHCiAgICAgcmV0dXJuIFJldGFpblB0cjxDRkFycmF5UmVmPihBZG9wdENGLCBh
cnJheSk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkK
K3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqIGN0eHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQog
ewogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiAKQEAgLTIwOSwxMCArMjA5LDExIEBAIHN0YXRpYyB2
b2lkIGRyYXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW4KICAgICBDR0NvbnRleHREcmF3SW1hZ2Uo
Y29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxv
YXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1h
Z2UpKSksIGltYWdlKTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihJbWFnZVVzZXIg
dXNlciwgR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewot
ICAgIGlmICghbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKKyAgICBDR0ltYWdlUmVmIHRp
bGVJbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHVzZXIpOworICAgIGlmICghdGls
ZUltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQocGF0dGVyblRyYW5zZm9ybS5p
c0ludmVydGlibGUoKSk7CkBAIC0yMzUsMTYgKzIzNiwxNSBAQCB2b2lkIEltYWdlOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgZmxvYXQgYWRqdXN0ZWRYID0gcGhhc2UueCgpIC0g
ZGVzdFJlY3QueCgpICsgdGlsZVJlY3QueCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0
ZXJuVHJhbnNmb3JtLmEoKSk7IC8vIFdlIHRyYW5zbGF0ZWQgdGhlIGNvbnRleHQgc28gdGhhdCBk
ZXN0UmVjdC54KCkgaXMgdGhlIG9yaWdpbiwgc28gc3VidHJhY3QgaXQgb3V0LgogICAgIGZsb2F0
IGFkanVzdGVkWSA9IGRlc3RSZWN0LmhlaWdodCgpIC0gKHBoYXNlLnkoKSAtIGRlc3RSZWN0Lnko
KSArIHRpbGVSZWN0LnkoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5zZm9y
bS5kKCkpICsgc2NhbGVkVGlsZUhlaWdodCk7CiAKLSAgICBDR0ltYWdlUmVmIHRpbGVJbWFnZSA9
IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgZmxvYXQgaCA9IENHSW1hZ2VHZXRI
ZWlnaHQodGlsZUltYWdlKTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzdWJJbWFnZTsK
LSAgICBpZiAodGlsZVJlY3Quc2l6ZSgpID09IHNpemUoKSkKKyAgICBpZiAodGlsZVJlY3Quc2l6
ZSgpID09IHNpemUodXNlcikpCiAgICAgICAgIHN1YkltYWdlID0gdGlsZUltYWdlOwogICAgIGVs
c2UgewogICAgICAgICAvLyBDb3B5aW5nIGEgc3ViLWltYWdlIG91dCBvZiBhIHBhcnRpYWxseS1k
ZWNvZGVkIGltYWdlIHN0b3BzIHRoZSBkZWNvZGluZyBvZiB0aGUgb3JpZ2luYWwgaW1hZ2UuIEl0
IHNob3VsZCBuZXZlciBoYXBwZW4KICAgICAgICAgLy8gYmVjYXVzZSBzdWItaW1hZ2VzIGFyZSBv
bmx5IHVzZWQgZm9yIGJvcmRlci1pbWFnZSwgd2hpY2ggb25seSByZW5kZXJzIHdoZW4gdGhlIGlt
YWdlIGlzIGZ1bGx5IGRlY29kZWQuCi0gICAgICAgIEFTU0VSVChoID09IGhlaWdodCgpKTsKKyAg
ICAgICAgQVNTRVJUKGggPT0gaGVpZ2h0KHVzZXIpKTsKICAgICAgICAgc3ViSW1hZ2UuYWRvcHRD
RihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KHRpbGVJbWFnZSwgdGlsZVJlY3QpKTsKICAg
ICB9CiAKQEAgLTI1OCw5ICsyNTgsOSBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQqCiAgICAgZmxvYXQgc2NhbGVkVGlsZVdpZHRoID0gdGlsZVJlY3Qud2lkdGgoKSAq
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOwogICAgIGZsb2F0
IHcgPSBDR0ltYWdlR2V0V2lkdGgodGlsZUltYWdlKTsKICNpZmRlZiBCVUlMRElOR19PTl9MRU9Q
QVJECi0gICAgaWYgKHcgPT0gc2l6ZSgpLndpZHRoKCkgJiYgaCA9PSBzaXplKCkuaGVpZ2h0KCkg
JiYgc2NhbGVkVGlsZVdpZHRoID09IHRpbGVSZWN0LndpZHRoKCkgJiYgc2NhbGVkVGlsZUhlaWdo
dCA9PSB0aWxlUmVjdC5oZWlnaHQoKSkKKyAgICBpZiAodyA9PSBzaXplKHVzZXIpLndpZHRoKCkg
JiYgaCA9PSBzaXplKHVzZXIpLmhlaWdodCgpICYmIHNjYWxlZFRpbGVXaWR0aCA9PSB0aWxlUmVj
dC53aWR0aCgpICYmIHNjYWxlZFRpbGVIZWlnaHQgPT0gdGlsZVJlY3QuaGVpZ2h0KCkpCiAjZWxz
ZQotICAgIGlmICh3ID09IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6ZSgpLmhlaWdodCgpKQor
ICAgIGlmICh3ID09IHNpemUodXNlcikud2lkdGgoKSAmJiBoID09IHNpemUodXNlcikuaGVpZ2h0
KCkpCiAjZW5kaWYKICAgICAgICAgQ0dDb250ZXh0RHJhd1RpbGVkSW1hZ2UoY29udGV4dCwgRmxv
YXRSZWN0KGFkanVzdGVkWCwgYWRqdXN0ZWRZLCBzY2FsZWRUaWxlV2lkdGgsIHNjYWxlZFRpbGVI
ZWlnaHQpLCBzdWJJbWFnZS5nZXQoKSk7CiAgICAgZWxzZSB7CkBAIC0yNzAsNyArMjcwLDcgQEAg
dm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KgogICAgIENHQWZmaW5lVHJh
bnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZShuYXJyb3dQcmVjaXNpb25Ub0NH
RmxvYXQocGF0dGVyblRyYW5zZm9ybS5hKCkpLCAwLCAwLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxv
YXQocGF0dGVyblRyYW5zZm9ybS5kKCkpLCBhZGp1c3RlZFgsIGFkanVzdGVkWSk7CiAgICAgbWF0
cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0NvbnRleHRHZXRDVE0oY29u
dGV4dCkpOwogICAgIC8vIFRoZSB0b3Agb2YgYSBwYXJ0aWFsbHktZGVjb2RlZCBpbWFnZSBpcyBk
cmF3biBhdCB0aGUgYm90dG9tIG9mIHRoZSB0aWxlLiBNYXAgaXQgdG8gdGhlIHRvcC4KLSAgICBt
YXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZShtYXRyaXgsIDAsIHNpemUoKS5oZWln
aHQoKSAtIGgpOworICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRlKG1hdHJp
eCwgMCwgc2l6ZSh1c2VyKS5oZWlnaHQoKSAtIGgpOwogICAgIFJldGFpblB0cjxDR1BhdHRlcm5S
ZWY+IHBhdHRlcm4oQWRvcHRDRiwgQ0dQYXR0ZXJuQ3JlYXRlKHN1YkltYWdlLmdldCgpLCBDR1Jl
Y3RNYWtlKDAsIDAsIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeCwgdGlsZVJlY3Qu
d2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgdHJ1ZSwg
JnBhdHRlcm5DYWxsYmFja3MpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCShyZXZpc2lvbiA5NjY5
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFN0cmluZyBQREZEb2N1bWVu
dEltYWdlOjpmaWxlbmFtZUV4dGVuc2kKICAgICByZXR1cm4gInBkZiI7CiB9CiAKLUludFNpemUg
UERGRG9jdW1lbnRJbWFnZTo6c2l6ZSgpIGNvbnN0CitJbnRTaXplIFBERkRvY3VtZW50SW1hZ2U6
OnNpemUoSW1hZ2VVc2VyKSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0IHNpbmEgPSBzaW5mKC1t
X3JvdGF0aW9uKTsKICAgICBjb25zdCBmbG9hdCBjb3NhID0gY29zZigtbV9yb3RhdGlvbik7CkBA
IC0xNTUsNyArMTU1LDcgQEAgaW50IFBERkRvY3VtZW50SW1hZ2U6OnBhZ2VDb3VudCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fZG9jdW1lbnQgPyBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyht
X2RvY3VtZW50KSA6IDA7CiB9CiAKLXZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgUERG
RG9jdW1lbnRJbWFnZTo6ZHJhdyhJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmICghbV9kb2N1bWVudCB8fCBt
X2N1cnJlbnRQYWdlID09IC0xKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCShy
ZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTAgKzU5LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShi
b29sIC8qZGVzdHJveUFsbCovID0gdHJ1ZSkgeyB9CiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQg
ZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICAgICAgdmlydHVhbCBJbnRT
aXplIHNpemUoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoSW1hZ2VVc2Vy
KSBjb25zdDsKIAogICAgICAgICBQREZEb2N1bWVudEltYWdlKCk7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhJbWFnZVVzZXIsIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwog
ICAgICAgICAKICAgICAgICAgdm9pZCBzZXRDdXJyZW50UGFnZShpbnQpOwogICAgICAgICBpbnQg
cGFnZUNvdW50KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXR0ZXJuQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgdm9pZCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrKHZvaWQq
CiAKIENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3QKIHsKLSAgICBJbnRS
ZWN0IHRpbGVSZWN0ID0gdGlsZUltYWdlKCktPnJlY3QoKTsKKyAgICBJbnRSZWN0IHRpbGVSZWN0
ID0gdGlsZUltYWdlKCktPnJlY3QoMCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRy
YW5zZm9ybSA9IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uICogbV9wYXR0ZXJuU3BhY2VUcmFuc2Zv
cm1hdGlvbjsKICAgICBwYXR0ZXJuVHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybSgxLCAtMSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ljb25DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4CiAKICAgICAvLyBBbiBJY29uIGRvZXNuJ3Qga25vdyB0aGUgY29sb3Igc3BhY2Ugb2Yg
dGhlIGZpbGUgdXBsb2FkIGNvbnRyb2wuCiAgICAgLy8gU28gdXNlIENvbG9yU3BhY2VEZXZpY2VS
R0IuCi0gICAgY29udGV4dC0+ZHJhd0ltYWdlKG1faWNvbi5nZXQoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgcmVjdCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKDAsIG1faWNvbi5nZXQoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgcmVjdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTEgKzEzNCwxMSBAQCB2b2lkIEltYWdlTGF5
ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoSW1hCiAgICAgLy8gc3R5bGUgY2hhbmdlIHRoYXQgYWZm
ZWN0cyB0aGUgbGF5ZXIgZXZlbiBpZiB0aGF0IGNoYW5nZSBkb2Vzbid0CiAgICAgLy8gYWZmZWN0
IHRoZSBhY3R1YWwgY29udGVudHMgb2YgdGhlIGltYWdlIChlLmcuIGEgQ1NTIGFuaW1hdGlvbiku
CiAgICAgLy8gV2l0aCB0aGlzIGNoZWNrIGluIHBsYWNlIHdlIGF2b2lkIHVuZWNlc3NhcnkgdGV4
dHVyZSB1cGxvYWRzLgotICAgIGlmICgobV9jb250ZW50cyA9PSBjb250ZW50cykgJiYgKG1fY29u
dGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgPT0gbV9pbWFnZUZvckN1cnJlbnRG
cmFtZSkpCisgICAgaWYgKChtX2NvbnRlbnRzID09IGNvbnRlbnRzKSAmJiAobV9jb250ZW50cy0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCkgPT0gbV9pbWFnZUZvckN1cnJlbnRGcmFtZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGVudHMgPSBjb250ZW50czsKLSAgICBtX2lt
YWdlRm9yQ3VycmVudEZyYW1lID0gbV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKKyAgICBtX2ltYWdlRm9yQ3VycmVudEZyYW1lID0gbV9jb250ZW50cy0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoMCk7CiAgICAgbV9kaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50
KDAsIDApLCBib3VuZHMoKSk7CiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9CkBAIC0xNDYsNyAr
MTQ2LDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYQogdm9pZCBJ
bWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKIHsKICAgICBpZiAoIW1f
ZGlydHlSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT51cGRhdGVG
cm9tSW1hZ2UobV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CisgICAg
ICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgwKSk7CiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5n
T3B0aW9uKCk7CiAgICAgICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRC
b3VuZHMoKSk7CiAgICAgICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAkocmV2aXNp
b24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1Nyw3
ICsxNDU3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KAogICAg
IGlmICghZ3N0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHQtPmRyYXdJbWFn
ZShyZWludGVycHJldF9jYXN0PEltYWdlKj4oZ3N0SW1hZ2UtPmltYWdlKCkuZ2V0KCkpLCBDb2xv
clNwYWNlU1JHQiwKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UoMCwgcmVpbnRlcnByZXRfY2FzdDxJ
bWFnZSo+KGdzdEltYWdlLT5pbWFnZSgpLmdldCgpKSwgQ29sb3JTcGFjZVNSR0IsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHJlY3QsIENvbXBvc2l0ZUNvcHksIGZhbHNlKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxNyw3ICs2MTcsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNU
b0ltYWdlCiAgICAgICAgIHJlc2V0KGltYWdlLT5zaXplKCksIGZhbHNlKTsKICAgICAgICAgaWYg
KCFmb3VuZCkgewogICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoYmVnaW5QYWlu
dChJbnRSZWN0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWln
aHQoKSkpKTsKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgICAgICBj
b250ZXh0LmRyYXdJbWFnZSgwLCBpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQo
MCwgMCksIENvbXBvc2l0ZUNvcHkpOwogICAgICAgICAgICAgZW5kUGFpbnQoKTsKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9J
bWFnZU9wZW5WRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRD
b2xvcigpCiAgICAgVGlsZWRJbWFnZU9wZW5WRyogdGlsZWRJbWFnZSA9IDA7CiAKICAgICBpZiAo
bV9mcmFtZUNvdW50ID09IDEgJiYgbV9zaXplLndpZHRoKCkgPT0gMSAmJiBtX3NpemUuaGVpZ2h0
KCkgPT0gMSkKLSAgICAgICAgdGlsZWRJbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgICAgIHRpbGVkSW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsK
IAogICAgIGlmICh0aWxlZEltYWdlKSB7CiAgICAgICAgIG1faXNTb2xpZENvbG9yID0gdHJ1ZTsK
QEAgLTEyOSwxMiArMTI5LDEyIEBAIHN0YXRpYyB2b2lkIGFkanVzdFNvdXJjZVJlY3RGb3JEb3du
U2FtcGwKIH0KICNlbmRpZgogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmIChkc3QuaXNF
bXB0eSgpIHx8IHNyYy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5hdGl2ZUlt
YWdlUHRyIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBOYXRpdmVJ
bWFnZVB0ciBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHVzZXIpOwogICAgIGlm
ICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTU1LDE3ICsxNTUsMTcgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogCiAgICAgRmxvYXRSZWN0IHNyY1Jl
Y3RMb2NhbChzcmMpOwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0g
ICAgYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmNSZWN0TG9jYWwsIHNpemUoKSwg
aW1hZ2UtPnNpemUoKSk7CisgICAgYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmNS
ZWN0TG9jYWwsIHNpemUodXNlciksIGltYWdlLT5zaXplKCkpOwogI2VuZGlmCiAKLSAgICBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+YWN0aXZlUGFpbnRlcigpLT5kcmF3SW1hZ2UoaW1hZ2Us
IGRzdCwgc3JjUmVjdExvY2FsKTsKKyAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+YWN0
aXZlUGFpbnRlcigpLT5kcmF3SW1hZ2UodXNlciwgaW1hZ2UsIGRzdCwgc3JjUmVjdExvY2FsKTsK
ICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAKICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQogICAg
ICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmMs
Cit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihJbWFnZVVzZXIgdXNlciwgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybWF0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZHN0KQpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgSW1hZ2U6OmRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICBpZiAoZHN0LmlzRW1wdHkoKSB8fCBzcmMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSA9
IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2Ug
PSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKICAgICBpZiAoIWltYWdlKQogICAg
ICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCShyZXZpc2lvbiA5NjY5
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY3LDcgKzE1NjcsNyBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hCiAgICAgaWYgKGltYWdlLT5kYXRhKCkpCiAg
ICAgICAgIG5hdGl2ZUltYWdlID0gUUltYWdlOjpmcm9tRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVjaGFyKj4oaW1hZ2UtPmRhdGEoKS0+ZGF0YSgpKSwgaW1hZ2UtPmRhdGEoKS0+c2l6ZSgp
KS5jb252ZXJ0VG9Gb3JtYXQoUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgUVBpeG1hcCogbmF0aXZlUGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CisgICAgICAgIFFQaXhtYXAqIG5hdGl2ZVBpeG1hcCA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICAgICAgbmF0aXZlSW1hZ2UgPSBuYXRpdmVQaXht
YXAtPnRvSW1hZ2UoKS5jb252ZXJ0VG9Gb3JtYXQoUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKICAg
ICB9CiAgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjY4LDcgKzY2OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8K
ICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7CiAKICAgICBpZiAobV9zdGF0
ZS5maWxsUGF0dGVybikgewotICAgICAgICBRUGl4bWFwKiBpbWFnZSA9IG1fc3RhdGUuZmlsbFBh
dHRlcm4tPnRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAg
ICBRUGl4bWFwKiBpbWFnZSA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPnRpbGVJbWFnZSgpLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFk
b3dDb250ZXh0ID0gaGFzU2hhZG93KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywg
bm9ybWFsaXplZFJlY3QpIDogMDsKICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKICAgICAg
ICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0xheWVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIyNiw3ICsxMjI2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldENv
bnRlbnRzVG9JbWFnZQogICAgIG1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9
IEdyYXBoaWNzTGF5ZXJRdEltcGw6OkhUTUxDb250ZW50VHlwZTsKICAgICBHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwogICAgIGlmIChpbWFnZSkgewotICAgICAgICBR
UGl4bWFwKiBweG0gPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAg
ICAgUVBpeG1hcCogcHhtID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApOwog
ICAgICAgICBpZiAocHhtKSB7CiAgICAgICAgICAgICBtX2ltcGwtPm1fcGVuZGluZ0NvbnRlbnQu
cGl4bWFwID0gKnB4bTsKICAgICAgICAgICAgIG1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5jb250
ZW50VHlwZSA9IEdyYXBoaWNzTGF5ZXJRdEltcGw6OlBpeG1hcENvbnRlbnRUeXBlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZm
ZXJRdC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw5ICsxMzMs
OSBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgaWYgKGRl
c3RDb250ZXh0ID09IGNvbnRleHQoKSkgewogICAgICAgICAvLyBXZSdyZSBkcmF3aW5nIGludG8g
b3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3ZSBuZWVkIHRvIGNv
cHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCiAgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9
IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJ
bWFnZShjb3B5LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2Uo
MCwgY29weS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
LCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogICAgIH0gZWxzZQotICAgICAgICBkZXN0Q29udGV4dC0+
ZHJhd0ltYWdlKG1fZGF0YS5tX2ltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICAgICAgZGVzdENvbnRleHQt
PmRyYXdJbWFnZSgwLCBtX2RhdGEubV9pbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKIHZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LApAQCAtMTQ0LDE0ICsxNDQsMTQgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDbwogICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKICAgICAgICAgLy8g
V2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8g
d29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgogICAgICAgICBS
ZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAg
IGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAgICBjb3B5LT5k
cmF3UGF0dGVybigwLCBkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKICAgICB9IGVsc2UKLSAgICAgICAg
bV9kYXRhLm1faW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAg
ICBtX2RhdGEubV9pbWFnZS0+ZHJhd1BhdHRlcm4oMCwgZGVzdENvbnRleHQsIHNyY1JlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiB9
CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkgY29uc3QKIHsKLSAgICBRUGl4bWFwKiBuYXRpdmVJbWFn
ZSA9IG1fZGF0YS5tX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIFFQ
aXhtYXAqIG5hdGl2ZUltYWdlID0gbV9kYXRhLm1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKDApOwogICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAJ
KHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMCArMTAxLDEwIEBAIFBhc3NSZWZQ
dHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXMKICAgICByZXR1cm4gU3RpbGxJbWFnZTo6
Y3JlYXRlKGxvYWRSZXNvdXJjZVBpeG1hcChuYW1lKSk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAordm9pZCBJbWFnZTo6ZHJh
d1BhdHRlcm4oSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQog
ewotICAgIFFQaXhtYXAqIGZyYW1lUGl4bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKKyAgICBRUGl4bWFwKiBmcmFtZVBpeG1hcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KHVzZXIpOwogICAgIGlmICghZnJhbWVQaXhtYXApIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdv
bid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAKQEAgLTIwMSw3ICsyMDEs
NyBAQCB2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhCiB9CiAKIC8vIERy
YXdpbmcgUm91dGluZXMKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoSW1hZ2VV
c2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgUVJlY3RGIG5vcm1h
bGl6ZWREc3QgPSBkc3Qubm9ybWFsaXplZCgpOwpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBpZiAobm9ybWFsaXplZFNyYy5p
c0VtcHR5KCkgfHwgbm9ybWFsaXplZERzdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFFQaXhtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBR
UGl4bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHVzZXIpOwogICAgIGlm
ICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBRQnJ1c2gg
UGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNv
bnN0CiB7Ci0gICAgUVBpeG1hcCogcGl4bWFwID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7CisgICAgUVBpeG1hcCogcGl4bWFwID0gdGlsZUltYWdlKCktPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApOwogICAgIGlmICghcGl4bWFwKQogICAgICAgICByZXR1
cm4gUUJydXNoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1N0aWxsSW1hZ2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MiwxNyArNTIsMTcgQEAgU3RpbGxJbWFnZTo6flN0aWxsSW1hZ2UoKQogICAgICAg
ICBkZWxldGUgbV9waXhtYXA7CiB9CiAKLUludFNpemUgU3RpbGxJbWFnZTo6c2l6ZSgpIGNvbnN0
CitJbnRTaXplIFN0aWxsSW1hZ2U6OnNpemUoSW1hZ2VVc2VyKSBjb25zdAogewogICAgIHJldHVy
biBJbnRTaXplKG1fcGl4bWFwLT53aWR0aCgpLCBtX3BpeG1hcC0+aGVpZ2h0KCkpOwogfQogCi1O
YXRpdmVJbWFnZVB0ciBTdGlsbEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitO
YXRpdmVJbWFnZVB0ciBTdGlsbEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShJbWFn
ZVVzZXIpCiB7CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8TmF0aXZlSW1hZ2VQdHI+KG1fcGl4bWFw
KTsKIH0KIAotdm9pZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3QsCit2b2lkIFN0aWxsSW1hZ2U6OmRyYXcoSW1hZ2VVc2VyLCBHcmFw
aGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCkKIHsKICAgICBpZiAobV9waXhtYXAtPmlzTnVsbCgpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgJKHJldmlzaW9u
IDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFn
ZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFs
bCA9IHRydWUpIHsgUV9VTlVTRUQoZGVzdHJveUFsbCk7IH0KICAgICAgICAgdmlydHVhbCB1bnNp
Z25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgICAgICB2aXJ0dWFs
IEludFNpemUgc2l6ZSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Ip
OworICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZShJbWFnZVVzZXIpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKEltYWdl
VXNlcik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEltYWdlVXNlciwgR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKICAgICBw
cml2YXRlOgogICAgICAgICBTdGlsbEltYWdlKGNvbnN0IFFQaXhtYXAmIHBpeG1hcCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
NyArODYsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVRdDo6c2V0Q29udGVudHNUb0ltYWdlCiB7CiAg
ICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IFFQaXhtYXAqIHBpeG1h
cCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGNvbnN0IFFQaXht
YXAqIHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICBp
ZiAoIXBpeG1hcCkKICAgICAgICAgcmV0dXJuOwogICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHBp
eG1hcC0+c2l6ZSgpLCAhcGl4bWFwLT5oYXNBbHBoYUNoYW5uZWwoKSk7CkBAIC0yNTgsNyArMjU4
LDcgQEAgUGFzc093blB0cjxCR1JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gQgogCiB1aW50NjRf
dCB1aWRGb3JJbWFnZShJbWFnZSogaW1hZ2UpCiB7Ci0gICAgcmV0dXJuIGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpLT5zZXJpYWxOdW1iZXIoKTsKKyAgICByZXR1cm4gaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApLT5zZXJpYWxOdW1iZXIoKTsKIH0KICNlbmRp
ZgogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFw
SW1hZ2VTaW5nbGVGcmFtZVNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgJKHJldmlzaW9u
IDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJ
bWFnZVNpbmdsZUZyYW1lU2tpYS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgpIHsgcmV0dXJu
ICFtX25hdGl2ZUltYWdlLmJpdG1hcCgpLmlzT3BhcXVlKCk7IH0KIAotICAgIHZpcnR1YWwgSW50
U2l6ZSBzaXplKCkgY29uc3QKKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZShJbWFnZVVzZXIpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gSW50U2l6ZShtX25hdGl2ZUltYWdlLmJpdG1hcCgp
LndpZHRoKCksIG1fbmF0aXZlSW1hZ2UuYml0bWFwKCkuaGVpZ2h0KCkpOwogICAgIH0KQEAgLTY5
LDcgKzY5LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFdlIG9ubHkgaGF2ZSBhIHNpbmds
ZSBmcmFtZS4KLSAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKEltYWdlVXNlcikKICAgICB7CiAgICAgICAgIHJldHVybiAmbV9uYXRpdmVJbWFnZTsK
ICAgICB9CkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoSW1hZ2VVc2Vy
LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yKTsKIAogcHJpdmF0ZToKICAgICBOYXRpdmVJbWFnZVNraWEgbV9uYXRpdmVJbWFnZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
M0RTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEltYWdlRGF0YShJbWEKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gcGl4ZWxzOwotICAgIE5hdGl2ZUltYWdl
U2tpYSogc2tpYUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Cisg
ICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoMCk7CiAgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7
CiAgICAgYm9vbCBoYXNBbHBoYSA9IHNraWFJbWFnZSA/ICFza2lhSW1hZ2UtPmJpdG1hcCgpLmlz
T3BhcXVlKCkgOiB0cnVlOwogICAgIGlmICgoIXNraWFJbWFnZSB8fCBpZ25vcmVHYW1tYUFuZENv
bG9yUHJvZmlsZSB8fCAoaGFzQWxwaGEgJiYgIXByZW11bHRpcGx5QWxwaGEpKSAmJiBpbWFnZS0+
ZGF0YSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0lt
YWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYwLDE0ICsxNjAsMTQgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVy
YXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAgUmVmUHRyPEltYWdlPiBp
bWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoKm1fZGF0YS5tX3BsYXRm
b3JtQ29udGV4dC5iaXRtYXAoKSwgY29udGV4dCA9PSBtX2NvbnRleHQpOwotICAgIGNvbnRleHQt
PmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKDAsIGlt
YWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93
UXVhbGl0eVNjYWxlKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUo
Km1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRtYXAoKSwgY29udGV4dCA9PSBtX2NvbnRleHQp
OwotICAgIGltYWdlLT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgIGltYWdlLT5k
cmF3UGF0dGVybigwLCBjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VTa2lhLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCw3ICsy
ODgsNyBAQCBib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihJbWFnZVVzZXIgdXNlciwgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRS
ZWN0JiBmbG9hdFNyY1JlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCBu
b3JtU3JjUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsgLy8gbm90aGluZyB0byBkcmF3
CiAKLSAgICBOYXRpdmVJbWFnZVNraWEqIGJpdG1hcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgTmF0aXZlSW1hZ2VTa2lhKiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSh1c2VyKTsKICAgICBpZiAoIWJpdG1hcCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0z
OTEsNyArMzkxLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKIAog
ICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYSogZnJhbWUgPSBmcmFtZUF0SW5kZXgoMCk7CiAK
LSAgICBpZiAoZnJhbWUgJiYgc2l6ZSgpLndpZHRoKCkgPT0gMSAmJiBzaXplKCkuaGVpZ2h0KCkg
PT0gMSkgeworICAgIGlmIChmcmFtZSAmJiBzaXplKDApLndpZHRoKCkgPT0gMSAmJiBzaXplKDAp
LmhlaWdodCgpID09IDEpIHsKICAgICAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGZyYW1lLT5i
aXRtYXAoKSk7CiAgICAgICAgIGlmICghZnJhbWUtPmJpdG1hcCgpLmdldFBpeGVscygpKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNDAxLDcgKzQwMSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNo
ZWNrRm9yU29saWRDb2xvcigpCiAgICAgfQogfQogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAordm9pZCBCaXRt
YXBJbWFnZTo6ZHJhdyhJbWFnZVVzZXIgdXNlciwgR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcCkKIHsKICAgICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCkBAIC00MTIs
NyArNDEyLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAg
IC8vIGNhdXNpbmcgZmxpY2tlciBhbmQgd2FzdGluZyBDUFUuCiAgICAgc3RhcnRBbmltYXRpb24o
KTsKIAotICAgIE5hdGl2ZUltYWdlU2tpYSogYm0gPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOworICAgIE5hdGl2ZUltYWdlU2tpYSogYm0gPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSh1c2VyKTsKICAgICBpZiAoIWJtKQogICAgICAgICByZXR1cm47ICAvLyBJdCdzIHRvbyBlYXJs
eSBhbmQgd2UgZG9uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAKQEAgLTQzNCw3ICs0MzQsNyBAQCB2
b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAKIC8vIEZJWE1FOiBUaGVz
ZSBzaG91bGQgZ28gaW50byBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5jcHAKIAotdm9pZCBC
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsCit2
b2lkIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpkcmF3KEltYWdlVXNlciwgR3JhcGhpY3ND
b250ZXh0KiBjdHh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcAko
cmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BhdHRlcm5Ta2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBQbGF0Zm9y
bVBhdHRlcm5QdHIgUGF0dGVybjo6cGxhdGZvcm1QYXR0CiAgICAgLy8gYW5kIGV4cGFuZGVkIHNj
YWxlIGFuZCBza2V3IGluOgogICAgIC8vIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9wc2Vy
dmVycy1ncmFkLTA2LWIuc3ZnCiAKLSAgICBjb25zdCBOYXRpdmVJbWFnZVNraWEqIGltYWdlID0g
bV90aWxlSW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgY29uc3QgTmF0
aXZlSW1hZ2VTa2lhKiBpbWFnZSA9IG1fdGlsZUltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgwKTsKICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgYml0bWFwLCByZXR1cm4gYSB0cmFu
c3BhcmVudCBzaGFkZXIuCiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgbV9wYXR0ZXJuID0gbmV3
IFNrQ29sb3JTaGFkZXIoU2tDb2xvclNldEFSR0IoMCwgMCwgMCwgMCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlck5vZGUuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250
ZW50KFRlCiAgICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkQ29udGVudFJlY3QoY29udGVudFJl
Y3QpOwogICAgICAgICAgICAgc2NhbGVkQ29udGVudFJlY3Quc2NhbGUoMS4wIC8gbV9zdGF0ZS5j
b250ZW50U2NhbGUpOwogICAgICAgICAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5
cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmRy
YXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBJbnRQb2ludCgwLCAwKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoMCwg
bV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9p
bnQoMCwgMCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGxheWVyLT5wYWlu
dEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZENv
bnRlbnRSZWN0KSk7CiAgICAgICAgICAgICB0ZXh0dXJlLT5lbmRQYWludCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJOb2RlLmgJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIwNiw3ICsyMDYsNyBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRTaXplIGNvbnRlbnRTaXpl
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRU
eXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUgJiYgbV9jdXJyZW50Q29udGVudC5pbWFnZSA/
IG1fY3VycmVudENvbnRlbnQuaW1hZ2UtPnNpemUoKSA6IG1fc2l6ZTsKKyAgICAgICAgcmV0dXJu
IG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSAm
JiBtX2N1cnJlbnRDb250ZW50LmltYWdlID8gbV9jdXJyZW50Q29udGVudC5pbWFnZS0+c2l6ZSgw
KSA6IG1fc2l6ZTsKICAgICB9CiAgICAgc3RydWN0IFRpbGUgewogICAgICAgICBGbG9hdFJlY3Qg
cmVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNH
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VDR1dpbi5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwx
MSArNzQsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTQogICAK
ICAgICBHcmFwaGljc0NvbnRleHQgZ2MoY2dDb250ZXh0KTsKIAotICAgIEludFNpemUgaW1hZ2VT
aXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1h
cEltYWdlOjpzaXplKDApOwogICAgIGlmIChzaXplKQotICAgICAgICBkcmF3RnJhbWVNYXRjaGlu
Z1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBi
bXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENv
bXBvc2l0ZUNvcHkpOworICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoMCwgJmdj
LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0
KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOwog
ICAgIGVsc2UKLSAgICAgICAgZHJhdygmZ2MsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJbmZv
LmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VT
aXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENv
bXBvc2l0ZUNvcHkpOworICAgICAgICBkcmF3KDAsICZnYywgRmxvYXRSZWN0KDAuMGYsIDAuMGYs
IGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEZsb2F0UmVjdCgwLjBmLCAwLjBm
LCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgQ29tcG9zaXRlQ29weSk7CiAKICAgICAvLyBEbyBjbGVhbnVwCiAgICAgQ0dDb250ZXh0
UmVsZWFzZShjZ0NvbnRleHQpOwpAQCAtODYsNyArODYsNyBAQCBib29sIEJpdG1hcEltYWdlOjpn
ZXRIQklUTUFQT2ZTaXplKEhCSVRNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQml0bWFw
SW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEltYWdlVXNlciB1c2Vy
LCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
SW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIHNpemVfdCBmcmFtZXMgPSBmcmFtZUNvdW50KCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZXM7ICsraSkgewpAQCAtOTQsMTUgKzk0
LDE1IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmMKICAgICAgICAg
aWYgKENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3JjU2l6
ZS5oZWlnaHQoKSkgJiYgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSA9PSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNyY1NpemUud2lkdGgoKSkpIHsKICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50RnJhbWUg
PSBtX2N1cnJlbnRGcmFtZTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lID0gaTsKLSAgICAg
ICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIHNyY1NpemUu
d2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3Ap
OworICAgICAgICAgICAgZHJhdyh1c2VyLCBjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4wZiwg
MC4wZiwgc3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdodCgpKSwgc3R5bGVDb2xvclNwYWNl
LCBjb21wb3NpdGVPcCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFt
ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vIGlt
YWdlIG9mIHRoZSBjb3JyZWN0IHNpemUgd2FzIGZvdW5kLCBmYWxsYmFjayB0byBkcmF3aW5nIHRo
ZSBjdXJyZW50IGZyYW1lCi0gICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6
ZSgpOwotICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBv
c2l0ZU9wKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKHVzZXIp
OworICAgIGRyYXcodXNlciwgY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGlt
YWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBzdHlsZUNvbG9yU3BhY2UsIGNv
bXBvc2l0ZU9wKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNw
cAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgUGFz
c1JlZlB0cjxCaXRtYXBJbWFnZT4gQml0bWFwSW1hZ2U6OmNyZQogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQml0bWFwSW1hZ2UoaW1hZ2UpKTsKIH0KIAotYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJ
VE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgTFBTSVpFIHNpemUpCitib29sIEJpdG1hcEltYWdlOjpn
ZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1wbiwgTFBTSVpFIHNpemUpCiB7CiAgICAgQVNTRVJU
KGJtcCk7CiAKQEAgLTgwLDExICs4MCwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQ
T2ZTaXplKEhCSVRNCiAKICAgICBHcmFwaGljc0NvbnRleHQgZ2ModGFyZ2V0UmVmKTsKIAotICAg
IEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKKyAgICBJbnRTaXplIGlt
YWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKDApOwogICAgIGlmIChzaXplKQotICAgICAgICBk
cmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1w
SW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1Nv
dXJjZVNpemUoMCwgJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBi
bXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENv
bXBvc2l0ZUNvcHkpOwogICAgIGVsc2UKLSAgICAgICAgZHJhdygmZ2MsIEZsb2F0UmVjdCgwLjBm
LCAwLjBmLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMC4w
ZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBkcmF3KDAsICZnYywgRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEZsb2F0
UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwg
Q29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CiAKICAgICAvLyBEbyBjbGVhbnVw
CiAgICAgY2Fpcm9fZGVzdHJveSh0YXJnZXRSZWYpOwpAQCAtOTIsNyArOTIsNyBAQCBib29sIEJp
dG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3Jj
U2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKElt
YWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIHNpemVfdCBmcmFtZXMgPSBm
cmFtZUNvdW50KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZXM7ICsraSkgewpA
QCAtMTAwLDE1ICsxMDAsMTUgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdT
b3VyYwogICAgICAgICBpZiAoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGltYWdlKSA9
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNyY1NpemUuaGVpZ2h0KCkpICYmIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNyY1NpemUud2lk
dGgoKSkpIHsKICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFt
ZTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lID0gaTsKLSAgICAgICAgICAgIGRyYXcoY3R4
dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIHNyY1NpemUud2lkdGgoKSwgc3JjU2l6
ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGNvbXBvc2l0ZU9wKTsKKyAgICAgICAg
ICAgIGRyYXcodXNlciwgY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIHNyY1Np
emUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGNvbXBv
c2l0ZU9wKTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTm8gaW1hZ2Ugb2Yg
dGhlIGNvcnJlY3Qgc2l6ZSB3YXMgZm91bmQsIGZhbGxiYWNrIHRvIGRyYXdpbmcgdGhlIGN1cnJl
bnQgZnJhbWUKLSAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7Ci0g
ICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndp
ZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGNvbXBvc2l0
ZU9wKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKHVzZXIpOwor
ICAgIGRyYXcodXNlciwgY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBj
b21wb3NpdGVPcCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVm
ZmVyV2luQ0UuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw3ICs2MCw3IEBAIHZvaWQgQnVmZmVyZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQKIHZv
aWQgQnVmZmVyZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBtX2RhdGEtPm1fYml0bWFwLT5kcmF3
UGF0dGVybihjdHh0LCB0aWxlUmVjdEluLCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVD
b2xvclNwYWNlLCBvcCwgZGVzdFJlY3QsIHNpemUoKSk7CisgICAgbV9kYXRhLT5tX2JpdG1hcC0+
ZHJhd1BhdHRlcm4oMCwgY3R4dCwgdGlsZVJlY3RJbiwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0LCBzaXplKCkpOwogfQogCiBJbWFnZUJ1ZmZl
ckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMTEzLDcgKzEx
Myw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAg
ICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AgLCBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSkKIHsKICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZShDb3B5QmFj
a2luZ1N0b3JlKTsKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VDb3B5LmdldCgpLCBzdHls
ZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsK
KyAgICBjb250ZXh0LT5kcmF3SW1hZ2UoMCwgaW1hZ2VDb3B5LmdldCgpLCBzdHlsZUNvbG9yU3Bh
Y2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKIH0KIAogdm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdl
V2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ltYWdlV2luQ0UuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NiwxMSArNzYsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklU
TQogICAgIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKGhkYy5nZXQoKSk7CiAKLSAgICAg
ICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOworICAgICAgICBJbnRT
aXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKDApOwogICAgICAgICBpZiAoc2l6ZSkK
LSAgICAgICAgICAgIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZSgmZ2MsIEZsb2F0UmVjdCgw
LCAwLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBJbnRTaXplKCpzaXplKSwg
Q29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgICAgICBkcmF3RnJh
bWVNYXRjaGluZ1NvdXJjZVNpemUoMCwgJmdjLCBGbG9hdFJlY3QoMCwgMCwgYm1wSW5mby5ibVdp
ZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIENvbXBvc2l0ZUNvcHkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3KCZnYywg
RmxvYXRSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEZsb2F0
UmVjdCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgICAgICBkcmF3KDAsICZnYywg
RmxvYXRSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEZsb2F0
UmVjdCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CiAgICAgfQogCiAgICAgU2VsZWN0T2JqZWN0
KGhkYy5nZXQoKSwgaE9sZEJtcCk7CkBAIC04OCw3ICs4OCw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6
OmdldEhCSVRNQVBPZlNpemUoSEJJVE0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2
b2lkIEJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoSW1hZ2VVc2VyIHVz
ZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgaW50IGZyYW1lcyA9IGZyYW1lQ291bnQoKTsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7CkBAIC05OCwxNyArOTgsMTcg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyYwogCiAgICAgICAgIHNp
emVfdCBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFtZTsKICAgICAgICAgbV9jdXJyZW50RnJh
bWUgPSBpOwotICAgICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLCAwLCBzcmNT
aXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0
ZU9wKTsKKyAgICAgICAgZHJhdyh1c2VyLCBjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMCwgMCwg
c3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdodCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21w
b3NpdGVPcCk7CiAgICAgICAgIG1fY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gTm8gaW1hZ2Ugb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3
YXMgZm91bmQsIGZhbGxiYWNrIHRvIGRyYXdpbmcgdGhlIGN1cnJlbnQgZnJhbWUKLSAgICBJbnRT
aXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7Ci0gICAgZHJhdyhjdHh0LCBkc3RS
ZWN0LCBGbG9hdFJlY3QoMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQo
KSksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOworICAgIEludFNpemUgaW1hZ2VTaXpl
ID0gQml0bWFwSW1hZ2U6OnNpemUodXNlcik7CisgICAgZHJhdyh1c2VyLCBjdHh0LCBkc3RSZWN0
LCBGbG9hdFJlY3QoMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSks
IHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3RJbiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhJbWFnZVVz
ZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3RJbiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMzLDE2ICsxMzMsMTYgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiB9CiAK
LXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LAordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEltYWdlVXNlciB1c2Vy
LCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAg
ICBSZWZQdHI8U2hhcmVkQml0bWFwPiBibXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OworICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJtcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKHVzZXIpOwogICAgIGlmICghYm1wKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3gu
Y3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0ltYWdlQnVmZmVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTQgKzEwNCwxNCBA
QCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgICAgICAg
ICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkK
IHsKICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0
b3JlKTsKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VDb3B5LmdldCgpLCBzdHlsZUNvbG9y
U3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICBj
b250ZXh0LT5kcmF3SW1hZ2UoMCwgaW1hZ2VDb3B5LmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKIH0KIAogdm9pZCBJbWFn
ZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAgaW1hZ2VDb3B5LT5kcmF3UGF0dGVybihjb250
ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBv
cCwgZGVzdFJlY3QpOworICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oMCwgY29udGV4dCwgc3Jj
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RS
ZWN0KTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNl
KGNvbnN0IFZlY3RvcjxpbnQ+JikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0ltYWdlV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw3ICs4Nyw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEoKQogCiAvLyBE
cmF3aW5nIFJvdXRpbmVzCiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc3LDE0ICsxNzcsMTQgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICBvYnNlcnZlci0+ZGlkRHJhdyh0
aGlzKTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCit2b2lkIEltYWdlOjpkcmF3UGF0
dGVybihJbWFnZVVzZXIgdXNlciwgR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QpCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgd3hHQ0RDKiBjb250
ZXh0ID0gKHd4R0NEQyopY3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgd3hHcmFwaGljc0Jp
dG1hcCogYml0bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICB3eEdyYXBo
aWNzQml0bWFwKiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKICNl
bHNlCiAgICAgd3hXaW5kb3dEQyogY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwot
ICAgIHd4Qml0bWFwKiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAg
IHd4Qml0bWFwKiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKICNl
bmRpZgogCiAgICAgaWYgKCFiaXRtYXApIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhh
dmUgYW4gaW1hZ2UgeWV0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJ
bWFnZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ry
YWdJbWFnZUd0ay5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAg
RHJhZ0ltYWdlUmVmIGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbgogCiBEcmFnSW1hZ2VSZWYg
Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSkKIHsKLSAgICByZXR1cm4gY2Fp
cm9fc3VyZmFjZV9yZWZlcmVuY2UoaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkp
OworICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoMCkpOwogfQogCiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNv
bkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3
ICs4Nyw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBkaXNzb2x2ZURyYWdJbWFnZVRvRnIKIFJldGFp
blB0cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlKQogewog
ICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UoQWRvcHROUywgW2ltYWdlLT5nZXROU0lt
YWdlKCkgY29weV0pOwotICAgIFtkcmFnSW1hZ2UuZ2V0KCkgc2V0U2l6ZTooTlNTaXplKShpbWFn
ZS0+c2l6ZSgpKV07CisgICAgW2RyYWdJbWFnZS5nZXQoKSBzZXRTaXplOihOU1NpemUpKGltYWdl
LT5zaXplKDApKV07CiAgICAgcmV0dXJuIGRyYWdJbWFnZTsKIH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAJKHJldmlzaW9uIDk2Njk4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgRHJhZ0ltYWdlUmVmIENsaXBib2FyZFF0OjpjcmVhdGVE
cmFnSW1hZwogICAgIGlmICghbV9kcmFnSW1hZ2UpCiAgICAgICAgIHJldHVybiAwOwogICAgIGRy
YWdMb2MgPSBtX2RyYWdMb2M7Ci0gICAgcmV0dXJuIG1fZHJhZ0ltYWdlLT5pbWFnZSgpLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBtX2RyYWdJbWFnZS0+aW1hZ2Uo
KS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiB9CiAKIApAQCAtMjg0LDcgKzI4NCw3
IEBAIHZvaWQgQ2xpcGJvYXJkUXQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWEKICAgICBDYWNoZWRJ
bWFnZSogY2FjaGVkSW1hZ2UgPSBnZXRDYWNoZWRJbWFnZShlbGVtZW50KTsKICAgICBpZiAoIWNh
Y2hlZEltYWdlIHx8ICFjYWNoZWRJbWFnZS0+aW1hZ2UoKSB8fCAhY2FjaGVkSW1hZ2UtPmlzTG9h
ZGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBRUGl4bWFwKiBwaXhtYXAgPSBjYWNoZWRJbWFn
ZS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBRUGl4bWFwKiBw
aXhtYXAgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
ZWxlbWVudC0+cmVuZGVyZXIoKSk7CiAgICAgaWYgKHBpeG1hcCkKICAgICAgICAgbV93cml0YWJs
ZURhdGEtPnNldEltYWdlRGF0YSgqcGl4bWFwKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvQ3Vyc29yUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L0N1cnNvclF0LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDEwICs3NSwxMCBA
QCBDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgCiAjaWZuZGVmIFFUX05P
X0NVUlNPUgogc3RhdGljIFFDdXJzb3IqIGNyZWF0ZUN1c3RvbUN1cnNvcihJbWFnZSogaW1hZ2Us
IGNvbnN0IEludFBvaW50JiBob3RTcG90KQogewotICAgIGlmICghaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkpCisgICAgaWYgKCFpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoMCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIEludFBvaW50IGVmZmVjdGl2ZUhvdFNw
b3QgPSBkZXRlcm1pbmVIb3RTcG90KGltYWdlLCBob3RTcG90KTsKLSAgICByZXR1cm4gbmV3IFFD
dXJzb3IoKihpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSksIGVmZmVjdGl2ZUhv
dFNwb3QueCgpLCBlZmZlY3RpdmVIb3RTcG90LnkoKSk7CisgICAgcmV0dXJuIG5ldyBRQ3Vyc29y
KCooaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApKSwgZWZmZWN0aXZlSG90U3Bv
dC54KCksIGVmZmVjdGl2ZUhvdFNwb3QueSgpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsMTAgKzYzLDEwIEBAIERyYWdJbWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJh
Y3Rpb24KIAogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1h
Z2UpCiB7Ci0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCkpCisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKDApKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBuZXcgUVBpeG1hcCgqaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBuZXcgUVBpeG1h
cCgqaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApKTsKIH0KIAogRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSopCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAJKHJldmlzaW9u
IDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJ
bWFnZShOb2RlKiBub2RlLCAKICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2Uo
KTsKICAgICBBU1NFUlQoaW1hZ2UpOwogCi0gICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKG5vZGUtPnJlbmRlcmVyKCkpOwogICAgIGlmICgh
cGl4bWFwKQogICAgICAgICByZXR1cm47CiAgICAgUUFwcGxpY2F0aW9uOjpjbGlwYm9hcmQoKS0+
c2V0UGl4bWFwKCpwaXhtYXAsIFFDbGlwYm9hcmQ6OkNsaXBib2FyZCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDYWlyb1dpbi5jcHAJKHJldmlz
aW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJv
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIERyYWdJbWFnZVJlZiBj
cmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW0KICAgICAgICAgZ290byBleGl0OwogCiAgICAgUGxh
dGZvcm1Db250ZXh0Q2Fpcm8qIGRyYXdDb250ZXh0ID0gMDsKLSAgICBoYm1wID0gYWxsb2NJbWFn
ZSh3b3JraW5nREMsIGltZy0+c2l6ZSgpLCAmZHJhd0NvbnRleHQpOworICAgIGhibXAgPSBhbGxv
Y0ltYWdlKHdvcmtpbmdEQywgaW1nLT5zaXplKDApLCAmZHJhd0NvbnRleHQpOwogICAgIGlmICgh
aGJtcCkKICAgICAgICAgZ290byBleGl0OwogCkBAIC0xNzIsNyArMTcyLDcgQEAgRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbQogICAgIGNhaXJvX3NldF9zb3VyY2Vfcmdi
KGNyLCAxLjAsIDAuMCwgMS4wKTsKICAgICBjYWlyb19maWxsX3ByZXNlcnZlKGNyKTsKIAotICAg
IGNhaXJvX3N1cmZhY2VfdCogc3JjSW1hZ2UgPSBpbWctPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzcmNJbWFnZSA9IGltZy0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoMCk7CiAKICAgICAvLyBEcmF3IHRoZSBpbWFnZS4KICAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY3IsIHNyY0ltYWdlLCAwLjAsIDAuMCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCShyZXZpc2lvbiA5NjY5
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI1LDE2ICsyMjUsMTYgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUlt
YWdlKE5vZGUqIG5vZGUsIAogICAgIEhEQyBkYyA9IEdldERDKDApOwogICAgIEhEQyBjb21wYXRp
YmxlREMgPSBDcmVhdGVDb21wYXRpYmxlREMoMCk7CiAgICAgSERDIHNvdXJjZURDID0gQ3JlYXRl
Q29tcGF0aWJsZURDKDApOwotICAgIE93blB0cjxIQklUTUFQPiByZXN1bHRCaXRtYXAgPSBhZG9w
dFB0cihDcmVhdGVDb21wYXRpYmxlQml0bWFwKGRjLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhl
aWdodCgpKSk7CisgICAgT3duUHRyPEhCSVRNQVA+IHJlc3VsdEJpdG1hcCA9IGFkb3B0UHRyKENy
ZWF0ZUNvbXBhdGlibGVCaXRtYXAoZGMsIGltYWdlLT53aWR0aChyZW5kZXJlciksIGltYWdlLT5o
ZWlnaHQocmVuZGVyZXIpKSk7CiAgICAgSEdESU9CSiBvbGRCaXRtYXAgPSBTZWxlY3RPYmplY3Qo
Y29tcGF0aWJsZURDLCByZXN1bHRCaXRtYXAuZ2V0KCkpOwogCi0gICAgQml0bWFwSW5mbyBibUlu
Zm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoaW1hZ2UtPnNpemUoKSk7CisgICAgQml0bWFwSW5mbyBi
bUluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoaW1hZ2UtPnNpemUocmVuZGVyZXIpKTsKIAogICAg
IEhCSVRNQVAgY29yZUJpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24oZGMsICZibUluZm8sIERJQl9S
R0JfQ09MT1JTLCAwLCAwLCAwKTsKICAgICBIR0RJT0JKIG9sZFNvdXJjZSA9IFNlbGVjdE9iamVj
dChzb3VyY2VEQywgY29yZUJpdG1hcCk7CiAgICAgaW1hZ2UtPmdldEhCSVRNQVAoY29yZUJpdG1h
cCk7CiAKLSAgICBCaXRCbHQoY29tcGF0aWJsZURDLCAwLCAwLCBpbWFnZS0+d2lkdGgoKSwgaW1h
Z2UtPmhlaWdodCgpLCBzb3VyY2VEQywgMCwgMCwgU1JDQ09QWSk7CisgICAgQml0Qmx0KGNvbXBh
dGlibGVEQywgMCwgMCwgaW1hZ2UtPndpZHRoKHJlbmRlcmVyKSwgaW1hZ2UtPmhlaWdodChyZW5k
ZXJlciksIHNvdXJjZURDLCAwLCAwLCBTUkNDT1BZKTsKIAogICAgIFNlbGVjdE9iamVjdChzb3Vy
Y2VEQywgb2xkU291cmNlKTsKICAgICBEZWxldGVPYmplY3QoY29yZUJpdG1hcCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9QYXN0ZWJvYXJkV2luQ0UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL1Bhc3RlYm9hcmRXaW5DRS5jcHAJ
KHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvUGFzdGVi
b2FyZFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgUGFz
dGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKIAogICAgIGNsZWFyKCk7CiAKLSAgICBS
ZWZQdHI8U2hhcmVkQml0bWFwPiBzb3VyY2VCbXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKKyAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBzb3VyY2VCbXAgPSBpbWFnZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUocmVuZGVyZXIpOwogICAgIGlmICghc291cmNlQm1w
KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMyLDcgKzEyMzIsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OnBhaW50TWlzc2luZ1BsdWdpbkljb24oCiAgICAgaWYgKCFudWxsUGx1Z2luSW1hZ2UpCiAg
ICAgICAgIG51bGxQbHVnaW5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibnVs
bFBsdWdpbiIpOwogCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoZnJhbWVSZWN0KCkueCgpLCBmcmFt
ZVJlY3QoKS55KCksIG51bGxQbHVnaW5JbWFnZS0+d2lkdGgoKSwgbnVsbFBsdWdpbkltYWdlLT5o
ZWlnaHQoKSk7CisgICAgSW50UmVjdCBpbWFnZVJlY3QoZnJhbWVSZWN0KCkueCgpLCBmcmFtZVJl
Y3QoKS55KCksIG51bGxQbHVnaW5JbWFnZS0+d2lkdGgoMCksIG51bGxQbHVnaW5JbWFnZS0+aGVp
Z2h0KDApKTsKIAogICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lUmVjdCgpLndpZHRoKCkgLSBpbWFn
ZVJlY3Qud2lkdGgoKSkgLyAyOwogICAgIGludCB5T2Zmc2V0ID0gKGZyYW1lUmVjdCgpLmhlaWdo
dCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7CkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCB2b2lk
IFBsdWdpblZpZXc6OnBhaW50TWlzc2luZ1BsdWdpbkljb24oCiAKICAgICBjb250ZXh0LT5zYXZl
KCk7CiAgICAgY29udGV4dC0+Y2xpcCh3aW5kb3dDbGlwUmVjdCgpKTsKLSAgICBjb250ZXh0LT5k
cmF3SW1hZ2UobnVsbFBsdWdpbkltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBpbWFn
ZVJlY3QubG9jYXRpb24oKSk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKDAsIG51bGxQbHVnaW5J
bWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOwog
ICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6
OnNob3VsZFBhaW50CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRvIHVzZSB0aGUgdW56b29tZWQg
aW1hZ2Ugc2l6ZSwgc2luY2UgaWYgYSBmdWxsIHBhZ2Ugem9vbSBpcyBpbiBlZmZlY3QsIHRoZSBp
bWFnZQogICAgIC8vIGlzIGFjdHVhbGx5IGJlaW5nIHNjYWxlZC4KLSAgICBJbnRTaXplIGltYWdl
U2l6ZShpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpKTsKKyAgICBJbnRTaXplIGltYWdl
U2l6ZShpbWFnZS0+d2lkdGgob2JqZWN0KSwgaW1hZ2UtPmhlaWdodChvYmplY3QpKTsKIAogICAg
IC8vIExvb2sgb3Vyc2VsdmVzIHVwIGluIHRoZSBoYXNodGFibGVzLgogICAgIE9iamVjdExheWVy
U2l6ZU1hcDo6aXRlcmF0b3IgaSA9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmZpbmQob2JqZWN0KTsK
QEAgLTE3MSw3ICsxNzEsNyBAQCBib29sIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OnNob3VsZFBh
aW50CiAKICAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIGhhc2ggc2NhbGVkIGltYWdlcyB0aGF0
IGFsd2F5cyB1c2UgbG93IHF1YWxpdHkgbW9kZSB3aGVuIHRoZSBwYWdlIGRlbWFuZHMgaXQuIFRo
aXMgaXMgdGhlIGlDaGF0IGNhc2UuCiAgICAgaWYgKG9iamVjdC0+ZG9jdW1lbnQoKS0+cGFnZSgp
LT5pbkxvd1F1YWxpdHlJbWFnZUludGVycG9sYXRpb25Nb2RlKCkpIHsKLSAgICAgICAgZG91Ymxl
IHRvdGFsUGl4ZWxzID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihpbWFnZS0+d2lkdGgoKSkgKiBzdGF0
aWNfY2FzdDxkb3VibGU+KGltYWdlLT5oZWlnaHQoKSk7CisgICAgICAgIGRvdWJsZSB0b3RhbFBp
eGVscyA9IHN0YXRpY19jYXN0PGRvdWJsZT4oaW1hZ2UtPndpZHRoKG9iamVjdCkpICogc3RhdGlj
X2Nhc3Q8ZG91YmxlPihpbWFnZS0+aGVpZ2h0KG9iamVjdCkpOwogICAgICAgICBpZiAodG90YWxQ
aXhlbHMgPiBjSW50ZXJwb2xhdGlvbkN1dG9mZikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KQEAgLTc5NCw3ICs3OTQsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEZpbGxMYXllCiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudEZvckJhY2tncm91bmRJ
bWFnZSA9IGJhY2tncm91bmRPYmplY3QgPyBiYWNrZ3JvdW5kT2JqZWN0IDogdGhpczsKICAgICAg
ICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBiZ0ltYWdlLT5pbWFnZShjbGllbnRGb3JCYWNr
Z3JvdW5kSW1hZ2UsIGdlb21ldHJ5LnRpbGVTaXplKCkpOwogICAgICAgICAgICAgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdl
LmdldCgpLCBiZ0xheWVyLCBnZW9tZXRyeS50aWxlU2l6ZSgpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIGdl
b21ldHJ5LmRlc3RSZWN0KCksIGdlb21ldHJ5LnJlbGF0aXZlUGhhc2UoKSwgZ2VvbWV0cnkudGls
ZVNpemUoKSwgCisgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGlsZWRJbWFnZSh0aGlzLCBpbWFn
ZS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBnZW9tZXRyeS5kZXN0UmVjdCgpLCBnZW9t
ZXRyeS5yZWxhdGl2ZVBoYXNlKCksIGdlb21ldHJ5LnRpbGVTaXplKCksIAogICAgICAgICAgICAg
ICAgIGNvbXBvc2l0ZU9wLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7CiAgICAgICAgIH0KICAgICB9
CkBAIC04MDMsNyArODAzLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxs
TGF5ZQogTGF5b3V0U2l6ZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlRmlsbFRpbGVT
aXplKGNvbnN0IEZpbGxMYXllciogZmlsbExheWVyLCBMYXlvdXRTaXplIHBvc2l0aW9uaW5nQXJl
YVNpemUpIGNvbnN0CiB7CiAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBmaWxsTGF5ZXItPmltYWdl
KCk7Ci0gICAgaW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShwb3NpdGlvbmluZ0FyZWFTaXpl
KTsgLy8gVXNlIHRoZSBib3ggZXN0YWJsaXNoZWQgYnkgYmFja2dyb3VuZC1vcmlnaW4uCisgICAg
aW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZSh0aGlzLCBwb3NpdGlvbmluZ0FyZWFTaXplKTsg
Ly8gVXNlIHRoZSBib3ggZXN0YWJsaXNoZWQgYnkgYmFja2dyb3VuZC1vcmlnaW4uCiAKICAgICBF
RmlsbFNpemVUeXBlIHR5cGUgPSBmaWxsTGF5ZXItPnNpemUoKS50eXBlOwogCkBAIC0xMDA1LDcg
KzEwMDUsNyBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjCiAgICAg
TGF5b3V0VW5pdCByaWdodFdpdGhPdXRzZXQgPSByZWN0Lm1heFgoKSArIHJpZ2h0T3V0c2V0Owog
ICAgIExheW91dFJlY3QgYm9yZGVySW1hZ2VSZWN0ID0gTGF5b3V0UmVjdChsZWZ0V2l0aE91dHNl
dCwgdG9wV2l0aE91dHNldCwgcmlnaHRXaXRoT3V0c2V0IC0gbGVmdFdpdGhPdXRzZXQsIGJvdHRv
bVdpdGhPdXRzZXQgLSB0b3BXaXRoT3V0c2V0KTsKIAotICAgIHN0eWxlSW1hZ2UtPnNldEltYWdl
Q29udGFpbmVyU2l6ZShib3JkZXJJbWFnZVJlY3Quc2l6ZSgpKTsKKyAgICBzdHlsZUltYWdlLT5z
ZXRJbWFnZUNvbnRhaW5lclNpemUodGhpcywgYm9yZGVySW1hZ2VSZWN0LnNpemUoKSk7CiAgICAg
TGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBzdHlsZUltYWdlLT5pbWFnZVNpemUodGhpcywgMS4wZik7
CiAgICAgTGF5b3V0VW5pdCBpbWFnZVdpZHRoID0gaW1hZ2VTaXplLndpZHRoKCk7CiAgICAgTGF5
b3V0VW5pdCBpbWFnZUhlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQoKTsKQEAgLTEwNjQsMTggKzEw
NjQsMTggQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllYwogICAgICAg
ICAvLyBUaGUgdG9wIGxlZnQgY29ybmVyIHJlY3QgaXMgKHR4LCB0eSwgbGVmdFdpZHRoLCB0b3BX
aWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBp
cyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzICgwLCAwLCBsZWZ0U2xpY2UsIHRvcFNs
aWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdl
UmVjdC5sb2NhdGlvbigpLCBMYXlvdXRTaXplKGxlZnRXaWR0aCwgdG9wV2lkdGgpKSwKKyAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKHRoaXMsIGltYWdlLmdldCgpLCBjb2xv
clNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC5sb2NhdGlvbigpLCBMYXlvdXRTaXpl
KGxlZnRXaWR0aCwgdG9wV2lkdGgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIExheW91dFJlY3QoMCwgMCwgbGVmdFNsaWNlLCB0b3BTbGljZSksIG9wKTsKIAogICAg
ICAgICAvLyBUaGUgYm90dG9tIGxlZnQgY29ybmVyIHJlY3QgaXMgKHR4LCB0eSArIGggLSBib3R0
b21XaWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8g
dXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyAoMCwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGlj
ZSwgbGVmdFNsaWNlLCBib3RvbVNsaWNlKQogICAgICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNl
LCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlckltYWdlUmVjdC5tYXhZKCkg
LSBib3R0b21XaWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0aCksCisgICAgICAgICAgICBncmFw
aGljc0NvbnRleHQtPmRyYXdJbWFnZSh0aGlzLCBpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5
b3V0UmVjdChib3JkZXJJbWFnZVJlY3QueCgpLCBib3JkZXJJbWFnZVJlY3QubWF4WSgpIC0gYm90
dG9tV2lkdGgsIGxlZnRXaWR0aCwgYm90dG9tV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCgwLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNl
LCBsZWZ0U2xpY2UsIGJvdHRvbVNsaWNlKSwgb3ApOwogCiAgICAgICAgIC8vIFBhaW50IHRoZSBs
ZWZ0IGVkZ2UuCiAgICAgICAgIC8vIEhhdmUgdG8gc2NhbGUgYW5kIHRpbGUgaW50byB0aGUgYm9y
ZGVyIHJlY3QuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2Uu
Z2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSwgYm9yZGVy
SW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCBsZWZ0V2lkdGgsCisgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZHJhd1RpbGVkSW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91
dFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSwgYm9yZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRo
LCBsZWZ0V2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dGluYXRpb25IZWlnaHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IExheW91dFJlY3QoMCwgdG9wU2xpY2UsIGxlZnRTbGljZSwgc291cmNlSGVpZ2h0KSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUobGVmdFNpZGVTY2Fs
ZSwgbGVmdFNpZGVTY2FsZSksIEltYWdlOjpTdHJldGNoVGlsZSwgKEltYWdlOjpUaWxlUnVsZSl2
UnVsZSwgb3ApOwpAQCAtMTA4NiwxNyArMTA4NiwxNyBAQCBib29sIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludE5pbmVQaWVjCiAgICAgICAgIC8vIFRoZSB0b3AgcmlnaHQgY29ybmVyIHJlY3Qg
aXMgKHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5LCByaWdodFdpZHRoLCB0b3BXaWR0aCkKICAgICAg
ICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyBvYnRhaW5lZCBm
cm9tIG91ciBzbGljZSwgYW5kIGlzIChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgMCwgcmlnaHRT
bGljZSwgdG9wU2xpY2UpCiAgICAgICAgIGlmIChkcmF3VG9wKQotICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3Qo
Ym9yZGVySW1hZ2VSZWN0Lm1heFgoKSAtIHJpZ2h0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCks
IHJpZ2h0V2lkdGgsIHRvcFdpZHRoKSwKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJh
d0ltYWdlKHRoaXMsIGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlcklt
YWdlUmVjdC5tYXhYKCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpLCByaWdodFdp
ZHRoLCB0b3BXaWR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
YXlvdXRSZWN0KGltYWdlV2lkdGggLSByaWdodFNsaWNlLCAwLCByaWdodFNsaWNlLCB0b3BTbGlj
ZSksIG9wKTsKIAogICAgICAgICAvLyBUaGUgYm90dG9tIHJpZ2h0IGNvcm5lciByZWN0IGlzICh0
eCArIHcgLSByaWdodFdpZHRoLCB0eSArIGggLSBib3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90
dG9tV2lkdGgpCiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1h
Z2UgaXMgKGltYWdlV2lkdGggLSByaWdodFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNl
LCByaWdodFNsaWNlLCBib3R0b21TbGljZSkKICAgICAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFj
ZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVy
SW1hZ2VSZWN0Lm1heFkoKSAtIGJvdHRvbVdpZHRoLCByaWdodFdpZHRoLCBib3R0b21XaWR0aCks
CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZSh0aGlzLCBpbWFnZS5nZXQo
KSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRX
aWR0aCwgYm9yZGVySW1hZ2VSZWN0Lm1heFkoKSAtIGJvdHRvbVdpZHRoLCByaWdodFdpZHRoLCBi
b3R0b21XaWR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlv
dXRSZWN0KGltYWdlV2lkdGggLSByaWdodFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNl
LCByaWdodFNsaWNlLCBib3R0b21TbGljZSksIG9wKTsKIAogICAgICAgICAvLyBQYWludCB0aGUg
cmlnaHQgZWRnZS4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFn
ZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0g
cmlnaHRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCByaWdodFdpZHRoLAor
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKHRoaXMsIGltYWdlLmdldCgp
LCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC5tYXhYKCkgLSByaWdodFdp
ZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpICsgdG9wV2lkdGgsIHJpZ2h0V2lkdGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25IZWlnaHQpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFJlY3QoaW1hZ2VXaWR0
aCAtIHJpZ2h0U2xpY2UsIHRvcFNsaWNlLCByaWdodFNsaWNlLCBzb3VyY2VIZWlnaHQpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0U2l6ZShyaWdodFNpZGVT
Y2FsZSwgcmlnaHRTaWRlU2NhbGUpLApAQCAtMTEwNSwxMyArMTEwNSwxMyBAQCBib29sIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjCiAKICAgICAvLyBQYWludCB0aGUgdG9wIGVk
Z2UuCiAgICAgaWYgKGRyYXdUb3ApCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVk
SW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0
LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSwgZGVzdGluYXRpb25XaWR0aCwg
dG9wV2lkdGgpLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKHRoaXMs
IGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCkg
KyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCksIGRlc3RpbmF0aW9uV2lkdGgsIHRvcFdp
ZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0
KGxlZnRTbGljZSwgMCwgc291cmNlV2lkdGgsIHRvcFNsaWNlKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUodG9wU2lkZVNjYWxlLCB0b3BTaWRlU2Nh
bGUpLCAoSW1hZ2U6OlRpbGVSdWxlKWhSdWxlLCBJbWFnZTo6U3RyZXRjaFRpbGUsIG9wKTsKIAog
ICAgIC8vIFBhaW50IHRoZSBib3R0b20gZWRnZS4KICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFj
ZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QueCgpICsgbGVmdFdpZHRoLCBib3JkZXJJbWFn
ZVJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgsCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJh
d1RpbGVkSW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9y
ZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0Lm1heFkoKSAtIGJv
dHRvbVdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rp
bmF0aW9uV2lkdGgsIGJvdHRvbVdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRSZWN0KGxlZnRTbGljZSwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGlj
ZSwgc291cmNlV2lkdGgsIGJvdHRvbVNsaWNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGbG9hdFNpemUoYm90dG9tU2lkZVNjYWxlLCBib3R0b21TaWRlU2NhbGUp
LApAQCAtMTEzOSw3ICsxMTM5LDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRO
aW5lUGllYwogICAgICAgICBpZiAodlJ1bGUgPT0gU3RyZXRjaEltYWdlUnVsZSkKICAgICAgICAg
ICAgIG1pZGRsZVNjYWxlRmFjdG9yLnNldEhlaWdodChkZXN0aW5hdGlvbkhlaWdodCAvIHNvdXJj
ZUhlaWdodCk7CiAgICAgICAgIAotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZElt
YWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRy
YXdUaWxlZEltYWdlKHRoaXMsIGltYWdlLmdldCgpLCBjb2xvclNwYWNlLAogICAgICAgICAgICAg
TGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QueCgpICsgbGVmdFdpZHRoLCBib3JkZXJJbWFnZVJl
Y3QueSgpICsgdG9wV2lkdGgsIGRlc3RpbmF0aW9uV2lkdGgsIGRlc3RpbmF0aW9uSGVpZ2h0KSwK
ICAgICAgICAgICAgIExheW91dFJlY3QobGVmdFNsaWNlLCB0b3BTbGljZSwgc291cmNlV2lkdGgs
IHNvdXJjZUhlaWdodCksCiAgICAgICAgICAgICBtaWRkbGVTY2FsZUZhY3RvciwgKEltYWdlOjpU
aWxlUnVsZSloUnVsZSwgKEltYWdlOjpUaWxlUnVsZSl2UnVsZSwgb3ApOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDEwICs4OCwxMCBAQCBJbnRTaXplIFJlbmRlckltYWdlOjppbWFnZVNpemVGb3JFcnJvcihD
CiAgICAgaWYgKG5ld0ltYWdlLT53aWxsUGFpbnRCcm9rZW5JbWFnZSgpKSB7CiAgICAgICAgIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yID0gV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3IoZnJhbWUo
KSk7CiAgICAgICAgIHBhaXI8SW1hZ2UqLCBmbG9hdD4gYnJva2VuSW1hZ2VBbmRJbWFnZVNjYWxl
RmFjdG9yID0gbmV3SW1hZ2UtPmJyb2tlbkltYWdlKGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAg
ICAgaW1hZ2VTaXplID0gYnJva2VuSW1hZ2VBbmRJbWFnZVNjYWxlRmFjdG9yLmZpcnN0LT5zaXpl
KCk7CisgICAgICAgIGltYWdlU2l6ZSA9IGJyb2tlbkltYWdlQW5kSW1hZ2VTY2FsZUZhY3Rvci5m
aXJzdC0+c2l6ZSh0aGlzKTsKICAgICAgICAgaW1hZ2VTaXplLnNjYWxlKDEgLyBicm9rZW5JbWFn
ZUFuZEltYWdlU2NhbGVGYWN0b3Iuc2Vjb25kKTsKICAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2VT
aXplID0gbmV3SW1hZ2UtPmltYWdlKCktPnNpemUoKTsKKyAgICAgICAgaW1hZ2VTaXplID0gbmV3
SW1hZ2UtPmltYWdlKCktPnNpemUodGhpcyk7CiAKICAgICAvLyBpbWFnZVNpemUoKSByZXR1cm5z
IDAgZm9yIHRoZSBlcnJvciBpbWFnZS4gV2UgbmVlZCB0aGUgdHJ1ZSBzaXplIG9mIHRoZQogICAg
IC8vIGVycm9yIGltYWdlLCBzbyB3ZSBoYXZlIHRvIGdldCBpdCBieSBncmFiYmluZyBpbWFnZSgp
IGRpcmVjdGx5LgpAQCAtMjc2LDEyICsyNzYsMTIgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRS
ZXBsYWNlZChQYWludEluZgogCiAgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9p
bWFnZVJlc291cmNlLT5pbWFnZSgpOwogCi0gICAgICAgICAgICBpZiAobV9pbWFnZVJlc291cmNl
LT5lcnJvck9jY3VycmVkKCkgJiYgIWltYWdlLT5pc051bGwoKSAmJiB1c2FibGVXaWR0aCA+PSBp
bWFnZS0+d2lkdGgoKSAmJiB1c2FibGVIZWlnaHQgPj0gaW1hZ2UtPmhlaWdodCgpKSB7CisgICAg
ICAgICAgICBpZiAobV9pbWFnZVJlc291cmNlLT5lcnJvck9jY3VycmVkKCkgJiYgIWltYWdlLT5p
c051bGwoKSAmJiB1c2FibGVXaWR0aCA+PSBpbWFnZS0+d2lkdGgodGhpcykgJiYgdXNhYmxlSGVp
Z2h0ID49IGltYWdlLT5oZWlnaHQodGhpcykpIHsKICAgICAgICAgICAgICAgICBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yKGZyYW1lKCkpOwogICAg
ICAgICAgICAgICAgIC8vIENhbGwgYnJva2VuSW1hZ2UoKSBleHBsaWNpdGx5IHRvIGVuc3VyZSB3
ZSBnZXQgdGhlIGJyb2tlbiBpbWFnZSBpY29uIGF0IHRoZSBhcHByb3ByaWF0ZSByZXNvbHV0aW9u
LgogICAgICAgICAgICAgICAgIHBhaXI8SW1hZ2UqLCBmbG9hdD4gYnJva2VuSW1hZ2VBbmRJbWFn
ZVNjYWxlRmFjdG9yID0gbV9pbWFnZVJlc291cmNlLT5jYWNoZWRJbWFnZSgpLT5icm9rZW5JbWFn
ZShkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICAgICAgaW1hZ2UgPSBicm9rZW5JbWFn
ZUFuZEltYWdlU2NhbGVGYWN0b3IuZmlyc3Q7Ci0gICAgICAgICAgICAgICAgSW50U2l6ZSBpbWFn
ZVNpemUgPSBpbWFnZS0+c2l6ZSgpOworICAgICAgICAgICAgICAgIEludFNpemUgaW1hZ2VTaXpl
ID0gaW1hZ2UtPnNpemUodGhpcyk7CiAgICAgICAgICAgICAgICAgaW1hZ2VTaXplLnNjYWxlKDEg
LyBicm9rZW5JbWFnZUFuZEltYWdlU2NhbGVGYWN0b3Iuc2Vjb25kKTsKICAgICAgICAgICAgICAg
ICAvLyBDZW50ZXIgdGhlIGVycm9yIGltYWdlLCBhY2NvdW50aW5nIGZvciBib3JkZXIgYW5kIHBh
ZGRpbmcuCiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjZW50ZXJYID0gKHVzYWJsZVdpZHRo
IC0gaW1hZ2VTaXplLndpZHRoKCkpIC8gMjsKQEAgLTI5MSw3ICsyOTEsNyBAQCB2b2lkIFJlbmRl
ckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgICAgICAgICAgICAgaWYgKGNlbnRl
clkgPCAwKQogICAgICAgICAgICAgICAgICAgICBjZW50ZXJZID0gMDsKICAgICAgICAgICAgICAg
ICBpbWFnZU9mZnNldCA9IExheW91dFNpemUobGVmdEJvcmRlciArIGxlZnRQYWQgKyBjZW50ZXJY
ICsgMSwgdG9wQm9yZGVyICsgdG9wUGFkICsgY2VudGVyWSArIDEpOwotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBJ
bnRSZWN0KHBhaW50T2Zmc2V0ICsgaW1hZ2VPZmZzZXQsIGltYWdlU2l6ZSkpOworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSh0aGlzLCBpbWFnZS5nZXQoKSwgc3R5bGUoKS0+Y29s
b3JTcGFjZSgpLCBJbnRSZWN0KHBhaW50T2Zmc2V0ICsgaW1hZ2VPZmZzZXQsIGltYWdlU2l6ZSkp
OwogICAgICAgICAgICAgICAgIGVycm9yUGljdHVyZURyYXduID0gdHJ1ZTsKICAgICAgICAgICAg
IH0KIApAQCAtNDAwLDcgKzQwMCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3Qo
R3JhcGhpY3MKICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGltYWdl
RWx0ID8gaW1hZ2VFbHQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkgOiBDb21wb3NpdGVTb3VyY2VPdmVy
OwogICAgIEltYWdlKiBpbWFnZSA9IG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2UoKS5nZXQoKTsKICAg
ICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gc2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoY29u
dGV4dCwgaW1hZ2UsIGltYWdlLCByZWN0LnNpemUoKSk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdl
KG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2UocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKS5nZXQo
KSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCByZWN0LCBjb21wb3NpdGVPcGVyYXRvciwgdXNlTG93
UXVhbGl0eVNjYWxpbmcpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZSh0aGlzLCBtX2ltYWdlUmVz
b3VyY2UtPmltYWdlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkuZ2V0KCksIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSwgcmVjdCwgY29tcG9zaXRlT3BlcmF0b3IsIHVzZUxvd1F1YWxpdHlTY2Fs
aW5nKTsKIH0KIAogYm9vbCBSZW5kZXJJbWFnZTo6YmFja2dyb3VuZElzT2JzY3VyZWQoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291
cmNlLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2VSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDE5ICs4OSwyOSBAQCB2
b2lkIFJlbmRlckltYWdlUmVzb3VyY2U6OnJlc2V0QW5pbWF0aW9uCiAgICAgICAgIG1fcmVuZGVy
ZXItPnJlcGFpbnQoKTsKIH0KIAotdm9pZCBSZW5kZXJJbWFnZVJlc291cmNlOjpzZXRJbWFnZUNv
bnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK0ltYWdlKiBSZW5kZXJJbWFn
ZVJlc291cmNlOjpudWxsSW1hZ2UoKQogewotICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKKyAgICBy
ZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOworfQogCi0gICAgaWYgKCFtX2NhY2hlZEltYWdlKQot
ICAgICAgICByZXR1cm47CitQYXNzUmVmUHRyPEltYWdlPiBSZW5kZXJJbWFnZVJlc291cmNlOjpp
bWFnZShpbnQsIGludCkgY29uc3QKK3sKKyAgICBpZiAobV9jYWNoZWRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIG1fY2FjaGVkSW1hZ2UtPmltYWdlKCk7CisgICAgcmV0dXJuIG51bGxJbWFnZSgpOwor
fQogCi0gICAgbV9jYWNoZWRJbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHNpemUpOwordm9p
ZCBSZW5kZXJJbWFnZVJlc291cmNlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6
ZSYgaW1hZ2VDb250YWluZXJTaXplKQoreworICAgIGlmIChtX2NhY2hlZEltYWdlKQorICAgICAg
ICBtX2NhY2hlZEltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUobV9yZW5kZXJlciwgaW1hZ2VD
b250YWluZXJTaXplKTsKIH0KIAotSW1hZ2UqIFJlbmRlckltYWdlUmVzb3VyY2U6Om51bGxJbWFn
ZSgpCitJbnRTaXplIFJlbmRlckltYWdlUmVzb3VyY2U6OmltYWdlU2l6ZShmbG9hdCBtdWx0aXBs
aWVyKSBjb25zdAogewotICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CisgICAgaWYgKG1f
Y2FjaGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBtX2NhY2hlZEltYWdlLT5pbWFnZVNpemUobV9y
ZW5kZXJlciwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIEludFNpemUoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2VSZXNvdXJjZS5oCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE3ICs1
NCwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0QW5pbWF0aW9uKCk7CiAKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKGludCAvKiB3aWR0aCAqLyA9IDAsIGludCAvKiBo
ZWlnaHQgKi8gPSAwKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFn
ZS0+aW1hZ2UoKSA6IG51bGxJbWFnZSgpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdl
PiBpbWFnZShpbnQgd2lkdGggPSAwLCBpbnQgaGVpZ2h0ID0gMCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGVycm9yT2NjdXJyZWQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlICYmIG1f
Y2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldElt
YWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFs
IGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1h
Z2UgPyBtX2NhY2hlZEltYWdlLT51c2VzSW1hZ2VDb250YWluZXJTaXplKCkgOiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgOiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVI
ZWlnaHQoKSA6IGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIEludFNpemUgaW1hZ2VTaXplKGZsb2F0
IG11bHRpcGxpZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdl
LT5pbWFnZVNpemUobXVsdGlwbGllcikgOiBJbnRTaXplKCk7IH0KKyAgICB2aXJ0dWFsIEludFNp
emUgaW1hZ2VTaXplKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0OwogCiAgICAgdmlydHVhbCBXcmFw
cGVkSW1hZ2VQdHIgaW1hZ2VQdHIoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlLmdldCgp
OyB9CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVy
ZXI7IH0KIAogcHJvdGVjdGVkOgogICAgIFJlbmRlckltYWdlUmVzb3VyY2UoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNl
U3R5bGVJbWFnZS5oCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKGlu
dCB3aWR0aCA9IDAsIGludCBoZWlnaHQgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0eWxlSW1hZ2Ut
PmltYWdlKG1fcmVuZGVyZXIsIEludFNpemUod2lkdGgsIGhlaWdodCkpOyB9CiAgICAgdmlydHVh
bCBib29sIGVycm9yT2NjdXJyZWQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlSW1hZ2UtPmVycm9y
T2NjdXJyZWQoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKSBjb25zdCB7IG1fc3R5bGVJbWFnZS0+c2V0SW1hZ2VDb250YWlu
ZXJTaXplKHNpemUpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKSB7IG1fc3R5bGVJbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXpl
KG1fcmVuZGVyZXIsIHNpemUpOyB9CiAgICAgdmlydHVhbCBib29sIHVzZXNJbWFnZUNvbnRhaW5l
clNpemUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlSW1hZ2UtPnVzZXNJbWFnZUNvbnRhaW5lclNp
emUoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3N0eWxlSW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpOyB9CiAgICAgdmly
dHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxl
SW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MTcsMjEg
KzI0MTcsMjIgQEAgdm9pZCBSZW5kZXJMYXllcjo6ZHJhd1BsYXRmb3JtUmVzaXplckltYQogewog
ICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3Io
cmVuZGVyZXIoKS0+ZnJhbWUoKSk7CiAKKyAgICAvLyBQYXNzaW5nIDAgYXMgSW1hZ2VVc2VyIHRv
IHRoZSBzaXplKCkvZHJhd0ltYWdlKCkgbWV0aG9kcyBhcyBmaW5lLCBhcyB0aGVzZSBhcmUgbm8g
U1ZHIGltYWdlcy4KICAgICBSZWZQdHI8SW1hZ2U+IHJlc2l6ZUNvcm5lckltYWdlOwogICAgIElu
dFNpemUgY29ybmVyUmVzaXplclNpemU7CiAgICAgaWYgKGRldmljZVNjYWxlRmFjdG9yID49IDIp
IHsKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbWFnZSosIHJlc2l6ZUNvcm5lckltYWdl
SGlSZXMsIChJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVy
QDJ4IikubGVha1JlZigpKSk7CiAgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29y
bmVySW1hZ2VIaVJlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJ
bWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lcklt
YWdlLT5zaXplKDApOwogICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEltYWdlKiwgcmVzaXplQ29y
bmVySW1hZ2VMb1JlcywgKEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNp
emVDb3JuZXIiKS5sZWFrUmVmKCkpKTsKICAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNp
emVDb3JuZXJJbWFnZUxvUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNv
cm5lckltYWdlLT5zaXplKCk7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29y
bmVySW1hZ2UtPnNpemUoMCk7CiAgICAgfQogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QocmVzaXpl
ckNvcm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJS
ZXNpemVyU2l6ZSk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdlKHJlc2l6ZUNvcm5lckltYWdlLmdl
dCgpLCByZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xvclNwYWNlKCksIGltYWdlUmVjdCk7CisgICAg
Y29udGV4dC0+ZHJhd0ltYWdlKDAsIHJlc2l6ZUNvcm5lckltYWdlLmdldCgpLCByZW5kZXJlcigp
LT5zdHlsZSgpLT5jb2xvclNwYWNlKCksIGltYWdlUmVjdCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5
ZXI6OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9u
IDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMwLDcgKzExMzAsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJr
ZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAh
PSBudWxsQXRvbSAmJiAhcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHBhaW50T2Zmc2V0LCBzdHlsZSgpLT5oaWdo
bGlnaHQoKSwgdHJ1ZSk7CiAjZW5kaWYKLSAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1faW1h
Z2UtPmltYWdlKHRoaXMsIG1hcmtlci5zaXplKCkpLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNl
KCksIG1hcmtlcik7CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSh0aGlzLCBtX2ltYWdlLT5p
bWFnZSh0aGlzLCBtYXJrZXIuc2l6ZSgpKS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBt
YXJrZXIpOwogICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25lKSB7
CiAgICAgICAgICAgICBMYXlvdXRSZWN0IHNlbFJlY3QgPSBsb2NhbFNlbGVjdGlvblJlY3QoKTsK
ICAgICAgICAgICAgIHNlbFJlY3QubW92ZUJ5KGJveE9yaWdpbik7CkBAIC0xMzUwLDcgKzEzNTAs
NyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNvbXB1dGVQcmVmZXJyZWRMCiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGEgc29tZXdoYXQgYXJiaXRyYXJ5IHdpZHRoLiAgR2VuZXJhdGVkIGlt
YWdlcyBmb3IgbWFya2VycyByZWFsbHkgd29uJ3QgYmVjb21lIHBhcnRpY3VsYXJseSB1c2VmdWwK
ICAgICAgICAgLy8gdW50aWwgd2Ugc3VwcG9ydCB0aGUgQ1NTMyBtYXJrZXIgcHNldWRvY2xhc3Mg
dG8gYWxsb3cgY29udHJvbCBvdmVyIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBtYXJrZXIg
Ym94LgogICAgICAgICBMYXlvdXRVbml0IGJ1bGxldFdpZHRoID0gZm9udE1ldHJpY3MuYXNjZW50
KCkgLyAyOwotICAgICAgICBtX2ltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUoTGF5b3V0U2l6
ZShidWxsZXRXaWR0aCwgYnVsbGV0V2lkdGgpKTsKKyAgICAgICAgbV9pbWFnZS0+c2V0SW1hZ2VD
b250YWluZXJTaXplKHRoaXMsIExheW91dFNpemUoYnVsbGV0V2lkdGgsIGJ1bGxldFdpZHRoKSk7
CiAgICAgICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZS0+aW1hZ2VTaXplKHRoaXMs
IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdHlsZSgpLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gaW1hZ2VTaXplLndpZHRoKCkgOiBpbWFnZVNpemUuaGVpZ2h0KCk7
CiAgICAgICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2Uu
Y3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUNhY2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksOSBAQCBib29s
IFN0eWxlQ2FjaGVkSW1hZ2U6OmVycm9yT2NjdXJyZWQoKSBjCiAgICAgcmV0dXJuIG1faW1hZ2Ut
PmVycm9yT2NjdXJyZWQoKTsKIH0KIAotSW50U2l6ZSBTdHlsZUNhY2hlZEltYWdlOjppbWFnZVNp
emUoY29uc3QgUmVuZGVyT2JqZWN0KiAvKnJlbmRlcmVyKi8sIGZsb2F0IG11bHRpcGxpZXIpIGNv
bnN0CitJbnRTaXplIFN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShjb25zdCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAogewotICAgIHJldHVybiBtX2lt
YWdlLT5pbWFnZVNpemUobXVsdGlwbGllcik7CisgICAgcmV0dXJuIG1faW1hZ2UtPmltYWdlU2l6
ZShyZW5kZXJlciwgbXVsdGlwbGllcik7CiB9CiAKIGJvb2wgU3R5bGVDYWNoZWRJbWFnZTo6aW1h
Z2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QKQEAgLTY5LDE5ICs2OSwxOSBAQCBib29sIFN0eWxl
Q2FjaGVkSW1hZ2U6OnVzZXNJbWFnZUNvbnRhaW5lCiAgICAgcmV0dXJuIG1faW1hZ2UtPnVzZXNJ
bWFnZUNvbnRhaW5lclNpemUoKTsKIH0KIAotdm9pZCBTdHlsZUNhY2hlZEltYWdlOjpzZXRJbWFn
ZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgU3R5bGVDYWNoZWRJbWFn
ZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IEludFNpemUmIGltYWdlQ29udGFpbmVyU2l6ZSkKIHsKLSAgICByZXR1cm4gbV9pbWFnZS0+
c2V0SW1hZ2VDb250YWluZXJTaXplKHNpemUpOworICAgIG1faW1hZ2UtPnNldEltYWdlQ29udGFp
bmVyU2l6ZShyZW5kZXJlciwgaW1hZ2VDb250YWluZXJTaXplKTsKIH0KIAogdm9pZCBTdHlsZUNh
Y2hlZEltYWdlOjphZGRDbGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1
cm4gbV9pbWFnZS0+YWRkQ2xpZW50KHJlbmRlcmVyKTsKKyAgICBtX2ltYWdlLT5hZGRDbGllbnQo
cmVuZGVyZXIpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVkSW1hZ2U6OnJlbW92ZUNsaWVudChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBtX2ltYWdlLT5yZW1vdmVDbGllbnQo
cmVuZGVyZXIpOworICAgIG1faW1hZ2UtPnJlbW92ZUNsaWVudChyZW5kZXJlcik7CiB9CiAKIFBh
c3NSZWZQdHI8SW1hZ2U+IFN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlKFJlbmRlck9iamVjdCosIGNv
bnN0IEludFNpemUmKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0
aXZlV2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdo
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXpl
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBSZW5kZXJP
YmplY3QqLCBjb25zdCBJbnRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChSZW5k
ZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCop
OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29u
c3QgSW50U2l6ZSYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmNwcAkocmV2aXNpb24gOTY2OTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDExICs1OCw2IEBAIEludFNpemUgU3R5bGVHZW5lcmF0ZWRJ
bWFnZTo6aW1hZ2VTaXplKGMKICAgICByZXR1cm4gbV9jb250YWluZXJTaXplOwogfQogCi12b2lk
IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQotewotICAgIG1fY29udGFpbmVyU2l6ZSA9IHNpemU7Ci19Ci0KIHZvaWQgU3R5bGVH
ZW5lcmF0ZWRJbWFnZTo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAg
bV9nZW5lcmF0b3ItPmFkZENsaWVudChyZW5kZXJlciwgSW50U2l6ZSgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2Uu
aAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVHZW5lcmF0ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gIW1fZml4ZWRTaXplOyB9CiAgICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWln
aHQoKSBjb25zdCB7IHJldHVybiAhbV9maXhlZFNpemU7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNl
c0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZpeGVkU2l6ZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgSW50U2l6ZSYgY29udGFpbmVyU2l6ZSkgeyBtX2NvbnRhaW5lclNpemUgPSBjb250YWlu
ZXJTaXplOyB9CiAgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChSZW5kZXJPYmplY3QqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5o
CShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50
U2l6ZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFJlbmRlck9iamVjdCopID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCopID0gMDsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IElu
dFNpemUmKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVQZW5kaW5nSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVs
YXRpdmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlt
YWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IFJlbmRlck9i
amVjdCosIGNvbnN0IEludFNpemUmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFJl
bmRlck9iamVjdCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyT2Jq
ZWN0KikgeyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZShSZW5kZXJPYmpl
Y3QqLCBjb25zdCBJbnRTaXplJikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw2ICs2Niw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmxheW91dCgpCiAKICAgICBM
YXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlv
dXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSk7CiAgICAgU1ZHSW1hZ2VFbGVtZW50KiBpbWFnZSA9
IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7CisgICAgbV9pbWFnZVJlc291
cmNlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUoZW5jbG9zaW5nSW50UmVjdChtX29iamVjdEJvdW5k
aW5nQm94KS5zaXplKCkpOwogCiAgICAgYm9vbCB0cmFuc2Zvcm1PckJvdW5kYXJpZXNVcGRhdGUg
PSBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIHx8IG1fdXBkYXRlQ2FjaGVkUmVwYWludFJlY3Q7CiAg
ICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKQEAgLTEyNSwxMyArMTI2LDEzIEBAIHZv
aWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAgICAgIGlmIChT
VkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFp
bnRJbmZvKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdl
UmVzb3VyY2UtPmltYWdlKCk7CiAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0g
bV9vYmplY3RCb3VuZGluZ0JveDsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgw
LCAwLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBG
bG9hdFJlY3Qgc3JjUmVjdCgwLCAwLCBpbWFnZS0+d2lkdGgodGhpcyksIGltYWdlLT5oZWlnaHQo
dGhpcykpOwogCiAgICAgICAgICAgICAgICAgU1ZHSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQqPihub2RlKCkpOwogICAgICAgICAgICAgICAg
IGlmIChpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNwZWN0UmF0aW8oKS5hbGlnbigpICE9IFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkUpCiAgICAgICAg
ICAgICAgICAgICAgIGltYWdlRWxlbWVudC0+cHJlc2VydmVBc3BlY3RSYXRpbygpLnRyYW5zZm9y
bVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwogCi0gICAgICAgICAgICAgICAgY2hpbGRQYWludElu
Zm8uY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBk
ZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4
dC0+ZHJhd0ltYWdlKHRoaXMsIGltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0
UmVjdCwgc3JjUmVjdCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFNWR1JlbmRlclN1
cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIHNhdmVk
SW5mby5jb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgU1ZHSW1hZ2U6On5T
VkdJbWFnZSgpCiAgICAgQVNTRVJUKCFtX2Nocm9tZUNsaWVudCB8fCAhbV9jaHJvbWVDbGllbnQt
PmltYWdlKCkpOwogfQogCi12b2lkIFNWR0ltYWdlOjpzZXRDb250YWluZXJTaXplKGNvbnN0IExh
eW91dFNpemUmIGNvbnRhaW5lclNpemUpCit2b2lkIFNWR0ltYWdlOjpzZXRDb250YWluZXJTaXpl
KEltYWdlVXNlciwgY29uc3QgSW50U2l6ZSYgY29udGFpbmVyU2l6ZSkKIHsKICAgICBpZiAoY29u
dGFpbmVyU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyOCw3ICsxMjgsNyBA
QCBib29sIFNWR0ltYWdlOjp1c2VzQ29udGFpbmVyU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHJv
b3RFbGVtZW50LT5oYXNTZXRDb250YWluZXJTaXplKCk7CiB9CiAKLUludFNpemUgU1ZHSW1hZ2U6
OnNpemUoKSBjb25zdAorSW50U2l6ZSBTVkdJbWFnZTo6c2l6ZShJbWFnZVVzZXIpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7CkBAIC0xNzYsNyAr
MTc2LDcgQEAgYm9vbCBTVkdJbWFnZTo6aGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdAogICAgIHJl
dHVybiByb290RWxlbWVudC0+aGVpZ2h0KCkudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2Vu
dGFnZTsKIH0KIAotdm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgU1ZHSW1hZ2U6OmRy
YXcoSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICBy
ZXR1cm47CkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQqIGNvbgogICAgIGNvbnRleHQtPnRyYW5zbGF0ZShkZXN0T2Zmc2V0LngoKSwgZGVzdE9m
ZnNldC55KCkpOwogICAgIGNvbnRleHQtPnNjYWxlKHNjYWxlKTsKIAotICAgIHZpZXctPnJlc2l6
ZShzaXplKCkpOworICAgIHZpZXctPnJlc2l6ZShzaXplKHVzZXIpKTsKIAogICAgIGlmICh2aWV3
LT5uZWVkc0xheW91dCgpKQogICAgICAgICB2aWV3LT5sYXlvdXQoKTsKQEAgLTIxNSw3ICsyMTUs
NyBAQCB2b2lkIFNWR0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgU1ZHSW1h
Z2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKK05hdGl2ZUltYWdlUHRyIFNWR0ltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShJbWFnZVVzZXIgdXNlcikKIHsKICAgICAvLyBG
SVhNRTogSW4gb3JkZXIgdG8gc3VwcG9ydCBkeW5hbWljIFNWR3Mgd2UgbmVlZCB0byBoYXZlIGEg
d2F5IHRvIGludmFsaWRhdGUgdGhpcwogICAgIC8vIGZyYW1lIGNhY2hlLCBvciBiZXR0ZXIgeWV0
LCBub3QgdXNlIGEgY2FjaGUgZm9yIHRpbGVkIGRyYXdpbmcgYXQgYWxsLCBpbnN0ZWFkCkBAIC0y
MjMsMTMgKzIyMywxMyBAQCBOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JD
CiAgICAgaWYgKCFtX2ZyYW1lQ2FjaGUpIHsKICAgICAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7CisgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKHVzZXIpKTsKICAgICAgICAgaWYgKCFidWZm
ZXIpIC8vIGZhaWxlZCB0byBhbGxvY2F0ZSBpbWFnZQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIGRyYXcoYnVmZmVyLT5jb250ZXh0KCksIHJlY3QoKSwgcmVjdCgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAgZHJhdyh1c2VyLCBidWZm
ZXItPmNvbnRleHQoKSwgcmVjdCh1c2VyKSwgcmVjdCh1c2VyKSwgQ29sb3JTcGFjZURldmljZVJH
QiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CiAgICAgICAgIG1fZnJhbWVDYWNoZSA9IGJ1ZmZlci0+
Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwogICAgIH0KLSAgICByZXR1cm4gbV9mcmFtZUNh
Y2hlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBtX2ZyYW1lQ2Fj
aGUtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHVzZXIpOwogfQogCiBib29sIFNWR0ltYWdl
OjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMiArNDksMTIg
QEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBMYXlvdXRTaXpl
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRhaW5lclNpemUoSW1hZ2VVc2VyLCBjb25zdCBJ
bnRTaXplJik7CiAgICAgdmlydHVhbCBib29sIHVzZXNDb250YWluZXJTaXplKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgSW50U2l6ZSBzaXpl
KCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoSW1hZ2VVc2VyKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCk7CiAKQEAg
LTY2LDkgKzY2LDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGZyYW1l
QXRJbmRleChzaXplX3QpIHsgcmV0dXJuIDA7IH0KIAogICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2
ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFJlY3QmIGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVjdCwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhJ
bWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZnJvbVJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdG9SZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IpOwogCi0gICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoSW1hZ2VVc2VyKTsKIAogICAgIE93blB0cjxTVkdJbWFnZUNocm9tZUNs
aWVudD4gbV9jaHJvbWVDbGllbnQ7CiAgICAgT3duUHRyPFBhZ2U+IG1fcGFnZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
CShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIFBhc3NSZWZQ
dHI8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlKEZpbHQKIHZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQogewogICAgIEFTU0VSVChtX2ltYWdlKTsKLSAgICBGbG9hdFJl
Y3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7CisgICAgRmxvYXRSZWN0
IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKDApKTsKICAgICBGbG9hdFJlY3Qg
cGFpbnRSZWN0KG1fYWJzb2x1dGVTdWJyZWdpb24pOwogICAgIG1fcHJlc2VydmVBc3BlY3RSYXRp
by50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwgc3JjUmVjdCk7CiAgICAgcGFpbnRSZWN0LmludGVy
c2VjdChtYXhFZmZlY3RSZWN0KCkpOwpAQCAtNjUsMTQgKzY1LDE0IEBAIHZvaWQgRkVJbWFnZTo6
YXBwbHkoKQogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZs
b2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKKyAgICBGbG9h
dFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUodGhpcykpOwogICAgIEZs
b2F0UmVjdCBkZXN0UmVjdChtX2Fic29sdXRlU3VicmVnaW9uKTsKICAgICBtX3ByZXNlcnZlQXNw
ZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7CiAKICAgICBJbnRQb2lu
dCBwYWludExvY2F0aW9uID0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwogICAgIGRl
c3RSZWN0Lm1vdmUoLXBhaW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkpOwogCi0g
ICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKKyAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLT5kcmF3SW1hZ2UodGhpcywgbV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJH
QiwgZGVzdFJlY3QsIHNyY1JlY3QpOwogfQogCiB2b2lkIEZFSW1hZ2U6OmR1bXAoKQpAQCAtODIs
NyArODIsNyBAQCB2b2lkIEZFSW1hZ2U6OmR1bXAoKQogVGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9pbWFnZSk7Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlLT5z
aXplKCk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlLT5zaXplKHRoaXMpOwogICAg
IHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwogICAgIHRzIDw8ICJbZmVJbWFnZSI7CiAgICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMDUgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1t
ZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUHJlcGFyZSBTVkdJbWFnZSBpbnRyaW5zaWMgc2l6
ZSBuZWdvdGlhdGlvbjogTWFrZSBpdCBwb3NzaWJsZSB0byByZXVzZSB0aGUgc2FtZSBTVkdJbWFn
ZSBhdCBkaWZmZXJlbnQgc2l6ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY5NDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDogQWRhcHQgdG8g
SW1hZ2UgQVBJIGNoYW5nZXMuCisgICAgICAgIChDb3JlSVBDOjplbmNvZGVJbWFnZSk6CisgICAg
ICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisKIDIwMTEtMTAtMDUgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVzZSBXS1JldGFpblB0
ciBmb3IgV0sgdHlwZXMgaW4gV2ViS2l0MiBHVEsrCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjkwLDggKzI5MCw4IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxDcmVkZW50aWFsPjo6
ZGVjb2RlKEEKIAogc3RhdGljIHZvaWQgZW5jb2RlSW1hZ2UoQXJndW1lbnRFbmNvZGVyKiBlbmNv
ZGVyLCBJbWFnZSogaW1hZ2UpCiB7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFw
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgU2hhcmVh
YmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KCkp
OworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKDApLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRz
QWxwaGEpOworICAgIGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCktPmRyYXdJbWFnZSgw
LCBpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoKSk7CiAKICAgICBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CiAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxl
KTsKQEAgLTM2Nyw3ICszNjcsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8Q3Vyc29yPjo6ZGVjb2Rl
KEFyZ3VtCiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaG90U3BvdCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmICghaW1hZ2UtPnJlY3QoKS5jb250YWlucyhob3RTcG90KSkKKyAg
ICBpZiAoIWltYWdlLT5yZWN0KDApLmNvbnRhaW5zKGhvdFNwb3QpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBjdXJzb3IgPSBDdXJzb3IoaW1hZ2UuZ2V0KCksIGhvdFNwb3QpOwpJbmRl
eDogU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gOTY3MDcpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMC0wNSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KKworICAgICAgICBQcmVwYXJl
IFNWR0ltYWdlIGludHJpbnNpYyBzaXplIG5lZ290aWF0aW9uOiBNYWtlIGl0IHBvc3NpYmxlIHRv
IHJldXNlIHRoZSBzYW1lIFNWR0ltYWdlIGF0IGRpZmZlcmVudCBzaXplcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk0MTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGV3ay9ld2tfaGlzdG9yeS5jcHA6
CisgICAgICAgIChld2tfaGlzdG9yeV9pdGVtX2ljb25fc3VyZmFjZV9nZXQpOgorICAgICAgICAo
ZXdrX2hpc3RvcnlfaXRlbV9pY29uX29iamVjdF9hZGQpOgorICAgICAgICAqIGV3ay9ld2tfc2V0
dGluZ3MuY3BwOgorICAgICAgICAoZXdrX3NldHRpbmdzX2ljb25fZGF0YWJhc2VfaWNvbl9zdXJm
YWNlX2dldCk6CisgICAgICAgIChld2tfc2V0dGluZ3NfaWNvbl9kYXRhYmFzZV9pY29uX29iamVj
dF9hZGQpOgorCiAyMDExLTEwLTA0ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3Vu
Zy5jb20+CiAKICAgICAgICAgW0VGTF0gT25seSBzZXQgd2hlbiB0aGUgY3VzdG9tIGVuY29kaW5n
IGlzIGRpZmZlcmVudCBmcm9tIGV4aXN0aW5nIHZhbHVlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2hpc3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfaGlzdG9yeS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19oaXN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDcgKzMyOCw3IEBAIGNh
aXJvX3N1cmZhY2VfdCogZXdrX2hpc3RvcnlfaXRlbV9pY29uX3MKICAgICAgICAgRVJSKCJpY29u
IGlzIE5VTEwuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gaWNvbi0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICByZXR1cm4gaWNvbi0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoMCk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfaGlzdG9yeV9pdGVt
X2ljb25fb2JqZWN0X2FkZChjb25zdCBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtLCBFdmFzKiBjYW52
YXMpCkBAIC0zNDMsNyArMzQzLDcgQEAgRXZhc19PYmplY3QqIGV3a19oaXN0b3J5X2l0ZW1faWNv
bl9vYmplYwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBzdXJmYWNlID0gaWNvbi0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBzdXJmYWNlID0gaWNvbi0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiAgICAgcmV0dXJuIGV3a191dGlsX2ltYWdlX2Zyb21f
Y2Fpcm9fc3VyZmFjZV9hZGQoY2FudmFzLCBzdXJmYWNlKTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw3ICsx
ODgsNyBAQCBjYWlyb19zdXJmYWNlX3QqIGV3a19zZXR0aW5nc19pY29uX2RhdGFiCiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiBpY29uLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOworICAgIHJldHVybiBpY29uLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgw
KTsKIH0KIAogRXZhc19PYmplY3QqIGV3a19zZXR0aW5nc19pY29uX2RhdGFiYXNlX2ljb25fb2Jq
ZWN0X2FkZChjb25zdCBjaGFyKiB1cmwsIEV2YXMqIGNhbnZhcykKQEAgLTIwNSw3ICsyMDUsNyBA
QCBFdmFzX09iamVjdCogZXdrX3NldHRpbmdzX2ljb25fZGF0YWJhc2VfCiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIAotICAgIHN1cmZhY2UgPSBpY29uLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOworICAgIHN1cmZhY2UgPSBpY29uLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgw
KTsKICAgICByZXR1cm4gZXdrX3V0aWxfaW1hZ2VfZnJvbV9jYWlyb19zdXJmYWNlX2FkZChjYW52
YXMsIHN1cmZhY2UpOwogfQogCg==
</data>
<flag name="commit-queue"
          id="107124"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109844</attachid>
            <date>2011-10-05 13:14:26 -0700</date>
            <delta_ts>2011-10-07 02:59:32 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>SVGImage-splitoff-v4.diff</filename>
            <type>text/plain</type>
            <size>160781</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NzQxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjc2IEBACisyMDExLTEwLTA1ICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFByZXBhcmUgU1ZH
SW1hZ2UgaW50cmluc2ljIHNpemUgbmVnb3RpYXRpb246IE1ha2UgaXQgcG9zc2libGUgdG8gcmV1
c2UgdGhlIHNhbWUgU1ZHSW1hZ2UgYXQgZGlmZmVyZW50IHNpemVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRvIGltcGxlbWVudCBpbnRyaW5jaWMgc2l6
ZSBuZWdvdGlhdGlvbiBmb3IgU1ZHIGltYWdlcyBlbWJlZGRlZCB0aHJvdWdoIGJvcmRlci1pbWFn
ZS9iYWNrZ3JvdW5kLWltYWdlLzxodG1sOmltZz4vPHN2ZzppbWFnZT4vLi4uCisgICAgICAgIFNW
R0ltYWdlIG5lZWRzIHRvIHN0b3JlIHRoZSBkZXNpcmVkIGNvbnRhaW5lciBzaXplIGZvciB0aGUg
dGFyZ2V0IHdoZXJlIHRoZSBpbWFnZSBpcyBlbWJlZGRlZCwgaWYgaXRzIHByb3ZpZGVkLgorCisg
ICAgICAgIEFzIFNWR0ltYWdlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgaW5zdGFuY2Vz
IHRoYXQgcmVmZXIgdG8gaXQsIHdlIG5lZWQgdG8gbWFrZSBpdCBjb250YWluIGEgSGFzaE1hcCB0
aGF0IG1hcHMgZnJvbQorICAgICAgICBhIFJlbmRlck9iamVjdCogdG8gYSBJbnRTaXplLiBBcyBT
VkdJbWFnZSBpcyBuZXZlciB1c2VkIGRpcmVjdGx5LCB0aGUgSW1hZ2UgQVBJcyBuZWVkIHRvIGJl
IGFkanVzdGVkLiBJdCBjYW4ndCByZWZlcmVuY2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0cyBh
cyB0aGF0IHdvdWxkIGJlIGEgcGxhdGZvcm0gbGF5ZXIgdmlvbGF0aW9uIC0gaW5zdGVhZCBpbnRy
b2R1Y2UgYSAiSW1hZ2VVc2VyIiB0eXBlZGVmIHRvIGNvbnN0IHZvaWQqCisgICAgICAgIGFuZCBw
YXNzIEltYWdlVXNlciBhcmd1bWVudHMgdG8gR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UvZHJh
d1RpbGVkSW1hZ2UvZHJhd1BhdHRlcm4sIGFuZCB0byBJbWFnZTo6c2l6ZS93aWR0aC9oZWlnaHQK
KyAgICAgICAgc28gdGhhdCBTVkdJbWFnZSBjYW4gYWx3YXlzIGZpZ3VyZSBvdXQgd2hvcyBhc2tp
bmcgZm9yIHRoZSBzaXplIGFuZCByZXR1cm4gdGhlIHJpZ2h0IGFuc3dlcnMuCisKKyAgICAgICAg
Tm90IHRlc3RhYmxlIHlldCwgYXMgdGhlIG5ldyBJbWFnZVVzZXIgY29uY2VwdCBpc24ndCB1c2Vk
IHlldC4gQnVnIDQ3MTU2IHdpbGwgbWFrZSB1c2Ugb2YgaXQgc29vbi4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcGl4bWFw
cnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcEluc3RhbmNlOjp2
YXJpYW50RnJvbU9iamVjdCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQpOgorICAgICAgICAq
IGh0bWwvSFRNTEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VF
bGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpoZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbFdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6Om5hdHVyYWxIZWlnaHQpOgorICAg
ICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURv
Y3VtZW50UGFyc2VyOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6
c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzaXplSW1hZ2VUb0Zp
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjppbWFnZVVwZGF0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzdG9yZUltYWdlU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjppbWFnZUZpdHNJbldpbmRvdyk6CisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyREltcGwpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkSW1hZ2U6OmltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6
ZGF0YSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6Y2FuUmVuZGVyKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkb0ltYWdlRHJh
Zyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAqIHBsYXRmb3JtL0N1cnNvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkZXRlcm1pbmVIb3RTcG90KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVs
RXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtTWFj
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmQ6OndyaXRlSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BvcHVw
TGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OnBhaW50Um93KToK
KyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6Z2V0Um93SGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6bGF5b3V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJv
bWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lQ2hyb21pdW06OnBhaW50VGlja21hcmtzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lU2l6ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bm90U29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJh
dGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJhdGVkSW1hZ2U6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6R2VuZXJhdGVkSW1hZ2U6OnNldENvbnRhaW5lclNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6R2VuZXJhdGVkSW1hZ2U6OnNpemUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjppc1NWR0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjppc051bGwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnNldENvbnRh
aW5lclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0
ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1Bh
dHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJu
OjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ljb25DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZE
aXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmNvbnRlbnRCb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnNl
dENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0lt
YWdlT3BlblZHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0ZvclNv
bGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
TGF5ZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyUXQ6OnNldENvbnRl
bnRzVG9JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmNsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9QYXR0ZXJuUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdGlsbEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdGlsbEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9TdGlsbEltYWdlUXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJl
TWFwcGVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZVF0OjpzZXRDb250
ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6dWlkRm9ySW1hZ2UpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHQzRFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZl
clNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29s
aWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQYXR0ZXJuOjpwbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6Y29udGVudFNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRIQklUTUFQ
T2ZTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGlu
Z1NvdXJjZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJv
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJj
ZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2lu
Q0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyZWRJbWFnZTo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ltYWdlV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmdldEhCSVRNQVBPZlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0
dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RHJhZ0ltYWdlRnJvbUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6Y3JlYXRlRHJhZ0ltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFF0OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL3F0L0N1cnNvclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUN1c3RvbUN1cnNvcik6CisgICAgICAgICogcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6d3JpdGVJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fpcm9XaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jZS9QYXN0ZWJvYXJk
V2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6Cisg
ICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnBhaW50TWlzc2luZ1BsdWdpbkljb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1YWxpdHlDb250
cm9sbGVyOjpzaG91bGRQYWludEF0TG93UXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlRmlsbFRpbGVTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjZUltYWdlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW1hZ2U6OmltYWdlU2l6ZUZvckVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckltYWdlOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpw
YWludEludG9SZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZVJlc291cmNlOjpudWxsSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VSZXNvdXJjZTo6aW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2VSZXNvdXJjZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlUmVzb3VyY2U6OmltYWdlU2l6ZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckltYWdlUmVzb3VyY2U6OnJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
UmVzb3VyY2VTdHlsZUltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2VTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjphZGRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
U3R5bGVHZW5lcmF0ZWRJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVHZW5lcmF0ZWRJ
bWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
U3R5bGVJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFn
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQZW5kaW5nSW1hZ2U6OnNldEltYWdlQ29udGFp
bmVyU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR0ltYWdlOjpwYWludCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpzZXRDb250YWluZXJTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUltYWdlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKToKKwogMjAxMS0xMC0wNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFw
QGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBNYWtlIGJ1aWx0LWluIFBERiBkZXNjcmlwdGlv
biBsb2NhbGl6YWJsZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDk2Njk4KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3
ICs0MzAsNyBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUGF0aEVSCiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFCiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFUktOU181
Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5Y2xl
YXJSZWN0RVJLTlNfOUZsb2F0UmVjdEUKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OWRy
YXdJbWFnZUVQTlNfNUltYWdlRU5TXzEwQ29sb3JTcGFjZUVSS05TXzhJbnRQb2ludEVOU18xN0Nv
bXBvc2l0ZU9wZXJhdG9yRQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5ZHJhd0ltYWdl
RVBLdlBOU181SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJLTlNfOEludFBvaW50RU5TXzE3Q29tcG9z
aXRlT3BlcmF0b3JFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlzZXRTaGFkb3dFUktO
U185RmxvYXRTaXplRWZSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCiBfX1pON1dlYkNvcmUx
NUdyYXBoaWNzQ29udGV4dDl0cmFuc2xhdGVFZmYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0QzFFUDlDR0NvbnRleHQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gOTY2
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCBib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIGNoZWNrIHdoZXRoZXIgcmVuZGVyZWQgaW1hZ2Ugd2FzIHN0cmV0Y2hlZCBmcm9tIG9uZS1k
aW1lbnNpb25hbCBmaWxlIGltYWdlCiAgICAgICAgICAgICBpZiAoaW1hZ2UtPmNhY2hlZEltYWdl
KCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IGltYWdlLT5jYWNo
ZWRJbWFnZSgpLT5pbWFnZVNpemUoaW1hZ2UtPnZpZXcoKS0+em9vbUZhY3RvcigpKTsKKyAgICAg
ICAgICAgICAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5p
bWFnZVNpemUobV9yZW5kZXJlciwgaW1hZ2UtPnZpZXcoKS0+em9vbUZhY3RvcigpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gaW1hZ2VTaXplLmhlaWdodCgpIDw9IDEgfHwgaW1hZ2VTaXplLndp
ZHRoKCkgPD0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gOTY2OTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4Miw3ICszODIsNyBAQCBRVmFyaWFudCBRdFBpeG1hcEluc3RhbmNlOjp2YXJp
YW50RnJvbU9iCiAgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICBnb3RvIHJldHVybkVt
cHR5VmFyaWFudDsKIAotICAgICAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSk7CiAgICAg
ICAgIGlmICghcGl4bWFwKQogICAgICAgICAgICAgZ290byByZXR1cm5FbXB0eVZhcmlhbnQ7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lv
biA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6
cGFpbnQoR3JhcGhpY3NDbwogICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBidWZm
ZXIoKTsKICAgICAgICAgaWYgKGltYWdlQnVmZmVyKSB7CiAgICAgICAgICAgICBpZiAobV9wcmVz
ZW50ZWRJbWFnZSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9wcmVzZW50
ZWRJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgciwgQ29tcG9zaXRlU291cmNlT3Zl
ciwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1h
Z2UocmVuZGVyZXIoKSwgbV9wcmVzZW50ZWRJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJH
QiwgciwgQ29tcG9zaXRlU291cmNlT3ZlciwgdXNlTG93UXVhbGl0eVNjYWxlKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VC
dWZmZXIsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHIsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIHVzZUxv
d1F1YWxpdHlTY2FsZSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsNyArMjU3LDcgQEAg
aW50IEhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKGJvb2wgaWdub3JlUAogCiAgICAgICAgIC8vIGlm
IHRoZSBpbWFnZSBpcyBhdmFpbGFibGUsIHVzZSBpdHMgd2lkdGgKICAgICAgICAgaWYgKG1faW1h
Z2VMb2FkZXIuaW1hZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdl
KCktPmltYWdlU2l6ZSgxLjBmKS53aWR0aCgpOworICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2VM
b2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyKCksIDEuMGYpLndpZHRoKCk7CiAgICAg
fQogCiAgICAgaWYgKGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykKQEAgLTI4MCw3ICsyODAsNyBA
QCBpbnQgSFRNTEltYWdlRWxlbWVudDo6aGVpZ2h0KGJvb2wgaWdub3JlCiAKICAgICAgICAgLy8g
aWYgdGhlIGltYWdlIGlzIGF2YWlsYWJsZSwgdXNlIGl0cyBoZWlnaHQKICAgICAgICAgaWYgKG1f
aW1hZ2VMb2FkZXIuaW1hZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmlt
YWdlKCktPmltYWdlU2l6ZSgxLjBmKS5oZWlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2lt
YWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlcigpLCAxLjBmKS5oZWlnaHQoKTsK
ICAgICB9CiAKICAgICBpZiAoaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKQpAQCAtMjk3LDcgKzI5
Nyw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50OjpuYXR1cmFsV2lkdGgoKSBjb24KICAgICBpZiAo
IW1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4g
bV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUoMS4wZikud2lkdGgoKTsKKyAgICByZXR1
cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUocmVuZGVyZXIoKSwgMS4wZikud2lk
dGgoKTsKIH0KIAogaW50IEhUTUxJbWFnZUVsZW1lbnQ6Om5hdHVyYWxIZWlnaHQoKSBjb25zdApA
QCAtMzA1LDcgKzMwNSw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50OjpuYXR1cmFsSGVpZ2h0KCkg
Y28KICAgICBpZiAoIW1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUoMS4wZikuaGVpZ2h0
KCk7CisgICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVy
KCksIDEuMGYpLmhlaWdodCgpOwogfQogCiBib29sIEhUTUxJbWFnZUVsZW1lbnQ6OmlzVVJMQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZURvY3VtZW50LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lt
YWdlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBJ
bWFnZURvY3VtZW50UGFyc2VyOjpmaW5pc2goKQogCiAgICAgICAgIC8vIFJlcG9ydCB0aGUgbmF0
dXJhbCBpbWFnZSBzaXplIGluIHRoZSBwYWdlIHRpdGxlLCByZWdhcmRsZXNzIG9mIHpvb20KICAg
ICAgICAgLy8gbGV2ZWwuCi0gICAgICAgIExheW91dFNpemUgc2l6ZSA9IGNhY2hlZEltYWdlLT5p
bWFnZVNpemUoMS4wZik7CisgICAgICAgIExheW91dFNpemUgc2l6ZSA9IGNhY2hlZEltYWdlLT5p
bWFnZVNpemUoZG9jdW1lbnQoKS0+aW1hZ2VFbGVtZW50KCktPnJlbmRlcmVyKCksIDEuMGYpOwog
ICAgICAgICBpZiAoc2l6ZS53aWR0aCgpKSB7CiAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSB0
aXRsZSwgd2UgdXNlIHRoZSBkZWNvZGVkIGZpbGVuYW1lIG9mIHRoZSByZXNvdXJjZSwgZmFsbGlu
ZwogICAgICAgICAgICAgLy8gYmFjayBvbiB0aGUgKGRlY29kZWQpIGhvc3RuYW1lIGlmIHRoZXJl
IGlzIG5vIHBhdGguCkBAIC0yMzMsNyArMjMzLDcgQEAgZmxvYXQgSW1hZ2VEb2N1bWVudDo6c2Nh
bGUoKSBjb25zdAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICBMYXlv
dXRTaXplIGltYWdlU2l6ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNp
emUocGFnZVpvb21GYWN0b3IodGhpcykpOworICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9p
bWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShtX2ltYWdlRWxlbWVudC0+cmVu
ZGVyZXIoKSwgcGFnZVpvb21GYWN0b3IodGhpcykpOwogICAgIExheW91dFNpemUgd2luZG93U2l6
ZSA9IEludFNpemUodmlldy0+d2lkdGgoKSwgdmlldy0+aGVpZ2h0KCkpOwogICAgIAogICAgIGZs
b2F0IHdpZHRoU2NhbGUgPSAoZmxvYXQpd2luZG93U2l6ZS53aWR0aCgpIC8gaW1hZ2VTaXplLndp
ZHRoKCk7CkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBJbWFnZURvY3VtZW50OjpyZXNpemVJbWFn
ZVRvRml0KCkKICAgICBpZiAoIW1faW1hZ2VFbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5p
bWFnZVNpemUocGFnZVpvb21GYWN0b3IodGhpcykpOworICAgIExheW91dFNpemUgaW1hZ2VTaXpl
ID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShtX2ltYWdlRWxlbWVu
dC0+cmVuZGVyZXIoKSwgcGFnZVpvb21GYWN0b3IodGhpcykpOwogCiAgICAgZmxvYXQgc2NhbGUg
PSB0aGlzLT5zY2FsZSgpOwogICAgIG1faW1hZ2VFbGVtZW50LT5zZXRXaWR0aChzdGF0aWNfY2Fz
dDxpbnQ+KGltYWdlU2l6ZS53aWR0aCgpICogc2NhbGUpKTsKQEAgLTI4Nyw3ICsyODcsNyBAQCB2
b2lkIEltYWdlRG9jdW1lbnQ6OmltYWdlVXBkYXRlZCgpCiAgICAgaWYgKG1faW1hZ2VTaXplSXNL
bm93bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJ
bWFnZSgpLT5pbWFnZVNpemUocGFnZVpvb21GYWN0b3IodGhpcykpLmlzRW1wdHkoKSkKKyAgICBp
ZiAobV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShtX2ltYWdlRWxlbWVu
dC0+cmVuZGVyZXIoKSwgcGFnZVpvb21GYWN0b3IodGhpcykpLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIG1faW1hZ2VTaXplSXNLbm93biA9IHRydWU7CkBAIC0zMDMsOCAr
MzAzLDkgQEAgdm9pZCBJbWFnZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VTaXplKCkKICAgICBpZiAo
IW1faW1hZ2VFbGVtZW50IHx8ICFtX2ltYWdlU2l6ZUlzS25vd24pCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBtX2ltYWdlRWxlbWVudC0+c2V0V2lkdGgobV9pbWFnZUVsZW1lbnQtPmNhY2hl
ZEltYWdlKCktPmltYWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSkud2lkdGgoKSk7Ci0gICAg
bV9pbWFnZUVsZW1lbnQtPnNldEhlaWdodChtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+
aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKHRoaXMpKS5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBp
bWFnZVNpemUgPSBtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKG1faW1h
Z2VFbGVtZW50LT5yZW5kZXJlcigpLCBwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CisgICAgbV9pbWFn
ZUVsZW1lbnQtPnNldFdpZHRoKGltYWdlU2l6ZS53aWR0aCgpKTsKKyAgICBtX2ltYWdlRWxlbWVu
dC0+c2V0SGVpZ2h0KGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYzsKICAgICBpZiAoaW1hZ2VGaXRzSW5XaW5kb3coKSkKQEAgLTMyNCw3ICszMjUsNyBAQCBi
b29sIEltYWdlRG9jdW1lbnQ6OmltYWdlRml0c0luV2luZG93KCkgCiAgICAgaWYgKCF2aWV3KQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFn
ZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSk7
CisgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2Uo
KS0+aW1hZ2VTaXplKG1faW1hZ2VFbGVtZW50LT5yZW5kZXJlcigpLCBwYWdlWm9vbUZhY3Rvcih0
aGlzKSk7CiAgICAgTGF5b3V0U2l6ZSB3aW5kb3dTaXplID0gTGF5b3V0U2l6ZSh2aWV3LT53aWR0
aCgpLCB2aWV3LT5oZWlnaHQoKSk7CiAgICAgCiAgICAgcmV0dXJuIGltYWdlU2l6ZS53aWR0aCgp
IDw9IHdpbmRvd1NpemUud2lkdGgoKSAmJiBpbWFnZVNpemUuaGVpZ2h0KCkgPD0gd2luZG93U2l6
ZS5oZWlnaHQoKTsgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIyMCw3ICsxMjIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmFwcGx5U2hhZAogc3RhdGljIExheW91dFNpemUgc2l6ZShIVE1MSW1hZ2VFbGVt
ZW50KiBpbWFnZSkKIHsKICAgICBpZiAoQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2Ut
PmNhY2hlZEltYWdlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZWRJbWFnZS0+aW1hZ2VTaXplKDEu
MGYpOyAvLyBGSVhNRTogTm90IHN1cmUgYWJvdXQgdGhpcy4KKyAgICAgICAgcmV0dXJuIGNhY2hl
ZEltYWdlLT5pbWFnZVNpemUoaW1hZ2UtPnJlbmRlcmVyKCksIDEuMGYpOyAvLyBGSVhNRTogTm90
IHN1cmUgYWJvdXQgdGhpcy4KICAgICByZXR1cm4gSW50U2l6ZSgpOwogfQogCkBAIC0xMzIwLDcg
KzEzMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAKICAg
ICBjaGVja09yaWdpbihpbWFnZSk7CiAKLSAgICBjLT5kcmF3SW1hZ2UoY2FjaGVkSW1hZ2UtPmlt
YWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIG5vcm1hbGl6ZWREc3RSZWN0LCBub3JtYWxpemVk
U3JjUmVjdCwgb3ApOworICAgIGMtPmRyYXdJbWFnZShpbWFnZS0+cmVuZGVyZXIoKSwgY2FjaGVk
SW1hZ2UtPmltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIG5vcm1hbGl6ZWREc3RSZWN0LCBu
b3JtYWxpemVkU3JjUmVjdCwgb3ApOwogICAgIGRpZERyYXcobm9ybWFsaXplZERzdFJlY3QpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEw
Nyw3ICszMTA3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbQog
ICAgIH0KICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKICAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0g
ICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdlLT53
aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsCisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdlLT53aWR0aCgwKSwgaW1hZ2UtPmhlaWdodCgwKSwg
MCwKICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpLCBlYyk7CiAg
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25t
ZW50KTsKQEAgLTMzMTYsNyArMzMxNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhTdWJJbWFnZTIKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
dGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1hZ2Ut
PndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwKKyAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lkdGgoMCksIGltYWdlLT5oZWlnaHQo
MCksCiAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSwgZWMp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5j
cHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDEwICsxNDYsMTAgQEAgSW1hZ2UqIENh
Y2hlZEltYWdlOjppbWFnZSgpIGNvbnN0CiAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsK
IH0KIAotdm9pZCBDYWNoZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNp
emUmIGNvbnRhaW5lclNpemUpCit2b2lkIENhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNp
emUoSW1hZ2VVc2VyIHVzZXIsIGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUpCiB7CiAgICAg
aWYgKG1faW1hZ2UpCi0gICAgICAgIG1faW1hZ2UtPnNldENvbnRhaW5lclNpemUoY29udGFpbmVy
U2l6ZSk7CisgICAgICAgIG1faW1hZ2UtPnNldENvbnRhaW5lclNpemUodXNlciwgY29udGFpbmVy
U2l6ZSk7CiB9CiAKIGJvb2wgQ2FjaGVkSW1hZ2U6OnVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBj
b25zdApAQCAtMTc2LDIwICsxNzYsMjIgQEAgYm9vbCBDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxh
dGl2ZUhlaWdodAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSW50U2l6ZSBDYWNoZWRJbWFnZTo6
aW1hZ2VTaXplKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0CitJbnRTaXplIENhY2hlZEltYWdlOjpp
bWFnZVNpemUoSW1hZ2VVc2VyIHVzZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKCFpc1B1cmdlYWJsZSgpKTsKIAogICAgIGlmICghbV9pbWFnZSkKICAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKKworICAgIEludFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZS0+c2l6ZSh1
c2VyKTsKICAgICBpZiAobXVsdGlwbGllciA9PSAxLjBmKQotICAgICAgICByZXR1cm4gbV9pbWFn
ZS0+c2l6ZSgpOwotICAgICAgICAKKyAgICAgICAgcmV0dXJuIGltYWdlU2l6ZTsKKwogICAgIC8v
IERvbid0IGxldCBpbWFnZXMgdGhhdCBoYXZlIGEgd2lkdGgvaGVpZ2h0ID49IDEgc2hyaW5rIGJl
bG93IDEgd2hlbiB6b29tZWQuCi0gICAgYm9vbCBoYXNXaWR0aCA9IG1faW1hZ2UtPnNpemUoKS53
aWR0aCgpID4gMDsKLSAgICBib29sIGhhc0hlaWdodCA9IG1faW1hZ2UtPnNpemUoKS5oZWlnaHQo
KSA+IDA7Ci0gICAgaW50IHdpZHRoID0gbV9pbWFnZS0+c2l6ZSgpLndpZHRoKCkgKiAobV9pbWFn
ZS0+aGFzUmVsYXRpdmVXaWR0aCgpID8gMS4wZiA6IG11bHRpcGxpZXIpOwotICAgIGludCBoZWln
aHQgPSBtX2ltYWdlLT5zaXplKCkuaGVpZ2h0KCkgKiAobV9pbWFnZS0+aGFzUmVsYXRpdmVIZWln
aHQoKSA/IDEuMGYgOiBtdWx0aXBsaWVyKTsKKyAgICBib29sIGhhc1dpZHRoID0gaW1hZ2VTaXpl
LndpZHRoKCkgPiAwOworICAgIGJvb2wgaGFzSGVpZ2h0ID0gaW1hZ2VTaXplLmhlaWdodCgpID4g
MDsKKyAgICBpbnQgd2lkdGggPSBpbWFnZVNpemUud2lkdGgoKSAqIChtX2ltYWdlLT5oYXNSZWxh
dGl2ZVdpZHRoKCkgPyAxLjBmIDogbXVsdGlwbGllcik7CisgICAgaW50IGhlaWdodCA9IGltYWdl
U2l6ZS5oZWlnaHQoKSAqIChtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpID8gMS4wZiA6IG11
bHRpcGxpZXIpOwogICAgIGlmIChoYXNXaWR0aCkKICAgICAgICAgd2lkdGggPSBtYXgoMSwgd2lk
dGgpOwogICAgIGlmIChoYXNIZWlnaHQpCkBAIC0xOTcsMzEgKzE5OSwzMyBAQCBJbnRTaXplIENh
Y2hlZEltYWdlOjppbWFnZVNpemUoZmxvYXQgbXVsCiAgICAgcmV0dXJuIEludFNpemUod2lkdGgs
IGhlaWdodCk7CiB9CiAKLUludFJlY3QgQ2FjaGVkSW1hZ2U6OmltYWdlUmVjdChmbG9hdCBtdWx0
aXBsaWVyKSBjb25zdAorSW50UmVjdCBDYWNoZWRJbWFnZTo6aW1hZ2VSZWN0KEltYWdlVXNlciB1
c2VyLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAogewogICAgIEFTU0VSVCghaXNQdXJnZWFibGUo
KSk7CiAKICAgICBpZiAoIW1faW1hZ2UpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAg
ICBJbnRSZWN0IGltYWdlUmVjdCA9IG1faW1hZ2UtPnJlY3QodXNlcik7CiAgICAgaWYgKG11bHRp
cGxpZXIgPT0gMS4wZiB8fCAoIW1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKSAmJiAhbV9pbWFn
ZS0+aGFzUmVsYXRpdmVIZWlnaHQoKSkpCi0gICAgICAgIHJldHVybiBtX2ltYWdlLT5yZWN0KCk7
CisgICAgICAgIHJldHVybiBpbWFnZVJlY3Q7CiAKICAgICBmbG9hdCB3aWR0aE11bHRpcGxpZXIg
PSAobV9pbWFnZS0+aGFzUmVsYXRpdmVXaWR0aCgpID8gMS4wZiA6IG11bHRpcGxpZXIpOwogICAg
IGZsb2F0IGhlaWdodE11bHRpcGxpZXIgPSAobV9pbWFnZS0+aGFzUmVsYXRpdmVIZWlnaHQoKSA/
IDEuMGYgOiBtdWx0aXBsaWVyKTsKIAogICAgIC8vIERvbid0IGxldCBpbWFnZXMgdGhhdCBoYXZl
IGEgd2lkdGgvaGVpZ2h0ID49IDEgc2hyaW5rIGJlbG93IDEgd2hlbiB6b29tZWQuCi0gICAgYm9v
bCBoYXNXaWR0aCA9IG1faW1hZ2UtPnJlY3QoKS53aWR0aCgpID4gMDsKLSAgICBib29sIGhhc0hl
aWdodCA9IG1faW1hZ2UtPnJlY3QoKS5oZWlnaHQoKSA+IDA7CisgICAgYm9vbCBoYXNXaWR0aCA9
IGltYWdlUmVjdC53aWR0aCgpID4gMDsKKyAgICBib29sIGhhc0hlaWdodCA9IGltYWdlUmVjdC5o
ZWlnaHQoKSA+IDA7CiAKLSAgICBpbnQgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KG1faW1hZ2Ut
PnJlY3QoKS53aWR0aCgpICogd2lkdGhNdWx0aXBsaWVyKTsKLSAgICBpbnQgaGVpZ2h0ID0gc3Rh
dGljX2Nhc3Q8aW50PihtX2ltYWdlLT5yZWN0KCkuaGVpZ2h0KCkgKiBoZWlnaHRNdWx0aXBsaWVy
KTsKKyAgICBpbnQgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KGltYWdlUmVjdC53aWR0aCgpICog
d2lkdGhNdWx0aXBsaWVyKTsKKyAgICBpbnQgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihpbWFn
ZVJlY3QuaGVpZ2h0KCkgKiBoZWlnaHRNdWx0aXBsaWVyKTsKICAgICBpZiAoaGFzV2lkdGgpCiAg
ICAgICAgIHdpZHRoID0gbWF4KDEsIHdpZHRoKTsKICAgICBpZiAoaGFzSGVpZ2h0KQogICAgICAg
ICBoZWlnaHQgPSBtYXgoMSwgaGVpZ2h0KTsKIAotICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50
PihtX2ltYWdlLT5yZWN0KCkueCgpICogd2lkdGhNdWx0aXBsaWVyKTsKLSAgICBpbnQgeSA9IHN0
YXRpY19jYXN0PGludD4obV9pbWFnZS0+cmVjdCgpLnkoKSAqIGhlaWdodE11bHRpcGxpZXIpOwor
ICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihpbWFnZVJlY3QueCgpICogd2lkdGhNdWx0aXBs
aWVyKTsKKyAgICBpbnQgeSA9IHN0YXRpY19jYXN0PGludD4oaW1hZ2VSZWN0LnkoKSAqIGhlaWdo
dE11bHRpcGxpZXIpOwogCiAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7
CiB9CkBAIC0yOTcsNyArMzAxLDcgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGF0YShQYXNzUmVmUHRy
PFNoYXJlZAogICAgIC8vIHRvIGRlY29kZS4KICAgICBpZiAoc2l6ZUF2YWlsYWJsZSB8fCBhbGxE
YXRhUmVjZWl2ZWQpIHsKICAgICAgICAgc2l6ZV90IG1heERlY29kZWRJbWFnZVNpemUgPSBtYXhp
bXVtRGVjb2RlZEltYWdlU2l6ZSgpOwotICAgICAgICBJbnRTaXplIHMgPSBpbWFnZVNpemUoMS4w
Zik7CisgICAgICAgIEludFNpemUgcyA9IGltYWdlU2l6ZSgwLCAxLjBmKTsKICAgICAgICAgc2l6
ZV90IGVzdGltYXRlZERlY29kZWRJbWFnZVNpemUgPSBzLndpZHRoKCkgKiBzLmhlaWdodCgpICog
NDsgLy8gbm8gb3ZlcmZsb3cgY2hlY2sKICAgICAgICAgaWYgKG1faW1hZ2UtPmlzTnVsbCgpIHx8
IChtYXhEZWNvZGVkSW1hZ2VTaXplID4gMCAmJiBlc3RpbWF0ZWREZWNvZGVkSW1hZ2VTaXplID4g
bWF4RGVjb2RlZEltYWdlU2l6ZSkpIHsKICAgICAgICAgICAgIGVycm9yKGVycm9yT2NjdXJyZWQo
KSA/IHN0YXR1cygpIDogRGVjb2RlRXJyb3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmgJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcg
QEAKICNkZWZpbmUgQ2FjaGVkSW1hZ2VfaAogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIK
KyNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTUwLDE4ICs1MSwxOCBAQCBwdWJs
aWM6CiAgICAgc3RkOjpwYWlyPEltYWdlKiwgZmxvYXQ+IGJyb2tlbkltYWdlKGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKSBjb25zdDsgLy8gUmV0dXJucyBhbiBpbWFnZSBhbmQgdGhlIGltYWdlJ3Mg
cmVzb2x1dGlvbiBzY2FsZSBmYWN0b3IuCiAgICAgYm9vbCB3aWxsUGFpbnRCcm9rZW5JbWFnZSgp
IGNvbnN0OyAKIAotICAgIGJvb2wgY2FuUmVuZGVyKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0IHsg
cmV0dXJuICFlcnJvck9jY3VycmVkKCkgJiYgIWltYWdlU2l6ZShtdWx0aXBsaWVyKS5pc0VtcHR5
KCk7IH0KKyAgICBib29sIGNhblJlbmRlcihmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCB7IHJldHVy
biAhZXJyb3JPY2N1cnJlZCgpICYmICFpbWFnZVNpemUoMCwgbXVsdGlwbGllcikuaXNFbXB0eSgp
OyB9CiAKICAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGZvciBTVkdJbWFnZSByaWdodCBub3cK
LSAgICB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdm9p
ZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoSW1hZ2VVc2VyLCBjb25zdCBJbnRTaXplJik7CiAgICAg
Ym9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBpbWFnZUhhc1Jl
bGF0aXZlV2lkdGgoKSBjb25zdDsKICAgICBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBj
b25zdDsKICAgICAKICAgICAvLyBCb3RoIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBhIHpvb20gbXVs
dGlwbGllciB0aGF0IGNhbiBiZSB1c2VkIHRvIGluY3JlYXNlIHRoZSBuYXR1cmFsIHNpemUgb2Yg
dGhlIGltYWdlIGJ5IHRoZQogICAgIC8vIHpvb20uCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoZmxv
YXQgbXVsdGlwbGllcikgY29uc3Q7ICAvLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21wbGV0
ZSBpbWFnZS4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChmbG9hdCBtdWx0aXBsaWVyKSBjb25zdDsg
IC8vIFRoZSBzaXplIG9mIHRoZSBjdXJyZW50bHkgZGVjb2RlZCBwb3J0aW9uIG9mIHRoZSBpbWFn
ZS4KKyAgICBJbnRTaXplIGltYWdlU2l6ZShJbWFnZVVzZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNv
bnN0OyAvLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBpbWFnZS4KKyAgICBJbnRS
ZWN0IGltYWdlUmVjdChJbWFnZVVzZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0OyAvLyBUaGUg
c2l6ZSBvZiB0aGUgY3VycmVudGx5IGRlY29kZWQgcG9ydGlvbiBvZiB0aGUgaW1hZ2UuCiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CiAgICAg
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gOTY2
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzg2LDcgKzc4Niw4IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VEcmFn
KEVsZW1lbnQKICAgICBJbnRQb2ludCBvcmlnaW47CiAKICAgICBJbWFnZSogaW1hZ2UgPSBnZXRJ
bWFnZShlbGVtZW50KTsKLSAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSAq
IGltYWdlLT5zaXplKCkud2lkdGgoKSA8PSBNYXhPcmlnaW5hbEltYWdlQXJlYQorICAgIEludFNp
emUgaW1hZ2VTaXplID0gaW1hZ2UtPnNpemUoZWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgaWYg
KGltYWdlICYmIGltYWdlU2l6ZS5oZWlnaHQoKSAqIGltYWdlU2l6ZS53aWR0aCgpIDw9IE1heE9y
aWdpbmFsSW1hZ2VBcmVhCiAgICAgICAgICYmIChkcmFnSW1hZ2UgPSBjcmVhdGVEcmFnSW1hZ2VG
cm9tSW1hZ2UoaW1hZ2UpKSkgewogICAgICAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZSA9IHJlY3Qu
c2l6ZSgpOwogICAgICAgICBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxMCw3ICsxMjEw
LDcgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzbwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgSW50UG9pbnQgaG90U3BvdCA9ICgqY3Vyc29y
cylbaV0uaG90U3BvdCgpOwogICAgICAgICAgICAgLy8gTGltaXQgdGhlIHNpemUgb2YgY3Vyc29y
cyBzbyB0aGF0IHRoZXkgY2Fubm90IGJlIHVzZWQgdG8gY292ZXIgVUkgZWxlbWVudHMgaW4gY2hy
b21lLgotICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gY2ltYWdlLT5pbWFnZSgpLT5zaXplKCk7
CisgICAgICAgICAgICBJbnRTaXplIHNpemUgPSBjaW1hZ2UtPmltYWdlKCktPnNpemUoMCk7CiAg
ICAgICAgICAgICBpZiAoc2l6ZS53aWR0aCgpID4gMTI4IHx8IHNpemUuaGVpZ2h0KCkgPiAxMjgp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIWNpbWFnZS0+ZXJy
b3JPY2N1cnJlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuY3BwCShyZXZpc2lv
biA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAgSW50UG9pbnQgZGV0ZXJtaW5lSG90U3BvdChJbWFnZSog
aW1hZ2UsIAogICAgICAgICByZXR1cm4gSW50UG9pbnQoKTsKIAogICAgIC8vIEhvdCBzcG90IG11
c3QgYmUgaW5zaWRlIGN1cnNvciByZWN0YW5nbGUuCi0gICAgSW50UmVjdCBpbWFnZVJlY3QgPSBp
bWFnZS0+cmVjdCgpOworICAgIEludFJlY3QgaW1hZ2VSZWN0ID0gaW1hZ2UtPnJlY3QoMCk7CiAg
ICAgaWYgKGltYWdlUmVjdC5jb250YWlucyhzcGVjaWZpZWRIb3RTcG90KSkKICAgICAgICAgcmV0
dXJuIHNwZWNpZmllZEhvdFNwb3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzQsOCArOTc0LDkgQEAgdm9pZCBTY3Jv
bGxWaWV3OjpwYWludFNjcm9sbGJhcnMoR3JhcGhpYwogCiB2b2lkIFNjcm9sbFZpZXc6OnBhaW50
UGFuU2Nyb2xsSWNvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7CisgICAgLy8gUGFzc2lu
ZyAwIGFzIEltYWdlVXNlciBhcyBmaW5lIGFzIHRoZSBwYW5JY29uIGlzIG5vdCBhIFNWRyBpbWFn
ZS4KICAgICBzdGF0aWMgSW1hZ2UqIHBhblNjcm9sbEljb24gPSBJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoInBhbkljb24iKS5sZWFrUmVmKCk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdlKHBh
blNjcm9sbEljb24sIENvbG9yU3BhY2VEZXZpY2VSR0IsIG1fcGFuU2Nyb2xsSWNvblBvaW50KTsK
KyAgICBjb250ZXh0LT5kcmF3SW1hZ2UoMCwgcGFuU2Nyb2xsSWNvbiwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgbV9wYW5TY3JvbGxJY29uUG9pbnQpOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtTWFjLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VD
aHJvbWl1bU1hYy5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1NYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDIsNyArMTAyLDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbQog
ewogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBDR0ltYWdl
Q3JlYXRlQ29weShpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CisgICAgcmV0
dXJuIENHSW1hZ2VDcmVhdGVDb3B5KGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgw
KSk7CiB9CiAKIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2Uo
Q2FjaGVkSW1hZ2UqKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJh
Z0ltYWdlQ2hyb21pdW1Ta2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWEuY3BwCShyZXZpc2lvbiA5NjY5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtU2tp
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0
ZURyYWdJbWFnZUZyb21JbWFnZShJbQogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgTmF0aXZlSW1hZ2VTa2lhKiBiaXRtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKKyAgICBOYXRpdmVJbWFnZVNraWEqIGJpdG1hcCA9IGltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICBpZiAoIWJpdG1hcCkKICAgICAgICAgcmV0
dXJuIDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9h
cmRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5v
ZGUqIG5vZGUsIAogICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOwogICAg
IEFTU0VSVChpbWFnZSk7CiAKLSAgICBOYXRpdmVJbWFnZVB0ciBiaXRtYXAgPSBpbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBiaXRtYXAgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUocmVuZGVyZXIpOwogICAgIGlmICghYml0
bWFwKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1BvcHVwTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUG9wdXBMaXN0Qm94LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cExpc3RCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00ODIsMTEgKzQ4MiwxMSBAQCB2b2lkIFBvcHVwTGlzdEJveDo6cGFpbnRSb3coR3Jh
cGhpY3NDb250CiAgICAgLy8gRHJhdyB0aGUgaWNvbiBpZiBhcHBsaWNhYmxlLgogICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2UoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGl0ZW1JY29uLnV0Zjgo
KS5kYXRhKCkpKTsKICAgICBpZiAoaW1hZ2UgJiYgIWltYWdlLT5pc051bGwoKSkgewotICAgICAg
ICBJbnRSZWN0IGltYWdlUmVjdCA9IGltYWdlLT5yZWN0KCk7CisgICAgICAgIEludFJlY3QgaW1h
Z2VSZWN0ID0gaW1hZ2UtPnJlY3QoMCk7CiAgICAgICAgIHJlbWFpbmluZ1dpZHRoIC09IChpbWFn
ZVJlY3Qud2lkdGgoKSArIGtMYWJlbFRvSWNvblBhZGRpbmcpOwogICAgICAgICBpbWFnZVJlY3Qu
c2V0WChyb3dSZWN0LndpZHRoKCkgLSByaWdodFBhZGRpbmcgLSBpbWFnZVJlY3Qud2lkdGgoKSk7
CiAgICAgICAgIGltYWdlUmVjdC5zZXRZKHJvd1JlY3QueSgpICsgKHJvd1JlY3QuaGVpZ2h0KCkg
LSBpbWFnZVJlY3QuaGVpZ2h0KCkpIC8gMik7Ci0gICAgICAgIGdjLT5kcmF3SW1hZ2UoaW1hZ2Uu
Z2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGltYWdlUmVjdCk7CisgICAgICAgIGdjLT5kcmF3
SW1hZ2UoMCwgaW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGltYWdlUmVjdCk7CiAg
ICAgfQogCiAgICAgLy8gRHJhdyB0aGUgdGhlIGxhYmVsIGlmIGFwcGxpY2FibGUuCkBAIC02Mjks
NyArNjI5LDcgQEAgaW50IFBvcHVwTGlzdEJveDo6Z2V0Um93SGVpZ2h0KGludCBpbmRleAogICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGljb24udXRm
OCgpLmRhdGEoKSkpOwogCiAgICAgaW50IGZvbnRIZWlnaHQgPSBnZXRSb3dGb250KGluZGV4KS5m
b250TWV0cmljcygpLmhlaWdodCgpOwotICAgIGludCBpY29uSGVpZ2h0ID0gKGltYWdlICYmICFp
bWFnZS0+aXNOdWxsKCkpID8gaW1hZ2UtPnJlY3QoKS5oZWlnaHQoKSA6IDA7CisgICAgaW50IGlj
b25IZWlnaHQgPSAoaW1hZ2UgJiYgIWltYWdlLT5pc051bGwoKSkgPyBpbWFnZS0+cmVjdCgwKS5o
ZWlnaHQoKSA6IDA7CiAKICAgICBpbnQgbGluZVBhZGRpbmdIZWlnaHQgPSBtX3BvcHVwQ2xpZW50
LT5tZW51U3R5bGUoKS5tZW51VHlwZSgpID09IFBvcHVwTWVudVN0eWxlOjpBdXRvZmlsbFBvcHVw
ID8ga0xpbmVQYWRkaW5nSGVpZ2h0IDogMDsKICAgICBpbnQgY2FsY3VsYXRlZFJvd0hlaWdodCA9
IG1heChmb250SGVpZ2h0LCBpY29uSGVpZ2h0KSArIGxpbmVQYWRkaW5nSGVpZ2h0ICogMjsKQEAg
LTgyNyw3ICs4MjcsNyBAQCB2b2lkIFBvcHVwTGlzdEJveDo6bGF5b3V0KCkKICAgICAgICAgaWYg
KGljb25JbWFnZSAmJiAhaWNvbkltYWdlLT5pc051bGwoKSkgewogICAgICAgICAgICAgaWYgKHdp
ZHRoID4gMCkKICAgICAgICAgICAgICAgICB3aWR0aCArPSBrTGFiZWxUb0ljb25QYWRkaW5nOwot
ICAgICAgICAgICAgd2lkdGggKz0gaWNvbkltYWdlLT5yZWN0KCkud2lkdGgoKTsKKyAgICAgICAg
ICAgIHdpZHRoICs9IGljb25JbWFnZS0+cmVjdCgwKS53aWR0aCgpOwogICAgICAgICB9CiAKICAg
ICAgICAgYmFzZVdpZHRoID0gbWF4KGJhc2VXaWR0aCwgd2lkdGgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MCw3ICsxMzAsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW06OnBhaW50VGlja21hCiAg
ICAgICAgIGNvbnN0IGludCB5UG9zID0gcmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAqIHBlcmNl
bnQpOwogCiAgICAgICAgIEludFBvaW50IHRpY2soc2Nyb2xsYmFyLT54KCksIHlQb3MpOwotICAg
ICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoZGFzaC5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
dGljayk7CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSgwLCBkYXNoLmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCB0aWNrKTsKICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRpZERlY29kZVByb3BlcnRpZXMoKSAKICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgZGVsdGFCeXRlcyk7CiB9CiAKLUludFNpemUg
Qml0bWFwSW1hZ2U6OnNpemUoKSBjb25zdAorSW50U2l6ZSBCaXRtYXBJbWFnZTo6c2l6ZShJbWFn
ZVVzZXIpIGNvbnN0CiB7CiAgICAgaWYgKG1fc2l6ZUF2YWlsYWJsZSAmJiAhbV9oYXZlU2l6ZSkg
ewogICAgICAgICBtX3NpemUgPSBtX3NvdXJjZS5zaXplKCk7CkBAIC0xODAsNyArMTgwLDcgQEAg
SW50U2l6ZSBCaXRtYXBJbWFnZTo6c2l6ZSgpIGNvbnN0CiBJbnRTaXplIEJpdG1hcEltYWdlOjpj
dXJyZW50RnJhbWVTaXplKCkgY29uc3QKIHsKICAgICBpZiAoIW1fY3VycmVudEZyYW1lIHx8IG1f
aGFzVW5pZm9ybUZyYW1lU2l6ZSkKLSAgICAgICAgcmV0dXJuIHNpemUoKTsKKyAgICAgICAgcmV0
dXJuIHNpemUoMCk7CiAgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBtX3NvdXJjZS5mcmFtZVNpemVB
dEluZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICBkaWREZWNvZGVQcm9wZXJ0aWVzKCk7CiAgICAg
cmV0dXJuIGZyYW1lU2l6ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyAr
MTE0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBJbnRTaXplIHNpemUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZShJbWFnZVVzZXIpIGNvbnN0OwogICAg
IEludFNpemUgY3VycmVudEZyYW1lU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRI
b3RTcG90KEludFBvaW50JikgY29uc3Q7CiAKQEAgLTE1MywxNCArMTUzLDE0IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIEdka1BpeGJ1ZiogZ2V0R2RrUGl4YnVmKCk7CiAjZW5kaWYKIAotICAgIHZp
cnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVy
biBmcmFtZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFn
ZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShJbWFnZVVzZXIpIHsgcmV0dXJuIGZyYW1l
QXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KICAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4
KHNpemVfdCk7CiAgICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0FscGhhKCkgeyByZXR1
cm4gZnJhbWVIYXNBbHBoYUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CiAKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgdmlydHVhbCBib29sIG5vdFNvbGlkQ29sb3IoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHNpemUoKS53aWR0aCgpICE9IDEgfHwgc2l6ZSgpLmhlaWdodCgpICE9IDEgfHwg
ZnJhbWVDb3VudCgpID4gMTsKKyAgICAgICAgcmV0dXJuIHNpemUoMCkud2lkdGgoKSAhPSAxIHx8
IHNpemUoMCkuaGVpZ2h0KCkgIT0gMSB8fCBmcmFtZUNvdW50KCkgPiAxOwogICAgIH0KICNlbmRp
ZgogCkBAIC0xNzUsMTIgKzE3NSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgQml0bWFwSW1hZ2UoSW1h
Z2VPYnNlcnZlciogPSAwKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1l
TWF0Y2hpbmdTb3VyY2VTaXplKEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lk
IGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoSW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAogI2lmIChP
UyhXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKSkKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJu
KEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwog
I2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRl
ZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMiArMjksMTEgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi11c2luZyBuYW1lc3BhY2Ug
c3RkOworI2luY2x1ZGUgIkxlbmd0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
R2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3KElt
YWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpjb250ZXh0KTsKICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9z
aXRlT3ApOwpAQCAtNDYsNyArNDUsNyBAQCB2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4CiAgICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
bV9zaXplKSwgKm1fZ2VuZXJhdG9yLmdldCgpKTsKIH0KIAotdm9pZCBHZW5lcmF0ZWRJbWFnZTo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKK3ZvaWQgR2Vu
ZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8g
QWxsb3cgdGhlIGdlbmVyYXRvciB0byBwcm92aWRlIHZpc3VhbGx5LWVxdWl2YWxlbnQgdGlsaW5n
IHBhcmFtZXRlcnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAkocmV2aXNpb24gOTY2
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMSArNDQsMjEgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBmb3IgU1ZHR2VuZXJhdGVkSW1hZ2UgcmlnaHQg
bm93Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSkgeyBtX3NpemUgPSBzaXplOyB9CisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBmb3IgU1ZH
SW1hZ2UgcmlnaHQgbm93CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRhaW5lclNpemUoSW1hZ2VV
c2VyLCBjb25zdCBJbnRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgdXNlc0NvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmly
dHVhbCBib29sIGhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBib29sIGhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAg
ICB2aXJ0dWFsIEludFNpemUgc2l6ZShJbWFnZVVzZXIpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQogCiAgICAgLy8gQXNzdW1lIHRoYXQgZ2VuZXJhdGVkIGNvbnRlbnQgaGFzIG5vIGRlY29kZWQg
ZGF0YSB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNv
ZGVkRGF0YShib29sIC8qZGVzdHJveUFsbCovID0gdHJ1ZSkgeyB9CiAgICAgdmlydHVhbCB1bnNp
Z25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhJbWFnZVVzZXIs
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZVVzZXIsIEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKICAgICAKICAgICBHZW5lcmF0ZWRJbWFn
ZShQYXNzUmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBzaXplKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
Niw3ICsxODYsOCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8vIFRoZSBpbWFnZSBkYXRhIGlzIHRp
Z2h0bHkgcGFja2VkLCBhbmQgd2UgdXBsb2FkIGl0IGFzIHN1Y2guCiAgICAgICAgIHVuc2lnbmVk
IGludCB1bnBhY2tBbGlnbm1lbnQgPSAxOwotICAgICAgICBmbGlwVmVydGljYWxseShkYXRhLmRh
dGEoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwKKyAgICAgICAgLy8gVGhpcyBt
ZXRob2QgaXMgbmV2ZXIgdXNlZCB0byBkcmF3IGFuIFNWR0ltYWdlLCBzbyBwYXNzaW5nIDAgYXMg
SW1hZ2VVc2VyIGlzIGZpbmUuCisgICAgICAgIGZsaXBWZXJ0aWNhbGx5KGRhdGEuZGF0YSgpLCBp
bWFnZS0+d2lkdGgoMCksIGltYWdlLT5oZWlnaHQoMCksCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICB1bnBhY2tBbGlnbm1lbnQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24g
OTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsMjcgKzQzNywyNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0hpZ2hsaWdodEZvclRlCiAgICAgZmlsbFJlY3QoZm9udC5zZWxlY3Rpb25S
ZWN0Rm9yVGV4dChydW4sIHBvaW50LCBoLCBmcm9tLCB0byksIGJhY2tncm91bmRDb2xvciwgY29s
b3JTcGFjZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGlt
YWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIHAsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZVVz
ZXIgdXNlciwgSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
SW50UG9pbnQmIHAsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewotICAgIGRyYXdJbWFnZShpbWFn
ZSwgc3R5bGVDb2xvclNwYWNlLCBwLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wKTsKKyAgICBk
cmF3SW1hZ2UodXNlciwgaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgcCwgSW50UmVjdCgwLCAwLCAt
MSwgLTEpLCBvcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2Uq
IGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgciwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZVVzZXIgdXNlciwgSW1hZ2UqIGltYWdlLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgciwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewotICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5
bGVDb2xvclNwYWNlLCByLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wLCB1c2VMb3dRdWFsaXR5
U2NhbGUpOworICAgIGRyYXdJbWFnZSh1c2VyLCBpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCByLCBJ
bnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Uo
SW1hZ2VVc2VyIHVzZXIsIEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IGNvbnN0IEludFBvaW50JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVP
cGVyYXRvciBvcCkKIHsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgSW50
UmVjdChkZXN0LCBzcmNSZWN0LnNpemUoKSksIHNyY1JlY3QsIG9wKTsKKyAgICBkcmF3SW1hZ2Uo
dXNlciwgaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgSW50UmVjdChkZXN0LCBzcmNSZWN0LnNpemUo
KSksIHNyY1JlY3QsIG9wKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJ
bWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBk
ZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1
c2VMb3dRdWFsaXR5U2NhbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdl
VXNlciB1c2VyLCBJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25z
dCBJbnRSZWN0JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7Ci0gICAgZHJhd0ltYWdlKGltYWdlLCBz
dHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVjdChkZXN0KSwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxp
dHlTY2FsZSk7CisgICAgZHJhd0ltYWdlKHVzZXIsIGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIEZs
b2F0UmVjdChkZXN0KSwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
YywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZVVzZXIgdXNlciwgSW1hZ2UqIGltYWdlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNj
YWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQogICAgICAgICBy
ZXR1cm47CkBAIC00NjgsMjYgKzQ2OCwyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlKiBpCiAgICAgZmxvYXQgdGggPSBkZXN0LmhlaWdodCgpOwogCiAgICAgaWYgKHRz
dyA9PSAtMSkKLSAgICAgICAgdHN3ID0gaW1hZ2UtPndpZHRoKCk7CisgICAgICAgIHRzdyA9IGlt
YWdlLT53aWR0aCh1c2VyKTsKICAgICBpZiAodHNoID09IC0xKQotICAgICAgICB0c2ggPSBpbWFn
ZS0+aGVpZ2h0KCk7CisgICAgICAgIHRzaCA9IGltYWdlLT5oZWlnaHQodXNlcik7CiAKICAgICBp
ZiAodHcgPT0gLTEpCi0gICAgICAgIHR3ID0gaW1hZ2UtPndpZHRoKCk7CisgICAgICAgIHR3ID0g
aW1hZ2UtPndpZHRoKHVzZXIpOwogICAgIGlmICh0aCA9PSAtMSkKLSAgICAgICAgdGggPSBpbWFn
ZS0+aGVpZ2h0KCk7CisgICAgICAgIHRoID0gaW1hZ2UtPmhlaWdodCh1c2VyKTsKIAogICAgIGlm
ICh1c2VMb3dRdWFsaXR5U2NhbGUpIHsKICAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgcHJl
dmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsK
ICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBJbnRlcnBvbGF0aW9uTG93CiAgICAgICAgIHNl
dEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbk5vbmUpOwotICAgICAgICBp
bWFnZS0+ZHJhdyh0aGlzLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcs
IHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSksIHN0
eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICBpbWFnZS0+ZHJhdyh1c2VyLCB0aGlzLCBGbG9h
dFJlY3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMu
bG9jYXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwog
ICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHByZXZpb3VzSW50ZXJwb2xhdGlv
blF1YWxpdHkpOwogICAgIH0gZWxzZQotICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBGbG9hdFJl
Y3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9j
YXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAg
ICAgICBpbWFnZS0+ZHJhdyh1c2VyLCB0aGlzLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBG
bG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRz
dywgdHNoKSksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UG9pbnQmIHNyY1BvaW50LCBjb25zdCBJ
bnRTaXplJiB0aWxlU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0
eVNjYWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlVXNlciB1
c2VyLCBJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBJbnRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEludFNpemUmIHRpbGVT
aXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCiAgICAgICAgIHJldHVybjsKQEAg
LTQ5NSwxMyArNDk1LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJ
bWEKICAgICBpZiAodXNlTG93UXVhbGl0eVNjYWxlKSB7CiAgICAgICAgIEludGVycG9sYXRpb25R
dWFsaXR5IHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KCk7CiAgICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvbkxvdyk7Ci0gICAgICAgIGltYWdlLT5kcmF3VGlsZWQodGhpcywgcmVjdCwgc3JjUG9pbnQs
IHRpbGVTaXplLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAgICAgaW1hZ2UtPmRyYXdUaWxl
ZCh1c2VyLCB0aGlzLCByZWN0LCBzcmNQb2ludCwgdGlsZVNpemUsIHN0eWxlQ29sb3JTcGFjZSwg
b3ApOwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHByZXZpb3VzSW50ZXJw
b2xhdGlvblF1YWxpdHkpOwogICAgIH0gZWxzZQotICAgICAgICBpbWFnZS0+ZHJhd1RpbGVkKHRo
aXMsIHJlY3QsIHNyY1BvaW50LCB0aWxlU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAg
ICAgIGltYWdlLT5kcmF3VGlsZWQodXNlciwgdGhpcywgcmVjdCwgc3JjUG9pbnQsIHRpbGVTaXpl
LCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdU
aWxlZEltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0
IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2VVc2VyIHVzZXIsIEltYWdlKiBpbWFnZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsCiAgICAgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpU
aWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSB8fCAhaW1hZ2UpCkBAIC01MDksMTcgKzUwOSwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1RpbGVkSW1hZ2UoSW1hCiAKICAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxl
ICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgewogICAgICAgICAvLyBKdXN0IGRvIGEg
c2NhbGUuCi0gICAgICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0LCBz
cmNSZWN0LCBvcCk7CisgICAgICAgIGRyYXdJbWFnZSh1c2VyLCBpbWFnZSwgc3R5bGVDb2xvclNw
YWNlLCBkZXN0LCBzcmNSZWN0LCBvcCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAodXNlTG93UXVhbGl0eVNjYWxlKSB7CiAgICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5IHBy
ZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCk7
CiAgICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbkxvdyk7
Ci0gICAgICAgIGltYWdlLT5kcmF3VGlsZWQodGhpcywgZGVzdCwgc3JjUmVjdCwgdGlsZVNjYWxl
RmFjdG9yLCBoUnVsZSwgdlJ1bGUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICBpbWFn
ZS0+ZHJhd1RpbGVkKHVzZXIsIHRoaXMsIGRlc3QsIHNyY1JlY3QsIHRpbGVTY2FsZUZhY3Rvciwg
aFJ1bGUsIHZSdWxlLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgc2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eShwcmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICB9IGVs
c2UKLSAgICAgICAgaW1hZ2UtPmRyYXdUaWxlZCh0aGlzLCBkZXN0LCBzcmNSZWN0LCB0aWxlU2Nh
bGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGlt
YWdlLT5kcmF3VGlsZWQodXNlciwgdGhpcywgZGVzdCwgc3JjUmVjdCwgdGlsZVNjYWxlRmFjdG9y
LCBoUnVsZSwgdlJ1bGUsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50JiBwLCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsMTUgKzMwMiwx
NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CiAKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2Uo
SW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmLCBDb21w
b3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwotICAgICAgICB2b2lkIGRyYXdJ
bWFnZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0Jiwg
Q29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxp
dHlTY2FsZSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsK
LSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBv
c2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2Nh
bGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLAorICAgICAgICB2b2lkIGRyYXdJ
bWFnZShJbWFnZVVzZXIsIEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0
IEludFBvaW50JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAg
ICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2VVc2VyLCBJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVT
b3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKKyAgICAgICAgdm9p
ZCBkcmF3SW1hZ2UoSW1hZ2VVc2VyLCBJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21w
b3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgICAgICB2b2lkIGRyYXdJ
bWFnZShJbWFnZVVzZXIsIEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVy
YXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFs
c2UpOworICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZVVzZXIsIEltYWdlKiwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLAogICAgICAgICAgICAgICAg
ICAgICAgICBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNl
TG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwotICAgICAgICB2b2lkIGRyYXdUaWxlZEltYWdlKElt
YWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBJbnRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLAorICAg
ICAgICB2b2lkIGRyYXdUaWxlZEltYWdlKEltYWdlVXNlciwgSW1hZ2UqLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBz
cmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
IENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFs
aXR5U2NhbGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsCisgICAgICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2VVc2Vy
LCBJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxl
ID0gSW1hZ2U6OlN0cmV0Y2hUaWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUgPSBJbWFnZTo6U3Ry
ZXRjaFRpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Ig
PSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAkocmV2
aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtODgsNyArODksNyBA
QCB2b2lkIEltYWdlOjpmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDCiAgICAgY3R4dC0+c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0b3IpOwogfQogCi12b2lkIEltYWdlOjpk
cmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgY29uc3QgRmxvYXRTaXplJiBzY2FsZWRUaWxl
U2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQor
dm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50
LCBjb25zdCBGbG9hdFNpemUmIHNjYWxlZFRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7ICAgIAogICAgIGlmIChtYXlGaWxsV2l0aFNv
bGlkQ29sb3IoKSkgewogICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3Qs
IHNvbGlkQ29sb3IoKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CkBAIC0xMDAsMTIgKzEwMSw3IEBA
IHZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGMKICAgICBBU1NFUlQoIWlz
Qml0bWFwSW1hZ2UoKSB8fCBub3RTb2xpZENvbG9yKCkpOwogI2VuZGlmCiAKLSAgICBGbG9hdFNp
emUgaW50cmluc2ljVGlsZVNpemUgPSBzaXplKCk7Ci0gICAgaWYgKGhhc1JlbGF0aXZlV2lkdGgo
KSkKLSAgICAgICAgaW50cmluc2ljVGlsZVNpemUuc2V0V2lkdGgoc2NhbGVkVGlsZVNpemUud2lk
dGgoKSk7Ci0gICAgaWYgKGhhc1JlbGF0aXZlSGVpZ2h0KCkpCi0gICAgICAgIGludHJpbnNpY1Rp
bGVTaXplLnNldEhlaWdodChzY2FsZWRUaWxlU2l6ZS5oZWlnaHQoKSk7Ci0KKyAgICBGbG9hdFNp
emUgaW50cmluc2ljVGlsZVNpemUgPSBzaXplKHVzZXIpOwogICAgIEZsb2F0U2l6ZSBzY2FsZShz
Y2FsZWRUaWxlU2l6ZS53aWR0aCgpIC8gaW50cmluc2ljVGlsZVNpemUud2lkdGgoKSwKICAgICAg
ICAgICAgICAgICAgICAgc2NhbGVkVGlsZVNpemUuaGVpZ2h0KCkgLyBpbnRyaW5zaWNUaWxlU2l6
ZS5oZWlnaHQoKSk7CiAKQEAgLTEyMSwxOSArMTE3LDE5IEBAIHZvaWQgSW1hZ2U6OmRyYXdUaWxl
ZChHcmFwaGljc0NvbnRleHQqIGMKICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0WSgoZGVzdFJl
Y3QueSgpIC0gb25lVGlsZVJlY3QueSgpKSAvIHNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgdmlz
aWJsZVNyY1JlY3Quc2V0V2lkdGgoZGVzdFJlY3Qud2lkdGgoKSAvIHNjYWxlLndpZHRoKCkpOwog
ICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRIZWlnaHQoZGVzdFJlY3QuaGVpZ2h0KCkgLyBzY2Fs
ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGRyYXcoY3R4dCwgZGVzdFJlY3QsIHZpc2libGVTcmNSZWN0
LCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAgICAgZHJhdyh1c2VyLCBjdHh0LCBkZXN0UmVj
dCwgdmlzaWJsZVNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSBBZmZpbmVU
cmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkp
OwogICAgIEZsb2F0UmVjdCB0aWxlUmVjdChGbG9hdFBvaW50KCksIGludHJpbnNpY1RpbGVTaXpl
KTsgICAgCi0gICAgZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IG9uZVRpbGVSZWN0LmxvY2F0aW9uKCksIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsK
KyAgICBkcmF3UGF0dGVybih1c2VyLCBjdHh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
b25lVGlsZVJlY3QubG9jYXRpb24oKSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwog
ICAgIAogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiB9CiAKIC8vIEZJWE1FOiBNZXJnZSB3aXRoIHRo
ZSBvdGhlciBkcmF3VGlsZWQgZXZlbnR1YWxseSwgc2luY2Ugd2UgbmVlZCBhIGNvbWJpbmF0aW9u
IG9mIGJvdGggZm9yIHNvbWUgdGhpbmdzLgotdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNz
Q29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsCit2b2lkIEltYWdlOjpkcmF3VGlsZWQoSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNz
Q29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsCiAgICAgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIFRpbGVSdWxl
IGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wKQogeyAgICAKICAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkp
IHsKQEAgLTE2MSwxMCArMTU3LDkgQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29u
dGV4dCogYwogICAgICAgICB2UGhhc2UgLT0gKGRzdFJlY3QuaGVpZ2h0KCkgLSBzY2FsZWRUaWxl
SGVpZ2h0KSAvIDI7IAogICAgIEZsb2F0UG9pbnQgcGF0dGVyblBoYXNlKGRzdFJlY3QueCgpIC0g
aFBoYXNlLCBkc3RSZWN0LnkoKSAtIHZQaGFzZSk7CiAgICAgCi0gICAgZHJhd1BhdHRlcm4oY3R4
dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGF0dGVyblBoYXNlLCBzdHlsZUNvbG9yU3Bh
Y2UsIG9wLCBkc3RSZWN0KTsKKyAgICBkcmF3UGF0dGVybih1c2VyLCBjdHh0LCBzcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwYXR0ZXJuUGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRzdFJl
Y3QpOwogCiAgICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIAotCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
MTEgKzMyLDExIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdl
U291cmNlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShNQUMpCiAj
aWZkZWYgX19PQkpDX18KQEAgLTY2LDE2ICs2NiwyMSBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrUGl4
YnVmIEdka1BpeGJ1ZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRmxvYXRT
aXplOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgU2hh
cmVkQnVmZmVyOwotY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogCiAvLyBUaGlzIGNsYXNzIGdldHMg
bm90aWZpZWQgd2hlbiBhbiBpbWFnZSBjcmVhdGVzIG9yIGRlc3Ryb3lzIGRlY29kZWQgZnJhbWVz
IGFuZCB3aGVuIGl0IGFkdmFuY2VzIGFuaW1hdGlvbiBmcmFtZXMuCiBjbGFzcyBJbWFnZU9ic2Vy
dmVyOwogCisvLyBUeXBpY2FsbHkgYSBSZW5kZXJPYmplY3QgcG9pbnRlciwgaWRlbnRpZnlpbmcg
dGhlIHVzZXIgb2YgdGhlIGltYWdlLiBUaGUgaW50cmluc2ljIHNpemUgb2YgYW4gU1ZHIGltYWdl
IG1heSBkZXBlbmQKKy8vIG9uIHRoZSBwbGFjZSB3aGVyZSBpdHMgZW1iZWRkZWQgLSB0aHVzIGEg
U1ZHSW1hZ2UgbWF5IHJlcG9ydCBkaWZmZXJlbnQgc2l6ZXMgZGVwZW5kaW5nIG9uIHRoZSAidXNl
ciIuCit0eXBlZGVmIGNvbnN0IHZvaWQqIEltYWdlVXNlcjsKKwogY2xhc3MgSW1hZ2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxJbWFnZT4gewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsK
ICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwpAQCAtODcsNiArOTIsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybVJlc291cmNlKGNv
bnN0IGNoYXIqIG5hbWUpOwogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJp
bmcmKTsgCiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgpIHsgcmV0dXJu
IGZhbHNlOyB9CiAKQEAgLTk1LDE4ICsxMDEsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAg
ICBzdGF0aWMgSW1hZ2UqIG51bGxJbWFnZSgpOwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZSgpLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gc2l6ZSgwKS5pc0VtcHR5KCk7IH0KIAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZm9y
IFNWR0ltYWdlIHJpZ2h0IG5vdwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJTaXplKGNv
bnN0IEludFNpemUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShJbWFn
ZVVzZXIsIGNvbnN0IEludFNpemUmKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNlc0NvbnRhaW5l
clNpemUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxh
dGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFz
UmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBJ
bnRTaXplIHNpemUoKSBjb25zdCA9IDA7Ci0gICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1
cm4gSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpOyB9Ci0gICAgaW50IHdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gc2l6ZSgpLndpZHRoKCk7IH0KLSAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gc2l6ZSgpLmhlaWdodCgpOyB9CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoSW1hZ2VVc2Vy
KSBjb25zdCA9IDA7CisgICAgSW50UmVjdCByZWN0KEltYWdlVXNlciB1c2VyKSBjb25zdCB7IHJl
dHVybiBJbnRSZWN0KEludFBvaW50KCksIHNpemUodXNlcikpOyB9CisgICAgaW50IHdpZHRoKElt
YWdlVXNlciB1c2VyKSBjb25zdCB7IHJldHVybiBzaXplKHVzZXIpLndpZHRoKCk7IH0KKyAgICBp
bnQgaGVpZ2h0KEltYWdlVXNlciB1c2VyKSBjb25zdCB7IHJldHVybiBzaXplKHVzZXIpLmhlaWdo
dCgpOyB9CiAgICAgdmlydHVhbCBib29sIGdldEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCiAgICAgYm9vbCBzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CkBAIC0xMzAsNyArMTM2LDcgQEAgcHVibGlj
OgogCiAgICAgZW51bSBUaWxlUnVsZSB7IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUsIFNwYWNlVGls
ZSwgUmVwZWF0VGlsZSB9OwogCi0gICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdl
UHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKEltYWdlVXNlcikgeyByZXR1cm4gMDsgfQog
ICAgIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBBY2Nlc3NvcnMgZm9yIG5hdGl2ZSBpbWFn
ZSBmb3JtYXRzLgpAQCAtMTU1LDcgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbWFnZT4gbG9hZFBsYXRmb3JtVGhlbWVJY29uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBz
aXplKTsKICNlbmRpZgogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLAorICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZVVzZXIs
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIAogI2lmICFBU1NF
UlRfRElTQUJMRUQKQEAgLTE2OSwxMSArMTc1LDExIEBAIHByb3RlY3RlZDoKIAogICAgIC8vIFRo
ZSBDb2xvclNwYWNlIHBhcmFtZXRlciB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgdW50YWdnZWQgaW1h
Z2VzLgogI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hp
bmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Y29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3Vy
Y2VTaXplKEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IpIHsgfQogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikg
PSAwOwotICAgIHZvaWQgZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7
Ci0gICAgdm9pZCBkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNj
YWxlRmFjdG9yLCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXco
SW1hZ2VVc2VyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yKSA9IDA7CisgICAgdm9pZCBkcmF3VGlsZWQoSW1hZ2VVc2VyLCBHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNy
Y1BvaW50LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZvaWQgZHJhd1RpbGVkKEltYWdlVXNlciwg
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBUaWxlUnVsZSBo
UnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvcik7CiAKICAgICAvLyBTdXBwb3J0aW5nIHRpbGVkIGRyYXdpbmcKICAgICB2aXJ0
dWFsIGJvb2wgbWF5RmlsbFdpdGhTb2xpZENvbG9yKCkgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTIs
NyArNjkyLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9CYWNrZwogdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7CiAg
ICAgaWYgKGltYWdlKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgbmV3SW1hZ2UgPSBpbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgQ0dJbWFnZVJlZiBuZXdJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICAgICAgaWYgKCFuZXdJ
bWFnZSkKICAgICAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
M0RDYWlyby5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKElt
YQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbWFnZVN1cmZhY2UgPSBkZWNv
ZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKTsKICAgICB9IGVsc2UgewotICAgICAgICBpbWFnZVN1
cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgaW1h
Z2VTdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApOwogICAgICAg
ICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBhbHBoYU9wID0gQWxwaGFEb1Vu
bXVsdGlwbHk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDk2
Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIEltYWdl
QnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiB7CiAgICAgLy8gQml0bWFwSW1hZ2Ugd2ls
bCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgogICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNhaXJvX3N1cmZhY2VfcmVmZXJl
bmNlKG1fZGF0YS5tX3N1cmZhY2UpKTsKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0
KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5
U2NhbGUpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZSgwLCBpbWFnZS5nZXQoKSwgc3R5bGVDb2xv
clNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAK
IHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDbwogewogICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFz
c2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
Qml0bWFwSW1hZ2U6OmNyZWF0ZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShtX2RhdGEubV9zdXJm
YWNlKSk7Ci0gICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgaW1h
Z2UtPmRyYXdQYXR0ZXJuKDAsIGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZm
ZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYgbG9va1Vw
VGFibGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUNhaXJvLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTIsNyArOTIsNyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoY2Fpcm9fc3VyZmFjZV90
CiAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAg
ICAgRmxvYXRSZWN0IHNyY1JlY3Qoc3JjKTsKICAgICBGbG9hdFJlY3QgZHN0UmVjdChkc3QpOwpA
QCAtMTI3LDE1ICsxMjcsMTUgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIAogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CiB9CiAKLXZvaWQg
SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAor
dm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFn
ZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBp
bWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHVzZXIpOwogICAgIGlmICghaW1hZ2Up
IC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAg
ICByZXR1cm47CiAKICAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpOwotICAgIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY3IsIGltYWdlLCBzaXplKCks
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgdG9DYWlyb09wZXJhdG9yKG9wKSwg
ZGVzdFJlY3QpOworICAgIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY3IsIGltYWdlLCBzaXpl
KHVzZXIpLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHRvQ2Fpcm9PcGVyYXRv
cihvcCksIGRlc3RSZWN0KTsKIAogICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCiAgICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAkocmV2aXNp
b24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0
ZXJuQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2Fpcm9fcGF0dGVybl90KiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3QKIHsKLSAgICBjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UgPSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoMCk7CiAgICAgaWYgKCFzdXJmYWNlKQogICAgICAgICByZXR1cm4gMDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
M0RDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJ
bWFnZURhdGEoSW1hCiAgICAgICAgIGRlY29kZWRJbWFnZS5hZG9wdENGKGRlY29kZXIuY3JlYXRl
RnJhbWVBdEluZGV4KDApKTsKICAgICAgICAgY2dJbWFnZSA9IGRlY29kZWRJbWFnZS5nZXQoKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgY2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOworICAgICAgICBjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKDApOwogICAgIGlmICghY2dJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDE0
ICsyMzgsMTQgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDbwogICAg
IGlmICghbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7CiAgICAgICAgIGlmIChj
b250ZXh0ID09IG1fY29udGV4dCkgewogICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0g
Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZm
ZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oY29u
dGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIGRlc3RSZWN0KTsKKyAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKDAsIGNvbnRleHQs
IHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBk
ZXN0UmVjdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAg
ICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwor
ICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKDAsIGNvbnRleHQsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0
UmVjdCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBSZWZQdHI8SW1hZ2U+IGNv
cHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGNvcHktPmRyYXdQYXR0
ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9y
U3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKDAsIGNvbnRl
eHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9w
LCBkZXN0UmVjdCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTgyLDcgKzE4Miw3IEBAIFJldGFpblB0cjxDRkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0
Q0cKICAgICByZXR1cm4gUmV0YWluUHRyPENGQXJyYXlSZWY+KEFkb3B0Q0YsIGFycmF5KTsKIH0K
IAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRt
YXBJbWFnZTo6ZHJhdyhJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgc3Rh
cnRBbmltYXRpb24oKTsKIApAQCAtMjA5LDEwICsyMDksMTEgQEAgc3RhdGljIHZvaWQgZHJhd1Bh
dHRlcm5DYWxsYmFjayh2b2lkKiBpbgogICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBH
cmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwg
MCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpKSwgaW1h
Z2UpOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEltYWdlVXNlciB1c2VyLCBHcmFw
aGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKCFu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKQorICAgIENHSW1hZ2VSZWYgdGlsZUltYWdlID0g
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUodXNlcik7CisgICAgaWYgKCF0aWxlSW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJs
ZSgpKTsKQEAgLTIzNSwxNiArMjM2LDE1IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCoKICAgICBmbG9hdCBhZGp1c3RlZFggPSBwaGFzZS54KCkgLSBkZXN0UmVjdC54
KCkgKyB0aWxlUmVjdC54KCkgKiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zv
cm0uYSgpKTsgLy8gV2UgdHJhbnNsYXRlZCB0aGUgY29udGV4dCBzbyB0aGF0IGRlc3RSZWN0Lngo
KSBpcyB0aGUgb3JpZ2luLCBzbyBzdWJ0cmFjdCBpdCBvdXQuCiAgICAgZmxvYXQgYWRqdXN0ZWRZ
ID0gZGVzdFJlY3QuaGVpZ2h0KCkgLSAocGhhc2UueSgpIC0gZGVzdFJlY3QueSgpICsgdGlsZVJl
Y3QueSgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmQoKSkgKyBz
Y2FsZWRUaWxlSGVpZ2h0KTsKIAotICAgIENHSW1hZ2VSZWYgdGlsZUltYWdlID0gbmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBmbG9hdCBoID0gQ0dJbWFnZUdldEhlaWdodCh0aWxl
SW1hZ2UpOwogCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHN1YkltYWdlOwotICAgIGlmICh0
aWxlUmVjdC5zaXplKCkgPT0gc2l6ZSgpKQorICAgIGlmICh0aWxlUmVjdC5zaXplKCkgPT0gc2l6
ZSh1c2VyKSkKICAgICAgICAgc3ViSW1hZ2UgPSB0aWxlSW1hZ2U7CiAgICAgZWxzZSB7CiAgICAg
ICAgIC8vIENvcHlpbmcgYSBzdWItaW1hZ2Ugb3V0IG9mIGEgcGFydGlhbGx5LWRlY29kZWQgaW1h
Z2Ugc3RvcHMgdGhlIGRlY29kaW5nIG9mIHRoZSBvcmlnaW5hbCBpbWFnZS4gSXQgc2hvdWxkIG5l
dmVyIGhhcHBlbgogICAgICAgICAvLyBiZWNhdXNlIHN1Yi1pbWFnZXMgYXJlIG9ubHkgdXNlZCBm
b3IgYm9yZGVyLWltYWdlLCB3aGljaCBvbmx5IHJlbmRlcnMgd2hlbiB0aGUgaW1hZ2UgaXMgZnVs
bHkgZGVjb2RlZC4KLSAgICAgICAgQVNTRVJUKGggPT0gaGVpZ2h0KCkpOworICAgICAgICBBU1NF
UlQoaCA9PSBoZWlnaHQodXNlcikpOwogICAgICAgICBzdWJJbWFnZS5hZG9wdENGKENHSW1hZ2VD
cmVhdGVXaXRoSW1hZ2VJblJlY3QodGlsZUltYWdlLCB0aWxlUmVjdCkpOwogICAgIH0KIApAQCAt
MjU4LDkgKzI1OCw5IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoK
ICAgICBmbG9hdCBzY2FsZWRUaWxlV2lkdGggPSB0aWxlUmVjdC53aWR0aCgpICogbmFycm93UHJl
Y2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7CiAgICAgZmxvYXQgdyA9IENHSW1h
Z2VHZXRXaWR0aCh0aWxlSW1hZ2UpOwogI2lmZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKLSAgICBp
ZiAodyA9PSBzaXplKCkud2lkdGgoKSAmJiBoID09IHNpemUoKS5oZWlnaHQoKSAmJiBzY2FsZWRU
aWxlV2lkdGggPT0gdGlsZVJlY3Qud2lkdGgoKSAmJiBzY2FsZWRUaWxlSGVpZ2h0ID09IHRpbGVS
ZWN0LmhlaWdodCgpKQorICAgIGlmICh3ID09IHNpemUodXNlcikud2lkdGgoKSAmJiBoID09IHNp
emUodXNlcikuaGVpZ2h0KCkgJiYgc2NhbGVkVGlsZVdpZHRoID09IHRpbGVSZWN0LndpZHRoKCkg
JiYgc2NhbGVkVGlsZUhlaWdodCA9PSB0aWxlUmVjdC5oZWlnaHQoKSkKICNlbHNlCi0gICAgaWYg
KHcgPT0gc2l6ZSgpLndpZHRoKCkgJiYgaCA9PSBzaXplKCkuaGVpZ2h0KCkpCisgICAgaWYgKHcg
PT0gc2l6ZSh1c2VyKS53aWR0aCgpICYmIGggPT0gc2l6ZSh1c2VyKS5oZWlnaHQoKSkKICNlbmRp
ZgogICAgICAgICBDR0NvbnRleHREcmF3VGlsZWRJbWFnZShjb250ZXh0LCBGbG9hdFJlY3QoYWRq
dXN0ZWRYLCBhZGp1c3RlZFksIHNjYWxlZFRpbGVXaWR0aCwgc2NhbGVkVGlsZUhlaWdodCksIHN1
YkltYWdlLmdldCgpKTsKICAgICBlbHNlIHsKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIEltYWdl
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0
cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChwYXR0
ZXJuVHJhbnNmb3JtLmEoKSksIDAsIDAsIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChwYXR0ZXJu
VHJhbnNmb3JtLmQoKSksIGFkanVzdGVkWCwgYWRqdXN0ZWRZKTsKICAgICBtYXRyaXggPSBDR0Fm
ZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQ29udGV4dEdldENUTShjb250ZXh0KSk7CiAg
ICAgLy8gVGhlIHRvcCBvZiBhIHBhcnRpYWxseS1kZWNvZGVkIGltYWdlIGlzIGRyYXduIGF0IHRo
ZSBib3R0b20gb2YgdGhlIHRpbGUuIE1hcCBpdCB0byB0aGUgdG9wLgotICAgIG1hdHJpeCA9IENH
QWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRlKG1hdHJpeCwgMCwgc2l6ZSgpLmhlaWdodCgpIC0gaCk7
CisgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUobWF0cml4LCAwLCBzaXpl
KHVzZXIpLmhlaWdodCgpIC0gaCk7CiAgICAgUmV0YWluUHRyPENHUGF0dGVyblJlZj4gcGF0dGVy
bihBZG9wdENGLCBDR1BhdHRlcm5DcmVhdGUoc3ViSW1hZ2UuZ2V0KCksIENHUmVjdE1ha2UoMCwg
MCwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCkpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LCB0aWxlUmVjdC53aWR0aCgpLCB0
aWxlUmVjdC5oZWlnaHQoKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrQ0dQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nLCB0cnVlLCAmcGF0dGVybkNh
bGxiYWNrcykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgU3RyaW5nIFBERkRvY3VtZW50SW1hZ2U6OmZp
bGVuYW1lRXh0ZW5zaQogICAgIHJldHVybiAicGRmIjsKIH0KIAotSW50U2l6ZSBQREZEb2N1bWVu
dEltYWdlOjpzaXplKCkgY29uc3QKK0ludFNpemUgUERGRG9jdW1lbnRJbWFnZTo6c2l6ZShJbWFn
ZVVzZXIpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgc2luYSA9IHNpbmYoLW1fcm90YXRpb24p
OwogICAgIGNvbnN0IGZsb2F0IGNvc2EgPSBjb3NmKC1tX3JvdGF0aW9uKTsKQEAgLTE1NSw3ICsx
NTUsNyBAQCBpbnQgUERGRG9jdW1lbnRJbWFnZTo6cGFnZUNvdW50KCkgY29uc3QKICAgICByZXR1
cm4gbV9kb2N1bWVudCA/IENHUERGRG9jdW1lbnRHZXROdW1iZXJPZlBhZ2VzKG1fZG9jdW1lbnQp
IDogMDsKIH0KIAotdm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBQREZEb2N1bWVudElt
YWdlOjpkcmF3KEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50IHx8IG1fY3VycmVudFBh
Z2UgPT0gLTEpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgJKHJldmlzaW9uIDk2
Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJ
bWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgLypkZXN0
cm95QWxsKi8gPSB0cnVlKSB7IH0KICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZShJbWFnZVVzZXIpIGNvbnN0Owog
CiAgICAgICAgIFBERkRvY3VtZW50SW1hZ2UoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXco
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIHNldEN1cnJlbnRQYWdlKGludCk7CiAgICAgICAgIGludCBwYWdlQ291bnQo
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRl
cm5DRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIHN0YXRpYyB2b2lkIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sodm9pZCoKIAogQ0dQYXR0
ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdAogewotICAgIEludFJlY3QgdGlsZVJl
Y3QgPSB0aWxlSW1hZ2UoKS0+cmVjdCgpOworICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlSW1h
Z2UoKS0+cmVjdCgwKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0g
dXNlclNwYWNlVHJhbnNmb3JtYXRpb24gKiBtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uOwog
ICAgIHBhdHRlcm5UcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKDEsIC0xKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNv
bkNocm9taXVtLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw3ICs1Miw3IEBAIHZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXgKIAog
ICAgIC8vIEFuIEljb24gZG9lc24ndCBrbm93IHRoZSBjb2xvciBzcGFjZSBvZiB0aGUgZmlsZSB1
cGxvYWQgY29udHJvbC4KICAgICAvLyBTbyB1c2UgQ29sb3JTcGFjZURldmljZVJHQi4KLSAgICBj
b250ZXh0LT5kcmF3SW1hZ2UobV9pY29uLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZWN0
KTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UoMCwgbV9pY29uLmdldCgpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCByZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzNCwxMSArMTM0LDExIEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVt
OjpzZXRDb250ZW50cyhJbWEKICAgICAvLyBzdHlsZSBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBs
YXllciBldmVuIGlmIHRoYXQgY2hhbmdlIGRvZXNuJ3QKICAgICAvLyBhZmZlY3QgdGhlIGFjdHVh
bCBjb250ZW50cyBvZiB0aGUgaW1hZ2UgKGUuZy4gYSBDU1MgYW5pbWF0aW9uKS4KICAgICAvLyBX
aXRoIHRoaXMgY2hlY2sgaW4gcGxhY2Ugd2UgYXZvaWQgdW5lY2Vzc2FyeSB0ZXh0dXJlIHVwbG9h
ZHMuCi0gICAgaWYgKChtX2NvbnRlbnRzID09IGNvbnRlbnRzKSAmJiAobV9jb250ZW50cy0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSA9PSBtX2ltYWdlRm9yQ3VycmVudEZyYW1lKSkKKyAg
ICBpZiAoKG1fY29udGVudHMgPT0gY29udGVudHMpICYmIChtX2NvbnRlbnRzLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgwKSA9PSBtX2ltYWdlRm9yQ3VycmVudEZyYW1lKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9jb250ZW50cyA9IGNvbnRlbnRzOwotICAgIG1faW1hZ2VGb3JDdXJy
ZW50RnJhbWUgPSBtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAg
IG1faW1hZ2VGb3JDdXJyZW50RnJhbWUgPSBtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgwKTsKICAgICBtX2RpcnR5UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIGJv
dW5kcygpKTsKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KQEAgLTE0Niw3ICsxNDYsNyBAQCB2
b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoSW1hCiB2b2lkIEltYWdlTGF5ZXJD
aHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogewogICAgIGlmICghbV9kaXJ0eVJlY3Qu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZUZyb21JbWFnZSht
X2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKKyAgICAgICAgbV90ZXh0
dXJlVXBkYXRlci0+dXBkYXRlRnJvbUltYWdlKG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKDApKTsKICAgICAgICAgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKTsK
ICAgICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsK
ICAgICAgICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpIHsKQEAgLTE3MCw3ICsxNzAsNyBA
QCBJbnRTaXplIEltYWdlTGF5ZXJDaHJvbWl1bTo6Y29udGVudEJvdW5kCiB7CiAgICAgaWYgKCFt
X2NvbnRlbnRzKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotICAgIHJldHVybiBtX2NvbnRl
bnRzLT5zaXplKCk7CisgICAgcmV0dXJuIG1fY29udGVudHMtPnNpemUoMCk7CiB9CiAKIGJvb2wg
SW1hZ2VMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAJKHJldmlzaW9uIDk2Njk4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTcsNyArMTQ1Nyw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYWludCgKICAgICBpZiAoIWdz
dEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVpbnRl
cnByZXRfY2FzdDxJbWFnZSo+KGdzdEltYWdlLT5pbWFnZSgpLmdldCgpKSwgQ29sb3JTcGFjZVNS
R0IsCisgICAgY29udGV4dC0+ZHJhd0ltYWdlKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8SW1hZ2UqPihn
c3RJbWFnZS0+aW1hZ2UoKS5nZXQoKSksIENvbG9yU3BhY2VTUkdCLAogICAgICAgICAgICAgICAg
ICAgICAgICByZWN0LCBDb21wb3NpdGVDb3B5LCBmYWxzZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJl
TWFwcGVyR0wuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MTcsNyArNjE3LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZQog
ICAgICAgICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7CiAgICAgICAgIGlmICghZm91bmQp
IHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGJlZ2luUGFpbnQoSW50UmVj
dCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKSk7
Ci0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJH
QiwgSW50UG9pbnQoMCwgMCksIENvbXBvc2l0ZUNvcHkpOworICAgICAgICAgICAgY29udGV4dC5k
cmF3SW1hZ2UoMCwgaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApLCBD
b21wb3NpdGVDb3B5KTsKICAgICAgICAgICAgIGVuZFBhaW50KCk7CiAgICAgICAgIH0KICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVu
VkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW52Zy9JbWFnZU9wZW5WRy5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksNyArODksNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQog
ICAgIFRpbGVkSW1hZ2VPcGVuVkcqIHRpbGVkSW1hZ2UgPSAwOwogCiAgICAgaWYgKG1fZnJhbWVD
b3VudCA9PSAxICYmIG1fc2l6ZS53aWR0aCgpID09IDEgJiYgbV9zaXplLmhlaWdodCgpID09IDEp
Ci0gICAgICAgIHRpbGVkSW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAg
ICAgICB0aWxlZEltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiAKICAgICBp
ZiAodGlsZWRJbWFnZSkgewogICAgICAgICBtX2lzU29saWRDb2xvciA9IHRydWU7CkBAIC0xMjks
MTIgKzEyOSwxMiBAQCBzdGF0aWMgdm9pZCBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsCiB9
CiAjZW5kaWYKIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhJbWFnZVVzZXIgdXNlciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAoZHN0LmlzRW1wdHkoKSB8
fCBzcmMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBOYXRpdmVJbWFnZVB0ciBp
bWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgTmF0aXZlSW1hZ2VQdHIg
aW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKICAgICBpZiAoIWltYWdl
KQogICAgICAgICByZXR1cm47CiAKQEAgLTE1NSwxNyArMTU1LDE3IEBAIHZvaWQgQml0bWFwSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKIAogICAgIEZsb2F0UmVjdCBzcmNSZWN0TG9jYWwo
c3JjKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIGFkanVz
dFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoc3JjUmVjdExvY2FsLCBzaXplKCksIGltYWdlLT5z
aXplKCkpOworICAgIGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoc3JjUmVjdExvY2Fs
LCBzaXplKHVzZXIpLCBpbWFnZS0+c2l6ZSgpKTsKICNlbmRpZgogCi0gICAgY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmFjdGl2ZVBhaW50ZXIoKS0+ZHJhd0ltYWdlKGltYWdlLCBkc3QsIHNy
Y1JlY3RMb2NhbCk7CisgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmFjdGl2ZVBhaW50
ZXIoKS0+ZHJhd0ltYWdlKHVzZXIsIGltYWdlLCBkc3QsIHNyY1JlY3RMb2NhbCk7CiAgICAgY29u
dGV4dC0+cmVzdG9yZSgpOwogCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgaW1h
Z2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLAordm9pZCBJ
bWFnZTo6ZHJhd1BhdHRlcm4oSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm1hdGlvbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBG
bG9hdFJlY3QmIGRzdCkKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqCiAgICAgaWYgKGRzdC5pc0VtcHR5KCkgfHwgc3JjLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlID0gbmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUodXNlcik7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0
dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU2Nyw3ICsxNTY3LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0SW1hZ2VEYXRhKEltYQogICAgIGlmIChpbWFnZS0+ZGF0YSgpKQogICAgICAgICBu
YXRpdmVJbWFnZSA9IFFJbWFnZTo6ZnJvbURhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1Y2hh
cio+KGltYWdlLT5kYXRhKCktPmRhdGEoKSksIGltYWdlLT5kYXRhKCktPnNpemUoKSkuY29udmVy
dFRvRm9ybWF0KFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CiAgICAgZWxzZSB7Ci0gICAgICAgIFFQ
aXhtYXAqIG5hdGl2ZVBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OworICAgICAgICBRUGl4bWFwKiBuYXRpdmVQaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoMCk7CiAgICAgICAgIG5hdGl2ZUltYWdlID0gbmF0aXZlUGl4bWFwLT50b0lt
YWdlKCkuY29udmVydFRvRm9ybWF0KFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CiAgICAgfQogICAg
IEFscGhhT3AgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9Ob3RoaW5nOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dFF0LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2OCw3ICs2
NjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgU2hh
ZG93Qmx1ciogc2hhZG93ID0gc2hhZG93Qmx1cigpOwogCiAgICAgaWYgKG1fc3RhdGUuZmlsbFBh
dHRlcm4pIHsKLSAgICAgICAgUVBpeG1hcCogaW1hZ2UgPSBtX3N0YXRlLmZpbGxQYXR0ZXJuLT50
aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgUVBpeG1h
cCogaW1hZ2UgPSBtX3N0YXRlLmZpbGxQYXR0ZXJuLT50aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoMCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4
dCA9IGhhc1NoYWRvdygpID8gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6
ZWRSZWN0KSA6IDA7CiAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CiAgICAgICAgICAgICBR
UGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXll
clF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0xheWVyUXQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMjYsNyArMTIyNiw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXRDb250ZW50c1Rv
SW1hZ2UKICAgICBtX2ltcGwtPm1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBHcmFwaGlj
c0xheWVyUXRJbXBsOjpIVE1MQ29udGVudFR5cGU7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNUb0ltYWdlKGltYWdlKTsKICAgICBpZiAoaW1hZ2UpIHsKLSAgICAgICAgUVBpeG1hcCog
cHhtID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFQaXht
YXAqIHB4bSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKTsKICAgICAgICAg
aWYgKHB4bSkgewogICAgICAgICAgICAgbV9pbXBsLT5tX3BlbmRpbmdDb250ZW50LnBpeG1hcCA9
ICpweG07CiAgICAgICAgICAgICBtX2ltcGwtPm1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUg
PSBHcmFwaGljc0xheWVyUXRJbXBsOjpQaXhtYXBDb250ZW50VHlwZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3Bw
CShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsOSArMTMzLDkgQEAgdm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIGlmIChkZXN0Q29udGV4
dCA9PSBjb250ZXh0KCkpIHsKICAgICAgICAgLy8gV2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24g
YnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBz
b3VyY2UgYnVmZmVyIGZpcnN0LgogICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1h
Z2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UoY29w
eS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VM
b3dRdWFsaXR5U2NhbGUpOworICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKDAsIGNvcHku
Z2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93
UXVhbGl0eVNjYWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFn
ZShtX2RhdGEubV9pbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1h
Z2UoMCwgbV9kYXRhLm1faW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKQEAgLTE0
NCwxNCArMTQ0LDE0IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ28K
ICAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7CiAgICAgICAgIC8vIFdlJ3JlIGRy
YXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdl
IG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KICAgICAgICAgUmVmUHRyPElt
YWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBjb3B5LT5k
cmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAgY29weS0+ZHJhd1BhdHRl
cm4oMCwgZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHls
ZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fZGF0YS5t
X2ltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAgbV9kYXRh
Lm1faW1hZ2UtPmRyYXdQYXR0ZXJuKDAsIGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogfQogCiB2b2lk
IEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBmbG9hdFJlY3QpIGNvbnN0CiB7Ci0gICAgUVBpeG1hcCogbmF0aXZlSW1hZ2UgPSBtX2Rh
dGEubV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBRUGl4bWFwKiBu
YXRpdmVJbWFnZSA9IG1fZGF0YS5tX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgw
KTsKICAgICBpZiAoIW5hdGl2ZUltYWdlKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCShyZXZpc2lv
biA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBQYXNzUmVmUHRyPEltYWdl
PiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzCiAgICAgcmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZShs
b2FkUmVzb3VyY2VQaXhtYXAobmFtZSkpOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJu
KEltYWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBR
UGl4bWFwKiBmcmFtZVBpeG1hcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
UVBpeG1hcCogZnJhbWVQaXhtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsK
ICAgICBpZiAoIWZyYW1lUGl4bWFwKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZl
IGFuIGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9p
ZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YQogfQogCiAvLyBEcmF3aW5nIFJv
dXRpbmVzCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3QsCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEltYWdlVXNlciB1c2Vy
LCBHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LAogICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIFFSZWN0RiBub3JtYWxpemVkRHN0
ID0gZHN0Lm5vcm1hbGl6ZWQoKTsKQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIEJpdG1hcEltYWdl
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgaWYgKG5vcm1hbGl6ZWRTcmMuaXNFbXB0eSgp
IHx8IG5vcm1hbGl6ZWREc3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBRUGl4
bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgUVBpeG1hcCog
aW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKICAgICBpZiAoIWltYWdl
KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1BhdHRlcm5RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUUJydXNoIFBhdHRlcm46
OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdAogewot
ICAgIFFQaXhtYXAqIHBpeG1hcCA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOworICAgIFFQaXhtYXAqIHBpeG1hcCA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgwKTsKICAgICBpZiAoIXBpeG1hcCkKICAgICAgICAgcmV0dXJuIFFCcnVz
aCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbElt
YWdlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L1N0aWxsSW1hZ2VRdC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIsMTcgKzUyLDE3IEBAIFN0aWxsSW1hZ2U6On5TdGlsbEltYWdlKCkKICAgICAgICAgZGVsZXRl
IG1fcGl4bWFwOwogfQogCi1JbnRTaXplIFN0aWxsSW1hZ2U6OnNpemUoKSBjb25zdAorSW50U2l6
ZSBTdGlsbEltYWdlOjpzaXplKEltYWdlVXNlcikgY29uc3QKIHsKICAgICByZXR1cm4gSW50U2l6
ZShtX3BpeG1hcC0+d2lkdGgoKSwgbV9waXhtYXAtPmhlaWdodCgpKTsKIH0KIAotTmF0aXZlSW1h
Z2VQdHIgU3RpbGxJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQorTmF0aXZlSW1h
Z2VQdHIgU3RpbGxJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoSW1hZ2VVc2VyKQog
ewogICAgIHJldHVybiBjb25zdF9jYXN0PE5hdGl2ZUltYWdlUHRyPihtX3BpeG1hcCk7CiB9CiAK
LXZvaWQgU3RpbGxJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0LAordm9pZCBTdGlsbEltYWdlOjpkcmF3KEltYWdlVXNlciwgR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7
CiAgICAgaWYgKG1fcGl4bWFwLT5pc051bGwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oCShyZXZpc2lvbiA5NjY5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwgPSB0cnVl
KSB7IFFfVU5VU0VEKGRlc3Ryb3lBbGwpOyB9CiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgZGVj
b2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICAgICAgdmlydHVhbCBJbnRTaXpl
IHNpemUoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICAg
ICAgdmlydHVhbCBJbnRTaXplIHNpemUoSW1hZ2VVc2VyKSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShJbWFnZVVzZXIpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgU3RpbGxJbWFnZShjb25zdCBRUGl4bWFwJiBwaXhtYXApOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVy
UXQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcg
QEAgdm9pZCBCaXRtYXBUZXh0dXJlUXQ6OnNldENvbnRlbnRzVG9JbWFnZQogewogICAgIGlmICgh
aW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdCBRUGl4bWFwKiBwaXhtYXAgPSBpbWFn
ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBjb25zdCBRUGl4bWFwKiBwaXht
YXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiAgICAgaWYgKCFwaXht
YXApCiAgICAgICAgIHJldHVybjsKICAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChwaXhtYXAtPnNp
emUoKSwgIXBpeG1hcC0+aGFzQWxwaGFDaGFubmVsKCkpOwpAQCAtMjU4LDcgKzI1OCw3IEBAIFBh
c3NPd25QdHI8QkdSQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IEIKIAogdWludDY0X3QgdWlkRm9y
SW1hZ2UoSW1hZ2UqIGltYWdlKQogewotICAgIHJldHVybiBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKS0+c2VyaWFsTnVtYmVyKCk7CisgICAgcmV0dXJuIGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgwKS0+c2VyaWFsTnVtYmVyKCk7CiB9CiAjZW5kaWYKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2lu
Z2xlRnJhbWVTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCShyZXZpc2lvbiA5NjY5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5n
bGVGcmFtZVNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKSB7IHJldHVybiAhbV9uYXRp
dmVJbWFnZS5iaXRtYXAoKS5pc09wYXF1ZSgpOyB9CiAKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoSW1hZ2VVc2VyKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIEludFNpemUobV9uYXRpdmVJbWFnZS5iaXRtYXAoKS53aWR0aCgp
LCBtX25hdGl2ZUltYWdlLmJpdG1hcCgpLmhlaWdodCgpKTsKICAgICB9CkBAIC02OSw3ICs2OSw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBXZSBvbmx5IGhhdmUgYSBzaW5nbGUgZnJhbWUu
Ci0gICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShJ
bWFnZVVzZXIpCiAgICAgewogICAgICAgICByZXR1cm4gJm1fbmF0aXZlSW1hZ2U7CiAgICAgfQpA
QCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEltYWdlVXNlciwgR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAK
IHByaXZhdGU6CiAgICAgTmF0aXZlSW1hZ2VTa2lhIG1fbmF0aXZlSW1hZ2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHQzRFNraWEuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJ
bWFnZURhdGEoSW1hCiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IE93blB0cjxOYXRpdmVJbWFnZVNraWE+IHBpeGVsczsKLSAgICBOYXRpdmVJbWFnZVNraWEqIHNr
aWFJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIE5hdGl2
ZUltYWdlU2tpYSogc2tpYUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KDApOwogICAgIEFscGhhT3AgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9Ob3RoaW5nOwogICAgIGJv
b2wgaGFzQWxwaGEgPSBza2lhSW1hZ2UgPyAhc2tpYUltYWdlLT5iaXRtYXAoKS5pc09wYXF1ZSgp
IDogdHJ1ZTsKICAgICBpZiAoKCFza2lhSW1hZ2UgfHwgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYgaW1hZ2UtPmRhdGEoKSkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZl
clNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MCwxNCArMTYwLDE0IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiAKICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBC
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2RhdGEubV9wbGF0Zm9ybUNvbnRl
eHQuYml0bWFwKCksIGNvbnRleHQgPT0gbV9jb250ZXh0KTsKLSAgICBjb250ZXh0LT5kcmF3SW1h
Z2UoaW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1
c2VMb3dRdWFsaXR5U2NhbGUpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZSgwLCBpbWFnZS5nZXQo
KSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlT
Y2FsZSk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2RhdGEu
bV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCksIGNvbnRleHQgPT0gbV9jb250ZXh0KTsKLSAgICBp
bWFnZS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICBpbWFnZS0+ZHJhd1BhdHRl
cm4oMCwgY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29s
b3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJsZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tp
YS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNyArMjg4LDcgQEAg
Ym9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LAordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgZmxv
YXRTcmNSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsCkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KgogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgbm9ybVNyY1Jl
Y3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47IC8vIG5vdGhpbmcgdG8gZHJhdwogCi0gICAg
TmF0aXZlSW1hZ2VTa2lhKiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgIE5hdGl2ZUltYWdlU2tpYSogYml0bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
dXNlcik7CiAgICAgaWYgKCFiaXRtYXApCiAgICAgICAgIHJldHVybjsKIApAQCAtMzkxLDcgKzM5
MSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAKICAgICBXZWJD
b3JlOjpOYXRpdmVJbWFnZVNraWEqIGZyYW1lID0gZnJhbWVBdEluZGV4KDApOwogCi0gICAgaWYg
KGZyYW1lICYmIHNpemUoKS53aWR0aCgpID09IDEgJiYgc2l6ZSgpLmhlaWdodCgpID09IDEpIHsK
KyAgICBpZiAoZnJhbWUgJiYgc2l6ZSgwKS53aWR0aCgpID09IDEgJiYgc2l6ZSgwKS5oZWlnaHQo
KSA9PSAxKSB7CiAgICAgICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhmcmFtZS0+Yml0bWFwKCkp
OwogICAgICAgICBpZiAoIWZyYW1lLT5iaXRtYXAoKS5nZXRQaXhlbHMoKSkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTQwMSw3ICs0MDEsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNv
bGlkQ29sb3IoKQogICAgIH0KIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwKK3ZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoSW1hZ2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3ApCiB7CiAgICAgaWYgKCFtX3NvdXJjZS5pbml0aWFsaXplZCgpKQpAQCAtNDEyLDcgKzQxMiw3
IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAvLyBjYXVz
aW5nIGZsaWNrZXIgYW5kIHdhc3RpbmcgQ1BVLgogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiAKLSAg
ICBOYXRpdmVJbWFnZVNraWEqIGJtID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICBOYXRpdmVJbWFnZVNraWEqIGJtID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUodXNlcik7
CiAgICAgaWYgKCFibSkKICAgICAgICAgcmV0dXJuOyAgLy8gSXQncyB0b28gZWFybHkgYW5kIHdl
IGRvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogCkBAIC00MzQsNyArNDM0LDcgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogCiAvLyBGSVhNRTogVGhlc2Ugc2hvdWxk
IGdvIGludG8gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuY3BwCiAKLXZvaWQgQml0bWFwSW1h
Z2VTaW5nbGVGcmFtZVNraWE6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LAordm9pZCBCaXRt
YXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyhJbWFnZVVzZXIsIEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHAJKHJldmlzaW9u
IDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJu
U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgUGxhdGZvcm1QYXR0ZXJu
UHRyIFBhdHRlcm46OnBsYXRmb3JtUGF0dAogICAgIC8vIGFuZCBleHBhbmRlZCBzY2FsZSBhbmQg
c2tldyBpbjoKICAgICAvLyBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEvcHNlcnZlcnMtZ3Jh
ZC0wNi1iLnN2ZwogCi0gICAgY29uc3QgTmF0aXZlSW1hZ2VTa2lhKiBpbWFnZSA9IG1fdGlsZUlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGNvbnN0IE5hdGl2ZUltYWdl
U2tpYSogaW1hZ2UgPSBtX3RpbGVJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7
CiAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGJpdG1hcCwgcmV0dXJuIGEgdHJhbnNwYXJlbnQg
c2hhZGVyLgogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIG1fcGF0dGVybiA9IG5ldyBTa0NvbG9y
U2hhZGVyKFNrQ29sb3JTZXRBUkdCKDAsIDAsIDAsIDApKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODAsNyArMjgwLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudChUZQog
ICAgICAgICAgICAgRmxvYXRSZWN0IHNjYWxlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKICAg
ICAgICAgICAgIHNjYWxlZENvbnRlbnRSZWN0LnNjYWxlKDEuMCAvIG1fc3RhdGUuY29udGVudFNj
YWxlKTsKICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERp
cmVjdEltYWdlQ29udGVudFR5cGUpCi0gICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2Uo
bV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9p
bnQoMCwgMCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKDAsIG1fY3VycmVu
dENvbnRlbnQuaW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDAp
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRHcmFwaGlj
c0xheWVyQ29udGVudHMoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChzY2FsZWRDb250ZW50UmVj
dCkpOwogICAgICAgICAgICAgdGV4dHVyZS0+ZW5kUGFpbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTm9kZS5oCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYs
NyArMjA2LDcgQEAgcHJpdmF0ZToKIAogICAgIEZsb2F0U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBE
aXJlY3RJbWFnZUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPyBtX2N1cnJl
bnRDb250ZW50LmltYWdlLT5zaXplKCkgOiBtX3NpemU7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUgJiYgbV9jdXJy
ZW50Q29udGVudC5pbWFnZSA/IG1fY3VycmVudENvbnRlbnQuaW1hZ2UtPnNpemUoMCkgOiBtX3Np
emU7CiAgICAgfQogICAgIHN0cnVjdCBUaWxlIHsKICAgICAgICAgRmxvYXRSZWN0IHJlY3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
Q0dXaW4uY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTEgKzc0LDEx
IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE0KICAgCiAgICAgR3Jh
cGhpY3NDb250ZXh0IGdjKGNnQ29udGV4dCk7CiAKLSAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJp
dG1hcEltYWdlOjpzaXplKCk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6
c2l6ZSgwKTsKICAgICBpZiAoc2l6ZSkKLSAgICAgICAgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VT
aXplKCZnYywgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5i
bUhlaWdodCksIEludFNpemUoKnNpemUpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVD
b3B5KTsKKyAgICAgICAgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKDAsICZnYywgRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEludFNp
emUoKnNpemUpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKICAgICBlbHNl
Ci0gICAgICAgIGRyYXcoJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRo
LCBibXBJbmZvLmJtSGVpZ2h0KSwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0
aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVD
b3B5KTsKKyAgICAgICAgZHJhdygwLCAmZ2MsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJbmZv
LmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VT
aXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENv
bXBvc2l0ZUNvcHkpOwogCiAgICAgLy8gRG8gY2xlYW51cAogICAgIENHQ29udGV4dFJlbGVhc2Uo
Y2dDb250ZXh0KTsKQEAgLTg2LDcgKzg2LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1B
UE9mU2l6ZShIQklUTQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpk
cmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQml0bWFw
SW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShJbWFnZVVzZXIgdXNlciwgR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUm
IHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcCkKIHsKICAgICBzaXplX3QgZnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKQEAgLTk0LDE1ICs5NCwxNSBAQCB2
b2lkIEJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjCiAgICAgICAgIGlmIChDR0lt
YWdlR2V0SGVpZ2h0KGltYWdlKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNyY1NpemUuaGVpZ2h0
KCkpICYmIENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzcmNT
aXplLndpZHRoKCkpKSB7CiAgICAgICAgICAgICBzaXplX3QgY3VycmVudEZyYW1lID0gbV9jdXJy
ZW50RnJhbWU7CiAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGk7Ci0gICAgICAgICAgICBk
cmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBzcmNTaXplLndpZHRoKCks
IHNyY1NpemUuaGVpZ2h0KCkpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICAg
ICAgICAgIGRyYXcodXNlciwgY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIHNy
Y1NpemUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9z
aXRlT3ApOwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBjdXJyZW50RnJhbWU7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBObyBpbWFnZSBvZiB0
aGUgY29ycmVjdCBzaXplIHdhcyBmb3VuZCwgZmFsbGJhY2sgdG8gZHJhd2luZyB0aGUgY3VycmVu
dCBmcmFtZQotICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKLSAg
ICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lk
dGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7
CisgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSh1c2VyKTsKKyAgICBk
cmF3KHVzZXIsIGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUu
d2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVP
cCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAJKHJldmlz
aW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
Q2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIFBhc3NSZWZQdHI8
Qml0bWFwSW1hZ2U+IEJpdG1hcEltYWdlOjpjcmUKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJp
dG1hcEltYWdlKGltYWdlKSk7CiB9CiAKLWJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNp
emUoSEJJVE1BUCBibXAsIExQU0laRSBzaXplKQorYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1B
UE9mU2l6ZShIQklUTUFQIGJtcG4sIExQU0laRSBzaXplKQogewogICAgIEFTU0VSVChibXApOwog
CkBAIC04MCwxMSArODAsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShI
QklUTQogCiAgICAgR3JhcGhpY3NDb250ZXh0IGdjKHRhcmdldFJlZik7CiAKLSAgICBJbnRTaXpl
IGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUg
PSBCaXRtYXBJbWFnZTo6c2l6ZSgwKTsKICAgICBpZiAoc2l6ZSkKLSAgICAgICAgZHJhd0ZyYW1l
TWF0Y2hpbmdTb3VyY2VTaXplKCZnYywgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1X
aWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEludFNpemUoKnNpemUpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXpl
KDAsICZnYywgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5i
bUhlaWdodCksIEludFNpemUoKnNpemUpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVD
b3B5KTsKICAgICBlbHNlCi0gICAgICAgIGRyYXcoJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwg
Ym1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgRmxvYXRSZWN0KDAuMGYsIDAuMGYs
IGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgZHJhdygwLCAmZ2MsIEZsb2F0UmVjdCgwLjBm
LCAwLjBmLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMC4w
ZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOwogCiAgICAgLy8gRG8gY2xlYW51cAogICAgIGNh
aXJvX2Rlc3Ryb3kodGFyZ2V0UmVmKTsKQEAgLTkyLDcgKzkyLDcgQEAgYm9vbCBCaXRtYXBJbWFn
ZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEJp
dG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkK
K3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShJbWFnZVVzZXIg
dXNlciwgR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBzaXplX3QgZnJhbWVzID0gZnJhbWVDb3Vu
dCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKQEAgLTEwMCwx
NSArMTAwLDE1IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmMKICAg
ICAgICAgaWYgKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpbWFnZSkgPT0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzcmNTaXplLmhlaWdodCgpKSAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF93aWR0aChpbWFnZSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzcmNTaXplLndpZHRoKCkpKSB7
CiAgICAgICAgICAgICBzaXplX3QgY3VycmVudEZyYW1lID0gbV9jdXJyZW50RnJhbWU7CiAgICAg
ICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGk7Ci0gICAgICAgICAgICBkcmF3KGN0eHQsIGRzdFJl
Y3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBzcmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0
KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBjb21wb3NpdGVPcCk7CisgICAgICAgICAgICBkcmF3
KHVzZXIsIGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBzcmNTaXplLndpZHRo
KCksIHNyY1NpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBjb21wb3NpdGVPcCk7
CiAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vIGltYWdlIG9mIHRoZSBjb3Jy
ZWN0IHNpemUgd2FzIGZvdW5kLCBmYWxsYmFjayB0byBkcmF3aW5nIHRoZSBjdXJyZW50IGZyYW1l
Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwotICAgIGRyYXco
Y3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBp
bWFnZVNpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBjb21wb3NpdGVPcCk7Cisg
ICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSh1c2VyKTsKKyAgICBkcmF3
KHVzZXIsIGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lk
dGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgY29tcG9zaXRl
T3ApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNF
LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAs
NyBAQCB2b2lkIEJ1ZmZlcmVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0CiB2b2lkIEJ1ZmZl
cmVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgbV9kYXRhLT5tX2JpdG1hcC0+ZHJhd1BhdHRlcm4o
Y3R4dCwgdGlsZVJlY3RJbiwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFj
ZSwgb3AsIGRlc3RSZWN0LCBzaXplKCkpOworICAgIG1fZGF0YS0+bV9iaXRtYXAtPmRyYXdQYXR0
ZXJuKDAsIGN0eHQsIHRpbGVSZWN0SW4sIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNv
bG9yU3BhY2UsIG9wLCBkZXN0UmVjdCwgc2l6ZSgpKTsKIH0KIAogSW1hZ2VCdWZmZXJEYXRhOjpJ
bWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTExMyw3ICsxMTMsNyBAQCB2
b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgICAgICAgICAg
ICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wICwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7
CiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNw
YWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgY29u
dGV4dC0+ZHJhd0ltYWdlKDAsIGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKIHZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZVdpbkNFLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9J
bWFnZVdpbkNFLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTEg
Kzc2LDExIEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE0KICAgICB7
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhoZGMuZ2V0KCkpOwogCi0gICAgICAgIEludFNp
emUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKKyAgICAgICAgSW50U2l6ZSBpbWFn
ZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgwKTsKICAgICAgICAgaWYgKHNpemUpCi0gICAgICAg
ICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMCwgMCwgYm1w
SW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAgICAgICAgZHJhd0ZyYW1lTWF0Y2hp
bmdTb3VyY2VTaXplKDAsICZnYywgRmxvYXRSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0aCwgYm1w
SW5mby5ibUhlaWdodCksIEludFNpemUoKnNpemUpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21w
b3NpdGVDb3B5KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhdygmZ2MsIEZsb2F0UmVj
dCgwLCAwLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMCwg
MCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAgICAgICAgZHJhdygwLCAmZ2MsIEZsb2F0UmVj
dCgwLCAwLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMCwg
MCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIENvbXBvc2l0ZUNvcHkpOwogICAgIH0KIAogICAgIFNlbGVjdE9iamVjdChoZGMuZ2V0
KCksIGhPbGRCbXApOwpAQCAtODgsNyArODgsNyBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklU
TUFQT2ZTaXplKEhCSVRNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6
OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRt
YXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEltYWdlVXNlciB1c2VyLCBHcmFw
aGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6
ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wKQogewogICAgIGludCBmcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBmcmFtZXM7ICsraSkgewpAQCAtOTgsMTcgKzk4LDE3IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmMKIAogICAgICAgICBzaXplX3QgY3Vy
cmVudEZyYW1lID0gbV9jdXJyZW50RnJhbWU7CiAgICAgICAgIG1fY3VycmVudEZyYW1lID0gaTsK
LSAgICAgICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMCwgMCwgc3JjU2l6ZS53aWR0
aCgpLCBzcmNTaXplLmhlaWdodCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7Cisg
ICAgICAgIGRyYXcodXNlciwgY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAsIDAsIHNyY1NpemUu
d2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3Ap
OwogICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIC8vIE5vIGltYWdlIG9mIHRoZSBjb3JyZWN0IHNpemUgd2FzIGZvdW5k
LCBmYWxsYmFjayB0byBkcmF3aW5nIHRoZSBjdXJyZW50IGZyYW1lCi0gICAgSW50U2l6ZSBpbWFn
ZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwotICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxv
YXRSZWN0KDAsIDAsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBzdHls
ZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1h
cEltYWdlOjpzaXplKHVzZXIpOworICAgIGRyYXcodXNlciwgY3R4dCwgZHN0UmVjdCwgRmxvYXRS
ZWN0KDAsIDAsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBzdHlsZUNv
bG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFw
aGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0SW4sIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoSW1hZ2VVc2VyLCBHcmFw
aGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0SW4sIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTEzMywxNiArMTMzLDE2IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBzdGFydEFuaW1hdGlvbigpOwogfQogCi12b2lkIElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKK3ZvaWQg
SW1hZ2U6OmRyYXdQYXR0ZXJuKEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3UGF0dGVybihJbWFnZVVzZXIgdXNlciwgR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgUmVmUHRy
PFNoYXJlZEJpdG1hcD4gYm1wID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBS
ZWZQdHI8U2hhcmVkQml0bWFwPiBibXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2Vy
KTsKICAgICBpZiAoIWJtcCkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkocmV2
aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFn
ZUJ1ZmZlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDE0ICsxMDQsMTQgQEAgdm9pZCBJ
bWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICAgICAgICAgICAgICAg
ICBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0g
ICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgY29udGV4dC0+
ZHJhd0ltYWdlKDAsIGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQogewogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKENv
cHlCYWNraW5nU3RvcmUpOwotICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3Jj
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RS
ZWN0KTsKKyAgICBpbWFnZUNvcHktPmRyYXdQYXR0ZXJuKDAsIGNvbnRleHQsIHNyY1JlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiB9
CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBW
ZWN0b3I8aW50PiYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9JbWFnZVd4LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcs
NyBAQCB2b2lkIEJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1EYXRhKCkKIAogLy8gRHJhd2luZyBS
b3V0aW5lcwogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEltYWdlVXNlciwgR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRz
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE3NywxNCArMTc3LDE0IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgb2JzZXJ2ZXItPmRpZERyYXcodGhpcyk7CiB9
CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oSW1h
Z2VVc2VyIHVzZXIsIEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0KQogewogI2lmIFVTRShXWEdDKQogICAgIHd4R0NEQyogY29udGV4dCA9ICh3
eEdDREMqKWN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHd4R3JhcGhpY3NCaXRtYXAqIGJp
dG1hcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgd3hHcmFwaGljc0JpdG1h
cCogYml0bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUodXNlcik7CiAjZWxzZQogICAg
IHd4V2luZG93REMqIGNvbnRleHQgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICB3eEJp
dG1hcCogYml0bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICB3eEJpdG1h
cCogYml0bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUodXNlcik7CiAjZW5kaWYKIAog
ICAgIGlmICghYml0bWFwKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGlt
YWdlIHlldC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VH
dGsuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9E
cmFnSW1hZ2VHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIERyYWdJbWFn
ZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24KIAogRHJhZ0ltYWdlUmVmIGNyZWF0ZURy
YWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1hZ2UpCiB7Ci0gICAgcmV0dXJuIGNhaXJvX3N1cmZh
Y2VfcmVmZXJlbmNlKGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKKyAgICBy
ZXR1cm4gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UoaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKDApKTsKIH0KIAogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNo
ZWRJbWFnZShDYWNoZWRJbWFnZSopCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RHJhZ0ltYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9EcmFnSW1hZ2VNYWMubW0JKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBA
QCBSZXRhaW5QdHI8TlNJbWFnZT4gZGlzc29sdmVEcmFnSW1hZ2VUb0ZyCiBSZXRhaW5QdHI8TlNJ
bWFnZT4gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSkKIHsKICAgICBSZXRh
aW5QdHI8TlNJbWFnZT4gZHJhZ0ltYWdlKEFkb3B0TlMsIFtpbWFnZS0+Z2V0TlNJbWFnZSgpIGNv
cHldKTsKLSAgICBbZHJhZ0ltYWdlLmdldCgpIHNldFNpemU6KE5TU2l6ZSkoaW1hZ2UtPnNpemUo
KSldOworICAgIFtkcmFnSW1hZ2UuZ2V0KCkgc2V0U2l6ZTooTlNTaXplKShpbWFnZS0+c2l6ZSgw
KSldOwogICAgIHJldHVybiBkcmFnSW1hZ2U7CiB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCShyZXZpc2lvbiA5NjY5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU0LDcgKzI1NCw3IEBAIERyYWdJbWFnZVJlZiBDbGlwYm9hcmRRdDo6Y3JlYXRlRHJhZ0ltYWcK
ICAgICBpZiAoIW1fZHJhZ0ltYWdlKQogICAgICAgICByZXR1cm4gMDsKICAgICBkcmFnTG9jID0g
bV9kcmFnTG9jOwotICAgIHJldHVybiBtX2RyYWdJbWFnZS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKKyAgICByZXR1cm4gbV9kcmFnSW1hZ2UtPmltYWdlKCktPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApOwogfQogCiAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lk
IENsaXBib2FyZFF0OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hCiAgICAgQ2FjaGVkSW1hZ2UqIGNh
Y2hlZEltYWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7CiAgICAgaWYgKCFjYWNoZWRJbWFn
ZSB8fCAhY2FjaGVkSW1hZ2UtPmltYWdlKCkgfHwgIWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgUVBpeG1hcCogcGl4bWFwID0gY2FjaGVkSW1hZ2UtPmltYWdl
KCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgUVBpeG1hcCogcGl4bWFwID0g
Y2FjaGVkSW1hZ2UtPmltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGVsZW1lbnQt
PnJlbmRlcmVyKCkpOwogICAgIGlmIChwaXhtYXApCiAgICAgICAgIG1fd3JpdGFibGVEYXRhLT5z
ZXRJbWFnZURhdGEoKnBpeG1hcCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L0N1cnNvclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
dXJzb3JRdC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvQ3Vyc29yUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMCArNzUsMTAgQEAgQ3Vyc29y
JiBDdXJzb3I6Om9wZXJhdG9yPShjb25zdCBDdXJzb3ImIAogI2lmbmRlZiBRVF9OT19DVVJTT1IK
IHN0YXRpYyBRQ3Vyc29yKiBjcmVhdGVDdXN0b21DdXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJ
bnRQb2ludCYgaG90U3BvdCkKIHsKLSAgICBpZiAoIWltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpKQorICAgIGlmICghaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDAp
KQogICAgICAgICByZXR1cm4gMDsKICAgICBJbnRQb2ludCBlZmZlY3RpdmVIb3RTcG90ID0gZGV0
ZXJtaW5lSG90U3BvdChpbWFnZSwgaG90U3BvdCk7Ci0gICAgcmV0dXJuIG5ldyBRQ3Vyc29yKCoo
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpLCBlZmZlY3RpdmVIb3RTcG90Lngo
KSwgZWZmZWN0aXZlSG90U3BvdC55KCkpOworICAgIHJldHVybiBuZXcgUUN1cnNvcigqKGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKSksIGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBl
ZmZlY3RpdmVIb3RTcG90LnkoKSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDEwICs2MywxMCBAQCBEcmFnSW1hZ2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uCiAK
IERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlKQogewot
ICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKQor
ICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbmV3IFFQaXhtYXAoKmltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKKyAgICByZXR1cm4gbmV3IFFQaXhtYXAoKmltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgwKSk7CiB9CiAKIERyYWdJbWFnZVJlZiBjcmVh
dGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UqKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCShyZXZpc2lvbiA5NjY5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9k
ZSogbm9kZSwgCiAgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CiAgICAg
QVNTRVJUKGltYWdlKTsKIAotICAgIFFQaXhtYXAqIHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgIFFQaXhtYXAqIHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZShub2RlLT5yZW5kZXJlcigpKTsKICAgICBpZiAoIXBpeG1hcCkK
ICAgICAgICAgcmV0dXJuOwogICAgIFFBcHBsaWNhdGlvbjo6Y2xpcGJvYXJkKCktPnNldFBpeG1h
cCgqcGl4bWFwLCBRQ2xpcGJvYXJkOjpDbGlwYm9hcmQpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMzYsNyArMTAzNiw3IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFyY2hGaWVs
ZENhbmMKICAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChp
bnB1dFJlbmRlckJveCwgbywgY2FuY2VsQnV0dG9uUmVjdCwgcik7CiAgICAgc3RhdGljIEltYWdl
KiBjYW5jZWxJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2Vs
QnV0dG9uIikubGVha1JlZigpOwogICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsUHJlc3NlZEltYWdl
ID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b25QcmVzc2Vk
IikubGVha1JlZigpOwotICAgIHBpLmNvbnRleHQtPmRyYXdJbWFnZShpc1ByZXNzZWQobykgPyBj
YW5jZWxQcmVzc2VkSW1hZ2UgOiBjYW5jZWxJbWFnZSwKKyAgICBwaS5jb250ZXh0LT5kcmF3SW1h
Z2UoMCwgaXNQcmVzc2VkKG8pID8gY2FuY2VsUHJlc3NlZEltYWdlIDogY2FuY2VsSW1hZ2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLT5zdHlsZSgpLT5jb2xvclNwYWNlKCks
IHBhaW50aW5nUmVjdCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiA5
NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDYWlyb1dpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRnJvbUltYWdlKEltCiAgICAgICAgIGdvdG8gZXhpdDsKIAogICAgIFBsYXRmb3Jt
Q29udGV4dENhaXJvKiBkcmF3Q29udGV4dCA9IDA7Ci0gICAgaGJtcCA9IGFsbG9jSW1hZ2Uod29y
a2luZ0RDLCBpbWctPnNpemUoKSwgJmRyYXdDb250ZXh0KTsKKyAgICBoYm1wID0gYWxsb2NJbWFn
ZSh3b3JraW5nREMsIGltZy0+c2l6ZSgwKSwgJmRyYXdDb250ZXh0KTsKICAgICBpZiAoIWhibXAp
CiAgICAgICAgIGdvdG8gZXhpdDsKIApAQCAtMTcyLDcgKzE3Miw3IEBAIERyYWdJbWFnZVJlZiBj
cmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW0KICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjciwg
MS4wLCAwLjAsIDEuMCk7CiAgICAgY2Fpcm9fZmlsbF9wcmVzZXJ2ZShjcik7CiAKLSAgICBjYWly
b19zdXJmYWNlX3QqIHNyY0ltYWdlID0gaW1nLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OworICAgIGNhaXJvX3N1cmZhY2VfdCogc3JjSW1hZ2UgPSBpbWctPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKDApOwogCiAgICAgLy8gRHJhdyB0aGUgaW1hZ2UuCiAgICAgY2Fpcm9fc2V0X3Nv
dXJjZV9zdXJmYWNlKGNyLCBzcmNJbWFnZSwgMC4wLCAwLjApOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkocmV2aXNpb24gOTY2OTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNSwxNiArMjI1LDE2IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShO
b2RlKiBub2RlLCAKICAgICBIREMgZGMgPSBHZXREQygwKTsKICAgICBIREMgY29tcGF0aWJsZURD
ID0gQ3JlYXRlQ29tcGF0aWJsZURDKDApOwogICAgIEhEQyBzb3VyY2VEQyA9IENyZWF0ZUNvbXBh
dGlibGVEQygwKTsKLSAgICBPd25QdHI8SEJJVE1BUD4gcmVzdWx0Qml0bWFwID0gYWRvcHRQdHIo
Q3JlYXRlQ29tcGF0aWJsZUJpdG1hcChkYywgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQo
KSkpOworICAgIE93blB0cjxIQklUTUFQPiByZXN1bHRCaXRtYXAgPSBhZG9wdFB0cihDcmVhdGVD
b21wYXRpYmxlQml0bWFwKGRjLCBpbWFnZS0+d2lkdGgocmVuZGVyZXIpLCBpbWFnZS0+aGVpZ2h0
KHJlbmRlcmVyKSkpOwogICAgIEhHRElPQkogb2xkQml0bWFwID0gU2VsZWN0T2JqZWN0KGNvbXBh
dGlibGVEQywgcmVzdWx0Qml0bWFwLmdldCgpKTsKIAotICAgIEJpdG1hcEluZm8gYm1JbmZvID0g
Qml0bWFwSW5mbzo6Y3JlYXRlKGltYWdlLT5zaXplKCkpOworICAgIEJpdG1hcEluZm8gYm1JbmZv
ID0gQml0bWFwSW5mbzo6Y3JlYXRlKGltYWdlLT5zaXplKHJlbmRlcmVyKSk7CiAKICAgICBIQklU
TUFQIGNvcmVCaXRtYXAgPSBDcmVhdGVESUJTZWN0aW9uKGRjLCAmYm1JbmZvLCBESUJfUkdCX0NP
TE9SUywgMCwgMCwgMCk7CiAgICAgSEdESU9CSiBvbGRTb3VyY2UgPSBTZWxlY3RPYmplY3Qoc291
cmNlREMsIGNvcmVCaXRtYXApOwogICAgIGltYWdlLT5nZXRIQklUTUFQKGNvcmVCaXRtYXApOwog
Ci0gICAgQml0Qmx0KGNvbXBhdGlibGVEQywgMCwgMCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5o
ZWlnaHQoKSwgc291cmNlREMsIDAsIDAsIFNSQ0NPUFkpOworICAgIEJpdEJsdChjb21wYXRpYmxl
REMsIDAsIDAsIGltYWdlLT53aWR0aChyZW5kZXJlciksIGltYWdlLT5oZWlnaHQocmVuZGVyZXIp
LCBzb3VyY2VEQywgMCwgMCwgU1JDQ09QWSk7CiAKICAgICBTZWxlY3RPYmplY3Qoc291cmNlREMs
IG9sZFNvdXJjZSk7CiAgICAgRGVsZXRlT2JqZWN0KGNvcmVCaXRtYXApOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvUGFzdGVib2FyZFdpbkNFLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9QYXN0ZWJvYXJkV2luQ0UuY3BwCShyZXZp
c2lvbiA5NjY5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL1Bhc3RlYm9hcmRX
aW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIFBhc3RlYm9h
cmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAKICAgICBjbGVhcigpOwogCi0gICAgUmVmUHRy
PFNoYXJlZEJpdG1hcD4gc291cmNlQm1wID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gc291cmNlQm1wID0gaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKHJlbmRlcmVyKTsKICAgICBpZiAoIXNvdXJjZUJtcCkKICAg
ICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJ
KHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIzMiw3ICsxMjMyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpw
YWludE1pc3NpbmdQbHVnaW5JY29uKAogICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQogICAgICAg
ICBudWxsUGx1Z2luSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVn
aW4iKTsKIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0
KCkueSgpLCBudWxsUGx1Z2luSW1hZ2UtPndpZHRoKCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0
KCkpOworICAgIEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCku
eSgpLCBudWxsUGx1Z2luSW1hZ2UtPndpZHRoKDApLCBudWxsUGx1Z2luSW1hZ2UtPmhlaWdodCgw
KSk7CiAKICAgICBpbnQgeE9mZnNldCA9IChmcmFtZVJlY3QoKS53aWR0aCgpIC0gaW1hZ2VSZWN0
LndpZHRoKCkpIC8gMjsKICAgICBpbnQgeU9mZnNldCA9IChmcmFtZVJlY3QoKS5oZWlnaHQoKSAt
IGltYWdlUmVjdC5oZWlnaHQoKSkgLyAyOwpAQCAtMTI0NCw3ICsxMjQ0LDcgQEAgdm9pZCBQbHVn
aW5WaWV3OjpwYWludE1pc3NpbmdQbHVnaW5JY29uKAogCiAgICAgY29udGV4dC0+c2F2ZSgpOwog
ICAgIGNvbnRleHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7Ci0gICAgY29udGV4dC0+ZHJhd0lt
YWdlKG51bGxQbHVnaW5JbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgaW1hZ2VSZWN0
LmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZSgwLCBudWxsUGx1Z2luSW1hZ2Uu
Z2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKICAgICBj
b250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgYm9vbCBJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpzaG91
bGRQYWludAogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0byB1c2UgdGhlIHVuem9vbWVkIGltYWdl
IHNpemUsIHNpbmNlIGlmIGEgZnVsbCBwYWdlIHpvb20gaXMgaW4gZWZmZWN0LCB0aGUgaW1hZ2UK
ICAgICAvLyBpcyBhY3R1YWxseSBiZWluZyBzY2FsZWQuCi0gICAgSW50U2l6ZSBpbWFnZVNpemUo
aW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUo
aW1hZ2UtPndpZHRoKG9iamVjdCksIGltYWdlLT5oZWlnaHQob2JqZWN0KSk7CiAKICAgICAvLyBM
b29rIG91cnNlbHZlcyB1cCBpbiB0aGUgaGFzaHRhYmxlcy4KICAgICBPYmplY3RMYXllclNpemVN
YXA6Oml0ZXJhdG9yIGkgPSBtX29iamVjdExheWVyU2l6ZU1hcC5maW5kKG9iamVjdCk7CkBAIC0x
NzEsNyArMTcxLDcgQEAgYm9vbCBJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpzaG91bGRQYWludAog
CiAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBoYXNoIHNjYWxlZCBpbWFnZXMgdGhhdCBhbHdh
eXMgdXNlIGxvdyBxdWFsaXR5IG1vZGUgd2hlbiB0aGUgcGFnZSBkZW1hbmRzIGl0LiBUaGlzIGlz
IHRoZSBpQ2hhdCBjYXNlLgogICAgIGlmIChvYmplY3QtPmRvY3VtZW50KCktPnBhZ2UoKS0+aW5M
b3dRdWFsaXR5SW1hZ2VJbnRlcnBvbGF0aW9uTW9kZSgpKSB7Ci0gICAgICAgIGRvdWJsZSB0b3Rh
bFBpeGVscyA9IHN0YXRpY19jYXN0PGRvdWJsZT4oaW1hZ2UtPndpZHRoKCkpICogc3RhdGljX2Nh
c3Q8ZG91YmxlPihpbWFnZS0+aGVpZ2h0KCkpOworICAgICAgICBkb3VibGUgdG90YWxQaXhlbHMg
PSBzdGF0aWNfY2FzdDxkb3VibGU+KGltYWdlLT53aWR0aChvYmplY3QpKSAqIHN0YXRpY19jYXN0
PGRvdWJsZT4oaW1hZ2UtPmhlaWdodChvYmplY3QpKTsKICAgICAgICAgaWYgKHRvdGFsUGl4ZWxz
ID4gY0ludGVycG9sYXRpb25DdXRvZmYpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxs
TGF5ZQogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnRGb3JCYWNrZ3JvdW5kSW1hZ2Ug
PSBiYWNrZ3JvdW5kT2JqZWN0ID8gYmFja2dyb3VuZE9iamVjdCA6IHRoaXM7CiAgICAgICAgICAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYmdJbWFnZS0+aW1hZ2UoY2xpZW50Rm9yQmFja2dyb3Vu
ZEltYWdlLCBnZW9tZXRyeS50aWxlU2l6ZSgpKTsKICAgICAgICAgICAgIGJvb2wgdXNlTG93UXVh
bGl0eVNjYWxpbmcgPSBzaG91bGRQYWludEF0TG93UXVhbGl0eShjb250ZXh0LCBpbWFnZS5nZXQo
KSwgYmdMYXllciwgZ2VvbWV0cnkudGlsZVNpemUoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5k
cmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBnZW9tZXRy
eS5kZXN0UmVjdCgpLCBnZW9tZXRyeS5yZWxhdGl2ZVBoYXNlKCksIGdlb21ldHJ5LnRpbGVTaXpl
KCksIAorICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UodGhpcywgaW1hZ2UuZ2V0
KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgZ2VvbWV0cnkuZGVzdFJlY3QoKSwgZ2VvbWV0cnku
cmVsYXRpdmVQaGFzZSgpLCBnZW9tZXRyeS50aWxlU2l6ZSgpLCAKICAgICAgICAgICAgICAgICBj
b21wb3NpdGVPcCwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOwogICAgICAgICB9CiAgICAgfQpAQCAt
ODAzLDcgKzgwMyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUK
IExheW91dFNpemUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUZpbGxUaWxlU2l6ZShj
b25zdCBGaWxsTGF5ZXIqIGZpbGxMYXllciwgTGF5b3V0U2l6ZSBwb3NpdGlvbmluZ0FyZWFTaXpl
KSBjb25zdAogewogICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gZmlsbExheWVyLT5pbWFnZSgpOwot
ICAgIGltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUocG9zaXRpb25pbmdBcmVhU2l6ZSk7IC8v
IFVzZSB0aGUgYm94IGVzdGFibGlzaGVkIGJ5IGJhY2tncm91bmQtb3JpZ2luLgorICAgIGltYWdl
LT5zZXRJbWFnZUNvbnRhaW5lclNpemUodGhpcywgcG9zaXRpb25pbmdBcmVhU2l6ZSk7IC8vIFVz
ZSB0aGUgYm94IGVzdGFibGlzaGVkIGJ5IGJhY2tncm91bmQtb3JpZ2luLgogCiAgICAgRUZpbGxT
aXplVHlwZSB0eXBlID0gZmlsbExheWVyLT5zaXplKCkudHlwZTsKIApAQCAtMTAwNSw3ICsxMDA1
LDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllYwogICAgIExheW91
dFVuaXQgcmlnaHRXaXRoT3V0c2V0ID0gcmVjdC5tYXhYKCkgKyByaWdodE91dHNldDsKICAgICBM
YXlvdXRSZWN0IGJvcmRlckltYWdlUmVjdCA9IExheW91dFJlY3QobGVmdFdpdGhPdXRzZXQsIHRv
cFdpdGhPdXRzZXQsIHJpZ2h0V2l0aE91dHNldCAtIGxlZnRXaXRoT3V0c2V0LCBib3R0b21XaXRo
T3V0c2V0IC0gdG9wV2l0aE91dHNldCk7CiAKLSAgICBzdHlsZUltYWdlLT5zZXRJbWFnZUNvbnRh
aW5lclNpemUoYm9yZGVySW1hZ2VSZWN0LnNpemUoKSk7CisgICAgc3R5bGVJbWFnZS0+c2V0SW1h
Z2VDb250YWluZXJTaXplKHRoaXMsIGJvcmRlckltYWdlUmVjdC5zaXplKCkpOwogICAgIExheW91
dFNpemUgaW1hZ2VTaXplID0gc3R5bGVJbWFnZS0+aW1hZ2VTaXplKHRoaXMsIDEuMGYpOwogICAg
IExheW91dFVuaXQgaW1hZ2VXaWR0aCA9IGltYWdlU2l6ZS53aWR0aCgpOwogICAgIExheW91dFVu
aXQgaW1hZ2VIZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0KCk7CkBAIC0xMDY0LDE4ICsxMDY0LDE4
IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICAgICAgLy8g
VGhlIHRvcCBsZWZ0IGNvcm5lciByZWN0IGlzICh0eCwgdHksIGxlZnRXaWR0aCwgdG9wV2lkdGgp
CiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgb2J0
YWluZWQgZnJvbSBvdXIgc2xpY2UsIGFuZCBpcyAoMCwgMCwgbGVmdFNsaWNlLCB0b3BTbGljZSkK
ICAgICAgICAgaWYgKGRyYXdUb3ApCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJ
bWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3Qu
bG9jYXRpb24oKSwgTGF5b3V0U2l6ZShsZWZ0V2lkdGgsIHRvcFdpZHRoKSksCisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZSh0aGlzLCBpbWFnZS5nZXQoKSwgY29sb3JTcGFj
ZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QubG9jYXRpb24oKSwgTGF5b3V0U2l6ZShsZWZ0
V2lkdGgsIHRvcFdpZHRoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMYXlvdXRSZWN0KDAsIDAsIGxlZnRTbGljZSwgdG9wU2xpY2UpLCBvcCk7CiAKICAgICAgICAg
Ly8gVGhlIGJvdHRvbSBsZWZ0IGNvcm5lciByZWN0IGlzICh0eCwgdHkgKyBoIC0gYm90dG9tV2lk
dGgsIGxlZnRXaWR0aCwgYm90dG9tV2lkdGgpCiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBm
cm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgKDAsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIGxl
ZnRTbGljZSwgYm90b21TbGljZSkKICAgICAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5
b3V0UmVjdChib3JkZXJJbWFnZVJlY3QueCgpLCBib3JkZXJJbWFnZVJlY3QubWF4WSgpIC0gYm90
dG9tV2lkdGgsIGxlZnRXaWR0aCwgYm90dG9tV2lkdGgpLAorICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5kcmF3SW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExheW91dFJl
Y3QoYm9yZGVySW1hZ2VSZWN0LngoKSwgYm9yZGVySW1hZ2VSZWN0Lm1heFkoKSAtIGJvdHRvbVdp
ZHRoLCBsZWZ0V2lkdGgsIGJvdHRvbVdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIExheW91dFJlY3QoMCwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgbGVm
dFNsaWNlLCBib3R0b21TbGljZSksIG9wKTsKIAogICAgICAgICAvLyBQYWludCB0aGUgbGVmdCBl
ZGdlLgogICAgICAgICAvLyBIYXZlIHRvIHNjYWxlIGFuZCB0aWxlIGludG8gdGhlIGJvcmRlciBy
ZWN0LgotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgp
LCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlckltYWdl
UmVjdC55KCkgKyB0b3BXaWR0aCwgbGVmdFdpZHRoLAorICAgICAgICBncmFwaGljc0NvbnRleHQt
PmRyYXdUaWxlZEltYWdlKHRoaXMsIGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0
KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgbGVm
dFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uSGVpZ2h0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlv
dXRSZWN0KDAsIHRvcFNsaWNlLCBsZWZ0U2xpY2UsIHNvdXJjZUhlaWdodCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKGxlZnRTaWRlU2NhbGUsIGxl
ZnRTaWRlU2NhbGUpLCBJbWFnZTo6U3RyZXRjaFRpbGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUs
IG9wKTsKQEAgLTEwODYsMTcgKzEwODYsMTcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnROaW5lUGllYwogICAgICAgICAvLyBUaGUgdG9wIHJpZ2h0IGNvcm5lciByZWN0IGlzICh0
eCArIHcgLSByaWdodFdpZHRoLCB0eSwgcmlnaHRXaWR0aCwgdG9wV2lkdGgpCiAgICAgICAgIC8v
IFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgb2J0YWluZWQgZnJvbSBv
dXIgc2xpY2UsIGFuZCBpcyAoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UsIDAsIHJpZ2h0U2xpY2Us
IHRvcFNsaWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRl
ckltYWdlUmVjdC5tYXhYKCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpLCByaWdo
dFdpZHRoLCB0b3BXaWR0aCksCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFn
ZSh0aGlzLCBpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJl
Y3QubWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSwgcmlnaHRXaWR0aCwg
dG9wV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
UmVjdChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgMCwgcmlnaHRTbGljZSwgdG9wU2xpY2UpLCBv
cCk7CiAKICAgICAgICAgLy8gVGhlIGJvdHRvbSByaWdodCBjb3JuZXIgcmVjdCBpcyAodHggKyB3
IC0gcmlnaHRXaWR0aCwgdHkgKyBoIC0gYm90dG9tV2lkdGgsIHJpZ2h0V2lkdGgsIGJvdHRvbVdp
ZHRoKQogICAgICAgICAvLyBUaGUgcmVjdCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlz
IChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgcmln
aHRTbGljZSwgYm90dG9tU2xpY2UpCiAgICAgICAgIGlmIChkcmF3Qm90dG9tKQotICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExh
eW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1heFgoKSAtIHJpZ2h0V2lkdGgsIGJvcmRlckltYWdl
UmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgpLAorICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCksIGNv
bG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1heFgoKSAtIHJpZ2h0V2lkdGgs
IGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90dG9t
V2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVj
dChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgcmln
aHRTbGljZSwgYm90dG9tU2xpY2UpLCBvcCk7CiAKICAgICAgICAgLy8gUGFpbnQgdGhlIHJpZ2h0
IGVkZ2UuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0
KCksIGNvbG9yU3BhY2UsIExheW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1heFgoKSAtIHJpZ2h0
V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgcmlnaHRXaWR0aCwKKyAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZSh0aGlzLCBpbWFnZS5nZXQoKSwgY29s
b3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwg
Ym9yZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCByaWdodFdpZHRoLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSGVpZ2h0KSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KGltYWdlV2lkdGggLSBy
aWdodFNsaWNlLCB0b3BTbGljZSwgcmlnaHRTbGljZSwgc291cmNlSGVpZ2h0KSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUocmlnaHRTaWRlU2NhbGUs
IHJpZ2h0U2lkZVNjYWxlKSwKQEAgLTExMDUsMTMgKzExMDUsMTMgQEAgYm9vbCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnROaW5lUGllYwogCiAgICAgLy8gUGFpbnQgdGhlIHRvcCBlZGdlLgog
ICAgIGlmIChkcmF3VG9wKQotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdl
KGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlckltYWdlUmVjdC54KCkg
KyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCksIGRlc3RpbmF0aW9uV2lkdGgsIHRvcFdp
ZHRoKSwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZSh0aGlzLCBpbWFn
ZS5nZXQoKSwgY29sb3JTcGFjZSwgTGF5b3V0UmVjdChib3JkZXJJbWFnZVJlY3QueCgpICsgbGVm
dFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpLCBkZXN0aW5hdGlvbldpZHRoLCB0b3BXaWR0aCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdChsZWZ0
U2xpY2UsIDAsIHNvdXJjZVdpZHRoLCB0b3BTbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKHRvcFNpZGVTY2FsZSwgdG9wU2lkZVNjYWxlKSwg
KEltYWdlOjpUaWxlUnVsZSloUnVsZSwgSW1hZ2U6OlN0cmV0Y2hUaWxlLCBvcCk7CiAKICAgICAv
LyBQYWludCB0aGUgYm90dG9tIGVkZ2UuCiAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIExh
eW91dFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0
Lm1heFkoKSAtIGJvdHRvbVdpZHRoLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxl
ZEltYWdlKHRoaXMsIGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBMYXlvdXRSZWN0KGJvcmRlcklt
YWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21X
aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
bldpZHRoLCBib3R0b21XaWR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGF5b3V0UmVjdChsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIHNv
dXJjZVdpZHRoLCBib3R0b21TbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRmxvYXRTaXplKGJvdHRvbVNpZGVTY2FsZSwgYm90dG9tU2lkZVNjYWxlKSwKQEAg
LTExMzksNyArMTEzOSw3IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBp
ZWMKICAgICAgICAgaWYgKHZSdWxlID09IFN0cmV0Y2hJbWFnZVJ1bGUpCiAgICAgICAgICAgICBt
aWRkbGVTY2FsZUZhY3Rvci5zZXRIZWlnaHQoZGVzdGluYXRpb25IZWlnaHQgLyBzb3VyY2VIZWln
aHQpOwogICAgICAgICAKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShp
bWFnZS5nZXQoKSwgY29sb3JTcGFjZSwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGls
ZWRJbWFnZSh0aGlzLCBpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwKICAgICAgICAgICAgIExheW91
dFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0Lnko
KSArIHRvcFdpZHRoLCBkZXN0aW5hdGlvbldpZHRoLCBkZXN0aW5hdGlvbkhlaWdodCksCiAgICAg
ICAgICAgICBMYXlvdXRSZWN0KGxlZnRTbGljZSwgdG9wU2xpY2UsIHNvdXJjZVdpZHRoLCBzb3Vy
Y2VIZWlnaHQpLAogICAgICAgICAgICAgbWlkZGxlU2NhbGVGYWN0b3IsIChJbWFnZTo6VGlsZVJ1
bGUpaFJ1bGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9wKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwx
MCArODgsMTAgQEAgSW50U2l6ZSBSZW5kZXJJbWFnZTo6aW1hZ2VTaXplRm9yRXJyb3IoQwogICAg
IGlmIChuZXdJbWFnZS0+d2lsbFBhaW50QnJva2VuSW1hZ2UoKSkgewogICAgICAgICBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yKGZyYW1lKCkpOwog
ICAgICAgICBwYWlyPEltYWdlKiwgZmxvYXQ+IGJyb2tlbkltYWdlQW5kSW1hZ2VTY2FsZUZhY3Rv
ciA9IG5ld0ltYWdlLT5icm9rZW5JbWFnZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIGlt
YWdlU2l6ZSA9IGJyb2tlbkltYWdlQW5kSW1hZ2VTY2FsZUZhY3Rvci5maXJzdC0+c2l6ZSgpOwor
ICAgICAgICBpbWFnZVNpemUgPSBicm9rZW5JbWFnZUFuZEltYWdlU2NhbGVGYWN0b3IuZmlyc3Qt
PnNpemUodGhpcyk7CiAgICAgICAgIGltYWdlU2l6ZS5zY2FsZSgxIC8gYnJva2VuSW1hZ2VBbmRJ
bWFnZVNjYWxlRmFjdG9yLnNlY29uZCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGltYWdlU2l6ZSA9
IG5ld0ltYWdlLT5pbWFnZSgpLT5zaXplKCk7CisgICAgICAgIGltYWdlU2l6ZSA9IG5ld0ltYWdl
LT5pbWFnZSgpLT5zaXplKHRoaXMpOwogCiAgICAgLy8gaW1hZ2VTaXplKCkgcmV0dXJucyAwIGZv
ciB0aGUgZXJyb3IgaW1hZ2UuIFdlIG5lZWQgdGhlIHRydWUgc2l6ZSBvZiB0aGUKICAgICAvLyBl
cnJvciBpbWFnZSwgc28gd2UgaGF2ZSB0byBnZXQgaXQgYnkgZ3JhYmJpbmcgaW1hZ2UoKSBkaXJl
Y3RseS4KQEAgLTI3NiwxMiArMjc2LDEyIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFj
ZWQoUGFpbnRJbmYKIAogICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IG1faW1hZ2VS
ZXNvdXJjZS0+aW1hZ2UoKTsKIAotICAgICAgICAgICAgaWYgKG1faW1hZ2VSZXNvdXJjZS0+ZXJy
b3JPY2N1cnJlZCgpICYmICFpbWFnZS0+aXNOdWxsKCkgJiYgdXNhYmxlV2lkdGggPj0gaW1hZ2Ut
PndpZHRoKCkgJiYgdXNhYmxlSGVpZ2h0ID49IGltYWdlLT5oZWlnaHQoKSkgeworICAgICAgICAg
ICAgaWYgKG1faW1hZ2VSZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpICYmICFpbWFnZS0+aXNOdWxs
KCkgJiYgdXNhYmxlV2lkdGggPj0gaW1hZ2UtPndpZHRoKHRoaXMpICYmIHVzYWJsZUhlaWdodCA+
PSBpbWFnZS0+aGVpZ2h0KHRoaXMpKSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IgPSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3RvcihmcmFtZSgpKTsKICAgICAgICAg
ICAgICAgICAvLyBDYWxsIGJyb2tlbkltYWdlKCkgZXhwbGljaXRseSB0byBlbnN1cmUgd2UgZ2V0
IHRoZSBicm9rZW4gaW1hZ2UgaWNvbiBhdCB0aGUgYXBwcm9wcmlhdGUgcmVzb2x1dGlvbi4KICAg
ICAgICAgICAgICAgICBwYWlyPEltYWdlKiwgZmxvYXQ+IGJyb2tlbkltYWdlQW5kSW1hZ2VTY2Fs
ZUZhY3RvciA9IG1faW1hZ2VSZXNvdXJjZS0+Y2FjaGVkSW1hZ2UoKS0+YnJva2VuSW1hZ2UoZGV2
aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGltYWdlID0gYnJva2VuSW1hZ2VBbmRJ
bWFnZVNjYWxlRmFjdG9yLmZpcnN0OwotICAgICAgICAgICAgICAgIEludFNpemUgaW1hZ2VTaXpl
ID0gaW1hZ2UtPnNpemUoKTsKKyAgICAgICAgICAgICAgICBJbnRTaXplIGltYWdlU2l6ZSA9IGlt
YWdlLT5zaXplKHRoaXMpOwogICAgICAgICAgICAgICAgIGltYWdlU2l6ZS5zY2FsZSgxIC8gYnJv
a2VuSW1hZ2VBbmRJbWFnZVNjYWxlRmFjdG9yLnNlY29uZCk7CiAgICAgICAgICAgICAgICAgLy8g
Q2VudGVyIHRoZSBlcnJvciBpbWFnZSwgYWNjb3VudGluZyBmb3IgYm9yZGVyIGFuZCBwYWRkaW5n
LgogICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2VudGVyWCA9ICh1c2FibGVXaWR0aCAtIGlt
YWdlU2l6ZS53aWR0aCgpKSAvIDI7CkBAIC0yOTEsNyArMjkxLDcgQEAgdm9pZCBSZW5kZXJJbWFn
ZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAgICAgICAgICAgIGlmIChjZW50ZXJZIDwg
MCkKICAgICAgICAgICAgICAgICAgICAgY2VudGVyWSA9IDA7CiAgICAgICAgICAgICAgICAgaW1h
Z2VPZmZzZXQgPSBMYXlvdXRTaXplKGxlZnRCb3JkZXIgKyBsZWZ0UGFkICsgY2VudGVyWCArIDEs
IHRvcEJvcmRlciArIHRvcFBhZCArIGNlbnRlclkgKyAxKTsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgSW50UmVj
dChwYWludE9mZnNldCArIGltYWdlT2Zmc2V0LCBpbWFnZVNpemUpKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5kcmF3SW1hZ2UodGhpcywgaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSwgSW50UmVjdChwYWludE9mZnNldCArIGltYWdlT2Zmc2V0LCBpbWFnZVNpemUpKTsKICAg
ICAgICAgICAgICAgICBlcnJvclBpY3R1cmVEcmF3biA9IHRydWU7CiAgICAgICAgICAgICB9CiAK
QEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludEludG9SZWN0KEdyYXBo
aWNzCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgPSBpbWFnZUVsdCA/
IGltYWdlRWx0LT5jb21wb3NpdGVPcGVyYXRvcigpIDogQ29tcG9zaXRlU291cmNlT3ZlcjsKICAg
ICBJbWFnZSogaW1hZ2UgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlKCkuZ2V0KCk7CiAgICAgYm9v
bCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQs
IGltYWdlLCBpbWFnZSwgcmVjdC5zaXplKCkpOwotICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2lt
YWdlUmVzb3VyY2UtPmltYWdlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkuZ2V0KCksIHN0
eWxlKCktPmNvbG9yU3BhY2UoKSwgcmVjdCwgY29tcG9zaXRlT3BlcmF0b3IsIHVzZUxvd1F1YWxp
dHlTY2FsaW5nKTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UodGhpcywgbV9pbWFnZVJlc291cmNl
LT5pbWFnZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpLmdldCgpLCBzdHlsZSgpLT5jb2xv
clNwYWNlKCksIHJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7
CiB9CiAKIGJvb2wgUmVuZGVySW1hZ2U6OmJhY2tncm91bmRJc09ic2N1cmVkKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5j
cHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxOSArODksMjkgQEAgdm9pZCBS
ZW5kZXJJbWFnZVJlc291cmNlOjpyZXNldEFuaW1hdGlvbgogICAgICAgICBtX3JlbmRlcmVyLT5y
ZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVuZGVySW1hZ2VSZXNvdXJjZTo6c2V0SW1hZ2VDb250YWlu
ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CitJbWFnZSogUmVuZGVySW1hZ2VSZXNv
dXJjZTo6bnVsbEltYWdlKCkKIHsKLSAgICBBU1NFUlQobV9yZW5kZXJlcik7CisgICAgcmV0dXJu
IEltYWdlOjpudWxsSW1hZ2UoKTsKK30KIAotICAgIGlmICghbV9jYWNoZWRJbWFnZSkKLSAgICAg
ICAgcmV0dXJuOworUGFzc1JlZlB0cjxJbWFnZT4gUmVuZGVySW1hZ2VSZXNvdXJjZTo6aW1hZ2Uo
aW50LCBpbnQpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCisgICAgICAgIHJldHVy
biBtX2NhY2hlZEltYWdlLT5pbWFnZSgpOworICAgIHJldHVybiBudWxsSW1hZ2UoKTsKK30KIAot
ICAgIG1fY2FjaGVkSW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShzaXplKTsKK3ZvaWQgUmVu
ZGVySW1hZ2VSZXNvdXJjZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIGlt
YWdlQ29udGFpbmVyU2l6ZSkKK3sKKyAgICBpZiAobV9jYWNoZWRJbWFnZSkKKyAgICAgICAgbV9j
YWNoZWRJbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKG1fcmVuZGVyZXIsIGltYWdlQ29udGFp
bmVyU2l6ZSk7CiB9CiAKLUltYWdlKiBSZW5kZXJJbWFnZVJlc291cmNlOjpudWxsSW1hZ2UoKQor
SW50U2l6ZSBSZW5kZXJJbWFnZVJlc291cmNlOjppbWFnZVNpemUoZmxvYXQgbXVsdGlwbGllcikg
Y29uc3QKIHsKLSAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOworICAgIGlmIChtX2NhY2hl
ZEltYWdlKQorICAgICAgICByZXR1cm4gbV9jYWNoZWRJbWFnZS0+aW1hZ2VTaXplKG1fcmVuZGVy
ZXIsIG11bHRpcGxpZXIpOworICAgIHJldHVybiBJbnRTaXplKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJl
c291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlUmVzb3VyY2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNyArNTQsMTcg
QEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldEFuaW1hdGlvbigpOwogCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEltYWdlPiBpbWFnZShpbnQgLyogd2lkdGggKi8gPSAwLCBpbnQgLyogaGVpZ2h0
ICovID0gMCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPmlt
YWdlKCkgOiBudWxsSW1hZ2UoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1h
Z2UoaW50IHdpZHRoID0gMCwgaW50IGhlaWdodCA9IDApIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBlcnJvck9jY3VycmVkKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSAmJiBtX2NhY2hl
ZEltYWdlLT5lcnJvck9jY3VycmVkKCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNv
bnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7CiAgICAgdmlydHVhbCBib29s
IHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlID8g
bV9jYWNoZWRJbWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIDogZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9jYWNo
ZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIDogZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT5pbWFnZUhhc1JlbGF0aXZlSGVpZ2h0
KCkgOiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCBJbnRTaXplIGltYWdlU2l6ZShmbG9hdCBtdWx0
aXBsaWVyKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+aW1h
Z2VTaXplKG11bHRpcGxpZXIpIDogSW50U2l6ZSgpOyB9CisgICAgdmlydHVhbCBJbnRTaXplIGlt
YWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVyKSBjb25zdDsKIAogICAgIHZpcnR1YWwgV3JhcHBlZElt
YWdlUHRyIGltYWdlUHRyKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZS5nZXQoKTsgfQor
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyOyB9
CiAKIHByb3RlY3RlZDoKICAgICBSZW5kZXJJbWFnZVJlc291cmNlKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxl
SW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZShpbnQgd2lk
dGggPSAwLCBpbnQgaGVpZ2h0ID0gMCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZUltYWdlLT5pbWFn
ZShtX3JlbmRlcmVyLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsgfQogICAgIHZpcnR1YWwgYm9v
bCBlcnJvck9jY3VycmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZUltYWdlLT5lcnJvck9jY3Vy
cmVkKCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkgY29uc3QgeyBtX3N0eWxlSW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6
ZShzaXplKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkgeyBtX3N0eWxlSW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShtX3Jl
bmRlcmVyLCBzaXplKTsgfQogICAgIHZpcnR1YWwgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZUltYWdlLT51c2VzSW1hZ2VDb250YWluZXJTaXplKCk7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9zdHlsZUltYWdlLT5pbWFnZUhhc1JlbGF0aXZlV2lkdGgoKTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZUltYWdl
LT5pbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDE3LDIxICsyNDE3
LDIyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWEKIHsKICAgICBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yKHJlbmRl
cmVyKCktPmZyYW1lKCkpOwogCisgICAgLy8gUGFzc2luZyAwIGFzIEltYWdlVXNlciB0byB0aGUg
c2l6ZSgpL2RyYXdJbWFnZSgpIG1ldGhvZHMgYXMgZmluZSwgYXMgdGhlc2UgYXJlIG5vIFNWRyBp
bWFnZXMuCiAgICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKICAgICBJbnRTaXpl
IGNvcm5lclJlc2l6ZXJTaXplOwogICAgIGlmIChkZXZpY2VTY2FsZUZhY3RvciA+PSAyKSB7CiAg
ICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW1hZ2UqLCByZXNpemVDb3JuZXJJbWFnZUhpUmVz
LCAoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIp
LmxlYWtSZWYoKSkpOwogICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lcklt
YWdlSGlSZXM7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2Ut
PnNpemUoKTsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+
c2l6ZSgwKTsKICAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2NhbGUoMC41Zik7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbWFnZSosIHJlc2l6ZUNvcm5lcklt
YWdlTG9SZXMsIChJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29y
bmVyIikubGVha1JlZigpKSk7CiAgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29y
bmVySW1hZ2VMb1JlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJ
bWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lcklt
YWdlLT5zaXplKDApOwogICAgIH0KIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KHJlc2l6ZXJDb3Ju
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXpl
clNpemUpOwotICAgIGNvbnRleHQtPmRyYXdJbWFnZShyZXNpemVDb3JuZXJJbWFnZS5nZXQoKSwg
cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBpbWFnZVJlY3QpOworICAgIGNvbnRl
eHQtPmRyYXdJbWFnZSgwLCByZXNpemVDb3JuZXJJbWFnZS5nZXQoKSwgcmVuZGVyZXIoKS0+c3R5
bGUoKS0+Y29sb3JTcGFjZSgpLCBpbWFnZVJlY3QpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpw
YWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiA5NjY5
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTEzMCw3ICsxMTMwLDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpw
YWludChQYWludEluZm8mIAogICAgICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVs
bEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
ICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChwYWludE9mZnNldCwgc3R5bGUoKS0+aGlnaGxpZ2h0
KCksIHRydWUpOwogI2VuZGlmCi0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2ltYWdlLT5p
bWFnZSh0aGlzLCBtYXJrZXIuc2l6ZSgpKS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBt
YXJrZXIpOworICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UodGhpcywgbV9pbWFnZS0+aW1hZ2Uo
dGhpcywgbWFya2VyLnNpemUoKSkuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgbWFya2Vy
KTsKICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgewogICAg
ICAgICAgICAgTGF5b3V0UmVjdCBzZWxSZWN0ID0gbG9jYWxTZWxlY3Rpb25SZWN0KCk7CiAgICAg
ICAgICAgICBzZWxSZWN0Lm1vdmVCeShib3hPcmlnaW4pOwpAQCAtMTM1MCw3ICsxMzUwLDcgQEAg
dm9pZCBSZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTAogICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyBhIHNvbWV3aGF0IGFyYml0cmFyeSB3aWR0aC4gIEdlbmVyYXRlZCBpbWFnZXMg
Zm9yIG1hcmtlcnMgcmVhbGx5IHdvbid0IGJlY29tZSBwYXJ0aWN1bGFybHkgdXNlZnVsCiAgICAg
ICAgIC8vIHVudGlsIHdlIHN1cHBvcnQgdGhlIENTUzMgbWFya2VyIHBzZXVkb2NsYXNzIHRvIGFs
bG93IGNvbnRyb2wgb3ZlciB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgbWFya2VyIGJveC4K
ICAgICAgICAgTGF5b3V0VW5pdCBidWxsZXRXaWR0aCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpIC8g
MjsKLSAgICAgICAgbV9pbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKExheW91dFNpemUoYnVs
bGV0V2lkdGgsIGJ1bGxldFdpZHRoKSk7CisgICAgICAgIG1faW1hZ2UtPnNldEltYWdlQ29udGFp
bmVyU2l6ZSh0aGlzLCBMYXlvdXRTaXplKGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCkpOwogICAg
ICAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0
aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGltYWdlU2l6ZS53aWR0aCgpIDogaW1hZ2VTaXplLmhlaWdodCgpOwogICAg
ICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAko
cmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVD
YWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDkgQEAgYm9vbCBTdHls
ZUNhY2hlZEltYWdlOjplcnJvck9jY3VycmVkKCkgYwogICAgIHJldHVybiBtX2ltYWdlLT5lcnJv
ck9jY3VycmVkKCk7CiB9CiAKLUludFNpemUgU3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2VTaXplKGNv
bnN0IFJlbmRlck9iamVjdCogLypyZW5kZXJlciovLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAor
SW50U2l6ZSBTdHlsZUNhY2hlZEltYWdlOjppbWFnZVNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbWFnZS0+
aW1hZ2VTaXplKG11bHRpcGxpZXIpOworICAgIHJldHVybiBtX2ltYWdlLT5pbWFnZVNpemUocmVu
ZGVyZXIsIG11bHRpcGxpZXIpOwogfQogCiBib29sIFN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlSGFz
UmVsYXRpdmVXaWR0aCgpIGNvbnN0CkBAIC02OSwxOSArNjksMTkgQEAgYm9vbCBTdHlsZUNhY2hl
ZEltYWdlOjp1c2VzSW1hZ2VDb250YWluZQogICAgIHJldHVybiBtX2ltYWdlLT51c2VzSW1hZ2VD
b250YWluZXJTaXplKCk7CiB9CiAKLXZvaWQgU3R5bGVDYWNoZWRJbWFnZTo6c2V0SW1hZ2VDb250
YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lkIFN0eWxlQ2FjaGVkSW1hZ2U6OnNl
dEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJ
bnRTaXplJiBpbWFnZUNvbnRhaW5lclNpemUpCiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UtPnNldElt
YWdlQ29udGFpbmVyU2l6ZShzaXplKTsKKyAgICBtX2ltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNp
emUocmVuZGVyZXIsIGltYWdlQ29udGFpbmVyU2l6ZSk7CiB9CiAKIHZvaWQgU3R5bGVDYWNoZWRJ
bWFnZTo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIG1f
aW1hZ2UtPmFkZENsaWVudChyZW5kZXJlcik7CisgICAgbV9pbWFnZS0+YWRkQ2xpZW50KHJlbmRl
cmVyKTsKIH0KIAogdm9pZCBTdHlsZUNhY2hlZEltYWdlOjpyZW1vdmVDbGllbnQoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gbV9pbWFnZS0+cmVtb3ZlQ2xpZW50KHJlbmRl
cmVyKTsKKyAgICBtX2ltYWdlLT5yZW1vdmVDbGllbnQocmVuZGVyZXIpOwogfQogCiBQYXNzUmVm
UHRyPEltYWdlPiBTdHlsZUNhY2hlZEltYWdlOjppbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJ
bnRTaXplJikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUNhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdp
ZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgUmVuZGVyT2JqZWN0
KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoUmVuZGVyT2Jq
ZWN0Kik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqKTsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IElu
dFNpemUmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUdlbmVyYXRlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDk2Njk4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCwxMSArNTgsNiBAQCBJbnRTaXplIFN0eWxlR2VuZXJhdGVkSW1hZ2U6
OmltYWdlU2l6ZShjCiAgICAgcmV0dXJuIG1fY29udGFpbmVyU2l6ZTsKIH0KIAotdm9pZCBTdHls
ZUdlbmVyYXRlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKLXsKLSAgICBtX2NvbnRhaW5lclNpemUgPSBzaXplOwotfQotCiB2b2lkIFN0eWxlR2VuZXJh
dGVkSW1hZ2U6OmFkZENsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIG1fZ2Vu
ZXJhdG9yLT5hZGRDbGllbnQocmVuZGVyZXIsIEludFNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmgJKHJl
dmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2Vu
ZXJhdGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuICFt
X2ZpeGVkU2l6ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gIW1fZml4ZWRTaXplOyB9CiAgICAgdmlydHVhbCBib29sIHVzZXNJbWFn
ZUNvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiAhbV9maXhlZFNpemU7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0
IEludFNpemUmIGNvbnRhaW5lclNpemUpIHsgbV9jb250YWluZXJTaXplID0gY29udGFpbmVyU2l6
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkocmV2
aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB1
c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUm
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChSZW5kZXJPYmplY3QqKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqKSA9IDA7CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXpl
JikgY29uc3QgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
UGVuZGluZ0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmgJKHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZl
V2lkdGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhh
c1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBSZW5kZXJPYmplY3Qq
LCBjb25zdCBJbnRTaXplJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChSZW5kZXJP
YmplY3QqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCop
IHsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgSW50U2l6ZSYpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNiArNjYsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpsYXlvdXQoKQogCiAgICAgTGF5b3V0
UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkg
JiYgc2VsZk5lZWRzTGF5b3V0KCkpOwogICAgIFNWR0ltYWdlRWxlbWVudCogaW1hZ2UgPSBzdGF0
aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQqPihub2RlKCkpOworICAgIG1faW1hZ2VSZXNvdXJjZS0+
c2V0SW1hZ2VDb250YWluZXJTaXplKGVuY2xvc2luZ0ludFJlY3QobV9vYmplY3RCb3VuZGluZ0Jv
eCkuc2l6ZSgpKTsKIAogICAgIGJvb2wgdHJhbnNmb3JtT3JCb3VuZGFyaWVzVXBkYXRlID0gbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSB8fCBtX3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0OwogICAgIGlm
IChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7CkBAIC0xMjUsMTMgKzEyNiwxMyBAQCB2b2lkIFJl
bmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8mIHBhCiAgICAgICAgICAgICBpZiAoU1ZHUmVu
ZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5m
bykpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9pbWFnZVJlc291
cmNlLT5pbWFnZSgpOwogICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IG1fb2Jq
ZWN0Qm91bmRpbmdCb3g7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwg
aW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgRmxvYXRS
ZWN0IHNyY1JlY3QoMCwgMCwgaW1hZ2UtPndpZHRoKHRoaXMpLCBpbWFnZS0+aGVpZ2h0KHRoaXMp
KTsKIAogICAgICAgICAgICAgICAgIFNWR0ltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKICAgICAgICAgICAgICAgICBpZiAo
aW1hZ2VFbGVtZW50LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkuYWxpZ24oKSAhPSBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FKQogICAgICAgICAgICAg
ICAgICAgICBpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNwZWN0UmF0aW8oKS50cmFuc2Zvcm1SZWN0
KGRlc3RSZWN0LCBzcmNSZWN0KTsKIAotICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNv
bnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJl
Y3QsIHNyY1JlY3QpOworICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmRy
YXdJbWFnZSh0aGlzLCBpbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3Qs
IHNyY1JlY3QpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0
OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBzYXZlZEluZm8u
Y29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJ
KHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIFNWR0ltYWdlOjp+U1ZHSW1h
Z2UoKQogICAgIEFTU0VSVCghbV9jaHJvbWVDbGllbnQgfHwgIW1fY2hyb21lQ2xpZW50LT5pbWFn
ZSgpKTsKIH0KIAotdm9pZCBTVkdJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZShjb25zdCBMYXlvdXRT
aXplJiBjb250YWluZXJTaXplKQordm9pZCBTVkdJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZShJbWFn
ZVVzZXIsIGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUpCiB7CiAgICAgaWYgKGNvbnRhaW5l
clNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjgsNyArMTI4LDcgQEAgYm9v
bCBTVkdJbWFnZTo6dXNlc0NvbnRhaW5lclNpemUoKSBjb25zdAogICAgIHJldHVybiByb290RWxl
bWVudC0+aGFzU2V0Q29udGFpbmVyU2l6ZSgpOwogfQogCi1JbnRTaXplIFNWR0ltYWdlOjpzaXpl
KCkgY29uc3QKK0ludFNpemUgU1ZHSW1hZ2U6OnNpemUoSW1hZ2VVc2VyKSBjb25zdAogewogICAg
IGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwpAQCAtMTc2LDcgKzE3Niw3
IEBAIGJvb2wgU1ZHSW1hZ2U6Omhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKICAgICByZXR1cm4g
cm9vdEVsZW1lbnQtPmhlaWdodCgpLnVuaXRUeXBlKCkgPT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2U7
CiB9CiAKLXZvaWQgU1ZHSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIFNWR0ltYWdlOjpkcmF3KElt
YWdlVXNlciB1c2VyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgU1ZHSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjb24KICAgICBjb250ZXh0LT50cmFuc2xhdGUoZGVzdE9mZnNldC54KCksIGRlc3RPZmZzZXQu
eSgpKTsKICAgICBjb250ZXh0LT5zY2FsZShzY2FsZSk7CiAKLSAgICB2aWV3LT5yZXNpemUoc2l6
ZSgpKTsKKyAgICB2aWV3LT5yZXNpemUoc2l6ZSh1c2VyKSk7CiAKICAgICBpZiAodmlldy0+bmVl
ZHNMYXlvdXQoKSkKICAgICAgICAgdmlldy0+bGF5b3V0KCk7CkBAIC0yMTUsNyArMjE1LDcgQEAg
dm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbgogICAgICAgICBpbWFnZU9i
c2VydmVyKCktPmRpZERyYXcodGhpcyk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoSW1hZ2VVc2VyIHVzZXIpCiB7CiAgICAgLy8gRklYTUU6
IEluIG9yZGVyIHRvIHN1cHBvcnQgZHluYW1pYyBTVkdzIHdlIG5lZWQgdG8gaGF2ZSBhIHdheSB0
byBpbnZhbGlkYXRlIHRoaXMKICAgICAvLyBmcmFtZSBjYWNoZSwgb3IgYmV0dGVyIHlldCwgbm90
IHVzZSBhIGNhY2hlIGZvciB0aWxlZCBkcmF3aW5nIGF0IGFsbCwgaW5zdGVhZApAQCAtMjIzLDEz
ICsyMjMsMTMgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQwogICAg
IGlmICghbV9mcmFtZUNhY2hlKSB7CiAgICAgICAgIGlmICghbV9wYWdlKQogICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKCkpOworICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh1c2VyKSk7CiAgICAgICAgIGlmICghYnVmZmVyKSAv
LyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICBkcmF3KGJ1ZmZlci0+Y29udGV4dCgpLCByZWN0KCksIHJlY3QoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgICAgIGRyYXcodXNlciwgYnVmZmVyLT5j
b250ZXh0KCksIHJlY3QodXNlciksIHJlY3QodXNlciksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENv
bXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgICAgICBtX2ZyYW1lQ2FjaGUgPSBidWZmZXItPmNvcHlJ
bWFnZShDb3B5QmFja2luZ1N0b3JlKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh1c2VyKTsKIH0KIAogYm9vbCBTVkdJbWFnZTo6ZGF0
YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTIgKzQ5LDEyIEBAIHBy
aXZhdGU6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRhaW5lclNpemUoY29uc3QgTGF5b3V0U2l6ZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJTaXplKEltYWdlVXNlciwgY29uc3QgSW50U2l6
ZSYpOwogICAgIHZpcnR1YWwgYm9vbCB1c2VzQ29udGFpbmVyU2l6ZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBoYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGhh
c1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKEltYWdlVXNlcikgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCkBAIC02Niw5
ICs2Niw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5k
ZXgoc2l6ZV90KSB7IHJldHVybiAwOyB9CiAKICAgICBTVkdJbWFnZShJbWFnZU9ic2VydmVyKik7
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBmcm9tUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0b1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoSW1hZ2VV
c2VyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGZyb21SZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRvUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yKTsKIAotICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKEltYWdlVXNlcik7CiAKICAgICBPd25QdHI8U1ZHSW1hZ2VDaHJvbWVDbGllbnQ+
IG1fY2hyb21lQ2xpZW50OwogICAgIE93blB0cjxQYWdlPiBtX3BhZ2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAkocmV2
aXNpb24gOTY2OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBQYXNzUmVmUHRyPEZF
SW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZShGaWx0CiB2b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkKIHsKICAgICBBU1NFUlQobV9pbWFnZSk7Ci0gICAgRmxvYXRSZWN0IHNy
Y1JlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOworICAgIEZsb2F0UmVjdCBzcmNS
ZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgwKSk7CiAgICAgRmxvYXRSZWN0IHBhaW50
UmVjdChtX2Fic29sdXRlU3VicmVnaW9uKTsKICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJh
bnNmb3JtUmVjdChwYWludFJlY3QsIHNyY1JlY3QpOwogICAgIHBhaW50UmVjdC5pbnRlcnNlY3Qo
bWF4RWZmZWN0UmVjdCgpKTsKQEAgLTY1LDE0ICs2NSwxNCBAQCB2b2lkIEZFSW1hZ2U6OmFwcGx5
KCkKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJl
Y3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7CisgICAgRmxvYXRSZWN0
IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKHRoaXMpKTsKICAgICBGbG9hdFJl
Y3QgZGVzdFJlY3QobV9hYnNvbHV0ZVN1YnJlZ2lvbik7CiAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJh
dGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwogCiAgICAgSW50UG9pbnQgcGFp
bnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKICAgICBkZXN0UmVj
dC5tb3ZlKC1wYWludExvY2F0aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsKIAotICAgIHJl
c3VsdEltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KS0+ZHJhd0ltYWdlKHRoaXMsIG1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRl
c3RSZWN0LCBzcmNSZWN0KTsKIH0KIAogdm9pZCBGRUltYWdlOjpkdW1wKCkKQEAgLTgyLDcgKzgy
LDcgQEAgdm9pZCBGRUltYWdlOjpkdW1wKCkKIFRleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKG1faW1hZ2UpOwotICAgIEludFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZS0+c2l6ZSgp
OworICAgIEludFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZS0+c2l6ZSh0aGlzKTsKICAgICB3cml0
ZUluZGVudCh0cywgaW5kZW50KTsKICAgICB0cyA8PCAiW2ZlSW1hZ2UiOwogICAgIEZpbHRlckVm
ZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biA5Njc0MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDExLTEwLTA1ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFu
bkByaW0uY29tPgorCisgICAgICAgIFByZXBhcmUgU1ZHSW1hZ2UgaW50cmluc2ljIHNpemUgbmVn
b3RpYXRpb246IE1ha2UgaXQgcG9zc2libGUgdG8gcmV1c2UgdGhlIHNhbWUgU1ZHSW1hZ2UgYXQg
ZGlmZmVyZW50IHNpemVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTQxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6IEFkYXB0IHRvIEltYWdl
IEFQSSBjaGFuZ2VzLgorICAgICAgICAoQ29yZUlQQzo6ZW5jb2RlSW1hZ2UpOgorICAgICAgICAo
Q29yZUlQQzo6OjpkZWNvZGUpOgorCiAyMDExLTEwLTA1ICBDaGFuZyBTaHUgIDxjc2h1QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW1dLMl0gU3VwcG9ydCBzZXRNYXJrZWRUZXh0L2hhc01hcmtlZFRl
eHQvdW5tYXJrVGV4dC9pbnNlcnRUZXh0IGZvciBXVFIgVGV4dElucHV0Q29udHJvbGxlcgpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJ
KHJldmlzaW9uIDk2Njk4KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw4ICsyOTAsOCBAQCBib29sIEFyZ3Vt
ZW50Q29kZXI8Q3JlZGVudGlhbD46OmRlY29kZShBCiAKIHN0YXRpYyB2b2lkIGVuY29kZUltYWdl
KEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgSW1hZ2UqIGltYWdlKQogewotICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxl
KGltYWdlLT5zaXplKCksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7Ci0gICAgYml0
bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBJbnRQb2ludCgpKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRt
YXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgwKSwgU2hh
cmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNz
Q29udGV4dCgpLT5kcmF3SW1hZ2UoMCwgaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBv
aW50KCkpOwogCiAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwogICAgIGJpdG1h
cC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CkBAIC0zNjcsNyArMzY3LDcgQEAgYm9vbCBBcmd1bWVu
dENvZGVyPEN1cnNvcj46OmRlY29kZShBcmd1bQogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhv
dFNwb3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWltYWdlLT5yZWN0KCku
Y29udGFpbnMoaG90U3BvdCkpCisgICAgaWYgKCFpbWFnZS0+cmVjdCgwKS5jb250YWlucyhob3RT
cG90KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY3Vyc29yID0gQ3Vyc29yKGltYWdl
LmdldCgpLCBob3RTcG90KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NzA3KQor
KysgU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTEtMTAtMDUgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5j
b20+CisKKyAgICAgICAgUHJlcGFyZSBTVkdJbWFnZSBpbnRyaW5zaWMgc2l6ZSBuZWdvdGlhdGlv
bjogTWFrZSBpdCBwb3NzaWJsZSB0byByZXVzZSB0aGUgc2FtZSBTVkdJbWFnZSBhdCBkaWZmZXJl
bnQgc2l6ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY5NDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBld2svZXdrX2hpc3RvcnkuY3BwOgorICAgICAgICAoZXdrX2hpc3RvcnlfaXRlbV9pY29uX3N1
cmZhY2VfZ2V0KToKKyAgICAgICAgKGV3a19oaXN0b3J5X2l0ZW1faWNvbl9vYmplY3RfYWRkKToK
KyAgICAgICAgKiBld2svZXdrX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKGV3a19zZXR0aW5nc19p
Y29uX2RhdGFiYXNlX2ljb25fc3VyZmFjZV9nZXQpOgorICAgICAgICAoZXdrX3NldHRpbmdzX2lj
b25fZGF0YWJhc2VfaWNvbl9vYmplY3RfYWRkKToKKwogMjAxMS0xMC0wNCAgR3l1eW91bmcgS2lt
ICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIE9ubHkgc2V0IHdo
ZW4gdGhlIGN1c3RvbSBlbmNvZGluZyBpcyBkaWZmZXJlbnQgZnJvbSBleGlzdGluZyB2YWx1ZQpJ
bmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwCShyZXZpc2lvbiA5NjY5OCkK
KysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyOCw3ICszMjgsNyBAQCBjYWlyb19zdXJmYWNlX3QqIGV3a19oaXN0b3J5X2l0ZW1faWNv
bl9zCiAgICAgICAgIEVSUigiaWNvbiBpcyBOVUxMLiIpOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9Ci0gICAgcmV0dXJuIGljb24tPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
cmV0dXJuIGljb24tPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApOwogfQogCiBFdmFzX09i
amVjdCogZXdrX2hpc3RvcnlfaXRlbV9pY29uX29iamVjdF9hZGQoY29uc3QgRXdrX0hpc3Rvcnlf
SXRlbSogaXRlbSwgRXZhcyogY2FudmFzKQpAQCAtMzQzLDcgKzM0Myw3IEBAIEV2YXNfT2JqZWN0
KiBld2tfaGlzdG9yeV9pdGVtX2ljb25fb2JqZWMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgc3VyZmFjZSA9IGljb24tPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
c3VyZmFjZSA9IGljb24tPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKDApOwogICAgIHJldHVy
biBld2tfdXRpbF9pbWFnZV9mcm9tX2NhaXJvX3N1cmZhY2VfYWRkKGNhbnZhcywgc3VyZmFjZSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwCShyZXZpc2lv
biA5NjY5OCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgY2Fpcm9fc3VyZmFjZV90KiBld2tfc2V0dGlu
Z3NfaWNvbl9kYXRhYgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gaWNv
bi0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICByZXR1cm4gaWNvbi0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfc2V0dGluZ3Nf
aWNvbl9kYXRhYmFzZV9pY29uX29iamVjdF9hZGQoY29uc3QgY2hhciogdXJsLCBFdmFzKiBjYW52
YXMpCkBAIC0yMDUsNyArMjA1LDcgQEAgRXZhc19PYmplY3QqIGV3a19zZXR0aW5nc19pY29uX2Rh
dGFiYXNlXwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBzdXJmYWNlID0gaWNvbi0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBzdXJmYWNlID0gaWNvbi0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoMCk7CiAgICAgcmV0dXJuIGV3a191dGlsX2ltYWdlX2Zyb21f
Y2Fpcm9fc3VyZmFjZV9hZGQoY2FudmFzLCBzdXJmYWNlKTsKIH0KIAo=
</data>
<flag name="review"
          id="107176"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110115</attachid>
            <date>2011-10-07 02:59:32 -0700</date>
            <delta_ts>2011-10-13 04:50:53 -0700</delta_ts>
            <desc>New approach - v1</desc>
            <filename>SVGImage-splitoff-v1.diff</filename>
            <type>text/plain</type>
            <size>22741</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2OTIwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODggQEAKKzIwMTEtMTAtMDcgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUHJlcGFyZSBTVkdJ
bWFnZSBpbnRyaW5zaWMgc2l6ZSBuZWdvdGlhdGlvbjogTWFrZSBpdCBwb3NzaWJsZSB0byByZXVz
ZSB0aGUgc2FtZSBTVkdJbWFnZSBhdCBkaWZmZXJlbnQgc2l6ZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NDE2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHByZXBhcmF0aW9uIHBhdGNo
IGZvciBidWcgNDcxNTYgKENTUyAyLjEgYmFja2dyb3VuZC1pbnRyaW5zaWMtKiB0ZXN0cyBmYWls
aW5nKSwgd2hpY2ggYWltcworICAgICAgICB0byBpbXBsZW1lbnQgQ1NTIDIuMSBpbnRyaW5zaWMg
c2l6ZSBuZWdvdGlhdGlvbiBiZXR3ZWVuIHRoZSBlbWJlZGRlZCBTVkcgZG9jdW1lbnQgYW5kIHRo
ZSB0YXJnZXQgYXJlYQorICAgICAgICBkZWZpbmVkIGZvciBlZy4gPHN2ZzppbWFnZT4vPGh0bWw6
aW1nPi9tYXNrLWltYWdlL2JvcmRlci1pbWFnZS9iYWNrZ3JvdW5kLWltYWdlLiBDdXJyZW50bHkg
dGhlIHNpemUKKyAgICAgICAgbmVnb3RpYXRpb24gaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgU1ZH
IGRvY3VtZW50cyBlbWJlZGRlZCB0aHJvdWdoIDxpZnJhbWU+LzxvYmplY3Q+LzxlbWJlZD4gaW4g
dHJ1bmsuCisKKyAgICAgICAgUGFydCBvbmU6CisgICAgICAgIEFkZCAiY29tcHV0ZUludHJpbnNp
Y0RpbWVuc2lvbnMoTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWln
aHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pIgorICAgICAgICBtZXRob2QgdG8gSW1hZ2Ug
YW5kIGFsbCBjbGFzc2VzIGRlcml2aW5nIGZyb20gaXQuIEl0cyBwYXJ0aWN1bGFyeSB1c2VmdWwg
d2hlbiB1c2VkIG9uIFNWR0ltYWdlcy4gU1ZHSW1hZ2UKKyAgICAgICAgcGFzc2VzIG9uIHRoZSBh
Y3R1YWwgJ0xlbmd0aCcgdmFsdWVzIGZyb20gdGhlIFJlbmRlclN0eWxlIG9mIHRoZSBlbWJlZGRl
ZCBzdmdzIHJvb3QgcmVuZGVyZXIuIFRoaXMgd2lsbCBiZQorICAgICAgICB1c2VkIHRvIGltcGxl
bWVudCBDU1MgMi4xIGludHJpbnNpYyBzaXppbmcgZm9yIEltYWdlcyAoc2VlIGJ1ZyA0NzE1Niku
CisKKyAgICAgICAgUGFydCB0d286CisgICAgICAgIFRoZSBTVkdJbWFnZSBpcyBjdXJyZW50bHkg
dGllZCB0byBhIHNwZWNpZmljIHNpemUuIFRoZSBzaXplIG5lZ290aWF0aW9uIHByb2Nlc3MgbWFr
ZXMgdGhlIGludHJpbnNpYyBzaXplCisgICAgICAgIG9mIHRoZSBTVkcgZGVwZW5kYW50IG9uIHRo
ZSBwbGFjZSB3aGVyZSBpdHMgZW1iZWRkZWQgKGVnLiBhcmVhIGZvciBiYWNrZ3JvdW5kLWltYWdl
LCBldGMuKS4gVGhlIFNWR0ltYWdlCisgICAgICAgIHRodXMgbmVlZHMgdG8gbWFpbnRhaW4gYSBI
YXNoTWFwPEltYWdlVXNlciwgSW50U2l6ZT4gd2hpY2ggdHJhY2tzIHRoZSBzaXplIGZvciBlYWNo
IHJlbmRlcmVyIHRoYXQgdXNlcworICAgICAgICB0aGUgU1ZHSW1hZ2UuCisKKyAgICAgICAgVHdv
IGhlbHBlciBjbGFzc2VzIEltYWdlVXNlclVwZGF0ZXIoSW1hZ2UqLCBJbWFnZVVzZXIpIGFuZCBT
dHlsZUltYWdlVXNlclVwZGF0ZXIoU3R5bGVJbWFnZSosIEltYWdlVXNlcikKKyAgICAgICAgd2Vy
ZSBpbnRyb2R1Y2VkIHRvIGFpZCBpbiB1cGRhdGluZyB0aGUgSW1hZ2VVc2VyIHN0b3JlZCBpbiB0
aGUgU1ZHSW1hZ2VzLiBFeGFtcGxlOgorICAgICAgICAgICAgaW1hZ2UtPnNldEltYWdlQ29udGFp
bmVyU2l6ZSguLi4pOworICAgICAgICAKKyAgICAgICAgbmVlZHMgdG8gYmUgdHVybmVkIGludG86
CisKKyAgICAgICAgICAgIEltYWdlVXNlclVwZGF0ZXIgdXNlclVwZGF0ZXIoaW1hZ2UsIHRoaXMp
OworICAgICAgICAgICAgaW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZSguLi4pOworCisgICAg
ICAgIEltYWdlVXNlclVwZGF0ZXIgdGFrZXMgY2FyZSBvZiBzZXR0aW5nIHRoZSBJbWFnZVVzZXIg
aW4gdGhlIEltYWdlLCBzaW1pbGFyeSBTdHlsZUltYWdlVXNlclVwZGF0ZXIsIGJ1dAorICAgICAg
ICBvcGVyYXRpbmcgb24gU3R5bGVJbWFnZXMgcmF0aGVyIHRoYW4gSW1hZ2VzLiBXaGVuIHRoZSB1
cGRhdGVyIGlzIGRlc3Ryb3llZCwgaXQgcmVzdG9yZXMgdGhlIGltYWdlIHVzZXIKKyAgICAgICAg
dG8gdGhlIHByZXZpb3VzIHZhbHVlIC0gdGhhdCBtYWtlcyBpdCBzYWZlIHRvIG5lc3QgSW1hZ2VV
c2VyVXBkYXRlcnMgYXMgd2VsbC4KKyAgICAgICAgQ3VycmVudGx5IG5vYm9keSB1c2VzIEltYWdl
VXNlclVwZGF0ZXIvU3R5bGVJbWFnZVVzZXJVcGRhdGVyIC0gdGhleSdsbCBiZSBuZWVkZWQgb25j
ZSBTVkdJbWFnZSB3YW50cworICAgICAgICB0byBtYXAgYW4gSW50U2l6ZSBjb250YWluZXJTaXpl
IHRvIGEgY2VydGFpbiBSZW5kZXJPYmplY3QsIGJ1dCBvbmx5IGluIGEgaGFuZGZ1bCBwbGFjZXMh
CisKKyAgICAgICAgSW1hZ2VVc2VyIGlzIGp1c3QgYSBzaW1wbGUgdHlwZWRlZiBjb25zdCB2b2lk
KiwgYXMgd2UgY2FuJ3QgdXNlIFJlbmRlck9iamVjdCBpbiBwbGF0Zm9ybS8gYXMgdGhhdCB3b3Vs
ZAorICAgICAgICBiZSBhIGxheWVyaW5nIHZpb2xhdGlvbiAoYW5kIGl0cyBhbHNvIG5lZWRlZCBm
b3Igbm9uLVJlbmRlck9iamVjdCBkZXJpdmVkIGNsYXNzZXMgdG8gdXNlIFNWR0ltYWdlcykuCisK
KyAgICAgICAgRG9lc24ndCBhZmZlY3QgYW55IHRlc3RzIHlldC4KKworICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6
c2V0SW1hZ2VVc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjb21wdXRlSW50
cmluc2ljRGltZW5zaW9ucyk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R2VuZXJhdGVkSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpj
b21wdXRlSW50cmluc2ljRGltZW5zaW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjppc1NWR0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlOjpzZXRJbWFnZVVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VV
c2VyVXBkYXRlcjo6SW1hZ2VVc2VyVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVVz
ZXJVcGRhdGVyOjp+SW1hZ2VVc2VyVXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVu
dEltYWdlOjpjb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHls
ZS9TdHlsZUNhY2hlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1h
Z2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
Q2FjaGVkSW1hZ2U6OnNldEltYWdlVXNlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hl
ZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVD
YWNoZWRJbWFnZTo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1h
Z2U6OnJlbW92ZUNsaWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVk
SW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUdlbmVyYXRlZEltYWdlOjpjb21wdXRlSW50cmlu
c2ljRGltZW5zaW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVk
SW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlR2VuZXJhdGVkSW1hZ2U6OnNldEltYWdl
VXNlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlSW1hZ2U6OnNldEltYWdlVXNlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZUltYWdlVXNlclVwZGF0ZXI6OlN0eWxlSW1hZ2VVc2VyVXBkYXRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUltYWdlVXNlclVwZGF0ZXI6On5TdHlsZUltYWdlVXNlclVwZGF0ZXIpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQZW5kaW5nSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW1hZ2U6OlNWR0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpjb21wdXRl
SW50cmluc2ljRGltZW5zaW9ucyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6aXNTVkdJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbWFnZTo6c2V0SW1hZ2VVc2VyKToKKwogMjAxMS0xMC0wNyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQg
RWxlbWVudHMgYW5kIE5ldHdvcmsgcGFuZWxzIHRvIHRoZSBjb21waWxhdGlvbgpJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA5NjU3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3Niw2ICsxNzYsMTkgQEAgYm9vbCBDYWNoZWRJbWFnZTo6aW1hZ2VIYXNS
ZWxhdGl2ZUhlaWdodAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorSW1hZ2VVc2VyIENhY2hlZElt
YWdlOjpzZXRJbWFnZVVzZXIoSW1hZ2VVc2VyIHVzZXIpCit7CisgICAgaWYgKG1faW1hZ2UpCisg
ICAgICAgIHJldHVybiBtX2ltYWdlLT5zZXRJbWFnZVVzZXIodXNlcik7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKExlbmd0
aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGlu
dHJpbnNpY1JhdGlvKQoreworICAgIGlmIChtX2ltYWdlKQorICAgICAgICBtX2ltYWdlLT5jb21w
dXRlSW50cmluc2ljRGltZW5zaW9ucyhpbnRyaW5zaWNXaWR0aCwgaW50cmluc2ljSGVpZ2h0LCBp
bnRyaW5zaWNSYXRpbyk7Cit9CisKIEludFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShmbG9h
dCBtdWx0aXBsaWVyKSBjb25zdAogewogICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gOTY1
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2RlZmluZSBDYWNoZWRJbWFnZV9oCiAKICNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1h
Z2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUaW1lci5oIgpA
QCAtMzIsNiArMzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNoZWRSZXNv
dXJjZUxvYWRlcjsKK2NsYXNzIExlbmd0aDsKK2NsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIE1lbW9y
eUNhY2hlOwogCiBjbGFzcyBDYWNoZWRJbWFnZSA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSwgcHVi
bGljIEltYWdlT2JzZXJ2ZXIgewpAQCAtNTMsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBj
YW5SZW5kZXIoZmxvYXQgbXVsdGlwbGllcikgY29uc3QgeyByZXR1cm4gIWVycm9yT2NjdXJyZWQo
KSAmJiAhaW1hZ2VTaXplKG11bHRpcGxpZXIpLmlzRW1wdHkoKTsgfQogCiAgICAgLy8gVGhlc2Ug
YXJlIG9ubHkgdXNlZCBmb3IgU1ZHSW1hZ2UgcmlnaHQgbm93CisgICAgSW1hZ2VVc2VyIHNldElt
YWdlVXNlcihJbWFnZVVzZXIpOwogICAgIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0
IEludFNpemUmKTsKICAgICBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdDsKICAg
ICBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0OwpAQCAtNjIsNiArNjYsNyBAQCBw
dWJsaWM6CiAgICAgLy8gem9vbS4KICAgICBJbnRTaXplIGltYWdlU2l6ZShmbG9hdCBtdWx0aXBs
aWVyKSBjb25zdDsgIC8vIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNvbXBsZXRlIGltYWdlLgog
ICAgIEludFJlY3QgaW1hZ2VSZWN0KGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0OyAgLy8gVGhlIHNp
emUgb2YgdGhlIGN1cnJlbnRseSBkZWNvZGVkIHBvcnRpb24gb2YgdGhlIGltYWdlLgorICAgIHZv
aWQgY29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVu
Z3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pOwogCiAgICAg
dmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwogICAgIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRl
ZEltYWdlLmNwcAkocmV2aXNpb24gOTY1NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDcg
QEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOworI2luY2x1
ZGUgIkxlbmd0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY3LDQgKzY2LDExIEBA
IHZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWMKICAgICBpbWFnZUJ1ZmZl
ci0+ZHJhd1BhdHRlcm4oY29udGV4dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgZGVzdFJlY3QpOwogfQogCit2
b2lkIEdlbmVyYXRlZEltYWdlOjpjb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhMZW5ndGgmIGlu
dHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdodCwgRmxvYXRTaXplJiBpbnRyaW5z
aWNSYXRpbykKK3sKKyAgICAvLyBPdmVycmlkZSByYXRpbyB0byBiZSB1bmRlZmluZWQgZm9yIGdl
bmVyYXRlZCBpbWFnZXMsIGFzIHRoZXNlIGhhdmUgbm8gY29uc3RyYWludHMuCisgICAgSW1hZ2U6
OmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKGludHJpbnNpY1dpZHRoLCBpbnRyaW5zaWNIZWln
aHQsIGludHJpbnNpY1JhdGlvKTsKKyAgICBpbnRyaW5zaWNSYXRpbyA9IEZsb2F0U2l6ZSgpOwor
fQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJ
bWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dl
bmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDk2NTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY0RpbWVuc2lv
bnMoTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0
U2l6ZSYgaW50cmluc2ljUmF0aW8pOwogCiAgICAgLy8gQXNzdW1lIHRoYXQgZ2VuZXJhdGVkIGNv
bnRlbnQgaGFzIG5vIGRlY29kZWQgZGF0YSB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0CiAgICAgdmly
dHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIC8qZGVzdHJveUFsbCovID0gdHJ1ZSkg
eyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCShy
ZXZpc2lvbiA5NjU3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0xNjYsNSArMTY3
LDExIEBAIHZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGMKICAgICBzdGFy
dEFuaW1hdGlvbigpOwogfQogCit2b2lkIEltYWdlOjpjb21wdXRlSW50cmluc2ljRGltZW5zaW9u
cyhMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdodCwgRmxvYXRT
aXplJiBpbnRyaW5zaWNSYXRpbykKK3sKKyAgICBpbnRyaW5zaWNSYXRpbyA9IHNpemUoKTsKKyAg
ICBpbnRyaW5zaWNXaWR0aCA9IExlbmd0aChpbnRyaW5zaWNSYXRpby53aWR0aCgpLCBGaXhlZCk7
CisgICAgaW50cmluc2ljSGVpZ2h0ID0gTGVuZ3RoKGludHJpbnNpY1JhdGlvLmhlaWdodCgpLCBG
aXhlZCk7Cit9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuaAkocmV2aXNpb24gOTY1NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKICNpZmRlZiBfX09CSkNfXwpAQCAtNjYsMTYg
KzY2LDIxIEBAIHR5cGVkZWYgc3RydWN0IF9HZGtQaXhidWYgR2RrUGl4YnVmOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIEZsb2F0UG9pbnQ7
CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CitjbGFzcyBMZW5ndGg7CiBjbGFzcyBTaGFyZWRCdWZmZXI7Ci1jbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CiAKIC8vIFRoaXMgY2xhc3MgZ2V0cyBub3RpZmllZCB3aGVuIGFuIGltYWdlIGNyZWF0
ZXMgb3IgZGVzdHJveXMgZGVjb2RlZCBmcmFtZXMgYW5kIHdoZW4gaXQgYWR2YW5jZXMgYW5pbWF0
aW9uIGZyYW1lcy4KIGNsYXNzIEltYWdlT2JzZXJ2ZXI7CiAKKy8vIFR5cGljYWxseSBhIFJlbmRl
ck9iamVjdCBwb2ludGVyLCBpZGVudGlmeWluZyB0aGUgdXNlciBvZiB0aGUgaW1hZ2UuIFRoZSBp
bnRyaW5zaWMgc2l6ZSBvZiBhbiBTVkcgaW1hZ2UgbWF5IGRlcGVuZAorLy8gb24gdGhlIHBsYWNl
IHdoZXJlIGl0cyBlbWJlZGRlZCAtIHRodXMgYSBTVkdJbWFnZSBtYXkgcmVwb3J0IGRpZmZlcmVu
dCBzaXplcyBkZXBlbmRpbmcgb24gdGhlICJ1c2VyIi4KK3R5cGVkZWYgY29uc3Qgdm9pZCogSW1h
Z2VVc2VyOworCiBjbGFzcyBJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlPiB7CiAgICAg
ZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0Nv
bnRleHQ7CkBAIC04Nyw2ICs5Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bWFnZT4gbG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSk7CiAgICAgc3RhdGlj
IGJvb2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOyAKIAorICAgIHZpcnR1YWwgYm9vbCBp
c1NWR0ltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNC
aXRtYXBJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGN1
cnJlbnRGcmFtZUhhc0FscGhhKCkgeyByZXR1cm4gZmFsc2U7IH0KIApAQCAtMTAyLDggKzEwOCwx
MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHVzZXNDb250YWluZXJTaXplKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGhhc1JlbGF0aXZlSGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIEltYWdlVXNlciBzZXRJbWFn
ZVVzZXIoSW1hZ2VVc2VyKSB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY0RpbWVuc2lv
bnMoTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0
U2l6ZSYgaW50cmluc2ljUmF0aW8pOwogICAgIEludFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKTsgfQogICAgIGludCB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIHNpemUoKS53aWR0aCgpOyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IHNpemUoKS5oZWlnaHQoKTsgfQpAQCAtMTg0LDYgKzE5MiwyNyBAQCBwcml2YXRlOgogICAgIElt
YWdlT2JzZXJ2ZXIqIG1faW1hZ2VPYnNlcnZlcjsKIH07CiAKK2NsYXNzIEltYWdlVXNlclVwZGF0
ZXIgeworcHVibGljOgorICAgIEltYWdlVXNlclVwZGF0ZXIoSW1hZ2UqIGltYWdlLCBJbWFnZVVz
ZXIgdXNlcikKKyAgICAgICAgOiBtX2ltYWdlKGltYWdlLT5pc1NWR0ltYWdlKCkgPyBpbWFnZSA6
IDApIC8vIE9ubHkgU1ZHSW1hZ2VzIGNvbnN1bWUgdGhlIEltYWdlVXNlciwgbm8tb3AgZm9yIGFs
bCBvdGhlcnMuCisgICAgICAgICwgbV9wcmVzZXJ2ZWRVc2VyKDApCisgICAgeworICAgICAgICBp
ZiAobV9pbWFnZSkKKyAgICAgICAgICAgIG1fcHJlc2VydmVkVXNlciA9IG1faW1hZ2UtPnNldElt
YWdlVXNlcih1c2VyKTsKKyAgICB9CisKKyAgICB+SW1hZ2VVc2VyVXBkYXRlcigpCisgICAgewor
ICAgICAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgICAgIG1faW1hZ2UtPnNldEltYWdlVXNlciht
X3ByZXNlcnZlZFVzZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbWFnZSogbV9pbWFnZTsK
KyAgICBJbWFnZVVzZXIgbV9wcmVzZXJ2ZWRVc2VyOworfTsKKwogfQogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50SW1hZ2UuY3BwCShyZXZpc2lvbiA5NjU3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJ
bWFnZU9ic2VydmVyLmgiCisjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgogI2luY2x1ZGUgPENv
cmVHcmFwaGljcy9DR1BERkRvY3VtZW50Lmg+CkBAIC0xODgsNiArMTg5LDEzIEBAIHZvaWQgUERG
RG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnQKICAgICAgICAgaW1hZ2VPYnNlcnZlcigp
LT5kaWREcmF3KHRoaXMpOwogfQogCit2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmNvbXB1dGVJbnRy
aW5zaWNEaW1lbnNpb25zKExlbmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2lj
SGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKQoreworICAgIC8vIEZJWE1FOiBJZiB3
ZSB3YW50IHNpemUgbmVnb3RpYXRpb24gd2l0aCBQREYgZG9jdW1lbnRzIGFzLWltYWdlLCB0aGlz
IGlzIHRoZSBwbGFjZSB0byBpbXBsZW1lbnQgaXQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjA5NSkuCisgICAgSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNp
b25zKGludHJpbnNpY1dpZHRoLCBpbnRyaW5zaWNIZWlnaHQsIGludHJpbnNpY1JhdGlvKTsKKyAg
ICBpbnRyaW5zaWNSYXRpbyA9IEZsb2F0U2l6ZSgpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0Uo
Q0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVu
dEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5oCShyZXZpc2lvbiA5NjU3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNiArNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCAvKmRlc3Ryb3lBbGwqLyA9IHRydWUpIHsgfQogICAg
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQog
CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhMZW5ndGgm
IGludHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdodCwgRmxvYXRTaXplJiBpbnRy
aW5zaWNSYXRpbyk7CiAgICAgICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CiAKICAg
ICAgICAgUERGRG9jdW1lbnRJbWFnZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gOTY1NzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDE2IEBAIEludFNpemUgU3R5bGVDYWNoZWRJbWFnZTo6
aW1hZ2VTaXplKGNvbnMKICAgICByZXR1cm4gbV9pbWFnZS0+aW1hZ2VTaXplKG11bHRpcGxpZXIp
OwogfQogCit2b2lkIFN0eWxlQ2FjaGVkSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25z
KGNvbnN0IFJlbmRlck9iamVjdCosIExlbmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50
cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKQoreworICAgIG1faW1hZ2Ut
PmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKGludHJpbnNpY1dpZHRoLCBpbnRyaW5zaWNIZWln
aHQsIGludHJpbnNpY1JhdGlvKTsKK30KKworSW1hZ2VVc2VyIFN0eWxlQ2FjaGVkSW1hZ2U6OnNl
dEltYWdlVXNlcihJbWFnZVVzZXIgdXNlcikKK3sKKyAgICByZXR1cm4gbV9pbWFnZS0+c2V0SW1h
Z2VVc2VyKHVzZXIpOworfQorCiBib29sIFN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlSGFzUmVsYXRp
dmVXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVX
aWR0aCgpOwpAQCAtNzEsMTcgKzgxLDE3IEBAIGJvb2wgU3R5bGVDYWNoZWRJbWFnZTo6dXNlc0lt
YWdlQ29udGFpbmUKIAogdm9pZCBTdHlsZUNhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4gbV9pbWFnZS0+c2V0SW1hZ2VD
b250YWluZXJTaXplKHNpemUpOworICAgIG1faW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShz
aXplKTsKIH0KIAogdm9pZCBTdHlsZUNhY2hlZEltYWdlOjphZGRDbGllbnQoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gbV9pbWFnZS0+YWRkQ2xpZW50KHJlbmRlcmVyKTsK
KyAgICBtX2ltYWdlLT5hZGRDbGllbnQocmVuZGVyZXIpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVk
SW1hZ2U6OnJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVy
biBtX2ltYWdlLT5yZW1vdmVDbGllbnQocmVuZGVyZXIpOworICAgIG1faW1hZ2UtPnJlbW92ZUNs
aWVudChyZW5kZXJlcik7CiB9CiAKIFBhc3NSZWZQdHI8SW1hZ2U+IFN0eWxlQ2FjaGVkSW1hZ2U6
OmltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oCShyZXZp
c2lvbiA5NjU3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hl
ZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIEltYWdlVXNl
ciBzZXRJbWFnZVVzZXIoSW1hZ2VVc2VyKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJp
bnNpY0RpbWVuc2lvbnMoY29uc3QgUmVuZGVyT2JqZWN0KiwgTGVuZ3RoJiBpbnRyaW5zaWNXaWR0
aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pOwog
ICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0
ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDk2NTc1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2
MywxNCBAQCB2b2lkIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OnNldEltYWdlQ29udGFpCiAgICAgbV9j
b250YWluZXJTaXplID0gc2l6ZTsKIH0KIAordm9pZCBTdHlsZUdlbmVyYXRlZEltYWdlOjpjb21w
dXRlSW50cmluc2ljRGltZW5zaW9ucyhjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBMZW5n
dGgmIGludHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdodCwgRmxvYXRTaXplJiBp
bnRyaW5zaWNSYXRpbykKK3sKKyAgICBJbnRTaXplIHNpemUgPSBpbWFnZVNpemUocmVuZGVyZXIs
IDEpOworICAgIGludHJpbnNpY1dpZHRoID0gTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpOwor
ICAgIGludHJpbnNpY0hlaWdodCA9IExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCk7CisgICAg
aW50cmluc2ljUmF0aW8gPSBzaXplOworfQorCiB2b2lkIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmFk
ZENsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIG1fZ2VuZXJhdG9yLT5hZGRD
bGllbnQocmVuZGVyZXIsIEludFNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDk2NTc1
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiAhbV9maXhlZFNpemU7
IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuICFtX2ZpeGVkU2l6ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNp
emUoY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1YWwgSW1hZ2VVc2VyIHNldEltYWdlVXNlcihJ
bWFnZVVzZXIpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNp
Y0RpbWVuc2lvbnMoY29uc3QgUmVuZGVyT2JqZWN0KiwgTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwg
TGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pOwogICAg
IHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1h
Z2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkocmV2aXNpb24gOTY1
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaW1h
Z2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc0lt
YWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VD
b250YWluZXJTaXplKGNvbnN0IEludFNpemUmKSA9IDA7CisgICAgdmlydHVhbCBJbWFnZVVzZXIg
c2V0SW1hZ2VVc2VyKEltYWdlVXNlcikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhjb25zdCBSZW5kZXJPYmplY3QqLCBMZW5ndGgmIGlu
dHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdodCwgRmxvYXRTaXplJiBpbnRyaW5z
aWNSYXRpbykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoUmVuZGVyT2JqZWN0Kikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KikgPSAwOwog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
SW50U2l6ZSYpIGNvbnN0ID0gMDsKQEAgLTg4LDUgKzkwLDI2IEBAIHByb3RlY3RlZDoKICAgICBi
b29sIG1faXNHZW5lcmF0ZWRJbWFnZToxOwogfTsKIAorY2xhc3MgU3R5bGVJbWFnZVVzZXJVcGRh
dGVyIHsKK3B1YmxpYzoKKyAgICBTdHlsZUltYWdlVXNlclVwZGF0ZXIoU3R5bGVJbWFnZSogaW1h
Z2UsIEltYWdlVXNlciB1c2VyKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgICAgICwg
bV9wcmVzZXJ2ZWRVc2VyKDApCisgICAgeworICAgICAgICBpZiAobV9pbWFnZSkKKyAgICAgICAg
ICAgIG1fcHJlc2VydmVkVXNlciA9IG1faW1hZ2UtPnNldEltYWdlVXNlcih1c2VyKTsKKyAgICB9
CisKKyAgICB+U3R5bGVJbWFnZVVzZXJVcGRhdGVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2lt
YWdlKQorICAgICAgICAgICAgbV9pbWFnZS0+c2V0SW1hZ2VVc2VyKG1fcHJlc2VydmVkVXNlcik7
CisgICAgfQorCitwcml2YXRlOgorICAgU3R5bGVJbWFnZSogbV9pbWFnZTsKKyAgIEltYWdlVXNl
ciBtX3ByZXNlcnZlZFVzZXI7Cit9OworCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oCShyZXZpc2lvbiA5
NjU3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50
U2l6ZSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhj
b25zdCBSZW5kZXJPYmplY3QqLCBMZW5ndGgmLCBMZW5ndGgmLCBGbG9hdFNpemUmKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFJlbmRlck9iamVjdCopIHsgfQogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KikgeyB9CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEltYWdlPiBpbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gOTY1
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Myw2ICs4Myw3IEBAIHByaXZhdGU6CiAKIFNWR0ltYWdlOjpTVkdJbWFnZShJ
bWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQorICAgICwgbV91
c2VyKDApCiB7CiB9CiAKQEAgLTEyOCw2ICsxMjksMjQgQEAgYm9vbCBTVkdJbWFnZTo6dXNlc0Nv
bnRhaW5lclNpemUoKSBjb25zdAogICAgIHJldHVybiByb290RWxlbWVudC0+aGFzU2V0Q29udGFp
bmVyU2l6ZSgpOwogfQogCit2b2lkIFNWR0ltYWdlOjpjb21wdXRlSW50cmluc2ljRGltZW5zaW9u
cyhMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdodCwgRmxvYXRT
aXplJiBpbnRyaW5zaWNSYXRpbykKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJu
OworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7CisgICAgU1ZHU1ZHRWxl
bWVudCogcm9vdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KGZyYW1lLT5kb2N1
bWVudCgpKS0+cm9vdEVsZW1lbnQoKTsKKyAgICBpZiAoIXJvb3RFbGVtZW50KQorICAgICAgICBy
ZXR1cm47CisgICAgUmVuZGVyQm94KiByZW5kZXJlciA9IHRvUmVuZGVyQm94KHJvb3RFbGVtZW50
LT5yZW5kZXJlcigpKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnRyaW5zaWNXaWR0aCA9IHJlbmRlcmVyLT5zdHlsZSgpLT53aWR0aCgpOworICAgIGludHJp
bnNpY0hlaWdodCA9IHJlbmRlcmVyLT5zdHlsZSgpLT5oZWlnaHQoKTsKKyAgICBpZiAocm9vdEVs
ZW1lbnQtPnByZXNlcnZlQXNwZWN0UmF0aW8oKS5hbGlnbigpICE9IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW86OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkUpCisgICAgICAgIGludHJpbnNpY1Jh
dGlvID0gcm9vdEVsZW1lbnQtPmN1cnJlbnRWaWV3Qm94UmVjdCgpLnNpemUoKTsKK30KKwogSW50
U2l6ZSBTVkdJbWFnZTo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gOTY1NzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNiArNDcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgflNWR0ltYWdlKCk7
CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OwogCiAgICAgdmly
dHVhbCB2b2lkIHNldENvbnRhaW5lclNpemUoY29uc3QgTGF5b3V0U2l6ZSYpOwpAQCAtNTQsNyAr
NTUsMTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVXaWR0aCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0OwogCisgICAg
dmlydHVhbCBJbWFnZVVzZXIgc2V0SW1hZ2VVc2VyKEltYWdlVXNlciB1c2VyKQorICAgIHsKKyAg
ICAgICAgSW1hZ2VVc2VyIHByZXNlcnZlZFVzZXIgPSBtX3VzZXI7CisgICAgICAgIG1fdXNlciA9
IHVzZXI7CisgICAgICAgIHJldHVybiBwcmVzZXJ2ZWRVc2VyOworICAgIH0KKwogICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5z
aWNEaW1lbnNpb25zKExlbmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVp
Z2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKTsKIAogICAgIHZpcnR1YWwgYm9vbCBkYXRh
Q2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCk7CiAKQEAgLTczLDcgKzgyLDkgQEAgcHJpdmF0
ZToKICAgICBPd25QdHI8U1ZHSW1hZ2VDaHJvbWVDbGllbnQ+IG1fY2hyb21lQ2xpZW50OwogICAg
IE93blB0cjxQYWdlPiBtX3BhZ2U7CiAgICAgUmVmUHRyPEltYWdlPiBtX2ZyYW1lQ2FjaGU7Cisg
ICAgSW1hZ2VVc2VyIG1fdXNlcjsKIH07CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110828</attachid>
            <date>2011-10-13 04:50:53 -0700</date>
            <delta_ts>2011-10-13 05:37:57 -0700</delta_ts>
            <desc>Next try</desc>
            <filename>SVGImage-splitoff-redesign-v1.diff</filename>
            <type>text/plain</type>
            <size>120950</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjI5IEBACisyMDExLTEwLTEzICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFByZXBhcmUgU1ZH
SW1hZ2UgaW50cmluc2ljIHNpemUgbmVnb3RpYXRpb246IEludHJvZHVjZSBhbiBJbnRTaXplIDwt
PiBTVkdJbWFnZSBjYWNoZSBpbiBDYWNoZWRJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk0MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBJbWFnZUJ5U2l6ZUNhY2hlIG91dCBvZiBD
U1NJbWFnZUdlbmVyYXRvclZhbHVlIGFzIENhY2hlZEltYWdlIHdhbnRzIHRvIHVzZSB0aGUgc2Ft
ZSB0eXBlIG9mIGNhY2hlIGZvciBpdHMgcHVycG9zZXMuCisgICAgICAgIFdoZW4gaW50cm9kdWNp
bmcgdGhlIFNWR0ltYWdlIGludHJpbnNpYyBzaXplIG5lZ290aWF0aW9uIHRoZSBjb250YWluZXIg
c2l6ZSBvZiBhbiBTVkdJbWFnZSBpcyBkZXBlbmRhbnQgb24gdGhlIHBsYWNlIHdoZXJlCisgICAg
ICAgIGl0IGdldHMgZW1iZWRkZWQgKGVnIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzIG9mIGhvc3Qg
ZG9jdW1lbnRzIDxpbWc+IGZvcmNlIGEgY2VydGFpbiBzaXplKS4KKworICAgICAgICBDdXJyZW50
bHkgQ2FjaGVkSW1hZ2Ugb25seSBjb250YWlucyBhIHNpbmdsZSBSZWZQdHI8SW1hZ2U+LCB3aGlj
aCBpdCBjb25zdHJ1Y3RzIG91dCBvZiB0aGUgZGVjb2RlZCBkYXRhLgorICAgICAgICBNdWx0aXBs
ZSBSZW5kZXJPYmplY3RzIHNoYXJlIHRoZSBzYW1lIENhY2hlZEltYWdlcywgd2hlbiBlbWJlZGRp
bmcgZWcuIGEgU1ZHIGRvY3VtZW50IGluIGEgPGh0bWw6aW1nPiBvciB1c2luZyBpdCBpbiBhIGJh
Y2tncm91bmQtaW1hZ2UgZm9yIGEgPGRpdj4uCisgICAgICAgIENvbnNpZGVyIHRoZSBjYXNlIHdo
ZXJlIHR3byBSZW5kZXJPYmplY3RzIHVzZSB0aGUgc2FtZSBDYWNoZWRJbWFnZSwgZWFjaCB3aXRo
IGEgZGlmZmVyZW50IGNvbnRhaW5lciBzaXplICgyMDB4MTAwIHZzIDEwMHgyMDApIGFuZCB0aGUg
ZW1iZWRkZWQKKyAgICAgICAgZG9jdW1lbnQgY29udGFpbnMgYSB2aWV3Qm94IGFuZCBzb21lIGFy
Yml0YXJ5IHByZXNlcnZlQXNwZWN0UmF0aW8gc2V0dGluZ3MuIFRvIGhvbm91ciB0aGVzZSB3ZSBo
YXZlIHRvIHJlbGF5b3V0IHRoZSBkb2N1bWVudCB3aXRoIHRoZSBkZXNpcmVkCisgICAgICAgIHNp
emUgKHBlcmNlbnR1YWwgdW5pdCByZXNvbHZpbmcgZXRjLCBhbGwgZGVwZW5kIG9uIHRoZSBSZW5k
ZXJTVkdSb290cyBzaXplKS4KKworICAgICAgICBXaXRoIHRoZSBjdXJyZW50IGRlc2lnbiB0aGlz
IGlzIGhhcmQgdG8gcmVhbGl6ZSwgdy9vIHJlcXVyaW5nIHRvIHJlbGF5b3V0IHRoZSBlbWJlZGRl
ZCBkb2N1bWVudCBmb3IgZWFjaCBlbWJlZGRlciB0aGF0IHVzZXMgYW4gU1ZHSW1hZ2UuCisgICAg
ICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNhY2hlIHJpZ2h0IHdpdGhpbiBDYWNoZWRJbWFn
ZSwgd2hpY2ggbWFuYWdlcyBhIG1hcCBvZiBpbWFnZXMgdG8gY2VydGFpbiBzaXplcywgYnkgdXRp
bGl6aW5nIHRoZSBuZXcgSW1hZ2VCeVNpemVDYWNoZS4KKworICAgICAgICBDYWNoZWRJbWFnZTo6
aW1hZ2UoKSBub3cgdGFrZXMgYSBSZW5kZXJPYmplY3QqIHBhcmFtZXRlciwgd2hpY2ggaXQgdXNl
cyB0byBsb29rIHVwIHRoZSBsYXN0IHNldCBpbWFnZSBjb250YWluZXIgc2l6ZSBmb3IgYSByZW5k
ZXJlci4KKyAgICAgICAgVXNpbmcgdGhhdCBzaXplIGl0IHF1ZXJpZXMgdGhlIGNhY2hlIHdoZXRo
ZXIgaXQgYWxyZWFkeSBoYXMgYW4gU1ZHSW1hZ2UgZm9yIHRoYXQgc2l6ZSwgaWYgbm90IGl0IGdl
dHMgY3JlYXRlZCwgYnkgY3JlYXRpbmcgYSB3aG9sZQorICAgICAgICBuZXcgaW5zdGFuY2Ugb2Yg
U1ZHSW1hZ2UsIGZpbGxpbmcgaXQgd2l0aCB0aGUgYWxyZWFkeSBkZWNvZGVkIGRhdGEsIGFuZCBw
YXNzaW5nIG9uIGEgZml4ZWQgaW1hZ2UgY29udGFpbmVyIHNpemUsIHdoaWNoIG92ZXJyaWRlcyB0
aGUKKyAgICAgICAgc2l6ZSB0aGF0IFJlbmRlclNWR1Jvb3QgcmVwb3J0cywgd2hlbiBjb21wdXRl
UmVwbGFjZWRMb2dpY2FsV2lkdGgvSGVpZ2h0IGlzIGNhbGxlZCBhbmQgdGh1cyBsYXlpbmcgb3V0
IHRoZSBkb2N1bWVudCBhdCB0aGUgZGVzaXJlZCBzaXplLgorICAgICAgICBUaGlzIGltYWdlIGlz
IHRoZW4gcHV0IGluIHRoZSBjYWNoZSBmb3IgZnVydGhlciByZXVzYWJpbGl0eS4KKworICAgICAg
ICBMaWtld2lzZSBDYWNoZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKCkgbm93IHRha2Vz
IGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0ZXIgYW5kIHN0b3JlcyB0aGF0IGluIHRoZSBjYWNoZSB3
aXRoIGFuIGFzc29jaWF0ZWQgY29udGFpbmVyIHNpemUuCisgICAgICAgIEl0IHJlcXVpcmVzIHRv
IHRvdWNoIHNldmVyYWwgZmlsZXMgd2hpY2ggdXNlIENhY2hlZEltYWdlIHRocm91Z2hvdXQgV2Vi
Q29yZS9XZWJLaXQvV2ViS2l0Mi4KKworICAgICAgICBUaGUgYWN0dWFsIGNhY2hlIGlzIG5vdCB5
ZXQgdHVybmVkIG9uIHlldCwgc28gdGhpcyBpcyBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZSBzbyBm
YXIsIGFzIGl0IG5lZWRzIHNvbWUgb3RoZXIgY2hhbmdlcyB0byBTVkdJbWFnZSwKKyAgICAgICAg
d2hpY2ggd2lsbCBjb21lIHdpdGggdGhlIG1hc3RlciBwYXRjaCBpbiBidWcgNDcxNTYuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIHlldCwgYXMgdGhlIG5ldyBjYWNoZSBpc24ndCB0dXJuZWQgb24g
eWV0LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCBsb2FkZXIvY2FjaGUvSW1hZ2VC
eVNpemVDYWNoZS4qIHRvIGJ1aWxkLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IERp
dHRvLgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBDaGFuZ2UgQ2FjaGVkSW1hZ2U6OmltYWdl
KCkgc2lnbmF0dXJlIGV4cG9ydCBkZWZpbml0aW9uLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTog
QWRkIGxvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLiogdG8gYnVpbGQuCisgICAgICAgICog
V2ViQ29yZS5wcm86IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
IERpdHRvLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKTogQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZSgpIG5vdyB0YWtlcyBh
IFJlbmRlck9iamVjdCogcGFyYW1ldGVyLgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1t
OiBEaXR0byAoZm9yIENhY2hlZEltYWdlOjppbWFnZSgpKS4KKyAgICAgICAgKC1bRE9NRWxlbWVu
dCBpbWFnZV0pOgorICAgICAgICAoLVtET01FbGVtZW50IF9pbWFnZVRJRkZSZXByZXNlbnRhdGlv
bl0pOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6IHMvbV9jbGllbnRzL2NsaWVu
dHMoKS8sIHdoaWNoIG5vdyBsaXZlIGluIHRoZSBJbWFnZUJ5U2l6ZUNhY2hlIGluc3RlYWQgb2Yg
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVl
OjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52
YXNSZXNpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjppbWFnZSk6Cisg
ICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0dyYWRpZW50VmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZS5jcHA6IE1vdmUgdGhlIHNpemVzL2NsaWVudHMvaW1hZ2VzIGNhY2hlIGludG8g
YSBuZXcgSW1hZ2VCeVNpemVDYWNoZSBjbGFzcywgdG8gbWFrZSBpdCB1c2FibGUgZm9yIENhY2hl
ZEltYWdlIGFzIHdlbGwuCisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OjphZGRDbGllbnQpOiBBZGFwdCB0byBtb3ZlLgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpD
U1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cHV0SW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiBj
c3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZTo6Y2xpZW50cyk6IEZvcndhcmRlZCB0byB0aGUgSW1hZ2VCeVNpemVDYWNo
ZS4KKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwOiAKKyAgICAg
ICAgKFdlYkNvcmU6OmlzRGVsZXRhYmxlRWxlbWVudCk6IENhY2hlZEltYWdlOjpjYW5SZW5kZXIo
KSBub3cgdGFrZXMgYSBSZW5kZXJPYmplY3QqIHBhcmFtZXRlci4KKyAgICAgICAgKiBodG1sL0hU
TUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6
d2lkdGgpOiBDYWNoZWRJbWFnZTo6aW1hZ2VTaXplKCkgbm93IHRha2VzIGEgUmVuZGVyT2JqZWN0
KiBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6Om5hdHVyYWxXaWR0
aCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbEhl
aWdodCk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURvY3VtZW50UGFyc2VyOjpmaW5pc2gpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OnNjYWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURvY3VtZW50OjpyZXNpemVJbWFnZVRvRml0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURvY3VtZW50OjppbWFnZVVwZGF0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRG9jdW1lbnQ6OnJlc3RvcmVJbWFnZVNpemUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRG9jdW1lbnQ6OmltYWdlRml0c0luV2luZG93KTogRGl0dG8uCisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojp3b3VsZFRhaW50T3JpZ2luKTogQ2FjaGVkSW1h
Z2U6OmltYWdlKCkgbm93IHRha2VzIGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0ZXIuCisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDouCisgICAgICAgIChX
ZWJDb3JlOjppc09yaWdpbkNsZWFuKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpzaXplKTog
RGl0dG8gKGZvciBDYWNoZWRJbWFnZTo6aW1hZ2VTaXplKCkpLgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybik6IERpdHRvLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6IERp
dHRvLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6IEFkZCBjdXJyZW50
bHkgX2Rpc2FibGVkXyBjYWNoZSBmb3IgU1ZHSW1hZ2VzLiBUaGUgaW50cmluc2ljIHNpemUgbmVn
b3RpYXRpb24gd2lsbCBuZWVkIHRvIHVzZSBtdWx0aXBsZSBTVkdJbWFnZXMKKyAgICAgICAgZm9y
IGVhY2ggcmVxdWVzdGVkIHNpemUgKGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBlbWJlZGRpbmcg
cGxhY2UgZm9yIHRoZSBpbWFnZSkgLSBtYWtlIGl0IHBvc3NpYmxlIHRvIGNhY2hlIHRoZXNlIFNW
R0ltYWdlcywgYW5kIG1haW50YWluIGEgY2FjaGUKKyAgICAgICAgZm9yIHRoZW0uIFRoZSBoYXNo
IGNvZGUgaXMgYSAxOjEgcmVmYWN0b3JpbmcgZnJvbSB0aGUgYWxyZWFkeSBwcmVzZW50IGNvZGUg
aW4gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSwgbm93IG5hbWVkICdJbWFnZUJ5U2l6ZUNhY2hlJy4K
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpsb29rdXBJbWFnZUZvclNpemUpOiBMb29r
cyB1cCBhbiBJbWFnZSBmcm9tIHRoZSBjYWNoZSBmb3IgYSBnaXZlbiBJbnRTaXplLiBDdXJyZW50
bHkgdHVybmVkIG9mZi4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpsb29rdXBJbWFn
ZUZvclJlbmRlcmVyKTogTG9va3MgdXAgYW4gSW1hZ2UgZnJvbSB0aGUgY2FjaGUgZm9yIGEgZ2l2
ZW4gcmVuZGVyZXIuIEN1cnJlbnRseSB0dXJuZWQgb2ZmLgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkSW1hZ2U6Omxvb2t1cE9yQ3JlYXRlSW1hZ2VGb3JSZW5kZXJlcik6IExvb2tzIHVwIGFuIElt
YWdlIGZyb20gdGhlIGNhY2hlIG9yIGNyZWF0ZXMgYSBuZXcgU1ZHSW1hZ2UgZm9yIGEgZ2l2ZW4g
c2l6ZSBhbmQgY2FjaGVzIGl0LCBpZiBwb3NzaWJsZS4gQ3VycmVudGx5IHR1cm5lZCBvZmYuCisg
ICAgICAgIEFsbCBmb2xsb3dpbmcgY2hhbmdlcyBzaGFyZSB0aGlzOiBEb24ndCBvcGVyYXRlIG9u
IG1faW1hZ2UgZGlyZWN0bHksIGluc3RlYWQgYWx3YXlzIGxvb2sgdXAgb25lIGZyb20gdGhlIGNh
Y2hlIGZvciBhIGdpdmVuIHNpemUgb3IgcmVuZGVyZXIgLSBpZiB0aGF0J3Mgbm90IHByZXNlbnQg
ZmFsbGJhY2sgdG8gbV9pbWFnZS4KKyAgICAgICAgV2hlbiBhbiBTVkdJbWFnZSBpcyBmaXJzdCBj
cmVhdGVkIGJ5IENhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSgpIGFuZCBzdG9yZWQgaW4gbV9pbWFn
ZSwgdGhlIGNhY2hlIHJlbWFpbnMgZW1wdHkuCisKKyAgICAgICAgSWYgZWcuIDxpbWcgd2lkdGg9
IjMwIiBoZWlnaHQ9IjcwIiBzcmM9ImZvby5zdmciPiBpcyB1c2VkIHdoaWNoIGltcGxpZXMgYSBj
b250YWluZXIgc2l6ZSBvZiAzMHg3MCBhIG5ldyBTVkdJbWFnZSBpcyBjcmVhdGVkIHdpdGggdGhl
IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgYSAzMHg3MCBjb250YWluZXIgc2l6ZQorICAgICAg
ICB3aGljaCBpcyBpbW1lZGlhdGVseSBwYXNzZWQgdG8gdGhlIFNWR0ltYWdlIGFmdGVyIGl0cyBj
cmVhdGlvbi4gVGhpcyBTVkdJbWFnZSBpcyBwdXQgaW4gdGhlIEltYWdlQnlTaXplQ2FjaGUgYXNz
b2NpYXRlZCB3aXRoIGEgY29udGFpbmVyIHNpemUgb2YgMzB4NzAuCisgICAgICAgIFdlIG5vdyBo
YXZlIHR3byBTVkdJbWFnZSBvYmplY3RzIHByZXNlbnQsIG9uZSBsaXZpbmcgaW4gQ2FjaGVkSW1h
Z2U6Om1faW1hZ2UsIGNyZWF0ZWQgYnkgY3JlYXRlSW1hZ2UoKSBkdXJpbmcgZGF0YSBkZWNvZGlu
ZywgYW5kIG9uZSBsaXZpbmcgaW4gdGhlIEltYWdlQnlTaXplQ2FjaGUKKyAgICAgICAgY3JlYXRl
ZCBieSBsb29rdXBPckNyZWF0ZUltYWdlRm9yUmVuZGVyZXIoKSBhc3NvY2lhdGVkIHdpdGggdGhl
IDMweDcwIGNvbnRhaW5lci4gVGhlIGZpcnN0IFNWR0ltYWdlOjpzaXplKCkgd2lsbCByZXR1cm4g
YSB2YWx1ZSBhcyBkZWZpbmVkIGluIHRoZSByZWZlcmVuY2VkIGZvby5zdmcsCisgICAgICAgIHdo
ZXJlYXMgdGhlIFNWR0ltYWdlOjpzaXplKCkgY2FsbCBvZiB0aGUgbmV3IFNWR0ltYWdlIGxpdmlu
ZyBpbiB0aGUgY2FjaGUgcmVwb3J0cyAzMHg3MCBhbmQgcmVuZGVycyBhY2NvcmRpbmcgdG8gdGhh
dC4KKworICAgICAgICBXaGVuZXZlciBhbnkgbWV0aG9kIG9mIENhY2hlZEltYWdlIGlzIGNhbGxl
ZCB3aXRoIGEgUmVuZGVyT2JqZWN0KiBvciBJbnRTaXplLCB3ZSBjYW4ndCBqdXN0IG9wZXJhdGUg
b24gbV9pbWFnZSBhbnltb3JlIGJ1dCBpbnN0ZWFkIGhhdmUgdG8gbG9va3VwIHRoZSByaWdodAor
ICAgICAgICBpbWFnZXMgZm9yIGEgY2VydGFpbiByZW5kZXJlci9zaXplIGZyb20gdGhlIGNhY2hl
IGFuZCBvcGVyYXRlIG9uIHRoZXNlLiBXaGVuIGNhbGxpbmcgZWcuIENhY2hlZEltYWdlOjppbWFn
ZSgpIHdpdGggYSBudWxsIHJlbmRlcmVyLCBtX2ltYWdlIGlzIHJldHVybmVkLgorICAgICAgICBX
aGVuIHBhc3Npbmcgd2l0aCBhIHZhbGlkIHJlbmRlcmVyIG9ubHkgY2FjaGUgbG9va3VwcyBhcmUg
ZG9uZSBpZiB0aGUgbV9pbWFnZSBpcyBhY3R1YWxseSBhIFNWR0ltYWdlLCBvdGhlcndoaXNlIGxv
b2t1cEltYWdlRm9yU2l6ZS9SZW5kZXJlciB3aWxsIGp1c3QgcmV0dXJuIHRoZSBtX2ltYWdlLgor
ICAgICAgICBUaGVyZSBpcyBubyBsb2dpY2FsIGNoYW5nZSBpbmR1Y2VkIGZvciBub24tU1ZHSW1h
Z2UgZGVyaXZlZCBpbWFnZXMuCisKKyAgICAgICAgQ2FjaGVkSW1hZ2U6OmltYWdlKCkgb2YgY291
cnNlIG5lZWRzIGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0ZXIgbm93LCB0byBpZGVudGlmeSB3aGlj
aCBvZiB0aGUgaW1hZ2VzIGZyb20gdGhlIGNhY2hlIHRvIHVzZSwgaWYgdGhlIHVuZGVybHlpbmcg
aW1hZ2UgaXMgYSBTVkdJbWFnZS4KKyAgICAgICAgTHVja2lseSB0aGVzZSBpbmZvcm1hdGlvbiBh
cmUgYWxyZWFkeSBwcmVzZW50IGluIFN0eWxlQ2FjaGVkSW1hZ2UvU3R5bGVJbWFnZSAmIGZyaWVu
ZHMgYW5kIG9ubHkgbmVlZCB0byBiZSBhZGRlZCBmb3Igc29tZSBhZGRpdGlvbmFsIG1ldGhvZHMu
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2UpOiBDYWxsIGxvb2t1cE9yQ3Jl
YXRlSW1hZ2VGb3JSZW5kZXJlcigpIGluc3RlYWQgb2YgcmV0dXJuaW5nIG1faW1hZ2UsIGlmIGl0
J3Mgbm90IG51bGwuIEl0cyBhIG5vLW9wIGZvciBub24gU1ZHSW1hZ2UgZGVyaXZlZCBvYmplY3Rz
LgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZSk6
IEZvciBub24tU1ZHSW1hZ2VzLCBqdXN0IHBhc3Mgb24gdGhlIHNpemUgdG8gdGhlIG1faW1hZ2Uu
IEZvciBTVkdJbWFnZXMsIGFzc29jaWF0ZSB0aGUgcGFzc2VkIGluIHJlbmRlcmVyIHdpdGggdGhl
IEludFNpemUgaW4gdGhlIGNhY2hlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZG9lcyBOT1QgY3JlYXRlIHRoZSBTVkdJbWFnZSB5
ZXQsIHRoaXMgaXMgZGVsYXllZCB1bnRpbCBpbWFnZSgpIGlzIGNhbGxlZCB0aGUgbmV4dCB0aW1l
LCBmb3IgYSBnaXZlbiByZW5kZXJlciB0aGF0IGFjdHVhbGx5IHdhbnRzIHRoaXMgc2l6ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZVNpemUpOiBEb24ndCBvcGVyYXRlIG9u
IG1faW1hZ2UsIGFzayBsb29rdXBJbWFnZUZvclJlbmRlcmVyKCkgd2l0aCB0aGUgaW5jb21pbmcg
cmVuZGVyZXIuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2VSZWN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Y2xlYXIpOiBGb3JjZSBjbGVhcmlu
ZyB0aGUgbV9zdmdJbWFnZUNhY2hlLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmRh
dGEpOiBDYWxsIG1faW1hZ2UtPnNpemUoKSBpbnN0ZWFkIG9mIGltYWdlU2l6ZSgpLCB0byBhdm9p
ZCBoYXZpbmcgdG8gcGFzcyBhIG51bGwgcmVuZGVyZXIgdG8gaW1hZ2VTaXplKCkgYXMgaGVyZSBu
byByZW5kZXJlciBpcyBhdmFpbGFibGUgeWV0LgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1h
Z2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6IERvbid0IGRlc3Ryb3kgZGVjb2RlZCBkYXRhIGZvciBT
VkcgaW1hZ2VzLCBhcyBtX2RhdGEgbmVlZHMgdG8gYmUgYWNjZXNzYWJsZSBhdCBhbnkgdGltZSB0
byBjb25zdHJ1Y3QgYSBjbG9uZWQgU1ZHSW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gZnV0dXJlIHdlIGRvbid0IG5lZWQgdGhpcyBh
bnltb3JlIGlmIHdlIG1ha2Ugc3VyZSBtdWx0aXBsZSBTVkdJbWFnZXMgc2hhcmUgdGhlIHNhbWUg
dHJlZXMsIGJ1dCB0aGF0J3MgZm9yIGEgZm9sbG93LXVwIHBhdGNoLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkSW1hZ2U6OmRlY29kZWRTaXplQ2hhbmdlZCk6IERvbid0IG9wZXJhdGUgb24gbV9p
bWFnZSwgYXNrIGxvb2t1cEltYWdlRm9yUmVuZGVyZXIoKSB3aXRoIHRoZSBpbmNvbWluZyByZW5k
ZXJlci4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpkaWREcmF3KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6c2hvdWxkUGF1c2VBbmltYXRpb24pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjphbmltYXRpb25BZHZhbmNlZCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmNoYW5nZWRJblJlY3QpOiBEaXR0
by4gKGVnLiB3aGVuIGxlYXZpbmcgb3V0IHRoaXMgY2hhbmdlIGFuaW1hdGVkIFNWRyBpbWFnZXMg
d291bGRuJ3QgdXBkYXRlIGFueW1vcmUsIGFzIHRoZSBhbmltYXRpb24gZGlkbid0IGhhcHBlbiBv
biBtX2ltYWdlISkKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaDogaW1hZ2Uo
KS9jYW5SZW5kZXIoKS9zZXRJbWFnZUNvbnRhaW5lclNpemUoKS9pbWFnZVNpemUoKS9pbWFnZVJl
Y3QoKSBub3cgYWxsIHRha2UgYSBSZW5kZXJPYmplY3QqIHBhcmFtZXRlciB0byBpZGVudGlmaXkg
dGhlIGN1cnJlbnQgdXNlciBvZiB0aGUgaW1hZ2UuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJ
bWFnZTo6Y2FuUmVuZGVyKTogUGFzcyBvbiB0aGUgaW5jb21pbmcgcmVuZGVyZXIgdG8gaW1hZ2VT
aXplKCkuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0ltYWdlQnlTaXplQ2FjaGUuY3BwOiBDb3Bp
ZWQgZnJvbSBXZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcCwgdG8gcHJlc2Vy
dmUgaGlzdG9yeSBmb3IgdGhlIG9yaWdpbmFsIGNhY2hlIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ5U2l6ZUNhY2hlOjpJbWFnZUJ5U2l6ZUNhY2hlKTogU3RyYWlnaHQgY29weSBmcm9t
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWUsIHJlbmFtZWQgdG8gSW1hZ2VCeVNpemVDYWNoZSwgcmVt
b3ZpbmcgYWxsIGJ1dCB0aGUgY2FjaGUgcmVsZXZhbnQgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnlTaXplQ2FjaGU6OmFkZENsaWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCeVNpemVDYWNoZTo6cmVtb3ZlQ2xpZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ5U2l6ZUNhY2hlOjpnZXRJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCeVNpemVDYWNoZTo6cHV0SW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnlTaXplQ2FjaGU6OmNsZWFyKTogTmV3IGZ1bmN0aW9uLCB0aGF0IGNsZWFycyB0aGUgY2Fj
aGUsIGludHJvZHVjZWQgZm9yIHRoZSBuZWVkcyBvZiBDYWNoZWRJbWFnZS4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnlTaXplQ2FjaGU6OmltYWdlRm9yU2l6ZSk6IE5ldyBmdW5jdGlvbiB0byBx
dWVyeSBhbiBJbWFnZSogZm9yIGEgZ2l2ZW4gSW50U2l6ZSwgaW50cm9kdWNlZCBmb3IgdGhlIG5l
ZWRzIG9mIENhY2hlZEltYWdlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCeVNpemVDYWNoZTo6
c2l6ZUZvckNsaWVudCk6IE5ldyBmdW5jdGlvbiB0byBxdWVyeSBhbiBJbnRTaXplIGZvciBhIGdp
dmVuIHJlbmRlcmVyLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLmg6
IENvcGllZCBmcm9tIFdlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnlTaXplQ2FjaGU6OmNsaWVudHMpOgorICAgICAgICAqIHBhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2UpOiBDYWNoZWRJ
bWFnZTo6aW1hZ2UoKSBub3cgdGFrZXMgYSBSZW5kZXJPYmplY3QqIHBhcmFtZXRlci4KKyAgICAg
ICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnNlbGVjdEN1cnNvcik6IERpdHRvLgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6YWRkSW1hZ2VUb1Jlc291
cmNlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZl
UmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL1BhZ2VT
ZXJpYWxpemVyLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZURyYWdJ
bWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJbWFnZVRvRGF0YU9iamVjdCk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOiBEaXR0by4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Omlz
U1ZHSW1hZ2UpOiBBZGQgYm9vbGVhbiBoZWxwZXIgdG8gaWRlbnRpZnkgU1ZHSW1hZ2VzLCBqdXN0
IGxpa2UgaXNCaXRtYXBJbWFnZSgpLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRH
dGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkR3RrOjpjcmVhdGVEcmFnSW1hZ2Up
OiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBub3cgdGFrZXMgYSBSZW5kZXJPYmplY3QqIHBhcmFtZXRl
ci4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEd0azo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0lt
YWdlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6IERpdHRvLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRNYWM6OmRyYWdOU0ltYWdlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWFjL0hU
TUxDb252ZXJ0ZXIubW06CisgICAgICAgIChmaWxlV3JhcHBlckZvckVsZW1lbnQpOiBEaXR0by4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9DbGlwYm9hcmRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6Y3JlYXRl
RHJhZ0ltYWdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6ZGVjbGFy
ZUFuZFdyaXRlRHJhZ0ltYWdlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vcXQvUGFzdGVi
b2FyZFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOiBE
aXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkV2luOjpjcmVhdGVEcmFnSW1hZ2UpOiBEaXR0by4gCisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZUltYWdlVG9EYXRhT2JqZWN0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
d3JpdGVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3dpbmNlL1Bhc3RlYm9hcmRX
aW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKTogRGl0
dG8uCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdDo6aW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWlu
dEZpbGxMYXllcik6IENhY2hlZEltYWdlOjpjYW5SZW5kZXIoKSBub3cgdGFrZXMgYSBSZW5kZXJP
YmplY3QqIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBhaW50
Qm94RGVjb3JhdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6
OnBhaW50TWFzayk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludE1hc2tJbWFnZXMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVwYWludExheWVyUmVjdHNGb3JJbWFnZSk6IERp
dHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRl
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1
bGF0ZUZpbGxUaWxlU2l6ZSk6IERpdHRvIChmb3IgQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFp
bmVyU2l6ZSgpKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dE5pbmVQaWVjZUltYWdlKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjppbWFnZVNpemVGb3JFcnJvcik6
IENhY2hlZEltYWdlOjppbWFnZSgpIG5vdyB0YWtlcyBhIFJlbmRlck9iamVjdCogcGFyYW1ldGVy
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnNldEltYWdlU2l6ZUZvckFsdFRleHQp
OiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZVJlc291cmNlOjpzZXRJbWFnZUNvbnRhaW5lclNp
emUpOiBQYXNzIG9uIG1fcmVuZGVyZXIgdG8gQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVy
U2l6ZSgpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmg6IFJlbW92
ZSBjb25zdG5lc3MgZnJvbSBzZXRJbWFnZUNvbnRhaW5lclNpemUuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZVJlc291cmNlOjppbWFnZSk6IFBhc3Mgb24gbV9yZW5kZXJlciB0byBDYWNo
ZWRJbWFnZTo6aW1hZ2UoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlUmVzb3VyY2U6
OmltYWdlU2l6ZSk6IFBhc3Mgb24gbV9yZW5kZXJlciB0byBDYWNoZWRJbWFnZTo6aW1hZ2VTaXpl
KCkuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZTo6c2V0SW1h
Z2VDb250YWluZXJTaXplKTogUmVtb3ZlIGNvbnN0bmVzcywgcGFzcyBvbiBtX3JlbmRlcmVyIHRv
IFN0eWxlSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZSgpLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjppc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKTogQ2FjaGVkSW1hZ2U6OmltYWdlKCkg
bm93IHRha2VzIGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUltYWdlQ29udGVudHMpOiBEaXR0by4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6IENhY2hlZEltYWdl
OjpzZXRJbWFnZUNvbnRhaW5lclNpemUoKSBub3cgdGFrZXMgYSBSZW5kZXJPYmplY3QqIHBhcmFt
ZXRlci4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11c3RSZXBhaW50RmlsbExheWVycyk6IENhY2hlZEltYWdlOjpjYW5SZW5kZXIoKSBu
b3cgdGFrZXMgYSBSZW5kZXJPYmplY3QqIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6Ym9yZGVySW1hZ2VJc0xvYWRlZEFuZENhbkJlUmVuZGVyZWQpOiBEaXR0by4K
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjpjYW5SZW5kZXIpOiBQYXNzIG9uIGluY29taW5n
IHJlbmRlcmVyIHRvIENhY2hlZEltYWdlOjpjYW5SZW5kZXIoKS4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZSk6IFBhc3Mgb24gaW5jb21pbmcgcmVuZGVyZXIg
dG8gQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZSgpLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDYWNo
ZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKTogUGFzcyBvbiBpbmNvbWluZyByZW5kZXJl
ciB0byBDYWNoZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKCkuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUNhY2hlZEltYWdlOjphZGRDbGllbnQpOiBSZW1vdmUgdW5uZWVkZWQgcmV0dXJu
IHN0YXRtZW50IGluIHZvaWQgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJ
bWFnZTo6cmVtb3ZlQ2xpZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hl
ZEltYWdlOjppbWFnZSk6IFBhc3Mgb24gaW5jb21pbmcgcmVuZGVyZXIgdG8gQ2FjaGVkSW1hZ2U6
OmltYWdlKCkuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaDog
QWRkIFJlbmRlck9iamVjdCogcGFyYW1ldGVyIHRvIGNhblJlbmRlcigpL3NldEltYWdlQ29udGFp
bmVyU2l6ZSgpLiBpbWFnZSgpIGFscmVhZHkgaGFzIG9uZSwgdGhhdCB3YXMgdW51c2VkIHNvIGZh
ci4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHA6IElu
bGluZWQgc2V0SW1hZ2VDb250YWluZXJTaXplLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9T
dHlsZUdlbmVyYXRlZEltYWdlLmg6IAorICAgICAgICAoV2ViQ29yZTo6U3R5bGVHZW5lcmF0ZWRJ
bWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKTogQWRkIFJlbmRlck9iamVjdCogcGFyYW1ldGVy
LgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmg6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUltYWdlOjpjYW5SZW5kZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZSk6IERpdHRvLgorICAgICAgICAqIHJlbmRl
cmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQ
ZW5kaW5nSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZSk6IERpdHRvLgorICAgICAgICAqIHN2
Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxl
bWVudDo6YnVpbGQpOiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBub3cgdGFrZXMgYSBSZW5kZXJPYmpl
Y3QqIHBhcmFtZXRlci4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOiBDbGVh
bnVwIGZpbGUsIHRoZSBpbmNsdWRlIGhhY2sgc2VlbXMgbm90IG5lZWRlZCBhbnltb3JlLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OnNldENvbnRhaW5lclNpemUpOiBzL0xheW91dFNpemUv
SW50U2l6ZS8gdG8gbWF0Y2ggdGhlIGNvZGUgaW4gcGxhdGZvcm0vLgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9TVkdJbWFnZS5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpp
c1NWR0ltYWdlKTogUmV0dXJuIHRydWUuCisKIDIwMTEtMTAtMTMgIE1pa2hhaWwgTmFnYW5vdiAg
PG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21p
dW1dIEFkZCBhbiBhYmlsaXR5IHRvIGxvb2sgdXAgYW5kIGV4cGxvcmUgYW4gb2JqZWN0IGZyb20g
YSBoZWFwIHByb2ZpbGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gOTczNjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTU0
LDYgKzk1NCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmNwcAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCiAg
ICAgbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCisgICAgbG9hZGVyL2NhY2hl
L0ltYWdlQnlTaXplQ2FjaGUuY3BwCiAgICAgbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAog
CiAgICAgbG9hZGVyL2ljb24vSWNvbkNvbnRyb2xsZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjEyMSw2ICsyMTIxLDggQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU3R5bGVT
aGVldENsaWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5
bGVTaGVldC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHls
ZVNoZWV0LmggXAorCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hl
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0ltYWdlQnlTaXplQ2FjaGUuaCBc
CiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmggXAogCVNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZVBvbGljeS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkTWV0YWRhdGEuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24g
OTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpA
QCAtMTEwNCw3ICsxMTA0LDcgQEAgX19aTks3V2ViQ29yZTEwU2Nyb2xsVmlldzE2d2luZG93VG9D
b250ZQogX19aTks3V2ViQ29yZTEwU2Nyb2xsVmlldzE2Y29udGVudHNUb1dpbmRvd0VSS05TXzhJ
bnRQb2ludEUKIF9fWk5LN1dlYkNvcmUxMFNjcm9sbFZpZXcxNndpbmRvd1RvQ29udGVudHNFUktO
U184SW50UG9pbnRFCiBfX1pOSzdXZWJDb3JlMTBTY3JvbGxWaWV3MTh2aXNpYmxlQ29udGVudFJl
Y3RFYgotX19aTks3V2ViQ29yZTExQ2FjaGVkSW1hZ2U1aW1hZ2VFdgorX19aTjdXZWJDb3JlMTFD
YWNoZWRJbWFnZTVpbWFnZUVQS05TXzEyUmVuZGVyT2JqZWN0RQogX19aTks3V2ViQ29yZTExRnJh
bWVMb2FkZXIxMGlzQ29tcGxldGVFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGNhbmNl
bGxlZEVycm9yRVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFCiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxv
YWRlcjE0ZnJhbWVIYXNMb2FkZWRFdgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gOTcz
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTU5
Nyw2ICs1OTcsNyBAQAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRTdHlsZVNoZWV0Q2xpZW50Lmgn
LAorICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLmgnLAogICAgICAg
ICAgICAgJ2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oJywKICAgICAgICAgICAgICdsb2FkZXIv
aWNvbi9JY29uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvaWNvbi9JY29uRGF0
YWJhc2UuaCcsCkBAIC0yODQ4LDYgKzI4NDksNyBAQAogICAgICAgICAgICAgJ2xvYWRlci9jYWNo
ZS9DYWNoZWRTY3JpcHQuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0
eWxlU2hlZXQuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVT
aGVldC5oJywKKyAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvSW1hZ2VCeVNpemVDYWNoZS5jcHAn
LAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAnLAogICAgICAgICAg
ICAgJ2xvYWRlci9jZi9SZXNvdXJjZUxvYWRlckNGTmV0LmNwcCcsCiAgICAgICAgICAgICAnbG9h
ZGVyL2Nocm9taXVtL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcCcsCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybwkod29ya2luZyBjb3B5KQpAQCAtODgwLDYgKzg4MCw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9DYWNo
ZWRTY3JpcHQuY3BwIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAg
XAorICAgIGxvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLmNwcCBcCiAgICAgbG9hZGVyL0Ny
b3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgXAogICAgIGxvYWRlci9Dcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlLmNwcCBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcCBcCkBAIC0xODczLDYgKzE4NzQsNyBAQCBIRUFERVJTICs9IFwKICAgICBsb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmggXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRT
Y3JpcHQuaCBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaCBcCisgICAg
bG9hZGVyL2NhY2hlL0ltYWdlQnlTaXplQ2FjaGUuaCBcCiAgICAgbG9hZGVyL2NhY2hlL01lbW9y
eUNhY2hlLmggXAogICAgIGxvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCBcCiAgICAg
bG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gOTczNjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjY4NDUsNiArMjY4NDUsMTQgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxJbWFnZUJ5U2l6ZUNh
Y2hlLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGxvYWRlclxjYWNoZVxJbWFnZUJ5U2l6ZUNhY2hlLmgiCisJCQkJCT4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcTWVtb3J5
Q2FjaGUuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTczNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTEwMyw2ICsxMDMsOCBAQAogCQkwODIzRDE1OTEyN0FENkFDMDAwRUJDOTUg
LyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODIzRDE1ODEyN0FENkFDMDAwRUJDOTUgLyogU1ZHQW5pbWF0ZWRJbnRl
Z2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MDgyNTA5MzkxMjhCRDREODAwRTJFRDhFIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgyNTA5MzgxMjhC
RDREODAwRTJFRDhFIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4MkRFNDJEMTI5MjYyMTYwMEQ5
MjNERiAvKiBTVkdQYXRoU2VnV2l0aENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MkRFNDJDMTI5MjYyMTYwMEQ5MjNERiAvKiBTVkdQYXRo
U2VnV2l0aENvbnRleHQuaCAqLzsgfTsKKwkJMDgzQTk4OUExNDQ0NEZFQTAwOUFEOTJCIC8qIElt
YWdlQnlTaXplQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDgzQTk4OTgxNDQ0NEZFQTAwOUFEOTJCIC8qIEltYWdlQnlTaXplQ2FjaGUuY3Bw
ICovOyB9OworCQkwODNBOTg5QjE0NDQ0RkVBMDA5QUQ5MkIgLyogSW1hZ2VCeVNpemVDYWNoZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzQTk4OTkx
NDQ0NEZFQTAwOUFEOTJCIC8qIEltYWdlQnlTaXplQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwODNEQUVBNjBGMDFBN0ZCMDAzNDI3NTQg
LyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTIwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmNwcCAqLzsgfTsKIAkJMDgzREFFQTcwRjAxQTdGQjAwMzQy
NzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFFQTgwRjAxQTdGQjAwMzQy
NzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyog
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCAqLzsgfTsKQEAgLTcxMTEsNiArNzExMyw4
IEBACiAJCTA4MjNEMTU4MTI3QUQ2QUMwMDBFQkM5NSAvKiBTVkdBbmltYXRlZEludGVnZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRJbnRlZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MjUwOTM4MTI4QkQ0RDgwMEUyRUQ4RSAvKiBT
VkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4MkRFNDJDMTI5MjYyMTYwMEQ5MjNERiAvKiBTVkdQYXRoU2VnV2l0aENvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNlZ1dpdGhDb250ZXh0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4M0E5ODk4MTQ0NDRGRUEwMDlBRDkyQiAv
KiBJbWFnZUJ5U2l6ZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEltYWdlQnlTaXplQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
ODNBOTg5OTE0NDQ0RkVBMDA5QUQ5MkIgLyogSW1hZ2VCeVNpemVDYWNoZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ5U2l6ZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA4M0RBRUEyMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4M0RBRUEzMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBNDBGMDFBN0ZC
MDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODQxOCw2ICsxODQyMiw4IEBACiAJCUE4
RDJCMjUyMTI4N0E1NjAwMEFGNEREQSAvKiBjYWNoZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDgzQTk4OTgxNDQ0NEZFQTAwOUFEOTJCIC8qIEltYWdl
QnlTaXplQ2FjaGUuY3BwICovLAorCQkJCTA4M0E5ODk5MTQ0NDRGRUEwMDlBRDkyQiAvKiBJbWFn
ZUJ5U2l6ZUNhY2hlLmggKi8sCiAJCQkJQkNCMTZDMDAwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hl
ZENTU1N0eWxlU2hlZXQuY3BwICovLAogCQkJCUJDQjE2QzAxMDk3OUMzQkQwMDQ2Nzc0MSAvKiBD
YWNoZWRDU1NTdHlsZVNoZWV0LmggKi8sCiAJCQkJQkM2NEI0QzkwQ0I0Mjk1RDAwNUYyQjYyIC8q
IENhY2hlZEZvbnQuY3BwICovLApAQCAtMjQ2MDYsNiArMjQ2MTIsNyBAQAogCQkJCTMxMDYwMzc1
MTQzMjgxOUMwMEFCRjRCQSAvKiBKU1dlYktpdENTU0ZpbHRlclZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMTA2MDM3OTE0MzI4MUNEMDBBQkY0QkEgLyogRE9NV2ViS2l0Q1NTRmlsdGVyVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDYwMzdCMTQzMjgxQ0QwMEFCRjRCQSAvKiBET01X
ZWJLaXRDU1NGaWx0ZXJWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwODNBOTg5
QjE0NDQ0RkVBMDA5QUQ5MkIgLyogSW1hZ2VCeVNpemVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjlBQ0IyMTIxNDNFNzEyODAwNkJDQTVGIC8qIEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKQEAgLTI3NDU1LDYgKzI3NDYyLDcgQEAKIAkJCQkzMTA2MDM2RjE0MzI3RDJFMDBB
QkY0QkEgLyogV2ViS2l0Q1NTRmlsdGVyVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEw
NjAzNzQxNDMyODE5QzAwQUJGNEJBIC8qIEpTV2ViS2l0Q1NTRmlsdGVyVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwNjAzN0ExNDMyODFDRDAwQUJGNEJBIC8qIERPTVdlYktpdENTU0Zp
bHRlclZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMDgzQTk4OUExNDQ0NEZFQTAwOUFEOTJC
IC8qIEltYWdlQnlTaXplQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlBQ0IyMTQxNDNF
NzQ5ODAwNkJDQTVGIC8qIEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMDkwODdGMTQ0NEZEQjIwMDAyODkxNyAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDk3
MzYzKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxMyw3ICsxOTEzLDcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYgogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAvLyBjaGVjayB3aGV0aGVyIHJlbmRlcmVkIGltYWdlIHdhcyBzdHJldGNoZWQgZnJvbSBvbmUt
ZGltZW5zaW9uYWwgZmlsZSBpbWFnZQogICAgICAgICAgICAgaWYgKGltYWdlLT5jYWNoZWRJbWFn
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZS0+Y2Fj
aGVkSW1hZ2UoKS0+aW1hZ2VTaXplKGltYWdlLT52aWV3KCktPnpvb21GYWN0b3IoKSk7CisgICAg
ICAgICAgICAgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+
aW1hZ2VTaXplKG1fcmVuZGVyZXIsIGltYWdlLT52aWV3KCktPnpvb21GYWN0b3IoKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGltYWdlU2l6ZS5oZWlnaHQoKSA8PSAxIHx8IGltYWdlU2l6ZS53
aWR0aCgpIDw9IDE7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzksNyArNDM5LDcgQEAgLSAo
TlNJbWFnZSopaW1hZ2UKICAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKS0+Y2FjaGVkSW1hZ2Uo
KTsKICAgICBpZiAoIWNhY2hlZEltYWdlIHx8IGNhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkp
CiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIGNhY2hlZEltYWdlLT5pbWFnZSgpLT5n
ZXROU0ltYWdlKCk7CisgICAgcmV0dXJuIGNhY2hlZEltYWdlLT5pbWFnZShyZW5kZXJlciktPmdl
dE5TSW1hZ2UoKTsKIH0KIAogQGVuZApAQCAtNDY0LDcgKzQ2NCw3IEBAIC0gKE5TRGF0YSAqKV9p
bWFnZVRJRkZSZXByZXNlbnRhdGlvbgogICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlKiBjYWNoZWRJ
bWFnZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlJlbmRlckltYWdlKj4ocmVuZGVyZXIpLT5jYWNo
ZWRJbWFnZSgpOwogICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2Nj
dXJyZWQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gKE5TRGF0YSAqKWNhY2hl
ZEltYWdlLT5pbWFnZSgpLT5nZXRUSUZGUmVwcmVzZW50YXRpb24oKTsKKyAgICByZXR1cm4gKE5T
RGF0YSAqKWNhY2hlZEltYWdlLT5pbWFnZShyZW5kZXJlciktPmdldFRJRkZSZXByZXNlbnRhdGlv
bigpOwogfQogCiAtIChOU1VSTCAqKV9nZXRVUkxBdHRyaWJ1dGU6KE5TU3RyaW5nICopbmFtZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCShyZXZpc2lvbiA5NzM2MykK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDE2ICs0NywxNiBAQCBTdHJpbmcgQ1NTQ2FudmFzVmFsdWU6OmNzc1RleHQoKSBjb25z
dAogdm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCos
IGNvbnN0IEZsb2F0UmVjdCYgY2hhbmdlZFJlY3QpCiB7CiAgICAgSW50UmVjdCBpbWFnZUNoYW5n
ZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNoYW5nZWRSZWN0KTsKLSAgICBSZW5kZXJPYmplY3RT
aXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKLSAgICBm
b3IgKFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IG1fY2xp
ZW50cy5iZWdpbigpOyBjdXJyICE9IGVuZDsgKytjdXJyKQotICAgICAgICBjdXJyLT5maXJzdC0+
aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcyksICZpbWFnZUNo
YW5nZVJlY3QpOworICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gY2xpZW50cygpLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFw
Ojpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5kOyAr
K2N1cnIpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmlyc3QpLT5p
bWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdlQ2hh
bmdlUmVjdCk7CiB9CiAKIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQoSFRNTENh
bnZhc0VsZW1lbnQqKQogewotICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9jbGllbnRzLmVuZCgpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNv
dW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gbV9jbGllbnRzLmJlZ2luKCk7IGN1cnIgIT0g
ZW5kOyArK2N1cnIpCi0gICAgICAgIGN1cnItPmZpcnN0LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nh
c3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CisgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCkuZW5kKCk7CisgICAgZm9yIChSZW5kZXJP
YmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBjbGllbnRzKCkuYmVnaW4o
KTsgY3VyciAhPSBlbmQ7ICsrY3VycikKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3Qq
PihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+
KHRoaXMpKTsKIH0KIAogdm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzRGVzdHJveWVkKEhUTUxD
YW52YXNFbGVtZW50KiBlbGVtZW50KQpAQCAtODUsNyArODUsNyBAQCBIVE1MQ2FudmFzRWxlbWVu
dCogQ1NTQ2FudmFzVmFsdWU6OmVsZW1lCiAKIFBhc3NSZWZQdHI8SW1hZ2U+IENTU0NhbnZhc1Zh
bHVlOjppbWFnZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiAvKnNpemUq
LykKIHsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHJlbmRlcmVyKSk7CisgICAgQVNT
RVJUKGNsaWVudHMoKS5jb250YWlucyhyZW5kZXJlcikpOwogICAgIEhUTUxDYW52YXNFbGVtZW50
KiBlbHQgPSBlbGVtZW50KHJlbmRlcmVyLT5kb2N1bWVudCgpKTsKICAgICBpZiAoIWVsdCB8fCAh
ZWx0LT5idWZmZXIoKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBA
QCBQYXNzUmVmUHRyPEltYWdlPiBDU1NHcmFkaWVudFZhbHVlOjppbWFnCiAKICAgICBib29sIGNh
Y2hlYWJsZSA9IGlzQ2FjaGVhYmxlKCk7CiAgICAgaWYgKGNhY2hlYWJsZSkgewotICAgICAgICBp
ZiAoIW1fY2xpZW50cy5jb250YWlucyhyZW5kZXJlcikpCisgICAgICAgIGlmICghY2xpZW50cygp
LmNvbnRhaW5zKHJlbmRlcmVyKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIC8v
IE5lZWQgdG8gbG9vayB1cCBvdXIgc2l6ZS4gIENyZWF0ZSBhIHN0cmluZyBvZiB3aWR0aCpoZWln
aHQgdG8gdXNlIGFzIGEgaGFzaCBrZXkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NjIgKzQ3LDI1IEBAIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6On5DU1NJbWFnZUdlbmVyYXQKIHZv
aWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgcmVmKCk7Ci0gICAgaWYgKCFzaXplLmlz
RW1wdHkoKSkKLSAgICAgICAgbV9zaXplcy5hZGQoc2l6ZSk7Ci0gICAgCi0gICAgUmVuZGVyT2Jq
ZWN0U2l6ZUNvdW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsK
LSAgICBpZiAoaXQgPT0gbV9jbGllbnRzLmVuZCgpKQotICAgICAgICBtX2NsaWVudHMuYWRkKHJl
bmRlcmVyLCBTaXplQ291bnRQYWlyKHNpemUsIDEpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgU2l6
ZUNvdW50UGFpciYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsKLSAgICAgICAgKytzaXplQ291bnQu
c2Vjb25kOwotICAgIH0KKyAgICBtX2ltYWdlQ2FjaGUuYWRkQ2xpZW50KHJlbmRlcmVyLCBzaXpl
KTsKIH0KIAogdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbnQoUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9jbGllbnRzLmZpbmQocmVuZGVyZXIpOwotICAgIEFTU0VSVChpdCAhPSBtX2Ns
aWVudHMuZW5kKCkpOwotCi0gICAgU2l6ZUNvdW50UGFpciYgc2l6ZUNvdW50ID0gaXQtPnNlY29u
ZDsKLSAgICBJbnRTaXplIHNpemUgPSBzaXplQ291bnQuZmlyc3Q7Ci0gICAgaWYgKCFzaXplLmlz
RW1wdHkoKSkgewotICAgICAgICBtX3NpemVzLnJlbW92ZShzaXplKTsKLSAgICAgICAgaWYgKCFt
X3NpemVzLmNvbnRhaW5zKHNpemUpKQotICAgICAgICAgICAgbV9pbWFnZXMucmVtb3ZlKHNpemUp
OwotICAgIH0KLSAgICAKLSAgICBpZiAoIS0tc2l6ZUNvdW50LnNlY29uZCkKLSAgICAgICAgbV9j
bGllbnRzLnJlbW92ZShyZW5kZXJlcik7Ci0KKyAgICBtX2ltYWdlQ2FjaGUucmVtb3ZlQ2xpZW50
KHJlbmRlcmVyKTsKICAgICBkZXJlZigpOwogfQogCiBJbWFnZSogQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZTo6Z2V0SW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIHsKLSAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jbGll
bnRzLmZpbmQocmVuZGVyZXIpOwotICAgIEFTU0VSVChpdCAhPSBtX2NsaWVudHMuZW5kKCkpOwot
Ci0gICAgU2l6ZUNvdW50UGFpciYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsKLSAgICBJbnRTaXpl
IG9sZFNpemUgPSBzaXplQ291bnQuZmlyc3Q7Ci0gICAgaWYgKG9sZFNpemUgIT0gc2l6ZSkgewot
ICAgICAgICAvLyBJZiByZW5kZXJlciBpcyB0aGUgb25seSBjbGllbnQsIG1ha2Ugc3VyZSB3ZSBk
b24ndCBkZWxldGUgdGhpcy4KLSAgICAgICAgUmVmUHRyPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+
IHByb3RlY3QodGhpcyk7Ci0gICAgICAgIHJlbW92ZUNsaWVudChyZW5kZXJlcik7Ci0gICAgICAg
IGFkZENsaWVudChyZW5kZXJlciwgc2l6ZSk7Ci0gICAgfQotICAgIAotICAgIC8vIERvbid0IGdl
bmVyYXRlIGFuIGltYWdlIGZvciBlbXB0eSBzaXplcy4KLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIC8vIExvb2sgdXAgdGhlIGltYWdlIGluIG91
ciBjYWNoZS4KLSAgICByZXR1cm4gbV9pbWFnZXMuZ2V0KHNpemUpLmdldCgpOworICAgIC8vIElm
IHJlbmRlcmVyIGlzIHRoZSBvbmx5IGNsaWVudCwgbWFrZSBzdXJlIHdlIGRvbid0IGRlbGV0ZSB0
aGlzLCBpZiB0aGUgc2l6ZSBjaGFuZ2VzIChhcyB0aGlzIHdpbGwgcmVzdWx0IGluIGFkZENsaWVu
dC9yZW1vdmVDbGllbnQgY2FsbHMpLgorICAgIFJlZlB0cjxDU1NJbWFnZUdlbmVyYXRvclZhbHVl
PiBwcm90ZWN0KHRoaXMpOworICAgIHJldHVybiBtX2ltYWdlQ2FjaGUuZ2V0SW1hZ2UocmVuZGVy
ZXIsIHNpemUpOwogfQogCiB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnB1dEltYWdlKGNv
bnN0IEludFNpemUmIHNpemUsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQogewotICAgIG1faW1h
Z2VzLmFkZChzaXplLCBpbWFnZSk7CisgICAgbV9pbWFnZUNhY2hlLnB1dEltYWdlKHNpemUsIGlt
YWdlKTsKIH0KIAogU3R5bGVHZW5lcmF0ZWRJbWFnZSogQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6
Z2VuZXJhdGVkSW1hZ2UoKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJh
dG9yVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZS5oCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNyw3IEBACiAj
ZGVmaW5lIENTU0ltYWdlR2VuZXJhdG9yVmFsdWVfaAogCiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIK
LSNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgIkltYWdlQnlTaXplQ2FjaGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01
NiwxNCArNTMsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgSW1hZ2UqIGdldEltYWdlKFJlbmRl
ck9iamVjdCosIGNvbnN0IEludFNpemUmKTsKICAgICB2b2lkIHB1dEltYWdlKGNvbnN0IEludFNp
emUmLCBQYXNzUmVmUHRyPEltYWdlPik7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0U2l6ZUNvdW50
TWFwJiBjbGllbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUNhY2hlLmNsaWVudHMoKTsgfQog
Ci0gICAgdHlwZWRlZiBwYWlyPEludFNpemUsIGludD4gU2l6ZUNvdW50UGFpcjsKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgU2l6ZUNvdW50UGFpcj4gUmVuZGVyT2JqZWN0U2l6
ZUNvdW50TWFwOwotCi0gICAgSGFzaENvdW50ZWRTZXQ8SW50U2l6ZT4gbV9zaXplczsgLy8gQSBj
b3VudCBvZiBob3cgbWFueSB0aW1lcyBhIGdpdmVuIGltYWdlIHNpemUgaXMgaW4gdXNlLgotICAg
IFJlbmRlck9iamVjdFNpemVDb3VudE1hcCBtX2NsaWVudHM7IC8vIEEgbWFwIGZyb20gUmVuZGVy
T2JqZWN0cyAod2l0aCBlbnRyeSBjb3VudCkgdG8gaW1hZ2Ugc2l6ZXMuCi0gICAgSGFzaE1hcDxJ
bnRTaXplLCBSZWZQdHI8SW1hZ2U+ID4gbV9pbWFnZXM7IC8vIEEgY2FjaGUgb2YgSW1hZ2Ugb2Jq
ZWN0cyBieSBpbWFnZSBzaXplLgotICAgIAorICAgIEltYWdlQnlTaXplQ2FjaGUgbV9pbWFnZUNh
Y2hlOwogICAgIFJlZlB0cjxTdHlsZUdlbmVyYXRlZEltYWdlPiBtX2ltYWdlOwogICAgIGJvb2wg
bV9hY2Nlc3NlZEltYWdlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBib29sIGlzRGVsZXRhYmxlRWxlbWVudChjb25zdCBO
b2QKICAgICAgICAgLy8gQWxsb3cgYmxvY2tzIHRoYXQgaGF2ZSBiYWNrZ3JvdW5kIGltYWdlcwog
ICAgICAgICBpZiAoc3R5bGUtPmhhc0JhY2tncm91bmRJbWFnZSgpKSB7CiAgICAgICAgICAgICBm
b3IgKGNvbnN0IEZpbGxMYXllciogYmFja2dyb3VuZCA9IHN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJz
KCk7IGJhY2tncm91bmQ7IGJhY2tncm91bmQgPSBiYWNrZ3JvdW5kLT5uZXh0KCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYmFja2dyb3VuZC0+aW1hZ2UoKSAmJiBiYWNrZ3JvdW5kLT5pbWFnZSgp
LT5jYW5SZW5kZXIoMSkpCisgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmQtPmltYWdlKCkg
JiYgYmFja2dyb3VuZC0+aW1hZ2UoKS0+Y2FuUmVuZGVyKHJlbmRlcmVyLCAxKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gOTczNjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTcsNyArMjU3LDcgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKGJvb2wg
aWdub3JlUAogCiAgICAgICAgIC8vIGlmIHRoZSBpbWFnZSBpcyBhdmFpbGFibGUsIHVzZSBpdHMg
d2lkdGgKICAgICAgICAgaWYgKG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKLSAgICAgICAgICAgIHJl
dHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZSgxLjBmKS53aWR0aCgpOworICAg
ICAgICAgICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVy
KCksIDEuMGYpLndpZHRoKCk7CiAgICAgfQogCiAgICAgaWYgKGlnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cykKQEAgLTI4MCw3ICsyODAsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6aGVpZ2h0KGJv
b2wgaWdub3JlCiAKICAgICAgICAgLy8gaWYgdGhlIGltYWdlIGlzIGF2YWlsYWJsZSwgdXNlIGl0
cyBoZWlnaHQKICAgICAgICAgaWYgKG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKLSAgICAgICAgICAg
IHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZSgxLjBmKS5oZWlnaHQoKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZShyZW5k
ZXJlcigpLCAxLjBmKS5oZWlnaHQoKTsKICAgICB9CiAKICAgICBpZiAoaWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKQpAQCAtMjk3LDcgKzI5Nyw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50OjpuYXR1
cmFsV2lkdGgoKSBjb24KICAgICBpZiAoIW1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUo
MS4wZikud2lkdGgoKTsKKyAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNp
emUocmVuZGVyZXIoKSwgMS4wZikud2lkdGgoKTsKIH0KIAogaW50IEhUTUxJbWFnZUVsZW1lbnQ6
Om5hdHVyYWxIZWlnaHQoKSBjb25zdApAQCAtMzA1LDcgKzMwNSw3IEBAIGludCBIVE1MSW1hZ2VF
bGVtZW50OjpuYXR1cmFsSGVpZ2h0KCkgY28KICAgICBpZiAoIW1faW1hZ2VMb2FkZXIuaW1hZ2Uo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgp
LT5pbWFnZVNpemUoMS4wZikuaGVpZ2h0KCk7CisgICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1h
Z2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyKCksIDEuMGYpLmhlaWdodCgpOwogfQogCiBib29sIEhU
TUxJbWFnZUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAkocmV2aXNpb24gOTczNjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTUsNyArMTU1LDcgQEAgdm9pZCBJbWFnZURvY3VtZW50UGFyc2VyOjpmaW5pc2goKQogCiAg
ICAgICAgIC8vIFJlcG9ydCB0aGUgbmF0dXJhbCBpbWFnZSBzaXplIGluIHRoZSBwYWdlIHRpdGxl
LCByZWdhcmRsZXNzIG9mIHpvb20KICAgICAgICAgLy8gbGV2ZWwuCi0gICAgICAgIExheW91dFNp
emUgc2l6ZSA9IGNhY2hlZEltYWdlLT5pbWFnZVNpemUoMS4wZik7CisgICAgICAgIExheW91dFNp
emUgc2l6ZSA9IGNhY2hlZEltYWdlLT5pbWFnZVNpemUoZG9jdW1lbnQoKS0+aW1hZ2VFbGVtZW50
KCktPnJlbmRlcmVyKCksIDEuMGYpOwogICAgICAgICBpZiAoc2l6ZS53aWR0aCgpKSB7CiAgICAg
ICAgICAgICAvLyBDb21wdXRlIHRoZSB0aXRsZSwgd2UgdXNlIHRoZSBkZWNvZGVkIGZpbGVuYW1l
IG9mIHRoZSByZXNvdXJjZSwgZmFsbGluZwogICAgICAgICAgICAgLy8gYmFjayBvbiB0aGUgKGRl
Y29kZWQpIGhvc3RuYW1lIGlmIHRoZXJlIGlzIG5vIHBhdGguCkBAIC0yMzMsOCArMjMzLDggQEAg
ZmxvYXQgSW1hZ2VEb2N1bWVudDo6c2NhbGUoKSBjb25zdAogICAgIGlmICghdmlldykKICAgICAg
ICAgcmV0dXJuIDE7CiAKLSAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IG1faW1hZ2VFbGVtZW50
LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUocGFnZVpvb21GYWN0b3IodGhpcykpOwotICAgIExh
eW91dFNpemUgd2luZG93U2l6ZSA9IEludFNpemUodmlldy0+d2lkdGgoKSwgdmlldy0+aGVpZ2h0
KCkpOworICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hlZElt
YWdlKCktPmltYWdlU2l6ZShtX2ltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSwgcGFnZVpvb21GYWN0
b3IodGhpcykpOworICAgIExheW91dFNpemUgd2luZG93U2l6ZSA9IExheW91dFNpemUodmlldy0+
d2lkdGgoKSwgdmlldy0+aGVpZ2h0KCkpOwogICAgIAogICAgIGZsb2F0IHdpZHRoU2NhbGUgPSAo
ZmxvYXQpd2luZG93U2l6ZS53aWR0aCgpIC8gaW1hZ2VTaXplLndpZHRoKCk7CiAgICAgZmxvYXQg
aGVpZ2h0U2NhbGUgPSAoZmxvYXQpd2luZG93U2l6ZS5oZWlnaHQoKSAvIGltYWdlU2l6ZS5oZWln
aHQoKTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OnJlc2l6ZUltYWdl
VG9GaXQoKQogICAgIGlmICghbV9pbWFnZUVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmlt
YWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CisgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUg
PSBtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKG1faW1hZ2VFbGVtZW50
LT5yZW5kZXJlcigpLCBwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CiAKICAgICBmbG9hdCBzY2FsZSA9
IHRoaXMtPnNjYWxlKCk7CiAgICAgbV9pbWFnZUVsZW1lbnQtPnNldFdpZHRoKHN0YXRpY19jYXN0
PGludD4oaW1hZ2VTaXplLndpZHRoKCkgKiBzY2FsZSkpOwpAQCAtMjg3LDcgKzI4Nyw3IEBAIHZv
aWQgSW1hZ2VEb2N1bWVudDo6aW1hZ2VVcGRhdGVkKCkKICAgICBpZiAobV9pbWFnZVNpemVJc0tu
b3duKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbWFnZUVsZW1lbnQtPmNhY2hlZElt
YWdlKCktPmltYWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSkuaXNFbXB0eSgpKQorICAgIGlm
IChtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKG1faW1hZ2VFbGVtZW50
LT5yZW5kZXJlcigpLCBwYWdlWm9vbUZhY3Rvcih0aGlzKSkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgbV9pbWFnZVNpemVJc0tub3duID0gdHJ1ZTsKQEAgLTMwMyw4ICsz
MDMsOSBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OnJlc3RvcmVJbWFnZVNpemUoKQogICAgIGlmICgh
bV9pbWFnZUVsZW1lbnQgfHwgIW1faW1hZ2VTaXplSXNLbm93bikKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1faW1hZ2VFbGVtZW50LT5zZXRXaWR0aChtX2ltYWdlRWxlbWVudC0+Y2FjaGVk
SW1hZ2UoKS0+aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKHRoaXMpKS53aWR0aCgpKTsKLSAgICBt
X2ltYWdlRWxlbWVudC0+c2V0SGVpZ2h0KG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5p
bWFnZVNpemUocGFnZVpvb21GYWN0b3IodGhpcykpLmhlaWdodCgpKTsKKyAgICBMYXlvdXRTaXpl
IGltYWdlU2l6ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUobV9p
bWFnZUVsZW1lbnQtPnJlbmRlcmVyKCksIHBhZ2Vab29tRmFjdG9yKHRoaXMpKTsKKyAgICBtX2lt
YWdlRWxlbWVudC0+c2V0V2lkdGgoaW1hZ2VTaXplLndpZHRoKCkpOworICAgIG1faW1hZ2VFbGVt
ZW50LT5zZXRIZWlnaHQoaW1hZ2VTaXplLmhlaWdodCgpKTsKICAgICAKICAgICBFeGNlcHRpb25D
b2RlIGVjOwogICAgIGlmIChpbWFnZUZpdHNJbldpbmRvdygpKQpAQCAtMzI0LDcgKzMyNSw3IEBA
IGJvb2wgSW1hZ2VEb2N1bWVudDo6aW1hZ2VGaXRzSW5XaW5kb3coKSAKICAgICBpZiAoIXZpZXcp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2lt
YWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKHRoaXMp
KTsKKyAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFn
ZSgpLT5pbWFnZVNpemUobV9pbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCksIHBhZ2Vab29tRmFjdG9y
KHRoaXMpKTsKICAgICBMYXlvdXRTaXplIHdpbmRvd1NpemUgPSBMYXlvdXRTaXplKHZpZXctPndp
ZHRoKCksIHZpZXctPmhlaWdodCgpKTsKICAgICAKICAgICByZXR1cm4gaW1hZ2VTaXplLndpZHRo
KCkgPD0gd2luZG93U2l6ZS53aWR0aCgpICYmIGltYWdlU2l6ZS5oZWlnaHQoKSA8PSB3aW5kb3dT
aXplLmhlaWdodCgpOyAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gOTczNjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Myw5ICs4Myw5IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZWZhdWx0Rm9udCA9ICIxMHB4IHNhbnMt
c2VyaWYiOwogCi1zdGF0aWMgYm9vbCBpc09yaWdpbkNsZWFuKENhY2hlZEltYWdlKiBjYWNoZWRJ
bWFnZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQorc3RhdGljIGJvb2wgaXNPcmln
aW5DbGVhbihDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdl
LCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCiB7Ci0gICAgaWYgKCFjYWNoZWRJbWFn
ZS0+aW1hZ2UoKS0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSkKKyAgICBpZiAoIWNhY2hlZElt
YWdlLT5pbWFnZShpbWFnZS0+cmVuZGVyZXIoKSktPmhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoY2FjaGVkSW1hZ2UtPnBhc3Nlc0FjY2Vz
c0NvbnRyb2xDaGVjayhzZWN1cml0eU9yaWdpbikpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MTIyMCw3ICsxMjIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFwcGx5U2hh
ZAogc3RhdGljIExheW91dFNpemUgc2l6ZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSkKIHsKICAg
ICBpZiAoQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdlKCkpCi0g
ICAgICAgIHJldHVybiBjYWNoZWRJbWFnZS0+aW1hZ2VTaXplKDEuMGYpOyAvLyBGSVhNRTogTm90
IHN1cmUgYWJvdXQgdGhpcy4KKyAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlLT5pbWFnZVNpemUo
aW1hZ2UtPnJlbmRlcmVyKCksIDEuMGYpOyAvLyBGSVhNRTogTm90IHN1cmUgYWJvdXQgdGhpcy4K
ICAgICByZXR1cm4gSW50U2l6ZSgpOwogfQogCkBAIC0xMzIwLDcgKzEzMjAsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAKICAgICBjaGVja09yaWdpbihpbWFn
ZSk7CiAKLSAgICBjLT5kcmF3SW1hZ2UoY2FjaGVkSW1hZ2UtPmltYWdlKCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIG5vcm1hbGl6ZWREc3RSZWN0LCBub3JtYWxpemVkU3JjUmVjdCwgb3ApOworICAg
IGMtPmRyYXdJbWFnZShjYWNoZWRJbWFnZS0+aW1hZ2UoaW1hZ2UtPnJlbmRlcmVyKCkpLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBub3JtYWxpemVkRHN0UmVjdCwgbm9ybWFsaXplZFNyY1JlY3QsIG9w
KTsKICAgICBkaWREcmF3KG5vcm1hbGl6ZWREc3RSZWN0KTsKIH0KIApAQCAtMTYzMSwxMSArMTYz
MSwxMSBAQCBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmluCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hl
ZEltYWdlKCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCkt
PmltYWdlKCkpCisgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCkt
PmltYWdlKGltYWdlLT5yZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuIENhbnZhc1BhdHRlcm46
OmNyZWF0ZShJbWFnZTo6bnVsbEltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIHRydWUpOwogCi0g
ICAgYm9vbCBvcmlnaW5DbGVhbiA9IGlzT3JpZ2luQ2xlYW4oY2FjaGVkSW1hZ2UsIGNhbnZhcygp
LT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGNh
Y2hlZEltYWdlLT5pbWFnZSgpLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbik7CisgICAg
Ym9vbCBvcmlnaW5DbGVhbiA9IGlzT3JpZ2luQ2xlYW4oY2FjaGVkSW1hZ2UsIGltYWdlLCBjYW52
YXMoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0
ZShjYWNoZWRJbWFnZS0+aW1hZ2UoaW1hZ2UtPnJlbmRlcmVyKCkpLCByZXBlYXRYLCByZXBlYXRZ
LCBvcmlnaW5DbGVhbik7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMs
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEs
NyArNjEsNyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OndvdWxkVGFpbnRPCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdl
LT5jYWNoZWRJbWFnZSgpOwotICAgIGlmICghY2FjaGVkSW1hZ2UtPmltYWdlKCktPmhhc1Npbmds
ZVNlY3VyaXR5T3JpZ2luKCkpCisgICAgaWYgKCFjYWNoZWRJbWFnZS0+aW1hZ2UoaW1hZ2UtPnJl
bmRlcmVyKCkpLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIHJldHVybiB3b3VsZFRhaW50T3JpZ2luKGNhY2hlZEltYWdlLT5yZXNwb25zZSgp
LnVybCgpKSAmJiAhY2FjaGVkSW1hZ2UtPnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhjYW52YXMo
KS0+c2VjdXJpdHlPcmlnaW4oKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzE3Miw3ICszMTcyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkQoRwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdGV4SW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2Ut
PmNhY2hlZEltYWdlKCktPmltYWdlKCksCisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmlt
YWdlKGltYWdlLT5yZW5kZXJlcigpKSwKICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIApAQCAtMzM3Myw3ICszMzczLDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAgICAgICBlYyA9
IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0ZXhTdWJJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdl
LT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpLAorICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdl
KCktPmltYWdlKGltYWdlLT5yZW5kZXJlcigpKSwKICAgICAgICAgICAgICAgICAgICAgICBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA5NzM2
MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyOSw3ICsxMjksNzUgQEAgYm9vbCBDYWNoZWRJbWFnZTo6d2lsbFBhaW50
QnJva2VuSW1hZ2UoKQogICAgIHJldHVybiBlcnJvck9jY3VycmVkKCkgJiYgbV9zaG91bGRQYWlu
dEJyb2tlbkltYWdlOwogfQogCi1JbWFnZSogQ2FjaGVkSW1hZ2U6OmltYWdlKCkgY29uc3QKK0lt
YWdlKiBDYWNoZWRJbWFnZTo6bG9va3VwSW1hZ2VGb3JTaXplKGNvbnN0IEludFNpemUmIHNpemUp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFR1cm4gdGhpcyBvbiBvbmNlLCB3ZWJraXQub3JnL2Iv
NDcxNTYgbGFuZHMuCisjaWYgRU5BQkxFKFNWRykgJiYgMAorICAgIGlmICghbV9pbWFnZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX2ltYWdlLT5pc1NWR0ltYWdlKCkpCisgICAgICAg
IHJldHVybiBtX2ltYWdlLmdldCgpOworICAgIGlmIChJbWFnZSogY2FjaGVkSW1hZ2UgPSBtX3N2
Z0ltYWdlQ2FjaGUuaW1hZ2VGb3JTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gY2FjaGVkSW1h
Z2U7CisgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
aXplKTsKKyAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKKyNlbmRpZgorfQorCitJbWFnZSogQ2Fj
aGVkSW1hZ2U6Omxvb2t1cEltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVHVybiB0aGlzIG9uIG9uY2UsIHdlYmtpdC5v
cmcvYi80NzE1NiBsYW5kcy4KKyNpZiBFTkFCTEUoU1ZHKSAmJiAwCisgICAgaWYgKCFtX2ltYWdl
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1faW1hZ2UtPmlzU1ZHSW1hZ2UoKSkKKyAg
ICAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisgICAgSW50U2l6ZSBzaXplID0gbV9zdmdJbWFn
ZUNhY2hlLnNpemVGb3JDbGllbnQocmVuZGVyZXIpOworICAgIGlmIChJbWFnZSogY2FjaGVkSW1h
Z2UgPSBtX3N2Z0ltYWdlQ2FjaGUuaW1hZ2VGb3JTaXplKHNpemUpKQorICAgICAgICByZXR1cm4g
Y2FjaGVkSW1hZ2U7CisgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShyZW5kZXJlcik7CisgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisjZW5kaWYKK30K
KworUGFzc1JlZlB0cjxJbWFnZT4gQ2FjaGVkSW1hZ2U6Omxvb2t1cE9yQ3JlYXRlSW1hZ2VGb3JS
ZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIC8vIEZJWE1FOiBU
dXJuIHRoaXMgb24gb25jZSwgd2Via2l0Lm9yZy9iLzQ3MTU2IGxhbmRzLgorI2lmIEVOQUJMRShT
VkcpICYmIDAKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9pbWFnZTsKKyAgICBpZiAoaW1h
Z2UgJiYgaW1hZ2UtPmlzU1ZHSW1hZ2UoKSkgeworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAg
ICAgICAgICAgcmV0dXJuIG1faW1hZ2U7CisKKyAgICAgICAgaWYgKCFtX3N2Z0ltYWdlQ2FjaGUu
Y2xpZW50cygpLmNvbnRhaW5zKHJlbmRlcmVyKSkKKyAgICAgICAgICAgIHJldHVybiBtX2ltYWdl
OworCisgICAgICAgIC8vIE5lZWQgdG8gbG9vayB1cCBvdXIgc2l6ZS4KKyAgICAgICAgSW50U2l6
ZSBzaXplID0gbV9zdmdJbWFnZUNhY2hlLnNpemVGb3JDbGllbnQocmVuZGVyZXIpOworICAgICAg
ICBpZiAoSW1hZ2UqIHJlc3VsdCA9IG1fc3ZnSW1hZ2VDYWNoZS5nZXRJbWFnZShyZW5kZXJlciwg
c2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgIC8vIFdlIG5lZWQg
dG8gY3JlYXRlIGFuIGltYWdlLgorICAgICAgICBBU1NFUlQobV9kYXRhKTsKKyAgICAgICAgQVNT
RVJUKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiaW1hZ2Uvc3ZnK3htbCIpOworICAgICAgICBS
ZWZQdHI8SW1hZ2U+IG5ld0ltYWdlID0gU1ZHSW1hZ2U6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAg
bmV3SW1hZ2UtPnNldERhdGEobV9kYXRhLCB0cnVlKTsKKyAgICAgICAgbmV3SW1hZ2UtPnNldENv
bnRhaW5lclNpemUoc2l6ZSk7CisgICAgICAgIG1fc3ZnSW1hZ2VDYWNoZS5wdXRJbWFnZShzaXpl
LCBuZXdJbWFnZSk7CisgICAgICAgIHJldHVybiBuZXdJbWFnZS5yZWxlYXNlKCk7CisgICAgfQor
ICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZW5k
ZXJlcik7CisgICAgcmV0dXJuIG1faW1hZ2U7CisjZW5kaWYKK30KKworSW1hZ2UqIENhY2hlZElt
YWdlOjppbWFnZShjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIEFTU0VSVCgh
aXNQdXJnZWFibGUoKSk7CiAKQEAgLTE0MSwxNSArMjA5LDQzIEBAIEltYWdlKiBDYWNoZWRJbWFn
ZTo6aW1hZ2UoKSBjb25zdAogICAgIH0KIAogICAgIGlmIChtX2ltYWdlKQotICAgICAgICByZXR1
cm4gbV9pbWFnZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlSW1hZ2VGb3JS
ZW5kZXJlcihyZW5kZXJlcikuZ2V0KCk7CiAKICAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgp
OwogfQogCi12b2lkIENhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50
U2l6ZSYgY29udGFpbmVyU2l6ZSkKK3ZvaWQgQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVy
U2l6ZShjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBjb250YWlu
ZXJTaXplKQogewotICAgIGlmIChtX2ltYWdlKQorICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICghbV9pbWFnZS0+aXNTVkdJbWFnZSgpKSB7CiAgICAgICAgIG1faW1h
Z2UtPnNldENvbnRhaW5lclNpemUoY29udGFpbmVyU2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogVHVybiB0aGlzIG9uIG9uY2UsIHdlYmtpdC5vcmcvYi80NzE1
NiBsYW5kcy4KKyNpZiBFTkFCTEUoU1ZHKSAmJiAwCisgICAgLy8gU1ZHSW1hZ2VzIGFyZSBpbmRl
cGVuZGVudGx5IGNhY2hlZCBwZXIgc2l6ZSBpbiB0aGUgSW1hZ2VCeVNpemVDYWNoZS4KKyAgICBS
ZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdmdJbWFnZUNh
Y2hlLmNsaWVudHMoKS5maW5kKHJlbmRlcmVyKTsKKyAgICBpZiAoaXQgIT0gbV9zdmdJbWFnZUNh
Y2hlLmNsaWVudHMoKS5lbmQoKSkgeworICAgICAgICBJbnRTaXplIGN1cnJlbnRTaXplID0gaXQt
PnNlY29uZC5maXJzdDsKKyAgICAgICAgQVNTRVJUKCFjdXJyZW50U2l6ZS5pc0VtcHR5KCkpOwor
ICAgICAgICBpZiAoY3VycmVudFNpemUgPT0gY29udGFpbmVyU2l6ZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbV9zdmdJbWFnZUNhY2hlLnJlbW92ZUNsaWVudChyZW5kZXJlcik7Cisg
ICAgICAgIGlmICghY29udGFpbmVyU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX3N2Z0lt
YWdlQ2FjaGUuYWRkQ2xpZW50KHJlbmRlcmVyLCBjb250YWluZXJTaXplKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChjb250YWluZXJTaXplLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9zdmdJbWFnZUNhY2hlLmFkZENsaWVudChyZW5kZXJlciwgY29udGFp
bmVyU2l6ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZW5kZXJlcik7CisgICAgbV9pbWFn
ZS0+c2V0Q29udGFpbmVyU2l6ZShjb250YWluZXJTaXplKTsKKyNlbmRpZgogfQogCiBib29sIENh
Y2hlZEltYWdlOjp1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QKQEAgLTE3NiwxMSArMjcy
LDEyIEBAIGJvb2wgQ2FjaGVkSW1hZ2U6OmltYWdlSGFzUmVsYXRpdmVIZWlnaHQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLUludFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShmbG9hdCBtdWx0
aXBsaWVyKSBjb25zdAorSW50U2l6ZSBDYWNoZWRJbWFnZTo6aW1hZ2VTaXplKGNvbnN0IFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpCiB7CiAgICAgQVNTRVJUKCFpc1B1
cmdlYWJsZSgpKTsKIAotICAgIGlmICghbV9pbWFnZSkKKyAgICBJbWFnZSogaW1hZ2UgPSBsb29r
dXBJbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICBy
ZXR1cm4gSW50U2l6ZSgpOwogICAgIGlmIChtdWx0aXBsaWVyID09IDEuMGYpCiAgICAgICAgIHJl
dHVybiBtX2ltYWdlLT5zaXplKCk7CkBAIC0xOTcsMTEgKzI5NCwxMiBAQCBJbnRTaXplIENhY2hl
ZEltYWdlOjppbWFnZVNpemUoZmxvYXQgbXVsCiAgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhl
aWdodCk7CiB9CiAKLUludFJlY3QgQ2FjaGVkSW1hZ2U6OmltYWdlUmVjdChmbG9hdCBtdWx0aXBs
aWVyKSBjb25zdAorSW50UmVjdCBDYWNoZWRJbWFnZTo6aW1hZ2VSZWN0KGNvbnN0IFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpCiB7CiAgICAgQVNTRVJUKCFpc1B1cmdl
YWJsZSgpKTsKIAotICAgIGlmICghbV9pbWFnZSkKKyAgICBJbWFnZSogaW1hZ2UgPSBsb29rdXBJ
bWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwogICAgIGlmIChtdWx0aXBsaWVyID09IDEuMGYgfHwgKCFtX2ltYWdlLT5o
YXNSZWxhdGl2ZVdpZHRoKCkgJiYgIW1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCkpKQogICAg
ICAgICByZXR1cm4gbV9pbWFnZS0+cmVjdCgpOwpAQCAtMjQ1LDYgKzM0Myw3IEBAIHZvaWQgQ2Fj
aGVkSW1hZ2U6OmNoZWNrU2hvdWxkUGFpbnRCcm9rZW4KIHZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFy
KCkKIHsKICAgICBkZXN0cm95RGVjb2RlZERhdGEoKTsKKyAgICBtX3N2Z0ltYWdlQ2FjaGUuY2xl
YXIoKTsKICAgICBtX2ltYWdlID0gMDsKICAgICBzZXRFbmNvZGVkU2l6ZSgwKTsKIH0KQEAgLTI5
Nyw3ICszOTYsNyBAQCB2b2lkIENhY2hlZEltYWdlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkCiAg
ICAgLy8gdG8gZGVjb2RlLgogICAgIGlmIChzaXplQXZhaWxhYmxlIHx8IGFsbERhdGFSZWNlaXZl
ZCkgewogICAgICAgICBzaXplX3QgbWF4RGVjb2RlZEltYWdlU2l6ZSA9IG1heGltdW1EZWNvZGVk
SW1hZ2VTaXplKCk7Ci0gICAgICAgIEludFNpemUgcyA9IGltYWdlU2l6ZSgxLjBmKTsKKyAgICAg
ICAgSW50U2l6ZSBzID0gbV9pbWFnZS0+c2l6ZSgpOwogICAgICAgICBzaXplX3QgZXN0aW1hdGVk
RGVjb2RlZEltYWdlU2l6ZSA9IHMud2lkdGgoKSAqIHMuaGVpZ2h0KCkgKiA0OyAvLyBubyBvdmVy
ZmxvdyBjaGVjawogICAgICAgICBpZiAobV9pbWFnZS0+aXNOdWxsKCkgfHwgKG1heERlY29kZWRJ
bWFnZVNpemUgPiAwICYmIGVzdGltYXRlZERlY29kZWRJbWFnZVNpemUgPiBtYXhEZWNvZGVkSW1h
Z2VTaXplKSkgewogICAgICAgICAgICAgZXJyb3IoZXJyb3JPY2N1cnJlZCgpID8gc3RhdHVzKCkg
OiBEZWNvZGVFcnJvcik7CkBAIC0zNDIsMTMgKzQ0MSwxNiBAQCB2b2lkIENhY2hlZEltYWdlOjpk
ZXN0cm95RGVjb2RlZERhdGEoKQogICAgICAgICBzZXREZWNvZGVkU2l6ZSgwKTsKICAgICAgICAg
aWYgKCFNZW1vcnlDYWNoZTo6c2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigp
KQogICAgICAgICAgICAgbWFrZVB1cmdlYWJsZSh0cnVlKTsKLSAgICB9IGVsc2UgaWYgKG1faW1h
Z2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKKyAgICB9IGVsc2UgaWYgKG1faW1hZ2UgJiYgIWVycm9y
T2NjdXJyZWQoKSAmJiAhbV9pbWFnZS0+aXNTVkdJbWFnZSgpKQogICAgICAgICBtX2ltYWdlLT5k
ZXN0cm95RGVjb2RlZERhdGEoKTsKIH0KIAogdm9pZCBDYWNoZWRJbWFnZTo6ZGVjb2RlZFNpemVD
aGFuZ2VkKGNvbnN0IEltYWdlKiBpbWFnZSwgaW50IGRlbHRhKQogewotICAgIGlmIChpbWFnZSAh
PSBtX2ltYWdlKQorICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBJbWFnZSog
dXNlSW1hZ2UgPSBsb29rdXBJbWFnZUZvclNpemUoaW1hZ2UtPnNpemUoKSk7CisgICAgaWYgKGlt
YWdlICE9IHVzZUltYWdlKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgc2V0RGVjb2RlZFNp
emUoZGVjb2RlZFNpemUoKSArIGRlbHRhKTsKQEAgLTM1Niw3ICs0NTgsMTAgQEAgdm9pZCBDYWNo
ZWRJbWFnZTo6ZGVjb2RlZFNpemVDaGFuZ2VkKGNvbgogCiB2b2lkIENhY2hlZEltYWdlOjpkaWRE
cmF3KGNvbnN0IEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgIT0gbV9pbWFnZSkKKyAg
ICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgSW1hZ2UqIHVzZUltYWdlID0gbG9v
a3VwSW1hZ2VGb3JTaXplKGltYWdlLT5zaXplKCkpOworICAgIGlmIChpbWFnZSAhPSB1c2VJbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGRvdWJsZSB0aW1lU3RhbXAgPSBGcmFtZVZp
ZXc6OmN1cnJlbnRQYWludFRpbWVTdGFtcCgpOwpAQCAtMzY4LDcgKzQ3MywxMCBAQCB2b2lkIENh
Y2hlZEltYWdlOjpkaWREcmF3KGNvbnN0IEltYWdlKiBpCiAKIGJvb2wgQ2FjaGVkSW1hZ2U6OnNo
b3VsZFBhdXNlQW5pbWF0aW9uKGNvbnN0IEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2Ug
IT0gbV9pbWFnZSkKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
SW1hZ2UqIHVzZUltYWdlID0gbG9va3VwSW1hZ2VGb3JTaXplKGltYWdlLT5zaXplKCkpOworICAg
IGlmIChpbWFnZSAhPSB1c2VJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZEltYWdlQ2xpZW50PiB3KG1fY2xpZW50
cyk7CkBAIC0zODIsMTQgKzQ5MCwyMiBAQCBib29sIENhY2hlZEltYWdlOjpzaG91bGRQYXVzZUFu
aW1hdGlvbihjCiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IElt
YWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAgICAgICAgbm90aWZ5
T2JzZXJ2ZXJzKCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEltYWdl
KiB1c2VJbWFnZSA9IGxvb2t1cEltYWdlRm9yU2l6ZShpbWFnZS0+c2l6ZSgpKTsKKyAgICBpZiAo
aW1hZ2UgIT0gdXNlSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBub3RpZnlPYnNlcnZlcnMo
KTsKIH0KIAogdm9pZCBDYWNoZWRJbWFnZTo6Y2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSogaW1h
Z2UsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKGltYWdlID09IG1faW1hZ2UpCi0g
ICAgICAgIG5vdGlmeU9ic2VydmVycygmcmVjdCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAg
cmV0dXJuOworICAgIEltYWdlKiB1c2VJbWFnZSA9IGxvb2t1cEltYWdlRm9yU2l6ZShpbWFnZS0+
c2l6ZSgpKTsKKyAgICBpZiAoaW1hZ2UgIT0gdXNlSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAg
ICBub3RpZnlPYnNlcnZlcnMoJnJlY3QpOwogfQogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCShyZXZpc2lvbiA5
NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIENhY2hlZEltYWdlX2gKIAogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiSW1hZ2VCeVNpemVDYWNoZS5oIgog
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZl
ci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTM0LDYgKzM1LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIE1lbW9yeUNhY2hl
OworY2xhc3MgUmVuZGVyT2JqZWN0OwogCiBjbGFzcyBDYWNoZWRJbWFnZSA6IHB1YmxpYyBDYWNo
ZWRSZXNvdXJjZSwgcHVibGljIEltYWdlT2JzZXJ2ZXIgewogICAgIGZyaWVuZCBjbGFzcyBNZW1v
cnlDYWNoZTsKQEAgLTQ1LDI0ICs0NywyNCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB2
b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlv
bnMmKTsKIAotICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBudWxsSW1h
Z2UoKSBpZiB0aGUgaW1hZ2UgaXMgbm90IGF2YWlsYWJsZSB5ZXQuCisgICAgSW1hZ2UqIGltYWdl
KGNvbnN0IFJlbmRlck9iamVjdCopOyAvLyBSZXR1cm5zIHRoZSBudWxsSW1hZ2UoKSBpZiB0aGUg
aW1hZ2UgaXMgbm90IGF2YWlsYWJsZSB5ZXQuCiAgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KIAogICAgIHN0ZDo6cGFpcjxJbWFnZSosIGZsb2F0PiBi
cm9rZW5JbWFnZShmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikgY29uc3Q7IC8vIFJldHVybnMgYW4g
aW1hZ2UgYW5kIHRoZSBpbWFnZSdzIHJlc29sdXRpb24gc2NhbGUgZmFjdG9yLgogICAgIGJvb2wg
d2lsbFBhaW50QnJva2VuSW1hZ2UoKSBjb25zdDsgCiAKLSAgICBib29sIGNhblJlbmRlcihmbG9h
dCBtdWx0aXBsaWVyKSBjb25zdCB7IHJldHVybiAhZXJyb3JPY2N1cnJlZCgpICYmICFpbWFnZVNp
emUobXVsdGlwbGllcikuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBjYW5SZW5kZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllcikgeyByZXR1cm4gIWVycm9yT2Nj
dXJyZWQoKSAmJiAhaW1hZ2VTaXplKHJlbmRlcmVyLCBtdWx0aXBsaWVyKS5pc0VtcHR5KCk7IH0K
IAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZm9yIFNWR0ltYWdlIHJpZ2h0IG5vdwotICAg
IHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNl
dEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7
CiAgICAgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBpbWFn
ZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdDsKICAgICBib29sIGltYWdlSGFzUmVsYXRpdmVIZWln
aHQoKSBjb25zdDsKICAgICAKICAgICAvLyBCb3RoIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBhIHpv
b20gbXVsdGlwbGllciB0aGF0IGNhbiBiZSB1c2VkIHRvIGluY3JlYXNlIHRoZSBuYXR1cmFsIHNp
emUgb2YgdGhlIGltYWdlIGJ5IHRoZQogICAgIC8vIHpvb20uCi0gICAgSW50U2l6ZSBpbWFnZVNp
emUoZmxvYXQgbXVsdGlwbGllcikgY29uc3Q7ICAvLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBj
b21wbGV0ZSBpbWFnZS4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChmbG9hdCBtdWx0aXBsaWVyKSBj
b25zdDsgIC8vIFRoZSBzaXplIG9mIHRoZSBjdXJyZW50bHkgZGVjb2RlZCBwb3J0aW9uIG9mIHRo
ZSBpbWFnZS4KKyAgICBJbnRTaXplIGltYWdlU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqLCBmbG9h
dCBtdWx0aXBsaWVyKTsgLy8gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29tcGxldGUgaW1hZ2Uu
CisgICAgSW50UmVjdCBpbWFnZVJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgZmxvYXQgbXVsdGlw
bGllcik7IC8vIFRoZSBzaXplIG9mIHRoZSBjdXJyZW50bHkgZGVjb2RlZCBwb3J0aW9uIG9mIHRo
ZSBpbWFnZS4KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VD
bGllbnQqKTsKICAgICAKQEAgLTkxLDYgKzkzLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgY2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSosIGNvbnN0IEludFJlY3QmKTsKIAogcHJpdmF0
ZToKKyAgICBJbWFnZSogbG9va3VwSW1hZ2VGb3JTaXplKGNvbnN0IEludFNpemUmKSBjb25zdDsK
KyAgICBJbWFnZSogbG9va3VwSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqKSBj
b25zdDsKKyAgICBQYXNzUmVmUHRyPEltYWdlPiBsb29rdXBPckNyZWF0ZUltYWdlRm9yUmVuZGVy
ZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7CisKICAgICB2b2lkIGNyZWF0ZUltYWdlKCk7CiAgICAg
c2l6ZV90IG1heGltdW1EZWNvZGVkSW1hZ2VTaXplKCk7CiAgICAgLy8gSWYgbm90IG51bGwsIGNo
YW5nZVJlY3QgaXMgdGhlIGNoYW5nZWQgcGFydCBvZiB0aGUgaW1hZ2UuCkBAIC0xMDAsNiArMTA2
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoZWNrU2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpOwog
CiAgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworICAgIG11dGFibGUgSW1hZ2VCeVNpemVDYWNo
ZSBtX3N2Z0ltYWdlQ2FjaGU7CiAgICAgVGltZXI8Q2FjaGVkSW1hZ2U+IG1fZGVjb2RlZERhdGFE
ZWxldGlvblRpbWVyOwogICAgIGJvb2wgbV9zaG91bGRQYWludEJyb2tlbkltYWdlOwogfTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvSW1hZ2VCeVNpemVDYWNoZS5j
cHAJKHJldmlzaW9uIDk3MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZS5jcHA6OTczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvSW1h
Z2VCeVNpemVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWUuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1
ZGUgIkludFNpemVIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSgpCis6IG1fYWNjZXNzZWRJbWFnZShmYWxzZSkKK3sKK30KKworQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZTo6fkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUoKQoreworfQorCit2b2lkIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJlZigpOworICAgIGlmICghc2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIG1fc2l6ZXMuYWRkKHNpemUpOworICAgIAorICAgIFJlbmRlck9iamVjdFNp
emVDb3VudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuZmluZChyZW5kZXJlcik7CisgICAg
aWYgKGl0ID09IG1fY2xpZW50cy5lbmQoKSkKKyAgICAgICAgbV9jbGllbnRzLmFkZChyZW5kZXJl
ciwgU2l6ZUNvdW50UGFpcihzaXplLCAxKSk7CisgICAgZWxzZSB7CisgICAgICAgIFNpemVDb3Vu
dFBhaXImIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICsrc2l6ZUNvdW50LnNlY29u
ZDsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFw
OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKKyAgICBBU1NFUlQoaXQg
IT0gbV9jbGllbnRzLmVuZCgpKTsKKworICAgIFNpemVDb3VudFBhaXImIHNpemVDb3VudCA9IGl0
LT5zZWNvbmQ7CisgICAgSW50U2l6ZSBzaXplID0gc2l6ZUNvdW50LmZpcnN0OworICAgIGlmICgh
c2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9zaXplcy5yZW1vdmUoc2l6ZSk7CisgICAgICAg
IGlmICghbV9zaXplcy5jb250YWlucyhzaXplKSkKKyAgICAgICAgICAgIG1faW1hZ2VzLnJlbW92
ZShzaXplKTsKKyAgICB9CisgICAgCisgICAgaWYgKCEtLXNpemVDb3VudC5zZWNvbmQpCisgICAg
ICAgIG1fY2xpZW50cy5yZW1vdmUocmVuZGVyZXIpOworCisgICAgZGVyZWYoKTsKK30KKworSW1h
Z2UqIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFw
OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKKyAgICBBU1NFUlQoaXQg
IT0gbV9jbGllbnRzLmVuZCgpKTsKKworICAgIFNpemVDb3VudFBhaXImIHNpemVDb3VudCA9IGl0
LT5zZWNvbmQ7CisgICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZUNvdW50LmZpcnN0OworICAgIGlm
IChvbGRTaXplICE9IHNpemUpIHsKKyAgICAgICAgLy8gSWYgcmVuZGVyZXIgaXMgdGhlIG9ubHkg
Y2xpZW50LCBtYWtlIHN1cmUgd2UgZG9uJ3QgZGVsZXRlIHRoaXMuCisgICAgICAgIFJlZlB0cjxD
U1NJbWFnZUdlbmVyYXRvclZhbHVlPiBwcm90ZWN0KHRoaXMpOworICAgICAgICByZW1vdmVDbGll
bnQocmVuZGVyZXIpOworICAgICAgICBhZGRDbGllbnQocmVuZGVyZXIsIHNpemUpOworICAgIH0K
KyAgICAKKyAgICAvLyBEb24ndCBnZW5lcmF0ZSBhbiBpbWFnZSBmb3IgZW1wdHkgc2l6ZXMuCisg
ICAgaWYgKHNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICAvLyBM
b29rIHVwIHRoZSBpbWFnZSBpbiBvdXIgY2FjaGUuCisgICAgcmV0dXJuIG1faW1hZ2VzLmdldChz
aXplKS5nZXQoKTsKK30KKwordm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpwdXRJbWFnZShj
b25zdCBJbnRTaXplJiBzaXplLCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKK3sKKyAgICBtX2lt
YWdlcy5hZGQoc2l6ZSwgaW1hZ2UpOworfQorCitTdHlsZUdlbmVyYXRlZEltYWdlKiBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlOjpnZW5lcmF0ZWRJbWFnZSgpCit7CisgICAgaWYgKCFtX2FjY2Vzc2Vk
SW1hZ2UpIHsKKyAgICAgICAgbV9hY2Nlc3NlZEltYWdlID0gdHJ1ZTsKKyAgICAgICAgbV9pbWFn
ZSA9IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSh0aGlzLCBpc0ZpeGVkU2l6ZSgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvSW1hZ2VCeVNpemVD
YWNoZS5jcHAJKHJldmlzaW9uIDk3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0ltYWdlQnlTaXplQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyICsxLDM5IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZh
bHVlLmgiCisjaW5jbHVkZSAiSW1hZ2VCeVNpemVDYWNoZS5oIgogCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiSW50U2l6ZUhhc2guaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1
ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DU1NJ
bWFnZUdlbmVyYXRvclZhbHVlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlKCkKLTogbV9hY2Nlc3Nl
ZEltYWdlKGZhbHNlKQorSW1hZ2VCeVNpemVDYWNoZTo6SW1hZ2VCeVNpemVDYWNoZSgpCiB7CiB9
CiAKLUNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6On5DU1NJbWFnZUdlbmVyYXRvclZhbHVlKCkKK3Zv
aWQgSW1hZ2VCeVNpemVDYWNoZTo6YWRkQ2xpZW50KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci19Ci0KLXZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZTo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNp
emUpCi17Ci0gICAgcmVmKCk7CiAgICAgaWYgKCFzaXplLmlzRW1wdHkoKSkKICAgICAgICAgbV9z
aXplcy5hZGQoc2l6ZSk7CiAgICAgCkBAIC01OSw3ICs0Niw3IEBAIHZvaWQgQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZTo6YWRkQ2xpZW50KFIKICAgICB9CiB9CiAKLXZvaWQgQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit2b2lkIEltYWdl
QnlTaXplQ2FjaGU6OnJlbW92ZUNsaWVudChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQog
ewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMu
ZmluZChyZW5kZXJlcik7CiAgICAgQVNTRVJUKGl0ICE9IG1fY2xpZW50cy5lbmQoKSk7CkBAIC03
NCwxMSArNjEsOSBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVuCiAg
ICAgCiAgICAgaWYgKCEtLXNpemVDb3VudC5zZWNvbmQpCiAgICAgICAgIG1fY2xpZW50cy5yZW1v
dmUocmVuZGVyZXIpOwotCi0gICAgZGVyZWYoKTsKIH0KIAotSW1hZ2UqIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWU6OmdldEltYWdlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUm
IHNpemUpCitJbWFnZSogSW1hZ2VCeVNpemVDYWNoZTo6Z2V0SW1hZ2UoY29uc3QgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBSZW5kZXJPYmplY3RT
aXplQ291bnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmZpbmQocmVuZGVyZXIpOwogICAg
IEFTU0VSVChpdCAhPSBtX2NsaWVudHMuZW5kKCkpOwpAQCAtODYsMzIgKzcxLDQ0IEBAIEltYWdl
KiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZSgKICAgICBTaXplQ291bnRQYWlyJiBz
aXplQ291bnQgPSBpdC0+c2Vjb25kOwogICAgIEludFNpemUgb2xkU2l6ZSA9IHNpemVDb3VudC5m
aXJzdDsKICAgICBpZiAob2xkU2l6ZSAhPSBzaXplKSB7Ci0gICAgICAgIC8vIElmIHJlbmRlcmVy
IGlzIHRoZSBvbmx5IGNsaWVudCwgbWFrZSBzdXJlIHdlIGRvbid0IGRlbGV0ZSB0aGlzLgotICAg
ICAgICBSZWZQdHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4gcHJvdGVjdCh0aGlzKTsKICAgICAg
ICAgcmVtb3ZlQ2xpZW50KHJlbmRlcmVyKTsKICAgICAgICAgYWRkQ2xpZW50KHJlbmRlcmVyLCBz
aXplKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBEb24ndCBnZW5lcmF0ZSBhbiBpbWFnZSBmb3Ig
ZW1wdHkgc2l6ZXMuCiAgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsK
LSAgICAKKwogICAgIC8vIExvb2sgdXAgdGhlIGltYWdlIGluIG91ciBjYWNoZS4KICAgICByZXR1
cm4gbV9pbWFnZXMuZ2V0KHNpemUpLmdldCgpOwogfQogCi12b2lkIENTU0ltYWdlR2VuZXJhdG9y
VmFsdWU6OnB1dEltYWdlKGNvbnN0IEludFNpemUmIHNpemUsIFBhc3NSZWZQdHI8SW1hZ2U+IGlt
YWdlKQordm9pZCBJbWFnZUJ5U2l6ZUNhY2hlOjpwdXRJbWFnZShjb25zdCBJbnRTaXplJiBzaXpl
LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKIHsKICAgICBtX2ltYWdlcy5hZGQoc2l6ZSwgaW1h
Z2UpOwogfQogCi1TdHlsZUdlbmVyYXRlZEltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpn
ZW5lcmF0ZWRJbWFnZSgpCit2b2lkIEltYWdlQnlTaXplQ2FjaGU6OmNsZWFyKCkKIHsKLSAgICBp
ZiAoIW1fYWNjZXNzZWRJbWFnZSkgewotICAgICAgICBtX2FjY2Vzc2VkSW1hZ2UgPSB0cnVlOwot
ICAgICAgICBtX2ltYWdlID0gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHRoaXMsIGlzRml4
ZWRTaXplKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKKyAgICBtX3NpemVz
LmNsZWFyKCk7CisgICAgbV9jbGllbnRzLmNsZWFyKCk7CisgICAgbV9pbWFnZXMuY2xlYXIoKTsK
K30KKworSW1hZ2UqIEltYWdlQnlTaXplQ2FjaGU6OmltYWdlRm9yU2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKSBjb25zdAoreworICAgIEhhc2hNYXA8SW50U2l6ZSwgUmVmUHRyPEltYWdlPiA+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1faW1hZ2VzLmZpbmQoc2l6ZSk7CisgICAgaWYgKGl0ID09IG1f
aW1hZ2VzLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaXQtPnNlY29uZC5n
ZXQoKTsKK30KKworSW50U2l6ZSBJbWFnZUJ5U2l6ZUNhY2hlOjpzaXplRm9yQ2xpZW50KGNvbnN0
IFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgUmVuZGVyT2JqZWN0U2l6ZUNv
dW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKKyAg
ICBpZiAoaXQgPT0gbV9jbGllbnRzLmVuZCgpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwor
ICAgIHJldHVybiBpdC0+c2Vjb25kLmZpcnN0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvSW1hZ2VCeVNpemVDYWNoZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hl
LmgJKHJldmlzaW9uIDk3MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZS5oOjk3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0ltYWdl
QnlTaXplQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlX2gKKyNkZWZpbmUgQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZV9oCisKKyNpbmNsdWRlICJDU1NWYWx1ZS5oIgorI2luY2x1ZGUgIkludFNpemVIYXNo
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW1hZ2U7CitjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFzcyBTdHlsZUdlbmVyYXRlZElt
YWdlOworCitjbGFzcyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DU1NJbWFnZUdlbmVyYXRvclZhbHVlKCk7CisKKyAgICB2
b2lkIGFkZENsaWVudChSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBy
ZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdl
PiBpbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgPSAwOworCisgICAgU3R5bGVH
ZW5lcmF0ZWRJbWFnZSogZ2VuZXJhdGVkSW1hZ2UoKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wg
aXNGaXhlZFNpemUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgSW50U2l6
ZSBmaXhlZFNpemUoY29uc3QgUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gSW50U2l6ZSgpOyB9Cisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpOworICAgIAorICAg
IEltYWdlKiBnZXRJbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CisgICAgdm9p
ZCBwdXRJbWFnZShjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxJbWFnZT4pOworCisgICAgdHlw
ZWRlZiBwYWlyPEludFNpemUsIGludD4gU2l6ZUNvdW50UGFpcjsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8UmVuZGVyT2JqZWN0KiwgU2l6ZUNvdW50UGFpcj4gUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFw
OworCisgICAgSGFzaENvdW50ZWRTZXQ8SW50U2l6ZT4gbV9zaXplczsgLy8gQSBjb3VudCBvZiBo
b3cgbWFueSB0aW1lcyBhIGdpdmVuIGltYWdlIHNpemUgaXMgaW4gdXNlLgorICAgIFJlbmRlck9i
amVjdFNpemVDb3VudE1hcCBtX2NsaWVudHM7IC8vIEEgbWFwIGZyb20gUmVuZGVyT2JqZWN0cyAo
d2l0aCBlbnRyeSBjb3VudCkgdG8gaW1hZ2Ugc2l6ZXMuCisgICAgSGFzaE1hcDxJbnRTaXplLCBS
ZWZQdHI8SW1hZ2U+ID4gbV9pbWFnZXM7IC8vIEEgY2FjaGUgb2YgSW1hZ2Ugb2JqZWN0cyBieSBp
bWFnZSBzaXplLgorICAgIAorICAgIFJlZlB0cjxTdHlsZUdlbmVyYXRlZEltYWdlPiBtX2ltYWdl
OworICAgIGJvb2wgbV9hY2Nlc3NlZEltYWdlOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9v
bCBpc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0ltYWdlQnlTaXplQ2Fj
aGUuaAkocmV2aXNpb24gOTczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvSW1h
Z2VCeVNpemVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyICsxLDI2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwog
Ci0jaWZuZGVmIENTU0ltYWdlR2VuZXJhdG9yVmFsdWVfaAotI2RlZmluZSBDU1NJbWFnZUdlbmVy
YXRvclZhbHVlX2gKKyNpZm5kZWYgSW1hZ2VCeVNpemVDYWNoZV9oCisjZGVmaW5lIEltYWdlQnlT
aXplQ2FjaGVfaAogCi0jaW5jbHVkZSAiQ1NTVmFsdWUuaCIKICNpbmNsdWRlICJJbnRTaXplSGFz
aC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVk
U2V0Lmg+CkBAIC0zNiw0MSArMzAsMzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJ
bWFnZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFN0eWxlR2VuZXJhdGVkSW1hZ2U7CiAK
LWNsYXNzIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewordHlwZWRl
ZiBwYWlyPEludFNpemUsIGludD4gU2l6ZUNvdW50UGFpcjsKK3R5cGVkZWYgSGFzaE1hcDxjb25z
dCBSZW5kZXJPYmplY3QqLCBTaXplQ291bnRQYWlyPiBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA7
CisKK2NsYXNzIEltYWdlQnlTaXplQ2FjaGUgewogcHVibGljOgotICAgIHZpcnR1YWwgfkNTU0lt
YWdlR2VuZXJhdG9yVmFsdWUoKTsKKyAgICBJbWFnZUJ5U2l6ZUNhY2hlKCk7CiAKLSAgICB2b2lk
IGFkZENsaWVudChSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7Ci0gICAgdm9pZCByZW1v
dmVDbGllbnQoUmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBp
bWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgPSAwOwotCi0gICAgU3R5bGVHZW5l
cmF0ZWRJbWFnZSogZ2VuZXJhdGVkSW1hZ2UoKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNG
aXhlZFNpemUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgSW50U2l6ZSBm
aXhlZFNpemUoY29uc3QgUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gSW50U2l6ZSgpOyB9Ci0gICAg
Ci1wcm90ZWN0ZWQ6Ci0gICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpOwotICAgIAotICAgIElt
YWdlKiBnZXRJbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBh
ZGRDbGllbnQoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQg
cmVtb3ZlQ2xpZW50KGNvbnN0IFJlbmRlck9iamVjdCopOworCisgICAgSW1hZ2UqIGdldEltYWdl
KGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKTsKICAgICB2b2lkIHB1dEltYWdl
KGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEltYWdlPik7CiAKLSAgICB0eXBlZGVmIHBhaXI8
SW50U2l6ZSwgaW50PiBTaXplQ291bnRQYWlyOwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJP
YmplY3QqLCBTaXplQ291bnRQYWlyPiBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA7CisgICAgdm9p
ZCBjbGVhcigpOworCisgICAgSW1hZ2UqIGltYWdlRm9yU2l6ZShjb25zdCBJbnRTaXplJikgY29u
c3Q7CisgICAgSW50U2l6ZSBzaXplRm9yQ2xpZW50KGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0
OworICAgIGNvbnN0IFJlbmRlck9iamVjdFNpemVDb3VudE1hcCYgY2xpZW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fY2xpZW50czsgfQogCitwcml2YXRlOgogICAgIEhhc2hDb3VudGVkU2V0PEludFNp
emU+IG1fc2l6ZXM7IC8vIEEgY291bnQgb2YgaG93IG1hbnkgdGltZXMgYSBnaXZlbiBpbWFnZSBz
aXplIGlzIGluIHVzZS4KICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXAgbV9jbGllbnRzOyAv
LyBBIG1hcCBmcm9tIFJlbmRlck9iamVjdHMgKHdpdGggZW50cnkgY291bnQpIHRvIGltYWdlIHNp
emVzLgogICAgIEhhc2hNYXA8SW50U2l6ZSwgUmVmUHRyPEltYWdlPiA+IG1faW1hZ2VzOyAvLyBB
IGNhY2hlIG9mIEltYWdlIG9iamVjdHMgYnkgaW1hZ2Ugc2l6ZS4KLSAgICAKLSAgICBSZWZQdHI8
U3R5bGVHZW5lcmF0ZWRJbWFnZT4gbV9pbWFnZTsKLSAgICBib29sIG1fYWNjZXNzZWRJbWFnZTsK
LQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZUdlbmVyYXRvclZhbHVlKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZV9oCisjZW5kaWYgLy8gSW1hZ2VCeVNpemVDYWNo
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
OTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjExLDcgKzYxMSw3IEBAIHN0YXRpYyBJbWFnZSogZ2V0SW1hZ2UoRWxlbWVu
dCogZWxlbWVudCkKICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7CiAgICAgcmV0dXJuIChjYWNoZWRJbWFn
ZSAmJiAhY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkgPwotICAgICAgICBjYWNoZWRJbWFn
ZS0+aW1hZ2UoKSA6IDA7CisgICAgICAgIGNhY2hlZEltYWdlLT5pbWFnZShlbGVtZW50LT5yZW5k
ZXJlcigpKSA6IDA7CiB9CiAKIHN0YXRpYyB2b2lkIHByZXBhcmVDbGlwYm9hcmRGb3JJbWFnZURy
YWcoRnJhbWUqIHNyYywgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEVsZW1lbnQqIG5vZGUsIGNvbnN0
IEtVUkwmIGxpbmtVUkwsIGNvbnN0IEtVUkwmIGltYWdlVVJMLCBjb25zdCBTdHJpbmcmIGxhYmVs
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gOTczNjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMDIsNyArMTIwMiw3IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0
Q3Vyc28KICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmN1cnNvcnMoKSkgewogICAgICAgICBjb25z
dCBDdXJzb3JMaXN0KiBjdXJzb3JzID0gc3R5bGUtPmN1cnNvcnMoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGN1cnNvcnMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBj
b25zdCBDYWNoZWRJbWFnZSogY2ltYWdlID0gMDsKKyAgICAgICAgICAgIENhY2hlZEltYWdlKiBj
aW1hZ2UgPSAwOwogICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSAoKmN1cnNvcnMpW2ld
LmltYWdlKCk7CiAgICAgICAgICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzQ2FjaGVkSW1hZ2Uo
KSkKICAgICAgICAgICAgICAgICBjaW1hZ2UgPSBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZEltYWdl
Kj4oaW1hZ2UpLT5jYWNoZWRJbWFnZSgpOwpAQCAtMTIxMCwxMSArMTIxMCwxMSBAQCBPcHRpb25h
bEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBJbnRQb2ludCBob3RTcG90ID0gKCpjdXJzb3JzKVtpXS5ob3RTcG90
KCk7CiAgICAgICAgICAgICAvLyBMaW1pdCB0aGUgc2l6ZSBvZiBjdXJzb3JzIHNvIHRoYXQgdGhl
eSBjYW5ub3QgYmUgdXNlZCB0byBjb3ZlciBVSSBlbGVtZW50cyBpbiBjaHJvbWUuCi0gICAgICAg
ICAgICBJbnRTaXplIHNpemUgPSBjaW1hZ2UtPmltYWdlKCktPnNpemUoKTsKKyAgICAgICAgICAg
IEludFNpemUgc2l6ZSA9IGNpbWFnZS0+aW1hZ2UocmVuZGVyZXIpLT5zaXplKCk7CiAgICAgICAg
ICAgICBpZiAoc2l6ZS53aWR0aCgpID4gMTI4IHx8IHNpemUuaGVpZ2h0KCkgPiAxMjgpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIWNpbWFnZS0+ZXJyb3JPY2N1
cnJlZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBDdXJzb3IoY2ltYWdlLT5pbWFnZSgpLCBo
b3RTcG90KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ3Vyc29yKGNpbWFnZS0+aW1hZ2UocmVu
ZGVyZXIpLCBob3RTcG90KTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEs
NyBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtCiAgICAgICAgICAg
ICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VF
bGVtZW50Kj4oZWxlbWVudCk7CiAgICAgICAgICAgICBLVVJMIHVybCA9IGRvY3VtZW50LT5jb21w
bGV0ZVVSTChpbWFnZUVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpKTsK
ICAgICAgICAgICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlRWxlbWVudC0+Y2Fj
aGVkSW1hZ2UoKTsKLSAgICAgICAgICAgIGFkZEltYWdlVG9SZXNvdXJjZXMoY2FjaGVkSW1hZ2Us
IHVybCk7CisgICAgICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGNhY2hlZEltYWdlLCBpbWFn
ZUVsZW1lbnQtPnJlbmRlcmVyKCksIHVybCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmtUYWcpKSB7CiAgICAgICAgICAgICBIVE1MTGlua0Vs
ZW1lbnQqIGxpbmtFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4oZWxlbWVu
dCk7CiAgICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IGxpbmtFbGVtZW50LT5zaGVldCgp
OwpAQCAtMjg4LDE2ICsyODgsMTYgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplQ1NT
U3R5bGVTaAogICAgIH0KIH0KIAotdm9pZCBQYWdlU2VyaWFsaXplcjo6YWRkSW1hZ2VUb1Jlc291
cmNlcyhDYWNoZWRJbWFnZSogaW1hZ2UsIGNvbnN0IEtVUkwmIHVybCkKK3ZvaWQgUGFnZVNlcmlh
bGl6ZXI6OmFkZEltYWdlVG9SZXNvdXJjZXMoQ2FjaGVkSW1hZ2UqIGltYWdlLCBSZW5kZXJPYmpl
Y3QqIGltYWdlUmVuZGVyZXIsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBpZiAoIXVybC5pc1Zh
bGlkKCkgfHwgbV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCFpbWFnZSB8fCBpbWFnZS0+aW1hZ2UoKSA9PSBJbWFnZTo6bnVsbEltYWdlKCkp
CisgICAgaWYgKCFpbWFnZSB8fCBpbWFnZS0+aW1hZ2UoaW1hZ2VSZW5kZXJlcikgPT0gSW1hZ2U6
Om51bGxJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgbWltZVR5cGUgPSBp
bWFnZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpOwotICAgIG1fcmVzb3VyY2VzLT5hcHBlbmQoUmVz
b3VyY2UodXJsLCBtaW1lVHlwZSwgaW1hZ2UtPmltYWdlKCktPmRhdGEoKSkpOworICAgIG1fcmVz
b3VyY2VzLT5hcHBlbmQoUmVzb3VyY2UodXJsLCBtaW1lVHlwZSwgaW1hZ2UtPmltYWdlKGltYWdl
UmVuZGVyZXIpLT5kYXRhKCkpKTsKICAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKIH0KIApA
QCAtMzM3LDcgKzMzNyw3IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2Vz
Rm8KICAgICAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8U3R5bGVDYWNoZWRJ
bWFnZSo+KHN0eWxlSW1hZ2UpLT5jYWNoZWRJbWFnZSgpOwogCiAgICAgICAgIEtVUkwgdXJsID0g
Y3NzU3R5bGVTaGVldC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaW1hZ2UtPnVybCgpKTsKLSAg
ICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhpbWFnZSwgdXJsKTsKKyAgICAgICAgYWRkSW1hZ2VU
b1Jlc291cmNlcyhpbWFnZSwgMCwgdXJsKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VTZXJpYWxpemVyLmgJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlU2VyaWFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIGNs
YXNzIENTU1N0eWxlUnVsZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBGcmFtZTsKIGNs
YXNzIFBhZ2U7CitjbGFzcyBSZW5kZXJPYmplY3Q7CiAKIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0
byBzZXJpYWxpemUgYSBwYWdlIGNvbnRlbnRzIGJhY2sgdG8gdGV4dCAodHlwaWNhbGx5IEhUTUwp
LgogLy8gSXQgc2VyaWFsaXplcyBhbGwgdGhlIHBhZ2UgZnJhbWVzIGFuZCByZXRyaWV2ZXMgcmVz
b3VyY2VzIHN1Y2ggYXMgaW1hZ2VzIGFuZCBDU1Mgc3R5bGVzaGVldHMuCkBAIC03NSw3ICs3Niw3
IEBAIHByaXZhdGU6CiAgICAgLy8gSXQgYWxzbyBhZGRzIGFueSByZXNvdXJjZXMgaW5jbHVkZWQg
aW4gdGhhdCBzdHlsZXNoZWV0IChpbmNsdWRpbmcgYW55IGltcG9ydGVkIHN0eWxlc2hlZXRzIGFu
ZCB0aGVpciBvd24gcmVzb3VyY2VzKS4KICAgICB2b2lkIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQo
Q1NTU3R5bGVTaGVldCosIGNvbnN0IEtVUkwmKTsKIAotICAgIHZvaWQgYWRkSW1hZ2VUb1Jlc291
cmNlcyhDYWNoZWRJbWFnZSosIGNvbnN0IEtVUkwmKTsKKyAgICB2b2lkIGFkZEltYWdlVG9SZXNv
dXJjZXMoQ2FjaGVkSW1hZ2UqLCBSZW5kZXJPYmplY3QqLCBjb25zdCBLVVJMJik7CiAgICAgdm9p
ZCByZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24q
KTsKICAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5OCw3ICsxOTgsNyBAQCBEcmFnSW1hZ2VSZWYgQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZURy
CiAgICAgICAgICAgICBsb2MgPSBtX2RyYWdMb2M7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYg
KG1fZHJhZ0ltYWdlKSB7Ci0gICAgICAgIHJlc3VsdCA9IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFn
ZShtX2RyYWdJbWFnZS0+aW1hZ2UoKSk7CisgICAgICAgIHJlc3VsdCA9IGNyZWF0ZURyYWdJbWFn
ZUZyb21JbWFnZShtX2RyYWdJbWFnZS0+aW1hZ2UoMCkpOwogICAgICAgICBsb2MgPSBtX2RyYWdM
b2M7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMjQsMTAgKzIyNCwxMCBAQCBzdGF0
aWMgdm9pZCB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KENocm9tCiB7CiAgICAgLy8gU2hvdmUgaW1h
Z2UgZGF0YSBpbnRvIGEgRGF0YU9iamVjdCBmb3IgdXNlIGFzIGEgZmlsZQogICAgIENhY2hlZElt
YWdlKiBjYWNoZWRJbWFnZSA9IGdldENhY2hlZEltYWdlKGVsZW1lbnQpOwotICAgIGlmICghY2Fj
aGVkSW1hZ2UgfHwgIWNhY2hlZEltYWdlLT5pbWFnZSgpIHx8ICFjYWNoZWRJbWFnZS0+aXNMb2Fk
ZWQoKSkKKyAgICBpZiAoIWNhY2hlZEltYWdlIHx8ICFjYWNoZWRJbWFnZS0+aW1hZ2UoZWxlbWVu
dC0+cmVuZGVyZXIoKSkgfHwgIWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBTaGFyZWRCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FjaGVkSW1hZ2UtPmltYWdl
KCktPmRhdGEoKTsKKyAgICBTaGFyZWRCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FjaGVkSW1hZ2Ut
PmltYWdlKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5kYXRhKCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZl
ciB8fCAhaW1hZ2VCdWZmZXItPnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJv
bWl1bS5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEz
MCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKICAgICBDYWNo
ZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSByZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKTsKICAgICBpZiAo
IWNhY2hlZEltYWdlIHx8IGNhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKKyAgICBJbWFn
ZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UocmVuZGVyZXIpOwogICAgIEFTU0VSVChpbWFn
ZSk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBiaXRtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuaAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKICNpZmRlZiBfX09CSkNfXwpAQCAtNjYsMTIg
KzY2LDEyIEBAIHR5cGVkZWYgc3RydWN0IF9HZGtQaXhidWYgR2RrUGl4YnVmOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIEZsb2F0UG9pbnQ7
CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CiBjbGFzcyBTaGFyZWRCdWZmZXI7Ci1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiAKIC8vIFRo
aXMgY2xhc3MgZ2V0cyBub3RpZmllZCB3aGVuIGFuIGltYWdlIGNyZWF0ZXMgb3IgZGVzdHJveXMg
ZGVjb2RlZCBmcmFtZXMgYW5kIHdoZW4gaXQgYWR2YW5jZXMgYW5pbWF0aW9uIGZyYW1lcy4KIGNs
YXNzIEltYWdlT2JzZXJ2ZXI7CkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbWFnZT4gbG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSk7
CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOyAKIAorICAgIHZp
cnR1YWwgYm9vbCBpc1NWR0ltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0FscGhhKCkgeyByZXR1cm4gZmFsc2U7IH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAJKHJldmlz
aW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3ICsyNjEsNyBAQCBEcmFnSW1hZ2VSZWYgQ2xpcGJv
YXJkR3RrOjpjcmVhdGVEcmFnSW1hCiAgICAgbG9jYXRpb24gPSBtX2RyYWdMb2M7CiAKICAgICBp
ZiAobV9kcmFnSW1hZ2UpCi0gICAgICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2Uo
bV9kcmFnSW1hZ2UtPmltYWdlKCkpOworICAgICAgICByZXR1cm4gY3JlYXRlRHJhZ0ltYWdlRnJv
bUltYWdlKG1fZHJhZ0ltYWdlLT5pbWFnZSgwKSk7CiAgICAgaWYgKG1fZHJhZ0ltYWdlRWxlbWVu
dCAmJiBtX2ZyYW1lKQogICAgICAgICByZXR1cm4gbV9mcmFtZS0+bm9kZUltYWdlKG1fZHJhZ0lt
YWdlRWxlbWVudC5nZXQoKSk7CiAKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lkIENsaXBib2FyZEd0
azo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltCiAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzTG9h
ZGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYg
PSBhZG9wdEdSZWYoaW1hZ2UtPmltYWdlKCktPmdldEdka1BpeGJ1ZigpKTsKKyAgICBHUmVmUHRy
PEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5pbWFnZShlbGVtZW50LT5yZW5k
ZXJlcigpKS0+Z2V0R2RrUGl4YnVmKCkpOwogICAgIGlmICghcGl4YnVmKQogICAgICAgICByZXR1
cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0
ay5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBQ
YXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIENhY2hlZEltYWdlKiBjYWNo
ZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwogICAgIGlmICghY2FjaGVkSW1hZ2Ug
fHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIElt
YWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOworICAgIEltYWdlKiBpbWFnZSA9IGNh
Y2hlZEltYWdlLT5pbWFnZShyZW5kZXJlcik7CiAgICAgQVNTRVJUKGltYWdlKTsKIAogICAgIEd0
a0NsaXBib2FyZCogY2xpcGJvYXJkID0gZ3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZ2Rr
X2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCShyZXZpc2lvbiA5
NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQxNCw3ICs0MTQsNyBAQCBOU0ltYWdlICpDbGlwYm9hcmRNYWM6OmRy
YWdOU0ltYWdlKE5TUG9pCiAgICAgICAgICAgICBsb2MueSA9IGltYWdlUmVjdC5zaXplLmhlaWdo
dCAtIGxvYy55OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtX2RyYWdJbWFnZSkgewotICAg
ICAgICByZXN1bHQgPSBtX2RyYWdJbWFnZS0+aW1hZ2UoKS0+Z2V0TlNJbWFnZSgpOworICAgICAg
ICByZXN1bHQgPSBtX2RyYWdJbWFnZS0+aW1hZ2UoMCktPmdldE5TSW1hZ2UoKTsKICAgICAgICAg
CiAgICAgICAgIGxvYyA9IG1fZHJhZ0xvYzsKICAgICAgICAgbG9jLnkgPSBbcmVzdWx0IHNpemVd
LmhlaWdodCAtIGxvYy55OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxD
b252ZXJ0ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hU
TUxDb252ZXJ0ZXIubW0JKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0hUTUxDb252ZXJ0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NTksNyArMTc1OSw3
IEBAIHN0YXRpYyBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlckZvckVsZW0KICAgICBpZiAoIXdy
YXBwZXIpIHsKICAgICAgICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShl
bGVtZW50LT5yZW5kZXJlcigpKTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgp
ICYmICFyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKS0+ZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAg
ICAgICB3cmFwcGVyID0gW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRo
Q29udGVudHM6KE5TRGF0YSAqKShyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKS0+Z2V0
VElGRlJlcHJlc2VudGF0aW9uKCkpXTsKKyAgICAgICAgICAgIHdyYXBwZXIgPSBbW05TRmlsZVdy
YXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czooTlNEYXRhICopKHJlbmRl
cmVyLT5jYWNoZWRJbWFnZSgpLT5pbWFnZShyZW5kZXJlciktPmdldFRJRkZSZXByZXNlbnRhdGlv
bigpKV07CiAgICAgICAgICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpAImltYWdl
LnRpZmYiXTsKICAgICAgICAgICAgIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0JKHJl
dmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIFBhc3RlYm9hcmQ6
OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgW21fcGFzdGVib2FyZC5nZXQoKSBkZWNsYXJl
VHlwZXM6dHlwZXMgb3duZXI6bmlsXTsKICAgICB3cml0ZVVSTChtX3Bhc3RlYm9hcmQuZ2V0KCks
IHR5cGVzLCBjb2NvYVVSTCwgbnNTdHJpbmdOaWxJZkVtcHR5KHRpdGxlKSwgZnJhbWUpOwogICAg
IAotICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOworICAgIEltYWdlKiBp
bWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZShyZW5kZXJlcik7CiAgICAgQVNTRVJUKGltYWdlKTsK
ICAgICAKICAgICBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldERhdGE6W2ltYWdlLT5nZXROU0ltYWdl
KCkgVElGRlJlcHJlc2VudGF0aW9uXSBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAkocmV2aXNpb24gOTcz
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQCBEcmFnSW1hZ2VSZWYgQ2xpcGJvYXJkUXQ6OmNy
ZWF0ZURyYWdJbWFnCiAgICAgaWYgKCFtX2RyYWdJbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgZHJhZ0xvYyA9IG1fZHJhZ0xvYzsKLSAgICByZXR1cm4gbV9kcmFnSW1hZ2UtPmltYWdlKCkt
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgcmV0dXJuIG1fZHJhZ0ltYWdlLT5p
bWFnZSgwKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIH0KIAogCkBAIC0yODIsOSAr
MjgyLDkgQEAgdm9pZCBDbGlwYm9hcmRRdDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYQogICAgICAg
ICBtX3dyaXRhYmxlRGF0YSA9IG5ldyBRTWltZURhdGE7CiAKICAgICBDYWNoZWRJbWFnZSogY2Fj
aGVkSW1hZ2UgPSBnZXRDYWNoZWRJbWFnZShlbGVtZW50KTsKLSAgICBpZiAoIWNhY2hlZEltYWdl
IHx8ICFjYWNoZWRJbWFnZS0+aW1hZ2UoKSB8fCAhY2FjaGVkSW1hZ2UtPmlzTG9hZGVkKCkpCisg
ICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhY2FjaGVkSW1hZ2UtPmltYWdlKGVsZW1lbnQtPnJlbmRl
cmVyKCkpIHx8ICFjYWNoZWRJbWFnZS0+aXNMb2FkZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IFFQaXhtYXAqIHBpeG1hcCA9IGNhY2hlZEltYWdlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOworICAgIFFQaXhtYXAqIHBpeG1hcCA9IGNhY2hlZEltYWdlLT5pbWFnZShl
bGVtZW50LT5yZW5kZXJlcigpKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBp
ZiAocGl4bWFwKQogICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0SW1hZ2VEYXRhKCpwaXhtYXAp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAJ
KHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2Fy
ZFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgUGFzdGVib2Fy
ZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKICAgICBpZiAoIWNhY2hlZEltYWdlIHx8IGNhY2hl
ZEltYWdlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEltYWdlKiBp
bWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOworICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZElt
YWdlLT5pbWFnZShub2RlKCktPnJlbmRlcmVyKCkpOwogICAgIEFTU0VSVChpbWFnZSk7CiAKICAg
ICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCShy
ZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcgQEAgc3RhdGljIEhHTE9CQUwg
Y3JlYXRlR2xvYmFsSERyb3BDb250ZW50KAogc3RhdGljIEhHTE9CQUwgY3JlYXRlR2xvYmFsSW1h
Z2VGaWxlRGVzY3JpcHRvcihjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwg
Q2FjaGVkSW1hZ2UqIGltYWdlKQogewogICAgIEFTU0VSVF9BUkcoaW1hZ2UsIGltYWdlKTsKLSAg
ICBBU1NFUlQoaW1hZ2UtPmltYWdlKCktPmRhdGEoKSk7CisgICAgQVNTRVJUKGltYWdlLT5pbWFn
ZSgwKS0+ZGF0YSgpKTsKIAogICAgIEhSRVNVTFQgaHIgPSBTX09LOwogICAgIEhHTE9CQUwgbWVt
T2JqID0gMDsKQEAgLTI1MiwxMCArMjUyLDEwIEBAIHN0YXRpYyBIR0xPQkFMIGNyZWF0ZUdsb2Jh
bEltYWdlRmlsZURlc2MKICAgICBtZW1zZXQoZmdkLCAwLCBzaXplb2YoRklMRUdST1VQREVTQ1JJ
UFRPUikpOwogICAgIGZnZC0+Y0l0ZW1zID0gMTsKICAgICBmZ2QtPmZnZFswXS5kd0ZsYWdzID0g
RkRfRklMRVNJWkU7Ci0gICAgZmdkLT5mZ2RbMF0ubkZpbGVTaXplTG93ID0gaW1hZ2UtPmltYWdl
KCktPmRhdGEoKS0+c2l6ZSgpOworICAgIGZnZC0+ZmdkWzBdLm5GaWxlU2l6ZUxvdyA9IGltYWdl
LT5pbWFnZSgwKS0+ZGF0YSgpLT5zaXplKCk7CiAgICAgCiAgICAgY29uc3QgU3RyaW5nJiBwcmVm
ZXJyZWRUaXRsZSA9IHRpdGxlLmlzRW1wdHkoKSA/IGltYWdlLT5yZXNwb25zZSgpLnN1Z2dlc3Rl
ZEZpbGVuYW1lKCkgOiB0aXRsZTsKLSAgICBTdHJpbmcgZXh0ZW5zaW9uID0gaW1hZ2UtPmltYWdl
KCktPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CisgICAgU3RyaW5nIGV4dGVuc2lvbiA9IGltYWdlLT5p
bWFnZSgwKS0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKICAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHko
KSkgewogICAgICAgICAvLyBEbyBub3QgY29udGludWUgcHJvY2Vzc2luZyBpbiB0aGUgcmFyZSBh
bmQgdW51c3VhbCBjYXNlIHdoZXJlIGEgZGVjb2RlZCBpbWFnZSBpcyBub3QgYWJsZSAKICAgICAg
ICAgLy8gdG8gcHJvdmlkZSBhIGZpbGVuYW1lIGV4dGVuc2lvbi4gU29tZXRoaW5nIHRyaWNreSAo
bGlrZSBhIGJhaXQtbi1zd2l0Y2gpIGlzIGdvaW5nIG9uCkBAIC02MDYsNyArNjA2LDcgQEAgRHJh
Z0ltYWdlUmVmIENsaXBib2FyZFdpbjo6Y3JlYXRlRHJhZ0ltYQogewogICAgIEhCSVRNQVAgcmVz
dWx0ID0gMDsKICAgICBpZiAobV9kcmFnSW1hZ2UpIHsKLSAgICAgICAgcmVzdWx0ID0gY3JlYXRl
RHJhZ0ltYWdlRnJvbUltYWdlKG1fZHJhZ0ltYWdlLT5pbWFnZSgpKTsgICAgICAgIAorICAgICAg
ICByZXN1bHQgPSBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UobV9kcmFnSW1hZ2UtPmltYWdlKDAp
KTsgICAgICAgIAogICAgICAgICBsb2MgPSBtX2RyYWdMb2M7CiAgICAgfSBlbHNlIGlmIChtX2Ry
YWdJbWFnZUVsZW1lbnQpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fZHJhZ0ltYWdlRWxlbWVu
dC5nZXQoKTsKQEAgLTYzNSwxMCArNjM1LDEwIEBAIHN0YXRpYyB2b2lkIHdyaXRlSW1hZ2VUb0Rh
dGFPYmplY3QoSURhdGEKIHsKICAgICAvLyBTaG92ZSBpbWFnZSBkYXRhIGludG8gYSBEYXRhT2Jq
ZWN0IGZvciB1c2UgYXMgYSBmaWxlCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gZ2V0
Q2FjaGVkSW1hZ2UoZWxlbWVudCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhY2FjaGVkSW1h
Z2UtPmltYWdlKCkgfHwgIWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQorICAgIGlmICghY2FjaGVk
SW1hZ2UgfHwgIWNhY2hlZEltYWdlLT5pbWFnZShlbGVtZW50LT5yZW5kZXJlcigpKSB8fCAhY2Fj
aGVkSW1hZ2UtPmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNoYXJlZEJ1ZmZl
ciogaW1hZ2VCdWZmZXIgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+ZGF0YSgpOworICAgIFNoYXJl
ZEJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoZWxlbWVudC0+cmVuZGVy
ZXIoKSktPmRhdGEoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlci0+c2l6
ZSgpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9QYXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcs
NyArMjE3LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAg
IENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwogICAg
IGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOworICAg
IEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZShyZW5kZXJlcik7CiAgICAgQVNTRVJU
KGltYWdlKTsKIAogICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW5jZS9QYXN0ZWJvYXJkV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbmNlL1Bhc3RlYm9hcmRXaW5DRS5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvUGFzdGVib2FyZFdpbkNFLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2Rl
KiBub2RlLCAKICAgICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJ
bWFnZSo+KG5vZGUtPnJlbmRlcmVyKCkpOwogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9
IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4ocmVuZGVyZXItPmNhY2hlZEltYWdlKCkpOwogICAg
IEFTU0VSVChjYWNoZWRJbWFnZSk7Ci0gICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmlt
YWdlKCk7CisgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKHJlbmRlcmVyKTsK
ICAgICBBU1NFUlQoaW1hZ2UpOwogCiAgICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDQsNyArMzA0LDcgQEAgSW1hZ2UqIEhpdFRlc3RSZXN1bHQ6OmltYWdlKCkgY29uc3QKICAgICBp
ZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzSW1hZ2UoKSkgewogICAgICAgICBSZW5kZXJJbWFn
ZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKTsK
ICAgICAgICAgaWYgKGltYWdlLT5jYWNoZWRJbWFnZSgpICYmICFpbWFnZS0+Y2FjaGVkSW1hZ2Uo
KS0+ZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGltYWdlLT5jYWNoZWRJbWFn
ZSgpLT5pbWFnZSgpOworICAgICAgICAgICAgcmV0dXJuIGltYWdlLT5jYWNoZWRJbWFnZSgpLT5p
bWFnZShpbWFnZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA3NCw3ICsxMDc0LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEZpbGxMYXllcnMoY29u
cwogdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEZpbGxMYXllcihjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgQ29sb3ImIGMsIGNvbnN0IEZpbGxMYXllciogZmlsbExheWVyLCBjb25z
dCBMYXlvdXRSZWN0JiByZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBTdHlsZUlt
YWdlKiBpbWcgPSBmaWxsTGF5ZXItPmltYWdlKCk7Ci0gICAgYm9vbCBoYXNGaWxsSW1hZ2UgPSBp
bWcgJiYgaW1nLT5jYW5SZW5kZXIocmVuZGVyZXIoKS0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
KTsKKyAgICBib29sIGhhc0ZpbGxJbWFnZSA9IGltZyAmJiBpbWctPmNhblJlbmRlcihyZW5kZXJl
cigpLCByZW5kZXJlcigpLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgIGlmICgoIWhh
c0ZpbGxJbWFnZSAmJiAhcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQm9yZGVyUmFkaXVzKCkpIHx8
ICghcHJldkxpbmVCb3goKSAmJiAhbmV4dExpbmVCb3goKSkgfHwgIXBhcmVudCgpKQogICAgICAg
ICBib3hNb2RlbE9iamVjdCgpLT5wYWludEZpbGxMYXllckV4dGVuZGVkKHBhaW50SW5mbywgYywg
ZmlsbExheWVyLCByZWN0LCBCYWNrZ3JvdW5kQmxlZWROb25lLCB0aGlzLCByZWN0LnNpemUoKSwg
b3ApOwogICAgIGVsc2UgewpAQCAtMTIwNiw3ICsxMjA2LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94
OjpwYWludEJveERlY29yYXRpb25zKAogICAgICAgICBpZiAocGFyZW50KCkgJiYgcmVuZGVyZXIo
KS0+c3R5bGUoKS0+aGFzQm9yZGVyKCkpIHsKICAgICAgICAgICAgIGNvbnN0IE5pbmVQaWVjZUlt
YWdlJiBib3JkZXJJbWFnZSA9IHJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckltYWdlKCk7CiAg
ICAgICAgICAgICBTdHlsZUltYWdlKiBib3JkZXJJbWFnZVNvdXJjZSA9IGJvcmRlckltYWdlLmlt
YWdlKCk7Ci0gICAgICAgICAgICBib29sIGhhc0JvcmRlckltYWdlID0gYm9yZGVySW1hZ2VTb3Vy
Y2UgJiYgYm9yZGVySW1hZ2VTb3VyY2UtPmNhblJlbmRlcihzdHlsZVRvVXNlLT5lZmZlY3RpdmVa
b29tKCkpOworICAgICAgICAgICAgYm9vbCBoYXNCb3JkZXJJbWFnZSA9IGJvcmRlckltYWdlU291
cmNlICYmIGJvcmRlckltYWdlU291cmNlLT5jYW5SZW5kZXIocmVuZGVyZXIoKSwgc3R5bGVUb1Vz
ZS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgICAgIGlmIChoYXNCb3JkZXJJbWFnZSAmJiAh
Ym9yZGVySW1hZ2VTb3VyY2UtPmlzTG9hZGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOyAv
LyBEb24ndCBwYWludCBhbnl0aGluZyB3aGlsZSB3ZSB3YWl0IGZvciB0aGUgaW1hZ2UgdG8gbG9h
ZC4KIApAQCAtMTI4MCw3ICsxMjgwLDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludE1hc2so
UGFpbnRJbmZvJgogICAgIExheW91dFJlY3QgcGFpbnRSZWN0ID0gTGF5b3V0UmVjdChhZGp1c3Rl
ZFBhaW50T2Zmc2V0LCBmcmFtZVJlY3Quc2l6ZSgpKTsKICAgICBwYWludEZpbGxMYXllcnMocGFp
bnRJbmZvLCBDb2xvcigpLCByZW5kZXJlcigpLT5zdHlsZSgpLT5tYXNrTGF5ZXJzKCksIHBhaW50
UmVjdCwgY29tcG9zaXRlT3ApOwogICAgIAotICAgIGJvb2wgaGFzQm94SW1hZ2UgPSBtYXNrQm94
SW1hZ2UgJiYgbWFza0JveEltYWdlLT5jYW5SZW5kZXIocmVuZGVyZXIoKS0+c3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpKTsKKyAgICBib29sIGhhc0JveEltYWdlID0gbWFza0JveEltYWdlICYmIG1h
c2tCb3hJbWFnZS0+Y2FuUmVuZGVyKHJlbmRlcmVyKCksIHJlbmRlcmVyKCktPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSk7CiAgICAgaWYgKCFoYXNCb3hJbWFnZSB8fCAhbWFza0JveEltYWdlLT5p
c0xvYWRlZCgpKQogICAgICAgICByZXR1cm47IC8vIERvbid0IHBhaW50IGFueXRoaW5nIHdoaWxl
IHdlIHdhaXQgZm9yIHRoZSBpbWFnZSB0byBsb2FkLgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxNiw3ICsxMDE2LDcg
QEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50TWFza0ltYWdlcyhjb25zdCBQYQogICAgICAgICAgICAg
Ly8gV2UgaGF2ZSB0byBjaGVjayB0aGF0IHRoZSBtYXNrIGltYWdlcyB0byBiZSByZW5kZXJlZCBj
b250YWluIGF0IGxlYXN0IG9uZSBpbWFnZSB0aGF0IGNhbiBiZSBhY3R1YWxseSB1c2VkIGluIHJl
bmRlcmluZwogICAgICAgICAgICAgLy8gYmVmb3JlIHB1c2hpbmcgdGhlIHRyYW5zcGFyZW5jeSBs
YXllci4KICAgICAgICAgICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBmaWxsTGF5ZXIgPSBtYXNr
TGF5ZXJzLT5uZXh0KCk7IGZpbGxMYXllcjsgZmlsbExheWVyID0gZmlsbExheWVyLT5uZXh0KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZmlsbExheWVyLT5pbWFnZSgpICYmIGZpbGxMYXllci0+
aW1hZ2UoKS0+Y2FuUmVuZGVyKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZmlsbExheWVyLT5pbWFnZSgpICYmIGZpbGxMYXllci0+aW1hZ2UoKS0+Y2Fu
UmVuZGVyKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgcHVzaFRyYW5zcGFyZW5jeUxheWVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgZm91bmQgb25lIGltYWdlIHRoYXQgY2FuIGJlIHVzZWQgaW4gcmVuZGVyaW5nLCBleGl0
IHRoZSBsb29wCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEzMCw3ICsxMTMwLDcg
QEAgYm9vbCBSZW5kZXJCb3g6OnJlcGFpbnRMYXllclJlY3RzRm9ySW1hZwogICAgIFJlbmRlckJv
eCogbGF5ZXJSZW5kZXJlciA9IDA7CiAKICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyTGF5
ZXIgPSBsYXllcnM7IGN1ckxheWVyOyBjdXJMYXllciA9IGN1ckxheWVyLT5uZXh0KCkpIHsKLSAg
ICAgICAgaWYgKGN1ckxheWVyLT5pbWFnZSgpICYmIGltYWdlID09IGN1ckxheWVyLT5pbWFnZSgp
LT5kYXRhKCkgJiYgY3VyTGF5ZXItPmltYWdlKCktPmNhblJlbmRlcihzdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCkpKSB7CisgICAgICAgIGlmIChjdXJMYXllci0+aW1hZ2UoKSAmJiBpbWFnZSA9PSBj
dXJMYXllci0+aW1hZ2UoKS0+ZGF0YSgpICYmIGN1ckxheWVyLT5pbWFnZSgpLT5jYW5SZW5kZXIo
dGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkgewogICAgICAgICAgICAgLy8gTm93IHRo
YXQgd2Uga25vdyB0aGlzIGltYWdlIGlzIGJlaW5nIHVzZWQsIGNvbXB1dGUgdGhlIHJlbmRlcmVy
IGFuZCB0aGUgcmVjdAogICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZW4ndCBhbHJlYWR5CiAgICAg
ICAgICAgICBpZiAoIWxheWVyUmVuZGVyZXIpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gOTczNjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MjksNyArNjI5LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRGaWxsTGF5ZQogCiAgICAgQ29sb3IgYmdDb2xvciA9IGNvbG9yOwogICAgIFN0eWxlSW1h
Z2UqIGJnSW1hZ2UgPSBiZ0xheWVyLT5pbWFnZSgpOwotICAgIGJvb2wgc2hvdWxkUGFpbnRCYWNr
Z3JvdW5kSW1hZ2UgPSBiZ0ltYWdlICYmIGJnSW1hZ2UtPmNhblJlbmRlcihzdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCkpOworICAgIGJvb2wgc2hvdWxkUGFpbnRCYWNrZ3JvdW5kSW1hZ2UgPSBiZ0lt
YWdlICYmIGJnSW1hZ2UtPmNhblJlbmRlcih0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
OwogICAgIAogICAgIC8vIFdoZW4gdGhpcyBzdHlsZSBmbGFnIGlzIHNldCwgY2hhbmdlIGV4aXN0
aW5nIGJhY2tncm91bmQgY29sb3JzIGFuZCBpbWFnZXMgdG8gYSBzb2xpZCB3aGl0ZSBiYWNrZ3Jv
dW5kLgogICAgIC8vIElmIHRoZXJlJ3Mgbm8gYmcgY29sb3Igb3IgaW1hZ2UsIGxlYXZlIGl0IHVu
dG91Y2hlZCB0byBhdm9pZCBhZmZlY3RpbmcgdHJhbnNwYXJlbmN5LgpAQCAtODAzLDcgKzgwMyw3
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKIExheW91dFNpemUg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUZpbGxUaWxlU2l6ZShjb25zdCBGaWxsTGF5
ZXIqIGZpbGxMYXllciwgTGF5b3V0U2l6ZSBwb3NpdGlvbmluZ0FyZWFTaXplKSBjb25zdAogewog
ICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gZmlsbExheWVyLT5pbWFnZSgpOwotICAgIGltYWdlLT5z
ZXRJbWFnZUNvbnRhaW5lclNpemUocG9zaXRpb25pbmdBcmVhU2l6ZSk7IC8vIFVzZSB0aGUgYm94
IGVzdGFibGlzaGVkIGJ5IGJhY2tncm91bmQtb3JpZ2luLgorICAgIGltYWdlLT5zZXRJbWFnZUNv
bnRhaW5lclNpemUodGhpcywgcG9zaXRpb25pbmdBcmVhU2l6ZSk7IC8vIFVzZSB0aGUgYm94IGVz
dGFibGlzaGVkIGJ5IGJhY2tncm91bmQtb3JpZ2luLgogCiAgICAgRUZpbGxTaXplVHlwZSB0eXBl
ID0gZmlsbExheWVyLT5zaXplKCkudHlwZTsKIApAQCAtOTg4LDcgKzk4OCw3IEBAIGJvb2wgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICBpZiAoIXN0eWxlSW1hZ2UtPmlz
TG9hZGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBOZXZlciBwYWludCBhIG5pbmUtcGll
Y2UgaW1hZ2UgaW5jcmVtZW50YWxseSwgYnV0IGRvbid0IHBhaW50IHRoZSBmYWxsYmFjayBib3Jk
ZXJzIGVpdGhlci4KIAotICAgIGlmICghc3R5bGVJbWFnZS0+Y2FuUmVuZGVyKHN0eWxlLT5lZmZl
Y3RpdmVab29tKCkpKQorICAgIGlmICghc3R5bGVJbWFnZS0+Y2FuUmVuZGVyKHRoaXMsIHN0eWxl
LT5lZmZlY3RpdmVab29tKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhN
RTogYm9yZGVyLWltYWdlIGlzIGJyb2tlbiB3aXRoIGZ1bGwgcGFnZSB6b29taW5nIHdoZW4gdGls
aW5nIGhhcyB0byBoYXBwZW4sIHNpbmNlIHRoZSB0aWxpbmcgZnVuY3Rpb24KQEAgLTEwMDUsNyAr
MTAwNSw3IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAgICBM
YXlvdXRVbml0IHJpZ2h0V2l0aE91dHNldCA9IHJlY3QubWF4WCgpICsgcmlnaHRPdXRzZXQ7CiAg
ICAgTGF5b3V0UmVjdCBib3JkZXJJbWFnZVJlY3QgPSBMYXlvdXRSZWN0KGxlZnRXaXRoT3V0c2V0
LCB0b3BXaXRoT3V0c2V0LCByaWdodFdpdGhPdXRzZXQgLSBsZWZ0V2l0aE91dHNldCwgYm90dG9t
V2l0aE91dHNldCAtIHRvcFdpdGhPdXRzZXQpOwogCi0gICAgc3R5bGVJbWFnZS0+c2V0SW1hZ2VD
b250YWluZXJTaXplKGJvcmRlckltYWdlUmVjdC5zaXplKCkpOworICAgIHN0eWxlSW1hZ2UtPnNl
dEltYWdlQ29udGFpbmVyU2l6ZSh0aGlzLCBib3JkZXJJbWFnZVJlY3Quc2l6ZSgpKTsKICAgICBM
YXlvdXRTaXplIGltYWdlU2l6ZSA9IHN0eWxlSW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCAxLjBmKTsK
ICAgICBMYXlvdXRVbml0IGltYWdlV2lkdGggPSBpbWFnZVNpemUud2lkdGgoKTsKICAgICBMYXlv
dXRVbml0IGltYWdlSGVpZ2h0ID0gaW1hZ2VTaXplLmhlaWdodCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDcgKzgyLDcgQEAgc3RhdGljIGNvbnN0IGludCBtYXhBbHRUZXh0SGVpZ2h0ID0gMjU2OwogSW50
U2l6ZSBSZW5kZXJJbWFnZTo6aW1hZ2VTaXplRm9yRXJyb3IoQ2FjaGVkSW1hZ2UqIG5ld0ltYWdl
KSBjb25zdAogewogICAgIEFTU0VSVF9BUkcobmV3SW1hZ2UsIG5ld0ltYWdlKTsKLSAgICBBU1NF
UlRfQVJHKG5ld0ltYWdlLCBuZXdJbWFnZS0+aW1hZ2UoKSk7CisgICAgQVNTRVJUX0FSRyhuZXdJ
bWFnZSwgbmV3SW1hZ2UtPmltYWdlKHRoaXMpKTsKIAogICAgIEludFNpemUgaW1hZ2VTaXplOwog
ICAgIGlmIChuZXdJbWFnZS0+d2lsbFBhaW50QnJva2VuSW1hZ2UoKSkgewpAQCAtOTEsNyArOTEs
NyBAQCBJbnRTaXplIFJlbmRlckltYWdlOjppbWFnZVNpemVGb3JFcnJvcihDCiAgICAgICAgIGlt
YWdlU2l6ZSA9IGJyb2tlbkltYWdlQW5kSW1hZ2VTY2FsZUZhY3Rvci5maXJzdC0+c2l6ZSgpOwog
ICAgICAgICBpbWFnZVNpemUuc2NhbGUoMSAvIGJyb2tlbkltYWdlQW5kSW1hZ2VTY2FsZUZhY3Rv
ci5zZWNvbmQpOwogICAgIH0gZWxzZQotICAgICAgICBpbWFnZVNpemUgPSBuZXdJbWFnZS0+aW1h
Z2UoKS0+c2l6ZSgpOworICAgICAgICBpbWFnZVNpemUgPSBuZXdJbWFnZS0+aW1hZ2UodGhpcykt
PnNpemUoKTsKIAogICAgIC8vIGltYWdlU2l6ZSgpIHJldHVybnMgMCBmb3IgdGhlIGVycm9yIGlt
YWdlLiBXZSBuZWVkIHRoZSB0cnVlIHNpemUgb2YgdGhlCiAgICAgLy8gZXJyb3IgaW1hZ2UsIHNv
IHdlIGhhdmUgdG8gZ2V0IGl0IGJ5IGdyYWJiaW5nIGltYWdlKCkgZGlyZWN0bHkuCkBAIC0xMDMs
NyArMTAzLDcgQEAgSW50U2l6ZSBSZW5kZXJJbWFnZTo6aW1hZ2VTaXplRm9yRXJyb3IoQwogYm9v
bCBSZW5kZXJJbWFnZTo6c2V0SW1hZ2VTaXplRm9yQWx0VGV4dChDYWNoZWRJbWFnZSogbmV3SW1h
Z2UgLyogPSAwICovKQogewogICAgIEludFNpemUgaW1hZ2VTaXplOwotICAgIGlmIChuZXdJbWFn
ZSAmJiBuZXdJbWFnZS0+aW1hZ2UoKSkKKyAgICBpZiAobmV3SW1hZ2UgJiYgbmV3SW1hZ2UtPmlt
YWdlKHRoaXMpKQogICAgICAgICBpbWFnZVNpemUgPSBpbWFnZVNpemVGb3JFcnJvcihuZXdJbWFn
ZSk7CiAgICAgZWxzZSBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5KCkgfHwgbmV3SW1hZ2UpIHsKICAg
ICAgICAgLy8gSWYgd2UnbGwgYmUgZGlzcGxheWluZyBlaXRoZXIgdGV4dCBvciBhbiBpbWFnZSwg
YWRkIGEgbGl0dGxlIHBhZGRpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2VSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksMTQgKzg5LDExIEBAIHZvaWQgUmVuZGVySW1hZ2VSZXNvdXJjZTo6cmVzZXRBbmltYXRp
b24KICAgICAgICAgbV9yZW5kZXJlci0+cmVwYWludCgpOwogfQogCi12b2lkIFJlbmRlckltYWdl
UmVzb3VyY2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25z
dAordm9pZCBSZW5kZXJJbWFnZVJlc291cmNlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3Qg
SW50U2l6ZSYgaW1hZ2VDb250YWluZXJTaXplKQogewogICAgIEFTU0VSVChtX3JlbmRlcmVyKTsK
LQotICAgIGlmICghbV9jYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jYWNo
ZWRJbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHNpemUpOworICAgIGlmIChtX2NhY2hlZElt
YWdlKQorICAgICAgICBtX2NhY2hlZEltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUobV9yZW5k
ZXJlciwgaW1hZ2VDb250YWluZXJTaXplKTsKIH0KIAogSW1hZ2UqIFJlbmRlckltYWdlUmVzb3Vy
Y2U6Om51bGxJbWFnZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2VSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZVJlc291cmNlLmgJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTUgKzU0
LDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRBbmltYXRpb24oKTsKIAotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoaW50IC8qIHdpZHRoICovID0gMCwgaW50IC8qIGhl
aWdodCAqLyA9IDApIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdl
LT5pbWFnZSgpIDogbnVsbEltYWdlKCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+
IGltYWdlKGludCAvKiB3aWR0aCAqLyA9IDAsIGludCAvKiBoZWlnaHQgKi8gPSAwKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2UobV9yZW5kZXJlcikg
OiBudWxsSW1hZ2UoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWNoZWRJbWFnZSAmJiBtX2NhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCk7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShj
b25zdCBJbnRTaXplJik7CiAgICAgdmlydHVhbCBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUo
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+dXNlc0ltYWdl
Q29udGFpbmVyU2l6ZSgpIDogZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxh
dGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2Ut
PmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIDogZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1h
Z2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2Nh
Y2hlZEltYWdlLT5pbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgOiBmYWxzZTsgfQogCi0gICAgdmly
dHVhbCBJbnRTaXplIGltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2VTaXplKG11bHRpcGxpZXIpIDogSW50
U2l6ZSgpOyB9CisgICAgdmlydHVhbCBJbnRTaXplIGltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVy
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2VTaXpl
KG1fcmVuZGVyZXIsIG11bHRpcGxpZXIpIDogSW50U2l6ZSgpOyB9CiAKICAgICB2aXJ0dWFsIFdy
YXBwZWRJbWFnZVB0ciBpbWFnZVB0cigpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UuZ2V0
KCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3Vy
Y2VTdHlsZUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmgJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJbWFnZT4gaW1hZ2UoaW50IHdpZHRoID0gMCwgaW50IGhlaWdodCA9IDApIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGVJbWFnZS0+aW1hZ2UobV9yZW5kZXJlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3R5bGVJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW1h
Z2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0IHsgbV9zdHlsZUltYWdl
LT5zZXRJbWFnZUNvbnRhaW5lclNpemUoc2l6ZSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW1h
Z2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9zdHlsZUltYWdlLT5zZXRJ
bWFnZUNvbnRhaW5lclNpemUobV9yZW5kZXJlciwgc2l6ZSk7IH0KICAgICB2aXJ0dWFsIGJvb2wg
dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVJbWFnZS0+dXNl
c0ltYWdlQ29udGFpbmVyU2l6ZSgpOyB9CiAgICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRp
dmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVJbWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZVdp
ZHRoKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGVJbWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAko
cmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTI2LDcgKzkyNiw3IEBAIGJvb2wgUmVuZGVy
TGF5ZXJCYWNraW5nOjppc0RpcmVjdGx5Q29tcG8KICAgICBSZW5kZXJJbWFnZSogaW1hZ2VSZW5k
ZXJlciA9IHRvUmVuZGVySW1hZ2UocmVuZGVyT2JqZWN0KTsKICAgICBpZiAoQ2FjaGVkSW1hZ2Uq
IGNhY2hlZEltYWdlID0gaW1hZ2VSZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKSkgewogICAgICAgICBp
ZiAoY2FjaGVkSW1hZ2UtPmhhc0ltYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gY2FjaGVkSW1h
Z2UtPmltYWdlKCktPmlzQml0bWFwSW1hZ2UoKTsKKyAgICAgICAgICAgIHJldHVybiBjYWNoZWRJ
bWFnZS0+aW1hZ2UoaW1hZ2VSZW5kZXJlciktPmlzQml0bWFwSW1hZ2UoKTsKICAgICB9CiAKICAg
ICByZXR1cm4gZmFsc2U7CkBAIC05NjMsNyArOTYzLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUltYWdlQ29udAogICAgIGlmICghY2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOworICAgIEltYWdl
KiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZShpbWFnZVJlbmRlcmVyKTsKICAgICBpZiAoIWlt
YWdlKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUw
LDcgKzEzNTAsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNvbXB1dGVQcmVmZXJyZWRMCiAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgc29tZXdoYXQgYXJiaXRyYXJ5IHdpZHRoLiAgR2Vu
ZXJhdGVkIGltYWdlcyBmb3IgbWFya2VycyByZWFsbHkgd29uJ3QgYmVjb21lIHBhcnRpY3VsYXJs
eSB1c2VmdWwKICAgICAgICAgLy8gdW50aWwgd2Ugc3VwcG9ydCB0aGUgQ1NTMyBtYXJrZXIgcHNl
dWRvY2xhc3MgdG8gYWxsb3cgY29udHJvbCBvdmVyIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRo
ZSBtYXJrZXIgYm94LgogICAgICAgICBMYXlvdXRVbml0IGJ1bGxldFdpZHRoID0gZm9udE1ldHJp
Y3MuYXNjZW50KCkgLyAyOwotICAgICAgICBtX2ltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUo
TGF5b3V0U2l6ZShidWxsZXRXaWR0aCwgYnVsbGV0V2lkdGgpKTsKKyAgICAgICAgbV9pbWFnZS0+
c2V0SW1hZ2VDb250YWluZXJTaXplKHRoaXMsIExheW91dFNpemUoYnVsbGV0V2lkdGgsIGJ1bGxl
dFdpZHRoKSk7CiAgICAgICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZS0+aW1hZ2VT
aXplKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIG1fbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gaW1hZ2VTaXplLndpZHRoKCkgOiBpbWFnZVNpemUu
aGVpZ2h0KCk7CiAgICAgICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNp
b24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzQ1LDcgKzc0NSw3IEBAIHN0YXRpYyBib29sIG11c3RSZXBhaW50
RmlsbExheWVycyhjb25zdCAKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgdmFsaWQgaW1h
Z2UuCiAgICAgU3R5bGVJbWFnZSogaW1nID0gbGF5ZXItPmltYWdlKCk7Ci0gICAgaWYgKCFpbWcg
fHwgIWltZy0+Y2FuUmVuZGVyKHJlbmRlcmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKQor
ICAgIGlmICghaW1nIHx8ICFpbWctPmNhblJlbmRlcihyZW5kZXJlciwgcmVuZGVyZXItPnN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICgh
bGF5ZXItPnhQb3NpdGlvbigpLmlzWmVybygpIHx8ICFsYXllci0+eVBvc2l0aW9uKCkuaXNaZXJv
KCkpCkBAIC03NjUsNyArNzY1LDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OmJvcmRlckltYWdlSXNM
b2FkZWRBbgogICAgIEFTU0VSVChzdHlsZSgpLT5oYXNCb3JkZXIoKSk7CiAKICAgICBTdHlsZUlt
YWdlKiBib3JkZXJJbWFnZSA9IHN0eWxlKCktPmJvcmRlckltYWdlKCkuaW1hZ2UoKTsKLSAgICBy
ZXR1cm4gYm9yZGVySW1hZ2UgJiYgYm9yZGVySW1hZ2UtPmNhblJlbmRlcihzdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCkpICYmIGJvcmRlckltYWdlLT5pc0xvYWRlZCgpOworICAgIHJldHVybiBib3Jk
ZXJJbWFnZSAmJiBib3JkZXJJbWFnZS0+Y2FuUmVuZGVyKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSkgJiYgYm9yZGVySW1hZ2UtPmlzTG9hZGVkKCk7CiB9CiAKIGJvb2wgUmVuZGVyT2Jq
ZWN0OjptdXN0UmVwYWludEJhY2tncm91bmRPckJvcmRlcigpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCShy
ZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNh
Y2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBTdHlsZUNhY2hlZEltYWdlOjpjCiAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUobV9pbWFnZS0+dXJsKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsK
IH0KIAotYm9vbCBTdHlsZUNhY2hlZEltYWdlOjpjYW5SZW5kZXIoZmxvYXQgbXVsdGlwbGllcikg
Y29uc3QKK2Jvb2wgU3R5bGVDYWNoZWRJbWFnZTo6Y2FuUmVuZGVyKGNvbnN0IFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW1h
Z2UtPmNhblJlbmRlcihtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4gbV9pbWFnZS0+Y2FuUmVuZGVy
KHJlbmRlcmVyLCBtdWx0aXBsaWVyKTsKIH0KIAogYm9vbCBTdHlsZUNhY2hlZEltYWdlOjppc0xv
YWRlZCgpIGNvbnN0CkBAIC00OSw5ICs0OSw5IEBAIGJvb2wgU3R5bGVDYWNoZWRJbWFnZTo6ZXJy
b3JPY2N1cnJlZCgpIGMKICAgICByZXR1cm4gbV9pbWFnZS0+ZXJyb3JPY2N1cnJlZCgpOwogfQog
Ci1JbnRTaXplIFN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShjb25zdCBSZW5kZXJPYmplY3Qq
IC8qcmVuZGVyZXIqLywgZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK0ludFNpemUgU3R5bGVDYWNo
ZWRJbWFnZTo6aW1hZ2VTaXplKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGZsb2F0IG11
bHRpcGxpZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UtPmltYWdlU2l6ZShtdWx0aXBs
aWVyKTsKKyAgICByZXR1cm4gbV9pbWFnZS0+aW1hZ2VTaXplKHJlbmRlcmVyLCBtdWx0aXBsaWVy
KTsKIH0KIAogYm9vbCBTdHlsZUNhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBj
b25zdApAQCAtNjksMjQgKzY5LDI0IEBAIGJvb2wgU3R5bGVDYWNoZWRJbWFnZTo6dXNlc0ltYWdl
Q29udGFpbmUKICAgICByZXR1cm4gbV9pbWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpOwog
fQogCi12b2lkIFN0eWxlQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQordm9pZCBTdHlsZUNhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNp
emUoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgaW1hZ2VDb250
YWluZXJTaXplKQogewotICAgIHJldHVybiBtX2ltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUo
c2l6ZSk7CisgICAgbV9pbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHJlbmRlcmVyLCBpbWFn
ZUNvbnRhaW5lclNpemUpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVkSW1hZ2U6OmFkZENsaWVudChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBtX2ltYWdlLT5hZGRDbGllbnQo
cmVuZGVyZXIpOworICAgIG1faW1hZ2UtPmFkZENsaWVudChyZW5kZXJlcik7CiB9CiAKIHZvaWQg
U3R5bGVDYWNoZWRJbWFnZTo6cmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7
Ci0gICAgcmV0dXJuIG1faW1hZ2UtPnJlbW92ZUNsaWVudChyZW5kZXJlcik7CisgICAgbV9pbWFn
ZS0+cmVtb3ZlQ2xpZW50KHJlbmRlcmVyKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZT4gU3R5bGVD
YWNoZWRJbWFnZTo6aW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0CitQ
YXNzUmVmUHRyPEltYWdlPiBTdHlsZUNhY2hlZEltYWdlOjppbWFnZShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBJbnRTaXplJikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbWFnZS0+aW1h
Z2UoKTsKKyAgICByZXR1cm4gbV9pbWFnZS0+aW1hZ2UocmVuZGVyZXIpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdl
LmgJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTQgKzQwLDE0IEBAIHB1Ymxp
YzoKICAgICAKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiBt
X2ltYWdlLmdldCgpOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyKGZsb2F0IG11bHRp
cGxpZXIpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBjYW5SZW5kZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0KiwgZmxvYXQgbXVsdGlwbGllcikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGVk
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGVycm9yT2NjdXJyZWQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIEludFNpemUgaW1hZ2VTaXplKGNvbnN0IFJlbmRlck9iamVjdCosIGZsb2F0IG11bHRp
cGxpZXIpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdmly
dHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25z
dCBJbnRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChSZW5kZXJPYmplY3QqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYp
IGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJh
dGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZUdlbmVyYXRlZEltYWdlLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDExICs1OCw2IEBAIEludFNpemUgU3R5bGVHZW5lcmF0ZWRJbWFnZTo6aW1hZ2VT
aXplKGMKICAgICByZXR1cm4gbV9jb250YWluZXJTaXplOwogfQogCi12b2lkIFN0eWxlR2VuZXJh
dGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewot
ICAgIG1fY29udGFpbmVyU2l6ZSA9IHNpemU7Ci19Ci0KIHZvaWQgU3R5bGVHZW5lcmF0ZWRJbWFn
ZTo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgbV9nZW5lcmF0b3It
PmFkZENsaWVudChyZW5kZXJlciwgSW50U2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuaAkocmV2aXNpb24g
OTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJ
bWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gIW1fZml4ZWRT
aXplOyB9CiAgICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7
IHJldHVybiAhbV9maXhlZFNpemU7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNlc0ltYWdlQ29udGFp
bmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZpeGVkU2l6ZTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6
ZSYgY29udGFpbmVyU2l6ZSkgeyBtX2NvbnRhaW5lclNpemUgPSBjb250YWluZXJTaXplOyB9CiAg
ICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChSZW5kZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
bWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCShyZXZpc2lvbiA5
NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDE0ICs0OSwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlKCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBi
b29sIGNhblJlbmRlcihmbG9hdCAvKm11bHRpcGxpZXIqLykgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBjYW5SZW5kZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgZmxvYXQg
LyptdWx0aXBsaWVyKi8pIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNMb2FkZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGVycm9y
T2NjdXJyZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBp
bWFnZVNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgSW50U2l6ZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFJlbmRlck9i
amVjdCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCop
ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCos
IGNvbnN0IEludFNpemUmKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaAkocmV2aXNpb24gOTczNjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlt
YWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IElu
dFNpemUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0
IFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWRk
Q2xpZW50KFJlbmRlck9iamVjdCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQo
UmVuZGVyT2JqZWN0KikgeyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZShS
ZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyAr
MTc4LDcgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZQogICAgICAg
ICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihtX3Rhcmdl
dEltYWdlLmdldCgpLCByZW5kZXJlciwgY29udGVudFRyYW5zZm9ybWF0aW9uKTsKICAgICB9CiAK
LSAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlKGZpbHRlciwgbV90YXJnZXRJbWFnZSA/IG1fdGFy
Z2V0SW1hZ2UtPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSA6IG1fY2FjaGVkSW1hZ2UtPmlt
YWdlKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7CisgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0
ZShmaWx0ZXIsIG1fdGFyZ2V0SW1hZ2UgPyBtX3RhcmdldEltYWdlLT5jb3B5SW1hZ2UoQ29weUJh
Y2tpbmdTdG9yZSkgOiBtX2NhY2hlZEltYWdlLT5pbWFnZShyZW5kZXJlcigpKSwgcHJlc2VydmVB
c3BlY3RSYXRpbygpKTsKIH0KIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3Vy
Y2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA5NzM2MykKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNSwxMSArMjYsMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CisKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0ltYWdlLmgiCiAKICNpbmNsdWRlICJD
YWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbXB0
eUNsaWVudHMuaCIKICNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgogI2luY2x1ZGUgIkZpbGVJY29u
TG9hZGVyLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC00OSwxMSArNTIsNiBAQAogI2lu
Y2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogCi0vLyBNb3Zp
bmcgdGhpcyAjaW5jbHVkZSBhYm92ZSBGcmFtZUxvYWRlci5oIGNhdXNlcyB0aGUgV2luZG93cyBi
dWlsZCB0byBmYWlsIGR1ZSB0byB3YXJuaW5ncyBhYm91dAotLy8gYWxpZ25tZW50IGluIFRpbWVy
PEZyYW1lTG9hZGVyPi4gSXQgc2VlbXMgdGhhdCB0aGUgZGVmaW5pdGlvbiBvZiBFbXB0eUZyYW1l
TG9hZGVyQ2xpZW50IGlzIHdoYXQKLS8vIGNhdXNlcyB0aGlzIChyZW1vdmluZyB0aGF0IGRlZmlu
aXRpb24gZml4ZXMgdGhlIHdhcm5pbmdzKSwgYnV0IGl0IGlzbid0IGNsZWFyIHdoeS4KLSNpbmNs
dWRlICJFbXB0eUNsaWVudHMuaCIgLy8gTk9MSU5UCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgU1ZHSW1hZ2VDaHJvbWVDbGllbnQgOiBwdWJsaWMgRW1wdHlDaHJvbWVDbGllbnQgewpA
QCAtMTAxLDcgKzk5LDcgQEAgU1ZHSW1hZ2U6On5TVkdJbWFnZSgpCiAgICAgQVNTRVJUKCFtX2No
cm9tZUNsaWVudCB8fCAhbV9jaHJvbWVDbGllbnQtPmltYWdlKCkpOwogfQogCi12b2lkIFNWR0lt
YWdlOjpzZXRDb250YWluZXJTaXplKGNvbnN0IExheW91dFNpemUmIGNvbnRhaW5lclNpemUpCit2
b2lkIFNWR0ltYWdlOjpzZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNp
emUpCiB7CiAgICAgaWYgKGNvbnRhaW5lclNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gOTcz
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2RlZmluZSBTVkdJbWFnZV9oCiAKICNpZiBFTkFCTEUo
U1ZHKQotCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogCkBA
IC00NCwxMyArNDMsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R0ltYWdlKG9ic2VydmVyKSk7CiAgICAgfQogCisgICAgdmlydHVhbCBib29sIGlzU1ZHSW1hZ2Uo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB+U1ZHSW1h
Z2UoKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBMYXlvdXRTaXplJik7CiAg
ICAgdmlydHVhbCBib29sIHVzZXNDb250YWluZXJTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgYm9vbCBo
YXNSZWxhdGl2ZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGhhc1JlbGF0aXZlSGVp
Z2h0KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEt
MTAtMTMgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAg
ICAgUHJlcGFyZSBTVkdJbWFnZSBpbnRyaW5zaWMgc2l6ZSBuZWdvdGlhdGlvbjogSW50cm9kdWNl
IGFuIEludFNpemUgPC0+IFNWR0ltYWdlIGNhY2hlIGluIENhY2hlZEltYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQxNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkYXB0IHRvIFdlYkNvcmU6OkNh
Y2hlZEltYWdlIEFQSSBjaGFuZ2VzIChwYXNzIHJlbmRlcmVyIHRvIGltYWdlKCksIGlmIGF2YWls
YWJsZSkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFn
Q2xpZW50TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5k
V3JpdGVEcmFnSW1hZ2UpOgorICAgICAgICAoLVtXS1Bhc3RlYm9hcmRPd25lciBwYXN0ZWJvYXJk
OnByb3ZpZGVEYXRhRm9yVHlwZTpdKToKKyAgICAgICAgKC1bV0tQYXN0ZWJvYXJkT3duZXIgbmFt
ZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkQXREZXN0aW5hdGlvbjpdKToKKwogMjAxMS0xMC0xMiAg
Sm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFBhc3MgUGFy
c2VkIEFjY2VwdCBBdHRyaWJ1dGUgTUlNRSBUeXBlcyB0byBXZWJLaXQgQ2xpZW50cwpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVu
dE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6
OmRlY2xhcmVBbmRXcml0ZURyYWdJCiAKICAgICBOU1N0cmluZyAqZXh0ZW5zaW9uID0gQCIiOwog
ICAgIGlmIChpbWFnZSkgewotICAgICAgICBleHRlbnNpb24gPSBpbWFnZS0+aW1hZ2UoKS0+Zmls
ZW5hbWVFeHRlbnNpb24oKTsKKyAgICAgICAgZXh0ZW5zaW9uID0gaW1hZ2UtPmltYWdlKGNvcmVF
bGVtZW50LT5yZW5kZXJlcigpKS0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKICAgICAgICAgaWYgKCFb
ZXh0ZW5zaW9uIGxlbmd0aF0pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjUzLDcg
KzI1Myw3IEBAIC0gKHZvaWQpcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGUKIHsKICAg
ICBpZiAoW3R5cGUgaXNFcXVhbDpOU1RJRkZQYm9hcmRUeXBlXSkgewogICAgICAgICBpZiAoX2lt
YWdlKSB7Ci0gICAgICAgICAgICBpZiAoSW1hZ2UqIGltYWdlID0gX2ltYWdlLT5pbWFnZSgpKQor
ICAgICAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IF9pbWFnZS0+aW1hZ2UoMCkpCiAgICAgICAg
ICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRhICopaW1hZ2UtPmdldFRJRkZSZXBy
ZXNlbnRhdGlvbigpIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07CiAgICAgICAgICAgICBbc2Vs
ZiBjbGVhckltYWdlXTsKICAgICAgICAgfQpAQCAtMjg4LDcgKzI4OCw3IEBAIC0gKE5TQXJyYXkg
KiluYW1lc09mUHJvbWlzZWRGaWxlc0Ryb3BwZWQKICAgICAgICAgICAgIGRyYWdnaW5nSW1hZ2VV
UkwgPSBbcmVzcG9uc2UgVVJMXTsKICAgICAgICAgICAgIHdyYXBwZXIgPSBbW1tOU0ZpbGVXcmFw
cGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6ZGF0YV0gYXV0b3JlbGVhc2Vd
OwogICAgICAgICAgICAgTlNTdHJpbmcqIGZpbGVuYW1lID0gW3Jlc3BvbnNlIHN1Z2dlc3RlZEZp
bGVuYW1lXTsKLSAgICAgICAgICAgIE5TU3RyaW5nKiB0cnVlRXh0ZW5zaW9uKF9pbWFnZS0+aW1h
Z2UoKS0+ZmlsZW5hbWVFeHRlbnNpb24oKSk7CisgICAgICAgICAgICBOU1N0cmluZyogdHJ1ZUV4
dGVuc2lvbihfaW1hZ2UtPmltYWdlKDApLT5maWxlbmFtZUV4dGVuc2lvbigpKTsKICAgICAgICAg
ICAgIGlmICghbWF0Y2hlc0V4dGVuc2lvbk9yRXF1aXZhbGVudChmaWxlbmFtZSwgdHJ1ZUV4dGVu
c2lvbikpCiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBbW2ZpbGVuYW1lIHN0cmluZ0J5QXBw
ZW5kaW5nU3RyaW5nOkAiLiJdIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOnRydWVFeHRlbnNpb25d
OwogICAgICAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6ZmlsZW5hbWVdOwpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0xMC0xMyAg
Tmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KKworICAgICAgICBQcmVw
YXJlIFNWR0ltYWdlIGludHJpbnNpYyBzaXplIG5lZ290aWF0aW9uOiBJbnRyb2R1Y2UgYW4gSW50
U2l6ZSA8LT4gU1ZHSW1hZ2UgY2FjaGUgaW4gQ2FjaGVkSW1hZ2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NDE2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRhcHQgdG8gV2ViQ29yZTo6Q2FjaGVkSW1h
Z2UgQVBJIGNoYW5nZXMgKHBhc3MgcmVuZGVyZXIgdG8gaW1hZ2UoKSwgaWYgYXZhaWxhYmxlKS4K
KworICAgICAgICAqIE1pc2MvV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tOgorICAgICAgICAoLVtO
U1Bhc3RlYm9hcmQgX3dlYl9kZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2VGb3JFbGVtZW50OlVSTDp0
aXRsZTphcmNoaXZlOnNvdXJjZTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
OgorICAgICAgICAoLVtXZWJIVE1MVmlldyBwYXN0ZWJvYXJkOnByb3ZpZGVEYXRhRm9yVHlwZTpd
KToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbmFtZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkQXRE
ZXN0aW5hdGlvbjpdKToKKwogMjAxMS0xMC0xMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBFTkFCTEUoWEhUTUxNUCkgYW5kIGFzc29jaWF0ZWQgY29k
ZQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU1Bhc3RlYm9hcmRFeHRyYXMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU1Bhc3RlYm9hcmRFeHRy
YXMubW0JKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU1Bh
c3RlYm9hcmRFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3MCw3ICsyNzAsNyBAQCAtIChp
ZClfd2ViX2RlY2xhcmVBbmRXcml0ZURyYWdJbWFnZUZvckVsCiAgICAgaWYgKFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBjb3JlKGVsZW1lbnQpLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGlmIChy
ZW5kZXJlci0+aXNJbWFnZSgpKSB7CiAgICAgICAgICAgICBpZiAoQ2FjaGVkSW1hZ2UqIGltYWdl
ID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlciktPmNhY2hlZEltYWdlKCkpIHsKLSAgICAgICAgICAg
ICAgICBleHRlbnNpb24gPSBpbWFnZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKKyAg
ICAgICAgICAgICAgICBleHRlbnNpb24gPSBpbWFnZS0+aW1hZ2UocmVuZGVyZXIpLT5maWxlbmFt
ZUV4dGVuc2lvbigpOwogICAgICAgICAgICAgICAgIGlmICghW2V4dGVuc2lvbiBsZW5ndGhdKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gOTczNjMpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjQ2LDcgKzE2NDYsNyBAQCAtICh2b2lkKXBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBh
c3RlCiAgICAgICAgIFtwYXN0ZWJvYXJkIF93ZWJfd3JpdGVQcm9taXNlZFJURkRGcm9tQXJjaGl2
ZTphcmNoaXZlIGNvbnRhaW5zSW1hZ2U6W1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVj
dDpOU1RJRkZQYm9hcmRUeXBlXV07CiAgICAgICAgIFthcmNoaXZlIHJlbGVhc2VdOwogICAgIH0g
ZWxzZSBpZiAoW3R5cGUgaXNFcXVhbDpOU1RJRkZQYm9hcmRUeXBlXSAmJiBbc2VsZiBwcm9taXNl
ZERyYWdUSUZGRGF0YVNvdXJjZV0pIHsKLSAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IFtzZWxm
IHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlXS0+aW1hZ2UoKSkKKyAgICAgICAgaWYgKEltYWdl
KiBpbWFnZSA9IFtzZWxmIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlXS0+aW1hZ2UoMCkpCiAg
ICAgICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOihOU0RhdGEgKilpbWFnZS0+Z2V0VElGRlJl
cHJlc2VudGF0aW9uKCkgZm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlXTsKICAgICAgICAgW3NlbGYg
c2V0UHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U6MF07CiAgICAgfQpAQCAtMzYyOSw3ICszNjI5
LDcgQEAgLSAoTlNBcnJheSAqKW5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBlZAogICAgICAgICBk
cmFnZ2luZ0ltYWdlVVJMID0gW3Jlc3BvbnNlIFVSTF07CiAgICAgICAgIHdyYXBwZXIgPSBbW1tO
U0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6ZGF0YV0gYXV0
b3JlbGVhc2VdOwogICAgICAgICBOU1N0cmluZyogZmlsZW5hbWUgPSBbcmVzcG9uc2Ugc3VnZ2Vz
dGVkRmlsZW5hbWVdOwotICAgICAgICBOU1N0cmluZyogdHJ1ZUV4dGVuc2lvbih0aWZmUmVzb3Vy
Y2UtPmltYWdlKCktPmZpbGVuYW1lRXh0ZW5zaW9uKCkpOworICAgICAgICBOU1N0cmluZyogdHJ1
ZUV4dGVuc2lvbih0aWZmUmVzb3VyY2UtPmltYWdlKDApLT5maWxlbmFtZUV4dGVuc2lvbigpKTsK
ICAgICAgICAgaWYgKCFtYXRjaGVzRXh0ZW5zaW9uT3JFcXVpdmFsZW50KGZpbGVuYW1lLCB0cnVl
RXh0ZW5zaW9uKSkKICAgICAgICAgICAgIGZpbGVuYW1lID0gW1tmaWxlbmFtZSBzdHJpbmdCeUFw
cGVuZGluZ1N0cmluZzpAIi4iXSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzp0cnVlRXh0ZW5zaW9u
XTsKICAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6ZmlsZW5hbWVdOwo=
</data>
<flag name="commit-queue"
          id="108455"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110834</attachid>
            <date>2011-10-13 05:37:57 -0700</date>
            <delta_ts>2011-10-13 08:08:20 -0700</delta_ts>
            <desc>Next try - v2</desc>
            <filename>SVGImage-splitoff-redesign-v2.diff</filename>
            <type>text/plain</type>
            <size>121681</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMxIEBACisyMDExLTEwLTEzICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFByZXBhcmUgU1ZH
SW1hZ2UgaW50cmluc2ljIHNpemUgbmVnb3RpYXRpb246IEludHJvZHVjZSBhbiBJbnRTaXplIDwt
PiBTVkdJbWFnZSBjYWNoZSBpbiBDYWNoZWRJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk0MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBJbWFnZUJ5U2l6ZUNhY2hlIG91dCBvZiBD
U1NJbWFnZUdlbmVyYXRvclZhbHVlIGFzIENhY2hlZEltYWdlIHdhbnRzIHRvIHVzZSB0aGUgc2Ft
ZSB0eXBlIG9mIGNhY2hlIGZvciBpdHMgcHVycG9zZXMuCisgICAgICAgIFdoZW4gaW50cm9kdWNp
bmcgdGhlIFNWR0ltYWdlIGludHJpbnNpYyBzaXplIG5lZ290aWF0aW9uIHRoZSBjb250YWluZXIg
c2l6ZSBvZiBhbiBTVkdJbWFnZSBpcyBkZXBlbmRhbnQgb24gdGhlIHBsYWNlIHdoZXJlCisgICAg
ICAgIGl0IGdldHMgZW1iZWRkZWQgKGVnIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzIG9mIGhvc3Qg
ZG9jdW1lbnRzIDxpbWc+IGZvcmNlIGEgY2VydGFpbiBzaXplKS4KKworICAgICAgICBDdXJyZW50
bHkgQ2FjaGVkSW1hZ2Ugb25seSBjb250YWlucyBhIHNpbmdsZSBSZWZQdHI8SW1hZ2U+LCB3aGlj
aCBpdCBjb25zdHJ1Y3RzIG91dCBvZiB0aGUgZGVjb2RlZCBkYXRhLgorICAgICAgICBNdWx0aXBs
ZSBSZW5kZXJPYmplY3RzIHNoYXJlIHRoZSBzYW1lIENhY2hlZEltYWdlcywgd2hlbiBlbWJlZGRp
bmcgZWcuIGEgU1ZHIGRvY3VtZW50IGluIGEgPGh0bWw6aW1nPiBvciB1c2luZyBpdCBpbiBhIGJh
Y2tncm91bmQtaW1hZ2UgZm9yIGEgPGRpdj4uCisgICAgICAgIENvbnNpZGVyIHRoZSBjYXNlIHdo
ZXJlIHR3byBSZW5kZXJPYmplY3RzIHVzZSB0aGUgc2FtZSBDYWNoZWRJbWFnZSwgZWFjaCB3aXRo
IGEgZGlmZmVyZW50IGNvbnRhaW5lciBzaXplICgyMDB4MTAwIHZzIDEwMHgyMDApIGFuZCB0aGUg
ZW1iZWRkZWQKKyAgICAgICAgZG9jdW1lbnQgY29udGFpbnMgYSB2aWV3Qm94IGFuZCBzb21lIGFy
Yml0YXJ5IHByZXNlcnZlQXNwZWN0UmF0aW8gc2V0dGluZ3MuIFRvIGhvbm91ciB0aGVzZSB3ZSBo
YXZlIHRvIHJlbGF5b3V0IHRoZSBkb2N1bWVudCB3aXRoIHRoZSBkZXNpcmVkCisgICAgICAgIHNp
emUgKHBlcmNlbnR1YWwgdW5pdCByZXNvbHZpbmcgZXRjLCBhbGwgZGVwZW5kIG9uIHRoZSBSZW5k
ZXJTVkdSb290cyBzaXplKS4KKworICAgICAgICBXaXRoIHRoZSBjdXJyZW50IGRlc2lnbiB0aGlz
IGlzIGhhcmQgdG8gcmVhbGl6ZSwgdy9vIHJlcXVyaW5nIHRvIHJlbGF5b3V0IHRoZSBlbWJlZGRl
ZCBkb2N1bWVudCBmb3IgZWFjaCBlbWJlZGRlciB0aGF0IHVzZXMgYW4gU1ZHSW1hZ2UuCisgICAg
ICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNhY2hlIHJpZ2h0IHdpdGhpbiBDYWNoZWRJbWFn
ZSwgd2hpY2ggbWFuYWdlcyBhIG1hcCBvZiBpbWFnZXMgdG8gY2VydGFpbiBzaXplcywgYnkgdXRp
bGl6aW5nIHRoZSBuZXcgSW1hZ2VCeVNpemVDYWNoZS4KKworICAgICAgICBDYWNoZWRJbWFnZTo6
aW1hZ2UoKSBub3cgdGFrZXMgYSBSZW5kZXJPYmplY3QqIHBhcmFtZXRlciwgd2hpY2ggaXQgdXNl
cyB0byBsb29rIHVwIHRoZSBsYXN0IHNldCBpbWFnZSBjb250YWluZXIgc2l6ZSBmb3IgYSByZW5k
ZXJlci4KKyAgICAgICAgVXNpbmcgdGhhdCBzaXplIGl0IHF1ZXJpZXMgdGhlIGNhY2hlIHdoZXRo
ZXIgaXQgYWxyZWFkeSBoYXMgYW4gU1ZHSW1hZ2UgZm9yIHRoYXQgc2l6ZSwgaWYgbm90IGl0IGdl
dHMgY3JlYXRlZCwgYnkgY3JlYXRpbmcgYSB3aG9sZQorICAgICAgICBuZXcgaW5zdGFuY2Ugb2Yg
U1ZHSW1hZ2UsIGZpbGxpbmcgaXQgd2l0aCB0aGUgYWxyZWFkeSBkZWNvZGVkIGRhdGEsIGFuZCBw
YXNzaW5nIG9uIGEgZml4ZWQgaW1hZ2UgY29udGFpbmVyIHNpemUsIHdoaWNoIG92ZXJyaWRlcyB0
aGUKKyAgICAgICAgc2l6ZSB0aGF0IFJlbmRlclNWR1Jvb3QgcmVwb3J0cywgd2hlbiBjb21wdXRl
UmVwbGFjZWRMb2dpY2FsV2lkdGgvSGVpZ2h0IGlzIGNhbGxlZCBhbmQgdGh1cyBsYXlpbmcgb3V0
IHRoZSBkb2N1bWVudCBhdCB0aGUgZGVzaXJlZCBzaXplLgorICAgICAgICBUaGlzIGltYWdlIGlz
IHRoZW4gcHV0IGluIHRoZSBjYWNoZSBmb3IgZnVydGhlciByZXVzYWJpbGl0eS4KKworICAgICAg
ICBMaWtld2lzZSBDYWNoZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKCkgbm93IHRha2Vz
IGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0ZXIgYW5kIHN0b3JlcyB0aGF0IGluIHRoZSBjYWNoZSB3
aXRoIGFuIGFzc29jaWF0ZWQgY29udGFpbmVyIHNpemUuCisgICAgICAgIEl0IHJlcXVpcmVzIHRv
IHRvdWNoIHNldmVyYWwgZmlsZXMgd2hpY2ggdXNlIENhY2hlZEltYWdlIHRocm91Z2hvdXQgV2Vi
Q29yZS9XZWJLaXQvV2ViS2l0Mi4KKworICAgICAgICBUaGUgYWN0dWFsIGNhY2hlIGlzIG5vdCB5
ZXQgdHVybmVkIG9uIHlldCwgc28gdGhpcyBpcyBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZSBzbyBm
YXIsIGFzIGl0IG5lZWRzIHNvbWUgb3RoZXIgY2hhbmdlcyB0byBTVkdJbWFnZSwKKyAgICAgICAg
d2hpY2ggd2lsbCBjb21lIHdpdGggdGhlIG1hc3RlciBwYXRjaCBpbiBidWcgNDcxNTYuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIHlldCwgYXMgdGhlIG5ldyBjYWNoZSBpc24ndCB0dXJuZWQgb24g
eWV0LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCBsb2FkZXIvY2FjaGUvSW1hZ2VC
eVNpemVDYWNoZS4qIHRvIGJ1aWxkLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IERp
dHRvLgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBDaGFuZ2UgQ2FjaGVkSW1hZ2U6OmltYWdl
KCkgc2lnbmF0dXJlIGV4cG9ydCBkZWZpbml0aW9uLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTog
QWRkIGxvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLiogdG8gYnVpbGQuCisgICAgICAgICog
V2ViQ29yZS5wcm86IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
IERpdHRvLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKTogQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZSgpIG5vdyB0YWtlcyBh
IFJlbmRlck9iamVjdCogcGFyYW1ldGVyLgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1t
OiBEaXR0byAoZm9yIENhY2hlZEltYWdlOjppbWFnZSgpKS4KKyAgICAgICAgKC1bRE9NRWxlbWVu
dCBpbWFnZV0pOgorICAgICAgICAoLVtET01FbGVtZW50IF9pbWFnZVRJRkZSZXByZXNlbnRhdGlv
bl0pOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcDoKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6OnZhcmlhbnRGcm9tT2JqZWN0KTogRGl0
dG8gKGZvciBDYWNoZWRJbWFnZTo6aW1hZ2UoKSkuCisgICAgICAgICogY3NzL0NTU0NhbnZhc1Zh
bHVlLmNwcDogcy9tX2NsaWVudHMvY2xpZW50cygpLywgd2hpY2ggbm93IGxpdmUgaW4gdGhlIElt
YWdlQnlTaXplQ2FjaGUgaW5zdGVhZCBvZiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FudmFzVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5j
cHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1ZTo6aW1hZ2UpOgor
ICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcDogTW92ZSB0aGUgc2l6ZXMv
Y2xpZW50cy9pbWFnZXMgY2FjaGUgaW50byBhIG5ldyBJbWFnZUJ5U2l6ZUNhY2hlIGNsYXNzLCB0
byBtYWtlIGl0IHVzYWJsZSBmb3IgQ2FjaGVkSW1hZ2UgYXMgd2VsbC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudCk6IEFkYXB0IHRvIG1vdmUuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbnQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpwdXRJ
bWFnZSk6IERpdHRvLgorICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpjbGllbnRzKTogRm9yd2Fy
ZGVkIHRvIHRoZSBJbWFnZUJ5U2l6ZUNhY2hlLgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlQnV0
dG9uQ29udHJvbGxlci5jcHA6IAorICAgICAgICAoV2ViQ29yZTo6aXNEZWxldGFibGVFbGVtZW50
KTogQ2FjaGVkSW1hZ2U6OmNhblJlbmRlcigpIG5vdyB0YWtlcyBhIFJlbmRlck9iamVjdCogcGFy
YW1ldGVyLgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aCk6IENhY2hlZEltYWdlOjppbWFnZVNpemUo
KSBub3cgdGFrZXMgYSBSZW5kZXJPYmplY3QqIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbWFnZUVsZW1lbnQ6OmhlaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudDo6bmF0dXJhbFdpZHRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW1hZ2VFbGVtZW50OjpuYXR1cmFsSGVpZ2h0KTogRGl0dG8uCisgICAgICAgICogaHRtbC9J
bWFnZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnRQYXJzZXI6
OmZpbmlzaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6c2NhbGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OnJlc2l6ZUltYWdlVG9G
aXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OmltYWdlVXBkYXRl
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzdG9yZUltYWdl
U2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6aW1hZ2VGaXRz
SW5XaW5kb3cpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6Ondv
dWxkVGFpbnRPcmlnaW4pOiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBub3cgdGFrZXMgYSBSZW5kZXJP
YmplY3QqIHBhcmFtZXRlci4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNPcmlnaW5DbGVhbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6c2l6ZSk6IERpdHRvIChmb3IgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6
ZSgpKS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0lt
YWdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmNyZWF0ZVBhdHRlcm4pOiBEaXR0by4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkSW1hZ2UuY3BwOiBBZGQgY3VycmVudGx5IF9kaXNhYmxlZF8gY2FjaGUgZm9yIFNWR0ltYWdl
cy4gVGhlIGludHJpbnNpYyBzaXplIG5lZ290aWF0aW9uIHdpbGwgbmVlZCB0byB1c2UgbXVsdGlw
bGUgU1ZHSW1hZ2VzCisgICAgICAgIGZvciBlYWNoIHJlcXVlc3RlZCBzaXplIChlcXVhbCB0byB0
aGUgc2l6ZSBvZiB0aGUgZW1iZWRkaW5nIHBsYWNlIGZvciB0aGUgaW1hZ2UpIC0gbWFrZSBpdCBw
b3NzaWJsZSB0byBjYWNoZSB0aGVzZSBTVkdJbWFnZXMsIGFuZCBtYWludGFpbiBhIGNhY2hlCisg
ICAgICAgIGZvciB0aGVtLiBUaGUgaGFzaCBjb2RlIGlzIGEgMToxIHJlZmFjdG9yaW5nIGZyb20g
dGhlIGFscmVhZHkgcHJlc2VudCBjb2RlIGluIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUsIG5vdyBu
YW1lZCAnSW1hZ2VCeVNpemVDYWNoZScuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6
bG9va3VwSW1hZ2VGb3JTaXplKTogTG9va3MgdXAgYW4gSW1hZ2UgZnJvbSB0aGUgY2FjaGUgZm9y
IGEgZ2l2ZW4gSW50U2l6ZS4gQ3VycmVudGx5IHR1cm5lZCBvZmYuCisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRJbWFnZTo6bG9va3VwSW1hZ2VGb3JSZW5kZXJlcik6IExvb2tzIHVwIGFuIEltYWdl
IGZyb20gdGhlIGNhY2hlIGZvciBhIGdpdmVuIHJlbmRlcmVyLiBDdXJyZW50bHkgdHVybmVkIG9m
Zi4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpsb29rdXBPckNyZWF0ZUltYWdlRm9y
UmVuZGVyZXIpOiBMb29rcyB1cCBhbiBJbWFnZSBmcm9tIHRoZSBjYWNoZSBvciBjcmVhdGVzIGEg
bmV3IFNWR0ltYWdlIGZvciBhIGdpdmVuIHNpemUgYW5kIGNhY2hlcyBpdCwgaWYgcG9zc2libGUu
IEN1cnJlbnRseSB0dXJuZWQgb2ZmLgorICAgICAgICBBbGwgZm9sbG93aW5nIGNoYW5nZXMgc2hh
cmUgdGhpczogRG9uJ3Qgb3BlcmF0ZSBvbiBtX2ltYWdlIGRpcmVjdGx5LCBpbnN0ZWFkIGFsd2F5
cyBsb29rIHVwIG9uZSBmcm9tIHRoZSBjYWNoZSBmb3IgYSBnaXZlbiBzaXplIG9yIHJlbmRlcmVy
IC0gaWYgdGhhdCdzIG5vdCBwcmVzZW50IGZhbGxiYWNrIHRvIG1faW1hZ2UuCisgICAgICAgIFdo
ZW4gYW4gU1ZHSW1hZ2UgaXMgZmlyc3QgY3JlYXRlZCBieSBDYWNoZWRJbWFnZTo6Y3JlYXRlSW1h
Z2UoKSBhbmQgc3RvcmVkIGluIG1faW1hZ2UsIHRoZSBjYWNoZSByZW1haW5zIGVtcHR5LgorCisg
ICAgICAgIElmIGVnLiA8aW1nIHdpZHRoPSIzMCIgaGVpZ2h0PSI3MCIgc3JjPSJmb28uc3ZnIj4g
aXMgdXNlZCB3aGljaCBpbXBsaWVzIGEgY29udGFpbmVyIHNpemUgb2YgMzB4NzAgYSBuZXcgU1ZH
SW1hZ2UgaXMgY3JlYXRlZCB3aXRoIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIGEgMzB4
NzAgY29udGFpbmVyIHNpemUKKyAgICAgICAgd2hpY2ggaXMgaW1tZWRpYXRlbHkgcGFzc2VkIHRv
IHRoZSBTVkdJbWFnZSBhZnRlciBpdHMgY3JlYXRpb24uIFRoaXMgU1ZHSW1hZ2UgaXMgcHV0IGlu
IHRoZSBJbWFnZUJ5U2l6ZUNhY2hlIGFzc29jaWF0ZWQgd2l0aCBhIGNvbnRhaW5lciBzaXplIG9m
IDMweDcwLgorICAgICAgICBXZSBub3cgaGF2ZSB0d28gU1ZHSW1hZ2Ugb2JqZWN0cyBwcmVzZW50
LCBvbmUgbGl2aW5nIGluIENhY2hlZEltYWdlOjptX2ltYWdlLCBjcmVhdGVkIGJ5IGNyZWF0ZUlt
YWdlKCkgZHVyaW5nIGRhdGEgZGVjb2RpbmcsIGFuZCBvbmUgbGl2aW5nIGluIHRoZSBJbWFnZUJ5
U2l6ZUNhY2hlCisgICAgICAgIGNyZWF0ZWQgYnkgbG9va3VwT3JDcmVhdGVJbWFnZUZvclJlbmRl
cmVyKCkgYXNzb2NpYXRlZCB3aXRoIHRoZSAzMHg3MCBjb250YWluZXIuIFRoZSBmaXJzdCBTVkdJ
bWFnZTo6c2l6ZSgpIHdpbGwgcmV0dXJuIGEgdmFsdWUgYXMgZGVmaW5lZCBpbiB0aGUgcmVmZXJl
bmNlZCBmb28uc3ZnLAorICAgICAgICB3aGVyZWFzIHRoZSBTVkdJbWFnZTo6c2l6ZSgpIGNhbGwg
b2YgdGhlIG5ldyBTVkdJbWFnZSBsaXZpbmcgaW4gdGhlIGNhY2hlIHJlcG9ydHMgMzB4NzAgYW5k
IHJlbmRlcnMgYWNjb3JkaW5nIHRvIHRoYXQuCisKKyAgICAgICAgV2hlbmV2ZXIgYW55IG1ldGhv
ZCBvZiBDYWNoZWRJbWFnZSBpcyBjYWxsZWQgd2l0aCBhIFJlbmRlck9iamVjdCogb3IgSW50U2l6
ZSwgd2UgY2FuJ3QganVzdCBvcGVyYXRlIG9uIG1faW1hZ2UgYW55bW9yZSBidXQgaW5zdGVhZCBo
YXZlIHRvIGxvb2t1cCB0aGUgcmlnaHQKKyAgICAgICAgaW1hZ2VzIGZvciBhIGNlcnRhaW4gcmVu
ZGVyZXIvc2l6ZSBmcm9tIHRoZSBjYWNoZSBhbmQgb3BlcmF0ZSBvbiB0aGVzZS4gV2hlbiBjYWxs
aW5nIGVnLiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSB3aXRoIGEgbnVsbCByZW5kZXJlciwgbV9pbWFn
ZSBpcyByZXR1cm5lZC4KKyAgICAgICAgV2hlbiBwYXNzaW5nIHdpdGggYSB2YWxpZCByZW5kZXJl
ciBvbmx5IGNhY2hlIGxvb2t1cHMgYXJlIGRvbmUgaWYgdGhlIG1faW1hZ2UgaXMgYWN0dWFsbHkg
YSBTVkdJbWFnZSwgb3RoZXJ3aGlzZSBsb29rdXBJbWFnZUZvclNpemUvUmVuZGVyZXIgd2lsbCBq
dXN0IHJldHVybiB0aGUgbV9pbWFnZS4KKyAgICAgICAgVGhlcmUgaXMgbm8gbG9naWNhbCBjaGFu
Z2UgaW5kdWNlZCBmb3Igbm9uLVNWR0ltYWdlIGRlcml2ZWQgaW1hZ2VzLgorCisgICAgICAgIENh
Y2hlZEltYWdlOjppbWFnZSgpIG9mIGNvdXJzZSBuZWVkcyBhIFJlbmRlck9iamVjdCogcGFyYW1l
dGVyIG5vdywgdG8gaWRlbnRpZnkgd2hpY2ggb2YgdGhlIGltYWdlcyBmcm9tIHRoZSBjYWNoZSB0
byB1c2UsIGlmIHRoZSB1bmRlcmx5aW5nIGltYWdlIGlzIGEgU1ZHSW1hZ2UuCisgICAgICAgIEx1
Y2tpbHkgdGhlc2UgaW5mb3JtYXRpb24gYXJlIGFscmVhZHkgcHJlc2VudCBpbiBTdHlsZUNhY2hl
ZEltYWdlL1N0eWxlSW1hZ2UgJiBmcmllbmRzIGFuZCBvbmx5IG5lZWQgdG8gYmUgYWRkZWQgZm9y
IHNvbWUgYWRkaXRpb25hbCBtZXRob2RzLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6
OmltYWdlKTogQ2FsbCBsb29rdXBPckNyZWF0ZUltYWdlRm9yUmVuZGVyZXIoKSBpbnN0ZWFkIG9m
IHJldHVybmluZyBtX2ltYWdlLCBpZiBpdCdzIG5vdCBudWxsLiBJdHMgYSBuby1vcCBmb3Igbm9u
IFNWR0ltYWdlIGRlcml2ZWQgb2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdl
OjpzZXRJbWFnZUNvbnRhaW5lclNpemUpOiBGb3Igbm9uLVNWR0ltYWdlcywganVzdCBwYXNzIG9u
IHRoZSBzaXplIHRvIHRoZSBtX2ltYWdlLiBGb3IgU1ZHSW1hZ2VzLCBhc3NvY2lhdGUgdGhlIHBh
c3NlZCBpbiByZW5kZXJlciB3aXRoIHRoZSBJbnRTaXplIGluIHRoZSBjYWNoZS4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRvZXMg
Tk9UIGNyZWF0ZSB0aGUgU1ZHSW1hZ2UgeWV0LCB0aGlzIGlzIGRlbGF5ZWQgdW50aWwgaW1hZ2Uo
KSBpcyBjYWxsZWQgdGhlIG5leHQgdGltZSwgZm9yIGEgZ2l2ZW4gcmVuZGVyZXIgdGhhdCBhY3R1
YWxseSB3YW50cyB0aGlzIHNpemUuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1h
Z2VTaXplKTogRG9uJ3Qgb3BlcmF0ZSBvbiBtX2ltYWdlLCBhc2sgbG9va3VwSW1hZ2VGb3JSZW5k
ZXJlcigpIHdpdGggdGhlIGluY29taW5nIHJlbmRlcmVyLgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkSW1hZ2U6OmltYWdlUmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1h
Z2U6OmNsZWFyKTogRm9yY2UgY2xlYXJpbmcgdGhlIG1fc3ZnSW1hZ2VDYWNoZS4KKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZEltYWdlOjpkYXRhKTogQ2FsbCBtX2ltYWdlLT5zaXplKCkgaW5zdGVh
ZCBvZiBpbWFnZVNpemUoKSwgdG8gYXZvaWQgaGF2aW5nIHRvIHBhc3MgYSBudWxsIHJlbmRlcmVy
IHRvIGltYWdlU2l6ZSgpIGFzIGhlcmUgbm8gcmVuZGVyZXIgaXMgYXZhaWxhYmxlIHlldC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOiBEb24ndCBk
ZXN0cm95IGRlY29kZWQgZGF0YSBmb3IgU1ZHIGltYWdlcywgYXMgbV9kYXRhIG5lZWRzIHRvIGJl
IGFjY2Vzc2FibGUgYXQgYW55IHRpbWUgdG8gY29uc3RydWN0IGEgY2xvbmVkIFNWR0ltYWdlLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGZ1
dHVyZSB3ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZSBpZiB3ZSBtYWtlIHN1cmUgbXVsdGlwbGUg
U1ZHSW1hZ2VzIHNoYXJlIHRoZSBzYW1lIHRyZWVzLCBidXQgdGhhdCdzIGZvciBhIGZvbGxvdy11
cCBwYXRjaC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpkZWNvZGVkU2l6ZUNoYW5n
ZWQpOiBEb24ndCBvcGVyYXRlIG9uIG1faW1hZ2UsIGFzayBsb29rdXBJbWFnZUZvclJlbmRlcmVy
KCkgd2l0aCB0aGUgaW5jb21pbmcgcmVuZGVyZXIuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJ
bWFnZTo6ZGlkRHJhdyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnNo
b3VsZFBhdXNlQW5pbWF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFn
ZTo6YW5pbWF0aW9uQWR2YW5jZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZElt
YWdlOjpjaGFuZ2VkSW5SZWN0KTogRGl0dG8uIChlZy4gd2hlbiBsZWF2aW5nIG91dCB0aGlzIGNo
YW5nZSBhbmltYXRlZCBTVkcgaW1hZ2VzIHdvdWxkbid0IHVwZGF0ZSBhbnltb3JlLCBhcyB0aGUg
YW5pbWF0aW9uIGRpZG4ndCBoYXBwZW4gb24gbV9pbWFnZSEpCisgICAgICAgICogbG9hZGVyL2Nh
Y2hlL0NhY2hlZEltYWdlLmg6IGltYWdlKCkvY2FuUmVuZGVyKCkvc2V0SW1hZ2VDb250YWluZXJT
aXplKCkvaW1hZ2VTaXplKCkvaW1hZ2VSZWN0KCkgbm93IGFsbCB0YWtlIGEgUmVuZGVyT2JqZWN0
KiBwYXJhbWV0ZXIgdG8gaWRlbnRpZml5IHRoZSBjdXJyZW50IHVzZXIgb2YgdGhlIGltYWdlLgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmNhblJlbmRlcik6IFBhc3Mgb24gdGhlIGlu
Y29taW5nIHJlbmRlcmVyIHRvIGltYWdlU2l6ZSgpLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9J
bWFnZUJ5U2l6ZUNhY2hlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZS5jcHAsIHRvIHByZXNlcnZlIGhpc3RvcnkgZm9yIHRoZSBvcmlnaW5hbCBjYWNo
ZSBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCeVNpemVDYWNoZTo6SW1hZ2VCeVNpemVD
YWNoZSk6IFN0cmFpZ2h0IGNvcHkgZnJvbSBDU1NJbWFnZUdlbmVyYXRvclZhbHVlLCByZW5hbWVk
IHRvIEltYWdlQnlTaXplQ2FjaGUsIHJlbW92aW5nIGFsbCBidXQgdGhlIGNhY2hlIHJlbGV2YW50
IGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ5U2l6ZUNhY2hlOjphZGRDbGllbnQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnlTaXplQ2FjaGU6OnJlbW92ZUNsaWVudCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCeVNpemVDYWNoZTo6Z2V0SW1hZ2UpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnlTaXplQ2FjaGU6OnB1dEltYWdlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ5U2l6ZUNhY2hlOjpjbGVhcik6IE5ldyBmdW5j
dGlvbiwgdGhhdCBjbGVhcnMgdGhlIGNhY2hlLCBpbnRyb2R1Y2VkIGZvciB0aGUgbmVlZHMgb2Yg
Q2FjaGVkSW1hZ2UuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ5U2l6ZUNhY2hlOjppbWFnZUZv
clNpemUpOiBOZXcgZnVuY3Rpb24gdG8gcXVlcnkgYW4gSW1hZ2UqIGZvciBhIGdpdmVuIEludFNp
emUsIGludHJvZHVjZWQgZm9yIHRoZSBuZWVkcyBvZiBDYWNoZWRJbWFnZS4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnlTaXplQ2FjaGU6OnNpemVGb3JDbGllbnQpOiBOZXcgZnVuY3Rpb24gdG8g
cXVlcnkgYW4gSW50U2l6ZSBmb3IgYSBnaXZlbiByZW5kZXJlci4KKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvSW1hZ2VCeVNpemVDYWNoZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2Nzcy9DU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmguCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ5U2l6ZUNhY2hlOjpj
bGllbnRzKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmdldEltYWdlKTogQ2FjaGVkSW1hZ2U6OmltYWdlKCkgbm93IHRha2VzIGEgUmVuZGVy
T2JqZWN0KiBwYXJhbWV0ZXIuCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOiBEaXR0by4KKyAgICAg
ICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJp
YWxpemVyOjpzZXJpYWxpemVGcmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNl
cmlhbGl6ZXI6OmFkZEltYWdlVG9SZXNvdXJjZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKTogRGl0
dG8uCisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZENocm9taXVtOjpjcmVhdGVEcmFnSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OndyaXRlSW1hZ2VUb0RhdGFPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bh
c3RlYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0
ZUltYWdlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjppc1NWR0ltYWdlKTogQWRkIGJvb2xlYW4gaGVscGVyIHRv
IGlkZW50aWZ5IFNWR0ltYWdlcywganVzdCBsaWtlIGlzQml0bWFwSW1hZ2UoKS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZEd0azo6Y3JlYXRlRHJhZ0ltYWdlKTogQ2FjaGVkSW1hZ2U6OmltYWdlKCkgbm93IHRha2Vz
IGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRH
dGs6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9QYXN0ZWJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6Ondy
aXRlSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkTWFjOjpkcmFnTlNJbWFnZSk6IERpdHRvLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAoZmlsZVdy
YXBwZXJGb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9h
cmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKTogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkUXQ6OmNyZWF0ZURyYWdJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkUXQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjp3cml0ZUltYWdlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0Ns
aXBib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHbG9iYWxJbWFnZUZpbGVE
ZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFdpbjo6Y3JlYXRlRHJhZ0lt
YWdlKTogRGl0dG8uIAorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJbWFnZVRvRGF0YU9iamVjdCk6
IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS93aW5jZS9QYXN0ZWJvYXJkV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6d3JpdGVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmltYWdlKTogRGl0
dG8uCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRGaWxsTGF5ZXIpOiBDYWNoZWRJbWFnZTo6Y2FuUmVu
ZGVyKCkgbm93IHRha2VzIGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25zKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludE1hc2spOiBEaXR0by4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFp
bnRNYXNrSW1hZ2VzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlcGFp
bnRMYXllclJlY3RzRm9ySW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVGaWxsVGlsZVNpemUpOiBEaXR0byAoZm9yIENh
Y2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoKSkuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllY2VJbWFnZSk6IERpdHRvLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bWFnZTo6aW1hZ2VTaXplRm9yRXJyb3IpOiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBub3cgdGFrZXMg
YSBSZW5kZXJPYmplY3QqIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
OjpzZXRJbWFnZVNpemVGb3JBbHRUZXh0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckltYWdlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VSZXNv
dXJjZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKTogUGFzcyBvbiBtX3JlbmRlcmVyIHRvIENhY2hl
ZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVySW1hZ2VSZXNvdXJjZS5oOiBSZW1vdmUgY29uc3RuZXNzIGZyb20gc2V0SW1hZ2VDb250YWlu
ZXJTaXplLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VSZXNvdXJjZTo6aW1hZ2UpOiBQ
YXNzIG9uIG1fcmVuZGVyZXIgdG8gQ2FjaGVkSW1hZ2U6OmltYWdlKCkuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJJbWFnZVJlc291cmNlOjppbWFnZVNpemUpOiBQYXNzIG9uIG1fcmVuZGVyZXIg
dG8gQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZSgpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJ
bWFnZVJlc291cmNlU3R5bGVJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VS
ZXNvdXJjZVN0eWxlSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZSk6IFJlbW92ZSBjb25zdG5l
c3MsIHBhc3Mgb24gbV9yZW5kZXJlciB0byBTdHlsZUltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNp
emUoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6aXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZSk6IENhY2hlZEltYWdlOjppbWFnZSgpIG5vdyB0YWtlcyBhIFJlbmRlck9iamVjdCogcGFyYW1l
dGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbWFnZUNv
bnRlbnRzKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOiBDYWNoZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKCkgbm93IHRh
a2VzIGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0ZXIuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptdXN0UmVwYWludEZpbGxMYXllcnMpOiBD
YWNoZWRJbWFnZTo6Y2FuUmVuZGVyKCkgbm93IHRha2VzIGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0
ZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmJvcmRlckltYWdlSXNMb2FkZWRB
bmRDYW5CZVJlbmRlcmVkKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxl
Q2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6Y2Fu
UmVuZGVyKTogUGFzcyBvbiBpbmNvbWluZyByZW5kZXJlciB0byBDYWNoZWRJbWFnZTo6Y2FuUmVu
ZGVyKCkuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjppbWFnZVNpemUpOiBQ
YXNzIG9uIGluY29taW5nIHJlbmRlcmVyIHRvIENhY2hlZEltYWdlOjppbWFnZVNpemUoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZSk6
IFBhc3Mgb24gaW5jb21pbmcgcmVuZGVyZXIgdG8gQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFp
bmVyU2l6ZSgpLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6YWRkQ2xpZW50
KTogUmVtb3ZlIHVubmVlZGVkIHJldHVybiBzdGF0bWVudCBpbiB2b2lkIG1ldGhvZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OnJlbW92ZUNsaWVudCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2UpOiBQYXNzIG9uIGluY29taW5n
IHJlbmRlcmVyIHRvIENhY2hlZEltYWdlOjppbWFnZSgpLgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9TdHlsZUNhY2hlZEltYWdlLmg6IEFkZCBSZW5kZXJPYmplY3QqIHBhcmFtZXRlciB0byBj
YW5SZW5kZXIoKS9zZXRJbWFnZUNvbnRhaW5lclNpemUoKS4gaW1hZ2UoKSBhbHJlYWR5IGhhcyBv
bmUsIHRoYXQgd2FzIHVudXNlZCBzbyBmYXIuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0
eWxlR2VuZXJhdGVkSW1hZ2UuY3BwOiBJbmxpbmVkIHNldEltYWdlQ29udGFpbmVyU2l6ZS4KKyAg
ICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oOiAKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlR2VuZXJhdGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZSk6IEFk
ZCBSZW5kZXJPYmplY3QqIHBhcmFtZXRlci4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5
bGVJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6Y2FuUmVuZGVyKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUp
OiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGVuZGluZ0ltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNp
emUpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKTogQ2FjaGVkSW1hZ2U6OmltYWdl
KCkgbm93IHRha2VzIGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0ZXIuCisgICAgICAgICogc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcDogQ2xlYW51cCBmaWxlLCB0aGUgaW5jbHVkZSBoYWNrIHNlZW1z
IG5vdCBuZWVkZWQgYW55bW9yZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpzZXRDb250
YWluZXJTaXplKTogcy9MYXlvdXRTaXplL0ludFNpemUvIHRvIG1hdGNoIHRoZSBjb2RlIGluIHBs
YXRmb3JtLy4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6aXNTVkdJbWFnZSk6IFJldHVybiB0cnVlLgorCiAyMDEx
LTEwLTEzICBNaWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogW0Nocm9taXVtXSBBZGQgYW4gYWJpbGl0eSB0byBsb29rIHVwIGFu
ZCBleHBsb3JlIGFuIG9iamVjdCBmcm9tIGEgaGVhcCBwcm9maWxlLgpJbmRleDogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTk1NCw2ICs5NTQsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAKICAgICBsb2FkZXIv
Y2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNo
ZWV0LmNwcAorICAgIGxvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLmNwcAogICAgIGxvYWRl
ci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKIAogICAgIGxvYWRlci9pY29uL0ljb25Db250cm9sbGVy
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NzM2MykK
KysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAg
LTIxMjEsNiArMjEyMSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQuaCBcCiAJU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvSW1hZ2VCeVNpemVDYWNoZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9N
ZW1vcnlDYWNoZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVQb2xpY3ku
aCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmggXApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTExMDQsNyArMTEwNCw3IEBAIF9fWk5LN1dlYkNv
cmUxMFNjcm9sbFZpZXcxNndpbmRvd1RvQ29udGUKIF9fWk5LN1dlYkNvcmUxMFNjcm9sbFZpZXcx
NmNvbnRlbnRzVG9XaW5kb3dFUktOU184SW50UG9pbnRFCiBfX1pOSzdXZWJDb3JlMTBTY3JvbGxW
aWV3MTZ3aW5kb3dUb0NvbnRlbnRzRVJLTlNfOEludFBvaW50RQogX19aTks3V2ViQ29yZTEwU2Ny
b2xsVmlldzE4dmlzaWJsZUNvbnRlbnRSZWN0RWIKLV9fWk5LN1dlYkNvcmUxMUNhY2hlZEltYWdl
NWltYWdlRXYKK19fWk43V2ViQ29yZTExQ2FjaGVkSW1hZ2U1aW1hZ2VFUEtOU18xMlJlbmRlck9i
amVjdEUKIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTBpc0NvbXBsZXRlRXYKIF9fWk5LN1dl
YkNvcmUxMUZyYW1lTG9hZGVyMTRjYW5jZWxsZWRFcnJvckVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0
RQogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGZyYW1lSGFzTG9hZGVkRXYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCSh3b3JraW5nIGNvcHkpCkBAIC01OTcsNiArNTk3LDcgQEAKICAgICAgICAgICAgICdsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUv
Q2FjaGVkU3R5bGVTaGVldENsaWVudC5oJywKKyAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvSW1h
Z2VCeVNpemVDYWNoZS5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
aCcsCiAgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkNvbnRyb2xsZXIuaCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgnLApAQCAtMjg0OCw2ICsyODQ5LDcgQEAK
ICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmgnLAogICAgICAgICAgICAg
J2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCcsCiAgICAgICAgICAgICAnbG9h
ZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaCcsCisgICAgICAgICAgICAnbG9hZGVyL2Nh
Y2hlL0ltYWdlQnlTaXplQ2FjaGUuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvTWVt
b3J5Q2FjaGUuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2YvUmVzb3VyY2VMb2FkZXJDRk5l
dC5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXJDaHJvbWl1bS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDk3MzYzKQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTg4MCw2ICs4
ODAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3Bw
IFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcCBcCiAgICAgbG9hZGVyL2NhY2hl
L0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwIFwKKyAgICBsb2FkZXIvY2FjaGUvSW1hZ2VCeVNpemVD
YWNoZS5jcHAgXAogICAgIGxvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIFwKICAg
ICBsb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgXAogICAgIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgXApAQCAtMTg3Myw2ICsxODc0LDcgQEAg
SEVBREVSUyArPSBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oIFwK
ICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmggXAogICAgIGxvYWRlci9jYWNoZS9DYWNo
ZWRYU0xTdHlsZVNoZWV0LmggXAorICAgIGxvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLmgg
XAogICAgIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmln
aW5BY2Nlc3NDb250cm9sLmggXAogICAgIGxvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3Vs
dENhY2hlLmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2ODQ1LDYgKzI2ODQ1LDE0IEBA
CiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxs
b2FkZXJcY2FjaGVcSW1hZ2VCeVNpemVDYWNoZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcSW1hZ2VCeVNpemVD
YWNoZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cbG9hZGVyXGNhY2hlXE1lbW9yeUNhY2hlLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDk3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDggQEAKIAkJ
MDgyM0QxNTkxMjdBRDZBQzAwMEVCQzk1IC8qIFNWR0FuaW1hdGVkSW50ZWdlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgyM0QxNTgxMjdBRDZBQzAw
MEVCQzk1IC8qIFNWR0FuaW1hdGVkSW50ZWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4MjUwOTM5MTI4QkQ0RDgwMEUyRUQ4RSAvKiBTVkdB
bmltYXRlZFRyYW5zZm9ybUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4MjUwOTM4MTI4QkQ0RDgwMEUyRUQ4RSAvKiBTVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwODJERTQyRDEyOTI2MjE2MDBEOTIzREYgLyogU1ZHUGF0aFNlZ1dpdGhDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODJERTQyQzEy
OTI2MjE2MDBEOTIzREYgLyogU1ZHUGF0aFNlZ1dpdGhDb250ZXh0LmggKi87IH07CisJCTA4M0E5
ODlBMTQ0NDRGRUEwMDlBRDkyQiAvKiBJbWFnZUJ5U2l6ZUNhY2hlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0E5ODk4MTQ0NDRGRUEwMDlBRDky
QiAvKiBJbWFnZUJ5U2l6ZUNhY2hlLmNwcCAqLzsgfTsKKwkJMDgzQTk4OUIxNDQ0NEZFQTAwOUFE
OTJCIC8qIEltYWdlQnlTaXplQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4M0E5ODk5MTQ0NDRGRUEwMDlBRDkyQiAvKiBJbWFnZUJ5U2l6ZUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MDgzREFFQTYwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RBRUEy
MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAgKi87IH07
CiAJCTA4M0RBRUE3MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFF
QTMwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggKi87IH07
CiAJCTA4M0RBRUE4MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgz
REFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAg
Ki87IH07CkBAIC03MTExLDYgKzcxMTMsOCBAQAogCQkwODIzRDE1ODEyN0FENkFDMDAwRUJDOTUg
LyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0FuaW1hdGVkSW50ZWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODI1
MDkzODEyOEJENEQ4MDBFMkVEOEUgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODJERTQyQzEyOTI2MjE2MDBEOTIzREYgLyog
U1ZHUGF0aFNlZ1dpdGhDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR1BhdGhTZWdXaXRoQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
ODNBOTg5ODE0NDQ0RkVBMDA5QUQ5MkIgLyogSW1hZ2VCeVNpemVDYWNoZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ5U2l6ZUNhY2hlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDgzQTk4OTkxNDQ0NEZFQTAwOUFEOTJCIC8qIEltYWdl
QnlTaXplQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCeVNp
emVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZC
MDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyog
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTg0MTgsNiArMTg0MjIsOCBAQAogCQlBOEQyQjI1MjEyODdBNTYwMDBBRjREREEgLyogY2FjaGUg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTA4M0E5ODk4
MTQ0NDRGRUEwMDlBRDkyQiAvKiBJbWFnZUJ5U2l6ZUNhY2hlLmNwcCAqLywKKwkJCQkwODNBOTg5
OTE0NDQ0RkVBMDA5QUQ5MkIgLyogSW1hZ2VCeVNpemVDYWNoZS5oICovLAogCQkJCUJDQjE2QzAw
MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCAqLywKIAkJCQlCQ0Ix
NkMwMTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkQ1NTU3R5bGVTaGVldC5oICovLAogCQkJCUJD
NjRCNEM5MENCNDI5NUQwMDVGMkI2MiAvKiBDYWNoZWRGb250LmNwcCAqLywKQEAgLTI0NjA2LDYg
KzI0NjEyLDcgQEAKIAkJCQkzMTA2MDM3NTE0MzI4MTlDMDBBQkY0QkEgLyogSlNXZWJLaXRDU1NG
aWx0ZXJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwNjAzNzkxNDMyODFDRDAwQUJGNEJB
IC8qIERPTVdlYktpdENTU0ZpbHRlclZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTA2MDM3
QjE0MzI4MUNEMDBBQkY0QkEgLyogRE9NV2ViS2l0Q1NTRmlsdGVyVmFsdWVJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMDgzQTk4OUIxNDQ0NEZFQTAwOUFEOTJCIC8qIEltYWdlQnlTaXpl
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QUNCMjEyMTQzRTcxMjgwMDZCQ0E1RiAvKiBB
Y2Nlc3NpYmlsaXR5TW9ja09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0yNzQ1NSw2ICsyNzQ2Miw3IEBA
CiAJCQkJMzEwNjAzNkYxNDMyN0QyRTAwQUJGNEJBIC8qIFdlYktpdENTU0ZpbHRlclZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDYwMzc0MTQzMjgxOUMwMEFCRjRCQSAvKiBKU1dlYktp
dENTU0ZpbHRlclZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDYwMzdBMTQzMjgxQ0Qw
MEFCRjRCQSAvKiBET01XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTA4M0E5ODlBMTQ0NDRGRUEwMDlBRDkyQiAvKiBJbWFnZUJ5U2l6ZUNhY2hlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTI5QUNCMjE0MTQzRTc0OTgwMDZCQ0E1RiAvKiBBY2Nlc3NpYmlsaXR5TW9j
a09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjA5MDg3RjE0NDRGREIyMDAwMjg5MTcg
LyogU2Nyb2xsYmFyVGhlbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
MTMsNyArMTkxMyw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWIK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciByZW5kZXJlZCBpbWFn
ZSB3YXMgc3RyZXRjaGVkIGZyb20gb25lLWRpbWVuc2lvbmFsIGZpbGUgaW1hZ2UKICAgICAgICAg
ICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgIExheW91dFNp
emUgaW1hZ2VTaXplID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShpbWFnZS0+dmll
dygpLT56b29tRmFjdG9yKCkpOworICAgICAgICAgICAgICAgIExheW91dFNpemUgaW1hZ2VTaXpl
ID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShtX3JlbmRlcmVyLCBpbWFnZS0+dmll
dygpLT56b29tRmFjdG9yKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZVNpemUuaGVp
Z2h0KCkgPD0gMSB8fCBpbWFnZVNpemUud2lkdGgoKSA8PSAxOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gOTcz
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDM5LDcgKzQzOSw3IEBAIC0gKE5TSW1hZ2UqKWltYWdlCiAgICAgV2ViQ29yZTo6Q2Fj
aGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmVuZGVySW1hZ2Uq
PihyZW5kZXJlciktPmNhY2hlZEltYWdlKCk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCBjYWNo
ZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVy
biBjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+Z2V0TlNJbWFnZSgpOworICAgIHJldHVybiBjYWNoZWRJ
bWFnZS0+aW1hZ2UocmVuZGVyZXIpLT5nZXROU0ltYWdlKCk7CiB9CiAKIEBlbmQKQEAgLTQ2NCw3
ICs0NjQsNyBAQCAtIChOU0RhdGEgKilfaW1hZ2VUSUZGUmVwcmVzZW50YXRpb24KICAgICBXZWJD
b3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpSZW5k
ZXJJbWFnZSo+KHJlbmRlcmVyKS0+Y2FjaGVkSW1hZ2UoKTsKICAgICBpZiAoIWNhY2hlZEltYWdl
IHx8IGNhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgcmV0dXJuIChOU0RhdGEgKiljYWNoZWRJbWFnZS0+aW1hZ2UoKS0+Z2V0VElGRlJlcHJlc2Vu
dGF0aW9uKCk7CisgICAgcmV0dXJuIChOU0RhdGEgKiljYWNoZWRJbWFnZS0+aW1hZ2UocmVuZGVy
ZXIpLT5nZXRUSUZGUmVwcmVzZW50YXRpb24oKTsKIH0KIAogLSAoTlNVUkwgKilfZ2V0VVJMQXR0
cmlidXRlOihOU1N0cmluZyAqKW5hbWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9x
dF9waXhtYXBydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgs
NyArMzc4LDcgQEAgUVZhcmlhbnQgUXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYgogICAg
ICAgICBpZiAoIWNhY2hlZEltYWdlKQogICAgICAgICAgICAgZ290byByZXR1cm5FbXB0eVZhcmlh
bnQ7CiAKLSAgICAgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CisgICAg
ICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZShpbWFnZUVsZW1lbnQtPnJlbmRl
cmVyKCkpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgZ290byByZXR1cm5FbXB0
eVZhcmlhbnQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAkocmV2
aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NywxNiArNDcsMTYgQEAgU3RyaW5nIENTU0NhbnZhc1ZhbHVlOjpj
c3NUZXh0KCkgY29uc3QKIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENh
bnZhc0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIGNoYW5nZWRSZWN0KQogewogICAgIEludFJl
Y3QgaW1hZ2VDaGFuZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdCk7Ci0gICAg
UmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NsaWVudHMu
ZW5kKCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9y
IGN1cnIgPSBtX2NsaWVudHMuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAg
Y3Vyci0+Zmlyc3QtPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRo
aXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKKyAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsKKyAgICBmb3IgKFJlbmRlck9iamVj
dFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IGNsaWVudHMoKS5iZWdpbigpOyBj
dXJyICE9IGVuZDsgKytjdXJyKQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1
cnItPmZpcnN0KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhp
cyksICZpbWFnZUNoYW5nZVJlY3QpOwogfQogCiB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNS
ZXNpemVkKEhUTUxDYW52YXNFbGVtZW50KikKIHsKLSAgICBSZW5kZXJPYmplY3RTaXplQ291bnRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKLSAgICBmb3IgKFJlbmRl
ck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IG1fY2xpZW50cy5iZWdp
bigpOyBjdXJyICE9IGVuZDsgKytjdXJyKQotICAgICAgICBjdXJyLT5maXJzdC0+aW1hZ2VDaGFu
Z2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOworICAgIFJlbmRlck9iamVj
dFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOworICAg
IGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xp
ZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5kOyArK2N1cnIpCisgICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmlyc3QpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3Jh
cHBlZEltYWdlUHRyPih0aGlzKSk7CiB9CiAKIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0Rl
c3Ryb3llZChIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudCkKQEAgLTg1LDcgKzg1LDcgQEAgSFRN
TENhbnZhc0VsZW1lbnQqIENTU0NhbnZhc1ZhbHVlOjplbGVtZQogCiBQYXNzUmVmUHRyPEltYWdl
PiBDU1NDYW52YXNWYWx1ZTo6aW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50
U2l6ZSYgLypzaXplKi8pCiB7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhyZW5kZXJl
cikpOworICAgIEFTU0VSVChjbGllbnRzKCkuY29udGFpbnMocmVuZGVyZXIpKTsKICAgICBIVE1M
Q2FudmFzRWxlbWVudCogZWx0ID0gZWxlbWVudChyZW5kZXJlci0+ZG9jdW1lbnQoKSk7CiAgICAg
aWYgKCFlbHQgfHwgIWVsdC0+YnVmZmVyKCkpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gQ1NTR3JhZGllbnRWYWx1ZTo6aW1hZwog
CiAgICAgYm9vbCBjYWNoZWFibGUgPSBpc0NhY2hlYWJsZSgpOwogICAgIGlmIChjYWNoZWFibGUp
IHsKLSAgICAgICAgaWYgKCFtX2NsaWVudHMuY29udGFpbnMocmVuZGVyZXIpKQorICAgICAgICBp
ZiAoIWNsaWVudHMoKS5jb250YWlucyhyZW5kZXJlcikpCiAgICAgICAgICAgICByZXR1cm4gMDsK
IAogICAgICAgICAvLyBOZWVkIHRvIGxvb2sgdXAgb3VyIHNpemUuICBDcmVhdGUgYSBzdHJpbmcg
b2Ygd2lkdGgqaGVpZ2h0IHRvIHVzZSBhcyBhIGhhc2gga2V5LgpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAkocmV2aXNpb24gOTczNjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDYyICs0NywyNSBAQCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjp+Q1NTSW1h
Z2VHZW5lcmF0CiB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIHJlZigpOwotICAg
IGlmICghc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fc2l6ZXMuYWRkKHNpemUpOwotICAgIAot
ICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuZmlu
ZChyZW5kZXJlcik7Ci0gICAgaWYgKGl0ID09IG1fY2xpZW50cy5lbmQoKSkKLSAgICAgICAgbV9j
bGllbnRzLmFkZChyZW5kZXJlciwgU2l6ZUNvdW50UGFpcihzaXplLCAxKSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIFNpemVDb3VudFBhaXImIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAg
ICsrc2l6ZUNvdW50LnNlY29uZDsKLSAgICB9CisgICAgbV9pbWFnZUNhY2hlLmFkZENsaWVudChy
ZW5kZXJlciwgc2l6ZSk7CiB9CiAKIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3Zl
Q2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgUmVuZGVyT2JqZWN0U2l6ZUNv
dW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKLSAgICBBU1NF
UlQoaXQgIT0gbV9jbGllbnRzLmVuZCgpKTsKLQotICAgIFNpemVDb3VudFBhaXImIHNpemVDb3Vu
dCA9IGl0LT5zZWNvbmQ7Ci0gICAgSW50U2l6ZSBzaXplID0gc2l6ZUNvdW50LmZpcnN0OwotICAg
IGlmICghc2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9zaXplcy5yZW1vdmUoc2l6ZSk7Ci0g
ICAgICAgIGlmICghbV9zaXplcy5jb250YWlucyhzaXplKSkKLSAgICAgICAgICAgIG1faW1hZ2Vz
LnJlbW92ZShzaXplKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCEtLXNpemVDb3VudC5zZWNvbmQp
Ci0gICAgICAgIG1fY2xpZW50cy5yZW1vdmUocmVuZGVyZXIpOwotCisgICAgbV9pbWFnZUNhY2hl
LnJlbW92ZUNsaWVudChyZW5kZXJlcik7CiAgICAgZGVyZWYoKTsKIH0KIAogSW1hZ2UqIENTU0lt
YWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IEludFNpemUmIHNpemUpCiB7Ci0gICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjppdGVyYXRv
ciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9jbGll
bnRzLmVuZCgpKTsKLQotICAgIFNpemVDb3VudFBhaXImIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7
Ci0gICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZUNvdW50LmZpcnN0OwotICAgIGlmIChvbGRTaXpl
ICE9IHNpemUpIHsKLSAgICAgICAgLy8gSWYgcmVuZGVyZXIgaXMgdGhlIG9ubHkgY2xpZW50LCBt
YWtlIHN1cmUgd2UgZG9uJ3QgZGVsZXRlIHRoaXMuCi0gICAgICAgIFJlZlB0cjxDU1NJbWFnZUdl
bmVyYXRvclZhbHVlPiBwcm90ZWN0KHRoaXMpOwotICAgICAgICByZW1vdmVDbGllbnQocmVuZGVy
ZXIpOwotICAgICAgICBhZGRDbGllbnQocmVuZGVyZXIsIHNpemUpOwotICAgIH0KLSAgICAKLSAg
ICAvLyBEb24ndCBnZW5lcmF0ZSBhbiBpbWFnZSBmb3IgZW1wdHkgc2l6ZXMuCi0gICAgaWYgKHNp
emUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICAvLyBMb29rIHVwIHRo
ZSBpbWFnZSBpbiBvdXIgY2FjaGUuCi0gICAgcmV0dXJuIG1faW1hZ2VzLmdldChzaXplKS5nZXQo
KTsKKyAgICAvLyBJZiByZW5kZXJlciBpcyB0aGUgb25seSBjbGllbnQsIG1ha2Ugc3VyZSB3ZSBk
b24ndCBkZWxldGUgdGhpcywgaWYgdGhlIHNpemUgY2hhbmdlcyAoYXMgdGhpcyB3aWxsIHJlc3Vs
dCBpbiBhZGRDbGllbnQvcmVtb3ZlQ2xpZW50IGNhbGxzKS4KKyAgICBSZWZQdHI8Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZT4gcHJvdGVjdCh0aGlzKTsKKyAgICByZXR1cm4gbV9pbWFnZUNhY2hlLmdl
dEltYWdlKHJlbmRlcmVyLCBzaXplKTsKIH0KIAogdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OjpwdXRJbWFnZShjb25zdCBJbnRTaXplJiBzaXplLCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkK
IHsKLSAgICBtX2ltYWdlcy5hZGQoc2l6ZSwgaW1hZ2UpOworICAgIG1faW1hZ2VDYWNoZS5wdXRJ
bWFnZShzaXplLCBpbWFnZSk7CiB9CiAKIFN0eWxlR2VuZXJhdGVkSW1hZ2UqIENTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWU6OmdlbmVyYXRlZEltYWdlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
MCArMjcsNyBAQAogI2RlZmluZSBDU1NJbWFnZUdlbmVyYXRvclZhbHVlX2gKIAogI2luY2x1ZGUg
IkNTU1ZhbHVlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZUhhc2guaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlICJJbWFnZUJ5U2l6ZUNhY2hlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNTYsMTQgKzUzLDkgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIEltYWdlKiBn
ZXRJbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CiAgICAgdm9pZCBwdXRJbWFn
ZShjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxJbWFnZT4pOworICAgIGNvbnN0IFJlbmRlck9i
amVjdFNpemVDb3VudE1hcCYgY2xpZW50cygpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VDYWNoZS5j
bGllbnRzKCk7IH0KIAotICAgIHR5cGVkZWYgcGFpcjxJbnRTaXplLCBpbnQ+IFNpemVDb3VudFBh
aXI7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlck9iamVjdCosIFNpemVDb3VudFBhaXI+IFJl
bmRlck9iamVjdFNpemVDb3VudE1hcDsKLQotICAgIEhhc2hDb3VudGVkU2V0PEludFNpemU+IG1f
c2l6ZXM7IC8vIEEgY291bnQgb2YgaG93IG1hbnkgdGltZXMgYSBnaXZlbiBpbWFnZSBzaXplIGlz
IGluIHVzZS4KLSAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXAgbV9jbGllbnRzOyAvLyBBIG1h
cCBmcm9tIFJlbmRlck9iamVjdHMgKHdpdGggZW50cnkgY291bnQpIHRvIGltYWdlIHNpemVzLgot
ICAgIEhhc2hNYXA8SW50U2l6ZSwgUmVmUHRyPEltYWdlPiA+IG1faW1hZ2VzOyAvLyBBIGNhY2hl
IG9mIEltYWdlIG9iamVjdHMgYnkgaW1hZ2Ugc2l6ZS4KLSAgICAKKyAgICBJbWFnZUJ5U2l6ZUNh
Y2hlIG1faW1hZ2VDYWNoZTsKICAgICBSZWZQdHI8U3R5bGVHZW5lcmF0ZWRJbWFnZT4gbV9pbWFn
ZTsKICAgICBib29sIG1fYWNjZXNzZWRJbWFnZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5NzM2MykK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgYm9vbCBpc0RlbGV0YWJsZUVs
ZW1lbnQoY29uc3QgTm9kCiAgICAgICAgIC8vIEFsbG93IGJsb2NrcyB0aGF0IGhhdmUgYmFja2dy
b3VuZCBpbWFnZXMKICAgICAgICAgaWYgKHN0eWxlLT5oYXNCYWNrZ3JvdW5kSW1hZ2UoKSkgewog
ICAgICAgICAgICAgZm9yIChjb25zdCBGaWxsTGF5ZXIqIGJhY2tncm91bmQgPSBzdHlsZS0+YmFj
a2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kOyBiYWNrZ3JvdW5kID0gYmFja2dyb3VuZC0+bmV4
dCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmQtPmltYWdlKCkgJiYgYmFja2dy
b3VuZC0+aW1hZ2UoKS0+Y2FuUmVuZGVyKDEpKQorICAgICAgICAgICAgICAgIGlmIChiYWNrZ3Jv
dW5kLT5pbWFnZSgpICYmIGJhY2tncm91bmQtPmltYWdlKCktPmNhblJlbmRlcihyZW5kZXJlciwg
MSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDcgKzI1Nyw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50
Ojp3aWR0aChib29sIGlnbm9yZVAKIAogICAgICAgICAvLyBpZiB0aGUgaW1hZ2UgaXMgYXZhaWxh
YmxlLCB1c2UgaXRzIHdpZHRoCiAgICAgICAgIGlmIChtX2ltYWdlTG9hZGVyLmltYWdlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUoMS4wZiku
d2lkdGgoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdl
U2l6ZShyZW5kZXJlcigpLCAxLjBmKS53aWR0aCgpOwogICAgIH0KIAogICAgIGlmIChpZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMpCkBAIC0yODAsNyArMjgwLDcgQEAgaW50IEhUTUxJbWFnZUVsZW1l
bnQ6OmhlaWdodChib29sIGlnbm9yZQogCiAgICAgICAgIC8vIGlmIHRoZSBpbWFnZSBpcyBhdmFp
bGFibGUsIHVzZSBpdHMgaGVpZ2h0CiAgICAgICAgIGlmIChtX2ltYWdlTG9hZGVyLmltYWdlKCkp
Ci0gICAgICAgICAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUoMS4w
ZikuaGVpZ2h0KCk7CisgICAgICAgICAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5p
bWFnZVNpemUocmVuZGVyZXIoKSwgMS4wZikuaGVpZ2h0KCk7CiAgICAgfQogCiAgICAgaWYgKGln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cykKQEAgLTI5Nyw3ICsyOTcsNyBAQCBpbnQgSFRNTEltYWdl
RWxlbWVudDo6bmF0dXJhbFdpZHRoKCkgY29uCiAgICAgaWYgKCFtX2ltYWdlTG9hZGVyLmltYWdl
KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2Uo
KS0+aW1hZ2VTaXplKDEuMGYpLndpZHRoKCk7CisgICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1h
Z2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyKCksIDEuMGYpLndpZHRoKCk7CiB9CiAKIGludCBIVE1M
SW1hZ2VFbGVtZW50OjpuYXR1cmFsSGVpZ2h0KCkgY29uc3QKQEAgLTMwNSw3ICszMDUsNyBAQCBp
bnQgSFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbEhlaWdodCgpIGNvCiAgICAgaWYgKCFtX2ltYWdl
TG9hZGVyLmltYWdlKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIG1faW1hZ2VM
b2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKDEuMGYpLmhlaWdodCgpOworICAgIHJldHVybiBtX2lt
YWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlcigpLCAxLjBmKS5oZWlnaHQoKTsK
IH0KIAogYm9vbCBIVE1MSW1hZ2VFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0
dHIpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHJldmlz
aW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgSW1hZ2VEb2N1bWVudFBhcnNlcjo6
ZmluaXNoKCkKIAogICAgICAgICAvLyBSZXBvcnQgdGhlIG5hdHVyYWwgaW1hZ2Ugc2l6ZSBpbiB0
aGUgcGFnZSB0aXRsZSwgcmVnYXJkbGVzcyBvZiB6b29tCiAgICAgICAgIC8vIGxldmVsLgotICAg
ICAgICBMYXlvdXRTaXplIHNpemUgPSBjYWNoZWRJbWFnZS0+aW1hZ2VTaXplKDEuMGYpOworICAg
ICAgICBMYXlvdXRTaXplIHNpemUgPSBjYWNoZWRJbWFnZS0+aW1hZ2VTaXplKGRvY3VtZW50KCkt
PmltYWdlRWxlbWVudCgpLT5yZW5kZXJlcigpLCAxLjBmKTsKICAgICAgICAgaWYgKHNpemUud2lk
dGgoKSkgewogICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdGl0bGUsIHdlIHVzZSB0aGUgZGVj
b2RlZCBmaWxlbmFtZSBvZiB0aGUgcmVzb3VyY2UsIGZhbGxpbmcKICAgICAgICAgICAgIC8vIGJh
Y2sgb24gdGhlIChkZWNvZGVkKSBob3N0bmFtZSBpZiB0aGVyZSBpcyBubyBwYXRoLgpAQCAtMjMz
LDggKzIzMyw4IEBAIGZsb2F0IEltYWdlRG9jdW1lbnQ6OnNjYWxlKCkgY29uc3QKICAgICBpZiAo
IXZpZXcpCiAgICAgICAgIHJldHVybiAxOwogCi0gICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBt
X2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKHRo
aXMpKTsKLSAgICBMYXlvdXRTaXplIHdpbmRvd1NpemUgPSBJbnRTaXplKHZpZXctPndpZHRoKCks
IHZpZXctPmhlaWdodCgpKTsKKyAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IG1faW1hZ2VFbGVt
ZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUobV9pbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCks
IHBhZ2Vab29tRmFjdG9yKHRoaXMpKTsKKyAgICBMYXlvdXRTaXplIHdpbmRvd1NpemUgPSBMYXlv
dXRTaXplKHZpZXctPndpZHRoKCksIHZpZXctPmhlaWdodCgpKTsKICAgICAKICAgICBmbG9hdCB3
aWR0aFNjYWxlID0gKGZsb2F0KXdpbmRvd1NpemUud2lkdGgoKSAvIGltYWdlU2l6ZS53aWR0aCgp
OwogICAgIGZsb2F0IGhlaWdodFNjYWxlID0gKGZsb2F0KXdpbmRvd1NpemUuaGVpZ2h0KCkgLyBp
bWFnZVNpemUuaGVpZ2h0KCk7CkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBJbWFnZURvY3VtZW50
OjpyZXNpemVJbWFnZVRvRml0KCkKICAgICBpZiAoIW1faW1hZ2VFbGVtZW50KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNo
ZWRJbWFnZSgpLT5pbWFnZVNpemUocGFnZVpvb21GYWN0b3IodGhpcykpOworICAgIExheW91dFNp
emUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZSht
X2ltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSwgcGFnZVpvb21GYWN0b3IodGhpcykpOwogCiAgICAg
ZmxvYXQgc2NhbGUgPSB0aGlzLT5zY2FsZSgpOwogICAgIG1faW1hZ2VFbGVtZW50LT5zZXRXaWR0
aChzdGF0aWNfY2FzdDxpbnQ+KGltYWdlU2l6ZS53aWR0aCgpICogc2NhbGUpKTsKQEAgLTI4Nyw3
ICsyODcsNyBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OmltYWdlVXBkYXRlZCgpCiAgICAgaWYgKG1f
aW1hZ2VTaXplSXNLbm93bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1hZ2VFbGVt
ZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUocGFnZVpvb21GYWN0b3IodGhpcykpLmlzRW1w
dHkoKSkKKyAgICBpZiAobV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZSht
X2ltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSwgcGFnZVpvb21GYWN0b3IodGhpcykpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG1faW1hZ2VTaXplSXNLbm93biA9IHRydWU7
CkBAIC0zMDMsOCArMzAzLDkgQEAgdm9pZCBJbWFnZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VTaXpl
KCkKICAgICBpZiAoIW1faW1hZ2VFbGVtZW50IHx8ICFtX2ltYWdlU2l6ZUlzS25vd24pCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBtX2ltYWdlRWxlbWVudC0+c2V0V2lkdGgobV9pbWFnZUVs
ZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSkud2lk
dGgoKSk7Ci0gICAgbV9pbWFnZUVsZW1lbnQtPnNldEhlaWdodChtX2ltYWdlRWxlbWVudC0+Y2Fj
aGVkSW1hZ2UoKS0+aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKHRoaXMpKS5oZWlnaHQoKSk7Cisg
ICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+
aW1hZ2VTaXplKG1faW1hZ2VFbGVtZW50LT5yZW5kZXJlcigpLCBwYWdlWm9vbUZhY3Rvcih0aGlz
KSk7CisgICAgbV9pbWFnZUVsZW1lbnQtPnNldFdpZHRoKGltYWdlU2l6ZS53aWR0aCgpKTsKKyAg
ICBtX2ltYWdlRWxlbWVudC0+c2V0SGVpZ2h0KGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAgICAgCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBpZiAoaW1hZ2VGaXRzSW5XaW5kb3coKSkKQEAgLTMy
NCw3ICszMjUsNyBAQCBib29sIEltYWdlRG9jdW1lbnQ6OmltYWdlRml0c0luV2luZG93KCkgCiAg
ICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIExheW91dFNpemUgaW1h
Z2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShwYWdlWm9v
bUZhY3Rvcih0aGlzKSk7CisgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlRWxlbWVu
dC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKG1faW1hZ2VFbGVtZW50LT5yZW5kZXJlcigpLCBw
YWdlWm9vbUZhY3Rvcih0aGlzKSk7CiAgICAgTGF5b3V0U2l6ZSB3aW5kb3dTaXplID0gTGF5b3V0
U2l6ZSh2aWV3LT53aWR0aCgpLCB2aWV3LT5oZWlnaHQoKSk7CiAgICAgCiAgICAgcmV0dXJuIGlt
YWdlU2l6ZS53aWR0aCgpIDw9IHdpbmRvd1NpemUud2lkdGgoKSAmJiBpbWFnZVNpemUuaGVpZ2h0
KCkgPD0gd2luZG93U2l6ZS5oZWlnaHQoKTsgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlz
aW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsOSArODMsOSBAQCB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZGVmYXVsdEZvbnQg
PSAiMTBweCBzYW5zLXNlcmlmIjsKIAotc3RhdGljIGJvb2wgaXNPcmlnaW5DbGVhbihDYWNoZWRJ
bWFnZSogY2FjaGVkSW1hZ2UsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKK3N0YXRp
YyBib29sIGlzT3JpZ2luQ2xlYW4oQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlLCBIVE1MSW1hZ2VF
bGVtZW50KiBpbWFnZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogewotICAgIGlm
ICghY2FjaGVkSW1hZ2UtPmltYWdlKCktPmhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkpCisgICAg
aWYgKCFjYWNoZWRJbWFnZS0+aW1hZ2UoaW1hZ2UtPnJlbmRlcmVyKCkpLT5oYXNTaW5nbGVTZWN1
cml0eU9yaWdpbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGNhY2hlZEltYWdl
LT5wYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2soc2VjdXJpdHlPcmlnaW4pKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTEyMjAsNyArMTIyMCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjphcHBseVNoYWQKIHN0YXRpYyBMYXlvdXRTaXplIHNpemUoSFRNTEltYWdlRWxlbWVudCog
aW1hZ2UpCiB7CiAgICAgaWYgKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5jYWNo
ZWRJbWFnZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2UtPmltYWdlU2l6ZSgxLjBmKTsg
Ly8gRklYTUU6IE5vdCBzdXJlIGFib3V0IHRoaXMuCisgICAgICAgIHJldHVybiBjYWNoZWRJbWFn
ZS0+aW1hZ2VTaXplKGltYWdlLT5yZW5kZXJlcigpLCAxLjBmKTsgLy8gRklYTUU6IE5vdCBzdXJl
IGFib3V0IHRoaXMuCiAgICAgcmV0dXJuIEludFNpemUoKTsKIH0KIApAQCAtMTMyMCw3ICsxMzIw
LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogCiAgICAgY2hl
Y2tPcmlnaW4oaW1hZ2UpOwogCi0gICAgYy0+ZHJhd0ltYWdlKGNhY2hlZEltYWdlLT5pbWFnZSgp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBub3JtYWxpemVkRHN0UmVjdCwgbm9ybWFsaXplZFNyY1Jl
Y3QsIG9wKTsKKyAgICBjLT5kcmF3SW1hZ2UoY2FjaGVkSW1hZ2UtPmltYWdlKGltYWdlLT5yZW5k
ZXJlcigpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgbm9ybWFsaXplZERzdFJlY3QsIG5vcm1hbGl6
ZWRTcmNSZWN0LCBvcCk7CiAgICAgZGlkRHJhdyhub3JtYWxpemVkRHN0UmVjdCk7CiB9CiAKQEAg
LTE2MzEsMTEgKzE2MzEsMTEgQEAgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5k
ZXJpbgogICAgICAgICByZXR1cm4gMDsKIAogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9
IGltYWdlLT5jYWNoZWRJbWFnZSgpOwotICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWltYWdlLT5j
YWNoZWRJbWFnZSgpLT5pbWFnZSgpKQorICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWltYWdlLT5j
YWNoZWRJbWFnZSgpLT5pbWFnZShpbWFnZS0+cmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybiBD
YW52YXNQYXR0ZXJuOjpjcmVhdGUoSW1hZ2U6Om51bGxJbWFnZSgpLCByZXBlYXRYLCByZXBlYXRZ
LCB0cnVlKTsKIAotICAgIGJvb2wgb3JpZ2luQ2xlYW4gPSBpc09yaWdpbkNsZWFuKGNhY2hlZElt
YWdlLCBjYW52YXMoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgcmV0dXJuIENhbnZhc1BhdHRl
cm46OmNyZWF0ZShjYWNoZWRJbWFnZS0+aW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2lu
Q2xlYW4pOworICAgIGJvb2wgb3JpZ2luQ2xlYW4gPSBpc09yaWdpbkNsZWFuKGNhY2hlZEltYWdl
LCBpbWFnZSwgY2FudmFzKCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIHJldHVybiBDYW52YXNQ
YXR0ZXJuOjpjcmVhdGUoY2FjaGVkSW1hZ2UtPmltYWdlKGltYWdlLT5yZW5kZXJlcigpKSwgcmVw
ZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pOwogfQogCiBQYXNzUmVmUHRyPENhbnZhc1BhdHRl
cm4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojp3b3Vs
ZFRhaW50TwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKLSAgICBpZiAoIWNhY2hlZEltYWdlLT5pbWFn
ZSgpLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpKQorICAgIGlmICghY2FjaGVkSW1hZ2UtPmlt
YWdlKGltYWdlLT5yZW5kZXJlcigpKS0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gd291bGRUYWludE9yaWdpbihjYWNoZWRJbWFn
ZS0+cmVzcG9uc2UoKS51cmwoKSkgJiYgIWNhY2hlZEltYWdlLT5wYXNzZXNBY2Nlc3NDb250cm9s
Q2hlY2soY2FudmFzKCktPnNlY3VyaXR5T3JpZ2luKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lv
biA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNzIsNyArMzE3Miw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEcKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQs
IHR5cGUsIGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpLAorICAgIHRleEltYWdlMkRJbXBs
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLT5jYWNo
ZWRJbWFnZSgpLT5pbWFnZShpbWFnZS0+cmVuZGVyZXIoKSksCiAgICAgICAgICAgICAgICAgICAg
bV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKQEAgLTMz
NzMsNyArMzM3Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIK
ICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
dGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0
LCB0eXBlLCBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKSwKKyAgICB0ZXhTdWJJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdl
LT5jYWNoZWRJbWFnZSgpLT5pbWFnZShpbWFnZS0+cmVuZGVyZXIoKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAko
cmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDc1IEBAIGJvb2wgQ2FjaGVkSW1h
Z2U6OndpbGxQYWludEJyb2tlbkltYWdlKCkKICAgICByZXR1cm4gZXJyb3JPY2N1cnJlZCgpICYm
IG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsKIH0KIAotSW1hZ2UqIENhY2hlZEltYWdlOjppbWFn
ZSgpIGNvbnN0CitJbWFnZSogQ2FjaGVkSW1hZ2U6Omxvb2t1cEltYWdlRm9yU2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgb24gb25jZSwg
d2Via2l0Lm9yZy9iLzQ3MTU2IGxhbmRzLgorI2lmIEVOQUJMRShTVkcpICYmIDAKKyAgICBpZiAo
IW1faW1hZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghbV9pbWFnZS0+aXNTVkdJbWFn
ZSgpKQorICAgICAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKKyAgICBpZiAoSW1hZ2UqIGNhY2hl
ZEltYWdlID0gbV9zdmdJbWFnZUNhY2hlLmltYWdlRm9yU2l6ZShzaXplKSkKKyAgICAgICAgcmV0
dXJuIGNhY2hlZEltYWdlOworICAgIHJldHVybiBtX2ltYWdlLmdldCgpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oc2l6ZSk7CisgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisjZW5kaWYKK30K
KworSW1hZ2UqIENhY2hlZEltYWdlOjpsb29rdXBJbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFR1cm4gdGhpcyBvbiBv
bmNlLCB3ZWJraXQub3JnL2IvNDcxNTYgbGFuZHMuCisjaWYgRU5BQkxFKFNWRykgJiYgMAorICAg
IGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX2ltYWdlLT5pc1NW
R0ltYWdlKCkpCisgICAgICAgIHJldHVybiBtX2ltYWdlLmdldCgpOworICAgIEludFNpemUgc2l6
ZSA9IG1fc3ZnSW1hZ2VDYWNoZS5zaXplRm9yQ2xpZW50KHJlbmRlcmVyKTsKKyAgICBpZiAoSW1h
Z2UqIGNhY2hlZEltYWdlID0gbV9zdmdJbWFnZUNhY2hlLmltYWdlRm9yU2l6ZShzaXplKSkKKyAg
ICAgICAgcmV0dXJuIGNhY2hlZEltYWdlOworICAgIHJldHVybiBtX2ltYWdlLmdldCgpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0ocmVuZGVyZXIpOworICAgIHJldHVybiBtX2ltYWdlLmdldCgp
OworI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IENhY2hlZEltYWdlOjpsb29rdXBPckNy
ZWF0ZUltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAg
ICAvLyBGSVhNRTogVHVybiB0aGlzIG9uIG9uY2UsIHdlYmtpdC5vcmcvYi80NzE1NiBsYW5kcy4K
KyNpZiBFTkFCTEUoU1ZHKSAmJiAwCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IG1faW1hZ2U7
CisgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1NWR0ltYWdlKCkpIHsKKyAgICAgICAgaWYgKCFy
ZW5kZXJlcikKKyAgICAgICAgICAgIHJldHVybiBtX2ltYWdlOworCisgICAgICAgIGlmICghbV9z
dmdJbWFnZUNhY2hlLmNsaWVudHMoKS5jb250YWlucyhyZW5kZXJlcikpCisgICAgICAgICAgICBy
ZXR1cm4gbV9pbWFnZTsKKworICAgICAgICAvLyBOZWVkIHRvIGxvb2sgdXAgb3VyIHNpemUuCisg
ICAgICAgIEludFNpemUgc2l6ZSA9IG1fc3ZnSW1hZ2VDYWNoZS5zaXplRm9yQ2xpZW50KHJlbmRl
cmVyKTsKKyAgICAgICAgaWYgKEltYWdlKiByZXN1bHQgPSBtX3N2Z0ltYWdlQ2FjaGUuZ2V0SW1h
Z2UocmVuZGVyZXIsIHNpemUpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAg
ICAvLyBXZSBuZWVkIHRvIGNyZWF0ZSBhbiBpbWFnZS4KKyAgICAgICAgQVNTRVJUKG1fZGF0YSk7
CisgICAgICAgIEFTU0VSVChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImltYWdlL3N2Zyt4bWwi
KTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBuZXdJbWFnZSA9IFNWR0ltYWdlOjpjcmVhdGUodGhp
cyk7CisgICAgICAgIG5ld0ltYWdlLT5zZXREYXRhKG1fZGF0YSwgdHJ1ZSk7CisgICAgICAgIG5l
d0ltYWdlLT5zZXRDb250YWluZXJTaXplKHNpemUpOworICAgICAgICBtX3N2Z0ltYWdlQ2FjaGUu
cHV0SW1hZ2Uoc2l6ZSwgbmV3SW1hZ2UpOworICAgICAgICByZXR1cm4gbmV3SW1hZ2UucmVsZWFz
ZSgpOworICAgIH0KKyAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0ocmVuZGVyZXIpOworICAgIHJldHVybiBtX2ltYWdlOworI2VuZGlmCit9CisKK0lt
YWdlKiBDYWNoZWRJbWFnZTo6aW1hZ2UoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsK
ICAgICBBU1NFUlQoIWlzUHVyZ2VhYmxlKCkpOwogCkBAIC0xNDEsMTUgKzIwOSw0MyBAQCBJbWFn
ZSogQ2FjaGVkSW1hZ2U6OmltYWdlKCkgY29uc3QKICAgICB9CiAKICAgICBpZiAobV9pbWFnZSkK
LSAgICAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisgICAgICAgIHJldHVybiBsb29rdXBPckNy
ZWF0ZUltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpLmdldCgpOwogCiAgICAgcmV0dXJuIEltYWdl
OjpudWxsSW1hZ2UoKTsKIH0KIAotdm9pZCBDYWNoZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJT
aXplKGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUpCit2b2lkIENhY2hlZEltYWdlOjpzZXRJ
bWFnZUNvbnRhaW5lclNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50
U2l6ZSYgY29udGFpbmVyU2l6ZSkKIHsKLSAgICBpZiAobV9pbWFnZSkKKyAgICBpZiAoIW1faW1h
Z2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1faW1hZ2UtPmlzU1ZHSW1hZ2UoKSkgewog
ICAgICAgICBtX2ltYWdlLT5zZXRDb250YWluZXJTaXplKGNvbnRhaW5lclNpemUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IFR1cm4gdGhpcyBvbiBvbmNlLCB3ZWJr
aXQub3JnL2IvNDcxNTYgbGFuZHMuCisjaWYgRU5BQkxFKFNWRykgJiYgMAorICAgIC8vIFNWR0lt
YWdlcyBhcmUgaW5kZXBlbmRlbnRseSBjYWNoZWQgcGVyIHNpemUgaW4gdGhlIEltYWdlQnlTaXpl
Q2FjaGUuCisgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fc3ZnSW1hZ2VDYWNoZS5jbGllbnRzKCkuZmluZChyZW5kZXJlcik7CisgICAgaWYgKGl0ICE9
IG1fc3ZnSW1hZ2VDYWNoZS5jbGllbnRzKCkuZW5kKCkpIHsKKyAgICAgICAgSW50U2l6ZSBjdXJy
ZW50U2l6ZSA9IGl0LT5zZWNvbmQuZmlyc3Q7CisgICAgICAgIEFTU0VSVCghY3VycmVudFNpemUu
aXNFbXB0eSgpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRTaXplID09IGNvbnRhaW5lclNpemUpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3ZnSW1hZ2VDYWNoZS5yZW1vdmVDbGllbnQo
cmVuZGVyZXIpOworICAgICAgICBpZiAoIWNvbnRhaW5lclNpemUuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgbV9zdmdJbWFnZUNhY2hlLmFkZENsaWVudChyZW5kZXJlciwgY29udGFpbmVyU2l6ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGFpbmVyU2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3ZnSW1hZ2VDYWNoZS5hZGRDbGllbnQocmVu
ZGVyZXIsIGNvbnRhaW5lclNpemUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVuZGVyZXIp
OworICAgIG1faW1hZ2UtPnNldENvbnRhaW5lclNpemUoY29udGFpbmVyU2l6ZSk7CisjZW5kaWYK
IH0KIAogYm9vbCBDYWNoZWRJbWFnZTo6dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0CkBA
IC0xNzYsMTEgKzI3MiwxMiBAQCBib29sIENhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlSGVp
Z2h0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1JbnRTaXplIENhY2hlZEltYWdlOjppbWFnZVNp
emUoZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK0ludFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6
ZShjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyKQogewogICAg
IEFTU0VSVCghaXNQdXJnZWFibGUoKSk7CiAKLSAgICBpZiAoIW1faW1hZ2UpCisgICAgSW1hZ2Uq
IGltYWdlID0gbG9va3VwSW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcik7CisgICAgaWYgKCFpbWFn
ZSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKICAgICBpZiAobXVsdGlwbGllciA9PSAxLjBm
KQogICAgICAgICByZXR1cm4gbV9pbWFnZS0+c2l6ZSgpOwpAQCAtMTk3LDExICsyOTQsMTIgQEAg
SW50U2l6ZSBDYWNoZWRJbWFnZTo6aW1hZ2VTaXplKGZsb2F0IG11bAogICAgIHJldHVybiBJbnRT
aXplKHdpZHRoLCBoZWlnaHQpOwogfQogCi1JbnRSZWN0IENhY2hlZEltYWdlOjppbWFnZVJlY3Qo
ZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK0ludFJlY3QgQ2FjaGVkSW1hZ2U6OmltYWdlUmVjdChj
b25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyKQogewogICAgIEFT
U0VSVCghaXNQdXJnZWFibGUoKSk7CiAKLSAgICBpZiAoIW1faW1hZ2UpCisgICAgSW1hZ2UqIGlt
YWdlID0gbG9va3VwSW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcik7CisgICAgaWYgKCFpbWFnZSkK
ICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKICAgICBpZiAobXVsdGlwbGllciA9PSAxLjBmIHx8
ICghbV9pbWFnZS0+aGFzUmVsYXRpdmVXaWR0aCgpICYmICFtX2ltYWdlLT5oYXNSZWxhdGl2ZUhl
aWdodCgpKSkKICAgICAgICAgcmV0dXJuIG1faW1hZ2UtPnJlY3QoKTsKQEAgLTI0NSw2ICszNDMs
NyBAQCB2b2lkIENhY2hlZEltYWdlOjpjaGVja1Nob3VsZFBhaW50QnJva2VuCiB2b2lkIENhY2hl
ZEltYWdlOjpjbGVhcigpCiB7CiAgICAgZGVzdHJveURlY29kZWREYXRhKCk7CisgICAgbV9zdmdJ
bWFnZUNhY2hlLmNsZWFyKCk7CiAgICAgbV9pbWFnZSA9IDA7CiAgICAgc2V0RW5jb2RlZFNpemUo
MCk7CiB9CkBAIC0yOTcsNyArMzk2LDcgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGF0YShQYXNzUmVm
UHRyPFNoYXJlZAogICAgIC8vIHRvIGRlY29kZS4KICAgICBpZiAoc2l6ZUF2YWlsYWJsZSB8fCBh
bGxEYXRhUmVjZWl2ZWQpIHsKICAgICAgICAgc2l6ZV90IG1heERlY29kZWRJbWFnZVNpemUgPSBt
YXhpbXVtRGVjb2RlZEltYWdlU2l6ZSgpOwotICAgICAgICBJbnRTaXplIHMgPSBpbWFnZVNpemUo
MS4wZik7CisgICAgICAgIEludFNpemUgcyA9IG1faW1hZ2UtPnNpemUoKTsKICAgICAgICAgc2l6
ZV90IGVzdGltYXRlZERlY29kZWRJbWFnZVNpemUgPSBzLndpZHRoKCkgKiBzLmhlaWdodCgpICog
NDsgLy8gbm8gb3ZlcmZsb3cgY2hlY2sKICAgICAgICAgaWYgKG1faW1hZ2UtPmlzTnVsbCgpIHx8
IChtYXhEZWNvZGVkSW1hZ2VTaXplID4gMCAmJiBlc3RpbWF0ZWREZWNvZGVkSW1hZ2VTaXplID4g
bWF4RGVjb2RlZEltYWdlU2l6ZSkpIHsKICAgICAgICAgICAgIGVycm9yKGVycm9yT2NjdXJyZWQo
KSA/IHN0YXR1cygpIDogRGVjb2RlRXJyb3IpOwpAQCAtMzQyLDEzICs0NDEsMTYgQEAgdm9pZCBD
YWNoZWRJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKCkKICAgICAgICAgc2V0RGVjb2RlZFNpemUo
MCk7CiAgICAgICAgIGlmICghTWVtb3J5Q2FjaGU6OnNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJs
ZU9uRXZpY3Rpb24oKSkKICAgICAgICAgICAgIG1ha2VQdXJnZWFibGUodHJ1ZSk7Ci0gICAgfSBl
bHNlIGlmIChtX2ltYWdlICYmICFlcnJvck9jY3VycmVkKCkpCisgICAgfSBlbHNlIGlmIChtX2lt
YWdlICYmICFlcnJvck9jY3VycmVkKCkgJiYgIW1faW1hZ2UtPmlzU1ZHSW1hZ2UoKSkKICAgICAg
ICAgbV9pbWFnZS0+ZGVzdHJveURlY29kZWREYXRhKCk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6
OmRlY29kZWRTaXplQ2hhbmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSkKIHsKLSAg
ICBpZiAoaW1hZ2UgIT0gbV9pbWFnZSkKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47
CisgICAgSW1hZ2UqIHVzZUltYWdlID0gbG9va3VwSW1hZ2VGb3JTaXplKGltYWdlLT5zaXplKCkp
OworICAgIGlmIChpbWFnZSAhPSB1c2VJbWFnZSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IHNldERlY29kZWRTaXplKGRlY29kZWRTaXplKCkgKyBkZWx0YSk7CkBAIC0zNTYsNyArNDU4LDEw
IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmRlY29kZWRTaXplQ2hhbmdlZChjb24KIAogdm9pZCBDYWNo
ZWRJbWFnZTo6ZGlkRHJhdyhjb25zdCBJbWFnZSogaW1hZ2UpCiB7Ci0gICAgaWYgKGltYWdlICE9
IG1faW1hZ2UpCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEltYWdlKiB1
c2VJbWFnZSA9IGxvb2t1cEltYWdlRm9yU2l6ZShpbWFnZS0+c2l6ZSgpKTsKKyAgICBpZiAoaW1h
Z2UgIT0gdXNlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkb3VibGUgdGltZVN0
YW1wID0gRnJhbWVWaWV3OjpjdXJyZW50UGFpbnRUaW1lU3RhbXAoKTsKQEAgLTM2OCw3ICs0NzMs
MTAgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGlkRHJhdyhjb25zdCBJbWFnZSogaQogCiBib29sIENh
Y2hlZEltYWdlOjpzaG91bGRQYXVzZUFuaW1hdGlvbihjb25zdCBJbWFnZSogaW1hZ2UpCiB7Ci0g
ICAgaWYgKGltYWdlICE9IG1faW1hZ2UpCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIEltYWdlKiB1c2VJbWFnZSA9IGxvb2t1cEltYWdlRm9yU2l6ZShpbWFnZS0+
c2l6ZSgpKTsKKyAgICBpZiAoaW1hZ2UgIT0gdXNlSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRJbWFnZUNsaWVu
dD4gdyhtX2NsaWVudHMpOwpAQCAtMzgyLDE0ICs0OTAsMjIgQEAgYm9vbCBDYWNoZWRJbWFnZTo6
c2hvdWxkUGF1c2VBbmltYXRpb24oYwogCiB2b2lkIENhY2hlZEltYWdlOjphbmltYXRpb25BZHZh
bmNlZChjb25zdCBJbWFnZSogaW1hZ2UpCiB7Ci0gICAgaWYgKGltYWdlID09IG1faW1hZ2UpCi0g
ICAgICAgIG5vdGlmeU9ic2VydmVycygpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVy
bjsKKyAgICBJbWFnZSogdXNlSW1hZ2UgPSBsb29rdXBJbWFnZUZvclNpemUoaW1hZ2UtPnNpemUo
KSk7CisgICAgaWYgKGltYWdlICE9IHVzZUltYWdlKQorICAgICAgICByZXR1cm47CisgICAgbm90
aWZ5T2JzZXJ2ZXJzKCk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmNoYW5nZWRJblJlY3QoY29u
c3QgSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmIChpbWFnZSA9
PSBtX2ltYWdlKQotICAgICAgICBub3RpZnlPYnNlcnZlcnMoJnJlY3QpOworICAgIGlmICghaW1h
Z2UpCisgICAgICAgIHJldHVybjsKKyAgICBJbWFnZSogdXNlSW1hZ2UgPSBsb29rdXBJbWFnZUZv
clNpemUoaW1hZ2UtPnNpemUoKSk7CisgICAgaWYgKGltYWdlICE9IHVzZUltYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgbm90aWZ5T2JzZXJ2ZXJzKCZyZWN0KTsKIH0KIAogfSAvL25hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2Uu
aAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2RlZmluZSBDYWNoZWRJ
bWFnZV9oCiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkltYWdlQnlT
aXplQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUg
IkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC0zNCw2ICszNSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFz
cyBNZW1vcnlDYWNoZTsKK2NsYXNzIFJlbmRlck9iamVjdDsKIAogY2xhc3MgQ2FjaGVkSW1hZ2Ug
OiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UsIHB1YmxpYyBJbWFnZU9ic2VydmVyIHsKICAgICBmcmll
bmQgY2xhc3MgTWVtb3J5Q2FjaGU7CkBAIC00NSwyNCArNDcsMjQgQEAgcHVibGljOgogICAgIAog
ICAgIHZpcnR1YWwgdm9pZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zJik7CiAKLSAgICBJbWFnZSogaW1hZ2UoKSBjb25zdDsgLy8gUmV0dXJu
cyB0aGUgbnVsbEltYWdlKCkgaWYgdGhlIGltYWdlIGlzIG5vdCBhdmFpbGFibGUgeWV0LgorICAg
IEltYWdlKiBpbWFnZShjb25zdCBSZW5kZXJPYmplY3QqKTsgLy8gUmV0dXJucyB0aGUgbnVsbElt
YWdlKCkgaWYgdGhlIGltYWdlIGlzIG5vdCBhdmFpbGFibGUgeWV0LgogICAgIGJvb2wgaGFzSW1h
Z2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAKICAgICBzdGQ6OnBhaXI8SW1h
Z2UqLCBmbG9hdD4gYnJva2VuSW1hZ2UoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpIGNvbnN0OyAv
LyBSZXR1cm5zIGFuIGltYWdlIGFuZCB0aGUgaW1hZ2UncyByZXNvbHV0aW9uIHNjYWxlIGZhY3Rv
ci4KICAgICBib29sIHdpbGxQYWludEJyb2tlbkltYWdlKCkgY29uc3Q7IAogCi0gICAgYm9vbCBj
YW5SZW5kZXIoZmxvYXQgbXVsdGlwbGllcikgY29uc3QgeyByZXR1cm4gIWVycm9yT2NjdXJyZWQo
KSAmJiAhaW1hZ2VTaXplKG11bHRpcGxpZXIpLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgY2FuUmVu
ZGVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIHsgcmV0
dXJuICFlcnJvck9jY3VycmVkKCkgJiYgIWltYWdlU2l6ZShyZW5kZXJlciwgbXVsdGlwbGllciku
aXNFbXB0eSgpOyB9CiAKICAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGZvciBTVkdJbWFnZSBy
aWdodCBub3cKLSAgICB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7
CisgICAgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29u
c3QgSW50U2l6ZSYpOwogICAgIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0Owog
ICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3Q7CiAgICAgYm9vbCBpbWFnZUhh
c1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Q7CiAgICAgCiAgICAgLy8gQm90aCBvZiB0aGVzZSBtZXRo
b2RzIHRha2UgYSB6b29tIG11bHRpcGxpZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBpbmNyZWFzZSB0
aGUgbmF0dXJhbCBzaXplIG9mIHRoZSBpbWFnZSBieSB0aGUKICAgICAvLyB6b29tLgotICAgIElu
dFNpemUgaW1hZ2VTaXplKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0OyAgLy8gcmV0dXJucyB0aGUg
c2l6ZSBvZiB0aGUgY29tcGxldGUgaW1hZ2UuCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoZmxvYXQg
bXVsdGlwbGllcikgY29uc3Q7ICAvLyBUaGUgc2l6ZSBvZiB0aGUgY3VycmVudGx5IGRlY29kZWQg
cG9ydGlvbiBvZiB0aGUgaW1hZ2UuCisgICAgSW50U2l6ZSBpbWFnZVNpemUoY29uc3QgUmVuZGVy
T2JqZWN0KiwgZmxvYXQgbXVsdGlwbGllcik7IC8vIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNv
bXBsZXRlIGltYWdlLgorICAgIEludFJlY3QgaW1hZ2VSZWN0KGNvbnN0IFJlbmRlck9iamVjdCos
IGZsb2F0IG11bHRpcGxpZXIpOyAvLyBUaGUgc2l6ZSBvZiB0aGUgY3VycmVudGx5IGRlY29kZWQg
cG9ydGlvbiBvZiB0aGUgaW1hZ2UuCiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENh
Y2hlZFJlc291cmNlQ2xpZW50Kik7CiAgICAgCkBAIC05MSw2ICs5MywxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0
Jik7CiAKIHByaXZhdGU6CisgICAgSW1hZ2UqIGxvb2t1cEltYWdlRm9yU2l6ZShjb25zdCBJbnRT
aXplJikgY29uc3Q7CisgICAgSW1hZ2UqIGxvb2t1cEltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJbWFnZT4gbG9va3VwT3JDcmVhdGVJ
bWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCopOworCiAgICAgdm9pZCBjcmVhdGVJ
bWFnZSgpOwogICAgIHNpemVfdCBtYXhpbXVtRGVjb2RlZEltYWdlU2l6ZSgpOwogICAgIC8vIElm
IG5vdCBudWxsLCBjaGFuZ2VSZWN0IGlzIHRoZSBjaGFuZ2VkIHBhcnQgb2YgdGhlIGltYWdlLgpA
QCAtMTAwLDYgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjaGVja1Nob3VsZFBhaW50QnJv
a2VuSW1hZ2UoKTsKIAogICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICBtdXRhYmxlIElt
YWdlQnlTaXplQ2FjaGUgbV9zdmdJbWFnZUNhY2hlOwogICAgIFRpbWVyPENhY2hlZEltYWdlPiBt
X2RlY29kZWREYXRhRGVsZXRpb25UaW1lcjsKICAgICBib29sIG1fc2hvdWxkUGFpbnRCcm9rZW5J
bWFnZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvSW1hZ2VCeVNpemVD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0ltYWdl
QnlTaXplQ2FjaGUuY3BwCShyZXZpc2lvbiA5NzM0NykJKGZyb20gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwOjk3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0ltYWdlQnlTaXplQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJ
bWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NTU0ltYWdlR2VuZXJhdG9yVmFsdWU6
OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUoKQorOiBtX2FjY2Vzc2VkSW1hZ2UoZmFsc2UpCit7Cit9
CisKK0NTU0ltYWdlR2VuZXJhdG9yVmFsdWU6On5DU1NJbWFnZUdlbmVyYXRvclZhbHVlKCkKK3sK
K30KKwordm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICByZWYoKTsKKyAgICBpZiAo
IXNpemUuaXNFbXB0eSgpKQorICAgICAgICBtX3NpemVzLmFkZChzaXplKTsKKyAgICAKKyAgICBS
ZW5kZXJPYmplY3RTaXplQ291bnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmZpbmQocmVu
ZGVyZXIpOworICAgIGlmIChpdCA9PSBtX2NsaWVudHMuZW5kKCkpCisgICAgICAgIG1fY2xpZW50
cy5hZGQocmVuZGVyZXIsIFNpemVDb3VudFBhaXIoc2l6ZSwgMSkpOworICAgIGVsc2UgeworICAg
ICAgICBTaXplQ291bnRQYWlyJiBzaXplQ291bnQgPSBpdC0+c2Vjb25kOworICAgICAgICArK3Np
emVDb3VudC5zZWNvbmQ7CisgICAgfQorfQorCit2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6
OnJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIFJlbmRlck9iamVj
dFNpemVDb3VudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuZmluZChyZW5kZXJlcik7Cisg
ICAgQVNTRVJUKGl0ICE9IG1fY2xpZW50cy5lbmQoKSk7CisKKyAgICBTaXplQ291bnRQYWlyJiBz
aXplQ291bnQgPSBpdC0+c2Vjb25kOworICAgIEludFNpemUgc2l6ZSA9IHNpemVDb3VudC5maXJz
dDsKKyAgICBpZiAoIXNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fc2l6ZXMucmVtb3ZlKHNp
emUpOworICAgICAgICBpZiAoIW1fc2l6ZXMuY29udGFpbnMoc2l6ZSkpCisgICAgICAgICAgICBt
X2ltYWdlcy5yZW1vdmUoc2l6ZSk7CisgICAgfQorICAgIAorICAgIGlmICghLS1zaXplQ291bnQu
c2Vjb25kKQorICAgICAgICBtX2NsaWVudHMucmVtb3ZlKHJlbmRlcmVyKTsKKworICAgIGRlcmVm
KCk7Cit9CisKK0ltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIFJlbmRlck9iamVj
dFNpemVDb3VudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuZmluZChyZW5kZXJlcik7Cisg
ICAgQVNTRVJUKGl0ICE9IG1fY2xpZW50cy5lbmQoKSk7CisKKyAgICBTaXplQ291bnRQYWlyJiBz
aXplQ291bnQgPSBpdC0+c2Vjb25kOworICAgIEludFNpemUgb2xkU2l6ZSA9IHNpemVDb3VudC5m
aXJzdDsKKyAgICBpZiAob2xkU2l6ZSAhPSBzaXplKSB7CisgICAgICAgIC8vIElmIHJlbmRlcmVy
IGlzIHRoZSBvbmx5IGNsaWVudCwgbWFrZSBzdXJlIHdlIGRvbid0IGRlbGV0ZSB0aGlzLgorICAg
ICAgICBSZWZQdHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4gcHJvdGVjdCh0aGlzKTsKKyAgICAg
ICAgcmVtb3ZlQ2xpZW50KHJlbmRlcmVyKTsKKyAgICAgICAgYWRkQ2xpZW50KHJlbmRlcmVyLCBz
aXplKTsKKyAgICB9CisgICAgCisgICAgLy8gRG9uJ3QgZ2VuZXJhdGUgYW4gaW1hZ2UgZm9yIGVt
cHR5IHNpemVzLgorICAgIGlmIChzaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgLy8gTG9vayB1cCB0aGUgaW1hZ2UgaW4gb3VyIGNhY2hlLgorICAgIHJldHVybiBt
X2ltYWdlcy5nZXQoc2l6ZSkuZ2V0KCk7Cit9CisKK3ZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTo6cHV0SW1hZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2Up
Cit7CisgICAgbV9pbWFnZXMuYWRkKHNpemUsIGltYWdlKTsKK30KKworU3R5bGVHZW5lcmF0ZWRJ
bWFnZSogQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Z2VuZXJhdGVkSW1hZ2UoKQoreworICAgIGlm
ICghbV9hY2Nlc3NlZEltYWdlKSB7CisgICAgICAgIG1fYWNjZXNzZWRJbWFnZSA9IHRydWU7Cisg
ICAgICAgIG1faW1hZ2UgPSBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUodGhpcywgaXNGaXhl
ZFNpemUoKSk7CisgICAgfQorICAgIHJldHVybiBtX2ltYWdlLmdldCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvSW1hZ2VC
eVNpemVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0ltYWdlQnlTaXplQ2FjaGUuY3BwCShyZXZpc2lvbiA5NzM0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
MiArMSwzOSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5oIgorI2luY2x1ZGUgIkltYWdlQnlTaXplQ2FjaGUuaCIKIAogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkludFNpemVI
YXNoLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKLSNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgp
Ci06IG1fYWNjZXNzZWRJbWFnZShmYWxzZSkKK0ltYWdlQnlTaXplQ2FjaGU6OkltYWdlQnlTaXpl
Q2FjaGUoKQogewogfQogCi1DU1NJbWFnZUdlbmVyYXRvclZhbHVlOjp+Q1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZSgpCit2b2lkIEltYWdlQnlTaXplQ2FjaGU6OmFkZENsaWVudChjb25zdCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQogewotfQotCi12b2lkIENTU0lt
YWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25z
dCBJbnRTaXplJiBzaXplKQotewotICAgIHJlZigpOwogICAgIGlmICghc2l6ZS5pc0VtcHR5KCkp
CiAgICAgICAgIG1fc2l6ZXMuYWRkKHNpemUpOwogICAgIApAQCAtNTksNyArNDYsNyBAQCB2b2lk
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudChSCiAgICAgfQogfQogCi12b2lkIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQordm9pZCBJbWFnZUJ5U2l6ZUNhY2hlOjpyZW1vdmVDbGllbnQoY29uc3QgUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKIHsKICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9jbGllbnRzLmZpbmQocmVuZGVyZXIpOwogICAgIEFTU0VSVChpdCAhPSBtX2NsaWVudHMu
ZW5kKCkpOwpAQCAtNzQsMTEgKzYxLDkgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpy
ZW1vdmVDbGllbgogICAgIAogICAgIGlmICghLS1zaXplQ291bnQuc2Vjb25kKQogICAgICAgICBt
X2NsaWVudHMucmVtb3ZlKHJlbmRlcmVyKTsKLQotICAgIGRlcmVmKCk7CiB9CiAKLUltYWdlKiBD
U1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBJbnRTaXplJiBzaXplKQorSW1hZ2UqIEltYWdlQnlTaXplQ2FjaGU6OmdldEltYWdlKGNv
bnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAg
UmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5kKHJl
bmRlcmVyKTsKICAgICBBU1NFUlQoaXQgIT0gbV9jbGllbnRzLmVuZCgpKTsKQEAgLTg2LDMyICs3
MSw0NCBAQCBJbWFnZSogQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Z2V0SW1hZ2UoCiAgICAgU2l6
ZUNvdW50UGFpciYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsKICAgICBJbnRTaXplIG9sZFNpemUg
PSBzaXplQ291bnQuZmlyc3Q7CiAgICAgaWYgKG9sZFNpemUgIT0gc2l6ZSkgewotICAgICAgICAv
LyBJZiByZW5kZXJlciBpcyB0aGUgb25seSBjbGllbnQsIG1ha2Ugc3VyZSB3ZSBkb24ndCBkZWxl
dGUgdGhpcy4KLSAgICAgICAgUmVmUHRyPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+IHByb3RlY3Qo
dGhpcyk7CiAgICAgICAgIHJlbW92ZUNsaWVudChyZW5kZXJlcik7CiAgICAgICAgIGFkZENsaWVu
dChyZW5kZXJlciwgc2l6ZSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gRG9uJ3QgZ2VuZXJhdGUg
YW4gaW1hZ2UgZm9yIGVtcHR5IHNpemVzLgogICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICAvLyBMb29rIHVwIHRoZSBpbWFnZSBpbiBvdXIgY2Fj
aGUuCiAgICAgcmV0dXJuIG1faW1hZ2VzLmdldChzaXplKS5nZXQoKTsKIH0KIAotdm9pZCBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlOjpwdXRJbWFnZShjb25zdCBJbnRTaXplJiBzaXplLCBQYXNzUmVm
UHRyPEltYWdlPiBpbWFnZSkKK3ZvaWQgSW1hZ2VCeVNpemVDYWNoZTo6cHV0SW1hZ2UoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCiB7CiAgICAgbV9pbWFnZXMu
YWRkKHNpemUsIGltYWdlKTsKIH0KIAotU3R5bGVHZW5lcmF0ZWRJbWFnZSogQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZTo6Z2VuZXJhdGVkSW1hZ2UoKQordm9pZCBJbWFnZUJ5U2l6ZUNhY2hlOjpjbGVh
cigpCiB7Ci0gICAgaWYgKCFtX2FjY2Vzc2VkSW1hZ2UpIHsKLSAgICAgICAgbV9hY2Nlc3NlZElt
YWdlID0gdHJ1ZTsKLSAgICAgICAgbV9pbWFnZSA9IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0
ZSh0aGlzLCBpc0ZpeGVkU2l6ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7
CisgICAgbV9zaXplcy5jbGVhcigpOworICAgIG1fY2xpZW50cy5jbGVhcigpOworICAgIG1faW1h
Z2VzLmNsZWFyKCk7Cit9CisKK0ltYWdlKiBJbWFnZUJ5U2l6ZUNhY2hlOjppbWFnZUZvclNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBIYXNoTWFwPEludFNpemUsIFJlZlB0
cjxJbWFnZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2ltYWdlcy5maW5kKHNpemUpOworICAg
IGlmIChpdCA9PSBtX2ltYWdlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGl0LT5zZWNvbmQuZ2V0KCk7Cit9CisKK0ludFNpemUgSW1hZ2VCeVNpemVDYWNoZTo6c2l6ZUZv
ckNsaWVudChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAoreworICAgIFJlbmRl
ck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuZmluZChy
ZW5kZXJlcik7CisgICAgaWYgKGl0ID09IG1fY2xpZW50cy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IEludFNpemUoKTsKKyAgICByZXR1cm4gaXQtPnNlY29uZC5maXJzdDsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0ltYWdlQnlT
aXplQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvSW1h
Z2VCeVNpemVDYWNoZS5oCShyZXZpc2lvbiA5NzM0NykJKGZyb20gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaDo5NzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9JbWFnZUJ5U2l6ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZV9oCisjZGVmaW5lIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWVfaAorCisjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKKyNpbmNsdWRl
ICJJbnRTaXplSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEltYWdlOworY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgU3R5
bGVHZW5lcmF0ZWRJbWFnZTsKKworY2xhc3MgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSA6IHB1Ymxp
YyBDU1NWYWx1ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZSgpOworCisgICAgdm9pZCBhZGRDbGllbnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYp
OworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpID0gMDsK
KworICAgIFN0eWxlR2VuZXJhdGVkSW1hZ2UqIGdlbmVyYXRlZEltYWdlKCk7CisgICAgCisgICAg
dmlydHVhbCBib29sIGlzRml4ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIEludFNpemUgZml4ZWRTaXplKGNvbnN0IFJlbmRlck9iamVjdCopIHsgcmV0dXJuIElu
dFNpemUoKTsgfQorICAgIAorcHJvdGVjdGVkOgorICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUo
KTsKKyAgICAKKyAgICBJbWFnZSogZ2V0SW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6
ZSYpOworICAgIHZvaWQgcHV0SW1hZ2UoY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8SW1hZ2U+
KTsKKworICAgIHR5cGVkZWYgcGFpcjxJbnRTaXplLCBpbnQ+IFNpemVDb3VudFBhaXI7CisgICAg
dHlwZWRlZiBIYXNoTWFwPFJlbmRlck9iamVjdCosIFNpemVDb3VudFBhaXI+IFJlbmRlck9iamVj
dFNpemVDb3VudE1hcDsKKworICAgIEhhc2hDb3VudGVkU2V0PEludFNpemU+IG1fc2l6ZXM7IC8v
IEEgY291bnQgb2YgaG93IG1hbnkgdGltZXMgYSBnaXZlbiBpbWFnZSBzaXplIGlzIGluIHVzZS4K
KyAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXAgbV9jbGllbnRzOyAvLyBBIG1hcCBmcm9tIFJl
bmRlck9iamVjdHMgKHdpdGggZW50cnkgY291bnQpIHRvIGltYWdlIHNpemVzLgorICAgIEhhc2hN
YXA8SW50U2l6ZSwgUmVmUHRyPEltYWdlPiA+IG1faW1hZ2VzOyAvLyBBIGNhY2hlIG9mIEltYWdl
IG9iamVjdHMgYnkgaW1hZ2Ugc2l6ZS4KKyAgICAKKyAgICBSZWZQdHI8U3R5bGVHZW5lcmF0ZWRJ
bWFnZT4gbV9pbWFnZTsKKyAgICBib29sIG1fYWNjZXNzZWRJbWFnZTsKKworcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNJbWFnZUdlbmVyYXRvclZhbHVlKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvSW1hZ2VC
eVNpemVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9J
bWFnZUJ5U2l6ZUNhY2hlLmgJKHJldmlzaW9uIDk3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0ltYWdlQnlTaXplQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMSw2
MSBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlX2gKLSNkZWZpbmUg
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZV9oCisjaWZuZGVmIEltYWdlQnlTaXplQ2FjaGVfaAorI2Rl
ZmluZSBJbWFnZUJ5U2l6ZUNhY2hlX2gKIAotI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCiAjaW5jbHVk
ZSAiSW50U2l6ZUhhc2guaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdlOwogY2xh
c3MgUmVuZGVyT2JqZWN0OwotY2xhc3MgU3R5bGVHZW5lcmF0ZWRJbWFnZTsKIAotY2xhc3MgQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZSB7Cit0eXBlZGVmIHBhaXI8SW50
U2l6ZSwgaW50PiBTaXplQ291bnRQYWlyOwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlck9i
amVjdCosIFNpemVDb3VudFBhaXI+IFJlbmRlck9iamVjdFNpemVDb3VudE1hcDsKKworY2xhc3Mg
SW1hZ2VCeVNpemVDYWNoZSB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+Q1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZSgpOworICAgIEltYWdlQnlTaXplQ2FjaGUoKTsKKworICAgIHZvaWQgYWRkQ2xpZW50
KGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHJlbW92ZUNs
aWVudChjb25zdCBSZW5kZXJPYmplY3QqKTsKIAotICAgIHZvaWQgYWRkQ2xpZW50KFJlbmRlck9i
amVjdCosIGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJPYmpl
Y3QqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCos
IGNvbnN0IEludFNpemUmKSA9IDA7Ci0KLSAgICBTdHlsZUdlbmVyYXRlZEltYWdlKiBnZW5lcmF0
ZWRJbWFnZSgpOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZpeGVkU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBJbnRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5k
ZXJPYmplY3QqKSB7IHJldHVybiBJbnRTaXplKCk7IH0KLSAgICAKLXByb3RlY3RlZDoKLSAgICBD
U1NJbWFnZUdlbmVyYXRvclZhbHVlKCk7Ci0gICAgCi0gICAgSW1hZ2UqIGdldEltYWdlKFJlbmRl
ck9iamVjdCosIGNvbnN0IEludFNpemUmKTsKKyAgICBJbWFnZSogZ2V0SW1hZ2UoY29uc3QgUmVu
ZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIHZvaWQgcHV0SW1hZ2UoY29uc3QgSW50
U2l6ZSYsIFBhc3NSZWZQdHI8SW1hZ2U+KTsKIAotICAgIHR5cGVkZWYgcGFpcjxJbnRTaXplLCBp
bnQ+IFNpemVDb3VudFBhaXI7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlck9iamVjdCosIFNp
emVDb3VudFBhaXI+IFJlbmRlck9iamVjdFNpemVDb3VudE1hcDsKKyAgICB2b2lkIGNsZWFyKCk7
CiAKKyAgICBJbWFnZSogaW1hZ2VGb3JTaXplKGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICBJ
bnRTaXplIHNpemVGb3JDbGllbnQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgY29u
c3QgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwJiBjbGllbnRzKCkgY29uc3QgeyByZXR1cm4gbV9j
bGllbnRzOyB9CisKK3ByaXZhdGU6CiAgICAgSGFzaENvdW50ZWRTZXQ8SW50U2l6ZT4gbV9zaXpl
czsgLy8gQSBjb3VudCBvZiBob3cgbWFueSB0aW1lcyBhIGdpdmVuIGltYWdlIHNpemUgaXMgaW4g
dXNlLgogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcCBtX2NsaWVudHM7IC8vIEEgbWFwIGZy
b20gUmVuZGVyT2JqZWN0cyAod2l0aCBlbnRyeSBjb3VudCkgdG8gaW1hZ2Ugc2l6ZXMuCiAgICAg
SGFzaE1hcDxJbnRTaXplLCBSZWZQdHI8SW1hZ2U+ID4gbV9pbWFnZXM7IC8vIEEgY2FjaGUgb2Yg
SW1hZ2Ugb2JqZWN0cyBieSBpbWFnZSBzaXplLgotICAgIAotICAgIFJlZlB0cjxTdHlsZUdlbmVy
YXRlZEltYWdlPiBtX2ltYWdlOwotICAgIGJvb2wgbV9hY2Nlc3NlZEltYWdlOwotCi1wcml2YXRl
OgotICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlX2gKKyNlbmRpZiAvLyBJbWFnZUJ5U2l6ZUNhY2hlX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5NzM2MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MTEsNyArNjExLDcgQEAgc3RhdGljIEltYWdlKiBnZXRJbWFnZShFbGVtZW50KiBlbGVtZW50
KQogICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBn
ZXRDYWNoZWRJbWFnZShlbGVtZW50KTsKICAgICByZXR1cm4gKGNhY2hlZEltYWdlICYmICFjYWNo
ZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKSA/Ci0gICAgICAgIGNhY2hlZEltYWdlLT5pbWFnZSgp
IDogMDsKKyAgICAgICAgY2FjaGVkSW1hZ2UtPmltYWdlKGVsZW1lbnQtPnJlbmRlcmVyKCkpIDog
MDsKIH0KIAogc3RhdGljIHZvaWQgcHJlcGFyZUNsaXBib2FyZEZvckltYWdlRHJhZyhGcmFtZSog
c3JjLCBDbGlwYm9hcmQqIGNsaXBib2FyZCwgRWxlbWVudCogbm9kZSwgY29uc3QgS1VSTCYgbGlu
a1VSTCwgY29uc3QgS1VSTCYgaW1hZ2VVUkwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwMiw3
ICsxMjAyLDcgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzbwogICAg
IGlmIChzdHlsZSAmJiBzdHlsZS0+Y3Vyc29ycygpKSB7CiAgICAgICAgIGNvbnN0IEN1cnNvckxp
c3QqIGN1cnNvcnMgPSBzdHlsZS0+Y3Vyc29ycygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY3Vyc29ycy0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IENhY2hl
ZEltYWdlKiBjaW1hZ2UgPSAwOworICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNpbWFnZSA9IDA7
CiAgICAgICAgICAgICBTdHlsZUltYWdlKiBpbWFnZSA9ICgqY3Vyc29ycylbaV0uaW1hZ2UoKTsK
ICAgICAgICAgICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNDYWNoZWRJbWFnZSgpKQogICAgICAg
ICAgICAgICAgIGNpbWFnZSA9IHN0YXRpY19jYXN0PFN0eWxlQ2FjaGVkSW1hZ2UqPihpbWFnZSkt
PmNhY2hlZEltYWdlKCk7CkBAIC0xMjEwLDExICsxMjEwLDExIEBAIE9wdGlvbmFsQ3Vyc29yIEV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc28KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIEludFBvaW50IGhvdFNwb3QgPSAoKmN1cnNvcnMpW2ldLmhvdFNwb3QoKTsKICAgICAg
ICAgICAgIC8vIExpbWl0IHRoZSBzaXplIG9mIGN1cnNvcnMgc28gdGhhdCB0aGV5IGNhbm5vdCBi
ZSB1c2VkIHRvIGNvdmVyIFVJIGVsZW1lbnRzIGluIGNocm9tZS4KLSAgICAgICAgICAgIEludFNp
emUgc2l6ZSA9IGNpbWFnZS0+aW1hZ2UoKS0+c2l6ZSgpOworICAgICAgICAgICAgSW50U2l6ZSBz
aXplID0gY2ltYWdlLT5pbWFnZShyZW5kZXJlciktPnNpemUoKTsKICAgICAgICAgICAgIGlmIChz
aXplLndpZHRoKCkgPiAxMjggfHwgc2l6ZS5oZWlnaHQoKSA+IDEyOCkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghY2ltYWdlLT5lcnJvck9jY3VycmVkKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEN1cnNvcihjaW1hZ2UtPmltYWdlKCksIGhvdFNwb3QpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBDdXJzb3IoY2ltYWdlLT5pbWFnZShyZW5kZXJlciksIGhv
dFNwb3QpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQg
UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW0KICAgICAgICAgICAgIEhUTUxJbWFn
ZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihl
bGVtZW50KTsKICAgICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGlt
YWdlRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOwogICAgICAgICAg
ICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgp
OwotICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJbWFnZSwgdXJsKTsKKyAg
ICAgICAgICAgIGFkZEltYWdlVG9SZXNvdXJjZXMoY2FjaGVkSW1hZ2UsIGltYWdlRWxlbWVudC0+
cmVuZGVyZXIoKSwgdXJsKTsKICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6bGlua1RhZykpIHsKICAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlu
a0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsKICAgICAg
ICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CkBAIC0yODgs
MTYgKzI4OCwxNiBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoCiAg
ICAgfQogfQogCi12b2lkIFBhZ2VTZXJpYWxpemVyOjphZGRJbWFnZVRvUmVzb3VyY2VzKENhY2hl
ZEltYWdlKiBpbWFnZSwgY29uc3QgS1VSTCYgdXJsKQordm9pZCBQYWdlU2VyaWFsaXplcjo6YWRk
SW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJbWFnZSogaW1hZ2UsIFJlbmRlck9iamVjdCogaW1hZ2VS
ZW5kZXJlciwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCBt
X3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IWltYWdlIHx8IGltYWdlLT5pbWFnZSgpID09IEltYWdlOjpudWxsSW1hZ2UoKSkKKyAgICBpZiAo
IWltYWdlIHx8IGltYWdlLT5pbWFnZShpbWFnZVJlbmRlcmVyKSA9PSBJbWFnZTo6bnVsbEltYWdl
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBtaW1lVHlwZSA9IGltYWdlLT5yZXNw
b25zZSgpLm1pbWVUeXBlKCk7Ci0gICAgbV9yZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmws
IG1pbWVUeXBlLCBpbWFnZS0+aW1hZ2UoKS0+ZGF0YSgpKSk7CisgICAgbV9yZXNvdXJjZXMtPmFw
cGVuZChSZXNvdXJjZSh1cmwsIG1pbWVUeXBlLCBpbWFnZS0+aW1hZ2UoaW1hZ2VSZW5kZXJlcikt
PmRhdGEoKSkpOwogICAgIG1fcmVzb3VyY2VVUkxzLmFkZCh1cmwpOwogfQogCkBAIC0zMzcsNyAr
MzM3LDcgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJjZXNGbwogICAgICAg
ICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZEltYWdlKj4oc3R5
bGVJbWFnZSktPmNhY2hlZEltYWdlKCk7CiAKICAgICAgICAgS1VSTCB1cmwgPSBjc3NTdHlsZVNo
ZWV0LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChpbWFnZS0+dXJsKCkpOwotICAgICAgICBhZGRJ
bWFnZVRvUmVzb3VyY2VzKGltYWdlLCB1cmwpOworICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2Vz
KGltYWdlLCAwLCB1cmwpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNl
cmlhbGl6ZXIuaAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgQ1NTU3R5
bGVSdWxlOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgUGFnZTsK
K2NsYXNzIFJlbmRlck9iamVjdDsKIAogLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHNlcmlhbGl6
ZSBhIHBhZ2UgY29udGVudHMgYmFjayB0byB0ZXh0ICh0eXBpY2FsbHkgSFRNTCkuCiAvLyBJdCBz
ZXJpYWxpemVzIGFsbCB0aGUgcGFnZSBmcmFtZXMgYW5kIHJldHJpZXZlcyByZXNvdXJjZXMgc3Vj
aCBhcyBpbWFnZXMgYW5kIENTUyBzdHlsZXNoZWV0cy4KQEAgLTc1LDcgKzc2LDcgQEAgcHJpdmF0
ZToKICAgICAvLyBJdCBhbHNvIGFkZHMgYW55IHJlc291cmNlcyBpbmNsdWRlZCBpbiB0aGF0IHN0
eWxlc2hlZXQgKGluY2x1ZGluZyBhbnkgaW1wb3J0ZWQgc3R5bGVzaGVldHMgYW5kIHRoZWlyIG93
biByZXNvdXJjZXMpLgogICAgIHZvaWQgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNo
ZWV0KiwgY29uc3QgS1VSTCYpOwogCi0gICAgdm9pZCBhZGRJbWFnZVRvUmVzb3VyY2VzKENhY2hl
ZEltYWdlKiwgY29uc3QgS1VSTCYpOworICAgIHZvaWQgYWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNo
ZWRJbWFnZSosIFJlbmRlck9iamVjdCosIGNvbnN0IEtVUkwmKTsKICAgICB2b2lkIHJldHJpZXZl
UmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwogICAgIHZv
aWQgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVsZSopOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDcgKzE5
OCw3IEBAIERyYWdJbWFnZVJlZiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlRHIKICAgICAgICAg
ICAgIGxvYyA9IG1fZHJhZ0xvYzsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobV9kcmFnSW1h
Z2UpIHsKLSAgICAgICAgcmVzdWx0ID0gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKG1fZHJhZ0lt
YWdlLT5pbWFnZSgpKTsKKyAgICAgICAgcmVzdWx0ID0gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdl
KG1fZHJhZ0ltYWdlLT5pbWFnZSgwKSk7CiAgICAgICAgIGxvYyA9IG1fZHJhZ0xvYzsKICAgICB9
CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIyNCwxMCArMjI0LDEwIEBAIHN0YXRpYyB2b2lkIHdy
aXRlSW1hZ2VUb0RhdGFPYmplY3QoQ2hyb20KIHsKICAgICAvLyBTaG92ZSBpbWFnZSBkYXRhIGlu
dG8gYSBEYXRhT2JqZWN0IGZvciB1c2UgYXMgYSBmaWxlCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSB8
fCAhY2FjaGVkSW1hZ2UtPmltYWdlKCkgfHwgIWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQorICAg
IGlmICghY2FjaGVkSW1hZ2UgfHwgIWNhY2hlZEltYWdlLT5pbWFnZShlbGVtZW50LT5yZW5kZXJl
cigpKSB8fCAhY2FjaGVkSW1hZ2UtPmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFNoYXJlZEJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+ZGF0YSgp
OworICAgIFNoYXJlZEJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoZWxl
bWVudC0+cmVuZGVyZXIoKSktPmRhdGEoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFn
ZUJ1ZmZlci0+c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAko
cmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0
ZWJvYXJkQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgdm9p
ZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIENhY2hlZEltYWdlKiBj
YWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwogICAgIGlmICghY2FjaGVkSW1h
Z2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOworICAgIEltYWdlKiBpbWFnZSA9
IGNhY2hlZEltYWdlLT5pbWFnZShyZW5kZXJlcik7CiAgICAgQVNTRVJUKGltYWdlKTsKIAogICAg
IE5hdGl2ZUltYWdlUHRyIGJpdG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZp
c2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxMSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMuaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiAjaWYgUExBVEZPUk0oTUFDKQogI2lmZGVmIF9fT0JKQ19fCkBAIC02NiwxMiArNjYsMTIgQEAg
dHlwZWRlZiBzdHJ1Y3QgX0dka1BpeGJ1ZiBHZGtQaXhidWY7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZs
b2F0UmVjdDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNz
IFNoYXJlZEJ1ZmZlcjsKLWNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIAogLy8gVGhpcyBjbGFzcyBn
ZXRzIG5vdGlmaWVkIHdoZW4gYW4gaW1hZ2UgY3JlYXRlcyBvciBkZXN0cm95cyBkZWNvZGVkIGZy
YW1lcyBhbmQgd2hlbiBpdCBhZHZhbmNlcyBhbmltYXRpb24gZnJhbWVzLgogY2xhc3MgSW1hZ2VP
YnNlcnZlcjsKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEltYWdlPiBsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKTsKICAgICBzdGF0
aWMgYm9vbCBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJik7IAogCisgICAgdmlydHVhbCBib29s
IGlzU1ZHSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0JpdG1hcEltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
Y3VycmVudEZyYW1lSGFzQWxwaGEoKSB7IHJldHVybiBmYWxzZTsgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAkocmV2aXNpb24gOTczNjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYxLDcgKzI2MSw3IEBAIERyYWdJbWFnZVJlZiBDbGlwYm9hcmRHdGs6OmNy
ZWF0ZURyYWdJbWEKICAgICBsb2NhdGlvbiA9IG1fZHJhZ0xvYzsKIAogICAgIGlmIChtX2RyYWdJ
bWFnZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShtX2RyYWdJbWFn
ZS0+aW1hZ2UoKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UobV9k
cmFnSW1hZ2UtPmltYWdlKDApKTsKICAgICBpZiAobV9kcmFnSW1hZ2VFbGVtZW50ICYmIG1fZnJh
bWUpCiAgICAgICAgIHJldHVybiBtX2ZyYW1lLT5ub2RlSW1hZ2UobV9kcmFnSW1hZ2VFbGVtZW50
LmdldCgpKTsKIApAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgQ2xpcGJvYXJkR3RrOjpkZWNsYXJl
QW5kV3JpdGVEcmFnSW0KICAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNMb2FkZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1Jl
ZihpbWFnZS0+aW1hZ2UoKS0+Z2V0R2RrUGl4YnVmKCkpOworICAgIEdSZWZQdHI8R2RrUGl4YnVm
PiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmltYWdlKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5n
ZXRHZGtQaXhidWYoKSk7CiAgICAgaWYgKCFwaXhidWYpCiAgICAgICAgIHJldHVybjsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAkocmV2
aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6
OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0g
cmVuZGVyZXItPmNhY2hlZEltYWdlKCk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCBjYWNoZWRJ
bWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgSW1hZ2UqIGltYWdl
ID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CisgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2Ut
PmltYWdlKHJlbmRlcmVyKTsKICAgICBBU1NFUlQoaW1hZ2UpOwogCiAgICAgR3RrQ2xpcGJvYXJk
KiBjbGlwYm9hcmQgPSBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHJldmlzaW9uIDk3MzYzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDE0LDcgKzQxNCw3IEBAIE5TSW1hZ2UgKkNsaXBib2FyZE1hYzo6ZHJhZ05TSW1hZ2Uo
TlNQb2kKICAgICAgICAgICAgIGxvYy55ID0gaW1hZ2VSZWN0LnNpemUuaGVpZ2h0IC0gbG9jLnk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG1fZHJhZ0ltYWdlKSB7Ci0gICAgICAgIHJlc3Vs
dCA9IG1fZHJhZ0ltYWdlLT5pbWFnZSgpLT5nZXROU0ltYWdlKCk7CisgICAgICAgIHJlc3VsdCA9
IG1fZHJhZ0ltYWdlLT5pbWFnZSgwKS0+Z2V0TlNJbWFnZSgpOwogICAgICAgICAKICAgICAgICAg
bG9jID0gbV9kcmFnTG9jOwogICAgICAgICBsb2MueSA9IFtyZXN1bHQgc2l6ZV0uaGVpZ2h0IC0g
bG9jLnk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRl
ci5tbQkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRN
TENvbnZlcnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc1OSw3ICsxNzU5LDcgQEAgc3RhdGlj
IE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yRWxlbQogICAgIGlmICghd3JhcHBlcikgewog
ICAgICAgICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKGVsZW1lbnQtPnJl
bmRlcmVyKCkpOwogICAgICAgICBpZiAocmVuZGVyZXItPmNhY2hlZEltYWdlKCkgJiYgIXJlbmRl
cmVyLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpIHsKLSAgICAgICAgICAgIHdyYXBw
ZXIgPSBbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czoo
TlNEYXRhICopKHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpLT5nZXRUSUZGUmVwcmVz
ZW50YXRpb24oKSldOworICAgICAgICAgICAgd3JhcHBlciA9IFtbTlNGaWxlV3JhcHBlciBhbGxv
Y10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOihOU0RhdGEgKikocmVuZGVyZXItPmNhY2hl
ZEltYWdlKCktPmltYWdlKHJlbmRlcmVyKS0+Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkpXTsKICAg
ICAgICAgICAgIFt3cmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOkAiaW1hZ2UudGlmZiJdOwog
ICAgICAgICAgICAgW3dyYXBwZXIgYXV0b3JlbGVhc2VdOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkocmV2aXNpb24gOTcz
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFn
ZShOb2RlKiBub2RlLCAKICAgICBbbV9wYXN0ZWJvYXJkLmdldCgpIGRlY2xhcmVUeXBlczp0eXBl
cyBvd25lcjpuaWxdOwogICAgIHdyaXRlVVJMKG1fcGFzdGVib2FyZC5nZXQoKSwgdHlwZXMsIGNv
Y29hVVJMLCBuc1N0cmluZ05pbElmRW1wdHkodGl0bGUpLCBmcmFtZSk7CiAgICAgCi0gICAgSW1h
Z2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CisgICAgSW1hZ2UqIGltYWdlID0gY2Fj
aGVkSW1hZ2UtPmltYWdlKHJlbmRlcmVyKTsKICAgICBBU1NFUlQoaW1hZ2UpOwogICAgIAogICAg
IFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0RGF0YTpbaW1hZ2UtPmdldE5TSW1hZ2UoKSBUSUZGUmVw
cmVzZW50YXRpb25dIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU0LDcgKzI1NCw3IEBAIERyYWdJbWFnZVJlZiBDbGlwYm9hcmRRdDo6Y3JlYXRlRHJhZ0lt
YWcKICAgICBpZiAoIW1fZHJhZ0ltYWdlKQogICAgICAgICByZXR1cm4gMDsKICAgICBkcmFnTG9j
ID0gbV9kcmFnTG9jOwotICAgIHJldHVybiBtX2RyYWdJbWFnZS0+aW1hZ2UoKS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICByZXR1cm4gbV9kcmFnSW1hZ2UtPmltYWdlKDApLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogfQogCiAKQEAgLTI4Miw5ICsyODIsOSBAQCB2
b2lkIENsaXBib2FyZFF0OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hCiAgICAgICAgIG1fd3JpdGFi
bGVEYXRhID0gbmV3IFFNaW1lRGF0YTsKIAogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9
IGdldENhY2hlZEltYWdlKGVsZW1lbnQpOwotICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWNhY2hl
ZEltYWdlLT5pbWFnZSgpIHx8ICFjYWNoZWRJbWFnZS0+aXNMb2FkZWQoKSkKKyAgICBpZiAoIWNh
Y2hlZEltYWdlIHx8ICFjYWNoZWRJbWFnZS0+aW1hZ2UoZWxlbWVudC0+cmVuZGVyZXIoKSkgfHwg
IWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgUVBpeG1hcCog
cGl4bWFwID0gY2FjaGVkSW1hZ2UtPmltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgUVBpeG1hcCogcGl4bWFwID0gY2FjaGVkSW1hZ2UtPmltYWdlKGVsZW1lbnQtPnJl
bmRlcmVyKCkpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmIChwaXhtYXAp
CiAgICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXRJbWFnZURhdGEoKnBpeG1hcCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcAkocmV2aXNpb24g
OTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUlt
YWdlKE5vZGUqIG5vZGUsIAogICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVy
cm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2UqIGltYWdlID0gY2Fj
aGVkSW1hZ2UtPmltYWdlKCk7CisgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdl
KG5vZGUoKS0+cmVuZGVyZXIoKSk7CiAgICAgQVNTRVJUKGltYWdlKTsKIAogICAgIFFQaXhtYXAq
IHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAJKHJldmlzaW9uIDk3
MzYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBzdGF0aWMgSEdMT0JBTCBjcmVhdGVHbG9i
YWxIRHJvcENvbnRlbnQoCiBzdGF0aWMgSEdMT0JBTCBjcmVhdGVHbG9iYWxJbWFnZUZpbGVEZXNj
cmlwdG9yKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBDYWNoZWRJbWFn
ZSogaW1hZ2UpCiB7CiAgICAgQVNTRVJUX0FSRyhpbWFnZSwgaW1hZ2UpOwotICAgIEFTU0VSVChp
bWFnZS0+aW1hZ2UoKS0+ZGF0YSgpKTsKKyAgICBBU1NFUlQoaW1hZ2UtPmltYWdlKDApLT5kYXRh
KCkpOwogCiAgICAgSFJFU1VMVCBociA9IFNfT0s7CiAgICAgSEdMT0JBTCBtZW1PYmogPSAwOwpA
QCAtMjUyLDEwICsyNTIsMTAgQEAgc3RhdGljIEhHTE9CQUwgY3JlYXRlR2xvYmFsSW1hZ2VGaWxl
RGVzYwogICAgIG1lbXNldChmZ2QsIDAsIHNpemVvZihGSUxFR1JPVVBERVNDUklQVE9SKSk7CiAg
ICAgZmdkLT5jSXRlbXMgPSAxOwogICAgIGZnZC0+ZmdkWzBdLmR3RmxhZ3MgPSBGRF9GSUxFU0la
RTsKLSAgICBmZ2QtPmZnZFswXS5uRmlsZVNpemVMb3cgPSBpbWFnZS0+aW1hZ2UoKS0+ZGF0YSgp
LT5zaXplKCk7CisgICAgZmdkLT5mZ2RbMF0ubkZpbGVTaXplTG93ID0gaW1hZ2UtPmltYWdlKDAp
LT5kYXRhKCktPnNpemUoKTsKICAgICAKICAgICBjb25zdCBTdHJpbmcmIHByZWZlcnJlZFRpdGxl
ID0gdGl0bGUuaXNFbXB0eSgpID8gaW1hZ2UtPnJlc3BvbnNlKCkuc3VnZ2VzdGVkRmlsZW5hbWUo
KSA6IHRpdGxlOwotICAgIFN0cmluZyBleHRlbnNpb24gPSBpbWFnZS0+aW1hZ2UoKS0+ZmlsZW5h
bWVFeHRlbnNpb24oKTsKKyAgICBTdHJpbmcgZXh0ZW5zaW9uID0gaW1hZ2UtPmltYWdlKDApLT5m
aWxlbmFtZUV4dGVuc2lvbigpOwogICAgIGlmIChleHRlbnNpb24uaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIERvIG5vdCBjb250aW51ZSBwcm9jZXNzaW5nIGluIHRoZSByYXJlIGFuZCB1bnVzdWFs
IGNhc2Ugd2hlcmUgYSBkZWNvZGVkIGltYWdlIGlzIG5vdCBhYmxlIAogICAgICAgICAvLyB0byBw
cm92aWRlIGEgZmlsZW5hbWUgZXh0ZW5zaW9uLiBTb21ldGhpbmcgdHJpY2t5IChsaWtlIGEgYmFp
dC1uLXN3aXRjaCkgaXMgZ29pbmcgb24KQEAgLTYwNiw3ICs2MDYsNyBAQCBEcmFnSW1hZ2VSZWYg
Q2xpcGJvYXJkV2luOjpjcmVhdGVEcmFnSW1hCiB7CiAgICAgSEJJVE1BUCByZXN1bHQgPSAwOwog
ICAgIGlmIChtX2RyYWdJbWFnZSkgewotICAgICAgICByZXN1bHQgPSBjcmVhdGVEcmFnSW1hZ2VG
cm9tSW1hZ2UobV9kcmFnSW1hZ2UtPmltYWdlKCkpOyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9
IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShtX2RyYWdJbWFnZS0+aW1hZ2UoMCkpOyAgICAgICAg
CiAgICAgICAgIGxvYyA9IG1fZHJhZ0xvYzsKICAgICB9IGVsc2UgaWYgKG1fZHJhZ0ltYWdlRWxl
bWVudCkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9kcmFnSW1hZ2VFbGVtZW50LmdldCgpOwpA
QCAtNjM1LDEwICs2MzUsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChJ
RGF0YQogewogICAgIC8vIFNob3ZlIGltYWdlIGRhdGEgaW50byBhIERhdGFPYmplY3QgZm9yIHVz
ZSBhcyBhIGZpbGUKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBnZXRDYWNoZWRJbWFn
ZShlbGVtZW50KTsKLSAgICBpZiAoIWNhY2hlZEltYWdlIHx8ICFjYWNoZWRJbWFnZS0+aW1hZ2Uo
KSB8fCAhY2FjaGVkSW1hZ2UtPmlzTG9hZGVkKCkpCisgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAh
Y2FjaGVkSW1hZ2UtPmltYWdlKGVsZW1lbnQtPnJlbmRlcmVyKCkpIHx8ICFjYWNoZWRJbWFnZS0+
aXNMb2FkZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hhcmVkQnVmZmVyKiBpbWFnZUJ1
ZmZlciA9IGNhY2hlZEltYWdlLT5pbWFnZSgpLT5kYXRhKCk7CisgICAgU2hhcmVkQnVmZmVyKiBp
bWFnZUJ1ZmZlciA9IGNhY2hlZEltYWdlLT5pbWFnZShlbGVtZW50LT5yZW5kZXJlcigpKS0+ZGF0
YSgpOwogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyLT5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9h
cmRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0
ZWJvYXJkV2luLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsNyBA
QCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgQ2FjaGVkSW1h
Z2UqIGNhY2hlZEltYWdlID0gcmVuZGVyZXItPmNhY2hlZEltYWdlKCk7CiAgICAgaWYgKCFjYWNo
ZWRJbWFnZSB8fCBjYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CisgICAgSW1hZ2UqIGlt
YWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKHJlbmRlcmVyKTsKICAgICBBU1NFUlQoaW1hZ2UpOwog
CiAgICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL1Bhc3Rl
Ym9hcmRXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
Y2UvUGFzdGVib2FyZFdpbkNFLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW5jZS9QYXN0ZWJvYXJkV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDgsNyArMjA4LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAog
ICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4obm9k
ZS0+cmVuZGVyZXIoKSk7CiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gc3RhdGljX2Nh
c3Q8Q2FjaGVkSW1hZ2UqPihyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKSk7CiAgICAgQVNTRVJUKGNh
Y2hlZEltYWdlKTsKLSAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKKyAg
ICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UocmVuZGVyZXIpOwogICAgIEFTU0VS
VChpbWFnZSk7CiAKICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw3ICszMDQs
NyBAQCBJbWFnZSogSGl0VGVzdFJlc3VsdDo6aW1hZ2UoKSBjb25zdAogICAgIGlmIChyZW5kZXJl
ciAmJiByZW5kZXJlci0+aXNJbWFnZSgpKSB7CiAgICAgICAgIFJlbmRlckltYWdlKiBpbWFnZSA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlJlbmRlckltYWdlKj4ocmVuZGVyZXIpOwogICAgICAgICBp
ZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9j
Y3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdl
KCk7CisgICAgICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlKGltYWdl
KTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc0LDcgKzEw
NzQsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50RmlsbExheWVycyhjb25zCiB2b2lkIElu
bGluZUZsb3dCb3g6OnBhaW50RmlsbExheWVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBDb2xvciYgYywgY29uc3QgRmlsbExheWVyKiBmaWxsTGF5ZXIsIGNvbnN0IExheW91dFJl
Y3QmIHJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIFN0eWxlSW1hZ2UqIGltZyA9
IGZpbGxMYXllci0+aW1hZ2UoKTsKLSAgICBib29sIGhhc0ZpbGxJbWFnZSA9IGltZyAmJiBpbWct
PmNhblJlbmRlcihyZW5kZXJlcigpLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgIGJv
b2wgaGFzRmlsbEltYWdlID0gaW1nICYmIGltZy0+Y2FuUmVuZGVyKHJlbmRlcmVyKCksIHJlbmRl
cmVyKCktPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgaWYgKCghaGFzRmlsbEltYWdl
ICYmICFyZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNCb3JkZXJSYWRpdXMoKSkgfHwgKCFwcmV2TGlu
ZUJveCgpICYmICFuZXh0TGluZUJveCgpKSB8fCAhcGFyZW50KCkpCiAgICAgICAgIGJveE1vZGVs
T2JqZWN0KCktPnBhaW50RmlsbExheWVyRXh0ZW5kZWQocGFpbnRJbmZvLCBjLCBmaWxsTGF5ZXIs
IHJlY3QsIEJhY2tncm91bmRCbGVlZE5vbmUsIHRoaXMsIHJlY3Quc2l6ZSgpLCBvcCk7CiAgICAg
ZWxzZSB7CkBAIC0xMjA2LDcgKzEyMDYsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50Qm94
RGVjb3JhdGlvbnMoCiAgICAgICAgIGlmIChwYXJlbnQoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgp
LT5oYXNCb3JkZXIoKSkgewogICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGJvcmRl
ckltYWdlID0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVySW1hZ2UoKTsKICAgICAgICAgICAg
IFN0eWxlSW1hZ2UqIGJvcmRlckltYWdlU291cmNlID0gYm9yZGVySW1hZ2UuaW1hZ2UoKTsKLSAg
ICAgICAgICAgIGJvb2wgaGFzQm9yZGVySW1hZ2UgPSBib3JkZXJJbWFnZVNvdXJjZSAmJiBib3Jk
ZXJJbWFnZVNvdXJjZS0+Y2FuUmVuZGVyKHN0eWxlVG9Vc2UtPmVmZmVjdGl2ZVpvb20oKSk7Cisg
ICAgICAgICAgICBib29sIGhhc0JvcmRlckltYWdlID0gYm9yZGVySW1hZ2VTb3VyY2UgJiYgYm9y
ZGVySW1hZ2VTb3VyY2UtPmNhblJlbmRlcihyZW5kZXJlcigpLCBzdHlsZVRvVXNlLT5lZmZlY3Rp
dmVab29tKCkpOwogICAgICAgICAgICAgaWYgKGhhc0JvcmRlckltYWdlICYmICFib3JkZXJJbWFn
ZVNvdXJjZS0+aXNMb2FkZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47IC8vIERvbid0IHBh
aW50IGFueXRoaW5nIHdoaWxlIHdlIHdhaXQgZm9yIHRoZSBpbWFnZSB0byBsb2FkLgogCkBAIC0x
MjgwLDcgKzEyODAsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50TWFzayhQYWludEluZm8m
CiAgICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSBMYXlvdXRSZWN0KGFkanVzdGVkUGFpbnRPZmZz
ZXQsIGZyYW1lUmVjdC5zaXplKCkpOwogICAgIHBhaW50RmlsbExheWVycyhwYWludEluZm8sIENv
bG9yKCksIHJlbmRlcmVyKCktPnN0eWxlKCktPm1hc2tMYXllcnMoKSwgcGFpbnRSZWN0LCBjb21w
b3NpdGVPcCk7CiAgICAgCi0gICAgYm9vbCBoYXNCb3hJbWFnZSA9IG1hc2tCb3hJbWFnZSAmJiBt
YXNrQm94SW1hZ2UtPmNhblJlbmRlcihyZW5kZXJlcigpLT5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpOworICAgIGJvb2wgaGFzQm94SW1hZ2UgPSBtYXNrQm94SW1hZ2UgJiYgbWFza0JveEltYWdl
LT5jYW5SZW5kZXIocmVuZGVyZXIoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKTsKICAgICBpZiAoIWhhc0JveEltYWdlIHx8ICFtYXNrQm94SW1hZ2UtPmlzTG9hZGVkKCkp
CiAgICAgICAgIHJldHVybjsgLy8gRG9uJ3QgcGFpbnQgYW55dGhpbmcgd2hpbGUgd2Ugd2FpdCBm
b3IgdGhlIGltYWdlIHRvIGxvYWQuCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2b2lkIFJl
bmRlckJveDo6cGFpbnRNYXNrSW1hZ2VzKGNvbnN0IFBhCiAgICAgICAgICAgICAvLyBXZSBoYXZl
IHRvIGNoZWNrIHRoYXQgdGhlIG1hc2sgaW1hZ2VzIHRvIGJlIHJlbmRlcmVkIGNvbnRhaW4gYXQg
bGVhc3Qgb25lIGltYWdlIHRoYXQgY2FuIGJlIGFjdHVhbGx5IHVzZWQgaW4gcmVuZGVyaW5nCiAg
ICAgICAgICAgICAvLyBiZWZvcmUgcHVzaGluZyB0aGUgdHJhbnNwYXJlbmN5IGxheWVyLgogICAg
ICAgICAgICAgZm9yIChjb25zdCBGaWxsTGF5ZXIqIGZpbGxMYXllciA9IG1hc2tMYXllcnMtPm5l
eHQoKTsgZmlsbExheWVyOyBmaWxsTGF5ZXIgPSBmaWxsTGF5ZXItPm5leHQoKSkgewotICAgICAg
ICAgICAgICAgIGlmIChmaWxsTGF5ZXItPmltYWdlKCkgJiYgZmlsbExheWVyLT5pbWFnZSgpLT5j
YW5SZW5kZXIoc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkgeworICAgICAgICAgICAgICAgIGlm
IChmaWxsTGF5ZXItPmltYWdlKCkgJiYgZmlsbExheWVyLT5pbWFnZSgpLT5jYW5SZW5kZXIodGhp
cywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkgewogICAgICAgICAgICAgICAgICAgICBwdXNo
VHJhbnNwYXJlbmN5TGF5ZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyBXZSBmb3Vu
ZCBvbmUgaW1hZ2UgdGhhdCBjYW4gYmUgdXNlZCBpbiByZW5kZXJpbmcsIGV4aXQgdGhlIGxvb3AK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTMwLDcgKzExMzAsNyBAQCBib29sIFJl
bmRlckJveDo6cmVwYWludExheWVyUmVjdHNGb3JJbWFnCiAgICAgUmVuZGVyQm94KiBsYXllclJl
bmRlcmVyID0gMDsKIAogICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBjdXJMYXllciA9IGxheWVy
czsgY3VyTGF5ZXI7IGN1ckxheWVyID0gY3VyTGF5ZXItPm5leHQoKSkgewotICAgICAgICBpZiAo
Y3VyTGF5ZXItPmltYWdlKCkgJiYgaW1hZ2UgPT0gY3VyTGF5ZXItPmltYWdlKCktPmRhdGEoKSAm
JiBjdXJMYXllci0+aW1hZ2UoKS0+Y2FuUmVuZGVyKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkp
IHsKKyAgICAgICAgaWYgKGN1ckxheWVyLT5pbWFnZSgpICYmIGltYWdlID09IGN1ckxheWVyLT5p
bWFnZSgpLT5kYXRhKCkgJiYgY3VyTGF5ZXItPmltYWdlKCktPmNhblJlbmRlcih0aGlzLCBzdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpKSB7CiAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93
IHRoaXMgaW1hZ2UgaXMgYmVpbmcgdXNlZCwgY29tcHV0ZSB0aGUgcmVuZGVyZXIgYW5kIHRoZSBy
ZWN0CiAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlbid0IGFscmVhZHkKICAgICAgICAgICAgIGlm
ICghbGF5ZXJSZW5kZXJlcikgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyOSw3ICs2MjksNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxM
YXllCiAKICAgICBDb2xvciBiZ0NvbG9yID0gY29sb3I7CiAgICAgU3R5bGVJbWFnZSogYmdJbWFn
ZSA9IGJnTGF5ZXItPmltYWdlKCk7Ci0gICAgYm9vbCBzaG91bGRQYWludEJhY2tncm91bmRJbWFn
ZSA9IGJnSW1hZ2UgJiYgYmdJbWFnZS0+Y2FuUmVuZGVyKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSk7CisgICAgYm9vbCBzaG91bGRQYWludEJhY2tncm91bmRJbWFnZSA9IGJnSW1hZ2UgJiYgYmdJ
bWFnZS0+Y2FuUmVuZGVyKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgCiAg
ICAgLy8gV2hlbiB0aGlzIHN0eWxlIGZsYWcgaXMgc2V0LCBjaGFuZ2UgZXhpc3RpbmcgYmFja2dy
b3VuZCBjb2xvcnMgYW5kIGltYWdlcyB0byBhIHNvbGlkIHdoaXRlIGJhY2tncm91bmQuCiAgICAg
Ly8gSWYgdGhlcmUncyBubyBiZyBjb2xvciBvciBpbWFnZSwgbGVhdmUgaXQgdW50b3VjaGVkIHRv
IGF2b2lkIGFmZmVjdGluZyB0cmFuc3BhcmVuY3kuCkBAIC04MDMsNyArODAzLDcgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogTGF5b3V0U2l6ZSBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6Y2FsY3VsYXRlRmlsbFRpbGVTaXplKGNvbnN0IEZpbGxMYXllciogZmlsbExh
eWVyLCBMYXlvdXRTaXplIHBvc2l0aW9uaW5nQXJlYVNpemUpIGNvbnN0CiB7CiAgICAgU3R5bGVJ
bWFnZSogaW1hZ2UgPSBmaWxsTGF5ZXItPmltYWdlKCk7Ci0gICAgaW1hZ2UtPnNldEltYWdlQ29u
dGFpbmVyU2l6ZShwb3NpdGlvbmluZ0FyZWFTaXplKTsgLy8gVXNlIHRoZSBib3ggZXN0YWJsaXNo
ZWQgYnkgYmFja2dyb3VuZC1vcmlnaW4uCisgICAgaW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6
ZSh0aGlzLCBwb3NpdGlvbmluZ0FyZWFTaXplKTsgLy8gVXNlIHRoZSBib3ggZXN0YWJsaXNoZWQg
YnkgYmFja2dyb3VuZC1vcmlnaW4uCiAKICAgICBFRmlsbFNpemVUeXBlIHR5cGUgPSBmaWxsTGF5
ZXItPnNpemUoKS50eXBlOwogCkBAIC05ODgsNyArOTg4LDcgQEAgYm9vbCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnROaW5lUGllYwogICAgIGlmICghc3R5bGVJbWFnZS0+aXNMb2FkZWQoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIE5ldmVyIHBhaW50IGEgbmluZS1waWVjZSBpbWFnZSBp
bmNyZW1lbnRhbGx5LCBidXQgZG9uJ3QgcGFpbnQgdGhlIGZhbGxiYWNrIGJvcmRlcnMgZWl0aGVy
LgogCi0gICAgaWYgKCFzdHlsZUltYWdlLT5jYW5SZW5kZXIoc3R5bGUtPmVmZmVjdGl2ZVpvb20o
KSkpCisgICAgaWYgKCFzdHlsZUltYWdlLT5jYW5SZW5kZXIodGhpcywgc3R5bGUtPmVmZmVjdGl2
ZVpvb20oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBib3JkZXIt
aW1hZ2UgaXMgYnJva2VuIHdpdGggZnVsbCBwYWdlIHpvb21pbmcgd2hlbiB0aWxpbmcgaGFzIHRv
IGhhcHBlbiwgc2luY2UgdGhlIHRpbGluZyBmdW5jdGlvbgpAQCAtMTAwNSw3ICsxMDA1LDcgQEAg
Ym9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllYwogICAgIExheW91dFVuaXQg
cmlnaHRXaXRoT3V0c2V0ID0gcmVjdC5tYXhYKCkgKyByaWdodE91dHNldDsKICAgICBMYXlvdXRS
ZWN0IGJvcmRlckltYWdlUmVjdCA9IExheW91dFJlY3QobGVmdFdpdGhPdXRzZXQsIHRvcFdpdGhP
dXRzZXQsIHJpZ2h0V2l0aE91dHNldCAtIGxlZnRXaXRoT3V0c2V0LCBib3R0b21XaXRoT3V0c2V0
IC0gdG9wV2l0aE91dHNldCk7CiAKLSAgICBzdHlsZUltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNp
emUoYm9yZGVySW1hZ2VSZWN0LnNpemUoKSk7CisgICAgc3R5bGVJbWFnZS0+c2V0SW1hZ2VDb250
YWluZXJTaXplKHRoaXMsIGJvcmRlckltYWdlUmVjdC5zaXplKCkpOwogICAgIExheW91dFNpemUg
aW1hZ2VTaXplID0gc3R5bGVJbWFnZS0+aW1hZ2VTaXplKHRoaXMsIDEuMGYpOwogICAgIExheW91
dFVuaXQgaW1hZ2VXaWR0aCA9IGltYWdlU2l6ZS53aWR0aCgpOwogICAgIExheW91dFVuaXQgaW1h
Z2VIZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBA
QCBzdGF0aWMgY29uc3QgaW50IG1heEFsdFRleHRIZWlnaHQgPSAyNTY7CiBJbnRTaXplIFJlbmRl
ckltYWdlOjppbWFnZVNpemVGb3JFcnJvcihDYWNoZWRJbWFnZSogbmV3SW1hZ2UpIGNvbnN0CiB7
CiAgICAgQVNTRVJUX0FSRyhuZXdJbWFnZSwgbmV3SW1hZ2UpOwotICAgIEFTU0VSVF9BUkcobmV3
SW1hZ2UsIG5ld0ltYWdlLT5pbWFnZSgpKTsKKyAgICBBU1NFUlRfQVJHKG5ld0ltYWdlLCBuZXdJ
bWFnZS0+aW1hZ2UodGhpcykpOwogCiAgICAgSW50U2l6ZSBpbWFnZVNpemU7CiAgICAgaWYgKG5l
d0ltYWdlLT53aWxsUGFpbnRCcm9rZW5JbWFnZSgpKSB7CkBAIC05MSw3ICs5MSw3IEBAIEludFNp
emUgUmVuZGVySW1hZ2U6OmltYWdlU2l6ZUZvckVycm9yKEMKICAgICAgICAgaW1hZ2VTaXplID0g
YnJva2VuSW1hZ2VBbmRJbWFnZVNjYWxlRmFjdG9yLmZpcnN0LT5zaXplKCk7CiAgICAgICAgIGlt
YWdlU2l6ZS5zY2FsZSgxIC8gYnJva2VuSW1hZ2VBbmRJbWFnZVNjYWxlRmFjdG9yLnNlY29uZCk7
CiAgICAgfSBlbHNlCi0gICAgICAgIGltYWdlU2l6ZSA9IG5ld0ltYWdlLT5pbWFnZSgpLT5zaXpl
KCk7CisgICAgICAgIGltYWdlU2l6ZSA9IG5ld0ltYWdlLT5pbWFnZSh0aGlzKS0+c2l6ZSgpOwog
CiAgICAgLy8gaW1hZ2VTaXplKCkgcmV0dXJucyAwIGZvciB0aGUgZXJyb3IgaW1hZ2UuIFdlIG5l
ZWQgdGhlIHRydWUgc2l6ZSBvZiB0aGUKICAgICAvLyBlcnJvciBpbWFnZSwgc28gd2UgaGF2ZSB0
byBnZXQgaXQgYnkgZ3JhYmJpbmcgaW1hZ2UoKSBkaXJlY3RseS4KQEAgLTEwMyw3ICsxMDMsNyBA
QCBJbnRTaXplIFJlbmRlckltYWdlOjppbWFnZVNpemVGb3JFcnJvcihDCiBib29sIFJlbmRlcklt
YWdlOjpzZXRJbWFnZVNpemVGb3JBbHRUZXh0KENhY2hlZEltYWdlKiBuZXdJbWFnZSAvKiA9IDAg
Ki8pCiB7CiAgICAgSW50U2l6ZSBpbWFnZVNpemU7Ci0gICAgaWYgKG5ld0ltYWdlICYmIG5ld0lt
YWdlLT5pbWFnZSgpKQorICAgIGlmIChuZXdJbWFnZSAmJiBuZXdJbWFnZS0+aW1hZ2UodGhpcykp
CiAgICAgICAgIGltYWdlU2l6ZSA9IGltYWdlU2l6ZUZvckVycm9yKG5ld0ltYWdlKTsKICAgICBl
bHNlIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSB8fCBuZXdJbWFnZSkgewogICAgICAgICAvLyBJ
ZiB3ZSdsbCBiZSBkaXNwbGF5aW5nIGVpdGhlciB0ZXh0IG9yIGFuIGltYWdlLCBhZGQgYSBsaXR0
bGUgcGFkZGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJl
c291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2VSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxNCAr
ODksMTEgQEAgdm9pZCBSZW5kZXJJbWFnZVJlc291cmNlOjpyZXNldEFuaW1hdGlvbgogICAgICAg
ICBtX3JlbmRlcmVyLT5yZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVuZGVySW1hZ2VSZXNvdXJjZTo6
c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit2b2lkIFJl
bmRlckltYWdlUmVzb3VyY2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBp
bWFnZUNvbnRhaW5lclNpemUpCiB7CiAgICAgQVNTRVJUKG1fcmVuZGVyZXIpOwotCi0gICAgaWYg
KCFtX2NhY2hlZEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NhY2hlZEltYWdlLT5z
ZXRJbWFnZUNvbnRhaW5lclNpemUoc2l6ZSk7CisgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCisgICAg
ICAgIG1fY2FjaGVkSW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShtX3JlbmRlcmVyLCBpbWFn
ZUNvbnRhaW5lclNpemUpOwogfQogCiBJbWFnZSogUmVuZGVySW1hZ2VSZXNvdXJjZTo6bnVsbElt
YWdlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVz
b3VyY2UuaAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2VSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNSArNTQsMTUgQEAgcHVi
bGljOgogCiAgICAgdm9pZCByZXNldEFuaW1hdGlvbigpOwogCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPEltYWdlPiBpbWFnZShpbnQgLyogd2lkdGggKi8gPSAwLCBpbnQgLyogaGVpZ2h0ICovID0g
MCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPmltYWdlKCkg
OiBudWxsSW1hZ2UoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoaW50
IC8qIHdpZHRoICovID0gMCwgaW50IC8qIGhlaWdodCAqLyA9IDApIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT5pbWFnZShtX3JlbmRlcmVyKSA6IG51bGxJbWFn
ZSgpOyB9CiAgICAgdmlydHVhbCBib29sIGVycm9yT2NjdXJyZWQoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlZEltYWdlICYmIG1fY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKTsgfQogCi0gICAg
dmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNp
emUmKTsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT51c2VzSW1hZ2VDb250YWluZXJT
aXplKCkgOiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2VIYXNS
ZWxhdGl2ZVdpZHRoKCkgOiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0
aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2Ut
PmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSA6IGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIEludFNp
emUgaW1hZ2VTaXplKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1h
Z2UgPyBtX2NhY2hlZEltYWdlLT5pbWFnZVNpemUobXVsdGlwbGllcikgOiBJbnRTaXplKCk7IH0K
KyAgICB2aXJ0dWFsIEludFNpemUgaW1hZ2VTaXplKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT5pbWFnZVNpemUobV9yZW5kZXJl
ciwgbXVsdGlwbGllcikgOiBJbnRTaXplKCk7IH0KIAogICAgIHZpcnR1YWwgV3JhcHBlZEltYWdl
UHRyIGltYWdlUHRyKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZS5nZXQoKTsgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1h
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VS
ZXNvdXJjZVN0eWxlSW1hZ2UuaAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBp
bWFnZShpbnQgd2lkdGggPSAwLCBpbnQgaGVpZ2h0ID0gMCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZUltYWdlLT5pbWFnZShtX3JlbmRlcmVyLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsgfQogICAg
IHZpcnR1YWwgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZUltYWdl
LT5lcnJvck9jY3VycmVkKCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5l
clNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QgeyBtX3N0eWxlSW1hZ2UtPnNldEltYWdl
Q29udGFpbmVyU2l6ZShzaXplKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5l
clNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgeyBtX3N0eWxlSW1hZ2UtPnNldEltYWdlQ29udGFp
bmVyU2l6ZShtX3JlbmRlcmVyLCBzaXplKTsgfQogICAgIHZpcnR1YWwgYm9vbCB1c2VzSW1hZ2VD
b250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZUltYWdlLT51c2VzSW1hZ2VDb250
YWluZXJTaXplKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZUltYWdlLT5pbWFnZUhhc1JlbGF0aXZlV2lkdGgoKTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9zdHlsZUltYWdlLT5pbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCk7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiA5
NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MjYsNyArOTI2LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tp
bmc6OmlzRGlyZWN0bHlDb21wbwogICAgIFJlbmRlckltYWdlKiBpbWFnZVJlbmRlcmVyID0gdG9S
ZW5kZXJJbWFnZShyZW5kZXJPYmplY3QpOwogICAgIGlmIChDYWNoZWRJbWFnZSogY2FjaGVkSW1h
Z2UgPSBpbWFnZVJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpKSB7CiAgICAgICAgIGlmIChjYWNoZWRJ
bWFnZS0+aGFzSW1hZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBjYWNoZWRJbWFnZS0+aW1hZ2Uo
KS0+aXNCaXRtYXBJbWFnZSgpOworICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlLT5pbWFn
ZShpbWFnZVJlbmRlcmVyKS0+aXNCaXRtYXBJbWFnZSgpOwogICAgIH0KIAogICAgIHJldHVybiBm
YWxzZTsKQEAgLTk2Myw3ICs5NjMsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
SW1hZ2VDb250CiAgICAgaWYgKCFjYWNoZWRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CisgICAgSW1hZ2UqIGltYWdlID0g
Y2FjaGVkSW1hZ2UtPmltYWdlKGltYWdlUmVuZGVyZXIpOwogICAgIGlmICghaW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNTAsNyArMTM1MCw3
IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVByZWZlcnJlZEwKICAgICAgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSBzb21ld2hhdCBhcmJpdHJhcnkgd2lkdGguICBHZW5lcmF0ZWQgaW1h
Z2VzIGZvciBtYXJrZXJzIHJlYWxseSB3b24ndCBiZWNvbWUgcGFydGljdWxhcmx5IHVzZWZ1bAog
ICAgICAgICAvLyB1bnRpbCB3ZSBzdXBwb3J0IHRoZSBDU1MzIG1hcmtlciBwc2V1ZG9jbGFzcyB0
byBhbGxvdyBjb250cm9sIG92ZXIgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIG1hcmtlciBi
b3guCiAgICAgICAgIExheW91dFVuaXQgYnVsbGV0V2lkdGggPSBmb250TWV0cmljcy5hc2NlbnQo
KSAvIDI7Ci0gICAgICAgIG1faW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShMYXlvdXRTaXpl
KGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCkpOworICAgICAgICBtX2ltYWdlLT5zZXRJbWFnZUNv
bnRhaW5lclNpemUodGhpcywgTGF5b3V0U2l6ZShidWxsZXRXaWR0aCwgYnVsbGV0V2lkdGgpKTsK
ICAgICAgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlLT5pbWFnZVNpemUodGhpcywg
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBpbWFnZVNpemUud2lkdGgoKSA6IGltYWdlU2l6ZS5oZWlnaHQoKTsK
ICAgICAgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA5NzM2MykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NDUsNyArNzQ1LDcgQEAgc3RhdGljIGJvb2wgbXVzdFJlcGFpbnRGaWxsTGF5ZXJz
KGNvbnN0IAogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBpbWFnZS4KICAgICBT
dHlsZUltYWdlKiBpbWcgPSBsYXllci0+aW1hZ2UoKTsKLSAgICBpZiAoIWltZyB8fCAhaW1nLT5j
YW5SZW5kZXIocmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpCisgICAgaWYgKCFp
bWcgfHwgIWltZy0+Y2FuUmVuZGVyKHJlbmRlcmVyLCByZW5kZXJlci0+c3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFsYXllci0+eFBv
c2l0aW9uKCkuaXNaZXJvKCkgfHwgIWxheWVyLT55UG9zaXRpb24oKS5pc1plcm8oKSkKQEAgLTc2
NSw3ICs3NjUsNyBAQCBib29sIFJlbmRlck9iamVjdDo6Ym9yZGVySW1hZ2VJc0xvYWRlZEFuCiAg
ICAgQVNTRVJUKHN0eWxlKCktPmhhc0JvcmRlcigpKTsKIAogICAgIFN0eWxlSW1hZ2UqIGJvcmRl
ckltYWdlID0gc3R5bGUoKS0+Ym9yZGVySW1hZ2UoKS5pbWFnZSgpOwotICAgIHJldHVybiBib3Jk
ZXJJbWFnZSAmJiBib3JkZXJJbWFnZS0+Y2FuUmVuZGVyKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkgJiYgYm9yZGVySW1hZ2UtPmlzTG9hZGVkKCk7CisgICAgcmV0dXJuIGJvcmRlckltYWdlICYm
IGJvcmRlckltYWdlLT5jYW5SZW5kZXIodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSAm
JiBib3JkZXJJbWFnZS0+aXNMb2FkZWQoKTsKIH0KIAogYm9vbCBSZW5kZXJPYmplY3Q6Om11c3RS
ZXBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDk3
MzYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IFN0eWxlQ2FjaGVkSW1hZ2U6OmMKICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShtX2ltYWdlLT51cmwoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOwogfQogCi1ib29s
IFN0eWxlQ2FjaGVkSW1hZ2U6OmNhblJlbmRlcihmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAorYm9v
bCBTdHlsZUNhY2hlZEltYWdlOjpjYW5SZW5kZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbWFnZS0+Y2FuUmVu
ZGVyKG11bHRpcGxpZXIpOworICAgIHJldHVybiBtX2ltYWdlLT5jYW5SZW5kZXIocmVuZGVyZXIs
IG11bHRpcGxpZXIpOwogfQogCiBib29sIFN0eWxlQ2FjaGVkSW1hZ2U6OmlzTG9hZGVkKCkgY29u
c3QKQEAgLTQ5LDkgKzQ5LDkgQEAgYm9vbCBTdHlsZUNhY2hlZEltYWdlOjplcnJvck9jY3VycmVk
KCkgYwogICAgIHJldHVybiBtX2ltYWdlLT5lcnJvck9jY3VycmVkKCk7CiB9CiAKLUludFNpemUg
U3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2VTaXplKGNvbnN0IFJlbmRlck9iamVjdCogLypyZW5kZXJl
ciovLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAorSW50U2l6ZSBTdHlsZUNhY2hlZEltYWdlOjpp
bWFnZVNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllcikg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9pbWFnZS0+aW1hZ2VTaXplKG11bHRpcGxpZXIpOworICAg
IHJldHVybiBtX2ltYWdlLT5pbWFnZVNpemUocmVuZGVyZXIsIG11bHRpcGxpZXIpOwogfQogCiBi
b29sIFN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0CkBAIC02
OSwyNCArNjksMjQgQEAgYm9vbCBTdHlsZUNhY2hlZEltYWdlOjp1c2VzSW1hZ2VDb250YWluZQog
ICAgIHJldHVybiBtX2ltYWdlLT51c2VzSW1hZ2VDb250YWluZXJTaXplKCk7CiB9CiAKLXZvaWQg
U3R5bGVDYWNoZWRJbWFnZTo6c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNp
emUpCit2b2lkIFN0eWxlQ2FjaGVkSW1hZ2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBpbWFnZUNvbnRhaW5lclNpemUp
CiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShzaXplKTsKKyAg
ICBtX2ltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUocmVuZGVyZXIsIGltYWdlQ29udGFpbmVy
U2l6ZSk7CiB9CiAKIHZvaWQgU3R5bGVDYWNoZWRJbWFnZTo6YWRkQ2xpZW50KFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UtPmFkZENsaWVudChyZW5kZXJlcik7
CisgICAgbV9pbWFnZS0+YWRkQ2xpZW50KHJlbmRlcmVyKTsKIH0KIAogdm9pZCBTdHlsZUNhY2hl
ZEltYWdlOjpyZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1
cm4gbV9pbWFnZS0+cmVtb3ZlQ2xpZW50KHJlbmRlcmVyKTsKKyAgICBtX2ltYWdlLT5yZW1vdmVD
bGllbnQocmVuZGVyZXIpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlPiBTdHlsZUNhY2hlZEltYWdl
OjppbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3QKK1Bhc3NSZWZQdHI8
SW1hZ2U+IFN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IEludFNpemUmKSBjb25zdAogewotICAgIHJldHVybiBtX2ltYWdlLT5pbWFnZSgpOworICAg
IHJldHVybiBtX2ltYWdlLT5pbWFnZShyZW5kZXJlcik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAkocmV2aXNp
b24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJ
bWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNCArNDAsMTQgQEAgcHVibGljOgogICAgIAog
ICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0
KCk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBjYW5SZW5kZXIoZmxvYXQgbXVsdGlwbGllcikgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGNhblJlbmRlcihjb25zdCBSZW5kZXJPYmplY3QqLCBmbG9h
dCBtdWx0aXBsaWVyKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkZWQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgSW50
U2l6ZSBpbWFnZVNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiwgZmxvYXQgbXVsdGlwbGllcikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUm
KTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEltYWdlPiBpbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2Vu
ZXJhdGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
MTEgKzU4LDYgQEAgSW50U2l6ZSBTdHlsZUdlbmVyYXRlZEltYWdlOjppbWFnZVNpemUoYwogICAg
IHJldHVybiBtX2NvbnRhaW5lclNpemU7CiB9CiAKLXZvaWQgU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgbV9jb250
YWluZXJTaXplID0gc2l6ZTsKLX0KLQogdm9pZCBTdHlsZUdlbmVyYXRlZEltYWdlOjphZGRDbGll
bnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBtX2dlbmVyYXRvci0+YWRkQ2xpZW50
KHJlbmRlcmVyLCBJbnRTaXplKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oCShyZXZpc2lvbiA5NzM2MykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBp
bWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCB7IHJldHVybiAhbV9maXhlZFNpemU7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuICFt
X2ZpeGVkU2l6ZTsgfQogICAgIHZpcnR1YWwgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkg
Y29uc3QgeyByZXR1cm4gIW1fZml4ZWRTaXplOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEltYWdl
Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdmlydHVhbCB2b2lkIHNldEltYWdl
Q29udGFpbmVyU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJiBjb250YWlu
ZXJTaXplKSB7IG1fY29udGFpbmVyU2l6ZSA9IGNvbnRhaW5lclNpemU7IH0KICAgICB2aXJ0dWFs
IHZvaWQgYWRkQ2xpZW50KFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
bGllbnQoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBpbWFn
ZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgJKHJldmlzaW9uIDk3MzYzKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksMTQgKzQ5LDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gY3NzVmFsdWUoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2FuUmVu
ZGVyKGZsb2F0IC8qbXVsdGlwbGllciovKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIGNhblJlbmRlcihjb25zdCBSZW5kZXJPYmplY3QqLCBmbG9hdCAvKm11bHRpcGxp
ZXIqLykgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRlZCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgZXJyb3JPY2N1cnJlZCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBJbnRTaXplIGltYWdlU2l6ZShj
b25zdCBSZW5kZXJPYmplY3QqLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRT
aXplJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoUmVuZGVyT2JqZWN0KikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KikgPSAwOwogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50
U2l6ZSYpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZVBlbmRpbmdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxh
dGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaW1h
Z2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgSW50U2l6ZSYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoUmVu
ZGVyT2JqZWN0KikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJPYmpl
Y3QqKSB7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVj
dCosIGNvbnN0IEludFNpemUmKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
SW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBQ
YXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lCiAgICAgICAgIFNWR0ltYWdl
QnVmZmVyVG9vbHM6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKG1fdGFyZ2V0SW1hZ2UuZ2V0
KCksIHJlbmRlcmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOwogICAgIH0KIAotICAgIHJldHVy
biBGRUltYWdlOjpjcmVhdGUoZmlsdGVyLCBtX3RhcmdldEltYWdlID8gbV90YXJnZXRJbWFnZS0+
Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpIDogbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKSwgcHJl
c2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlKGZpbHRlciwg
bV90YXJnZXRJbWFnZSA/IG1fdGFyZ2V0SW1hZ2UtPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3Jl
KSA6IG1fY2FjaGVkSW1hZ2UtPmltYWdlKHJlbmRlcmVyKCkpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KCkpOwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI1LDExICsyNiwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmIEVO
QUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkNhY2hlZFBhZ2Uu
aCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVtcHR5Q2xpZW50cy5o
IgogI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCiAjaW5jbHVkZSAiRmlsZUljb25Mb2FkZXIuaCIK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKQEAgLTQ5LDExICs1Miw2IEBACiAjaW5jbHVkZSAiU1ZH
U1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKLS8vIE1vdmluZyB0aGlzICNp
bmNsdWRlIGFib3ZlIEZyYW1lTG9hZGVyLmggY2F1c2VzIHRoZSBXaW5kb3dzIGJ1aWxkIHRvIGZh
aWwgZHVlIHRvIHdhcm5pbmdzIGFib3V0Ci0vLyBhbGlnbm1lbnQgaW4gVGltZXI8RnJhbWVMb2Fk
ZXI+LiBJdCBzZWVtcyB0aGF0IHRoZSBkZWZpbml0aW9uIG9mIEVtcHR5RnJhbWVMb2FkZXJDbGll
bnQgaXMgd2hhdAotLy8gY2F1c2VzIHRoaXMgKHJlbW92aW5nIHRoYXQgZGVmaW5pdGlvbiBmaXhl
cyB0aGUgd2FybmluZ3MpLCBidXQgaXQgaXNuJ3QgY2xlYXIgd2h5LgotI2luY2x1ZGUgIkVtcHR5
Q2xpZW50cy5oIiAvLyBOT0xJTlQKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdJ
bWFnZUNocm9tZUNsaWVudCA6IHB1YmxpYyBFbXB0eUNocm9tZUNsaWVudCB7CkBAIC0xMDEsNyAr
OTksNyBAQCBTVkdJbWFnZTo6flNWR0ltYWdlKCkKICAgICBBU1NFUlQoIW1fY2hyb21lQ2xpZW50
IHx8ICFtX2Nocm9tZUNsaWVudC0+aW1hZ2UoKSk7CiB9CiAKLXZvaWQgU1ZHSW1hZ2U6OnNldENv
bnRhaW5lclNpemUoY29uc3QgTGF5b3V0U2l6ZSYgY29udGFpbmVyU2l6ZSkKK3ZvaWQgU1ZHSW1h
Z2U6OnNldENvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgY29udGFpbmVyU2l6ZSkKIHsKICAg
ICBpZiAoY29udGFpbmVyU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiA5NzM2MykKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw2IEBACiAjZGVmaW5lIFNWR0ltYWdlX2gKIAogI2lmIEVOQUJMRShTVkcpCi0KICNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAKQEAgLTQ0LDEzICs0
MywxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHSW1hZ2Uob2Jz
ZXJ2ZXIpKTsKICAgICB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIH5TVkdJbWFnZSgpOwogCiAg
ICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250YWluZXJTaXplKGNvbnN0IExheW91dFNpemUmKTsKICAgICB2aXJ0dWFs
IGJvb2wgdXNlc0NvbnRhaW5lclNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7CiAgICAgdmlydHVhbCBib29sIGhhc1JlbGF0aXZl
V2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVIZWlnaHQoKSBjb25z
dDsKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMC0xMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KKworICAgICAgICBQcmVwYXJl
IFNWR0ltYWdlIGludHJpbnNpYyBzaXplIG5lZ290aWF0aW9uOiBJbnRyb2R1Y2UgYW4gSW50U2l6
ZSA8LT4gU1ZHSW1hZ2UgY2FjaGUgaW4gQ2FjaGVkSW1hZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRhcHQgdG8gV2ViQ29yZTo6Q2FjaGVkSW1hZ2Ug
QVBJIGNoYW5nZXMgKHBhc3MgcmVuZGVyZXIgdG8gaW1hZ2UoKSwgaWYgYXZhaWxhYmxlKS4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRNYWMu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJ
bWFnZSk6CisgICAgICAgICgtW1dLUGFzdGVib2FyZE93bmVyIHBhc3RlYm9hcmQ6cHJvdmlkZURh
dGFGb3JUeXBlOl0pOgorICAgICAgICAoLVtXS1Bhc3RlYm9hcmRPd25lciBuYW1lc09mUHJvbWlz
ZWRGaWxlc0Ryb3BwZWRBdERlc3RpbmF0aW9uOl0pOgorCiAyMDExLTEwLTEyICBKb3NlcGggUGVj
b3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGFzcyBQYXJzZWQgQWNjZXB0
IEF0dHJpYnV0ZSBNSU1FIFR5cGVzIHRvIFdlYktpdCBDbGllbnRzCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFj
L1dlYkRyYWdDbGllbnRNYWMubW0JKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFu
ZFdyaXRlRHJhZ0kKIAogICAgIE5TU3RyaW5nICpleHRlbnNpb24gPSBAIiI7CiAgICAgaWYgKGlt
YWdlKSB7Ci0gICAgICAgIGV4dGVuc2lvbiA9IGltYWdlLT5pbWFnZSgpLT5maWxlbmFtZUV4dGVu
c2lvbigpOworICAgICAgICBleHRlbnNpb24gPSBpbWFnZS0+aW1hZ2UoY29yZUVsZW1lbnQtPnJl
bmRlcmVyKCkpLT5maWxlbmFtZUV4dGVuc2lvbigpOwogICAgICAgICBpZiAoIVtleHRlbnNpb24g
bGVuZ3RoXSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNTMsNyArMjUzLDcgQEAg
LSAodm9pZClwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZQogewogICAgIGlmIChbdHlw
ZSBpc0VxdWFsOk5TVElGRlBib2FyZFR5cGVdKSB7CiAgICAgICAgIGlmIChfaW1hZ2UpIHsKLSAg
ICAgICAgICAgIGlmIChJbWFnZSogaW1hZ2UgPSBfaW1hZ2UtPmltYWdlKCkpCisgICAgICAgICAg
ICBpZiAoSW1hZ2UqIGltYWdlID0gX2ltYWdlLT5pbWFnZSgwKSkKICAgICAgICAgICAgICAgICBb
cGFzdGVib2FyZCBzZXREYXRhOihOU0RhdGEgKilpbWFnZS0+Z2V0VElGRlJlcHJlc2VudGF0aW9u
KCkgZm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlXTsKICAgICAgICAgICAgIFtzZWxmIGNsZWFySW1h
Z2VdOwogICAgICAgICB9CkBAIC0yODgsNyArMjg4LDcgQEAgLSAoTlNBcnJheSAqKW5hbWVzT2ZQ
cm9taXNlZEZpbGVzRHJvcHBlZAogICAgICAgICAgICAgZHJhZ2dpbmdJbWFnZVVSTCA9IFtyZXNw
b25zZSBVUkxdOwogICAgICAgICAgICAgd3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2Nd
IGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czpkYXRhXSBhdXRvcmVsZWFzZV07CiAgICAgICAg
ICAgICBOU1N0cmluZyogZmlsZW5hbWUgPSBbcmVzcG9uc2Ugc3VnZ2VzdGVkRmlsZW5hbWVdOwot
ICAgICAgICAgICAgTlNTdHJpbmcqIHRydWVFeHRlbnNpb24oX2ltYWdlLT5pbWFnZSgpLT5maWxl
bmFtZUV4dGVuc2lvbigpKTsKKyAgICAgICAgICAgIE5TU3RyaW5nKiB0cnVlRXh0ZW5zaW9uKF9p
bWFnZS0+aW1hZ2UoMCktPmZpbGVuYW1lRXh0ZW5zaW9uKCkpOwogICAgICAgICAgICAgaWYgKCFt
YXRjaGVzRXh0ZW5zaW9uT3JFcXVpdmFsZW50KGZpbGVuYW1lLCB0cnVlRXh0ZW5zaW9uKSkKICAg
ICAgICAgICAgICAgICBmaWxlbmFtZSA9IFtbZmlsZW5hbWUgc3RyaW5nQnlBcHBlbmRpbmdTdHJp
bmc6QCIuIl0gc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6dHJ1ZUV4dGVuc2lvbl07CiAgICAgICAg
ICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDExLTEwLTEzICBOaWtvbGFzIFpp
bW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFByZXBhcmUgU1ZHSW1h
Z2UgaW50cmluc2ljIHNpemUgbmVnb3RpYXRpb246IEludHJvZHVjZSBhbiBJbnRTaXplIDwtPiBT
VkdJbWFnZSBjYWNoZSBpbiBDYWNoZWRJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk0MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGFwdCB0byBXZWJDb3JlOjpDYWNoZWRJbWFnZSBBUEkgY2hh
bmdlcyAocGFzcyByZW5kZXJlciB0byBpbWFnZSgpLCBpZiBhdmFpbGFibGUpLgorCisgICAgICAg
ICogTWlzYy9XZWJOU1Bhc3RlYm9hcmRFeHRyYXMubW06CisgICAgICAgICgtW05TUGFzdGVib2Fy
ZCBfd2ViX2RlY2xhcmVBbmRXcml0ZURyYWdJbWFnZUZvckVsZW1lbnQ6VVJMOnRpdGxlOmFyY2hp
dmU6c291cmNlOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAg
ICgtW1dlYkhUTUxWaWV3IHBhc3RlYm9hcmQ6cHJvdmlkZURhdGFGb3JUeXBlOl0pOgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBuYW1lc09mUHJvbWlzZWRGaWxlc0Ryb3BwZWRBdERlc3RpbmF0aW9u
Ol0pOgorCiAyMDExLTEwLTEyICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmVtb3ZlIEVOQUJMRShYSFRNTE1QKSBhbmQgYXNzb2NpYXRlZCBjb2RlCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TUGFzdGVib2FyZEV4dHJhcy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TUGFzdGVib2FyZEV4dHJhcy5tbQkocmV2
aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TUGFzdGVib2FyZEV4
dHJhcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcwLDcgKzI3MCw3IEBAIC0gKGlkKV93ZWJfZGVj
bGFyZUFuZFdyaXRlRHJhZ0ltYWdlRm9yRWwKICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGNvcmUoZWxlbWVudCktPnJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5p
c0ltYWdlKCkpIHsKICAgICAgICAgICAgIGlmIChDYWNoZWRJbWFnZSogaW1hZ2UgPSB0b1JlbmRl
ckltYWdlKHJlbmRlcmVyKS0+Y2FjaGVkSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgIGV4dGVu
c2lvbiA9IGltYWdlLT5pbWFnZSgpLT5maWxlbmFtZUV4dGVuc2lvbigpOworICAgICAgICAgICAg
ICAgIGV4dGVuc2lvbiA9IGltYWdlLT5pbWFnZShyZW5kZXJlciktPmZpbGVuYW1lRXh0ZW5zaW9u
KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFbZXh0ZW5zaW9uIGxlbmd0aF0pCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2NDYsNyAr
MTY0Niw3IEBAIC0gKHZvaWQpcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGUKICAgICAg
ICAgW3Bhc3RlYm9hcmQgX3dlYl93cml0ZVByb21pc2VkUlRGREZyb21BcmNoaXZlOmFyY2hpdmUg
Y29udGFpbnNJbWFnZTpbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0Ok5TVElGRlBi
b2FyZFR5cGVdXTsKICAgICAgICAgW2FyY2hpdmUgcmVsZWFzZV07CiAgICAgfSBlbHNlIGlmIChb
dHlwZSBpc0VxdWFsOk5TVElGRlBib2FyZFR5cGVdICYmIFtzZWxmIHByb21pc2VkRHJhZ1RJRkZE
YXRhU291cmNlXSkgewotICAgICAgICBpZiAoSW1hZ2UqIGltYWdlID0gW3NlbGYgcHJvbWlzZWRE
cmFnVElGRkRhdGFTb3VyY2VdLT5pbWFnZSgpKQorICAgICAgICBpZiAoSW1hZ2UqIGltYWdlID0g
W3NlbGYgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2VdLT5pbWFnZSgwKSkKICAgICAgICAgICAg
IFtwYXN0ZWJvYXJkIHNldERhdGE6KE5TRGF0YSAqKWltYWdlLT5nZXRUSUZGUmVwcmVzZW50YXRp
b24oKSBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOwogICAgICAgICBbc2VsZiBzZXRQcm9taXNl
ZERyYWdUSUZGRGF0YVNvdXJjZTowXTsKICAgICB9CkBAIC0zNjI5LDcgKzM2MjksNyBAQCAtIChO
U0FycmF5ICopbmFtZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkCiAgICAgICAgIGRyYWdnaW5nSW1h
Z2VVUkwgPSBbcmVzcG9uc2UgVVJMXTsKICAgICAgICAgd3JhcHBlciA9IFtbW05TRmlsZVdyYXBw
ZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czpkYXRhXSBhdXRvcmVsZWFzZV07
CiAgICAgICAgIE5TU3RyaW5nKiBmaWxlbmFtZSA9IFtyZXNwb25zZSBzdWdnZXN0ZWRGaWxlbmFt
ZV07Ci0gICAgICAgIE5TU3RyaW5nKiB0cnVlRXh0ZW5zaW9uKHRpZmZSZXNvdXJjZS0+aW1hZ2Uo
KS0+ZmlsZW5hbWVFeHRlbnNpb24oKSk7CisgICAgICAgIE5TU3RyaW5nKiB0cnVlRXh0ZW5zaW9u
KHRpZmZSZXNvdXJjZS0+aW1hZ2UoMCktPmZpbGVuYW1lRXh0ZW5zaW9uKCkpOwogICAgICAgICBp
ZiAoIW1hdGNoZXNFeHRlbnNpb25PckVxdWl2YWxlbnQoZmlsZW5hbWUsIHRydWVFeHRlbnNpb24p
KQogICAgICAgICAgICAgZmlsZW5hbWUgPSBbW2ZpbGVuYW1lIHN0cmluZ0J5QXBwZW5kaW5nU3Ry
aW5nOkAiLiJdIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOnRydWVFeHRlbnNpb25dOwogICAgICAg
ICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07Cg==
</data>
<flag name="review"
          id="108460"
          type_id="1"
          status="-"
          setter="koivisto"
    />
    <flag name="commit-queue"
          id="108464"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>110844</attachid>
            <date>2011-10-13 08:08:20 -0700</date>
            <delta_ts>2011-10-14 02:07:12 -0700</delta_ts>
            <desc>Next try - v3</desc>
            <filename>SVGImage-splitoff-redesign-v3.diff</filename>
            <type>text/plain</type>
            <size>111706</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MzY1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjI0IEBACisyMDExLTEwLTEzICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFByZXBhcmUgU1ZH
SW1hZ2UgaW50cmluc2ljIHNpemUgbmVnb3RpYXRpb246IEludHJvZHVjZSBhbiBJbnRTaXplIDwt
PiBTVkdJbWFnZSBjYWNoZSBpbiBDYWNoZWRJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk0MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBJbWFnZUJ5U2l6ZUNhY2hlIG91dCBvZiBD
U1NJbWFnZUdlbmVyYXRvclZhbHVlIGFzIENhY2hlZEltYWdlIHdhbnRzIHRvIHVzZSB0aGUgc2Ft
ZSB0eXBlIG9mIGNhY2hlIGZvciBpdHMgcHVycG9zZXMuCisgICAgICAgIFdoZW4gaW50cm9kdWNp
bmcgdGhlIFNWR0ltYWdlIGludHJpbnNpYyBzaXplIG5lZ290aWF0aW9uIHRoZSBjb250YWluZXIg
c2l6ZSBvZiBhbiBTVkdJbWFnZSBpcyBkZXBlbmRhbnQgb24gdGhlIHBsYWNlIHdoZXJlCisgICAg
ICAgIGl0IGdldHMgZW1iZWRkZWQgKGVnIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzIG9mIGhvc3Qg
ZG9jdW1lbnRzIDxpbWc+IGZvcmNlIGEgY2VydGFpbiBzaXplKS4KKworICAgICAgICBDdXJyZW50
bHkgQ2FjaGVkSW1hZ2Ugb25seSBjb250YWlucyBhIHNpbmdsZSBSZWZQdHI8SW1hZ2U+LCB3aGlj
aCBpdCBjb25zdHJ1Y3RzIG91dCBvZiB0aGUgZGVjb2RlZCBkYXRhLgorICAgICAgICBNdWx0aXBs
ZSBSZW5kZXJPYmplY3RzIHNoYXJlIHRoZSBzYW1lIENhY2hlZEltYWdlcywgd2hlbiBlbWJlZGRp
bmcgZWcuIGEgU1ZHIGRvY3VtZW50IGluIGEgPGh0bWw6aW1nPiBvciB1c2luZyBpdCBpbiBhIGJh
Y2tncm91bmQtaW1hZ2UgZm9yIGEgPGRpdj4uCisgICAgICAgIENvbnNpZGVyIHRoZSBjYXNlIHdo
ZXJlIHR3byBSZW5kZXJPYmplY3RzIHVzZSB0aGUgc2FtZSBDYWNoZWRJbWFnZSwgZWFjaCB3aXRo
IGEgZGlmZmVyZW50IGNvbnRhaW5lciBzaXplICgyMDB4MTAwIHZzIDEwMHgyMDApIGFuZCB0aGUg
ZW1iZWRkZWQKKyAgICAgICAgZG9jdW1lbnQgY29udGFpbnMgYSB2aWV3Qm94IGFuZCBzb21lIGFy
Yml0YXJ5IHByZXNlcnZlQXNwZWN0UmF0aW8gc2V0dGluZ3MuIFRvIGhvbm91ciB0aGVzZSB3ZSBo
YXZlIHRvIHJlbGF5b3V0IHRoZSBkb2N1bWVudCB3aXRoIHRoZSBkZXNpcmVkCisgICAgICAgIHNp
emUgKHBlcmNlbnR1YWwgdW5pdCByZXNvbHZpbmcgZXRjLCBhbGwgZGVwZW5kIG9uIHRoZSBSZW5k
ZXJTVkdSb290cyBzaXplKS4KKworICAgICAgICBXaXRoIHRoZSBjdXJyZW50IGRlc2lnbiB0aGlz
IGlzIGhhcmQgdG8gcmVhbGl6ZSwgdy9vIHJlcXVyaW5nIHRvIHJlbGF5b3V0IHRoZSBlbWJlZGRl
ZCBkb2N1bWVudCBmb3IgZWFjaCBlbWJlZGRlciB0aGF0IHVzZXMgYW4gU1ZHSW1hZ2UuCisgICAg
ICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNhY2hlIHJpZ2h0IHdpdGhpbiBDYWNoZWRJbWFn
ZSwgd2hpY2ggbWFuYWdlcyBhIG1hcCBvZiBpbWFnZXMgdG8gY2VydGFpbiBzaXplcywgYnkgdXRp
bGl6aW5nIHRoZSBuZXcgSW1hZ2VCeVNpemVDYWNoZS4KKworICAgICAgICBDYWNoZWRJbWFnZTo6
aW1hZ2VGb3JSZW5kZXJlcigpIHRha2VzIGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0ZXIsIHdoaWNo
IGl0IHVzZXMgdG8gbG9vayB1cCB0aGUgbGFzdCBzZXQgaW1hZ2UgY29udGFpbmVyIHNpemUgZm9y
IGEgcmVuZGVyZXIuCisgICAgICAgIFVzaW5nIHRoYXQgc2l6ZSBpdCBxdWVyaWVzIHRoZSBjYWNo
ZSB3aGV0aGVyIGl0IGFscmVhZHkgaGFzIGFuIFNWR0ltYWdlIGZvciB0aGF0IHNpemUsIGlmIG5v
dCBpdCBnZXRzIGNyZWF0ZWQsIGJ5IGNyZWF0aW5nIGEgd2hvbGUKKyAgICAgICAgbmV3IGluc3Rh
bmNlIG9mIFNWR0ltYWdlLCBmaWxsaW5nIGl0IHdpdGggdGhlIGFscmVhZHkgZGVjb2RlZCBkYXRh
LCBhbmQgcGFzc2luZyBvbiBhIGZpeGVkIGltYWdlIGNvbnRhaW5lciBzaXplLCB3aGljaCBvdmVy
cmlkZXMgdGhlCisgICAgICAgIHNpemUgdGhhdCBSZW5kZXJTVkdSb290IHJlcG9ydHMsIHdoZW4g
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoL0hlaWdodCBpcyBjYWxsZWQgYW5kIHRodXMgbGF5
aW5nIG91dCB0aGUgZG9jdW1lbnQgYXQgdGhlIGRlc2lyZWQgc2l6ZS4KKyAgICAgICAgVGhpcyBp
bWFnZSBpcyB0aGVuIHB1dCBpbiB0aGUgY2FjaGUgZm9yIGZ1cnRoZXIgcmV1c2FiaWxpdHkuCisK
KyAgICAgICAgTGlrZXdpc2UgQ2FjaGVkSW1hZ2U6OnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJl
cigpIG5vdyB0YWtlcyBhIFJlbmRlck9iamVjdCogcGFyYW1ldGVyIGFuZCBzdG9yZXMgdGhhdCBp
biB0aGUgY2FjaGUgd2l0aCBhbiBhc3NvY2lhdGVkIGNvbnRhaW5lciBzaXplLgorICAgICAgICBJ
dCByZXF1aXJlcyB0byB0b3VjaCBzZXZlcmFsIGZpbGVzIHdoaWNoIHVzZSBDYWNoZWRJbWFnZSB0
aHJvdWdob3V0IFdlYkNvcmUvV2ViS2l0L1dlYktpdDIuCisKKyAgICAgICAgVGhlIGFjdHVhbCBj
YWNoZSBpcyBub3QgeWV0IHR1cm5lZCBvbiB5ZXQsIHNvIHRoaXMgaXMgbm90IGEgZnVuY3Rpb25h
bCBjaGFuZ2Ugc28gZmFyLCBhcyBpdCBuZWVkcyBzb21lIG90aGVyIGNoYW5nZXMgdG8gU1ZHSW1h
Z2UsCisgICAgICAgIHdoaWNoIHdpbGwgY29tZSB3aXRoIHRoZSBtYXN0ZXIgcGF0Y2ggaW4gYnVn
IDQ3MTU2LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyB5ZXQsIGFzIHRoZSBuZXcgY2FjaGUgaXNu
J3QgdHVybmVkIG9uIHlldC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGQgcmVuZGVy
aW5nL0ltYWdlQnlTaXplQ2FjaGUuKiB0byBidWlsZC4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAq
IFdlYkNvcmUucHJvOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OiBEaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNj
ZXNzaWJpbGl0eUlzSWdub3JlZCk6IFVzZSBuZXcgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZUZvclJl
bmRlcmVyKFJlbmRlck9iamVjdCopIG1ldGhvZC4KKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RP
TS5tbTogRGl0dG8gKGZvciBDYWNoZWRJbWFnZTo6aW1hZ2UoKSkuCisgICAgICAgICgtW0RPTUVs
ZW1lbnQgaW1hZ2VdKToKKyAgICAgICAgKC1bRE9NRWxlbWVudCBfaW1hZ2VUSUZGUmVwcmVzZW50
YXRpb25dKToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHA6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcEluc3RhbmNlOjp2YXJpYW50RnJvbU9iamVjdCk6
IERpdHRvIChmb3IgQ2FjaGVkSW1hZ2U6OmltYWdlKCkpLgorICAgICAgICAqIGNzcy9DU1NDYW52
YXNWYWx1ZS5jcHA6IHMvbV9jbGllbnRzL2NsaWVudHMoKS8sIHdoaWNoIG5vdyBsaXZlIGluIHRo
ZSBJbWFnZUJ5U2l6ZUNhY2hlIGluc3RlYWQgb2YgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbnZhc1ZhbHVlOjppbWFnZSk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFs
dWUuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmltYWdl
KToKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHA6IE1vdmUgdGhlIHNp
emVzL2NsaWVudHMvaW1hZ2VzIGNhY2hlIGludG8gYSBuZXcgSW1hZ2VCeVNpemVDYWNoZSBjbGFz
cywgdG8gbWFrZSBpdCB1c2FibGUgZm9yIENhY2hlZEltYWdlIGFzIHdlbGwuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQpOiBBZGFwdCB0byBtb3Zl
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJ
bWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6
cHV0SW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Y2xpZW50cyk6IEZv
cndhcmRlZCB0byB0aGUgSW1hZ2VCeVNpemVDYWNoZS4KKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwOiAKKyAgICAgICAgKFdlYkNvcmU6OmlzRGVsZXRhYmxlRWxl
bWVudCk6IENhY2hlZEltYWdlOjpjYW5SZW5kZXIoKSBub3cgdGFrZXMgYSBSZW5kZXJPYmplY3Qq
IHBhcmFtZXRlci4KKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6d2lkdGgpOiBVc2UgbmV3IENhY2hlZEltYWdl
OjppbWFnZVNpemVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqKSBtZXRob2QuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbWFnZUVsZW1lbnQ6Om5hdHVyYWxXaWR0aCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbEhlaWdodCk6IERpdHRvLgorICAgICAgICAq
IGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50
UGFyc2VyOjpmaW5pc2gpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6
OnNjYWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpyZXNpemVJ
bWFnZVRvRml0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjppbWFn
ZVVwZGF0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OnJlc3Rv
cmVJbWFnZVNpemUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6Omlt
YWdlRml0c0luV2luZG93KTogRGl0dG8uCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0Ojp3b3VsZFRhaW50T3JpZ2luKTogVXNlIG5ldyBDYWNoZWRJbWFnZTo6aW1hZ2VGb3JSZW5k
ZXJlcihSZW5kZXJPYmplY3QqKSBtZXRob2QuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzT3JpZ2luQ2xlYW4p
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNpemUpOiBEaXR0byAoZm9yIENhY2hlZEltYWdl
OjppbWFnZVNpemVGb3JSZW5kZXJlcigpKS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBhdHRlcm4pOiBEaXR0by4KKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQpOiBEaXR0by4KKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOiBBZGQgY3VycmVudGx5IF9kaXNhYmxl
ZF8gY2FjaGUgZm9yIFNWR0ltYWdlcy4gVGhlIGludHJpbnNpYyBzaXplIG5lZ290aWF0aW9uIHdp
bGwgbmVlZCB0byB1c2UgbXVsdGlwbGUgU1ZHSW1hZ2VzCisgICAgICAgIGZvciBlYWNoIHJlcXVl
c3RlZCBzaXplIChlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGUgZW1iZWRkaW5nIHBsYWNlIGZvciB0
aGUgaW1hZ2UpIC0gbWFrZSBpdCBwb3NzaWJsZSB0byBjYWNoZSB0aGVzZSBTVkdJbWFnZXMsIGFu
ZCBtYWludGFpbiBhIGNhY2hlCisgICAgICAgIGZvciB0aGVtLiBUaGUgaGFzaCBjb2RlIGlzIGEg
MToxIHJlZmFjdG9yaW5nIGZyb20gdGhlIGFscmVhZHkgcHJlc2VudCBjb2RlIGluIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUsIG5vdyBuYW1lZCAnSW1hZ2VCeVNpemVDYWNoZScuCisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6bG9va3VwSW1hZ2VGb3JTaXplKTogTG9va3MgdXAgYW4gSW1h
Z2UgZnJvbSB0aGUgY2FjaGUgZm9yIGEgZ2l2ZW4gSW50U2l6ZS4gQ3VycmVudGx5IHR1cm5lZCBv
ZmYuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6bG9va3VwSW1hZ2VGb3JSZW5kZXJl
cik6IExvb2tzIHVwIGFuIEltYWdlIGZyb20gdGhlIGNhY2hlIGZvciBhIGdpdmVuIHJlbmRlcmVy
LiBDdXJyZW50bHkgdHVybmVkIG9mZi4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjps
b29rdXBPckNyZWF0ZUltYWdlRm9yUmVuZGVyZXIpOiBMb29rcyB1cCBhbiBJbWFnZSBmcm9tIHRo
ZSBjYWNoZSBvciBjcmVhdGVzIGEgbmV3IFNWR0ltYWdlIGZvciBhIGdpdmVuIHNpemUgYW5kIGNh
Y2hlcyBpdCwgaWYgcG9zc2libGUuIEN1cnJlbnRseSB0dXJuZWQgb2ZmLgorICAgICAgICBBbGwg
Zm9sbG93aW5nIGNoYW5nZXMgc2hhcmUgdGhpczogRG9uJ3Qgb3BlcmF0ZSBvbiBtX2ltYWdlIGRp
cmVjdGx5LCBpbnN0ZWFkIGFsd2F5cyBsb29rIHVwIG9uZSBmcm9tIHRoZSBjYWNoZSBmb3IgYSBn
aXZlbiBzaXplIG9yIHJlbmRlcmVyIC0gaWYgdGhhdCdzIG5vdCBwcmVzZW50IGZhbGxiYWNrIHRv
IG1faW1hZ2UuCisgICAgICAgIFdoZW4gYW4gU1ZHSW1hZ2UgaXMgZmlyc3QgY3JlYXRlZCBieSBD
YWNoZWRJbWFnZTo6Y3JlYXRlSW1hZ2UoKSBhbmQgc3RvcmVkIGluIG1faW1hZ2UsIHRoZSBjYWNo
ZSByZW1haW5zIGVtcHR5LgorCisgICAgICAgIElmIGVnLiA8aW1nIHdpZHRoPSIzMCIgaGVpZ2h0
PSI3MCIgc3JjPSJmb28uc3ZnIj4gaXMgdXNlZCB3aGljaCBpbXBsaWVzIGEgY29udGFpbmVyIHNp
emUgb2YgMzB4NzAgYSBuZXcgU1ZHSW1hZ2UgaXMgY3JlYXRlZCB3aXRoIHRoZSBhZGRpdGlvbmFs
IGluZm9ybWF0aW9uIG9mIGEgMzB4NzAgY29udGFpbmVyIHNpemUKKyAgICAgICAgd2hpY2ggaXMg
aW1tZWRpYXRlbHkgcGFzc2VkIHRvIHRoZSBTVkdJbWFnZSBhZnRlciBpdHMgY3JlYXRpb24uIFRo
aXMgU1ZHSW1hZ2UgaXMgcHV0IGluIHRoZSBJbWFnZUJ5U2l6ZUNhY2hlIGFzc29jaWF0ZWQgd2l0
aCBhIGNvbnRhaW5lciBzaXplIG9mIDMweDcwLgorICAgICAgICBXZSBub3cgaGF2ZSB0d28gU1ZH
SW1hZ2Ugb2JqZWN0cyBwcmVzZW50LCBvbmUgbGl2aW5nIGluIENhY2hlZEltYWdlOjptX2ltYWdl
LCBjcmVhdGVkIGJ5IGNyZWF0ZUltYWdlKCkgZHVyaW5nIGRhdGEgZGVjb2RpbmcsIGFuZCBvbmUg
bGl2aW5nIGluIHRoZSBJbWFnZUJ5U2l6ZUNhY2hlCisgICAgICAgIGNyZWF0ZWQgYnkgbG9va3Vw
T3JDcmVhdGVJbWFnZUZvclJlbmRlcmVyKCkgYXNzb2NpYXRlZCB3aXRoIHRoZSAzMHg3MCBjb250
YWluZXIuIFRoZSBmaXJzdCBTVkdJbWFnZTo6c2l6ZSgpIHdpbGwgcmV0dXJuIGEgdmFsdWUgYXMg
ZGVmaW5lZCBpbiB0aGUgcmVmZXJlbmNlZCBmb28uc3ZnLAorICAgICAgICB3aGVyZWFzIHRoZSBT
VkdJbWFnZTo6c2l6ZSgpIGNhbGwgb2YgdGhlIG5ldyBTVkdJbWFnZSBsaXZpbmcgaW4gdGhlIGNh
Y2hlIHJlcG9ydHMgMzB4NzAgYW5kIHJlbmRlcnMgYWNjb3JkaW5nIHRvIHRoYXQuCisKKyAgICAg
ICAgV2hlbmV2ZXIgYW55IG1ldGhvZCBvZiBDYWNoZWRJbWFnZSBpcyBjYWxsZWQgd2l0aCBhIFJl
bmRlck9iamVjdCogb3IgSW50U2l6ZSwgd2UgY2FuJ3QganVzdCBvcGVyYXRlIG9uIG1faW1hZ2Ug
YW55bW9yZSBidXQgaW5zdGVhZCBoYXZlIHRvIGxvb2t1cCB0aGUgcmlnaHQKKyAgICAgICAgaW1h
Z2VzIGZvciBhIGNlcnRhaW4gcmVuZGVyZXIvc2l6ZSBmcm9tIHRoZSBjYWNoZSBhbmQgb3BlcmF0
ZSBvbiB0aGVzZS4gV2hlbiBjYWxsaW5nIGVnLiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSB3aXRoIGEg
bnVsbCByZW5kZXJlciwgbV9pbWFnZSBpcyByZXR1cm5lZC4KKyAgICAgICAgV2hlbiBwYXNzaW5n
IHdpdGggYSB2YWxpZCByZW5kZXJlciBvbmx5IGNhY2hlIGxvb2t1cHMgYXJlIGRvbmUgaWYgdGhl
IG1faW1hZ2UgaXMgYWN0dWFsbHkgYSBTVkdJbWFnZSwgb3RoZXJ3aGlzZSBsb29rdXBJbWFnZUZv
clNpemUvUmVuZGVyZXIgd2lsbCBqdXN0IHJldHVybiB0aGUgbV9pbWFnZS4KKyAgICAgICAgVGhl
cmUgaXMgbm8gbG9naWNhbCBjaGFuZ2UgaW5kdWNlZCBmb3Igbm9uLVNWR0ltYWdlIGRlcml2ZWQg
aW1hZ2VzLgorCisgICAgICAgIENhY2hlZEltYWdlOjppbWFnZSgpIG9mIGNvdXJzZSBuZWVkcyBh
IFJlbmRlck9iamVjdCogcGFyYW1ldGVyIG5vdywgdG8gaWRlbnRpZnkgd2hpY2ggb2YgdGhlIGlt
YWdlcyBmcm9tIHRoZSBjYWNoZSB0byB1c2UsIGlmIHRoZSB1bmRlcmx5aW5nIGltYWdlIGlzIGEg
U1ZHSW1hZ2UuCisgICAgICAgIEx1Y2tpbHkgdGhlc2UgaW5mb3JtYXRpb24gYXJlIGFscmVhZHkg
cHJlc2VudCBpbiBTdHlsZUNhY2hlZEltYWdlL1N0eWxlSW1hZ2UgJiBmcmllbmRzIGFuZCBvbmx5
IG5lZWQgdG8gYmUgYWRkZWQgZm9yIHNvbWUgYWRkaXRpb25hbCBtZXRob2RzLgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmltYWdlKTogRklYTUUKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZEltYWdlOjppbWFnZUZvclJlbmRlcmVyKTogQ2FsbCBsb29rdXBPckNyZWF0ZUltYWdlRm9y
UmVuZGVyZXIoKSBpbnN0ZWFkIG9mIHJldHVybmluZyBtX2ltYWdlLCBpZiBpdCdzIG5vdCBudWxs
LiBJdHMgYSBuby1vcCBmb3Igbm9uIFNWR0ltYWdlIGRlcml2ZWQgb2JqZWN0cy4KKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZEltYWdlOjpzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIpOiBGb3Ig
bm9uLVNWR0ltYWdlcywganVzdCBwYXNzIG9uIHRoZSBzaXplIHRvIHRoZSBtX2ltYWdlLiBGb3Ig
U1ZHSW1hZ2VzLCBhc3NvY2lhdGUgdGhlIHBhc3NlZCBpbiByZW5kZXJlciB3aXRoIHRoZSBJbnRT
aXplIGluIHRoZSBjYWNoZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRvZXMgTk9UIGNyZWF0ZSB0aGUgU1ZHSW1hZ2Ug
eWV0LCB0aGlzIGlzIGRlbGF5ZWQgdW50aWwgaW1hZ2VGb3JSZW5kZXJlcigpIGlzIGNhbGxlZCBm
b3IgYSBnaXZlbiByZW5kZXJlciB0aGF0IHdhbnRzIHRoaXMgc2l6ZS4KKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZEltYWdlOjppbWFnZVNpemUpOiBEb24ndCBvcGVyYXRlIG9uIG1faW1hZ2UsIGFz
ayBsb29rdXBJbWFnZUZvclJlbmRlcmVyKCkgd2l0aCB0aGUgaW5jb21pbmcgcmVuZGVyZXIuCisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2VSZWN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Y2xlYXIpOiBGb3JjZSBjbGVhcmluZyB0aGUgbV9zdmdJ
bWFnZUNhY2hlLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmRhdGEpOiBDYWxsIG1f
aW1hZ2UtPnNpemUoKSBpbnN0ZWFkIG9mIGltYWdlU2l6ZSgpLCB0byBhdm9pZCBoYXZpbmcgdG8g
cGFzcyBhIG51bGwgcmVuZGVyZXIgdG8gaW1hZ2VTaXplKCkgYXMgaGVyZSBubyByZW5kZXJlciBp
cyBhdmFpbGFibGUgeWV0LgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmRlc3Ryb3lE
ZWNvZGVkRGF0YSk6IERvbid0IGRlc3Ryb3kgZGVjb2RlZCBkYXRhIGZvciBTVkcgaW1hZ2VzLCBh
cyBtX2RhdGEgbmVlZHMgdG8gYmUgYWNjZXNzYWJsZSBhdCBhbnkgdGltZSB0byBjb25zdHJ1Y3Qg
YSBjbG9uZWQgU1ZHSW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW4gZnV0dXJlIHdlIGRvbid0IG5lZWQgdGhpcyBhbnltb3JlIGlmIHdl
IG1ha2Ugc3VyZSBtdWx0aXBsZSBTVkdJbWFnZXMgc2hhcmUgdGhlIHNhbWUgdHJlZXMsIGJ1dCB0
aGF0J3MgZm9yIGEgZm9sbG93LXVwIHBhdGNoLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1h
Z2U6OmRlY29kZWRTaXplQ2hhbmdlZCk6IERvbid0IG9wZXJhdGUgb24gbV9pbWFnZSwgYXNrIGxv
b2t1cEltYWdlRm9yUmVuZGVyZXIoKSB3aXRoIHRoZSBpbmNvbWluZyByZW5kZXJlci4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpkaWREcmF3KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRJbWFnZTo6c2hvdWxkUGF1c2VBbmltYXRpb24pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZEltYWdlOjphbmltYXRpb25BZHZhbmNlZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmNoYW5nZWRJblJlY3QpOiBEaXR0by4gKGVnLiB3aGVu
IGxlYXZpbmcgb3V0IHRoaXMgY2hhbmdlIGFuaW1hdGVkIFNWRyBpbWFnZXMgd291bGRuJ3QgdXBk
YXRlIGFueW1vcmUsIGFzIHRoZSBhbmltYXRpb24gZGlkbid0IGhhcHBlbiBvbiBtX2ltYWdlISkK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaDogaW1hZ2VGb3JSZW5kZXJlci9j
YW5SZW5kZXIvc2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyL2ltYWdlU2l6ZUZvclJlbmRlcmVy
IG5vdyBhbGwgdGFrZSBhIFJlbmRlck9iamVjdCogcGFyYW1ldGVyIHRvIGlkZW50aWZpeSB0aGUg
Y3VycmVudCB1c2VyIG9mIHRoZSBpbWFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdl
OjpjYW5SZW5kZXIpOiBQYXNzIG9uIHRoZSBpbmNvbWluZyByZW5kZXJlciB0byBpbWFnZVNpemVG
b3JSZW5kZXJlcigpLgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0SW1hZ2UpOiBVc2UgbmV3IENhY2hlZEltYWdlOjppbWFnZUZvclJlbmRl
cmVyKFJlbmRlck9iamVjdCopIG1ldGhvZC4KKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6IERpdHRv
LgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpQYWdlU2VyaWFsaXplcjo6YWRkSW1hZ2VUb1Jlc291cmNlcyk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRp
b24pOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6d3JpdGVJbWFnZVRvRGF0YU9iamVjdCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjp3cml0ZUltYWdlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjppc1NWR0ltYWdlKTogQWRkIGJvb2xlYW4g
aGVscGVyIHRvIGlkZW50aWZ5IFNWR0ltYWdlcywganVzdCBsaWtlIGlzQml0bWFwSW1hZ2UoKS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsaXBib2FyZEd0azo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKTogVXNlIG5ldyBDYWNo
ZWRJbWFnZTo6aW1hZ2VGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqKSBtZXRob2QuCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6d3JpdGVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9IVE1M
Q29udmVydGVyLm1tOgorICAgICAgICAoZmlsZVdyYXBwZXJGb3JFbGVtZW50KTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vcXQv
Q2xpcGJvYXJkUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkUXQ6OmRlY2xhcmVB
bmRXcml0ZURyYWdJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Bhc3RlYm9h
cmRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKTogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZUltYWdlVG9EYXRhT2JqZWN0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
d3JpdGVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3dpbmNlL1Bhc3RlYm9hcmRX
aW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKTogRGl0
dG8uCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdDo6aW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcv
SW1hZ2VCeVNpemVDYWNoZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwLCB0byBwcmVzZXJ2ZSBoaXN0b3J5IGZvciB0aGUgb3JpZ2luYWwgY2Fj
aGUgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnlTaXplQ2FjaGU6OkltYWdlQnlTaXpl
Q2FjaGUpOiBTdHJhaWdodCBjb3B5IGZyb20gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSwgcmVuYW1l
ZCB0byBJbWFnZUJ5U2l6ZUNhY2hlLCByZW1vdmluZyBhbGwgYnV0IHRoZSBjYWNoZSByZWxldmFu
dCBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCeVNpemVDYWNoZTo6YWRkQ2xpZW50KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ5U2l6ZUNhY2hlOjpyZW1vdmVDbGllbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnlTaXplQ2FjaGU6OmdldEltYWdlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ5U2l6ZUNhY2hlOjpwdXRJbWFnZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCeVNpemVDYWNoZTo6Y2xlYXIpOiBOZXcgZnVu
Y3Rpb24sIHRoYXQgY2xlYXJzIHRoZSBjYWNoZSwgaW50cm9kdWNlZCBmb3IgdGhlIG5lZWRzIG9m
IENhY2hlZEltYWdlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCeVNpemVDYWNoZTo6aW1hZ2VG
b3JTaXplKTogTmV3IGZ1bmN0aW9uIHRvIHF1ZXJ5IGFuIEltYWdlKiBmb3IgYSBnaXZlbiBJbnRT
aXplLCBpbnRyb2R1Y2VkIGZvciB0aGUgbmVlZHMgb2YgQ2FjaGVkSW1hZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ5U2l6ZUNhY2hlOjpzaXplRm9yQ2xpZW50KTogTmV3IGZ1bmN0aW9uIHRv
IHF1ZXJ5IGFuIEludFNpemUgZm9yIGEgZ2l2ZW4gcmVuZGVyZXIuCisgICAgICAgICogcmVuZGVy
aW5nL0ltYWdlQnlTaXplQ2FjaGUuaDogQ29waWVkIGZyb20gV2ViQ29yZS9jc3MvQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZS5oLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCeVNpemVDYWNoZTo6Y2xp
ZW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRGaWxsTGF5ZXIpOiBDYWNoZWRJbWFnZTo6Y2Fu
UmVuZGVyKCkgbm93IHRha2VzIGEgUmVuZGVyT2JqZWN0KiBwYXJhbWV0ZXIuCisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25zKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludE1hc2spOiBEaXR0by4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
cGFpbnRNYXNrSW1hZ2VzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJl
cGFpbnRMYXllclJlY3RzRm9ySW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVGaWxsVGlsZVNpemUpOiBEaXR0byAoZm9y
IENhY2hlZEltYWdlOjpzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIoKSkuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllY2VJbWFnZSk6IERpdHRv
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6aW1hZ2VTaXplRm9yRXJyb3IpOiBVc2UgbmV3IENhY2hlZEltYWdlOjpp
bWFnZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCopIG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckltYWdlOjpzZXRJbWFnZVNpemVGb3JBbHRUZXh0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbWFnZTo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKTogRklYTUUK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbWFnZVJlc291cmNlOjpzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIp
OiBQYXNzIG9uIG1fcmVuZGVyZXIgdG8gQ2FjaGVkSW1hZ2U6OnNldENvbnRhaW5lclNpemVGb3JS
ZW5kZXJlcigpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmg6IFJl
bW92ZSBjb25zdG5lc3MgZnJvbSBzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbWFnZVJlc291cmNlOjppbWFnZSk6IFBhc3Mgb24gbV9yZW5kZXJl
ciB0byBDYWNoZWRJbWFnZTo6aW1hZ2UoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
UmVzb3VyY2U6OmltYWdlU2l6ZSk6IFBhc3Mgb24gbV9yZW5kZXJlciB0byBDYWNoZWRJbWFnZTo6
aW1hZ2VTaXplRm9yUmVuZGVyZXIoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2VS
ZXNvdXJjZVN0eWxlSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlUmVzb3Vy
Y2VTdHlsZUltYWdlOjpzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIpOiBSZW1vdmUgY29uc3Ru
ZXNzLCBwYXNzIG9uIG1fcmVuZGVyZXIgdG8gU3R5bGVJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZUZv
clJlbmRlcmVyKCkuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmlzRGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2UpOiBVc2UgbmV3IENhY2hlZEltYWdlOjppbWFnZUZvclJlbmRlcmVyKFJlbmRlck9i
amVjdCopIG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlSW1hZ2VDb250ZW50cyk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogQ2FjaGVkSW1hZ2U6OnNldENvbnRhaW5lclNpemVGb3JS
ZW5kZXJlcigpIG5vdyB0YWtlcyBhIFJlbmRlck9iamVjdCogcGFyYW1ldGVyLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bXVzdFJlcGFp
bnRGaWxsTGF5ZXJzKTogQ2FjaGVkSW1hZ2U6OmNhblJlbmRlcigpIG5vdyB0YWtlcyBhIFJlbmRl
ck9iamVjdCogcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpib3Jk
ZXJJbWFnZUlzTG9hZGVkQW5kQ2FuQmVSZW5kZXJlZCk6IERpdHRvLgorICAgICAgICAqIHJlbmRl
cmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
Q2FjaGVkSW1hZ2U6OmNhblJlbmRlcik6IFBhc3Mgb24gaW5jb21pbmcgcmVuZGVyZXIgdG8gQ2Fj
aGVkSW1hZ2U6OmNhblJlbmRlcigpLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFn
ZTo6aW1hZ2VTaXplKTogUGFzcyBvbiBpbmNvbWluZyByZW5kZXJlciB0byBDYWNoZWRJbWFnZTo6
aW1hZ2VTaXplRm9yUmVuZGVyZXIoKS4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1h
Z2U6OnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcik6IFBhc3Mgb24gaW5jb21pbmcgcmVuZGVy
ZXIgdG8gQ2FjaGVkSW1hZ2U6OnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcigpLgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6YWRkQ2xpZW50KTogUmVtb3ZlIHVubmVlZGVk
IHJldHVybiBzdGF0bWVudCBpbiB2b2lkIG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
Q2FjaGVkSW1hZ2U6OnJlbW92ZUNsaWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVDYWNoZWRJbWFnZTo6aW1hZ2UpOiBQYXNzIG9uIGluY29taW5nIHJlbmRlcmVyIHRvIENhY2hl
ZEltYWdlOjppbWFnZSgpLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZElt
YWdlLmg6IEFkZCBSZW5kZXJPYmplY3QqIHBhcmFtZXRlciB0byBjYW5SZW5kZXIoKS9zZXRDb250
YWluZXJTaXplRm9yUmVuZGVyZXIoKS4gaW1hZ2UoKSBhbHJlYWR5IGhhcyBvbmUsIHRoYXQgd2Fz
IHVudXNlZCBzbyBmYXIuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVk
SW1hZ2UuY3BwOiBJbmxpbmVkIHNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlci4KKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oOiAKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlR2VuZXJhdGVkSW1hZ2U6OnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcik6IEFk
ZCBSZW5kZXJPYmplY3QqIHBhcmFtZXRlci4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5
bGVJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6Y2FuUmVuZGVyKTogRGl0
dG8uCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZUZvclJlbmRl
cmVyKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZCk6IFVzZSBuZXcgQ2FjaGVkSW1h
Z2U6OmltYWdlRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KikgbWV0aG9kLgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6IENsZWFudXAgZmlsZSwgdGhlIGluY2x1ZGUgaGFjayBz
ZWVtcyBub3QgbmVlZGVkIGFueW1vcmUuCisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6c2V0
Q29udGFpbmVyU2l6ZSk6IHMvTGF5b3V0U2l6ZS9JbnRTaXplLyB0byBtYXRjaCB0aGUgY29kZSBp
biBwbGF0Zm9ybS8uCisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmlzU1ZHSW1hZ2UpOiBSZXR1cm4gdHJ1ZS4KKwog
MjAxMS0xMC0xMyAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFtDaHJvbWl1bV0gQWRkIGFuIGFiaWxpdHkgdG8gbG9vayB1
cCBhbmQgZXhwbG9yZSBhbiBvYmplY3QgZnJvbSBhIGhlYXAgcHJvZmlsZS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTk5LDYgKzExOTksNyBAQCBTRVQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCiAgICAgcmVuZGVyaW5n
L0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAKICAgICByZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5jcHAKKyAgICByZW5kZXJpbmcvSW1hZ2VCeVNpemVDYWNoZS5jcHAKICAgICByZW5kZXJpbmcv
SW5saW5lQm94LmNwcAogICAgIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAogICAgIHJlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHdvcmtpbmcgY29weSkKQEAgLTI5NjgsNiArMjk2OCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbWFnZUJ5U2l6ZUNhY2hlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lt
YWdlQnlTaXplQ2FjaGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5n
IGNvcHkpCkBAIC04OTAsNiArODkwLDcgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvR2FwUmVj
dHMuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0hpdFRlc3RSZXF1ZXN0LmgnLAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9JbWFnZUJ5U2l6ZUNhY2hlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9JbmxpbmVCb3gu
aCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0lubGluZUZsb3dCb3guaCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL0lubGluZVRleHRCb3guaCcsCkBAIC00NTA1LDYgKzQ1MDYsNyBAQAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuY3BwJywKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L0ltYWdlQnlTaXplQ2FjaGUuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvSW5saW5lQm94
LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwJywKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwko
cmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBj
b3B5KQpAQCAtMTEyMSw2ICsxMTIxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL0Zp
eGVkVGFibGVMYXlvdXQuY3BwIFwKICAgICByZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlLmNwcCBcCiAgICAgcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIFwKKyAgICByZW5kZXJp
bmcvSW1hZ2VCeVNpemVDYWNoZS5jcHAgXAogICAgIHJlbmRlcmluZy9JbmxpbmVCb3guY3BwIFwK
ICAgICByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAgXAogICAgIHJlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcCBcCkBAIC0yMTgxLDYgKzIxODIsNyBAQCBIRUFERVJTICs9IFwKICAgICByZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oIFwKICAgICByZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlLmggXAogICAgIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggXAorICAgIHJlbmRl
cmluZy9JbWFnZUJ5U2l6ZUNhY2hlLmggXAogICAgIHJlbmRlcmluZy9JbmxpbmVCb3guaCBcCiAg
ICAgcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaCBcCiAgICAgcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzQxMTQsNiArMzQxMTQsMTQgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XEltYWdlQnlTaXplQ2FjaGUuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcSW1hZ2VCeVNpemVDYWNoZS5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcSW5saW5l
Qm94LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5
NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTcxMiw2ICsxNzEyLDggQEAKIAkJNkVCRjBFNzcxMkE5ODY4
ODAwREIxNzA5IC8qIEpTT0VTVGV4dHVyZUZsb2F0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU3NTEyQTk4Njg4MDBEQjE3MDkgLyogSlNPRVNU
ZXh0dXJlRmxvYXQuaCAqLzsgfTsKIAkJNkVFOEE3NzIxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2Vi
R0xDb250ZXh0QXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RUU4QTc3MDEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRB
dHRyaWJ1dGVzLmNwcCAqLzsgfTsKIAkJNkVFOEE3NzMxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2Vi
R0xDb250ZXh0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkVFOEE3NzExMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oICovOyB9OworCQk3MUM3QkI1NzE0NDcxQTA3MDA2Mzk3MkIgLyogSW1hZ2VCeVNp
emVDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUM3QkI1NTE0NDcxQTA3MDA2Mzk3MkIgLyogSW1hZ2VCeVNpemVDYWNoZS5jcHAgKi87IH07
CisJCTcxQzdCQjU4MTQ0NzFBMDcwMDYzOTcyQiAvKiBJbWFnZUJ5U2l6ZUNhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUM3QkI1NjE0NDcxQTA3
MDA2Mzk3MkIgLyogSW1hZ2VCeVNpemVDYWNoZS5oICovOyB9OwogCQk3MUZCOTY3QjEzODNENjQ2
MDBBQzhBNEMgLyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQjk2N0ExMzgzRDY0
NjAwQUM4QTRDIC8qIFNWR0FuaW1hdGVkRW51bWVyYXRpb25Qcm9wZXJ0eVRlYXJPZmYuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjYyNkUwMjBF
RjAyMkZFMDBBMDdFMjAgLyogRm9udEZhc3RQYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNjI2RTAxMEVGMDIyRkUwMEEwN0UyMCAvKiBGb250
RmFzdFBhdGguY3BwICovOyB9OwogCQk3NTBEMDI5MzExRDBFN0YzMDBCRDFCMjcgLyogUmVuZGVy
SW5wdXRTcGVlY2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzUwRDAyOTExMUQwRTdGMzAwQkQxQjI3IC8qIFJlbmRlcklucHV0U3BlZWNoLmNwcCAq
LzsgfTsKQEAgLTg5MDgsNiArODkxMCw4IEBACiAJCTZFQkYwRTc1MTJBOTg2ODgwMERCMTcwOSAv
KiBKU09FU1RleHR1cmVGbG9hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U09FU1RleHR1cmVGbG9hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUU4QTc3
MDEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFRThBNzcxMTBGODAzRjMwMDVBNEEy
NCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcxQzdCQjU1MTQ0NzFBMDcwMDYzOTcyQiAvKiBJbWFnZUJ5U2l6ZUNhY2hlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnlTaXplQ2FjaGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MUM3QkI1NjE0NDcxQTA3MDA2Mzk3
MkIgLyogSW1hZ2VCeVNpemVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZUJ5U2l6ZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI5
NjdBMTM4M0Q2NDYwMEFDOEE0QyAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFy
T2ZmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkRW51bWVy
YXRpb25Qcm9wZXJ0eVRlYXJPZmYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2
MjZFMDEwRUYwMjJGRTAwQTA3RTIwIC8qIEZvbnRGYXN0UGF0aC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFzdFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3NTBEMDI5MTExRDBFN0YzMDBCRDFCMjcgLyogUmVuZGVySW5wdXRTcGVl
Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVySW5wdXRT
cGVlY2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA3MjMsNiArMjA3Mjcs
OCBAQAogCQkJCTkzMDkwODkwMEFGN0VERTQwMDgxREYwMSAvKiBIaXRUZXN0UmVxdWVzdC5oICov
LAogCQkJCTkzMDdGMUQ1MEFGMkQ1OTAwMERCQTMxQSAvKiBIaXRUZXN0UmVzdWx0LmNwcCAqLywK
IAkJCQk5MzA3RjFENjBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5oICovLAorCQkJ
CTcxQzdCQjU1MTQ0NzFBMDcwMDYzOTcyQiAvKiBJbWFnZUJ5U2l6ZUNhY2hlLmNwcCAqLywKKwkJ
CQk3MUM3QkI1NjE0NDcxQTA3MDA2Mzk3MkIgLyogSW1hZ2VCeVNpemVDYWNoZS5oICovLAogCQkJ
CUE4Q0ZGNURGMEExNTVBMDUwMDBBNDIzNCAvKiBJbmxpbmVCb3guY3BwICovLAogCQkJCUE4Q0ZG
NURFMEExNTVBMDUwMDBBNDIzNCAvKiBJbmxpbmVCb3guaCAqLywKIAkJCQlBOENGRjVERDBBMTU1
QTA1MDAwQTQyMzQgLyogSW5saW5lRmxvd0JveC5jcHAgKi8sCkBAIC0yNDYwNyw2ICsyNDYxMyw3
IEBACiAJCQkJMzEwNjAzNzkxNDMyODFDRDAwQUJGNEJBIC8qIERPTVdlYktpdENTU0ZpbHRlclZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTA2MDM3QjE0MzI4MUNEMDBBQkY0QkEgLyogRE9N
V2ViS2l0Q1NTRmlsdGVyVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBQ0Iy
MTIxNDNFNzEyODAwNkJDQTVGIC8qIEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MUM3QkI1ODE0NDcxQTA3MDA2Mzk3MkIgLyogSW1hZ2VCeVNpemVDYWNoZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0yNzQ1Nyw2ICsyNzQ2NCw3IEBACiAJCQkJMzEwNjAzN0ExNDMy
ODFDRDAwQUJGNEJBIC8qIERPTVdlYktpdENTU0ZpbHRlclZhbHVlLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMjlBQ0IyMTQxNDNFNzQ5ODAwNkJDQTVGIC8qIEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMDkwODdGMTQ0NEZEQjIwMDAyODkxNyAvKiBTY3Jv
bGxiYXJUaGVtZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3MUM3QkI1NzE0NDcxQTA3MDA2Mzk3
MkIgLyogSW1hZ2VCeVNpemVDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEz
LDcgKzE5MTMsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liCiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgcmVuZGVyZWQgaW1hZ2Ug
d2FzIHN0cmV0Y2hlZCBmcm9tIG9uZS1kaW1lbnNpb25hbCBmaWxlIGltYWdlCiAgICAgICAgICAg
ICBpZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRTaXpl
IGltYWdlU2l6ZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUoaW1hZ2UtPnZpZXco
KS0+em9vbUZhY3RvcigpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9
IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemVGb3JSZW5kZXJlcihtX3JlbmRlcmVyLCBp
bWFnZS0+dmlldygpLT56b29tRmFjdG9yKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBpbWFn
ZVNpemUuaGVpZ2h0KCkgPD0gMSB8fCBpbWFnZVNpemUud2lkdGgoKSA8PSAxOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2
aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDM5LDcgKzQzOSw3IEBAIC0gKE5TSW1hZ2UqKWltYWdlCiAgICAgV2Vi
Q29yZTo6Q2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmVu
ZGVySW1hZ2UqPihyZW5kZXJlciktPmNhY2hlZEltYWdlKCk7CiAgICAgaWYgKCFjYWNoZWRJbWFn
ZSB8fCBjYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gbmlsOwot
ICAgIHJldHVybiBjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+Z2V0TlNJbWFnZSgpOworICAgIHJldHVy
biBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlciktPmdldE5TSW1hZ2UoKTsK
IH0KIAogQGVuZApAQCAtNDY0LDcgKzQ2NCw3IEBAIC0gKE5TRGF0YSAqKV9pbWFnZVRJRkZSZXBy
ZXNlbnRhdGlvbgogICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlJlbmRlckltYWdlKj4ocmVuZGVyZXIpLT5jYWNoZWRJbWFnZSgpOwog
ICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gKE5TRGF0YSAqKWNhY2hlZEltYWdlLT5pbWFn
ZSgpLT5nZXRUSUZGUmVwcmVzZW50YXRpb24oKTsKKyAgICByZXR1cm4gKE5TRGF0YSAqKWNhY2hl
ZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKS0+Z2V0VElGRlJlcHJlc2VudGF0aW9u
KCk7CiB9CiAKIC0gKE5TVVJMICopX2dldFVSTEF0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCShy
ZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50
aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc4LDcgKzM3OCw3IEBAIFFWYXJpYW50IFF0UGl4
bWFwSW5zdGFuY2U6OnZhcmlhbnRGcm9tT2IKICAgICAgICAgaWYgKCFjYWNoZWRJbWFnZSkKICAg
ICAgICAgICAgIGdvdG8gcmV0dXJuRW1wdHlWYXJpYW50OwogCi0gICAgICAgIEltYWdlKiBpbWFn
ZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOworICAgICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJ
bWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCkpOwogICAgICAg
ICBpZiAoIWltYWdlKQogICAgICAgICAgICAgZ290byByZXR1cm5FbXB0eVZhcmlhbnQ7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAkocmV2aXNpb24gOTczNjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NywxNiArNDcsMTYgQEAgU3RyaW5nIENTU0NhbnZhc1ZhbHVlOjpjc3NUZXh0KCkgY29uc3QK
IHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQqLCBj
b25zdCBGbG9hdFJlY3QmIGNoYW5nZWRSZWN0KQogewogICAgIEludFJlY3QgaW1hZ2VDaGFuZ2VS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdCk7Ci0gICAgUmVuZGVyT2JqZWN0U2l6
ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NsaWVudHMuZW5kKCk7Ci0gICAgZm9y
IChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBtX2NsaWVu
dHMuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAgY3Vyci0+Zmlyc3QtPmlt
YWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFu
Z2VSZWN0KTsKKyAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGNsaWVudHMoKS5lbmQoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6
Y29uc3RfaXRlcmF0b3IgY3VyciA9IGNsaWVudHMoKS5iZWdpbigpOyBjdXJyICE9IGVuZDsgKytj
dXJyKQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmZpcnN0KS0+aW1h
Z2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcyksICZpbWFnZUNoYW5n
ZVJlY3QpOwogfQogCiB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKEhUTUxDYW52
YXNFbGVtZW50KikKIHsKLSAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdFNpemVDb3Vu
dE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IG1fY2xpZW50cy5iZWdpbigpOyBjdXJyICE9IGVu
ZDsgKytjdXJyKQotICAgICAgICBjdXJyLT5maXJzdC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0
PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOworICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2Jq
ZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7
IGN1cnIgIT0gZW5kOyArK2N1cnIpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4o
Y3Vyci0+Zmlyc3QpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0
aGlzKSk7CiB9CiAKIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0Rlc3Ryb3llZChIVE1MQ2Fu
dmFzRWxlbWVudCogZWxlbWVudCkKQEAgLTg1LDcgKzg1LDcgQEAgSFRNTENhbnZhc0VsZW1lbnQq
IENTU0NhbnZhc1ZhbHVlOjplbGVtZQogCiBQYXNzUmVmUHRyPEltYWdlPiBDU1NDYW52YXNWYWx1
ZTo6aW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgLypzaXplKi8p
CiB7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhyZW5kZXJlcikpOworICAgIEFTU0VS
VChjbGllbnRzKCkuY29udGFpbnMocmVuZGVyZXIpKTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCog
ZWx0ID0gZWxlbWVudChyZW5kZXJlci0+ZG9jdW1lbnQoKSk7CiAgICAgaWYgKCFlbHQgfHwgIWVs
dC0+YnVmZmVyKCkpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAg
UGFzc1JlZlB0cjxJbWFnZT4gQ1NTR3JhZGllbnRWYWx1ZTo6aW1hZwogCiAgICAgYm9vbCBjYWNo
ZWFibGUgPSBpc0NhY2hlYWJsZSgpOwogICAgIGlmIChjYWNoZWFibGUpIHsKLSAgICAgICAgaWYg
KCFtX2NsaWVudHMuY29udGFpbnMocmVuZGVyZXIpKQorICAgICAgICBpZiAoIWNsaWVudHMoKS5j
b250YWlucyhyZW5kZXJlcikpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAvLyBO
ZWVkIHRvIGxvb2sgdXAgb3VyIHNpemUuICBDcmVhdGUgYSBzdHJpbmcgb2Ygd2lkdGgqaGVpZ2h0
IHRvIHVzZSBhcyBhIGhhc2gga2V5LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdl
R2VuZXJhdG9yVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYy
ICs0NywyNSBAQCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjp+Q1NTSW1hZ2VHZW5lcmF0CiB2b2lk
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIHJlZigpOwotICAgIGlmICghc2l6ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIG1fc2l6ZXMuYWRkKHNpemUpOwotICAgIAotICAgIFJlbmRlck9iamVj
dFNpemVDb3VudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuZmluZChyZW5kZXJlcik7Ci0g
ICAgaWYgKGl0ID09IG1fY2xpZW50cy5lbmQoKSkKLSAgICAgICAgbV9jbGllbnRzLmFkZChyZW5k
ZXJlciwgU2l6ZUNvdW50UGFpcihzaXplLCAxKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFNpemVD
b3VudFBhaXImIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICsrc2l6ZUNvdW50LnNl
Y29uZDsKLSAgICB9CisgICAgbV9pbWFnZUNhY2hlLmFkZENsaWVudChyZW5kZXJlciwgc2l6ZSk7
CiB9CiAKIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KFJlbmRlck9i
amVjdCogcmVuZGVyZXIpCiB7Ci0gICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjppdGVyYXRv
ciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9jbGll
bnRzLmVuZCgpKTsKLQotICAgIFNpemVDb3VudFBhaXImIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7
Ci0gICAgSW50U2l6ZSBzaXplID0gc2l6ZUNvdW50LmZpcnN0OwotICAgIGlmICghc2l6ZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbV9zaXplcy5yZW1vdmUoc2l6ZSk7Ci0gICAgICAgIGlmICghbV9z
aXplcy5jb250YWlucyhzaXplKSkKLSAgICAgICAgICAgIG1faW1hZ2VzLnJlbW92ZShzaXplKTsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKCEtLXNpemVDb3VudC5zZWNvbmQpCi0gICAgICAgIG1fY2xp
ZW50cy5yZW1vdmUocmVuZGVyZXIpOwotCisgICAgbV9pbWFnZUNhY2hlLnJlbW92ZUNsaWVudChy
ZW5kZXJlcik7CiAgICAgZGVyZWYoKTsKIH0KIAogSW1hZ2UqIENTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OmdldEltYWdlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNpemUp
CiB7Ci0gICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50
cy5maW5kKHJlbmRlcmVyKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9jbGllbnRzLmVuZCgpKTsKLQot
ICAgIFNpemVDb3VudFBhaXImIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7Ci0gICAgSW50U2l6ZSBv
bGRTaXplID0gc2l6ZUNvdW50LmZpcnN0OwotICAgIGlmIChvbGRTaXplICE9IHNpemUpIHsKLSAg
ICAgICAgLy8gSWYgcmVuZGVyZXIgaXMgdGhlIG9ubHkgY2xpZW50LCBtYWtlIHN1cmUgd2UgZG9u
J3QgZGVsZXRlIHRoaXMuCi0gICAgICAgIFJlZlB0cjxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPiBw
cm90ZWN0KHRoaXMpOwotICAgICAgICByZW1vdmVDbGllbnQocmVuZGVyZXIpOwotICAgICAgICBh
ZGRDbGllbnQocmVuZGVyZXIsIHNpemUpOwotICAgIH0KLSAgICAKLSAgICAvLyBEb24ndCBnZW5l
cmF0ZSBhbiBpbWFnZSBmb3IgZW1wdHkgc2l6ZXMuCi0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICAvLyBMb29rIHVwIHRoZSBpbWFnZSBpbiBvdXIg
Y2FjaGUuCi0gICAgcmV0dXJuIG1faW1hZ2VzLmdldChzaXplKS5nZXQoKTsKKyAgICAvLyBJZiBy
ZW5kZXJlciBpcyB0aGUgb25seSBjbGllbnQsIG1ha2Ugc3VyZSB3ZSBkb24ndCBkZWxldGUgdGhp
cywgaWYgdGhlIHNpemUgY2hhbmdlcyAoYXMgdGhpcyB3aWxsIHJlc3VsdCBpbiBhZGRDbGllbnQv
cmVtb3ZlQ2xpZW50IGNhbGxzKS4KKyAgICBSZWZQdHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4g
cHJvdGVjdCh0aGlzKTsKKyAgICByZXR1cm4gbV9pbWFnZUNhY2hlLmdldEltYWdlKHJlbmRlcmVy
LCBzaXplKTsKIH0KIAogdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpwdXRJbWFnZShjb25z
dCBJbnRTaXplJiBzaXplLCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKIHsKLSAgICBtX2ltYWdl
cy5hZGQoc2l6ZSwgaW1hZ2UpOworICAgIG1faW1hZ2VDYWNoZS5wdXRJbWFnZShzaXplLCBpbWFn
ZSk7CiB9CiAKIFN0eWxlR2VuZXJhdGVkSW1hZ2UqIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6Omdl
bmVyYXRlZEltYWdlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRv
clZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJh
dG9yVmFsdWUuaAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsNyBAQAogI2Rl
ZmluZSBDU1NJbWFnZUdlbmVyYXRvclZhbHVlX2gKIAogI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCi0j
aW5jbHVkZSAiSW50U2l6ZUhhc2guaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlICJJbWFnZUJ5U2l6ZUNhY2hlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTYs
MTQgKzUzLDkgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIEltYWdlKiBnZXRJbWFnZShSZW5kZXJP
YmplY3QqLCBjb25zdCBJbnRTaXplJik7CiAgICAgdm9pZCBwdXRJbWFnZShjb25zdCBJbnRTaXpl
JiwgUGFzc1JlZlB0cjxJbWFnZT4pOworICAgIGNvbnN0IFJlbmRlck9iamVjdFNpemVDb3VudE1h
cCYgY2xpZW50cygpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VDYWNoZS5jbGllbnRzKCk7IH0KIAot
ICAgIHR5cGVkZWYgcGFpcjxJbnRTaXplLCBpbnQ+IFNpemVDb3VudFBhaXI7Ci0gICAgdHlwZWRl
ZiBIYXNoTWFwPFJlbmRlck9iamVjdCosIFNpemVDb3VudFBhaXI+IFJlbmRlck9iamVjdFNpemVD
b3VudE1hcDsKLQotICAgIEhhc2hDb3VudGVkU2V0PEludFNpemU+IG1fc2l6ZXM7IC8vIEEgY291
bnQgb2YgaG93IG1hbnkgdGltZXMgYSBnaXZlbiBpbWFnZSBzaXplIGlzIGluIHVzZS4KLSAgICBS
ZW5kZXJPYmplY3RTaXplQ291bnRNYXAgbV9jbGllbnRzOyAvLyBBIG1hcCBmcm9tIFJlbmRlck9i
amVjdHMgKHdpdGggZW50cnkgY291bnQpIHRvIGltYWdlIHNpemVzLgotICAgIEhhc2hNYXA8SW50
U2l6ZSwgUmVmUHRyPEltYWdlPiA+IG1faW1hZ2VzOyAvLyBBIGNhY2hlIG9mIEltYWdlIG9iamVj
dHMgYnkgaW1hZ2Ugc2l6ZS4KLSAgICAKKyAgICBJbWFnZUJ5U2l6ZUNhY2hlIG1faW1hZ2VDYWNo
ZTsKICAgICBSZWZQdHI8U3R5bGVHZW5lcmF0ZWRJbWFnZT4gbV9pbWFnZTsKICAgICBib29sIG1f
YWNjZXNzZWRJbWFnZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0
b25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgYm9vbCBpc0RlbGV0YWJsZUVsZW1lbnQoY29uc3QgTm9k
CiAgICAgICAgIC8vIEFsbG93IGJsb2NrcyB0aGF0IGhhdmUgYmFja2dyb3VuZCBpbWFnZXMKICAg
ICAgICAgaWYgKHN0eWxlLT5oYXNCYWNrZ3JvdW5kSW1hZ2UoKSkgewogICAgICAgICAgICAgZm9y
IChjb25zdCBGaWxsTGF5ZXIqIGJhY2tncm91bmQgPSBzdHlsZS0+YmFja2dyb3VuZExheWVycygp
OyBiYWNrZ3JvdW5kOyBiYWNrZ3JvdW5kID0gYmFja2dyb3VuZC0+bmV4dCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGJhY2tncm91bmQtPmltYWdlKCkgJiYgYmFja2dyb3VuZC0+aW1hZ2UoKS0+
Y2FuUmVuZGVyKDEpKQorICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kLT5pbWFnZSgpICYm
IGJhY2tncm91bmQtPmltYWdlKCktPmNhblJlbmRlcihyZW5kZXJlciwgMSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDk3MzYzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjU3LDcgKzI1Nyw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aChib29sIGln
bm9yZVAKIAogICAgICAgICAvLyBpZiB0aGUgaW1hZ2UgaXMgYXZhaWxhYmxlLCB1c2UgaXRzIHdp
ZHRoCiAgICAgICAgIGlmIChtX2ltYWdlTG9hZGVyLmltYWdlKCkpCi0gICAgICAgICAgICByZXR1
cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUoMS4wZikud2lkdGgoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZUZvclJlbmRlcmVy
KHJlbmRlcmVyKCksIDEuMGYpLndpZHRoKCk7CiAgICAgfQogCiAgICAgaWYgKGlnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cykKQEAgLTI4MCw3ICsyODAsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6
aGVpZ2h0KGJvb2wgaWdub3JlCiAKICAgICAgICAgLy8gaWYgdGhlIGltYWdlIGlzIGF2YWlsYWJs
ZSwgdXNlIGl0cyBoZWlnaHQKICAgICAgICAgaWYgKG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKLSAg
ICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZSgxLjBmKS5o
ZWlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdl
U2l6ZUZvclJlbmRlcmVyKHJlbmRlcmVyKCksIDEuMGYpLmhlaWdodCgpOwogICAgIH0KIAogICAg
IGlmIChpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpCkBAIC0yOTcsNyArMjk3LDcgQEAgaW50IEhU
TUxJbWFnZUVsZW1lbnQ6Om5hdHVyYWxXaWR0aCgpIGNvbgogICAgIGlmICghbV9pbWFnZUxvYWRl
ci5pbWFnZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBtX2ltYWdlTG9hZGVy
LmltYWdlKCktPmltYWdlU2l6ZSgxLjBmKS53aWR0aCgpOworICAgIHJldHVybiBtX2ltYWdlTG9h
ZGVyLmltYWdlKCktPmltYWdlU2l6ZUZvclJlbmRlcmVyKHJlbmRlcmVyKCksIDEuMGYpLndpZHRo
KCk7CiB9CiAKIGludCBIVE1MSW1hZ2VFbGVtZW50OjpuYXR1cmFsSGVpZ2h0KCkgY29uc3QKQEAg
LTMwNSw3ICszMDUsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbEhlaWdodCgpIGNv
CiAgICAgaWYgKCFtX2ltYWdlTG9hZGVyLmltYWdlKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKDEuMGYpLmhlaWdodCgp
OworICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCktPmltYWdlU2l6ZUZvclJlbmRlcmVy
KHJlbmRlcmVyKCksIDEuMGYpLmhlaWdodCgpOwogfQogCiBib29sIEhUTUxJbWFnZUVsZW1lbnQ6
OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9JbWFnZURvY3VtZW50LmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcg
QEAgdm9pZCBJbWFnZURvY3VtZW50UGFyc2VyOjpmaW5pc2goKQogCiAgICAgICAgIC8vIFJlcG9y
dCB0aGUgbmF0dXJhbCBpbWFnZSBzaXplIGluIHRoZSBwYWdlIHRpdGxlLCByZWdhcmRsZXNzIG9m
IHpvb20KICAgICAgICAgLy8gbGV2ZWwuCi0gICAgICAgIExheW91dFNpemUgc2l6ZSA9IGNhY2hl
ZEltYWdlLT5pbWFnZVNpemUoMS4wZik7CisgICAgICAgIExheW91dFNpemUgc2l6ZSA9IGNhY2hl
ZEltYWdlLT5pbWFnZVNpemVGb3JSZW5kZXJlcihkb2N1bWVudCgpLT5pbWFnZUVsZW1lbnQoKS0+
cmVuZGVyZXIoKSwgMS4wZik7CiAgICAgICAgIGlmIChzaXplLndpZHRoKCkpIHsKICAgICAgICAg
ICAgIC8vIENvbXB1dGUgdGhlIHRpdGxlLCB3ZSB1c2UgdGhlIGRlY29kZWQgZmlsZW5hbWUgb2Yg
dGhlIHJlc291cmNlLCBmYWxsaW5nCiAgICAgICAgICAgICAvLyBiYWNrIG9uIHRoZSAoZGVjb2Rl
ZCkgaG9zdG5hbWUgaWYgdGhlcmUgaXMgbm8gcGF0aC4KQEAgLTIzMyw4ICsyMzMsOCBAQCBmbG9h
dCBJbWFnZURvY3VtZW50OjpzY2FsZSgpIGNvbnN0CiAgICAgaWYgKCF2aWV3KQogICAgICAgICBy
ZXR1cm4gMTsKIAotICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNh
Y2hlZEltYWdlKCktPmltYWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSk7Ci0gICAgTGF5b3V0
U2l6ZSB3aW5kb3dTaXplID0gSW50U2l6ZSh2aWV3LT53aWR0aCgpLCB2aWV3LT5oZWlnaHQoKSk7
CisgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2Uo
KS0+aW1hZ2VTaXplRm9yUmVuZGVyZXIobV9pbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCksIHBhZ2Va
b29tRmFjdG9yKHRoaXMpKTsKKyAgICBMYXlvdXRTaXplIHdpbmRvd1NpemUgPSBMYXlvdXRTaXpl
KHZpZXctPndpZHRoKCksIHZpZXctPmhlaWdodCgpKTsKICAgICAKICAgICBmbG9hdCB3aWR0aFNj
YWxlID0gKGZsb2F0KXdpbmRvd1NpemUud2lkdGgoKSAvIGltYWdlU2l6ZS53aWR0aCgpOwogICAg
IGZsb2F0IGhlaWdodFNjYWxlID0gKGZsb2F0KXdpbmRvd1NpemUuaGVpZ2h0KCkgLyBpbWFnZVNp
emUuaGVpZ2h0KCk7CkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBJbWFnZURvY3VtZW50OjpyZXNp
emVJbWFnZVRvRml0KCkKICAgICBpZiAoIW1faW1hZ2VFbGVtZW50KQogICAgICAgICByZXR1cm47
CiAKLSAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFn
ZSgpLT5pbWFnZVNpemUocGFnZVpvb21GYWN0b3IodGhpcykpOworICAgIExheW91dFNpemUgaW1h
Z2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZUZvclJlbmRl
cmVyKG1faW1hZ2VFbGVtZW50LT5yZW5kZXJlcigpLCBwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CiAK
ICAgICBmbG9hdCBzY2FsZSA9IHRoaXMtPnNjYWxlKCk7CiAgICAgbV9pbWFnZUVsZW1lbnQtPnNl
dFdpZHRoKHN0YXRpY19jYXN0PGludD4oaW1hZ2VTaXplLndpZHRoKCkgKiBzY2FsZSkpOwpAQCAt
Mjg3LDcgKzI4Nyw3IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6aW1hZ2VVcGRhdGVkKCkKICAgICBp
ZiAobV9pbWFnZVNpemVJc0tub3duKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbWFn
ZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSku
aXNFbXB0eSgpKQorICAgIGlmIChtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VT
aXplRm9yUmVuZGVyZXIobV9pbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCksIHBhZ2Vab29tRmFjdG9y
KHRoaXMpKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBtX2ltYWdlU2l6
ZUlzS25vd24gPSB0cnVlOwpAQCAtMzAzLDggKzMwMyw5IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6
cmVzdG9yZUltYWdlU2l6ZSgpCiAgICAgaWYgKCFtX2ltYWdlRWxlbWVudCB8fCAhbV9pbWFnZVNp
emVJc0tub3duKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9pbWFnZUVsZW1lbnQtPnNl
dFdpZHRoKG1faW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUocGFnZVpvb21G
YWN0b3IodGhpcykpLndpZHRoKCkpOwotICAgIG1faW1hZ2VFbGVtZW50LT5zZXRIZWlnaHQobV9p
bWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlz
KSkuaGVpZ2h0KCkpOworICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQt
PmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZUZvclJlbmRlcmVyKG1faW1hZ2VFbGVtZW50LT5yZW5k
ZXJlcigpLCBwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CisgICAgbV9pbWFnZUVsZW1lbnQtPnNldFdp
ZHRoKGltYWdlU2l6ZS53aWR0aCgpKTsKKyAgICBtX2ltYWdlRWxlbWVudC0+c2V0SGVpZ2h0KGlt
YWdlU2l6ZS5oZWlnaHQoKSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBpZiAo
aW1hZ2VGaXRzSW5XaW5kb3coKSkKQEAgLTMyNCw3ICszMjUsNyBAQCBib29sIEltYWdlRG9jdW1l
bnQ6OmltYWdlRml0c0luV2luZG93KCkgCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZUVsZW1lbnQtPmNhY2hl
ZEltYWdlKCktPmltYWdlU2l6ZShwYWdlWm9vbUZhY3Rvcih0aGlzKSk7CisgICAgTGF5b3V0U2l6
ZSBpbWFnZVNpemUgPSBtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplRm9y
UmVuZGVyZXIobV9pbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCksIHBhZ2Vab29tRmFjdG9yKHRoaXMp
KTsKICAgICBMYXlvdXRTaXplIHdpbmRvd1NpemUgPSBMYXlvdXRTaXplKHZpZXctPndpZHRoKCks
IHZpZXctPmhlaWdodCgpKTsKICAgICAKICAgICByZXR1cm4gaW1hZ2VTaXplLndpZHRoKCkgPD0g
d2luZG93U2l6ZS53aWR0aCgpICYmIGltYWdlU2l6ZS5oZWlnaHQoKSA8PSB3aW5kb3dTaXplLmhl
aWdodCgpOyAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Myw5ICs4Myw5IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZWZhdWx0Rm9udCA9ICIxMHB4IHNhbnMtc2VyaWYi
OwogCi1zdGF0aWMgYm9vbCBpc09yaWdpbkNsZWFuKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSwg
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQorc3RhdGljIGJvb2wgaXNPcmlnaW5DbGVh
bihDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCiB7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZS0+aW1h
Z2UoKS0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSkKKyAgICBpZiAoIWNhY2hlZEltYWdlLT5p
bWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKS0+aGFzU2luZ2xlU2VjdXJpdHlPcmln
aW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChjYWNoZWRJbWFnZS0+cGFzc2Vz
QWNjZXNzQ29udHJvbENoZWNrKHNlY3VyaXR5T3JpZ2luKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xMjIwLDcgKzEyMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXBw
bHlTaGFkCiBzdGF0aWMgTGF5b3V0U2l6ZSBzaXplKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlKQog
ewogICAgIGlmIChDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2Uo
KSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlLT5pbWFnZVNpemUoMS4wZik7IC8vIEZJWE1F
OiBOb3Qgc3VyZSBhYm91dCB0aGlzLgorICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2UtPmltYWdl
U2l6ZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpLCAxLjBmKTsgLy8gRklYTUU6IE5vdCBz
dXJlIGFib3V0IHRoaXMuCiAgICAgcmV0dXJuIEludFNpemUoKTsKIH0KIApAQCAtMTMyMCw3ICsx
MzIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogCiAgICAg
Y2hlY2tPcmlnaW4oaW1hZ2UpOwogCi0gICAgYy0+ZHJhd0ltYWdlKGNhY2hlZEltYWdlLT5pbWFn
ZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBub3JtYWxpemVkRHN0UmVjdCwgbm9ybWFsaXplZFNy
Y1JlY3QsIG9wKTsKKyAgICBjLT5kcmF3SW1hZ2UoY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVy
ZXIoaW1hZ2UtPnJlbmRlcmVyKCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBub3JtYWxpemVkRHN0
UmVjdCwgbm9ybWFsaXplZFNyY1JlY3QsIG9wKTsKICAgICBkaWREcmF3KG5vcm1hbGl6ZWREc3RS
ZWN0KTsKIH0KIApAQCAtMTYzMSwxMSArMTYzMSwxMSBAQCBQYXNzUmVmUHRyPENhbnZhc1BhdHRl
cm4+IENhbnZhc1JlbmRlcmluCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgQ2FjaGVkSW1hZ2Uq
IGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdlKCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFn
ZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlKCkpCisgICAgaWYgKCFjYWNoZWRJbWFn
ZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRl
cmVyKCkpKQogICAgICAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEltYWdlOjpudWxs
SW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgdHJ1ZSk7CiAKLSAgICBib29sIG9yaWdpbkNsZWFu
ID0gaXNPcmlnaW5DbGVhbihjYWNoZWRJbWFnZSwgY2FudmFzKCktPnNlY3VyaXR5T3JpZ2luKCkp
OwotICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoY2FjaGVkSW1hZ2UtPmltYWdlKCks
IHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKTsKKyAgICBib29sIG9yaWdpbkNsZWFuID0g
aXNPcmlnaW5DbGVhbihjYWNoZWRJbWFnZSwgaW1hZ2UsIGNhbnZhcygpLT5zZWN1cml0eU9yaWdp
bigpKTsKKyAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhY2hlZEltYWdlLT5pbWFn
ZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2lu
Q2xlYW4pOwogfQogCiBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6Y3JlYXRlUGF0dGVybihIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcg
QEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojp3b3VsZFRhaW50TwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2FjaGVk
SW1hZ2UoKTsKLSAgICBpZiAoIWNhY2hlZEltYWdlLT5pbWFnZSgpLT5oYXNTaW5nbGVTZWN1cml0
eU9yaWdpbigpKQorICAgIGlmICghY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2Ut
PnJlbmRlcmVyKCkpLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHJldHVybiB3b3VsZFRhaW50T3JpZ2luKGNhY2hlZEltYWdlLT5yZXNwb25z
ZSgpLnVybCgpKSAmJiAhY2FjaGVkSW1hZ2UtPnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhjYW52
YXMoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDk3MzYzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzE3Miw3ICszMTcyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleEltYWdlMkQoRwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdGV4SW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1h
Z2UtPmNhY2hlZEltYWdlKCktPmltYWdlKCksCisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCkt
PmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpLAogICAgICAgICAgICAgICAgICAg
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCkBAIC0z
MzczLDcgKzMzNzMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2Uy
CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1h
dCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlKCksCisgICAgdGV4U3ViSW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFn
ZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhLCBlYyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDI4IEBAIGJv
b2wgQ2FjaGVkSW1hZ2U6OndpbGxQYWludEJyb2tlbkltYWdlKCkKICAgICByZXR1cm4gZXJyb3JP
Y2N1cnJlZCgpICYmIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsKIH0KIAotSW1hZ2UqIENhY2hl
ZEltYWdlOjppbWFnZSgpIGNvbnN0CitJbWFnZSogQ2FjaGVkSW1hZ2U6Omxvb2t1cEltYWdlRm9y
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBBZGQgbG9n
aWMgZm9yIHRoaXMgaW4gd2Via2l0Lm9yZy9iLzQ3MTU2LgorICAgIFVOVVNFRF9QQVJBTShzaXpl
KTsKKyAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKK30KKworSW1hZ2UqIENhY2hlZEltYWdlOjps
b29rdXBJbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0
Cit7CisgICAgLy8gRklYTUU6IEFkZCBsb2dpYyBmb3IgdGhpcyBpbiB3ZWJraXQub3JnL2IvNDcx
NTYuCisgICAgVU5VU0VEX1BBUkFNKHJlbmRlcmVyKTsKKyAgICByZXR1cm4gbV9pbWFnZS5nZXQo
KTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gQ2FjaGVkSW1hZ2U6Omxvb2t1cE9yQ3JlYXRlSW1h
Z2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIC8vIEZJ
WE1FOiBBZGQgbG9naWMgZm9yIHRoaXMgaW4gd2Via2l0Lm9yZy9iLzQ3MTU2LgorICAgIFVOVVNF
RF9QQVJBTShyZW5kZXJlcik7CisgICAgcmV0dXJuIG1faW1hZ2U7Cit9CisKK0ltYWdlKiBDYWNo
ZWRJbWFnZTo6aW1hZ2UoKQogewogICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7CiAKQEAgLTE0
NiwxMCArMTY3LDMxIEBAIEltYWdlKiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBjb25zdAogICAgIHJl
dHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CiB9CiAKLXZvaWQgQ2FjaGVkSW1hZ2U6OnNldEltYWdl
Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBjb250YWluZXJTaXplKQorSW1hZ2UqIENhY2hl
ZEltYWdlOjppbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7
CisgICAgQVNTRVJUKCFpc1B1cmdlYWJsZSgpKTsKKworICAgIGlmIChlcnJvck9jY3VycmVkKCkg
JiYgbV9zaG91bGRQYWludEJyb2tlbkltYWdlKSB7CisgICAgICAgIC8vIFJldHVybmluZyB0aGUg
MXggYnJva2VuIGltYWdlIGlzIG5vbi1pZGVhbCwgYnV0IHdlIGNhbm5vdCByZWxpYWJseSBhY2Nl
c3MgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIGRldmljZVNjYWxlRmFjdG9yIGZyb20gaGVy
ZS4gSXQgaXMgY3JpdGljYWwgdGhhdCBjYWxsZXJzIHVzZSBDYWNoZWRJbWFnZTo6YnJva2VuSW1h
Z2UoKSAKKyAgICAgICAgLy8gd2hlbiB0aGV5IG5lZWQgdGhlIHJlYWwsIGRldmljZVNjYWxlRmFj
dG9yLWFwcHJvcHJpYXRlIGJyb2tlbiBpbWFnZSBpY29uLiAKKyAgICAgICAgcmV0dXJuIGJyb2tl
bkltYWdlKDEpLmZpcnN0OworICAgIH0KKwogICAgIGlmIChtX2ltYWdlKQotICAgICAgICBtX2lt
YWdlLT5zZXRDb250YWluZXJTaXplKGNvbnRhaW5lclNpemUpOworICAgICAgICByZXR1cm4gbG9v
a3VwT3JDcmVhdGVJbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKS5nZXQoKTsKKworICAgIHJldHVy
biBJbWFnZTo6bnVsbEltYWdlKCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OnNldENvbnRhaW5l
clNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRT
aXplJiBjb250YWluZXJTaXplKQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gRklYTUU6IEFkZCBsb2dpYyBmb3IgdGhpcyBpbiB3ZWJraXQub3JnL2IvNDcx
NTYuCisgICAgVU5VU0VEX1BBUkFNKHJlbmRlcmVyKTsKKyAgICBtX2ltYWdlLT5zZXRDb250YWlu
ZXJTaXplKGNvbnRhaW5lclNpemUpOwogfQogCiBib29sIENhY2hlZEltYWdlOjp1c2VzSW1hZ2VD
b250YWluZXJTaXplKCkgY29uc3QKQEAgLTE3NiwxMSArMjE4LDEyIEBAIGJvb2wgQ2FjaGVkSW1h
Z2U6OmltYWdlSGFzUmVsYXRpdmVIZWlnaHQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUludFNp
emUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAorSW50U2l6
ZSBDYWNoZWRJbWFnZTo6aW1hZ2VTaXplRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllcikKIHsKICAgICBBU1NFUlQoIWlzUHVyZ2VhYmxlKCkp
OwogCi0gICAgaWYgKCFtX2ltYWdlKQorICAgIEltYWdlKiBpbWFnZSA9IGxvb2t1cEltYWdlRm9y
UmVuZGVyZXIocmVuZGVyZXIpOworICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBJbnRT
aXplKCk7CiAgICAgaWYgKG11bHRpcGxpZXIgPT0gMS4wZikKICAgICAgICAgcmV0dXJuIG1faW1h
Z2UtPnNpemUoKTsKQEAgLTE5NywzNSArMjQwLDYgQEAgSW50U2l6ZSBDYWNoZWRJbWFnZTo6aW1h
Z2VTaXplKGZsb2F0IG11bAogICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogfQog
Ci1JbnRSZWN0IENhY2hlZEltYWdlOjppbWFnZVJlY3QoZmxvYXQgbXVsdGlwbGllcikgY29uc3QK
LXsKLSAgICBBU1NFUlQoIWlzUHVyZ2VhYmxlKCkpOwotCi0gICAgaWYgKCFtX2ltYWdlKQotICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIGlmIChtdWx0aXBsaWVyID09IDEuMGYgfHwgKCFt
X2ltYWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCkgJiYgIW1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0
KCkpKQotICAgICAgICByZXR1cm4gbV9pbWFnZS0+cmVjdCgpOwotCi0gICAgZmxvYXQgd2lkdGhN
dWx0aXBsaWVyID0gKG1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKSA/IDEuMGYgOiBtdWx0aXBs
aWVyKTsKLSAgICBmbG9hdCBoZWlnaHRNdWx0aXBsaWVyID0gKG1faW1hZ2UtPmhhc1JlbGF0aXZl
SGVpZ2h0KCkgPyAxLjBmIDogbXVsdGlwbGllcik7Ci0KLSAgICAvLyBEb24ndCBsZXQgaW1hZ2Vz
IHRoYXQgaGF2ZSBhIHdpZHRoL2hlaWdodCA+PSAxIHNocmluayBiZWxvdyAxIHdoZW4gem9vbWVk
LgotICAgIGJvb2wgaGFzV2lkdGggPSBtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSA+IDA7Ci0gICAg
Ym9vbCBoYXNIZWlnaHQgPSBtX2ltYWdlLT5yZWN0KCkuaGVpZ2h0KCkgPiAwOwotCi0gICAgaW50
IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSAqIHdpZHRo
TXVsdGlwbGllcik7Ci0gICAgaW50IGhlaWdodCA9IHN0YXRpY19jYXN0PGludD4obV9pbWFnZS0+
cmVjdCgpLmhlaWdodCgpICogaGVpZ2h0TXVsdGlwbGllcik7Ci0gICAgaWYgKGhhc1dpZHRoKQot
ICAgICAgICB3aWR0aCA9IG1heCgxLCB3aWR0aCk7Ci0gICAgaWYgKGhhc0hlaWdodCkKLSAgICAg
ICAgaGVpZ2h0ID0gbWF4KDEsIGhlaWdodCk7Ci0KLSAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGlu
dD4obV9pbWFnZS0+cmVjdCgpLngoKSAqIHdpZHRoTXVsdGlwbGllcik7Ci0gICAgaW50IHkgPSBz
dGF0aWNfY2FzdDxpbnQ+KG1faW1hZ2UtPnJlY3QoKS55KCkgKiBoZWlnaHRNdWx0aXBsaWVyKTsK
LQotICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCiB2b2lkIENh
Y2hlZEltYWdlOjpub3RpZnlPYnNlcnZlcnMoY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCkKIHsK
ICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRJbWFnZUNsaWVudD4gdyhtX2Ns
aWVudHMpOwpAQCAtMjQ1LDYgKzI1OSw3IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmNoZWNrU2hvdWxk
UGFpbnRCcm9rZW4KIHZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFyKCkKIHsKICAgICBkZXN0cm95RGVj
b2RlZERhdGEoKTsKKyAgICBtX3N2Z0ltYWdlQ2FjaGUuY2xlYXIoKTsKICAgICBtX2ltYWdlID0g
MDsKICAgICBzZXRFbmNvZGVkU2l6ZSgwKTsKIH0KQEAgLTI5Nyw3ICszMTIsNyBAQCB2b2lkIENh
Y2hlZEltYWdlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkCiAgICAgLy8gdG8gZGVjb2RlLgogICAg
IGlmIChzaXplQXZhaWxhYmxlIHx8IGFsbERhdGFSZWNlaXZlZCkgewogICAgICAgICBzaXplX3Qg
bWF4RGVjb2RlZEltYWdlU2l6ZSA9IG1heGltdW1EZWNvZGVkSW1hZ2VTaXplKCk7Ci0gICAgICAg
IEludFNpemUgcyA9IGltYWdlU2l6ZSgxLjBmKTsKKyAgICAgICAgSW50U2l6ZSBzID0gbV9pbWFn
ZS0+c2l6ZSgpOwogICAgICAgICBzaXplX3QgZXN0aW1hdGVkRGVjb2RlZEltYWdlU2l6ZSA9IHMu
d2lkdGgoKSAqIHMuaGVpZ2h0KCkgKiA0OyAvLyBubyBvdmVyZmxvdyBjaGVjawogICAgICAgICBp
ZiAobV9pbWFnZS0+aXNOdWxsKCkgfHwgKG1heERlY29kZWRJbWFnZVNpemUgPiAwICYmIGVzdGlt
YXRlZERlY29kZWRJbWFnZVNpemUgPiBtYXhEZWNvZGVkSW1hZ2VTaXplKSkgewogICAgICAgICAg
ICAgZXJyb3IoZXJyb3JPY2N1cnJlZCgpID8gc3RhdHVzKCkgOiBEZWNvZGVFcnJvcik7CkBAIC0z
NDIsMTMgKzM1NywxNiBAQCB2b2lkIENhY2hlZEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoKQog
ICAgICAgICBzZXREZWNvZGVkU2l6ZSgwKTsKICAgICAgICAgaWYgKCFNZW1vcnlDYWNoZTo6c2hv
dWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpKQogICAgICAgICAgICAgbWFrZVB1
cmdlYWJsZSh0cnVlKTsKLSAgICB9IGVsc2UgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQo
KSkKKyAgICB9IGVsc2UgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSAmJiAhbV9pbWFn
ZS0+aXNTVkdJbWFnZSgpKQogICAgICAgICBtX2ltYWdlLT5kZXN0cm95RGVjb2RlZERhdGEoKTsK
IH0KIAogdm9pZCBDYWNoZWRJbWFnZTo6ZGVjb2RlZFNpemVDaGFuZ2VkKGNvbnN0IEltYWdlKiBp
bWFnZSwgaW50IGRlbHRhKQogewotICAgIGlmIChpbWFnZSAhPSBtX2ltYWdlKQorICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBJbWFnZSogdXNlSW1hZ2UgPSBsb29rdXBJbWFn
ZUZvclNpemUoaW1hZ2UtPnNpemUoKSk7CisgICAgaWYgKGltYWdlICE9IHVzZUltYWdlKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgc2V0RGVjb2RlZFNpemUoZGVjb2RlZFNpemUoKSArIGRl
bHRhKTsKQEAgLTM1Niw3ICszNzQsMTAgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGVjb2RlZFNpemVD
aGFuZ2VkKGNvbgogCiB2b2lkIENhY2hlZEltYWdlOjpkaWREcmF3KGNvbnN0IEltYWdlKiBpbWFn
ZSkKIHsKLSAgICBpZiAoaW1hZ2UgIT0gbV9pbWFnZSkKKyAgICBpZiAoIWltYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgSW1hZ2UqIHVzZUltYWdlID0gbG9va3VwSW1hZ2VGb3JTaXplKGltYWdl
LT5zaXplKCkpOworICAgIGlmIChpbWFnZSAhPSB1c2VJbWFnZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIGRvdWJsZSB0aW1lU3RhbXAgPSBGcmFtZVZpZXc6OmN1cnJlbnRQYWludFRpbWVT
dGFtcCgpOwpAQCAtMzY4LDcgKzM4OSwxMCBAQCB2b2lkIENhY2hlZEltYWdlOjpkaWREcmF3KGNv
bnN0IEltYWdlKiBpCiAKIGJvb2wgQ2FjaGVkSW1hZ2U6OnNob3VsZFBhdXNlQW5pbWF0aW9uKGNv
bnN0IEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgIT0gbV9pbWFnZSkKKyAgICBpZiAo
IWltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSW1hZ2UqIHVzZUltYWdlID0gbG9v
a3VwSW1hZ2VGb3JTaXplKGltYWdlLT5zaXplKCkpOworICAgIGlmIChpbWFnZSAhPSB1c2VJbWFn
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIENhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyPENhY2hlZEltYWdlQ2xpZW50PiB3KG1fY2xpZW50cyk7CkBAIC0zODIsMTQgKzQwNiwy
MiBAQCBib29sIENhY2hlZEltYWdlOjpzaG91bGRQYXVzZUFuaW1hdGlvbihjCiAKIHZvaWQgQ2Fj
aGVkSW1hZ2U6OmFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKiBpbWFnZSkKIHsKLSAgICBp
ZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAgICAgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7CisgICAgaWYg
KCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEltYWdlKiB1c2VJbWFnZSA9IGxvb2t1cElt
YWdlRm9yU2l6ZShpbWFnZS0+c2l6ZSgpKTsKKyAgICBpZiAoaW1hZ2UgIT0gdXNlSW1hZ2UpCisg
ICAgICAgIHJldHVybjsKKyAgICBub3RpZnlPYnNlcnZlcnMoKTsKIH0KIAogdm9pZCBDYWNoZWRJ
bWFnZTo6Y2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7Ci0gICAgaWYgKGltYWdlID09IG1faW1hZ2UpCi0gICAgICAgIG5vdGlmeU9ic2VydmVy
cygmcmVjdCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEltYWdlKiB1
c2VJbWFnZSA9IGxvb2t1cEltYWdlRm9yU2l6ZShpbWFnZS0+c2l6ZSgpKTsKKyAgICBpZiAoaW1h
Z2UgIT0gdXNlSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBub3RpZnlPYnNlcnZlcnMoJnJl
Y3QpOwogfQogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsy
NCw3IEBACiAjZGVmaW5lIENhY2hlZEltYWdlX2gKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
LmgiCisjaW5jbHVkZSAiSW1hZ2VCeVNpemVDYWNoZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKQEAgLTM0LDYgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIE1lbW9yeUNhY2hlOworY2xhc3MgUmVuZGVyT2JqZWN0
OwogCiBjbGFzcyBDYWNoZWRJbWFnZSA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSwgcHVibGljIElt
YWdlT2JzZXJ2ZXIgewogICAgIGZyaWVuZCBjbGFzcyBNZW1vcnlDYWNoZTsKQEAgLTQ1LDI0ICs0
NywyMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKIAotICAgIEltYWdlKiBp
bWFnZSgpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBudWxsSW1hZ2UoKSBpZiB0aGUgaW1hZ2UgaXMg
bm90IGF2YWlsYWJsZSB5ZXQuCisgICAgSW1hZ2UqIGltYWdlKCk7IC8vIFJldHVybnMgdGhlIG51
bGxJbWFnZSgpIGlmIHRoZSBpbWFnZSBpcyBub3QgYXZhaWxhYmxlIHlldC4KKyAgICBJbWFnZSog
aW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqKTsgLy8gUmV0dXJucyB0aGUgbnVs
bEltYWdlKCkgaWYgdGhlIGltYWdlIGlzIG5vdCBhdmFpbGFibGUgeWV0LgogICAgIGJvb2wgaGFz
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAKICAgICBzdGQ6OnBhaXI8
SW1hZ2UqLCBmbG9hdD4gYnJva2VuSW1hZ2UoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpIGNvbnN0
OyAvLyBSZXR1cm5zIGFuIGltYWdlIGFuZCB0aGUgaW1hZ2UncyByZXNvbHV0aW9uIHNjYWxlIGZh
Y3Rvci4KICAgICBib29sIHdpbGxQYWludEJyb2tlbkltYWdlKCkgY29uc3Q7IAogCi0gICAgYm9v
bCBjYW5SZW5kZXIoZmxvYXQgbXVsdGlwbGllcikgY29uc3QgeyByZXR1cm4gIWVycm9yT2NjdXJy
ZWQoKSAmJiAhaW1hZ2VTaXplKG11bHRpcGxpZXIpLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgY2Fu
UmVuZGVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIHsg
cmV0dXJuICFlcnJvck9jY3VycmVkKCkgJiYgIWltYWdlU2l6ZUZvclJlbmRlcmVyKHJlbmRlcmVy
LCBtdWx0aXBsaWVyKS5pc0VtcHR5KCk7IH0KIAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQg
Zm9yIFNWR0ltYWdlIHJpZ2h0IG5vdwotICAgIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNv
bnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihjb25z
dCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CiAgICAgYm9vbCB1c2VzSW1hZ2VDb250
YWluZXJTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25z
dDsKICAgICBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKICAgICAKLSAgICAv
LyBCb3RoIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBhIHpvb20gbXVsdGlwbGllciB0aGF0IGNhbiBi
ZSB1c2VkIHRvIGluY3JlYXNlIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIGltYWdlIGJ5IHRoZQot
ICAgIC8vIHpvb20uCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoZmxvYXQgbXVsdGlwbGllcikgY29u
c3Q7ICAvLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBpbWFnZS4KLSAgICBJbnRS
ZWN0IGltYWdlUmVjdChmbG9hdCBtdWx0aXBsaWVyKSBjb25zdDsgIC8vIFRoZSBzaXplIG9mIHRo
ZSBjdXJyZW50bHkgZGVjb2RlZCBwb3J0aW9uIG9mIHRoZSBpbWFnZS4KKyAgICAvLyBUaGlzIG1l
dGhvZCB0YWtlcyBhIHpvb20gbXVsdGlwbGllciB0aGF0IGNhbiBiZSB1c2VkIHRvIGluY3JlYXNl
IHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIGltYWdlIGJ5IHRoZSB6b29tLgorICAgIEludFNpemUg
aW1hZ2VTaXplRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgZmxvYXQgbXVsdGlwbGll
cik7IC8vIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNvbXBsZXRlIGltYWdlLgogCiAgICAgdmly
dHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwogICAgIApAQCAt
OTEsNiArOTIsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkSW5SZWN0KGNv
bnN0IEltYWdlKiwgY29uc3QgSW50UmVjdCYpOwogCiBwcml2YXRlOgorICAgIEltYWdlKiBsb29r
dXBJbWFnZUZvclNpemUoY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgIEltYWdlKiBsb29rdXBJ
bWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8SW1hZ2U+IGxvb2t1cE9yQ3JlYXRlSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmpl
Y3QqKTsKKwogICAgIHZvaWQgY3JlYXRlSW1hZ2UoKTsKICAgICBzaXplX3QgbWF4aW11bURlY29k
ZWRJbWFnZVNpemUoKTsKICAgICAvLyBJZiBub3QgbnVsbCwgY2hhbmdlUmVjdCBpcyB0aGUgY2hh
bmdlZCBwYXJ0IG9mIHRoZSBpbWFnZS4KQEAgLTEwMCw2ICsxMDUsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgY2hlY2tTaG91bGRQYWludEJyb2tlbkltYWdlKCk7CiAKICAgICBSZWZQdHI8SW1hZ2U+
IG1faW1hZ2U7CisgICAgbXV0YWJsZSBJbWFnZUJ5U2l6ZUNhY2hlIG1fc3ZnSW1hZ2VDYWNoZTsK
ICAgICBUaW1lcjxDYWNoZWRJbWFnZT4gbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXI7CiAgICAg
Ym9vbCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2U7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMSw3ICs2MTEsNyBA
QCBzdGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgQVNTRVJUKGVs
ZW1lbnQpOwogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGdldENhY2hlZEltYWdlKGVs
ZW1lbnQpOwogICAgIHJldHVybiAoY2FjaGVkSW1hZ2UgJiYgIWNhY2hlZEltYWdlLT5lcnJvck9j
Y3VycmVkKCkpID8KLSAgICAgICAgY2FjaGVkSW1hZ2UtPmltYWdlKCkgOiAwOworICAgICAgICBj
YWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKSA6IDA7CiB9
CiAKIHN0YXRpYyB2b2lkIHByZXBhcmVDbGlwYm9hcmRGb3JJbWFnZURyYWcoRnJhbWUqIHNyYywg
Q2xpcGJvYXJkKiBjbGlwYm9hcmQsIEVsZW1lbnQqIG5vZGUsIGNvbnN0IEtVUkwmIGxpbmtVUkws
IGNvbnN0IEtVUkwmIGltYWdlVVJMLCBjb25zdCBTdHJpbmcmIGxhYmVsKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDIsNyArMTIw
Miw3IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc28KICAgICBpZiAo
c3R5bGUgJiYgc3R5bGUtPmN1cnNvcnMoKSkgewogICAgICAgICBjb25zdCBDdXJzb3JMaXN0KiBj
dXJzb3JzID0gc3R5bGUtPmN1cnNvcnMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGN1cnNvcnMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBDYWNoZWRJbWFn
ZSogY2ltYWdlID0gMDsKKyAgICAgICAgICAgIENhY2hlZEltYWdlKiBjaW1hZ2UgPSAwOwogICAg
ICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSAoKmN1cnNvcnMpW2ldLmltYWdlKCk7CiAgICAg
ICAgICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkKICAgICAgICAgICAg
ICAgICBjaW1hZ2UgPSBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZEltYWdlKj4oaW1hZ2UpLT5jYWNo
ZWRJbWFnZSgpOwpAQCAtMTIxMCwxMSArMTIxMCwxMSBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhh
bmRsZXI6OnNlbGVjdEN1cnNvCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBJbnRQb2ludCBob3RTcG90ID0gKCpjdXJzb3JzKVtpXS5ob3RTcG90KCk7CiAgICAgICAgICAg
ICAvLyBMaW1pdCB0aGUgc2l6ZSBvZiBjdXJzb3JzIHNvIHRoYXQgdGhleSBjYW5ub3QgYmUgdXNl
ZCB0byBjb3ZlciBVSSBlbGVtZW50cyBpbiBjaHJvbWUuCi0gICAgICAgICAgICBJbnRTaXplIHNp
emUgPSBjaW1hZ2UtPmltYWdlKCktPnNpemUoKTsKKyAgICAgICAgICAgIEludFNpemUgc2l6ZSA9
IGNpbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlciktPnNpemUoKTsKICAgICAgICAgICAg
IGlmIChzaXplLndpZHRoKCkgPiAxMjggfHwgc2l6ZS5oZWlnaHQoKSA+IDEyOCkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghY2ltYWdlLT5lcnJvck9jY3VycmVk
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEN1cnNvcihjaW1hZ2UtPmltYWdlKCksIGhvdFNw
b3QpOworICAgICAgICAgICAgICAgIHJldHVybiBDdXJzb3IoY2ltYWdlLT5pbWFnZUZvclJlbmRl
cmVyKHJlbmRlcmVyKSwgaG90U3BvdCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEs
NyArMjMxLDcgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbQogICAg
ICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICAgICAgS1VSTCB1cmwgPSBkb2N1bWVu
dC0+Y29tcGxldGVVUkwoaW1hZ2VFbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNB
dHRyKSk7CiAgICAgICAgICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZUVsZW1l
bnQtPmNhY2hlZEltYWdlKCk7Ci0gICAgICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGNhY2hl
ZEltYWdlLCB1cmwpOworICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJbWFn
ZSwgaW1hZ2VFbGVtZW50LT5yZW5kZXJlcigpLCB1cmwpOwogICAgICAgICB9IGVsc2UgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rVGFnKSkgewogICAgICAgICAgICAgSFRN
TExpbmtFbGVtZW50KiBsaW5rRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudCo+
KGVsZW1lbnQpOwogICAgICAgICAgICAgU3R5bGVTaGVldCogc2hlZXQgPSBsaW5rRWxlbWVudC0+
c2hlZXQoKTsKQEAgLTI4OCw3ICsyODgsNyBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxp
emVDU1NTdHlsZVNoCiAgICAgfQogfQogCi12b2lkIFBhZ2VTZXJpYWxpemVyOjphZGRJbWFnZVRv
UmVzb3VyY2VzKENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgS1VSTCYgdXJsKQordm9pZCBQYWdl
U2VyaWFsaXplcjo6YWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJbWFnZSogaW1hZ2UsIFJlbmRl
ck9iamVjdCogaW1hZ2VSZW5kZXJlciwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIGlmICghdXJs
LmlzVmFsaWQoKSB8fCBtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKQogICAgICAgICByZXR1
cm47CkBAIC0yOTcsNyArMjk3LDcgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6YWRkSW1hZ2VUb1Jl
c291cmNlcwogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgbWltZVR5cGUgPSBpbWFnZS0+
cmVzcG9uc2UoKS5taW1lVHlwZSgpOwotICAgIG1fcmVzb3VyY2VzLT5hcHBlbmQoUmVzb3VyY2Uo
dXJsLCBtaW1lVHlwZSwgaW1hZ2UtPmltYWdlKCktPmRhdGEoKSkpOworICAgIG1fcmVzb3VyY2Vz
LT5hcHBlbmQoUmVzb3VyY2UodXJsLCBtaW1lVHlwZSwgaW1hZ2VSZW5kZXJlciA/IGltYWdlLT5p
bWFnZUZvclJlbmRlcmVyKGltYWdlUmVuZGVyZXIpLT5kYXRhKCkgOiBpbWFnZS0+aW1hZ2UoKS0+
ZGF0YSgpKSk7CiAgICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7CiB9CiAKQEAgLTMzNyw3ICsz
MzcsNyBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvCiAgICAgICAg
IENhY2hlZEltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PFN0eWxlQ2FjaGVkSW1hZ2UqPihzdHls
ZUltYWdlKS0+Y2FjaGVkSW1hZ2UoKTsKIAogICAgICAgICBLVVJMIHVybCA9IGNzc1N0eWxlU2hl
ZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltYWdlLT51cmwoKSk7Ci0gICAgICAgIGFkZElt
YWdlVG9SZXNvdXJjZXMoaW1hZ2UsIHVybCk7CisgICAgICAgIGFkZEltYWdlVG9SZXNvdXJjZXMo
aW1hZ2UsIDAsIHVybCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5oCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNl
cmlhbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBDU1NTdHls
ZVJ1bGU7CiBjbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBQYWdlOwor
Y2xhc3MgUmVuZGVyT2JqZWN0OwogCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXpl
IGEgcGFnZSBjb250ZW50cyBiYWNrIHRvIHRleHQgKHR5cGljYWxseSBIVE1MKS4KIC8vIEl0IHNl
cmlhbGl6ZXMgYWxsIHRoZSBwYWdlIGZyYW1lcyBhbmQgcmV0cmlldmVzIHJlc291cmNlcyBzdWNo
IGFzIGltYWdlcyBhbmQgQ1NTIHN0eWxlc2hlZXRzLgpAQCAtNzUsNyArNzYsNyBAQCBwcml2YXRl
OgogICAgIC8vIEl0IGFsc28gYWRkcyBhbnkgcmVzb3VyY2VzIGluY2x1ZGVkIGluIHRoYXQgc3R5
bGVzaGVldCAoaW5jbHVkaW5nIGFueSBpbXBvcnRlZCBzdHlsZXNoZWV0cyBhbmQgdGhlaXIgb3du
IHJlc291cmNlcykuCiAgICAgdm9pZCBzZXJpYWxpemVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hl
ZXQqLCBjb25zdCBLVVJMJik7CiAKLSAgICB2b2lkIGFkZEltYWdlVG9SZXNvdXJjZXMoQ2FjaGVk
SW1hZ2UqLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCBhZGRJbWFnZVRvUmVzb3VyY2VzKENhY2hl
ZEltYWdlKiwgUmVuZGVyT2JqZWN0KiwgY29uc3QgS1VSTCYpOwogICAgIHZvaWQgcmV0cmlldmVS
ZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKik7CiAgICAgdm9p
ZCByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1J1bGUoQ1NTU3R5bGVSdWxlKik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJv
bWl1bS5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsMTAgKzIy
NCwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KENocm9tCiB7CiAgICAg
Ly8gU2hvdmUgaW1hZ2UgZGF0YSBpbnRvIGEgRGF0YU9iamVjdCBmb3IgdXNlIGFzIGEgZmlsZQog
ICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGdldENhY2hlZEltYWdlKGVsZW1lbnQpOwot
ICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWNhY2hlZEltYWdlLT5pbWFnZSgpIHx8ICFjYWNoZWRJ
bWFnZS0+aXNMb2FkZWQoKSkKKyAgICBpZiAoIWNhY2hlZEltYWdlIHx8ICFjYWNoZWRJbWFnZS0+
aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKSB8fCAhY2FjaGVkSW1hZ2UtPmlz
TG9hZGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNoYXJlZEJ1ZmZlciogaW1hZ2VCdWZm
ZXIgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+ZGF0YSgpOworICAgIFNoYXJlZEJ1ZmZlciogaW1h
Z2VCdWZmZXIgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJl
cigpKS0+ZGF0YSgpOwogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyLT5zaXpl
KCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NzM2
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6
OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0g
cmVuZGVyZXItPmNhY2hlZEltYWdlKCk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCBjYWNoZWRJ
bWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgSW1hZ2UqIGltYWdl
ID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CisgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2Ut
PmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwogICAgIEFTU0VSVChpbWFnZSk7CiAKICAgICBO
YXRpdmVJbWFnZVB0ciBiaXRtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2aXNp
b24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJHcmFwaGljc1R5cGVz
LmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
I2lmIFBMQVRGT1JNKE1BQykKICNpZmRlZiBfX09CSkNfXwpAQCAtNjYsMTIgKzY2LDEyIEBAIHR5
cGVkZWYgc3RydWN0IF9HZGtQaXhidWYgR2RrUGl4YnVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9h
dFJlY3Q7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBT
aGFyZWRCdWZmZXI7Ci1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiAKIC8vIFRoaXMgY2xhc3MgZ2V0
cyBub3RpZmllZCB3aGVuIGFuIGltYWdlIGNyZWF0ZXMgb3IgZGVzdHJveXMgZGVjb2RlZCBmcmFt
ZXMgYW5kIHdoZW4gaXQgYWR2YW5jZXMgYW5pbWF0aW9uIGZyYW1lcy4KIGNsYXNzIEltYWdlT2Jz
ZXJ2ZXI7CkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bWFnZT4gbG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSk7CiAgICAgc3RhdGlj
IGJvb2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOyAKIAorICAgIHZpcnR1YWwgYm9vbCBp
c1NWR0ltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNC
aXRtYXBJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGN1
cnJlbnRGcmFtZUhhc0FscGhhKCkgeyByZXR1cm4gZmFsc2U7IH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAJKHJldmlzaW9uIDk3MzYzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lkIENsaXBib2FyZEd0azo6ZGVjbGFyZUFuZFdy
aXRlRHJhZ0ltCiAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzTG9hZGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1h
Z2UtPmltYWdlKCktPmdldEdka1BpeGJ1ZigpKTsKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4
YnVmID0gYWRvcHRHUmVmKGltYWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1lbnQtPnJlbmRlcmVy
KCkpLT5nZXRHZGtQaXhidWYoKSk7CiAgICAgaWYgKCFwaXhidWYpCiAgICAgICAgIHJldHVybjsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNw
cAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVi
b2FyZEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZElt
YWdlID0gcmVuZGVyZXItPmNhY2hlZEltYWdlKCk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCBj
YWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgSW1hZ2Uq
IGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CisgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVk
SW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwogICAgIEFTU0VSVChpbWFnZSk7CiAK
ICAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNw
bGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tCShy
ZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVy
dGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU5LDcgKzE3NTksNyBAQCBzdGF0aWMgTlNGaWxl
V3JhcHBlciAqZmlsZVdyYXBwZXJGb3JFbGVtCiAgICAgaWYgKCF3cmFwcGVyKSB7CiAgICAgICAg
IFJlbmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2UoZWxlbWVudC0+cmVuZGVyZXIo
KSk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKSAmJiAhcmVuZGVyZXItPmNh
Y2hlZEltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgd3JhcHBlciA9IFtb
TlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOihOU0RhdGEg
KikocmVuZGVyZXItPmNhY2hlZEltYWdlKCktPmltYWdlKCktPmdldFRJRkZSZXByZXNlbnRhdGlv
bigpKV07CisgICAgICAgICAgICB3cmFwcGVyID0gW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0
UmVndWxhckZpbGVXaXRoQ29udGVudHM6KE5TRGF0YSAqKShyZW5kZXJlci0+Y2FjaGVkSW1hZ2Uo
KS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlciktPmdldFRJRkZSZXByZXNlbnRhdGlvbigpKV07
CiAgICAgICAgICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpAImltYWdlLnRpZmYi
XTsKICAgICAgICAgICAgIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0JKHJldmlzaW9u
IDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRl
SW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgW21fcGFzdGVib2FyZC5nZXQoKSBkZWNsYXJlVHlwZXM6
dHlwZXMgb3duZXI6bmlsXTsKICAgICB3cml0ZVVSTChtX3Bhc3RlYm9hcmQuZ2V0KCksIHR5cGVz
LCBjb2NvYVVSTCwgbnNTdHJpbmdOaWxJZkVtcHR5KHRpdGxlKSwgZnJhbWUpOwogICAgIAotICAg
IEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOworICAgIEltYWdlKiBpbWFnZSA9
IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKICAgICBBU1NFUlQoaW1h
Z2UpOwogICAgIAogICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0RGF0YTpbaW1hZ2UtPmdldE5T
SW1hZ2UoKSBUSUZGUmVwcmVzZW50YXRpb25dIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCShyZXZpc2lv
biA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgyLDkgKzI4Miw5IEBAIHZvaWQgQ2xpcGJvYXJkUXQ6OmRlY2xh
cmVBbmRXcml0ZURyYWdJbWEKICAgICAgICAgbV93cml0YWJsZURhdGEgPSBuZXcgUU1pbWVEYXRh
OwogCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxlbWVu
dCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhY2FjaGVkSW1hZ2UtPmltYWdlKCkgfHwgIWNh
Y2hlZEltYWdlLT5pc0xvYWRlZCgpKQorICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWNhY2hlZElt
YWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1lbnQtPnJlbmRlcmVyKCkpIHx8ICFjYWNoZWRJbWFn
ZS0+aXNMb2FkZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFFQaXhtYXAqIHBpeG1hcCA9IGNh
Y2hlZEltYWdlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIFFQ
aXhtYXAqIHBpeG1hcCA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1lbnQtPnJl
bmRlcmVyKCkpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmIChwaXhtYXAp
CiAgICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXRJbWFnZURhdGEoKnBpeG1hcCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcAkocmV2aXNpb24g
OTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUlt
YWdlKE5vZGUqIG5vZGUsIAogICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVy
cm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2UqIGltYWdlID0gY2Fj
aGVkSW1hZ2UtPmltYWdlKCk7CisgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdl
Rm9yUmVuZGVyZXIobm9kZS0+cmVuZGVyZXIoKSk7CiAgICAgQVNTRVJUKGltYWdlKTsKIAogICAg
IFFQaXhtYXAqIHBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAJKHJl
dmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNSwxMCArNjM1LDEwIEBAIHN0YXRpYyB2b2lkIHdy
aXRlSW1hZ2VUb0RhdGFPYmplY3QoSURhdGEKIHsKICAgICAvLyBTaG92ZSBpbWFnZSBkYXRhIGlu
dG8gYSBEYXRhT2JqZWN0IGZvciB1c2UgYXMgYSBmaWxlCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSB8
fCAhY2FjaGVkSW1hZ2UtPmltYWdlKCkgfHwgIWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQorICAg
IGlmICghY2FjaGVkSW1hZ2UgfHwgIWNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1l
bnQtPnJlbmRlcmVyKCkpIHx8ICFjYWNoZWRJbWFnZS0+aXNMb2FkZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgU2hhcmVkQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhY2hlZEltYWdlLT5pbWFn
ZSgpLT5kYXRhKCk7CisgICAgU2hhcmVkQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhY2hlZEltYWdl
LT5pbWFnZUZvclJlbmRlcmVyKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5kYXRhKCk7CiAgICAgaWYg
KCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXItPnNpemUoKSkKICAgICAgICAgcmV0dXJuOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
CShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJv
YXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1h
Z2UgPSByZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKTsKICAgICBpZiAoIWNhY2hlZEltYWdlIHx8IGNh
Y2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBJbWFnZSog
aW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKKyAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJ
bWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcik7CiAgICAgQVNTRVJUKGltYWdlKTsKIAog
ICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9QYXN0ZWJv
YXJkV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNl
L1Bhc3RlYm9hcmRXaW5DRS5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luY2UvUGFzdGVib2FyZFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4
LDcgKzIwOCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKICAg
ICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KG5vZGUt
PnJlbmRlcmVyKCkpOwogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHN0YXRpY19jYXN0
PENhY2hlZEltYWdlKj4ocmVuZGVyZXItPmNhY2hlZEltYWdlKCkpOwogICAgIEFTU0VSVChjYWNo
ZWRJbWFnZSk7Ci0gICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CisgICAg
SW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwog
ICAgIEFTU0VSVChpbWFnZSk7CiAKICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
NCw3ICszMDQsNyBAQCBJbWFnZSogSGl0VGVzdFJlc3VsdDo6aW1hZ2UoKSBjb25zdAogICAgIGlm
IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNJbWFnZSgpKSB7CiAgICAgICAgIFJlbmRlckltYWdl
KiBpbWFnZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlJlbmRlckltYWdlKj4ocmVuZGVyZXIpOwog
ICAgICAgICBpZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFnZSgp
LT5lcnJvck9jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hlZEltYWdl
KCktPmltYWdlKCk7CisgICAgICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmlt
YWdlRm9yUmVuZGVyZXIoaW1hZ2UpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ltYWdlQnlTaXplQ2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbWFnZUJ5U2l6ZUNhY2hlLmNwcAkocmV2aXNpb24g
OTczNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNw
cDo5NzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbWFnZUJ5U2l6ZUNhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgorCisjaW5jbHVk
ZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSW50U2l6ZUhhc2gu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgorI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlKCkKKzog
bV9hY2Nlc3NlZEltYWdlKGZhbHNlKQoreworfQorCitDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjp+
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZTo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNp
emUpCit7CisgICAgcmVmKCk7CisgICAgaWYgKCFzaXplLmlzRW1wdHkoKSkKKyAgICAgICAgbV9z
aXplcy5hZGQoc2l6ZSk7CisgICAgCisgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjppdGVy
YXRvciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKKyAgICBpZiAoaXQgPT0gbV9jbGll
bnRzLmVuZCgpKQorICAgICAgICBtX2NsaWVudHMuYWRkKHJlbmRlcmVyLCBTaXplQ291bnRQYWly
KHNpemUsIDEpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgU2l6ZUNvdW50UGFpciYgc2l6ZUNvdW50
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgKytzaXplQ291bnQuc2Vjb25kOworICAgIH0KK30KKwor
dm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKK3sKKyAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9jbGllbnRzLmZpbmQocmVuZGVyZXIpOworICAgIEFTU0VSVChpdCAhPSBtX2NsaWVudHMuZW5k
KCkpOworCisgICAgU2l6ZUNvdW50UGFpciYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsKKyAgICBJ
bnRTaXplIHNpemUgPSBzaXplQ291bnQuZmlyc3Q7CisgICAgaWYgKCFzaXplLmlzRW1wdHkoKSkg
eworICAgICAgICBtX3NpemVzLnJlbW92ZShzaXplKTsKKyAgICAgICAgaWYgKCFtX3NpemVzLmNv
bnRhaW5zKHNpemUpKQorICAgICAgICAgICAgbV9pbWFnZXMucmVtb3ZlKHNpemUpOworICAgIH0K
KyAgICAKKyAgICBpZiAoIS0tc2l6ZUNvdW50LnNlY29uZCkKKyAgICAgICAgbV9jbGllbnRzLnJl
bW92ZShyZW5kZXJlcik7CisKKyAgICBkZXJlZigpOworfQorCitJbWFnZSogQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZTo6Z2V0SW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9jbGllbnRzLmZpbmQocmVuZGVyZXIpOworICAgIEFTU0VSVChpdCAhPSBtX2NsaWVudHMuZW5k
KCkpOworCisgICAgU2l6ZUNvdW50UGFpciYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsKKyAgICBJ
bnRTaXplIG9sZFNpemUgPSBzaXplQ291bnQuZmlyc3Q7CisgICAgaWYgKG9sZFNpemUgIT0gc2l6
ZSkgeworICAgICAgICAvLyBJZiByZW5kZXJlciBpcyB0aGUgb25seSBjbGllbnQsIG1ha2Ugc3Vy
ZSB3ZSBkb24ndCBkZWxldGUgdGhpcy4KKyAgICAgICAgUmVmUHRyPENTU0ltYWdlR2VuZXJhdG9y
VmFsdWU+IHByb3RlY3QodGhpcyk7CisgICAgICAgIHJlbW92ZUNsaWVudChyZW5kZXJlcik7Cisg
ICAgICAgIGFkZENsaWVudChyZW5kZXJlciwgc2l6ZSk7CisgICAgfQorICAgIAorICAgIC8vIERv
bid0IGdlbmVyYXRlIGFuIGltYWdlIGZvciBlbXB0eSBzaXplcy4KKyAgICBpZiAoc2l6ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIC8vIExvb2sgdXAgdGhlIGltYWdl
IGluIG91ciBjYWNoZS4KKyAgICByZXR1cm4gbV9pbWFnZXMuZ2V0KHNpemUpLmdldCgpOworfQor
Cit2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnB1dEltYWdlKGNvbnN0IEludFNpemUmIHNp
emUsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQoreworICAgIG1faW1hZ2VzLmFkZChzaXplLCBp
bWFnZSk7Cit9CisKK1N0eWxlR2VuZXJhdGVkSW1hZ2UqIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6
OmdlbmVyYXRlZEltYWdlKCkKK3sKKyAgICBpZiAoIW1fYWNjZXNzZWRJbWFnZSkgeworICAgICAg
ICBtX2FjY2Vzc2VkSW1hZ2UgPSB0cnVlOworICAgICAgICBtX2ltYWdlID0gU3R5bGVHZW5lcmF0
ZWRJbWFnZTo6Y3JlYXRlKHRoaXMsIGlzRml4ZWRTaXplKCkpOworICAgIH0KKyAgICByZXR1cm4g
bV9pbWFnZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0ltYWdlQnlTaXplQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbWFnZUJ5U2l6ZUNhY2hlLmNwcAkocmV2aXNpb24gOTcz
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW1hZ2VCeVNpemVDYWNoZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTIgKzEsMzkgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJJbWFnZUJ5
U2l6ZUNhY2hlLmgiCiAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
ICNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OkNTU0lt
YWdlR2VuZXJhdG9yVmFsdWUoKQotOiBtX2FjY2Vzc2VkSW1hZ2UoZmFsc2UpCitJbWFnZUJ5U2l6
ZUNhY2hlOjpJbWFnZUJ5U2l6ZUNhY2hlKCkKIHsKIH0KIAotQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTo6fkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUoKQordm9pZCBJbWFnZUJ5U2l6ZUNhY2hlOjphZGRD
bGllbnQoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
IHsKLX0KLQotdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICByZWYoKTsKICAgICBp
ZiAoIXNpemUuaXNFbXB0eSgpKQogICAgICAgICBtX3NpemVzLmFkZChzaXplKTsKICAgICAKQEAg
LTU5LDcgKzQ2LDcgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQoUgog
ICAgIH0KIH0KIAotdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbnQoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKK3ZvaWQgSW1hZ2VCeVNpemVDYWNoZTo6cmVtb3ZlQ2xpZW50
KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNv
dW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKICAgICBBU1NF
UlQoaXQgIT0gbV9jbGllbnRzLmVuZCgpKTsKQEAgLTc0LDExICs2MSw5IEBAIHZvaWQgQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW4KICAgICAKICAgICBpZiAoIS0tc2l6ZUNvdW50
LnNlY29uZCkKICAgICAgICAgbV9jbGllbnRzLnJlbW92ZShyZW5kZXJlcik7Ci0KLSAgICBkZXJl
ZigpOwogfQogCi1JbWFnZSogQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Z2V0SW1hZ2UoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK0ltYWdlKiBJbWFnZUJ5U2l6
ZUNhY2hlOjpnZXRJbWFnZShjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRT
aXplJiBzaXplKQogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2NsaWVudHMuZmluZChyZW5kZXJlcik7CiAgICAgQVNTRVJUKGl0ICE9IG1fY2xpZW50cy5l
bmQoKSk7CkBAIC04NiwzMiArNzEsNDQgQEAgSW1hZ2UqIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6
OmdldEltYWdlKAogICAgIFNpemVDb3VudFBhaXImIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7CiAg
ICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZUNvdW50LmZpcnN0OwogICAgIGlmIChvbGRTaXplICE9
IHNpemUpIHsKLSAgICAgICAgLy8gSWYgcmVuZGVyZXIgaXMgdGhlIG9ubHkgY2xpZW50LCBtYWtl
IHN1cmUgd2UgZG9uJ3QgZGVsZXRlIHRoaXMuCi0gICAgICAgIFJlZlB0cjxDU1NJbWFnZUdlbmVy
YXRvclZhbHVlPiBwcm90ZWN0KHRoaXMpOwogICAgICAgICByZW1vdmVDbGllbnQocmVuZGVyZXIp
OwogICAgICAgICBhZGRDbGllbnQocmVuZGVyZXIsIHNpemUpOwogICAgIH0KLSAgICAKKwogICAg
IC8vIERvbid0IGdlbmVyYXRlIGFuIGltYWdlIGZvciBlbXB0eSBzaXplcy4KICAgICBpZiAoc2l6
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgLy8gTG9vayB1cCB0
aGUgaW1hZ2UgaW4gb3VyIGNhY2hlLgogICAgIHJldHVybiBtX2ltYWdlcy5nZXQoc2l6ZSkuZ2V0
KCk7CiB9CiAKLXZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cHV0SW1hZ2UoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCit2b2lkIEltYWdlQnlTaXplQ2Fj
aGU6OnB1dEltYWdlKGNvbnN0IEludFNpemUmIHNpemUsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdl
KQogewogICAgIG1faW1hZ2VzLmFkZChzaXplLCBpbWFnZSk7CiB9CiAKLVN0eWxlR2VuZXJhdGVk
SW1hZ2UqIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdlbmVyYXRlZEltYWdlKCkKK3ZvaWQgSW1h
Z2VCeVNpemVDYWNoZTo6Y2xlYXIoKQogewotICAgIGlmICghbV9hY2Nlc3NlZEltYWdlKSB7Ci0g
ICAgICAgIG1fYWNjZXNzZWRJbWFnZSA9IHRydWU7Ci0gICAgICAgIG1faW1hZ2UgPSBTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUodGhpcywgaXNGaXhlZFNpemUoKSk7Ci0gICAgfQotICAgIHJl
dHVybiBtX2ltYWdlLmdldCgpOworICAgIG1fc2l6ZXMuY2xlYXIoKTsKKyAgICBtX2NsaWVudHMu
Y2xlYXIoKTsKKyAgICBtX2ltYWdlcy5jbGVhcigpOworfQorCitJbWFnZSogSW1hZ2VCeVNpemVD
YWNoZTo6aW1hZ2VGb3JTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgSGFz
aE1hcDxJbnRTaXplLCBSZWZQdHI8SW1hZ2U+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbWFn
ZXMuZmluZChzaXplKTsKKyAgICBpZiAoaXQgPT0gbV9pbWFnZXMuZW5kKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworfQorCitJbnRTaXplIEltYWdl
QnlTaXplQ2FjaGU6OnNpemVGb3JDbGllbnQoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikg
Y29uc3QKK3sKKyAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9jbGllbnRzLmZpbmQocmVuZGVyZXIpOworICAgIGlmIChpdCA9PSBtX2NsaWVudHMuZW5k
KCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisgICAgcmV0dXJuIGl0LT5zZWNvbmQuZmly
c3Q7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbWFnZUJ5U2l6ZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0ltYWdlQnlTaXplQ2FjaGUuaAkocmV2aXNpb24gOTczNDcpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmg6OTczNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW1hZ2VCeVNpemVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENTU0ltYWdlR2VuZXJhdG9yVmFsdWVfaAor
I2RlZmluZSBDU1NJbWFnZUdlbmVyYXRvclZhbHVlX2gKKworI2luY2x1ZGUgIkNTU1ZhbHVlLmgi
CisjaW5jbHVkZSAiSW50U2l6ZUhhc2guaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZTsKK2NsYXNzIFJlbmRlck9iamVjdDsK
K2NsYXNzIFN0eWxlR2VuZXJhdGVkSW1hZ2U7CisKK2NsYXNzIENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUgOiBwdWJsaWMgQ1NTVmFsdWUgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUoKTsKKworICAgIHZvaWQgYWRkQ2xpZW50KFJlbmRlck9iamVjdCosIGNvbnN0
IEludFNpemUmKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqKTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNp
emUmKSA9IDA7CisKKyAgICBTdHlsZUdlbmVyYXRlZEltYWdlKiBnZW5lcmF0ZWRJbWFnZSgpOwor
ICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0ZpeGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBJbnRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqKSB7
IHJldHVybiBJbnRTaXplKCk7IH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBDU1NJbWFnZUdlbmVy
YXRvclZhbHVlKCk7CisgICAgCisgICAgSW1hZ2UqIGdldEltYWdlKFJlbmRlck9iamVjdCosIGNv
bnN0IEludFNpemUmKTsKKyAgICB2b2lkIHB1dEltYWdlKGNvbnN0IEludFNpemUmLCBQYXNzUmVm
UHRyPEltYWdlPik7CisKKyAgICB0eXBlZGVmIHBhaXI8SW50U2l6ZSwgaW50PiBTaXplQ291bnRQ
YWlyOworICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBTaXplQ291bnRQYWlyPiBS
ZW5kZXJPYmplY3RTaXplQ291bnRNYXA7CisKKyAgICBIYXNoQ291bnRlZFNldDxJbnRTaXplPiBt
X3NpemVzOyAvLyBBIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzIGEgZ2l2ZW4gaW1hZ2Ugc2l6ZSBp
cyBpbiB1c2UuCisgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwIG1fY2xpZW50czsgLy8gQSBt
YXAgZnJvbSBSZW5kZXJPYmplY3RzICh3aXRoIGVudHJ5IGNvdW50KSB0byBpbWFnZSBzaXplcy4K
KyAgICBIYXNoTWFwPEludFNpemUsIFJlZlB0cjxJbWFnZT4gPiBtX2ltYWdlczsgLy8gQSBjYWNo
ZSBvZiBJbWFnZSBvYmplY3RzIGJ5IGltYWdlIHNpemUuCisgICAgCisgICAgUmVmUHRyPFN0eWxl
R2VuZXJhdGVkSW1hZ2U+IG1faW1hZ2U7CisgICAgYm9vbCBtX2FjY2Vzc2VkSW1hZ2U7CisKK3By
aXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0ltYWdlQnlTaXplQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW1hZ2VCeVNpemVDYWNoZS5oCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbWFnZUJ5U2l6ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzEs
NjEgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgogICovCiAKLSNpZm5kZWYgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZV9oCi0jZGVmaW5l
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWVfaAorI2lmbmRlZiBJbWFnZUJ5U2l6ZUNhY2hlX2gKKyNk
ZWZpbmUgSW1hZ2VCeVNpemVDYWNoZV9oCiAKLSNpbmNsdWRlICJDU1NWYWx1ZS5oIgogI2luY2x1
ZGUgIkludFNpemVIYXNoLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZTsKIGNs
YXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFN0eWxlR2VuZXJhdGVkSW1hZ2U7CiAKLWNsYXNzIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewordHlwZWRlZiBwYWlyPElu
dFNpemUsIGludD4gU2l6ZUNvdW50UGFpcjsKK3R5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJP
YmplY3QqLCBTaXplQ291bnRQYWlyPiBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA7CisKK2NsYXNz
IEltYWdlQnlTaXplQ2FjaGUgewogcHVibGljOgotICAgIHZpcnR1YWwgfkNTU0ltYWdlR2VuZXJh
dG9yVmFsdWUoKTsKKyAgICBJbWFnZUJ5U2l6ZUNhY2hlKCk7CisKKyAgICB2b2lkIGFkZENsaWVu
dChjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCByZW1vdmVD
bGllbnQoY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAKLSAgICB2b2lkIGFkZENsaWVudChSZW5kZXJP
YmplY3QqLCBjb25zdCBJbnRTaXplJik7Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyT2Jq
ZWN0Kik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZShSZW5kZXJPYmplY3Qq
LCBjb25zdCBJbnRTaXplJikgPSAwOwotCi0gICAgU3R5bGVHZW5lcmF0ZWRJbWFnZSogZ2VuZXJh
dGVkSW1hZ2UoKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGaXhlZFNpemUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgSW50U2l6ZSBmaXhlZFNpemUoY29uc3QgUmVu
ZGVyT2JqZWN0KikgeyByZXR1cm4gSW50U2l6ZSgpOyB9Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAg
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpOwotICAgIAotICAgIEltYWdlKiBnZXRJbWFnZShSZW5k
ZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CisgICAgSW1hZ2UqIGdldEltYWdlKGNvbnN0IFJl
bmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKTsKICAgICB2b2lkIHB1dEltYWdlKGNvbnN0IElu
dFNpemUmLCBQYXNzUmVmUHRyPEltYWdlPik7CiAKLSAgICB0eXBlZGVmIHBhaXI8SW50U2l6ZSwg
aW50PiBTaXplQ291bnRQYWlyOwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBT
aXplQ291bnRQYWlyPiBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA7CisgICAgdm9pZCBjbGVhcigp
OwogCisgICAgSW1hZ2UqIGltYWdlRm9yU2l6ZShjb25zdCBJbnRTaXplJikgY29uc3Q7CisgICAg
SW50U2l6ZSBzaXplRm9yQ2xpZW50KGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIGNv
bnN0IFJlbmRlck9iamVjdFNpemVDb3VudE1hcCYgY2xpZW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpZW50czsgfQorCitwcml2YXRlOgogICAgIEhhc2hDb3VudGVkU2V0PEludFNpemU+IG1fc2l6
ZXM7IC8vIEEgY291bnQgb2YgaG93IG1hbnkgdGltZXMgYSBnaXZlbiBpbWFnZSBzaXplIGlzIGlu
IHVzZS4KICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXAgbV9jbGllbnRzOyAvLyBBIG1hcCBm
cm9tIFJlbmRlck9iamVjdHMgKHdpdGggZW50cnkgY291bnQpIHRvIGltYWdlIHNpemVzLgogICAg
IEhhc2hNYXA8SW50U2l6ZSwgUmVmUHRyPEltYWdlPiA+IG1faW1hZ2VzOyAvLyBBIGNhY2hlIG9m
IEltYWdlIG9iamVjdHMgYnkgaW1hZ2Ugc2l6ZS4KLSAgICAKLSAgICBSZWZQdHI8U3R5bGVHZW5l
cmF0ZWRJbWFnZT4gbV9pbWFnZTsKLSAgICBib29sIG1fYWNjZXNzZWRJbWFnZTsKLQotcHJpdmF0
ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZUdlbmVyYXRvclZhbHVlKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZV9oCisjZW5kaWYgLy8gSW1hZ2VCeVNpemVDYWNoZV9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA5
NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA3NCw3ICsxMDc0LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWlu
dEZpbGxMYXllcnMoY29ucwogdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEZpbGxMYXllcihjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgQ29sb3ImIGMsIGNvbnN0IEZpbGxMYXllciog
ZmlsbExheWVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
IHsKICAgICBTdHlsZUltYWdlKiBpbWcgPSBmaWxsTGF5ZXItPmltYWdlKCk7Ci0gICAgYm9vbCBo
YXNGaWxsSW1hZ2UgPSBpbWcgJiYgaW1nLT5jYW5SZW5kZXIocmVuZGVyZXIoKS0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBib29sIGhhc0ZpbGxJbWFnZSA9IGltZyAmJiBpbWctPmNh
blJlbmRlcihyZW5kZXJlcigpLCByZW5kZXJlcigpLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
OwogICAgIGlmICgoIWhhc0ZpbGxJbWFnZSAmJiAhcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQm9y
ZGVyUmFkaXVzKCkpIHx8ICghcHJldkxpbmVCb3goKSAmJiAhbmV4dExpbmVCb3goKSkgfHwgIXBh
cmVudCgpKQogICAgICAgICBib3hNb2RlbE9iamVjdCgpLT5wYWludEZpbGxMYXllckV4dGVuZGVk
KHBhaW50SW5mbywgYywgZmlsbExheWVyLCByZWN0LCBCYWNrZ3JvdW5kQmxlZWROb25lLCB0aGlz
LCByZWN0LnNpemUoKSwgb3ApOwogICAgIGVsc2UgewpAQCAtMTIwNiw3ICsxMjA2LDcgQEAgdm9p
ZCBJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25zKAogICAgICAgICBpZiAocGFyZW50
KCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQm9yZGVyKCkpIHsKICAgICAgICAgICAgIGNv
bnN0IE5pbmVQaWVjZUltYWdlJiBib3JkZXJJbWFnZSA9IHJlbmRlcmVyKCktPnN0eWxlKCktPmJv
cmRlckltYWdlKCk7CiAgICAgICAgICAgICBTdHlsZUltYWdlKiBib3JkZXJJbWFnZVNvdXJjZSA9
IGJvcmRlckltYWdlLmltYWdlKCk7Ci0gICAgICAgICAgICBib29sIGhhc0JvcmRlckltYWdlID0g
Ym9yZGVySW1hZ2VTb3VyY2UgJiYgYm9yZGVySW1hZ2VTb3VyY2UtPmNhblJlbmRlcihzdHlsZVRv
VXNlLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgYm9vbCBoYXNCb3JkZXJJbWFnZSA9
IGJvcmRlckltYWdlU291cmNlICYmIGJvcmRlckltYWdlU291cmNlLT5jYW5SZW5kZXIocmVuZGVy
ZXIoKSwgc3R5bGVUb1VzZS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgICAgIGlmIChoYXNC
b3JkZXJJbWFnZSAmJiAhYm9yZGVySW1hZ2VTb3VyY2UtPmlzTG9hZGVkKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOyAvLyBEb24ndCBwYWludCBhbnl0aGluZyB3aGlsZSB3ZSB3YWl0IGZvciB0
aGUgaW1hZ2UgdG8gbG9hZC4KIApAQCAtMTI4MCw3ICsxMjgwLDcgQEAgdm9pZCBJbmxpbmVGbG93
Qm94OjpwYWludE1hc2soUGFpbnRJbmZvJgogICAgIExheW91dFJlY3QgcGFpbnRSZWN0ID0gTGF5
b3V0UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0LCBmcmFtZVJlY3Quc2l6ZSgpKTsKICAgICBwYWlu
dEZpbGxMYXllcnMocGFpbnRJbmZvLCBDb2xvcigpLCByZW5kZXJlcigpLT5zdHlsZSgpLT5tYXNr
TGF5ZXJzKCksIHBhaW50UmVjdCwgY29tcG9zaXRlT3ApOwogICAgIAotICAgIGJvb2wgaGFzQm94
SW1hZ2UgPSBtYXNrQm94SW1hZ2UgJiYgbWFza0JveEltYWdlLT5jYW5SZW5kZXIocmVuZGVyZXIo
KS0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBib29sIGhhc0JveEltYWdlID0gbWFz
a0JveEltYWdlICYmIG1hc2tCb3hJbWFnZS0+Y2FuUmVuZGVyKHJlbmRlcmVyKCksIHJlbmRlcmVy
KCktPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgaWYgKCFoYXNCb3hJbWFnZSB8fCAh
bWFza0JveEltYWdlLT5pc0xvYWRlZCgpKQogICAgICAgICByZXR1cm47IC8vIERvbid0IHBhaW50
IGFueXRoaW5nIHdoaWxlIHdlIHdhaXQgZm9yIHRoZSBpbWFnZSB0byBsb2FkLgogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50TWFza0ltYWdlcyhjb25zdCBQ
YQogICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayB0aGF0IHRoZSBtYXNrIGltYWdlcyB0
byBiZSByZW5kZXJlZCBjb250YWluIGF0IGxlYXN0IG9uZSBpbWFnZSB0aGF0IGNhbiBiZSBhY3R1
YWxseSB1c2VkIGluIHJlbmRlcmluZwogICAgICAgICAgICAgLy8gYmVmb3JlIHB1c2hpbmcgdGhl
IHRyYW5zcGFyZW5jeSBsYXllci4KICAgICAgICAgICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBm
aWxsTGF5ZXIgPSBtYXNrTGF5ZXJzLT5uZXh0KCk7IGZpbGxMYXllcjsgZmlsbExheWVyID0gZmls
bExheWVyLT5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmlsbExheWVyLT5pbWFnZSgp
ICYmIGZpbGxMYXllci0+aW1hZ2UoKS0+Y2FuUmVuZGVyKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmlsbExheWVyLT5pbWFnZSgpICYmIGZpbGxMYXll
ci0+aW1hZ2UoKS0+Y2FuUmVuZGVyKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgcHVzaFRyYW5zcGFyZW5jeUxheWVyID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgb25lIGltYWdlIHRoYXQgY2FuIGJlIHVzZWQgaW4g
cmVuZGVyaW5nLCBleGl0IHRoZSBsb29wCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTEzMCw3ICsxMTMwLDcgQEAgYm9vbCBSZW5kZXJCb3g6OnJlcGFpbnRMYXllclJlY3RzRm9ySW1h
ZwogICAgIFJlbmRlckJveCogbGF5ZXJSZW5kZXJlciA9IDA7CiAKICAgICBmb3IgKGNvbnN0IEZp
bGxMYXllciogY3VyTGF5ZXIgPSBsYXllcnM7IGN1ckxheWVyOyBjdXJMYXllciA9IGN1ckxheWVy
LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKGN1ckxheWVyLT5pbWFnZSgpICYmIGltYWdlID09IGN1
ckxheWVyLT5pbWFnZSgpLT5kYXRhKCkgJiYgY3VyTGF5ZXItPmltYWdlKCktPmNhblJlbmRlcihz
dHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSB7CisgICAgICAgIGlmIChjdXJMYXllci0+aW1hZ2Uo
KSAmJiBpbWFnZSA9PSBjdXJMYXllci0+aW1hZ2UoKS0+ZGF0YSgpICYmIGN1ckxheWVyLT5pbWFn
ZSgpLT5jYW5SZW5kZXIodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkgewogICAgICAg
ICAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGlzIGltYWdlIGlzIGJlaW5nIHVzZWQsIGNvbXB1
dGUgdGhlIHJlbmRlcmVyIGFuZCB0aGUgcmVjdAogICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZW4n
dCBhbHJlYWR5CiAgICAgICAgICAgICBpZiAoIWxheWVyUmVuZGVyZXIpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2
aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjksNyArNjI5LDcgQEAgdm9pZCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogCiAgICAgQ29sb3IgYmdDb2xvciA9IGNvbG9y
OwogICAgIFN0eWxlSW1hZ2UqIGJnSW1hZ2UgPSBiZ0xheWVyLT5pbWFnZSgpOwotICAgIGJvb2wg
c2hvdWxkUGFpbnRCYWNrZ3JvdW5kSW1hZ2UgPSBiZ0ltYWdlICYmIGJnSW1hZ2UtPmNhblJlbmRl
cihzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgIGJvb2wgc2hvdWxkUGFpbnRCYWNrZ3Jv
dW5kSW1hZ2UgPSBiZ0ltYWdlICYmIGJnSW1hZ2UtPmNhblJlbmRlcih0aGlzLCBzdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpOwogICAgIAogICAgIC8vIFdoZW4gdGhpcyBzdHlsZSBmbGFnIGlzIHNl
dCwgY2hhbmdlIGV4aXN0aW5nIGJhY2tncm91bmQgY29sb3JzIGFuZCBpbWFnZXMgdG8gYSBzb2xp
ZCB3aGl0ZSBiYWNrZ3JvdW5kLgogICAgIC8vIElmIHRoZXJlJ3Mgbm8gYmcgY29sb3Igb3IgaW1h
Z2UsIGxlYXZlIGl0IHVudG91Y2hlZCB0byBhdm9pZCBhZmZlY3RpbmcgdHJhbnNwYXJlbmN5LgpA
QCAtODAzLDcgKzgwMyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExh
eWUKIExheW91dFNpemUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUZpbGxUaWxlU2l6
ZShjb25zdCBGaWxsTGF5ZXIqIGZpbGxMYXllciwgTGF5b3V0U2l6ZSBwb3NpdGlvbmluZ0FyZWFT
aXplKSBjb25zdAogewogICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gZmlsbExheWVyLT5pbWFnZSgp
OwotICAgIGltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUocG9zaXRpb25pbmdBcmVhU2l6ZSk7
IC8vIFVzZSB0aGUgYm94IGVzdGFibGlzaGVkIGJ5IGJhY2tncm91bmQtb3JpZ2luLgorICAgIGlt
YWdlLT5zZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIodGhpcywgcG9zaXRpb25pbmdBcmVhU2l6
ZSk7IC8vIFVzZSB0aGUgYm94IGVzdGFibGlzaGVkIGJ5IGJhY2tncm91bmQtb3JpZ2luLgogCiAg
ICAgRUZpbGxTaXplVHlwZSB0eXBlID0gZmlsbExheWVyLT5zaXplKCkudHlwZTsKIApAQCAtOTg4
LDcgKzk4OCw3IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWMKICAg
ICBpZiAoIXN0eWxlSW1hZ2UtPmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBO
ZXZlciBwYWludCBhIG5pbmUtcGllY2UgaW1hZ2UgaW5jcmVtZW50YWxseSwgYnV0IGRvbid0IHBh
aW50IHRoZSBmYWxsYmFjayBib3JkZXJzIGVpdGhlci4KIAotICAgIGlmICghc3R5bGVJbWFnZS0+
Y2FuUmVuZGVyKHN0eWxlLT5lZmZlY3RpdmVab29tKCkpKQorICAgIGlmICghc3R5bGVJbWFnZS0+
Y2FuUmVuZGVyKHRoaXMsIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyBGSVhNRTogYm9yZGVyLWltYWdlIGlzIGJyb2tlbiB3aXRoIGZ1bGwg
cGFnZSB6b29taW5nIHdoZW4gdGlsaW5nIGhhcyB0byBoYXBwZW4sIHNpbmNlIHRoZSB0aWxpbmcg
ZnVuY3Rpb24KQEAgLTEwMDUsNyArMTAwNSw3IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50TmluZVBpZWMKICAgICBMYXlvdXRVbml0IHJpZ2h0V2l0aE91dHNldCA9IHJlY3QubWF4
WCgpICsgcmlnaHRPdXRzZXQ7CiAgICAgTGF5b3V0UmVjdCBib3JkZXJJbWFnZVJlY3QgPSBMYXlv
dXRSZWN0KGxlZnRXaXRoT3V0c2V0LCB0b3BXaXRoT3V0c2V0LCByaWdodFdpdGhPdXRzZXQgLSBs
ZWZ0V2l0aE91dHNldCwgYm90dG9tV2l0aE91dHNldCAtIHRvcFdpdGhPdXRzZXQpOwogCi0gICAg
c3R5bGVJbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKGJvcmRlckltYWdlUmVjdC5zaXplKCkp
OworICAgIHN0eWxlSW1hZ2UtPnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcih0aGlzLCBib3Jk
ZXJJbWFnZVJlY3Quc2l6ZSgpKTsKICAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IHN0eWxlSW1h
Z2UtPmltYWdlU2l6ZSh0aGlzLCAxLjBmKTsKICAgICBMYXlvdXRVbml0IGltYWdlV2lkdGggPSBp
bWFnZVNpemUud2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGltYWdlSGVpZ2h0ID0gaW1hZ2VTaXpl
LmhlaWdodCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIGNvbnN0IGludCBt
YXhBbHRUZXh0SGVpZ2h0ID0gMjU2OwogSW50U2l6ZSBSZW5kZXJJbWFnZTo6aW1hZ2VTaXplRm9y
RXJyb3IoQ2FjaGVkSW1hZ2UqIG5ld0ltYWdlKSBjb25zdAogewogICAgIEFTU0VSVF9BUkcobmV3
SW1hZ2UsIG5ld0ltYWdlKTsKLSAgICBBU1NFUlRfQVJHKG5ld0ltYWdlLCBuZXdJbWFnZS0+aW1h
Z2UoKSk7CisgICAgQVNTRVJUX0FSRyhuZXdJbWFnZSwgbmV3SW1hZ2UtPmltYWdlRm9yUmVuZGVy
ZXIodGhpcykpOwogCiAgICAgSW50U2l6ZSBpbWFnZVNpemU7CiAgICAgaWYgKG5ld0ltYWdlLT53
aWxsUGFpbnRCcm9rZW5JbWFnZSgpKSB7CkBAIC05MSw3ICs5MSw3IEBAIEludFNpemUgUmVuZGVy
SW1hZ2U6OmltYWdlU2l6ZUZvckVycm9yKEMKICAgICAgICAgaW1hZ2VTaXplID0gYnJva2VuSW1h
Z2VBbmRJbWFnZVNjYWxlRmFjdG9yLmZpcnN0LT5zaXplKCk7CiAgICAgICAgIGltYWdlU2l6ZS5z
Y2FsZSgxIC8gYnJva2VuSW1hZ2VBbmRJbWFnZVNjYWxlRmFjdG9yLnNlY29uZCk7CiAgICAgfSBl
bHNlCi0gICAgICAgIGltYWdlU2l6ZSA9IG5ld0ltYWdlLT5pbWFnZSgpLT5zaXplKCk7CisgICAg
ICAgIGltYWdlU2l6ZSA9IG5ld0ltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHRoaXMpLT5zaXplKCk7
CiAKICAgICAvLyBpbWFnZVNpemUoKSByZXR1cm5zIDAgZm9yIHRoZSBlcnJvciBpbWFnZS4gV2Ug
bmVlZCB0aGUgdHJ1ZSBzaXplIG9mIHRoZQogICAgIC8vIGVycm9yIGltYWdlLCBzbyB3ZSBoYXZl
IHRvIGdldCBpdCBieSBncmFiYmluZyBpbWFnZSgpIGRpcmVjdGx5LgpAQCAtMTAzLDcgKzEwMyw3
IEBAIEludFNpemUgUmVuZGVySW1hZ2U6OmltYWdlU2l6ZUZvckVycm9yKEMKIGJvb2wgUmVuZGVy
SW1hZ2U6OnNldEltYWdlU2l6ZUZvckFsdFRleHQoQ2FjaGVkSW1hZ2UqIG5ld0ltYWdlIC8qID0g
MCAqLykKIHsKICAgICBJbnRTaXplIGltYWdlU2l6ZTsKLSAgICBpZiAobmV3SW1hZ2UgJiYgbmV3
SW1hZ2UtPmltYWdlKCkpCisgICAgaWYgKG5ld0ltYWdlICYmIG5ld0ltYWdlLT5pbWFnZUZvclJl
bmRlcmVyKHRoaXMpKQogICAgICAgICBpbWFnZVNpemUgPSBpbWFnZVNpemVGb3JFcnJvcihuZXdJ
bWFnZSk7CiAgICAgZWxzZSBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5KCkgfHwgbmV3SW1hZ2UpIHsK
ICAgICAgICAgLy8gSWYgd2UnbGwgYmUgZGlzcGxheWluZyBlaXRoZXIgdGV4dCBvciBhbiBpbWFn
ZSwgYWRkIGEgbGl0dGxlIHBhZGRpbmcuCkBAIC01MTgsNyArNTE4LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJJbWFnZTo6Y29tcHV0ZVJlcGxhY2VkTAogICAgIGlmIChtX2ltYWdlUmVzb3VyY2UtPmlt
YWdlSGFzUmVsYXRpdmVXaWR0aCgpKQogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjYiA9IGlz
UG9zaXRpb25lZCgpID8gY29udGFpbmVyKCkgOiBjb250YWluaW5nQmxvY2soKSkgewogICAgICAg
ICAgICAgaWYgKGNiLT5pc0JveCgpKQotICAgICAgICAgICAgICAgIG1faW1hZ2VSZXNvdXJjZS0+
c2V0SW1hZ2VDb250YWluZXJTaXplKExheW91dFNpemUodG9SZW5kZXJCb3goY2IpLT5hdmFpbGFi
bGVXaWR0aCgpLCB0b1JlbmRlckJveChjYiktPmF2YWlsYWJsZUhlaWdodCgpKSk7CisgICAgICAg
ICAgICAgICAgbV9pbWFnZVJlc291cmNlLT5zZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIoTGF5
b3V0U2l6ZSh0b1JlbmRlckJveChjYiktPmF2YWlsYWJsZVdpZHRoKCksIHRvUmVuZGVyQm94KGNi
KS0+YXZhaWxhYmxlSGVpZ2h0KCkpKTsKICAgICAgICAgfQogCiAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsV2lkdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNv
dXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksMTQgKzg5
LDExIEBAIHZvaWQgUmVuZGVySW1hZ2VSZXNvdXJjZTo6cmVzZXRBbmltYXRpb24KICAgICAgICAg
bV9yZW5kZXJlci0+cmVwYWludCgpOwogfQogCi12b2lkIFJlbmRlckltYWdlUmVzb3VyY2U6OnNl
dEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAordm9pZCBSZW5k
ZXJJbWFnZVJlc291cmNlOjpzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIoY29uc3QgSW50U2l6
ZSYgaW1hZ2VDb250YWluZXJTaXplKQogewogICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKLQotICAg
IGlmICghbV9jYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jYWNoZWRJbWFn
ZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHNpemUpOworICAgIGlmIChtX2NhY2hlZEltYWdlKQor
ICAgICAgICBtX2NhY2hlZEltYWdlLT5zZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIobV9yZW5k
ZXJlciwgaW1hZ2VDb250YWluZXJTaXplKTsKIH0KIAogSW1hZ2UqIFJlbmRlckltYWdlUmVzb3Vy
Y2U6Om51bGxJbWFnZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2VSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZVJlc291cmNlLmgJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTUgKzU0
LDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRBbmltYXRpb24oKTsKIAotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoaW50IC8qIHdpZHRoICovID0gMCwgaW50IC8qIGhl
aWdodCAqLyA9IDApIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdl
LT5pbWFnZSgpIDogbnVsbEltYWdlKCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+
IGltYWdlKGludCAvKiB3aWR0aCAqLyA9IDAsIGludCAvKiBoZWlnaHQgKi8gPSAwKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlciht
X3JlbmRlcmVyKSA6IG51bGxJbWFnZSgpOyB9CiAgICAgdmlydHVhbCBib29sIGVycm9yT2NjdXJy
ZWQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlICYmIG1fY2FjaGVkSW1hZ2UtPmVycm9y
T2NjdXJyZWQoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVy
U2l6ZUZvclJlbmRlcmVyKGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc0lt
YWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hl
ZEltYWdlLT51c2VzSW1hZ2VDb250YWluZXJTaXplKCkgOiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdl
ID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgOiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9j
YWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSA6IGZh
bHNlOyB9CiAKLSAgICB2aXJ0dWFsIEludFNpemUgaW1hZ2VTaXplKGZsb2F0IG11bHRpcGxpZXIp
IGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT5pbWFnZVNpemUo
bXVsdGlwbGllcikgOiBJbnRTaXplKCk7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgaW1hZ2VTaXpl
KGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hl
ZEltYWdlLT5pbWFnZVNpemVGb3JSZW5kZXJlcihtX3JlbmRlcmVyLCBtdWx0aXBsaWVyKSA6IElu
dFNpemUoKTsgfQogCiAgICAgdmlydHVhbCBXcmFwcGVkSW1hZ2VQdHIgaW1hZ2VQdHIoKSBjb25z
dCB7IHJldHVybiBtX2NhY2hlZEltYWdlLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5o
CShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZVJlc291cmNlU3R5bGVJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKGludCB3aWR0aCA9IDAs
IGludCBoZWlnaHQgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0eWxlSW1hZ2UtPmltYWdlKG1fcmVu
ZGVyZXIsIEludFNpemUod2lkdGgsIGhlaWdodCkpOyB9CiAgICAgdmlydHVhbCBib29sIGVycm9y
T2NjdXJyZWQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlSW1hZ2UtPmVycm9yT2NjdXJyZWQoKTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKSBjb25zdCB7IG1fc3R5bGVJbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHNpemUp
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihjb25zdCBJ
bnRTaXplJiBzaXplKSB7IG1fc3R5bGVJbWFnZS0+c2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVy
KG1fcmVuZGVyZXIsIHNpemUpOyB9CiAgICAgdmlydHVhbCBib29sIHVzZXNJbWFnZUNvbnRhaW5l
clNpemUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlSW1hZ2UtPnVzZXNJbWFnZUNvbnRhaW5lclNp
emUoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3N0eWxlSW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpOyB9CiAgICAgdmly
dHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxl
SW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDk3MzYzKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkyNiw3ICs5MjYsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6aXNE
aXJlY3RseUNvbXBvCiAgICAgUmVuZGVySW1hZ2UqIGltYWdlUmVuZGVyZXIgPSB0b1JlbmRlcklt
YWdlKHJlbmRlck9iamVjdCk7CiAgICAgaWYgKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGlt
YWdlUmVuZGVyZXItPmNhY2hlZEltYWdlKCkpIHsKICAgICAgICAgaWYgKGNhY2hlZEltYWdlLT5o
YXNJbWFnZSgpKQotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlLT5pbWFnZSgpLT5pc0Jp
dG1hcEltYWdlKCk7CisgICAgICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVu
ZGVyZXIoaW1hZ2VSZW5kZXJlciktPmlzQml0bWFwSW1hZ2UoKTsKICAgICB9CiAKICAgICByZXR1
cm4gZmFsc2U7CkBAIC05NjMsNyArOTYzLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUltYWdlQ29udAogICAgIGlmICghY2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOworICAgIEltYWdlKiBpbWFn
ZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlUmVuZGVyZXIpOwogICAgIGlm
ICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNTAsNyArMTM1MCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVByZWZlcnJl
ZEwKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBzb21ld2hhdCBhcmJpdHJhcnkgd2lkdGgu
ICBHZW5lcmF0ZWQgaW1hZ2VzIGZvciBtYXJrZXJzIHJlYWxseSB3b24ndCBiZWNvbWUgcGFydGlj
dWxhcmx5IHVzZWZ1bAogICAgICAgICAvLyB1bnRpbCB3ZSBzdXBwb3J0IHRoZSBDU1MzIG1hcmtl
ciBwc2V1ZG9jbGFzcyB0byBhbGxvdyBjb250cm9sIG92ZXIgdGhlIHdpZHRoIGFuZCBoZWlnaHQg
b2YgdGhlIG1hcmtlciBib3guCiAgICAgICAgIExheW91dFVuaXQgYnVsbGV0V2lkdGggPSBmb250
TWV0cmljcy5hc2NlbnQoKSAvIDI7Ci0gICAgICAgIG1faW1hZ2UtPnNldEltYWdlQ29udGFpbmVy
U2l6ZShMYXlvdXRTaXplKGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCkpOworICAgICAgICBtX2lt
YWdlLT5zZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIodGhpcywgTGF5b3V0U2l6ZShidWxsZXRX
aWR0aCwgYnVsbGV0V2lkdGgpKTsKICAgICAgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemUgPSBtX2lt
YWdlLT5pbWFnZVNpemUodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAg
bV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBpbWFnZVNpemUud2lkdGgoKSA6
IGltYWdlU2l6ZS5oZWlnaHQoKTsKICAgICAgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0Rp
cnR5KGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDUsNyArNzQ1LDcgQEAgc3RhdGljIGJvb2wg
bXVzdFJlcGFpbnRGaWxsTGF5ZXJzKGNvbnN0IAogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUg
YSB2YWxpZCBpbWFnZS4KICAgICBTdHlsZUltYWdlKiBpbWcgPSBsYXllci0+aW1hZ2UoKTsKLSAg
ICBpZiAoIWltZyB8fCAhaW1nLT5jYW5SZW5kZXIocmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSkpCisgICAgaWYgKCFpbWcgfHwgIWltZy0+Y2FuUmVuZGVyKHJlbmRlcmVyLCByZW5k
ZXJlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKCFsYXllci0+eFBvc2l0aW9uKCkuaXNaZXJvKCkgfHwgIWxheWVyLT55UG9zaXRp
b24oKS5pc1plcm8oKSkKQEAgLTc2NSw3ICs3NjUsNyBAQCBib29sIFJlbmRlck9iamVjdDo6Ym9y
ZGVySW1hZ2VJc0xvYWRlZEFuCiAgICAgQVNTRVJUKHN0eWxlKCktPmhhc0JvcmRlcigpKTsKIAog
ICAgIFN0eWxlSW1hZ2UqIGJvcmRlckltYWdlID0gc3R5bGUoKS0+Ym9yZGVySW1hZ2UoKS5pbWFn
ZSgpOwotICAgIHJldHVybiBib3JkZXJJbWFnZSAmJiBib3JkZXJJbWFnZS0+Y2FuUmVuZGVyKHN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkgJiYgYm9yZGVySW1hZ2UtPmlzTG9hZGVkKCk7CisgICAg
cmV0dXJuIGJvcmRlckltYWdlICYmIGJvcmRlckltYWdlLT5jYW5SZW5kZXIodGhpcywgc3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpKSAmJiBib3JkZXJJbWFnZS0+aXNMb2FkZWQoKTsKIH0KIAogYm9v
bCBSZW5kZXJPYmplY3Q6Om11c3RSZXBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJ
bWFnZS5jcHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBA
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IFN0eWxlQ2FjaGVkSW1hZ2U6OmMKICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX2ltYWdlLT51cmwoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19VUkkpOwogfQogCi1ib29sIFN0eWxlQ2FjaGVkSW1hZ2U6OmNhblJlbmRlcihmbG9hdCBt
dWx0aXBsaWVyKSBjb25zdAorYm9vbCBTdHlsZUNhY2hlZEltYWdlOjpjYW5SZW5kZXIoY29uc3Qg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9pbWFnZS0+Y2FuUmVuZGVyKG11bHRpcGxpZXIpOworICAgIHJldHVybiBtX2ltYWdl
LT5jYW5SZW5kZXIocmVuZGVyZXIsIG11bHRpcGxpZXIpOwogfQogCiBib29sIFN0eWxlQ2FjaGVk
SW1hZ2U6OmlzTG9hZGVkKCkgY29uc3QKQEAgLTQ5LDkgKzQ5LDkgQEAgYm9vbCBTdHlsZUNhY2hl
ZEltYWdlOjplcnJvck9jY3VycmVkKCkgYwogICAgIHJldHVybiBtX2ltYWdlLT5lcnJvck9jY3Vy
cmVkKCk7CiB9CiAKLUludFNpemUgU3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2VTaXplKGNvbnN0IFJl
bmRlck9iamVjdCogLypyZW5kZXJlciovLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAorSW50U2l6
ZSBTdHlsZUNhY2hlZEltYWdlOjppbWFnZVNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbWFnZS0+aW1hZ2VT
aXplKG11bHRpcGxpZXIpOworICAgIHJldHVybiBtX2ltYWdlLT5pbWFnZVNpemVGb3JSZW5kZXJl
cihyZW5kZXJlciwgbXVsdGlwbGllcik7CiB9CiAKIGJvb2wgU3R5bGVDYWNoZWRJbWFnZTo6aW1h
Z2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QKQEAgLTY5LDI0ICs2OSwyNCBAQCBib29sIFN0eWxl
Q2FjaGVkSW1hZ2U6OnVzZXNJbWFnZUNvbnRhaW5lCiAgICAgcmV0dXJuIG1faW1hZ2UtPnVzZXNJ
bWFnZUNvbnRhaW5lclNpemUoKTsKIH0KIAotdm9pZCBTdHlsZUNhY2hlZEltYWdlOjpzZXRJbWFn
ZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgU3R5bGVDYWNoZWRJbWFn
ZTo6c2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IEludFNpemUmIGltYWdlQ29udGFpbmVyU2l6ZSkKIHsKLSAgICByZXR1cm4gbV9p
bWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHNpemUpOworICAgIG1faW1hZ2UtPnNldENvbnRh
aW5lclNpemVGb3JSZW5kZXJlcihyZW5kZXJlciwgaW1hZ2VDb250YWluZXJTaXplKTsKIH0KIAog
dm9pZCBTdHlsZUNhY2hlZEltYWdlOjphZGRDbGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
IHsKLSAgICByZXR1cm4gbV9pbWFnZS0+YWRkQ2xpZW50KHJlbmRlcmVyKTsKKyAgICBtX2ltYWdl
LT5hZGRDbGllbnQocmVuZGVyZXIpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVkSW1hZ2U6OnJlbW92
ZUNsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBtX2ltYWdlLT5y
ZW1vdmVDbGllbnQocmVuZGVyZXIpOworICAgIG1faW1hZ2UtPnJlbW92ZUNsaWVudChyZW5kZXJl
cik7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2U+IFN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlKFJlbmRl
ck9iamVjdCosIGNvbnN0IEludFNpemUmKSBjb25zdAorUGFzc1JlZlB0cjxJbWFnZT4gU3R5bGVD
YWNoZWRJbWFnZTo6aW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UtPmltYWdlKCk7CisgICAgcmV0dXJuIG1faW1h
Z2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgJKHJldmlzaW9u
IDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1h
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTQgKzQwLDE0IEBAIHB1YmxpYzoKICAgICAKICAg
ICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgp
OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBjYW5SZW5kZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgZmxvYXQg
bXVsdGlwbGllcikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGVkKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGVycm9yT2NjdXJyZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFNp
emUgaW1hZ2VTaXplKGNvbnN0IFJlbmRlck9iamVjdCosIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdmlydHVhbCB2b2lkIHNl
dENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRT
aXplJik7CiAgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChSZW5kZXJPYmplY3QqKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1h
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUdlbmVyYXRlZEltYWdlLmNwcAkocmV2aXNpb24gOTczNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDExICs1OCw2IEBAIEludFNpemUgU3R5bGVHZW5lcmF0ZWRJbWFnZTo6aW1hZ2VTaXplKGMK
ICAgICByZXR1cm4gbV9jb250YWluZXJTaXplOwogfQogCi12b2lkIFN0eWxlR2VuZXJhdGVkSW1h
Z2U6OnNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIG1f
Y29udGFpbmVyU2l6ZSA9IHNpemU7Ci19Ci0KIHZvaWQgU3R5bGVHZW5lcmF0ZWRJbWFnZTo6YWRk
Q2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgbV9nZW5lcmF0b3ItPmFkZENs
aWVudChyZW5kZXJlciwgSW50U2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuaAkocmV2aXNpb24gOTczNjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gIW1fZml4ZWRTaXplOyB9
CiAgICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVy
biAhbV9maXhlZFNpemU7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZpeGVkU2l6ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250YWluZXJTaXplRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6
ZSYgY29udGFpbmVyU2l6ZSkgeyBtX2NvbnRhaW5lclNpemUgPSBjb250YWluZXJTaXplOyB9CiAg
ICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChSZW5kZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
bWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCShyZXZpc2lvbiA5
NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDE0ICs0OSwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlKCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBi
b29sIGNhblJlbmRlcihmbG9hdCAvKm11bHRpcGxpZXIqLykgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBjYW5SZW5kZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgZmxvYXQg
LyptdWx0aXBsaWVyKi8pIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNMb2FkZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGVycm9y
T2NjdXJyZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBp
bWFnZVNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgSW50U2l6ZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50KFJl
bmRlck9iamVjdCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9i
amVjdCopID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9i
amVjdCosIGNvbnN0IEludFNpemUmKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaAkocmV2aXNpb24gOTcz
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNv
bnN0IEludFNpemUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZUZvclJl
bmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2xpZW50KFJlbmRlck9iamVjdCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KikgeyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElt
YWdlPiBpbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gOTczNjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzgsNyArMTc4LDcgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VF
bGVtZQogICAgICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1
ZmZlcihtX3RhcmdldEltYWdlLmdldCgpLCByZW5kZXJlciwgY29udGVudFRyYW5zZm9ybWF0aW9u
KTsKICAgICB9CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlKGZpbHRlciwgbV90YXJnZXRJ
bWFnZSA/IG1fdGFyZ2V0SW1hZ2UtPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSA6IG1fY2Fj
aGVkSW1hZ2UtPmltYWdlKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7CisgICAgcmV0dXJuIEZF
SW1hZ2U6OmNyZWF0ZShmaWx0ZXIsIG1fdGFyZ2V0SW1hZ2UgPyBtX3RhcmdldEltYWdlLT5jb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkgOiBtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVy
KHJlbmRlcmVyKCkpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOwogfQogCiB2b2lkIFNWR0ZFSW1h
Z2VFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4m
IHVybHMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHAJKHJldmlzaW9uIDk3MzYzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDExICsyNiwxMyBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZH
SW1hZ2UuaCIKIAogI2luY2x1ZGUgIkNhY2hlZFBhZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgorI2luY2x1ZGUgIkVtcHR5Q2xpZW50cy5oIgogI2luY2x1ZGUgIkZpbGVDaG9vc2Vy
LmgiCiAjaW5jbHVkZSAiRmlsZUljb25Mb2FkZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
QEAgLTQ5LDExICs1Miw2IEBACiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAKLS8vIE1vdmluZyB0aGlzICNpbmNsdWRlIGFib3ZlIEZyYW1lTG9hZGVy
LmggY2F1c2VzIHRoZSBXaW5kb3dzIGJ1aWxkIHRvIGZhaWwgZHVlIHRvIHdhcm5pbmdzIGFib3V0
Ci0vLyBhbGlnbm1lbnQgaW4gVGltZXI8RnJhbWVMb2FkZXI+LiBJdCBzZWVtcyB0aGF0IHRoZSBk
ZWZpbml0aW9uIG9mIEVtcHR5RnJhbWVMb2FkZXJDbGllbnQgaXMgd2hhdAotLy8gY2F1c2VzIHRo
aXMgKHJlbW92aW5nIHRoYXQgZGVmaW5pdGlvbiBmaXhlcyB0aGUgd2FybmluZ3MpLCBidXQgaXQg
aXNuJ3QgY2xlYXIgd2h5LgotI2luY2x1ZGUgIkVtcHR5Q2xpZW50cy5oIiAvLyBOT0xJTlQKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdJbWFnZUNocm9tZUNsaWVudCA6IHB1Ymxp
YyBFbXB0eUNocm9tZUNsaWVudCB7CkBAIC0xMDEsNyArOTksNyBAQCBTVkdJbWFnZTo6flNWR0lt
YWdlKCkKICAgICBBU1NFUlQoIW1fY2hyb21lQ2xpZW50IHx8ICFtX2Nocm9tZUNsaWVudC0+aW1h
Z2UoKSk7CiB9CiAKLXZvaWQgU1ZHSW1hZ2U6OnNldENvbnRhaW5lclNpemUoY29uc3QgTGF5b3V0
U2l6ZSYgY29udGFpbmVyU2l6ZSkKK3ZvaWQgU1ZHSW1hZ2U6OnNldENvbnRhaW5lclNpemUoY29u
c3QgSW50U2l6ZSYgY29udGFpbmVyU2l6ZSkKIHsKICAgICBpZiAoY29udGFpbmVyU2l6ZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5oCShyZXZpc2lvbiA5NzM2MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMiArNDQsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ltYWdlKG9ic2VydmVyKSk7CiAgICAgfQog
CisgICAgdmlydHVhbCBib29sIGlzU1ZHSW1hZ2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisK
IHByaXZhdGU6CiAgICAgdmlydHVhbCB+U1ZHSW1hZ2UoKTsKIAogICAgIHZpcnR1YWwgU3RyaW5n
IGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFp
bmVyU2l6ZShjb25zdCBMYXlvdXRTaXplJik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRhaW5l
clNpemUoY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgYm9vbCB1c2VzQ29udGFpbmVyU2l6
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="108472"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>