<?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>150388</bug_id>
          
          <creation_ts>2015-10-21 02:43:47 -0700</creation_ts>
          <short_desc>SVG Animation (SMIL) on &lt;text&gt; or &lt;tspan&gt; doesn&apos;t work on second run</short_desc>
          <delta_ts>2019-09-25 01:19:08 -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>SVG</component>
          <version>Safari 9</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=196518</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>191237</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tobi Reif">tobi</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>graouts</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1135177</commentid>
    <comment_count>0</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2015-10-21 02:43:47 -0700</bug_when>
    <thetext>One SVG Animation (SMIL) doesn&apos;t work on second run.

Open http://tobireif.com/svg/bubbles.svg in Safari .
Click on &quot;bubbles&quot;,
minimise (click on the &quot;minus&quot; button of the grey SVG box),
maximise (click on the the left button of the minimised grey box).
Now try to minimise again (as above) - the whole animation should happen as in the first run. Instead, the text &quot;a bubble&quot; doesn&apos;t move at all.

Safari 9.0 (11601.1.56).

Info: Works in Chrome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144744</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-11-30 02:00:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/23685782&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144745</commentid>
    <comment_count>2</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2015-11-30 02:03:57 -0800</bug_when>
    <thetext>Works fine in Firefox as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146281</commentid>
    <comment_count>3</comment_count>
      <attachid>266626</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2015-12-04 06:42:09 -0800</bug_when>
    <thetext>Created attachment 266626
Reduction

I don&apos;t know if this is the same bug, but I&apos;ve reduced the orignal sample at http://tobireif.com/svg/bubbles.svg to a much simpler SVG, attached to this bug.

This test case now has two animations on a &lt;text&gt; element, one that animates it down (id=&quot;down&quot;) and one that animates it back up (id=&quot;up&quot;). Using script, we start the down animation, when that completes we start the up animation, and when that completes we start the down animation a second time.

The first two animations run, but the third doesn&apos;t appear to visually. It does however seem to run in the timeline as it fires an `endEvent` after a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146282</commentid>
    <comment_count>4</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2015-12-04 06:43:10 -0800</bug_when>
    <thetext>There seems to be something specific to &lt;text&gt; and the `y` attribute here. Animating the `y` attribute of a &lt;rect&gt; works fine, animating the `opacity` of a &lt;text&gt; works fine too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146286</commentid>
    <comment_count>5</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2015-12-04 07:41:40 -0800</bug_when>
    <thetext>The y attribute of a &lt;text&gt; is an SVGAnimatedLengthList while the y attribute of a &lt;rect&gt; is an SVGAnimatedLength, this is probably why the behaviour differs.

What might happen here is that the two &lt;animate&gt; elements are running, and for some reason it&apos;s picking the animated value from the wrong &lt;animate&gt; elements, in this case the &quot;up&quot; element when the &quot;down&quot; element is actively running while the &quot;down&quot; element is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146287</commentid>
    <comment_count>6</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2015-12-04 08:12:26 -0800</bug_when>
    <thetext>Removing the &quot;up&quot; animation element during the final animation stretch applies the value correctly. Pretty sure this bug is about elements not picking the right animated value from its elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149263</commentid>
    <comment_count>7</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2015-12-15 03:34:29 -0800</bug_when>
    <thetext>When the animations behave as expected, the `animatedLengthList` SVGLengthList animated in SVGAnimatedLengthListAnimator::calculateAnimatedValue() is the same I can access in SMILTimeContainer::updateAnimations() right before this chunk of code is called:

// This will calculate the contribution from the animation and add it to the resultsElement.
if (!animation-&gt;progress(elapsed, resultElement, seekToTime) &amp;&amp; resultElement == animation)
    resultElement = nullptr;

with the following expression:

((SVGTextPositioningElement*)(animation-&gt;targetElement()))-&gt;y()

So at some point, a new SVGLengthList is created for the SVGAnimatedType* we pass to SVGAnimatedLengthListAnimator::calculateAnimatedValue() in SVGAnimateElementBase::calculateAnimatedValue() with the expression `resultAnimationElement.m_animatedType.get()`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149287</commentid>
    <comment_count>8</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2015-12-15 06:43:57 -0800</bug_when>
    <thetext>The new SVGLengthList is created as part of SVGAnimateElementBase::resetAnimatedType() due to this condition in SVGSMILElement::progress():

    // Only reset the animated type to the base value once for the lowest priority animation that animates and contributes to a particular element/attribute pair.
    if (this == resultElement &amp;&amp; animationIsContributing)
        resetAnimatedType();

… specifically with this code:

std::unique_ptr&lt;SVGAnimatedType&gt; SVGAnimatedLengthListAnimator::startAnimValAnimation(const SVGElementAnimatedPropertyList&amp; animatedTypes)
{
    return SVGAnimatedType::createLengthList(constructFromBaseValue&lt;SVGAnimatedLengthList&gt;(animatedTypes));
}

I can&apos;t put my finger on it quite yet, but something is wrong either in the condition under which resetAnimatedType() is called or within that method&apos;s implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155730</commentid>
    <comment_count>9</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2016-01-15 01:24:37 -0800</bug_when>
    <thetext>Thanks for investigating!

I hope the bug can be fixed soon :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156389</commentid>
    <comment_count>10</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2016-01-18 05:45:20 -0800</bug_when>
    <thetext>Haven&apos;t had much time to look into this recently but I will not forget about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156434</commentid>
    <comment_count>11</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2016-01-18 12:39:21 -0800</bug_when>
    <thetext>OK :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268125</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-01-19 10:38:35 -0800</bug_when>
    <thetext>One difference between &lt;text&gt; and &lt;rect&gt; is that &lt;rect&gt; uses ApplyXMLandCSSAnimation, but &lt;text&gt; uses ApplyXMLAnimation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268131</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-01-19 10:58:24 -0800</bug_when>
    <thetext>The &quot;bad&quot; value for the animating y() property is being fetched in SVGTextLayoutAttributesBuilder::fillCharacterDataMap()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268404</commentid>
    <comment_count>14</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2017-01-20 02:06:31 -0800</bug_when>
    <thetext>Regarding the new/current bug report title:
The animation target is a tspan (not a &lt;text/&gt; element) - perhaps that&apos;s relevant?

Regarding the issue report itself:
The grey &quot;closing cross&quot; also doesn&apos;t get moved by Safari on second run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268504</commentid>
    <comment_count>15</comment_count>
      <attachid>299362</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-01-20 11:58:30 -0800</bug_when>
    <thetext>Created attachment 299362
test case (line + text)

This test case shows the bug of animating the &lt;text&gt; and the &lt;line&gt; element in the second time. The problem is not reproducible for the &lt;rect&gt; element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269105</commentid>
    <comment_count>16</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-01-23 10:55:08 -0800</bug_when>
    <thetext>When animating CSS attributes (aka XMLandCSSAnimation attributes) like the &apos;x&apos; and &apos;y&apos; attributes of the &lt;rect&gt; element, SVGAnimateElementBase::applyResultsToTarget() has to call applyCSSPropertyToTargetAndInstances() which will update the style of the SVGRectElement. The style is used later when calculating the layout rectangle of the SVGRectElement. The animated values are stored in another place separate form the SVGElement.

But when animating presentation attributes with SVG DOM (aka XMLAnimation attributes) like the &apos;x&apos; and &apos;y&apos; attributes of the &lt;text&gt; element, no style change is done. These attributes are represented as SVGLengthListValues and have to be updated and retrieved form the &apos;m_x&apos; and &apos;m_y&apos; members of the SVGTextElement itself.

When an SVGAnimationElement starts animating, it creates a new SVGAnimatedType for its member m_animatedType through the animator startAnimValAnimation() in SVGAnimateElementBase::resetAnimatedType(). For example, when animating the &apos;m_y&apos; member of the SVGTextElement, SVGAnimatedLengthListAnimator::startAnimValAnimation() will be called which will call SVGAnimatedTypeAnimator::constructFromBaseValue(). This function creates a new SVGLengthListValues and then calls SVGAnimatedTypeAnimator::executeAction() with action = StartAnimationAction. And this will call SVGAnimatedListPropertyTearOff::animationStarted() which will set the SVGAnimatedListPropertyTearOff::m_values of the object &apos;m_y&apos; of SVGTextElement to the same SVGLengthListValues that is stored in SVGAnimationElement::m_animatedType.

The problem happens when animating an XMLAnimation attribute with multiple SVGAnimationElements. SVGAnimatedListPropertyTearOff::animationStarted() will be called only once with the SVGLengthListValues of the m_animatedType of the first SVGAnimationElement. This means no matter how many SVGAnimationElements are acting on the same attribute, changing only one SVGAnimationElement::m_animatedProperty through SVGAnimationElement::updateAnimation() can affect the layout of the SVGElement. This depends on the order of processing the SVGAnimationElements by SMILTimeContainer::updateAnimations(). The first SVGAnimationElement will be considered the resultElement in SMILTimeContainer::updateAnimations(). So if the first SVGAnimationElement happens to be the first one that points of the same AnimatedType which the SVGElement property TearOff object points to, then the attribute will be animated. Otherwise nothing will happen.

I think the fix should be the following. The m_animatedProperty of all the SVGAnimationElements should point to the same SVGAnimatedType object which is also pointed to by the TearOff object of the attribute of the SVGElement. This can be done if SVGAnimatedTypeAnimator::constructFromBaseValue() creates a new AnimatedType from currentBaseValue() only if the TearOff object is not animating. Otherwise it reuses the currentBaseValue(). This means we need to change the return type of SVGAnimatedTypeAnimator::constructFromBaseValue() form std::unique_ptr&lt;&gt; to be RefPtr&lt;&gt;.

Because of using the templates by SVGAnimatedTypeAnimator::constructFromBaseValue() and because SVGAnimatedType uses DataUnion for its data and because of the TearOff classes of the scaler data types do not return ref counted objects, the solution can&apos;t be generalized and the fix may not be very straightforward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269449</commentid>
    <comment_count>17</comment_count>
      <attachid>299609</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-01-24 10:15:03 -0800</bug_when>
    <thetext>Created attachment 299609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269451</commentid>
    <comment_count>18</comment_count>
      <attachid>299609</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-01-24 10:16:29 -0800</bug_when>
    <thetext>Comment on attachment 299609
Patch

This is not an ideal or a complete solution. But it fixes the bug and it is a good way to record my investigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269470</commentid>
    <comment_count>19</comment_count>
      <attachid>299609</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-01-24 11:24:22 -0800</bug_when>
    <thetext>Comment on attachment 299609
Patch

I wonder if SVGAnimatedType should just be a WTF::Variant now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271160</commentid>
    <comment_count>20</comment_count>
      <attachid>300078</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-01-29 17:31:42 -0800</bug_when>
    <thetext>Created attachment 300078
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271175</commentid>
    <comment_count>21</comment_count>
      <attachid>300084</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-01-29 19:59:40 -0800</bug_when>
    <thetext>Created attachment 300084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273667</commentid>
    <comment_count>22</comment_count>
      <attachid>300745</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-02-06 11:51:39 -0800</bug_when>
    <thetext>Created attachment 300745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273669</commentid>
    <comment_count>23</comment_count>
      <attachid>300746</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-02-06 11:55:52 -0800</bug_when>
    <thetext>Created attachment 300746
test case (line + text + marker)

Adding a new test case which includes an std::pair SVGAnimatedType: the angleAndEnumeration. The red drawing should be hidden at the end of the animations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273774</commentid>
    <comment_count>24</comment_count>
      <attachid>300745</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-02-06 17:02:45 -0800</bug_when>
    <thetext>Comment on attachment 300745
Patch

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

&gt; Source/WebCore/svg/SVGAnimatedType.cpp:15
&gt;   * Copyright (C) Research In Motion Limited 2011. All rights reserved.
&gt; + * Copyright (C) 2017 Apple Inc.  All rights reserved.
&gt;   *
&gt; - * This library is free software; you can redistribute it and/or
&gt; - * modify it under the terms of the GNU Library General Public
&gt; - * License as published by the Free Software Foundation; either
&gt; - * version 2 of the License, or (at your option) any later version.
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + * 1. Redistributions of source code must retain the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer.
&gt; + * 2. Redistributions in binary form must reproduce the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer in the
&gt; + *    documentation and/or other materials provided with the distribution.
&gt;   *
&gt; - * This library is distributed in the hope that it will be useful,
&gt; - * but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; - * Library General Public License for more details.
&gt; - *
&gt; - * You should have received a copy of the GNU Library General Public License
&gt; - * along with this library; see the file COPYING.LIB.  If not, write to
&gt; - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; - * Boston, MA 02110-1301, USA.
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS&apos;&apos; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

You can&apos;t just change a license like this. You have to make it a dual-licensed file if you make substantive changes.

&gt; Source/WebCore/svg/SVGAnimatedType.h:185
&gt; +    Variant&lt;
&gt; +        std::pair&lt;SVGAngleValue*, unsigned*&gt;,
&gt; +        bool*,
&gt; +        Color*,
&gt; +        unsigned*,
&gt; +        int*,
&gt; +        std::pair&lt;int*, int*&gt;,
&gt; +        SVGLengthValue*,
&gt; +        SVGLengthListValues*,
&gt; +        float*,
&gt; +        SVGNumberListValues*,
&gt; +        std::pair&lt;float*, float*&gt;,
&gt; +        SVGPathByteStream*,
&gt; +        SVGPointListValues*,
&gt; +        SVGPreserveAspectRatioValue*,
&gt; +        FloatRect*,
&gt; +        String*,
&gt; +        SVGTransformListValues*

I&apos;m really confused about why the Variant stores pointers to primitive types, rather than callers sharing a Variant*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278860</commentid>
    <comment_count>25</comment_count>
      <attachid>300745</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-02-19 23:36:01 -0800</bug_when>
    <thetext>Comment on attachment 300745
Patch

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

&gt;&gt; Source/WebCore/svg/SVGAnimatedType.h:185
&gt;&gt; +        SVGTransformListValues*
&gt; 
&gt; I&apos;m really confused about why the Variant stores pointers to primitive types, rather than callers sharing a Variant*.

I split changing SVGAnimatedType to hold a variant of primitive type in https://bugs.webkit.org/show_bug.cgi?id=168586.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299573</commentid>
    <comment_count>26</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2017-04-21 03:13:09 -0700</bug_when>
    <thetext>I hope this bug can get fixed soon 😃</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361210</commentid>
    <comment_count>27</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2017-10-17 04:14:25 -0700</bug_when>
    <thetext>Is there any hope?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361211</commentid>
    <comment_count>28</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2017-10-17 04:16:13 -0700</bug_when>
    <thetext>The current URL of the SVG animation demo is https://tobireif.com/demos/bubbles/ .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386470</commentid>
    <comment_count>29</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2018-01-06 00:39:03 -0800</bug_when>
    <thetext>I hope this can still get fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392713</commentid>
    <comment_count>30</comment_count>
      <attachid>300745</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-01-24 13:29:04 -0800</bug_when>
    <thetext>Comment on attachment 300745
Patch

Said, can you break this patch up into the Variant changes, which should not affect behavior, and then a followup that fixes the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1414063</commentid>
    <comment_count>31</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2018-04-12 10:15:26 -0700</bug_when>
    <thetext>It would be great if this issue could get fixed 😀</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512447</commentid>
    <comment_count>32</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-03-04 18:44:12 -0800</bug_when>
    <thetext>I verified that the patch in https://bugs.webkit.org/show_bug.cgi?id=191237 fixes this bug. I will not close this one as a dupe because I think we need to add a layout test for this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512564</commentid>
    <comment_count>33</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2019-03-05 01:26:52 -0800</bug_when>
    <thetext>&gt; I verified that the patch in https://bugs.webkit.org/show_bug.cgi?id=191237
&gt; fixes this bug.

So great to that there&apos;s progress regarding this bug! Thank you!

Please post a quick note here as soon as I can use Safari Tech Preview to verify the fix for the reported issue as observed at https://tobireif.com/demos/bubbles/ .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523390</commentid>
    <comment_count>34</comment_count>
      <attachid>366517</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-04-02 12:02:50 -0700</bug_when>
    <thetext>Created attachment 366517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523540</commentid>
    <comment_count>35</comment_count>
      <attachid>366517</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-02 17:26:09 -0700</bug_when>
    <thetext>Comment on attachment 366517
Patch

Clearing flags on attachment: 366517

Committed r243780: &lt;https://trac.webkit.org/changeset/243780&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523541</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-02 17:26:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523543</commentid>
    <comment_count>37</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-04-02 17:30:16 -0700</bug_when>
    <thetext>When opening the demo page https://tobireif.com/demos/bubbles/, WebKit debug fired an assertion. This bug did exist before the re-factoring of https://bugs.webkit.org/show_bug.cgi?id=191237. I filed https://bugs.webkit.org/show_bug.cgi?id=196518 to track this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523658</commentid>
    <comment_count>38</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2019-04-03 02:24:55 -0700</bug_when>
    <thetext>Thanks so much to all of you!

I updated the info at https://tobireif.com/demos/bubbles/ :
&quot;Doesn&apos;t work correctly in Safari 12.1 and lower versions, but should work correctly in higher versions (starting at some version). Here&apos;s the WebKit bug report [ https://bugs.webkit.org/show_bug.cgi?id=150388 ].&quot;

I hope I can soon use Safari Tech Preview to verify the fix, and I hope the fix will soon appear in Safari stable.

Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524185</commentid>
    <comment_count>39</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2019-04-04 01:57:46 -0700</bug_when>
    <thetext>It works in the latest Safari Tech Preview - thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573982</commentid>
    <comment_count>40</comment_count>
    <who name="Tobi Reif">tobi</who>
    <bug_when>2019-09-25 01:19:08 -0700</bug_when>
    <thetext>This now works in the latest stable Safari (version 13), so I removed the text regarding this bug from the demo page:

https://tobireif.com/demos/bubbles/
  -&gt; &quot;show demo info&quot;

Thanks again!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>266626</attachid>
            <date>2015-12-04 06:42:09 -0800</date>
            <delta_ts>2015-12-04 06:42:09 -0800</delta_ts>
            <desc>Reduction</desc>
            <filename>150388.svg</filename>
            <type>image/svg+xml</type>
            <size>1221</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIj4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIAogICAgICAgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgIHZhciBjeWNsZWQgPSBmYWxzZTsKICAgICAgICAgICAgdmFyIGRvd24gPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiZG93biIpOwogICAgICAgICAgICB2YXIgdXAgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgidXAiKTsKCiAgICAgICAgICAgIGRvd24uYWRkRXZlbnRMaXN0ZW5l
cigiZW5kRXZlbnQiLCBoYW5kbGVFbmRFdmVudCk7CiAgICAgICAgICAgIHVwLmFkZEV2ZW50TGlz
dGVuZXIoImVuZEV2ZW50IiwgaGFuZGxlRW5kRXZlbnQpOwoKICAgICAgICAgICAgZG93bi5iZWdp
bkVsZW1lbnQoKTsKCiAgICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZUVuZEV2ZW50KGV2ZW50KSB7
CiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGV2ZW50LnRhcmdldDsKICAgICAgICAgICAg
ICAgIGNvbnNvbGUubG9nKGVsZW1lbnQuaWQgKyAiIGZpcmVkICIgKyBldmVudC50eXBlKTsKICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IGRvd24pIHsKICAg
ICAgICAgICAgICAgICAgICBpZiAoY3ljbGVkKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CgogICAgICAgICAgICAgICAgICAgIGN5Y2xlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgdXAuYmVnaW5FbGVtZW50KCk7CiAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
ICAgICAgICBkb3duLmJlZ2luRWxlbWVudCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7Cgog
ICAgPC9zY3JpcHQ+CiAgICA8dGV4dCBkb21pbmFudC1iYXNlbGluZT0iaGFuZ2luZyIgaWQ9InRh
cmdldCIgeD0iMTAiIHk9IjIwIj4KICAgICAgICBGb28KICAgICAgICA8YW5pbWF0ZSBpZD0iZG93
biIgYXR0cmlidXRlTmFtZT0ieSIgZmlsbD0iZnJlZXplIiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVy
PSIwLjVzIiB0bz0iNjAiIC8+CiAgICAgICAgPGFuaW1hdGUgaWQ9InVwIiAgIGF0dHJpYnV0ZU5h
bWU9InkiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5pdGUiIGR1cj0iMC41cyIgdG89IjIw
IiAvPgogICAgPC90ZXh0Pgo8L3N2Zz4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>299362</attachid>
            <date>2017-01-20 11:58:30 -0800</date>
            <delta_ts>2017-01-20 11:58:30 -0800</delta_ts>
            <desc>test case (line + text)</desc>
            <filename>test205.svg</filename>
            <type>image/svg+xml</type>
            <size>1973</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgPHRleHQgeD0iMjAi
IHk9IjIwIj5UZXh0PC90ZXh0PgogICAgPHRleHQgZG9taW5hbnQtYmFzZWxpbmU9Imhhbmdpbmci
IHg9IjIwIiB5PSI0MCIgZm9udC1zaXplPSI0NHB4Ij4KICAgICAgICBGb28KICAgICAgICA8YW5p
bWF0ZSBpZD0iZG93bjEiIGF0dHJpYnV0ZU5hbWU9InkiIGZpbGw9ImZyZWV6ZSIgYmVnaW49Imlu
ZGVmaW5pdGUiIGR1cj0iMS41cyIgdG89IjE0MCIvPgogICAgICAgIDxhbmltYXRlIGlkPSJ1cDEi
IGF0dHJpYnV0ZU5hbWU9InkiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5pdGUiIGR1cj0i
MS41cyIgdG89IjQwIi8+CiAgICA8L3RleHQ+CgogICAgPHRleHQgeD0iMTQwIiB5PSIyMCI+UmVj
dGFuZ2xlPC90ZXh0PgogICAgPHJlY3QgeD0iMTQwIiB5PSI0MCIgd2lkdGg9IjQwIiBoZWlnaHQ9
IjQwIiBmaWxsPSJyZWQiPgogICAgICAgIDxhbmltYXRlIGlkPSJkb3duMiIgYXR0cmlidXRlTmFt
ZT0ieSIgZmlsbD0iZnJlZXplIiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVyPSIxLjVzIiB0bz0iMTQw
Ii8+CiAgICAgICAgPGFuaW1hdGUgaWQ9InVwMiIgYXR0cmlidXRlTmFtZT0ieSIgZmlsbD0iZnJl
ZXplIiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVyPSIxLjVzIiB0bz0iNDAiLz4KICAgIDwvcmVjdD4K
CiAgICA8dGV4dCB4PSIyNjAiIHk9IjIwIj5MaW5lPC90ZXh0PgogICAgPGxpbmUgeDE9IjI2MCIg
eTE9IjYwIiB4Mj0iMzAwIiB5Mj0iNjAiIHN0cm9rZT0icmVkIiBzdHJva2Utd2lkdGg9IjQwIj4K
ICAgICAgICA8YW5pbWF0ZSBpZD0iZG93bjMiIGF0dHJpYnV0ZU5hbWU9InkxIiBmaWxsPSJmcmVl
emUiIGJlZ2luPSJpbmRlZmluaXRlIiBkdXI9IjEuNXMiIHRvPSIxNjAiLz4KICAgICAgICA8YW5p
bWF0ZSBpZD0idXAzIiBhdHRyaWJ1dGVOYW1lPSJ5MSIgZmlsbD0iZnJlZXplIiBiZWdpbj0iaW5k
ZWZpbml0ZSIgZHVyPSIxLjVzIiB0bz0iNjAiLz4KICAgIAogICAgICAgIDxhbmltYXRlIGlkPSJk
b3duNCIgYXR0cmlidXRlTmFtZT0ieTIiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5pdGUi
IGR1cj0iMS41cyIgdG89IjE2MCIvPgogICAgICAgIDxhbmltYXRlIGlkPSJ1cDQiIGF0dHJpYnV0
ZU5hbWU9InkyIiBmaWxsPSJmcmVlemUiIGJlZ2luPSJpbmRlZmluaXRlIiBkdXI9IjEuNXMiIHRv
PSI2MCIvPgogICAgPC9saW5lPgoKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K
ICAgICAgICB2YXIgZ3JvdXBzID0gWwogICAgICAgICAgICB7IGRvd246ICJkb3duMSIsIHVwOiAi
dXAxIiB9LAogICAgICAgICAgICB7IGRvd246ICJkb3duMiIsIHVwOiAidXAyIiB9LAogICAgICAg
ICAgICB7IGRvd246ICJkb3duMyIsIHVwOiAidXAzIiB9LAogICAgICAgICAgICB7IGRvd246ICJk
b3duNCIsIHVwOiAidXA0IiB9LAogICAgICAgIF07CgogICAgICAgIGZvciAobGV0IGdyb3VwIG9m
IGdyb3VwcykgewogICAgICAgICAgICBsZXQgZG93biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGdyb3VwLmRvd24pOwogICAgICAgICAgICBsZXQgdXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZChncm91cC51cCk7CgogICAgICAgICAgICBkb3duLmFkZEV2ZW50TGlzdGVuZXIoImVuZEV2ZW50
IiwgKCkgPT4gewogICAgICAgICAgICAgICAgdG9nZ2xlKHVwKTsKICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgIAogICAgICAgICAgICB1cC5hZGRFdmVudExpc3RlbmVyKCJlbmRFdmVudCIsICgp
ID0+IHsKICAgICAgICAgICAgICAgIHRvZ2dsZShkb3duKTsKICAgICAgICAgICAgfSk7CgogICAg
ICAgICAgICBkb3duLmJlZ2luRWxlbWVudCgpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24g
dG9nZ2xlKG5ld0VsZW1lbnQpIHsKICAgICAgICAgICAgbmV3RWxlbWVudC5iZWdpbkVsZW1lbnQo
KTsKICAgICAgICB9CgogICAgPC9zY3JpcHQ+Cjwvc3ZnPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299609</attachid>
            <date>2017-01-24 10:15:03 -0800</date>
            <delta_ts>2017-01-29 17:31:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150388-20170124101304.patch</filename>
            <type>text/plain</type>
            <size>53781</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzNiYzUyMDFlNTZhMjUx
NjQxNTNjMmYzZmNlODc5MGMyZTBlNWVhNi4uZGUwNmI4YmY0ODBkOWRkZjA3NzRlNGY1ZjQ2MDNh
NGZhM2E2ODlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNSBAQAorMjAxNy0wMS0yNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNWRyBB
bmltYXRpb24gKFNNSUwpIG9uIFhNTCBhbmltYXRpbmcgcHJvcGVydGllcyBkb2Vzbid0IHdvcmsg
b24gc2Vjb25kIHJ1bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlIHByb2JsZW0gaGFwcGVucyB3aGVuIGFuaW1hdGluZyBhbiBYTUxBbmltYXRpb24g
YXR0cmlidXRlIHdpdGggbXVsdGlwbGUKKyAgICAgICAgU1ZHQW5pbWF0aW9uRWxlbWVudHMuIFRo
ZSBhbmltYXRpb25TdGFydGVkKCkgb2YgdGhlIFRlYXJPZmYgb2JqZWN0IHdpbGwgYmUKKyAgICAg
ICAgY2FsbGVkIG9ubHkgb25jZSB3aXRoIHRoZSB2YWx1ZSBzdG9yZWQgYnkgdGhlIG1fYW5pbWF0
ZWRUeXBlIG9mIHRoZSBmaXJzdAorICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50LiBUaGlzIG1l
YW5zIG5vIG1hdHRlciBob3cgbWFueSBTVkdBbmltYXRpb25FbGVtZW50cyBhcmUKKyAgICAgICAg
YWN0aW5nIG9uIHRoZSBzYW1lIGF0dHJpYnV0ZSwgY2hhbmdpbmcgb25seSBvbmUgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6bV9hbmltYXRlZFByb3BlcnR5CisgICAgICAgIHRocm91Z2ggU1ZHQW5pbWF0
aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uKCkgY2FuIGFmZmVjdCB0aGUgbGF5b3V0IG9mCisg
ICAgICAgIHRoZSBTVkdFbGVtZW50LiBUaGlzIGRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIHByb2Nl
c3NpbmcgdGhlIFNWR0FuaW1hdGlvbkVsZW1lbnRzCisgICAgICAgIGJ5IFNNSUxUaW1lQ29udGFp
bmVyOjp1cGRhdGVBbmltYXRpb25zKCkuIFRoZSBmaXJzdCBTVkdBbmltYXRpb25FbGVtZW50Cisg
ICAgICAgIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgcmVzdWx0RWxlbWVudCBpbiBTTUlMVGltZUNv
bnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucygpLgorICAgICAgICBTbyBpZiB0aGUgZmlyc3QgU1ZH
QW5pbWF0aW9uRWxlbWVudCBoYXBwZW5zIHRvIGJlIHRoZSBmaXJzdCBvbmUgdGhhdCBwb2ludHMK
KyAgICAgICAgb2YgdGhlIHNhbWUgQW5pbWF0ZWRUeXBlIHdoaWNoIHRoZSBTVkdFbGVtZW50IHBy
b3BlcnR5IFRlYXJPZmYgb2JqZWN0IHBvaW50cworICAgICAgICB0bywgdGhlbiB0aGUgYXR0cmli
dXRlIHdpbGwgYmUgYW5pbWF0ZWQuIE90aGVyd2lzZSBub3RoaW5nIHdpbGwgaGFwcGVuLgorCisg
ICAgICAgIFRoZSBmaXggc2hvdWxkIGJlIHRoZSBmb2xsb3dpbmcuIFRoZSBtX2FuaW1hdGVkUHJv
cGVydHkgb2YgYWxsIHRoZSBTVkdBbmltYXRpb25FbGVtZW50cworICAgICAgICBzaG91bGQgcG9p
bnQgdG8gdGhlIHNhbWUgU1ZHQW5pbWF0ZWRUeXBlIG9iamVjdCB3aGljaCBpcyBhbHNvIHBvaW50
ZWQgdG8gYnkKKyAgICAgICAgdGhlIFRlYXJPZmYgb2JqZWN0IG9mIHRoZSBhdHRyaWJ1dGUgb2Yg
dGhlIFNWR0VsZW1lbnQuIFRoaXMgY2FuIGJlIGRvbmUgaWYKKyAgICAgICAgU1ZHQW5pbWF0ZWRU
eXBlQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21CYXNlVmFsdWUoKSBjcmVhdGVzIGEgbmV3IEFuaW1h
dGVkVHlwZQorICAgICAgICBmcm9tIGN1cnJlbnRCYXNlVmFsdWUoKSBvbmx5IGlmIHRoZSBUZWFy
T2ZmIG9iamVjdCBpcyBub3QgYW5pbWF0aW5nLiBPdGhlcndpc2UKKyAgICAgICAgaXQgcmV1c2Vz
IHRoZSBjdXJyZW50QmFzZVZhbHVlKCkuCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRBbmds
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3I6OmNvbnN0
cnVjdEZyb21TdHJpbmcpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OmNvbnN0cnVjdEZy
b21TdHJpbmcpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZENvbG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkQ29sb3JBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6
CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5n
KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAg
ICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpj
b25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRMZW5ndGguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMZW5ndGhBbmltYXRvcjo6Y29uc3RydWN0
RnJvbVN0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRvcjo6Y29uc3RydWN0
RnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExlbmd0aExpc3RBbmlt
YXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRO
dW1iZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWROdW1iZXJBbmltYXRvcjo6
Y29uc3RydWN0RnJvbVN0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkTnVtYmVyTGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZE51bWJlckxpc3RBbmltYXRvcjo6
Y29uc3RydWN0RnJvbVN0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0
aW9uYWxOdW1iZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWROdW1iZXJPcHRp
b25hbE51bWJlckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0ZWRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUGF0aEFu
aW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkUGF0aEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24pOgorICAgICAgICAqIHN2Zy9T
VkdBbmltYXRlZFBvaW50TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBv
aW50TGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZH
QW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToK
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkUmVjdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAgICAgICAgKiBz
dmcvU1ZHQW5pbWF0ZWRTdHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRT
dHJpbmdBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6CisgICAgICAgICogc3Zn
L1NWR0FuaW1hdGVkVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6
OlNWR0FuaW1hdGVkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6On5T
VkdBbmltYXRlZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVh
dGVBbmdsZUFuZEVudW1lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlQm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNy
ZWF0ZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlRW51
bWVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVJbnRl
Z2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdlck9w
dGlvbmFsSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0
ZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0
aExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVyT3B0aW9uYWxO
dW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUG9pbnRMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUHJlc2VydmVBc3BlY3RSYXRp
byk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVUcmFuc2Zvcm1MaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6dmFsdWVBc1N0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFR5cGU6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAgICAqIHN2Zy9T
VkdBbmltYXRlZFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmFuZ2xlQW5kRW51bWVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpib29sZWFuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZWRUeXBlOjplbnVtZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlZFR5cGU6OmludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpp
bnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlw
ZTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6bGVuZ3RoTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6Om51bWJlcik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6Om51bWJlckxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRUeXBlOjpudW1iZXJPcHRpb25hbE51bWJlcik6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFR5cGU6OnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWRUeXBlOjpwb2ludExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpw
cmVzZXJ2ZUFzcGVjdFJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6
cmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnRyYW5zZm9ybUxpc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZH
QW5pbWF0ZWRUeXBlQW5pbWF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlw
ZUFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkVHlwZUFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGVBbmltYXRvcjo6ZXhlY3V0ZUFjdGlvbik6CisgICAg
ICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OmN1cnJlbnRB
bmltYXRlZFZhbHVlKToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3Bl
cnR5VGVhck9mZi5oOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkU3RhdGlj
UHJvcGVydHlUZWFyT2ZmLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFN0YXRpY1By
b3BlcnR5VGVhck9mZjo6Y3VycmVudEFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmY6OmFuaW1hdGlvblN0YXJ0ZWQpOgorICAg
ICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR01hdHJpeFRlYXJPZmYuaDoKKyAgICAgICAgKiBzdmcv
cHJvcGVydGllcy9TVkdQcm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
b3BlcnR5VGVhck9mZjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlU
ZWFyT2ZmOjpjb250ZXh0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRl
YXJPZmY6OlNWR1Byb3BlcnR5VGVhck9mZik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eVRlYXJPZmY6On5TVkdQcm9wZXJ0eVRlYXJPZmYpOgorCiAyMDE3LTAxLTEzICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFBvdGVudGlhbCBudWxscHRyIGRl
cmVmZXJlbmNlIGluIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcAppbmRleCBjNTczMjU1ZWMwMWQ0M2UzNDIwYzQ2
MWM2MjEzMTEwNmYzZDUyMzAxLi5mOWY5Mjc3OThlNzUzMDVlNTU4MGFkMTMxN2FkNjZmZmFiMTdj
ZDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRBbmdsZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQW5nbGUuY3BwCkBAIC0zMiw3ICsz
Miw3IEBAIFNWR0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6U1ZHQW5pbWF0ZWRBbmdsZUFuaW1hdG9y
KFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlvCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmlt
YXRlZFR5cGU+IFNWR0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlQW5nbGVBbmRFbnVtZXJhdGlvbihzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6
cGFpcjxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4+KCkpOworICAgIGF1dG8gYW5pbWF0ZWRUeXBl
ID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVBbmdsZUFuZEVudW1lcmF0aW9uKHN0ZDo6bWFrZV91
bmlxdWU8c3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPj4oKS5yZWxlYXNlKCkpOwog
ICAgIGF1dG8mIGFuaW1hdGVkUGFpciA9IGFuaW1hdGVkVHlwZS0+YW5nbGVBbmRFbnVtZXJhdGlv
bigpOwogCiAgICAgU1ZHQW5nbGVWYWx1ZSBhbmdsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkQm9vbGVhbi5jcHAKaW5kZXggZWMwODQyYTczY2UzNmI3YzE0Y2RiNWQxZDk5N2Y4MTZj
ZTU0NWIxOC4uODhiMjM1OGVkY2Y0NDU4NjljMWVhY2VmNWM1MjhiMjRiMzVkYWY5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQm9vbGVhbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQm9vbGVhbi5jcHAKQEAgLTMxLDcgKzMxLDcgQEAg
U1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OlNWR0FuaW1hdGVkQm9vbGVhbkFuaW1hdG9yKFNW
R0FuaW1hdGlvbkVsZW1lbnQqIGFuaW0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlw
ZT4gU1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZUJvb2xlYW4oc3RkOjptYWtlX3VuaXF1ZTxib29sPigpKTsKKyAgICBhdXRvIGFu
aW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQm9vbGVhbihzdGQ6Om1ha2VfdW5p
cXVlPGJvb2w+KCkucmVsZWFzZSgpKTsKICAgICBhbmltYXRlZFR5cGUtPmJvb2xlYW4oKSA9IChz
dHJpbmcgPT0gInRydWUiKTsgLy8gd2F0PwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRDb2xvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRDb2xvci5jcHAKaW5kZXggMTY3MGZmYmFiMzU2NmNm
OTFjOWVhNWY5YmNjNDA1MzRhMzRhMzc5YS4uZWUyNTQxMmEwODBhMzBmZjExYTYzNjhiMTM0YjNi
MjkwYTI4ODM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQ29s
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZENvbG9yLmNwcApAQCAt
MzMsNyArMzMsNyBAQCBTVkdBbmltYXRlZENvbG9yQW5pbWF0b3I6OlNWR0FuaW1hdGVkQ29sb3JB
bmltYXRvcihTVkdBbmltYXRpb25FbGVtZW50JiBhbmltYXRpbwogCiBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZENvbG9yQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21T
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlQ29sb3Ioc3RkOjptYWtlX3VuaXF1ZTxDb2xvcj4oQ1NTUGFyc2VyOjpwYXJzZUNv
bG9yKHN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKSkpKTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVDb2xvcihzdGQ6Om1ha2VfdW5pcXVlPENvbG9yPihDU1NQYXJzZXI6OnBhcnNl
Q29sb3Ioc3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpKSkucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBT
VkdBbmltYXRlZENvbG9yQW5pbWF0b3I6OmFkZEFuaW1hdGVkVHlwZXMoU1ZHQW5pbWF0ZWRUeXBl
KiBmcm9tLCBTVkdBbmltYXRlZFR5cGUqIHRvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkRW51bWVyYXRpb24uY3BwCmluZGV4IDgxOWQyNTdlNjQ1OWM2MWZlYWY4MjQ5ODYwMTk0
MTcyZGIyNWIyMmQuLmM5Mzg4MjFkZTEzNWM4ZWRhN2ZkOTJmMzQ0OWE0ODI2MTBhODNkMDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAKQEAgLTEw
OSw3ICsxMDksNyBAQCBTVkdBbmltYXRlZEVudW1lcmF0aW9uQW5pbWF0b3I6OlNWR0FuaW1hdGVk
RW51bWVyYXRpb25BbmltYXRvcihTVkdBbmltYXRpb25FbGVtZQogc3RkOjp1bmlxdWVfcHRyPFNW
R0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9yOjpjb25zdHJ1Y3RG
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIEFTU0VSVChtX2FuaW1hdGlv
bkVsZW1lbnQpOwotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVh
dGVFbnVtZXJhdGlvbihzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkPigpKTsKKyAgICBhdXRvIGFu
aW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlRW51bWVyYXRpb24oc3RkOjptYWtl
X3VuaXF1ZTx1bnNpZ25lZD4oKS5yZWxlYXNlKCkpOwogICAgIGFuaW1hdGVkVHlwZS0+ZW51bWVy
YXRpb24oKSA9IGVudW1lcmF0aW9uVmFsdWVGb3JUYXJnZXRBdHRyaWJ1dGUobV9hbmltYXRpb25F
bGVtZW50LT50YXJnZXRFbGVtZW50KCksIG1fYW5pbWF0aW9uRWxlbWVudC0+YXR0cmlidXRlTmFt
ZSgpLCBzdHJpbmcpOwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwCmluZGV4IGMzZjhjOGU3ODE1ODFjYTA1ZDY4ZTRm
MGJhMzA2OTBkOGEyNDUxMTcuLjczM2ZjMjE0M2I2MGU0NTEwY2ZhMGZlOGU0ZjQ1ZDQwYmFjNzkx
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwCkBAIC0zMyw3
ICszMyw3IEBAIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpTVkdBbmltYXRlZEludGVnZXJB
bmltYXRvcihTVkdBbmltYXRpb25FbGVtZW50KiBhbmltCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZH
QW5pbWF0ZWRUeXBlOjpjcmVhdGVJbnRlZ2VyKHN0ZDo6bWFrZV91bmlxdWU8aW50PigpKTsKKyAg
ICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdlcihzdGQ6
Om1ha2VfdW5pcXVlPGludD4oKS5yZWxlYXNlKCkpOwogICAgIGFuaW1hdGVkVHlwZS0+aW50ZWdl
cigpID0gc3RyaW5nLnRvSW50U3RyaWN0KCk7CiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25h
bEludGVnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlck9wdGlv
bmFsSW50ZWdlci5jcHAKaW5kZXggNWI1NjdlZDJhOTllMWZkODEzMjBjY2JmOTQ5ZDRmZWUzMzg3
MmQ2NC4uYmY0ZDIyYzgyZmI2NGE1ZTlkOTVmNzBhNjhjNDI4NjdhMjI0MDZlZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50
ZWdlci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAgU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRl
Z2VyQW5pbWF0b3I6OlNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW0KIAogc3Rk
Ojp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJ
bnRlZ2VyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcp
CiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVn
ZXJPcHRpb25hbEludGVnZXIoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OnBhaXI8aW50LCBpbnQ+Pigp
KTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdl
ck9wdGlvbmFsSW50ZWdlcihzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6cGFpcjxpbnQsIGludD4+KCku
cmVsZWFzZSgpKTsKICAgICBzdGQ6OnBhaXI8aW50LCBpbnQ+JiBhbmltYXRlZEludGVnZXIgPSBh
bmltYXRlZFR5cGUtPmludGVnZXJPcHRpb25hbEludGVnZXIoKTsKICAgICBmbG9hdCBmaXJzdE51
bWJlciA9IDA7CiAgICAgZmxvYXQgc2Vjb25kTnVtYmVyID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZExlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWRMZW5ndGguY3BwCmluZGV4IGFiNThmMTgzMTQ1MTUzMTVlMzBjNzc5YjcwODA3
Y2MxOGIwYTQyMGUuLjU5MjE4MzEyOGNkYzBmZjNkMTAzMTUwNGRlNTRlODVmYWVlNjRjYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZExlbmd0aC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoLmNwcApAQCAtMzQsNyArMzQsNyBA
QCBTVkdBbmltYXRlZExlbmd0aEFuaW1hdG9yOjpTVkdBbmltYXRlZExlbmd0aEFuaW1hdG9yKFNW
R0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdAogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRU
eXBlPiBTVkdBbmltYXRlZExlbmd0aEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxl
bmd0aChzdGQ6Om1ha2VfdW5pcXVlPFNWR0xlbmd0aFZhbHVlPihtX2xlbmd0aE1vZGUsIHN0cmlu
ZykpOworICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0aChzdGQ6Om1ha2Vf
dW5pcXVlPFNWR0xlbmd0aFZhbHVlPihtX2xlbmd0aE1vZGUsIHN0cmluZykucmVsZWFzZSgpKTsK
IH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRMZW5ndGhB
bmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFBy
b3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZExlbmd0aExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVkTGVuZ3RoTGlzdC5jcHAKaW5kZXggOTVmZmI2YTgxYzA0M2Q0NWQwZWFhZDA5NWM1YTIyMzdl
ZjgwM2VkYy4uMzQ2YzFiNGZiODcwMzkyYjE3YzBmMTY3YjJmOGUwMjc5ZWFhYzRiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAKQEAgLTMzLDE0ICsz
MywxNCBAQCBTVkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRvcjo6U1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0QW5pbWF0b3IoU1ZHQW5pbWF0aW9uRWxlbWVudAogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5p
bWF0ZWRUeXBlPiBTVkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNW
R0FuaW1hdGVkVHlwZTo6Y3JlYXRlTGVuZ3RoTGlzdChzdGQ6Om1ha2VfdW5pcXVlPFNWR0xlbmd0
aExpc3RWYWx1ZXM+KCkpOworICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGVMZW5ndGhMaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHTGVuZ3RoTGlzdFZhbHVlcz4o
KS5yZWxlYXNlKCkpOwogICAgIGFuaW1hdGVkVHlwZS0+bGVuZ3RoTGlzdCgpLnBhcnNlKHN0cmlu
ZywgbV9sZW5ndGhNb2RlKTsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRvcjo6
c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlz
dCYgYW5pbWF0ZWRUeXBlcykKIHsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVM
ZW5ndGhMaXN0KGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0Pihh
bmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTGVuZ3Ro
TGlzdChjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4oYW5pbWF0
ZWRUeXBlcyksIGZhbHNlKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRv
cjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlM
aXN0JiBhbmltYXRlZFR5cGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkTnVtYmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlci5j
cHAKaW5kZXggNGYxZWE5YThkNGUwOTBkZmMwMjFjMTA4ZWNiY2ZkYWM4NzQ4MTRmMy4uNjU4OWU0
OTY4OTZkMTVlZThkYWJiNzRjMWFmMzliOGU1YjVhZWY5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWROdW1iZXIuY3BwCkBAIC0zMiw3ICszMiw3IEBAIFNWR0FuaW1hdGVkTnVtYmVy
QW5pbWF0b3I6OlNWR0FuaW1hdGVkTnVtYmVyQW5pbWF0b3IoU1ZHQW5pbWF0aW9uRWxlbWVudCog
YW5pbWF0CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTnVt
YmVyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7
Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlcihz
dGQ6Om1ha2VfdW5pcXVlPGZsb2F0PigpKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVyKHN0ZDo6bWFrZV91bmlxdWU8ZmxvYXQ+KCkucmVsZWFz
ZSgpKTsKICAgICBmbG9hdCYgYW5pbWF0ZWROdW1iZXIgPSBhbmltYXRlZFR5cGUtPm51bWJlcigp
OwogICAgIGlmICghcGFyc2VOdW1iZXJGcm9tU3RyaW5nKHN0cmluZywgYW5pbWF0ZWROdW1iZXIp
KQogICAgICAgICBhbmltYXRlZE51bWJlciA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZE51bWJlckxpc3QuY3BwCmluZGV4IDg3Zjk3M2ExYmEyZDM0OTJiMWYyZGIwZDA3M2Nj
MzU5ZDY2Y2I1N2QuLjM3ZWMyYjdiMTllNzJhYWNiYzUxN2VjNzBiMTE4ZmI4N2M4ZmFjMDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwCkBAIC0zMiw3
ICszMiw3IEBAIFNWR0FuaW1hdGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpTVkdBbmltYXRlZE51bWJl
ckxpc3RBbmltYXRvcihTVkdBbmltYXRpb25FbGVtZW50CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0g
U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJMaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHTnVt
YmVyTGlzdFZhbHVlcz4oKSk7CisgICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZU51bWJlckxpc3Qoc3RkOjptYWtlX3VuaXF1ZTxTVkdOdW1iZXJMaXN0VmFsdWVz
PigpLnJlbGVhc2UoKSk7CiAgICAgYW5pbWF0ZWRUeXBlLT5udW1iZXJMaXN0KCkucGFyc2Uoc3Ry
aW5nKTsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3BwCmluZGV4IDNjNGNh
ODY0ZDIzMmNkMzhkNzQxYjMzNGU1NDlhODkyYzg4MWQwOGUuLjQwZDM2OTk4OGYxY2RlMWViOWE2
ODY2MzVmYTkwZmFiYzY2N2VmZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAgU1ZH
QW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOjpTVkdBbmltYXRlZE51bWJlck9w
dGlvbmFsTnVtYmVyQW5pbWF0b3IKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
U1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZH
QW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJPcHRpb25hbE51bWJlcihzdGQ6Om1ha2VfdW5pcXVl
PHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PigpKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNW
R0FuaW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RkOjptYWtlX3VuaXF1
ZTxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4oKS5yZWxlYXNlKCkpOwogICAgIHN0ZDo6cGFpcjxm
bG9hdCwgZmxvYXQ+JiBhbmltYXRlZE51bWJlciA9IGFuaW1hdGVkVHlwZS0+bnVtYmVyT3B0aW9u
YWxOdW1iZXIoKTsKICAgICBpZiAoIXBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nLCBh
bmltYXRlZE51bWJlci5maXJzdCwgYW5pbWF0ZWROdW1iZXIuc2Vjb25kKSkgewogICAgICAgICBh
bmltYXRlZE51bWJlci5maXJzdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWRQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBhdGgu
Y3BwCmluZGV4IDI5ZTI0OWJjODFhZDIxNWY2NDZmYzEyOWE0NTcxNjdmZTA5YmI3NjcuLjE3NmEx
YzcwM2ZkZmFlZDhmZGYxYjI5ZWEyNjQ2OGMxMTI1ZTgyYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlZFBhdGguY3BwCkBAIC0zNSw3ICszNSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkUGF0aEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5n
KGNvCiB7CiAgICAgYXV0byBieXRlU3RyZWFtID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdQYXRoQnl0
ZVN0cmVhbT4oKTsKICAgICBidWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJvbVN0cmluZyhzdHJpbmcs
ICpieXRlU3RyZWFtLCBVbmFsdGVyZWRQYXJzaW5nKTsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVQYXRoKFdURk1vdmUoYnl0ZVN0cmVhbSkpOworICAgIHJldHVybiBTVkdBbmlt
YXRlZFR5cGU6OmNyZWF0ZVBhdGgoYnl0ZVN0cmVhbS5yZWxlYXNlKCkpOwogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFBhdGhBbmltYXRvcjo6c3RhcnRB
bmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5p
bWF0ZWRUeXBlcykKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gU1ZHQW5pbWF0ZWRQYXRoQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbigKICAg
ICAvLyBCdWlsZCBpbml0aWFsIHBhdGggYnl0ZSBzdHJlYW0uCiAgICAgYXV0byBieXRlU3RyZWFt
ID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdQYXRoQnl0ZVN0cmVhbT4oKTsKICAgICByZXNldEFuaW1W
YWxUb0Jhc2VWYWwoYW5pbWF0ZWRUeXBlcywgYnl0ZVN0cmVhbS5nZXQoKSk7Ci0gICAgcmV0dXJu
IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUGF0aChXVEZNb3ZlKGJ5dGVTdHJlYW0pKTsKKyAgICBy
ZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQYXRoKGJ5dGVTdHJlYW0ucmVsZWFzZSgpKTsK
IH0KIAogdm9pZCBTVkdBbmltYXRlZFBhdGhBbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24o
Y29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5jcHAKaW5kZXggNWYwNzgwZDUy
YzU0NjJhZDQ5MGM4ZjIxZWZiMjRjYWZiNThiZjE2My4uOGVjNTk3YjNkZWRlYzI3YzgyZjc4M2Y0
MDQ1M2E1MTQyODFkOTdlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVkUG9pbnRMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQb2lu
dExpc3QuY3BwCkBAIC0zNCw3ICszNCw3IEBAIFNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3I6
OlNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3IoU1ZHQW5pbWF0aW9uRWxlbWVudCoKIAogc3Rk
Ojp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRQb2ludExpc3RBbmltYXRv
cjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRv
IGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUG9pbnRMaXN0KHN0ZDo6bWFr
ZV91bmlxdWU8U1ZHUG9pbnRMaXN0VmFsdWVzPigpKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9
IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUG9pbnRMaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHUG9p
bnRMaXN0VmFsdWVzPigpLnJlbGVhc2UoKSk7CiAgICAgcG9pbnRzTGlzdEZyb21TVkdEYXRhKGFu
aW1hdGVkVHlwZS0+cG9pbnRMaXN0KCksIHN0cmluZyk7CiAgICAgcmV0dXJuIGFuaW1hdGVkVHlw
ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFByZXNlcnZl
QXNwZWN0UmF0aW8uY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVB
c3BlY3RSYXRpby5jcHAKaW5kZXggODAxMDI1YjQ1ZmE2MWI3ZWViNTA1OTBiM2FlODU3YTlhOWI2
OWU5MS4uZGRkZGNlZjZmZGNhMDFiYTdmNjhjYzhkNWNkY2Y4NGQ2YTE3Zjk2NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5j
cHAKQEAgLTMxLDcgKzMxLDcgQEAgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0
b3I6OlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1hdG9yKFMKIAogc3RkOjp1bmlx
dWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5p
bWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAg
YXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVByZXNlcnZlQXNwZWN0
UmF0aW8oc3RkOjptYWtlX3VuaXF1ZTxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+KCkpOwor
ICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQcmVzZXJ2ZUFz
cGVjdFJhdGlvKHN0ZDo6bWFrZV91bmlxdWU8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPigp
LnJlbGVhc2UoKSk7CiAgICAgYW5pbWF0ZWRUeXBlLT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkucGFy
c2Uoc3RyaW5nKTsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWRSZWN0LmNwcAppbmRleCBiOTRhYmY1OWM3MDg0OGE2YmFjYjdiODA1Yjk4ZDk1
ZjJiOWVmN2YyLi45MzczMGFhYjgzZDY5YjNhM2U1ZTEwZjM1OGRjN2UxZTZkNzRlZjFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0LmNwcApAQCAtMzIsNyArMzIsNyBAQCBTVkdB
bmltYXRlZFJlY3RBbmltYXRvcjo6U1ZHQW5pbWF0ZWRSZWN0QW5pbWF0b3IoU1ZHQW5pbWF0aW9u
RWxlbWVudCogYW5pbWF0aW9uRQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBT
VkdBbmltYXRlZFJlY3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3Jl
YXRlUmVjdChzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0UmVjdD4oKSk7CisgICAgYXV0byBhbmltYXRl
ZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJlY3Qoc3RkOjptYWtlX3VuaXF1ZTxGbG9h
dFJlY3Q+KCkucmVsZWFzZSgpKTsKICAgICBwYXJzZVJlY3Qoc3RyaW5nLCBhbmltYXRlZFR5cGUt
PnJlY3QoKSk7CiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWRTdHJpbmcuY3BwCmluZGV4IDY5ODVlY2JlZGFkMWVmZWQ4ZDc0MjgxNTVhNzkw
N2ZiYTM3OTBkNzAuLjc1MzBlNGU5NmQ2ZTYzZmFhODViZGJiNGRkYzRjYjhmYjRhMGE2MjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkU3RyaW5nLmNwcApAQCAtMzEsNyArMzEsNyBA
QCBTVkdBbmltYXRlZFN0cmluZ0FuaW1hdG9yOjpTVkdBbmltYXRlZFN0cmluZ0FuaW1hdG9yKFNW
R0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdAogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRU
eXBlPiBTVkdBbmltYXRlZFN0cmluZ0FuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVTdHJpbmcoc3RkOjptYWtlX3VuaXF1ZTxTdHJpbmc+KCkpOworICAgIGF1dG8g
YW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVTdHJpbmcoc3RkOjptYWtlX3Vu
aXF1ZTxTdHJpbmc+KCkucmVsZWFzZSgpKTsKICAgICBhbmltYXRlZFR5cGUtPnN0cmluZygpID0g
c3RyaW5nOwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwCmluZGV4IDIwMzU2ZTBiYjZjNTIzMTM2
N2I2YjZiOTI0YzUxY2ZiNGVmNzI0MjkuLjE3OTIyYWUwODkwMWU0N2RmZWVjODE2MzY1OWRkNjJh
OWNmMzVkYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFRyYW5zZm9y
bUxpc3QuY3BwCkBAIC00MSw3ICs0MSw3IEBAIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1h
dG9yOjpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RBbmltYXRvcihTVkdBbmltYXRpb25FCiAKIHN0
ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdEFu
aW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAg
IGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVUcmFuc2Zvcm1MaXN0
KHN0ZDo6bWFrZV91bmlxdWU8U1ZHVHJhbnNmb3JtTGlzdFZhbHVlcz4oKSk7CisgICAgYXV0byBh
bmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVRyYW5zZm9ybUxpc3Qoc3RkOjpt
YWtlX3VuaXF1ZTxTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzPigpLnJlbGVhc2UoKSk7CiAgICAgYW5p
bWF0ZWRUeXBlLT50cmFuc2Zvcm1MaXN0KCkucGFyc2UobV90cmFuc2Zvcm1UeXBlU3RyaW5nICsg
c3RyaW5nICsgJyknKTsKICAgICBBU1NFUlQoYW5pbWF0ZWRUeXBlLT50cmFuc2Zvcm1MaXN0KCku
c2l6ZSgpIDw9IDEpOwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlZFR5cGUuY3BwCmluZGV4IDk2M2YyMjhhMDdjOWRiNGQyMDA1OTY5NTJjYjIwNGVj
YWRhMmFjNTcuLmE2M2I1ZDI0NTM2MTZhNzM3NTdhMDE5MTU5NmI0NWI5YzUzZDYwZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuY3BwCkBAIC0yNywxMyArMjcsMTYgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHQW5pbWF0ZWRUeXBlOjpTVkdBbmltYXRlZFR5cGUoQW5p
bWF0ZWRQcm9wZXJ0eVR5cGUgdHlwZSkKLSAgICA6IG1fdHlwZSh0eXBlKQorICAgIDogbV9kYXRh
KHR5cGUpCiB7CiB9CiAKIFNWR0FuaW1hdGVkVHlwZTo6flNWR0FuaW1hdGVkVHlwZSgpCiB7Ci0g
ICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBpZiAoIW1fZGF0YS5vd25zVmFsdWUpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBzd2l0Y2ggKG1fZGF0YS50eXBlKSB7CiAgICAgY2FzZSBBbmlt
YXRlZEFuZ2xlOgogICAgICAgICBkZWxldGUgbV9kYXRhLmFuZ2xlQW5kRW51bWVyYXRpb247CiAg
ICAgICAgIGJyZWFrOwpAQCAtOTEsMTQ1ICs5NCwxNDYgQEAgU1ZHQW5pbWF0ZWRUeXBlOjp+U1ZH
QW5pbWF0ZWRUeXBlKCkKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5
cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQW5nbGVBbmRFbnVtZXJhdGlvbihzdGQ6OnVuaXF1
ZV9wdHI8c3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPj4gYW5nbGVBbmRFbnVtZXJh
dGlvbikKK3N0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6
Y3JlYXRlQW5nbGVBbmRFbnVtZXJhdGlvbihzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWdu
ZWQ+KiBhbmdsZUFuZEVudW1lcmF0aW9uKQogewogICAgIEFTU0VSVChhbmdsZUFuZEVudW1lcmF0
aW9uKTsKICAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0
ZWRUeXBlPihBbmltYXRlZEFuZ2xlKTsKLSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5hbmdsZUFu
ZEVudW1lcmF0aW9uID0gYW5nbGVBbmRFbnVtZXJhdGlvbi5yZWxlYXNlKCk7CisgICAgYW5pbWF0
ZWRUeXBlLT5tX2RhdGEuYW5nbGVBbmRFbnVtZXJhdGlvbiA9IGFuZ2xlQW5kRW51bWVyYXRpb247
CiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1h
dGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVCb29sZWFuKHN0ZDo6dW5pcXVlX3B0cjxi
b29sPiBib29sZWFuKQorc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0
ZWRUeXBlOjpjcmVhdGVCb29sZWFuKGJvb2wqIGJvb2xlYW4pCiB7CiAgICAgQVNTRVJUKGJvb2xl
YW4pOwogICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRl
ZFR5cGU+KEFuaW1hdGVkQm9vbGVhbik7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEuYm9vbGVh
biA9IGJvb2xlYW4ucmVsZWFzZSgpOworICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmJvb2xlYW4g
PSBib29sZWFuOwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQ29sb3Ioc3RkOjp1bmlx
dWVfcHRyPENvbG9yPiBjb2xvcikKK3N0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNW
R0FuaW1hdGVkVHlwZTo6Y3JlYXRlQ29sb3IoQ29sb3IqIGNvbG9yKQogewogICAgIEFTU0VSVChj
b2xvcik7CiAgICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1h
dGVkVHlwZT4oQW5pbWF0ZWRDb2xvcik7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEuY29sb3Ig
PSBjb2xvci5yZWxlYXNlKCk7CisgICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEuY29sb3IgPSBjb2xv
cjsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5p
bWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUVudW1lcmF0aW9uKHN0ZDo6dW5pcXVl
X3B0cjx1bnNpZ25lZD4gZW51bWVyYXRpb24pCitzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRU
eXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUVudW1lcmF0aW9uKHVuc2lnbmVkKiBlbnVtZXJh
dGlvbikKIHsKICAgICBBU1NFUlQoZW51bWVyYXRpb24pOwogICAgIGF1dG8gYW5pbWF0ZWRUeXBl
ID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVkRW51bWVyYXRpb24p
OwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmVudW1lcmF0aW9uID0gZW51bWVyYXRpb24ucmVs
ZWFzZSgpOworICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmVudW1lcmF0aW9uID0gZW51bWVyYXRp
b247CiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0Fu
aW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVJbnRlZ2VyKHN0ZDo6dW5pcXVlX3B0
cjxpbnQ+IGludGVnZXIpCitzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmlt
YXRlZFR5cGU6OmNyZWF0ZUludGVnZXIoaW50KiBpbnRlZ2VyKQogewogICAgIEFTU0VSVChpbnRl
Z2VyKTsKICAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0
ZWRUeXBlPihBbmltYXRlZEludGVnZXIpOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmludGVn
ZXIgPSBpbnRlZ2VyLnJlbGVhc2UoKTsKKyAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5pbnRlZ2Vy
ID0gaW50ZWdlcjsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQogCi1zdGQ6OnVuaXF1ZV9w
dHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXJPcHRpb25h
bEludGVnZXIoc3RkOjp1bmlxdWVfcHRyPHN0ZDo6cGFpcjxpbnQsIGludD4+IGludGVnZXJPcHRp
b25hbEludGVnZXIpCitzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRl
ZFR5cGU6OmNyZWF0ZUludGVnZXJPcHRpb25hbEludGVnZXIoc3RkOjpwYWlyPGludCwgaW50Piog
aW50ZWdlck9wdGlvbmFsSW50ZWdlcikKIHsKICAgICBBU1NFUlQoaW50ZWdlck9wdGlvbmFsSW50
ZWdlcik7CiAgICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1h
dGVkVHlwZT4oQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKTsKLSAgICBhbmltYXRlZFR5
cGUtPm1fZGF0YS5pbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyID0gaW50ZWdlck9wdGlvbmFsSW50ZWdl
ci5yZWxlYXNlKCk7CisgICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEuaW50ZWdlck9wdGlvbmFsSW50
ZWdlciA9IGludGVnZXJPcHRpb25hbEludGVnZXI7CiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsK
IH0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpj
cmVhdGVMZW5ndGgoc3RkOjp1bmlxdWVfcHRyPFNWR0xlbmd0aFZhbHVlPiBsZW5ndGgpCitzdGQ6
OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0
aChTVkdMZW5ndGhWYWx1ZSogbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGgpOwogICAgIGF1
dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1h
dGVkTGVuZ3RoKTsKLSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5sZW5ndGggPSBsZW5ndGgucmVs
ZWFzZSgpOworICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmxlbmd0aCA9IGxlbmd0aDsKICAgICBy
ZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0aExpc3Qoc3RkOjp1bmlxdWVfcHRyPFNWR0xl
bmd0aExpc3RWYWx1ZXM+IGxlbmd0aExpc3QpCitzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRU
eXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0aExpc3QoU1ZHTGVuZ3RoTGlzdFZhbHVl
cyogbGVuZ3RoTGlzdCwgYm9vbCBzaG91bGRPd25WYWx1ZSkKIHsKICAgICBBU1NFUlQobGVuZ3Ro
TGlzdCk7CiAgICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1h
dGVkVHlwZT4oQW5pbWF0ZWRMZW5ndGhMaXN0KTsKLSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5s
ZW5ndGhMaXN0ID0gbGVuZ3RoTGlzdC5yZWxlYXNlKCk7CisgICAgYW5pbWF0ZWRUeXBlLT5tX2Rh
dGEubGVuZ3RoTGlzdCA9IGxlbmd0aExpc3Q7CisgICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEub3du
c1ZhbHVlID0gc2hvdWxkT3duVmFsdWU7CiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVO
dW1iZXIoc3RkOjp1bmlxdWVfcHRyPGZsb2F0PiBudW1iZXIpCitzdGQ6OnVuaXF1ZV9wdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlcihmbG9hdCogbnVtYmVy
KQogewogICAgIEFTU0VSVChudW1iZXIpOwogICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjpt
YWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVkTnVtYmVyKTsKLSAgICBhbmltYXRl
ZFR5cGUtPm1fZGF0YS5udW1iZXIgPSBudW1iZXIucmVsZWFzZSgpOworICAgIGFuaW1hdGVkVHlw
ZS0+bV9kYXRhLm51bWJlciA9IG51bWJlcjsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQog
Ci1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0
ZU51bWJlckxpc3Qoc3RkOjp1bmlxdWVfcHRyPFNWR051bWJlckxpc3RWYWx1ZXM+IG51bWJlckxp
c3QpCitzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNy
ZWF0ZU51bWJlckxpc3QoU1ZHTnVtYmVyTGlzdFZhbHVlcyogbnVtYmVyTGlzdCkKIHsKICAgICBB
U1NFUlQobnVtYmVyTGlzdCk7CiAgICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1ha2VfdW5p
cXVlPFNWR0FuaW1hdGVkVHlwZT4oQW5pbWF0ZWROdW1iZXJMaXN0KTsKLSAgICBhbmltYXRlZFR5
cGUtPm1fZGF0YS5udW1iZXJMaXN0ID0gbnVtYmVyTGlzdC5yZWxlYXNlKCk7CisgICAgYW5pbWF0
ZWRUeXBlLT5tX2RhdGEubnVtYmVyTGlzdCA9IG51bWJlckxpc3Q7CiAgICAgcmV0dXJuIGFuaW1h
dGVkVHlwZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0
ZWRUeXBlOjpjcmVhdGVOdW1iZXJPcHRpb25hbE51bWJlcihzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpw
YWlyPGZsb2F0LCBmbG9hdD4+IG51bWJlck9wdGlvbmFsTnVtYmVyKQorc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJPcHRpb25hbE51
bWJlcihzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiogbnVtYmVyT3B0aW9uYWxOdW1iZXIpCiB7CiAg
ICAgQVNTRVJUKG51bWJlck9wdGlvbmFsTnVtYmVyKTsKICAgICBhdXRvIGFuaW1hdGVkVHlwZSA9
IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZE51bWJlck9wdGlvbmFs
TnVtYmVyKTsKLSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5udW1iZXJPcHRpb25hbE51bWJlciA9
IG51bWJlck9wdGlvbmFsTnVtYmVyLnJlbGVhc2UoKTsKKyAgICBhbmltYXRlZFR5cGUtPm1fZGF0
YS5udW1iZXJPcHRpb25hbE51bWJlciA9IG51bWJlck9wdGlvbmFsTnVtYmVyOwogICAgIHJldHVy
biBhbmltYXRlZFR5cGU7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNW
R0FuaW1hdGVkVHlwZTo6Y3JlYXRlUGF0aChzdGQ6OnVuaXF1ZV9wdHI8U1ZHUGF0aEJ5dGVTdHJl
YW0+IHBhdGgpCitzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZVBhdGgoU1ZHUGF0aEJ5dGVTdHJlYW0qIHBhdGgpCiB7CiAgICAgQVNTRVJUKHBh
dGgpOwogICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRl
ZFR5cGU+KEFuaW1hdGVkUGF0aCk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEucGF0aCA9IHBh
dGgucmVsZWFzZSgpOworICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLnBhdGggPSBwYXRoOwogICAg
IHJldHVybiBhbmltYXRlZFR5cGU7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5
cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUG9pbnRMaXN0KHN0ZDo6dW5pcXVlX3B0cjxTVkdQ
b2ludExpc3RWYWx1ZXM+IHBvaW50TGlzdCkKK3N0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5
cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUG9pbnRMaXN0KFNWR1BvaW50TGlzdFZhbHVlcyog
cG9pbnRMaXN0KQogewogICAgIEFTU0VSVChwb2ludExpc3QpOwogICAgIGF1dG8gYW5pbWF0ZWRU
eXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVkUG9pbnRzKTsK
LSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5wb2ludExpc3QgPSBwb2ludExpc3QucmVsZWFzZSgp
OworICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLnBvaW50TGlzdCA9IHBvaW50TGlzdDsKICAgICBy
ZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVByZXNlcnZlQXNwZWN0UmF0aW8oc3RkOjp1bmlxdWVf
cHRyPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gcHJlc2VydmVBc3BlY3RSYXRpbykKK3N0
ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUHJl
c2VydmVBc3BlY3RSYXRpbyhTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUqIHByZXNlcnZlQXNw
ZWN0UmF0aW8pCiB7CiAgICAgQVNTRVJUKHByZXNlcnZlQXNwZWN0UmF0aW8pOwogICAgIGF1dG8g
YW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVk
UHJlc2VydmVBc3BlY3RSYXRpbyk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEucHJlc2VydmVB
c3BlY3RSYXRpbyA9IHByZXNlcnZlQXNwZWN0UmF0aW8ucmVsZWFzZSgpOworICAgIGFuaW1hdGVk
VHlwZS0+bV9kYXRhLnByZXNlcnZlQXNwZWN0UmF0aW8gPSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOwog
ICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRl
ZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUmVjdChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRS
ZWN0PiByZWN0KQorc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVSZWN0KEZsb2F0UmVjdCogcmVjdCkKIHsKICAgICBBU1NFUlQocmVjdCk7CiAg
ICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkVHlwZT4o
QW5pbWF0ZWRSZWN0KTsKLSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5yZWN0ID0gcmVjdC5yZWxl
YXNlKCk7CisgICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEucmVjdCA9IHJlY3Q7CiAgICAgcmV0dXJu
IGFuaW1hdGVkVHlwZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZH
QW5pbWF0ZWRUeXBlOjpjcmVhdGVTdHJpbmcoc3RkOjp1bmlxdWVfcHRyPFN0cmluZz4gc3RyaW5n
KQorc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVh
dGVTdHJpbmcoU3RyaW5nKiBzdHJpbmcpCiB7CiAgICAgQVNTRVJUKHN0cmluZyk7CiAgICAgYXV0
byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkVHlwZT4oQW5pbWF0
ZWRTdHJpbmcpOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLnN0cmluZyA9IHN0cmluZy5yZWxl
YXNlKCk7CisgICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEuc3RyaW5nID0gc3RyaW5nOwogICAgIHJl
dHVybiBhbmltYXRlZFR5cGU7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+
IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlVHJhbnNmb3JtTGlzdChzdGQ6OnVuaXF1ZV9wdHI8U1ZH
VHJhbnNmb3JtTGlzdFZhbHVlcz4gdHJhbnNmb3JtTGlzdCkKK3N0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlVHJhbnNmb3JtTGlzdChTVkdUcmFu
c2Zvcm1MaXN0VmFsdWVzKiB0cmFuc2Zvcm1MaXN0KQogewogICAgIEFTU0VSVCh0cmFuc2Zvcm1M
aXN0KTsKICAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0
ZWRUeXBlPihBbmltYXRlZFRyYW5zZm9ybUxpc3QpOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRh
LnRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm1MaXN0LnJlbGVhc2UoKTsKKyAgICBhbmltYXRlZFR5
cGUtPm1fZGF0YS50cmFuc2Zvcm1MaXN0ID0gdHJhbnNmb3JtTGlzdDsKICAgICByZXR1cm4gYW5p
bWF0ZWRUeXBlOwogfQogCiBTdHJpbmcgU1ZHQW5pbWF0ZWRUeXBlOjp2YWx1ZUFzU3RyaW5nKCkK
IHsKLSAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIHN3aXRjaCAobV9kYXRhLnR5cGUpIHsKICAg
ICBjYXNlIEFuaW1hdGVkQ29sb3I6CiAgICAgICAgIEFTU0VSVChtX2RhdGEuY29sb3IpOwogICAg
ICAgICByZXR1cm4gbV9kYXRhLmNvbG9yLT5zZXJpYWxpemVkKCk7CkBAIC0yNzMsNyArMjc3LDcg
QEAgU3RyaW5nIFNWR0FuaW1hdGVkVHlwZTo6dmFsdWVBc1N0cmluZygpCiAKIGJvb2wgU1ZHQW5p
bWF0ZWRUeXBlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgc3dp
dGNoIChtX2RhdGEudHlwZSkgewogICAgIGNhc2UgQW5pbWF0ZWRDb2xvcjoKICAgICAgICAgQVNT
RVJUKG1fZGF0YS5jb2xvcik7CiAgICAgICAgICptX2RhdGEuY29sb3IgPSBDU1NQYXJzZXI6OnBh
cnNlQ29sb3IodmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVkVHlwZS5oCmluZGV4IGEwYzExYWQxZTRjMmE0ZDRlMzFjN2U0NmNlMjhmNjI4YWE5OTIyNzQu
LmU3OTVlZGM3ZDczN2MyMjU5NTgwMGE0ZTZkZjJjOGFjMmY2YTI2ZTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRUeXBlLmgKQEAgLTQwLDIzMCArNDAsMjMwIEBAIHB1YmxpYzoKICAgICBT
VkdBbmltYXRlZFR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVR5cGUpOwogICAgIHZpcnR1YWwgflNWR0Fu
aW1hdGVkVHlwZSgpOwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5
cGU+IGNyZWF0ZUFuZ2xlQW5kRW51bWVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPHN0ZDo6cGFpcjxT
VkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNW
R0FuaW1hdGVkVHlwZT4gY3JlYXRlQm9vbGVhbihzdGQ6OnVuaXF1ZV9wdHI8Ym9vbD4pOwotICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVDb2xvcihzdGQ6
OnVuaXF1ZV9wdHI8Q29sb3I+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1h
dGVkVHlwZT4gY3JlYXRlRW51bWVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVkPik7Ci0g
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZUludGVnZXIo
c3RkOjp1bmlxdWVfcHRyPGludD4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5p
bWF0ZWRUeXBlPiBjcmVhdGVJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKHN0ZDo6dW5pcXVlX3B0cjxz
dGQ6OnBhaXI8aW50LCBpbnQ+Pik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmlt
YXRlZFR5cGU+IGNyZWF0ZUxlbmd0aChzdGQ6OnVuaXF1ZV9wdHI8U1ZHTGVuZ3RoVmFsdWU+KTsK
LSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlTGVuZ3Ro
TGlzdChzdGQ6OnVuaXF1ZV9wdHI8U1ZHTGVuZ3RoTGlzdFZhbHVlcz4pOwotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVOdW1iZXIoc3RkOjp1bmlxdWVf
cHRyPGZsb2F0Pik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+
IGNyZWF0ZU51bWJlckxpc3Qoc3RkOjp1bmlxdWVfcHRyPFNWR051bWJlckxpc3RWYWx1ZXM+KTsK
LSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlTnVtYmVy
T3B0aW9uYWxOdW1iZXIoc3RkOjp1bmlxdWVfcHRyPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+Pik7
Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVBhdGgo
c3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFtPik7Ci0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVBvaW50TGlzdChzdGQ6OnVuaXF1ZV9wdHI8
U1ZHUG9pbnRMaXN0VmFsdWVzPik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmlt
YXRlZFR5cGU+IGNyZWF0ZVByZXNlcnZlQXNwZWN0UmF0aW8oc3RkOjp1bmlxdWVfcHRyPFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBjcmVhdGVSZWN0KHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFJlY3Q+KTsKLSAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlU3RyaW5nKHN0
ZDo6dW5pcXVlX3B0cjxTdHJpbmc+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0Fu
aW1hdGVkVHlwZT4gY3JlYXRlVHJhbnNmb3JtTGlzdChzdGQ6OnVuaXF1ZV9wdHI8U1ZHVHJhbnNm
b3JtTGlzdFZhbHVlcz4pOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRU
eXBlPiBjcmVhdGVBbmdsZUFuZEVudW1lcmF0aW9uKHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlLCB1
bnNpZ25lZD4qKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
Y3JlYXRlQm9vbGVhbihib29sKik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmlt
YXRlZFR5cGU+IGNyZWF0ZUNvbG9yKENvbG9yKik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZUVudW1lcmF0aW9uKHVuc2lnbmVkKik7CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZUludGVnZXIoaW50Kik7
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZUludGVn
ZXJPcHRpb25hbEludGVnZXIoc3RkOjpwYWlyPGludCwgaW50PiopOworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVMZW5ndGgoU1ZHTGVuZ3RoVmFsdWUq
KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlTGVu
Z3RoTGlzdChTVkdMZW5ndGhMaXN0VmFsdWVzKiwgYm9vbCBzaG91bGRPd25WYWx1ZSA9IHRydWUp
OworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVOdW1i
ZXIoZmxvYXQqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
Y3JlYXRlTnVtYmVyTGlzdChTVkdOdW1iZXJMaXN0VmFsdWVzKik7CisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0
ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+IGNyZWF0ZVBhdGgoU1ZHUGF0aEJ5dGVTdHJlYW0qKTsKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlUG9pbnRMaXN0KFNWR1BvaW50
TGlzdFZhbHVlcyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBjcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSop
OworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVSZWN0
KEZsb2F0UmVjdCopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBjcmVhdGVTdHJpbmcoU3RyaW5nKik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+IGNyZWF0ZVRyYW5zZm9ybUxpc3QoU1ZHVHJhbnNmb3JtTGlzdFZhbHVlcyop
OwogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQW5pbVZhbChBbmltYXRlZFByb3BlcnR5VHlwZSk7
CiAKLSAgICBBbmltYXRlZFByb3BlcnR5VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CisgICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS50eXBlOyB9CiAKICAgICAvLyBOb24tbXV0YWJsZSBhY2Nlc3NvcnMuCiAgICAgY29uc3Qgc3Rk
OjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPiYgYW5nbGVBbmRFbnVtZXJhdGlvbigpIGNv
bnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkQW5nbGUpOworICAg
ICAgICBBU1NFUlQobV9kYXRhLnR5cGUgPT0gQW5pbWF0ZWRBbmdsZSk7CiAgICAgICAgIHJldHVy
biAqbV9kYXRhLmFuZ2xlQW5kRW51bWVyYXRpb247CiAgICAgfQogCiAgICAgY29uc3QgYm9vbCYg
Ym9vbGVhbigpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVk
Qm9vbGVhbik7CisgICAgICAgIEFTU0VSVChtX2RhdGEudHlwZSA9PSBBbmltYXRlZEJvb2xlYW4p
OwogICAgICAgICByZXR1cm4gKm1fZGF0YS5ib29sZWFuOwogICAgIH0KIAogICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1h
dGVkQ29sb3IpOworICAgICAgICBBU1NFUlQobV9kYXRhLnR5cGUgPT0gQW5pbWF0ZWRDb2xvcik7
CiAgICAgICAgIHJldHVybiAqbV9kYXRhLmNvbG9yOwogICAgIH0KIAogICAgIGNvbnN0IHVuc2ln
bmVkJiBlbnVtZXJhdGlvbigpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09
IEFuaW1hdGVkRW51bWVyYXRpb24pOworICAgICAgICBBU1NFUlQobV9kYXRhLnR5cGUgPT0gQW5p
bWF0ZWRFbnVtZXJhdGlvbik7CiAgICAgICAgIHJldHVybiAqbV9kYXRhLmVudW1lcmF0aW9uOwog
ICAgIH0KIAogICAgIGNvbnN0IGludCYgaW50ZWdlcigpIGNvbnN0CiAgICAgewotICAgICAgICBB
U1NFUlQobV90eXBlID09IEFuaW1hdGVkSW50ZWdlcik7CisgICAgICAgIEFTU0VSVChtX2RhdGEu
dHlwZSA9PSBBbmltYXRlZEludGVnZXIpOwogICAgICAgICByZXR1cm4gKm1fZGF0YS5pbnRlZ2Vy
OwogICAgIH0KIAogICAgIGNvbnN0IHN0ZDo6cGFpcjxpbnQsIGludD4mIGludGVnZXJPcHRpb25h
bEludGVnZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRl
ZEludGVnZXJPcHRpb25hbEludGVnZXIpOworICAgICAgICBBU1NFUlQobV9kYXRhLnR5cGUgPT0g
QW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKTsKICAgICAgICAgcmV0dXJuICptX2RhdGEu
aW50ZWdlck9wdGlvbmFsSW50ZWdlcjsKICAgICB9CiAKICAgICBjb25zdCBTVkdMZW5ndGhWYWx1
ZSYgbGVuZ3RoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0
ZWRMZW5ndGgpOworICAgICAgICBBU1NFUlQobV9kYXRhLnR5cGUgPT0gQW5pbWF0ZWRMZW5ndGgp
OwogICAgICAgICByZXR1cm4gKm1fZGF0YS5sZW5ndGg7CiAgICAgfQogCiAgICAgY29uc3QgU1ZH
TGVuZ3RoTGlzdFZhbHVlcyYgbGVuZ3RoTGlzdCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NF
UlQobV90eXBlID09IEFuaW1hdGVkTGVuZ3RoTGlzdCk7CisgICAgICAgIEFTU0VSVChtX2RhdGEu
dHlwZSA9PSBBbmltYXRlZExlbmd0aExpc3QpOwogICAgICAgICByZXR1cm4gKm1fZGF0YS5sZW5n
dGhMaXN0OwogICAgIH0KIAogICAgIGNvbnN0IGZsb2F0JiBudW1iZXIoKSBjb25zdAogICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZE51bWJlcik7CisgICAgICAgIEFTU0VS
VChtX2RhdGEudHlwZSA9PSBBbmltYXRlZE51bWJlcik7CiAgICAgICAgIHJldHVybiAqbV9kYXRh
Lm51bWJlcjsKICAgICB9CiAKICAgICBjb25zdCBTVkdOdW1iZXJMaXN0VmFsdWVzJiBudW1iZXJM
aXN0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWROdW1i
ZXJMaXN0KTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YS50eXBlID09IEFuaW1hdGVkTnVtYmVyTGlz
dCk7CiAgICAgICAgIHJldHVybiAqbV9kYXRhLm51bWJlckxpc3Q7CiAgICAgfQogCiAgICAgY29u
c3Qgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4mIG51bWJlck9wdGlvbmFsTnVtYmVyKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51
bWJlcik7CisgICAgICAgIEFTU0VSVChtX2RhdGEudHlwZSA9PSBBbmltYXRlZE51bWJlck9wdGlv
bmFsTnVtYmVyKTsKICAgICAgICAgcmV0dXJuICptX2RhdGEubnVtYmVyT3B0aW9uYWxOdW1iZXI7
CiAgICAgfQogCiAgICAgY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0qIHBhdGgoKSBjb25zdAogICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFBhdGgpOworICAgICAgICBBU1NF
UlQobV9kYXRhLnR5cGUgPT0gQW5pbWF0ZWRQYXRoKTsKICAgICAgICAgcmV0dXJuIG1fZGF0YS5w
YXRoOwogICAgIH0KIAogICAgIGNvbnN0IFNWR1BvaW50TGlzdFZhbHVlcyYgcG9pbnRMaXN0KCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRQb2ludHMpOwor
ICAgICAgICBBU1NFUlQobV9kYXRhLnR5cGUgPT0gQW5pbWF0ZWRQb2ludHMpOwogICAgICAgICBy
ZXR1cm4gKm1fZGF0YS5wb2ludExpc3Q7CiAgICAgfQogCiAgICAgY29uc3QgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKKyAgICAg
ICAgQVNTRVJUKG1fZGF0YS50eXBlID09IEFuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbyk7CiAg
ICAgICAgIHJldHVybiAqbV9kYXRhLnByZXNlcnZlQXNwZWN0UmF0aW87CiAgICAgfQogCiAgICAg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5
cGUgPT0gQW5pbWF0ZWRSZWN0KTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YS50eXBlID09IEFuaW1h
dGVkUmVjdCk7CiAgICAgICAgIHJldHVybiAqbV9kYXRhLnJlY3Q7CiAgICAgfQogCiAgICAgY29u
c3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9
PSBBbmltYXRlZFN0cmluZyk7CisgICAgICAgIEFTU0VSVChtX2RhdGEudHlwZSA9PSBBbmltYXRl
ZFN0cmluZyk7CiAgICAgICAgIHJldHVybiAqbV9kYXRhLnN0cmluZzsKICAgICB9CiAKICAgICBj
b25zdCBTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzJiB0cmFuc2Zvcm1MaXN0KCkgY29uc3QKICAgICB7
Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0KTsKKyAgICAg
ICAgQVNTRVJUKG1fZGF0YS50eXBlID09IEFuaW1hdGVkVHJhbnNmb3JtTGlzdCk7CiAgICAgICAg
IHJldHVybiAqbV9kYXRhLnRyYW5zZm9ybUxpc3Q7CiAgICAgfQogCiAgICAgLy8gTXV0YWJsZSBh
Y2Nlc3NvcnMuCiAgICAgc3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPiYgYW5nbGVB
bmRFbnVtZXJhdGlvbigpCiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVk
QW5nbGUpOworICAgICAgICBBU1NFUlQobV9kYXRhLnR5cGUgPT0gQW5pbWF0ZWRBbmdsZSk7CiAg
ICAgICAgIHJldHVybiAqbV9kYXRhLmFuZ2xlQW5kRW51bWVyYXRpb247CiAgICAgfQogCiAgICAg
Ym9vbCYgYm9vbGVhbigpCiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVk
Qm9vbGVhbik7CisgICAgICAgIEFTU0VSVChtX2RhdGEudHlwZSA9PSBBbmltYXRlZEJvb2xlYW4p
OwogICAgICAgICByZXR1cm4gKm1fZGF0YS5ib29sZWFuOwogICAgIH0KIAogICAgIENvbG9yJiBj
b2xvcigpCiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkQ29sb3IpOwor
ICAgICAgICBBU1NFUlQobV9kYXRhLnR5cGUgPT0gQW5pbWF0ZWRDb2xvcik7CiAgICAgICAgIHJl
dHVybiAqbV9kYXRhLmNvbG9yOwogICAgIH0KIAogICAgIHVuc2lnbmVkJiBlbnVtZXJhdGlvbigp
CiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkRW51bWVyYXRpb24pOwor
ICAgICAgICBBU1NFUlQobV9kYXRhLnR5cGUgPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbik7CiAgICAg
ICAgIHJldHVybiAqbV9kYXRhLmVudW1lcmF0aW9uOwogICAgIH0KIAogICAgIGludCYgaW50ZWdl
cigpCiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkSW50ZWdlcik7Cisg
ICAgICAgIEFTU0VSVChtX2RhdGEudHlwZSA9PSBBbmltYXRlZEludGVnZXIpOwogICAgICAgICBy
ZXR1cm4gKm1fZGF0YS5pbnRlZ2VyOwogICAgIH0KIAogICAgIHN0ZDo6cGFpcjxpbnQsIGludD4m
IGludGVnZXJPcHRpb25hbEludGVnZXIoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9
PSBBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIpOworICAgICAgICBBU1NFUlQobV9kYXRh
LnR5cGUgPT0gQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKTsKICAgICAgICAgcmV0dXJu
ICptX2RhdGEuaW50ZWdlck9wdGlvbmFsSW50ZWdlcjsKICAgICB9CiAKICAgICBTVkdMZW5ndGhW
YWx1ZSYgbGVuZ3RoKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRM
ZW5ndGgpOworICAgICAgICBBU1NFUlQobV9kYXRhLnR5cGUgPT0gQW5pbWF0ZWRMZW5ndGgpOwog
ICAgICAgICByZXR1cm4gKm1fZGF0YS5sZW5ndGg7CiAgICAgfQogCiAgICAgU1ZHTGVuZ3RoTGlz
dFZhbHVlcyYgbGVuZ3RoTGlzdCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFu
aW1hdGVkTGVuZ3RoTGlzdCk7CisgICAgICAgIEFTU0VSVChtX2RhdGEudHlwZSA9PSBBbmltYXRl
ZExlbmd0aExpc3QpOwogICAgICAgICByZXR1cm4gKm1fZGF0YS5sZW5ndGhMaXN0OwogICAgIH0K
IAogICAgIGZsb2F0JiBudW1iZXIoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBB
bmltYXRlZE51bWJlcik7CisgICAgICAgIEFTU0VSVChtX2RhdGEudHlwZSA9PSBBbmltYXRlZE51
bWJlcik7CiAgICAgICAgIHJldHVybiAqbV9kYXRhLm51bWJlcjsKICAgICB9CiAKICAgICBTVkdO
dW1iZXJMaXN0VmFsdWVzJiBudW1iZXJMaXN0KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5
cGUgPT0gQW5pbWF0ZWROdW1iZXJMaXN0KTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YS50eXBlID09
IEFuaW1hdGVkTnVtYmVyTGlzdCk7CiAgICAgICAgIHJldHVybiAqbV9kYXRhLm51bWJlckxpc3Q7
CiAgICAgfQogCiAgICAgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4mIG51bWJlck9wdGlvbmFsTnVt
YmVyKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWROdW1iZXJPcHRp
b25hbE51bWJlcik7CisgICAgICAgIEFTU0VSVChtX2RhdGEudHlwZSA9PSBBbmltYXRlZE51bWJl
ck9wdGlvbmFsTnVtYmVyKTsKICAgICAgICAgcmV0dXJuICptX2RhdGEubnVtYmVyT3B0aW9uYWxO
dW1iZXI7CiAgICAgfQogCiAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0qIHBhdGgoKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFBhdGgpOworICAgICAgICBBU1NFUlQobV9k
YXRhLnR5cGUgPT0gQW5pbWF0ZWRQYXRoKTsKICAgICAgICAgcmV0dXJuIG1fZGF0YS5wYXRoOwog
ICAgIH0KIAogICAgIFNWR1BvaW50TGlzdFZhbHVlcyYgcG9pbnRMaXN0KCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRQb2ludHMpOworICAgICAgICBBU1NFUlQobV9k
YXRhLnR5cGUgPT0gQW5pbWF0ZWRQb2ludHMpOwogICAgICAgICByZXR1cm4gKm1fZGF0YS5wb2lu
dExpc3Q7CiAgICAgfQogCiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YS50eXBlID09IEFuaW1h
dGVkUHJlc2VydmVBc3BlY3RSYXRpbyk7CiAgICAgICAgIHJldHVybiAqbV9kYXRhLnByZXNlcnZl
QXNwZWN0UmF0aW87CiAgICAgfQogCiAgICAgRmxvYXRSZWN0JiByZWN0KCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRSZWN0KTsKKyAgICAgICAgQVNTRVJUKG1fZGF0
YS50eXBlID09IEFuaW1hdGVkUmVjdCk7CiAgICAgICAgIHJldHVybiAqbV9kYXRhLnJlY3Q7CiAg
ICAgfQogCiAgICAgU3RyaW5nJiBzdHJpbmcoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBBbmltYXRlZFN0cmluZyk7CisgICAgICAgIEFTU0VSVChtX2RhdGEudHlwZSA9PSBBbmlt
YXRlZFN0cmluZyk7CiAgICAgICAgIHJldHVybiAqbV9kYXRhLnN0cmluZzsKICAgICB9CiAKICAg
ICBTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzJiB0cmFuc2Zvcm1MaXN0KCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0KTsKKyAgICAgICAgQVNTRVJU
KG1fZGF0YS50eXBlID09IEFuaW1hdGVkVHJhbnNmb3JtTGlzdCk7CiAgICAgICAgIHJldHVybiAq
bV9kYXRhLnRyYW5zZm9ybUxpc3Q7CiAgICAgfQogCkBAIC0yNzEsMzEgKzI3MSwzNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKLSAgICBBbmltYXRlZFByb3BlcnR5VHlwZSBtX3R5cGU7
Ci0KLSAgICB1bmlvbiBEYXRhVW5pb24gewotICAgICAgICBEYXRhVW5pb24oKQotICAgICAgICAg
ICAgOiBsZW5ndGgobnVsbHB0cikKKyAgICBzdHJ1Y3QgRGF0YSB7CisgICAgICAgIERhdGEoQW5p
bWF0ZWRQcm9wZXJ0eVR5cGUgdHlwZSkKKyAgICAgICAgICAgIDogdHlwZSh0eXBlKQorICAgICAg
ICAgICAgLCBsZW5ndGgobnVsbHB0cikKKyAgICAgICAgICAgICwgb3duc1ZhbHVlKGZhbHNlKQog
ICAgICAgICB7CiAgICAgICAgIH0KLQotICAgICAgICBzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwg
dW5zaWduZWQ+KiBhbmdsZUFuZEVudW1lcmF0aW9uOwotICAgICAgICBib29sKiBib29sZWFuOwot
ICAgICAgICBDb2xvciogY29sb3I7Ci0gICAgICAgIHVuc2lnbmVkKiBlbnVtZXJhdGlvbjsKLSAg
ICAgICAgaW50KiBpbnRlZ2VyOwotICAgICAgICBzdGQ6OnBhaXI8aW50LCBpbnQ+KiBpbnRlZ2Vy
T3B0aW9uYWxJbnRlZ2VyOwotICAgICAgICBTVkdMZW5ndGhWYWx1ZSogbGVuZ3RoOwotICAgICAg
ICBTVkdMZW5ndGhMaXN0VmFsdWVzKiBsZW5ndGhMaXN0OwotICAgICAgICBmbG9hdCogbnVtYmVy
OwotICAgICAgICBTVkdOdW1iZXJMaXN0VmFsdWVzKiBudW1iZXJMaXN0OwotICAgICAgICBzdGQ6
OnBhaXI8ZmxvYXQsIGZsb2F0PiogbnVtYmVyT3B0aW9uYWxOdW1iZXI7Ci0gICAgICAgIFNWR1Bh
dGhCeXRlU3RyZWFtKiBwYXRoOwotICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUq
IHByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgICAgIFNWR1BvaW50TGlzdFZhbHVlcyogcG9pbnRM
aXN0OwotICAgICAgICBGbG9hdFJlY3QqIHJlY3Q7Ci0gICAgICAgIFN0cmluZyogc3RyaW5nOwot
ICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzKiB0cmFuc2Zvcm1MaXN0OworICAgICAgICAK
KyAgICAgICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgdHlwZTsKKworICAgICAgICB1bmlvbiB7Cisg
ICAgICAgICAgICBzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+KiBhbmdsZUFuZEVu
dW1lcmF0aW9uOworICAgICAgICAgICAgYm9vbCogYm9vbGVhbjsKKyAgICAgICAgICAgIENvbG9y
KiBjb2xvcjsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBlbnVtZXJhdGlvbjsKKyAgICAgICAgICAg
IGludCogaW50ZWdlcjsKKyAgICAgICAgICAgIHN0ZDo6cGFpcjxpbnQsIGludD4qIGludGVnZXJP
cHRpb25hbEludGVnZXI7CisgICAgICAgICAgICBTVkdMZW5ndGhWYWx1ZSogbGVuZ3RoOworICAg
ICAgICAgICAgU1ZHTGVuZ3RoTGlzdFZhbHVlcyogbGVuZ3RoTGlzdDsKKyAgICAgICAgICAgIGZs
b2F0KiBudW1iZXI7CisgICAgICAgICAgICBTVkdOdW1iZXJMaXN0VmFsdWVzKiBudW1iZXJMaXN0
OworICAgICAgICAgICAgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4qIG51bWJlck9wdGlvbmFsTnVt
YmVyOworICAgICAgICAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0qIHBhdGg7CisgICAgICAgICAgICBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUqIHByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgICAg
ICAgICBTVkdQb2ludExpc3RWYWx1ZXMqIHBvaW50TGlzdDsKKyAgICAgICAgICAgIEZsb2F0UmVj
dCogcmVjdDsKKyAgICAgICAgICAgIFN0cmluZyogc3RyaW5nOworICAgICAgICAgICAgU1ZHVHJh
bnNmb3JtTGlzdFZhbHVlcyogdHJhbnNmb3JtTGlzdDsKKyAgICAgICAgfTsKKworICAgICAgICBi
b29sIG93bnNWYWx1ZTsKICAgICB9IG1fZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGVBbmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmgKaW5kZXggY2I3MzUyNjMyYWE1ZTA1NzRkZmNhMjI1
YzU1Mjc4NmE3M2E5Yjc4NS4uM2RhYTI1YzA4ZTY5ZTg1M2YwYmJiYzc1ZDkyN2U4NmRkNGZkZjYw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmgKQEAg
LTYzLDE0ICs2MywxNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBIZWxwZXJzIGZvciBhbmltYXRv
cnMgdGhhdCBvcGVyYXRlIG9uIHNpbmdsZSB0eXBlcywgZWcuIGp1c3Qgb25lIFNWR0FuaW1hdGVk
SW50ZWdlci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBbmltVmFsVHlwZT4KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8dHlwZW5hbWUgQW5pbVZhbFR5cGU6OkNvbnRlbnRUeXBlPiBjb25zdHJ1Y3RGcm9t
QmFzZVZhbHVlKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRU
eXBlcykKKyAgICB0eXBlbmFtZSBBbmltVmFsVHlwZTo6Q29udGVudFR5cGUqIGNvbnN0cnVjdEZy
b21CYXNlVmFsdWUoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRl
ZFR5cGVzKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFuaW1hdGVkVHlwZXNbMF0ucHJvcGVydGll
cy5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGNvbnN0IHR5cGVuYW1lIEFuaW1WYWxUeXBlOjpDb250
ZW50VHlwZSYgYW5pbWF0ZWRUeXBlID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5cGU8
QW5pbVZhbFR5cGU+KGFuaW1hdGVkVHlwZXNbMF0ucHJvcGVydGllc1swXS5nZXQoKSktPmN1cnJl
bnRCYXNlVmFsdWUoKTsKLQotICAgICAgICBhdXRvIGNvcHkgPSBzdGQ6Om1ha2VfdW5pcXVlPHR5
cGVuYW1lIEFuaW1WYWxUeXBlOjpDb250ZW50VHlwZT4oYW5pbWF0ZWRUeXBlKTsKLSAgICAgICAg
ZXhlY3V0ZUFjdGlvbjxBbmltVmFsVHlwZT4oU3RhcnRBbmltYXRpb25BY3Rpb24sIGFuaW1hdGVk
VHlwZXMsIDAsIGNvcHkuZ2V0KCkpOwotICAgICAgICByZXR1cm4gY29weTsKKyAgICAgICAgY29u
c3QgQW5pbVZhbFR5cGUqIHByb3BlcnR5ID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5
cGU8QW5pbVZhbFR5cGU+KGFuaW1hdGVkVHlwZXNbMF0ucHJvcGVydGllc1swXS5nZXQoKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAocHJvcGVydHktPmlzQW5pbWF0aW5nKCkpCisgICAgICAgICAg
ICByZXR1cm4gJnByb3BlcnR5LT5jdXJyZW50QW5pbWF0ZWRWYWx1ZSgpOworICAgICAgICAKKyAg
ICAgICAgYXV0byBjb3B5ID0gc3RkOjptYWtlX3VuaXF1ZTx0eXBlbmFtZSBBbmltVmFsVHlwZTo6
Q29udGVudFR5cGU+KHByb3BlcnR5LT5jdXJyZW50QmFzZVZhbHVlKCkpOworICAgICAgICBleGVj
dXRlQWN0aW9uPEFuaW1WYWxUeXBlPihTdGFydEFuaW1hdGlvbkFjdGlvbiwgYW5pbWF0ZWRUeXBl
cywgMCwgY29weS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBjb3B5LnJlbGVhc2UoKTsK
ICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBbmltVmFsVHlwZT4KQEAgLTEwNyw3ICsx
MTAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBIZWxwZXJzIGZvciBhbmltYXRvcnMgdGhhdCBv
cGVyYXRlIG9uIHBhaXIgdHlwZXMsIGVnLiBhIHBhaXIgb2YgU1ZHQW5pbWF0ZWRJbnRlZ2Vycy4K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBbmltVmFsVHlwZTEsIHR5cGVuYW1lIEFuaW1WYWxUeXBl
Mj4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpwYWlyPHR5cGVuYW1lIEFuaW1WYWxUeXBlMTo6
Q29udGVudFR5cGUsIHR5cGVuYW1lIEFuaW1WYWxUeXBlMjo6Q29udGVudFR5cGU+PiBjb25zdHJ1
Y3RGcm9tQmFzZVZhbHVlcyhjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFu
aW1hdGVkVHlwZXMpCisgICAgc3RkOjpwYWlyPHR5cGVuYW1lIEFuaW1WYWxUeXBlMTo6Q29udGVu
dFR5cGUsIHR5cGVuYW1lIEFuaW1WYWxUeXBlMjo6Q29udGVudFR5cGU+KiBjb25zdHJ1Y3RGcm9t
QmFzZVZhbHVlcyhjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVk
VHlwZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoYW5pbWF0ZWRUeXBlc1swXS5wcm9wZXJ0aWVz
LnNpemUoKSA9PSAyKTsKICAgICAgICAgY29uc3QgdHlwZW5hbWUgQW5pbVZhbFR5cGUxOjpDb250
ZW50VHlwZSYgZmlyc3RUeXBlID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5cGU8QW5p
bVZhbFR5cGUxPihhbmltYXRlZFR5cGVzWzBdLnByb3BlcnRpZXNbMF0uZ2V0KCkpLT5jdXJyZW50
QmFzZVZhbHVlKCk7CkBAIC0xMTYsNyArMTE5LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBhdXRv
IGNvcHkgPSBzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6cGFpcjx0eXBlbmFtZSBBbmltVmFsVHlwZTE6
OkNvbnRlbnRUeXBlLCB0eXBlbmFtZSBBbmltVmFsVHlwZTI6OkNvbnRlbnRUeXBlPj4oZmlyc3RU
eXBlLCBzZWNvbmRUeXBlKTsKICAgICAgICAgZXhlY3V0ZUFjdGlvbjxBbmltVmFsVHlwZTE+KFN0
YXJ0QW5pbWF0aW9uQWN0aW9uLCBhbmltYXRlZFR5cGVzLCAwLCAmY29weS0+Zmlyc3QpOwogICAg
ICAgICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBlMj4oU3RhcnRBbmltYXRpb25BY3Rpb24sIGFu
aW1hdGVkVHlwZXMsIDEsICZjb3B5LT5zZWNvbmQpOwotICAgICAgICByZXR1cm4gY29weTsKKyAg
ICAgICAgcmV0dXJuIGNvcHkucmVsZWFzZSgpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEFuaW1WYWxUeXBlMSwgdHlwZW5hbWUgQW5pbVZhbFR5cGUyPgpAQCAtMTgzLDcgKzE4Niw3
IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFuaW1WYWxUeXBl
PgotICAgIHZvaWQgZXhlY3V0ZUFjdGlvbihBbmltYXRpb25BY3Rpb24gYWN0aW9uLCBjb25zdCBT
VkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMsIHVuc2lnbmVkIHdo
aWNoUHJvcGVydHksIHR5cGVuYW1lIEFuaW1WYWxUeXBlOjpDb250ZW50VHlwZSogdHlwZSA9IDAp
CisgICAgdm9pZCBleGVjdXRlQWN0aW9uKEFuaW1hdGlvbkFjdGlvbiBhY3Rpb24sIGNvbnN0IFNW
R0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcywgdW5zaWduZWQgd2hp
Y2hQcm9wZXJ0eSwgdHlwZW5hbWUgQW5pbVZhbFR5cGU6OkNvbnRlbnRUeXBlKiB0eXBlID0gMCwg
Ym9vbCBzaG91bGRQcm9wZXJ0eU93blR5cGUgPSBmYWxzZSkKICAgICB7CiAgICAgICAgIC8vIEZJ
WE1FOiBDYW4ndCB1c2UgU1ZHRWxlbWVudDo6SW5zdGFuY2VVcGRhdGVCbG9ja2VyIGJlY2F1c2Ug
b2YgY2lyY3VsYXIgaGVhZGVyIGRlcGVuZGVuY3kuIFdvdWxkIGJlIG5pY2UgdG8gdW50YW5nbGUg
dGhpcy4KICAgICAgICAgc2V0SW5zdGFuY2VVcGRhdGVzQmxvY2tlZCgqYW5pbWF0ZWRUeXBlc1sw
XS5lbGVtZW50LCB0cnVlKTsKQEAgLTE5Niw3ICsxOTksNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgY2FzZSBTdGFydEFuaW1hdGlvbkFjdGlvbjoKICAgICAgICAgICAgICAgICBBU1NFUlQodHlw
ZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eS0+aXNBbmltYXRpbmcoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHktPmFuaW1hdGlvblN0YXJ0ZWQodHlwZSk7CisgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5LT5hbmltYXRpb25TdGFydGVkKHR5cGUsIHNob3VsZFByb3Bl
cnR5T3duVHlwZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFN0
b3BBbmltYXRpb25BY3Rpb246CiAgICAgICAgICAgICAgICAgQVNTRVJUKCF0eXBlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkTGlzdFByb3Bl
cnR5VGVhck9mZi5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRM
aXN0UHJvcGVydHlUZWFyT2ZmLmgKaW5kZXggMGNlOTkzNzkzMWQ3NjE5ODA0ZjFmMzQ3NTljYjkw
MTdkMDU5MWUwZC4uZjM0OTQxNzAzMzAxYTc4MTNlYTBkNGUyMzIxODk3MjAzMjdkOGI5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRMaXN0UHJv
cGVydHlUZWFyT2ZmLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmgKQEAgLTkyLDcgKzkyLDcgQEAgcHVibGljOgogICAg
ICAgICBMaXN0UHJvcGVydHk6OmRldGFjaExpc3RXcmFwcGVyc0FuZFJlc2l6ZSgmbV93cmFwcGVy
cywgbmV3TGlzdFNpemUpOwogICAgIH0KIAotICAgIFByb3BlcnR5VHlwZSYgY3VycmVudEFuaW1h
dGVkVmFsdWUoKQorICAgIFByb3BlcnR5VHlwZSYgY3VycmVudEFuaW1hdGVkVmFsdWUoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQW5pbWF0aW5nKCkpOwogICAgICAgICByZXR1cm4g
bV9hbmltYXRlZFByb3BlcnR5LT52YWx1ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZi5oCmluZGV4IGZj
NjJjOWRhNGZhMGQ1YTk1NDM3MDg0NTFjNTdiYjRjM2E2YTQ4MjQuLmJiOGE3MTk5ZTBmNTg5NTZj
ZGViMWI0MWM2ZjA2NzI2NzcyMmE3ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmYuaApAQCAtNjgsNyAr
NjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2FuaW1WYWwgPSBudWxscHRyOwogICAgIH0K
IAotICAgIFByb3BlcnR5VHlwZSYgY3VycmVudEFuaW1hdGVkVmFsdWUoKQorICAgIFByb3BlcnR5
VHlwZSYgY3VycmVudEFuaW1hdGVkVmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzQW5pbWF0aW5nKCkpOwogICAgICAgICByZXR1cm4gbV9hbmltYXRlZFByb3BlcnR5LT5wcm9w
ZXJ0eVJlZmVyZW5jZSgpOwpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX3Byb3BlcnR5OwogICAgIH0KIAotICAgIHZvaWQgYW5pbWF0aW9uU3RhcnRlZChQcm9wZXJ0
eVR5cGUqIG5ld0FuaW1WYWwpCisgICAgdm9pZCBhbmltYXRpb25TdGFydGVkKFByb3BlcnR5VHlw
ZSogbmV3QW5pbVZhbCwgYm9vbCA9IGZhbHNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc0Fu
aW1hdGluZygpKTsKICAgICAgICAgQVNTRVJUKG5ld0FuaW1WYWwpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJP
ZmYuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkU3RhdGljUHJv
cGVydHlUZWFyT2ZmLmgKaW5kZXggYzViMmZkOTA2NDY2MzA0NmZlMTNjZjBkMzUwNDNjODkyYTc4
MjBjYy4uYzUyZWM0ZDg5Nzg2ZTI5MTUyYzk4ZTVhOGQ3MzZiNjlkNzFkMTljMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0
eVRlYXJPZmYuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFN0YXRpY1Byb3BlcnR5VGVhck9mZi5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8
UHJvcGVydHlUeXBlPihjb250ZXh0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUsIHByb3BlcnR5KSk7CiAgICAgfQogCi0gICAgUHJvcGVydHlUeXBlJiBjdXJyZW50
QW5pbWF0ZWRWYWx1ZSgpCisgICAgUHJvcGVydHlUeXBlJiBjdXJyZW50QW5pbWF0ZWRWYWx1ZSgp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNBbmltYXRpbmcoKSk7CiAgICAgICAgIHJl
dHVybiAqbV9hbmltYXRlZFByb3BlcnR5OwpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX3Byb3BlcnR5OwogICAgIH0KIAotICAgIHZvaWQgYW5pbWF0aW9uU3RhcnRl
ZChQcm9wZXJ0eVR5cGUqIG5ld0FuaW1WYWwpCisgICAgdm9pZCBhbmltYXRpb25TdGFydGVkKFBy
b3BlcnR5VHlwZSogbmV3QW5pbVZhbCwgYm9vbCA9IGZhbHNlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKCFpc0FuaW1hdGluZygpKTsKICAgICAgICAgQVNTRVJUKG5ld0FuaW1WYWwpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHTWF0cml4VGVhck9mZi5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHTWF0cml4VGVhck9mZi5oCmluZGV4IDAx
ODgwMzFjZTM4YWMxZWY0MmQ3Zjg2MTVkNzRmYzhmZmY4OGIxMWYuLjY4MTIyYTQ5OWFkZDBlMTI0
NzJhMWUxODllZTllMGNhYzlhYzI4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR01hdHJpeFRlYXJPZmYuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdNYXRyaXhUZWFyT2ZmLmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogCiAg
ICAgU1ZHTWF0cml4VmFsdWUmIHByb3BlcnR5UmVmZXJlbmNlKCkgZmluYWwgeyByZXR1cm4gbV9w
YXJlbnQtPnByb3BlcnR5UmVmZXJlbmNlKCkuc3ZnTWF0cml4KCk7IH0KIAotICAgIHZvaWQgc2V0
VmFsdWUoU1ZHTWF0cml4VmFsdWUmIHZhbHVlKSBmaW5hbCB7IG1fcGFyZW50LT5wcm9wZXJ0eVJl
ZmVyZW5jZSgpLnNldE1hdHJpeCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFZhbHVlKFNWR01hdHJp
eFZhbHVlJiB2YWx1ZSwgYm9vbCA9IGZhbHNlKSBmaW5hbCB7IG1fcGFyZW50LT5wcm9wZXJ0eVJl
ZmVyZW5jZSgpLnNldE1hdHJpeCh2YWx1ZSk7IH0KIAogICAgIHZvaWQgY29tbWl0Q2hhbmdlKCkg
ZmluYWwKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdQcm9wZXJ0eVRlYXJPZmYuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1By
b3BlcnR5VGVhck9mZi5oCmluZGV4IDQ2ZjY5MzU2OGRlZWViMWFmM2Q2NWVjYmMwMGIyNGQxODBk
NWE5ODIuLmExYmMyZDA4NzhkOWMyMTBmNjk0NzMxZmQ1NTVjNmI4Y2FlMWQ4NGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VGVhck9mZi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VGVhck9mZi5oCkBA
IC02OCwxMyArNjgsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUHJvcGVydHlUeXBlJiBwcm9w
ZXJ0eVJlZmVyZW5jZSgpIHsgcmV0dXJuICptX3ZhbHVlOyB9CiAgICAgU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eSogYW5pbWF0ZWRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0ZWRQcm9wZXJ0
eS5nZXQoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKFByb3BlcnR5VHlwZSYgdmFs
dWUpCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKFByb3BlcnR5VHlwZSYgdmFsdWUsIGJvb2wg
b3duc1ZhbHVlID0gZmFsc2UpCiAgICAgewotICAgICAgICBpZiAobV92YWx1ZUlzQ29weSkgewor
ICAgICAgICBpZiAobV9vd25zVmFsdWUpIHsKICAgICAgICAgICAgIGRldGFjaENoaWxkcmVuKCk7
CiAgICAgICAgICAgICBkZWxldGUgbV92YWx1ZTsKICAgICAgICAgfQotICAgICAgICBtX3ZhbHVl
SXNDb3B5ID0gZmFsc2U7CisgICAgICAgIG1fb3duc1ZhbHVlID0gb3duc1ZhbHVlOwogICAgICAg
ICBtX3ZhbHVlID0gJnZhbHVlOwogICAgIH0KIApAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAK
ICAgICBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0CiAgICAgewotICAgICAgICBp
ZiAoIW1fYW5pbWF0ZWRQcm9wZXJ0eSB8fCBtX3ZhbHVlSXNDb3B5KQorICAgICAgICBpZiAoIW1f
YW5pbWF0ZWRQcm9wZXJ0eSB8fCBtX293bnNWYWx1ZSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICByZXR1cm4gbV9hbmltYXRlZFByb3BlcnR5LT5jb250ZXh0RWxlbWVudCgp
OwogICAgIH0KQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkZXRhY2hXcmFw
cGVyKCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmIChtX3ZhbHVlSXNDb3B5KQorICAgICAg
ICBpZiAobV9vd25zVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgZGV0YWNo
Q2hpbGRyZW4oKTsKQEAgLTExMCwxMyArMTEwLDEzIEBAIHB1YmxpYzoKICAgICAgICAgLy8gdy9v
IGNoYW5naW5nIHRoZSAibmV3IGl0ZW0iICh3aXRoIHg9MTAwKSBpbiB0aGUgdGV4dCBlbGVtZW50
LgogICAgICAgICAvLyBXaGVuZXZlciB0aGUgWE1MIERPTSBtb2RpZmllcyB0aGUgIngiIGF0dHJp
YnV0ZSwgYWxsIGV4aXN0aW5nIHdyYXBwZXJzIGFyZSBkZXRhY2hlZCwgdXNpbmcgdGhpcyBmdW5j
dGlvbi4KICAgICAgICAgbV92YWx1ZSA9IG5ldyBQcm9wZXJ0eVR5cGUoKm1fdmFsdWUpOwotICAg
ICAgICBtX3ZhbHVlSXNDb3B5ID0gdHJ1ZTsKKyAgICAgICAgbV9vd25zVmFsdWUgPSB0cnVlOwog
ICAgICAgICBtX2FuaW1hdGVkUHJvcGVydHkgPSBudWxscHRyOwogICAgIH0KIAogICAgIHZvaWQg
Y29tbWl0Q2hhbmdlKCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmICghbV9hbmltYXRlZFBy
b3BlcnR5IHx8IG1fdmFsdWVJc0NvcHkpCisgICAgICAgIGlmICghbV9hbmltYXRlZFByb3BlcnR5
IHx8IG1fb3duc1ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2FuaW1hdGVk
UHJvcGVydHktPmNvbW1pdENoYW5nZSgpOwogICAgIH0KQEAgLTEzNSw3ICsxMzUsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIDogbV9hbmltYXRlZFByb3BlcnR5KGFuaW1hdGVkUHJvcGVydHkpCiAg
ICAgICAgICwgbV9yb2xlKHJvbGUpCiAgICAgICAgICwgbV92YWx1ZSgmdmFsdWUpCi0gICAgICAg
ICwgbV92YWx1ZUlzQ29weShmYWxzZSkKKyAgICAgICAgLCBtX293bnNWYWx1ZShmYWxzZSkKICAg
ICB7CiAgICAgfQogCkBAIC0xNDgsMTMgKzE0OCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIDog
bV9hbmltYXRlZFByb3BlcnR5KG51bGxwdHIpCiAgICAgICAgICwgbV9yb2xlKFVuZGVmaW5lZFJv
bGUpCiAgICAgICAgICwgbV92YWx1ZShpbml0aWFsVmFsdWUgPyBuZXcgUHJvcGVydHlUeXBlKCpp
bml0aWFsVmFsdWUpIDogbnVsbHB0cikKLSAgICAgICAgLCBtX3ZhbHVlSXNDb3B5KHRydWUpCisg
ICAgICAgICwgbV9vd25zVmFsdWUodHJ1ZSkKICAgICB7CiAgICAgfQogCiAgICAgdmlydHVhbCB+
U1ZHUHJvcGVydHlUZWFyT2ZmKCkKICAgICB7Ci0gICAgICAgIGlmIChtX3ZhbHVlSXNDb3B5KSB7
CisgICAgICAgIGlmIChtX293bnNWYWx1ZSkgewogICAgICAgICAgICAgZGV0YWNoQ2hpbGRyZW4o
KTsKICAgICAgICAgICAgIGRlbGV0ZSBtX3ZhbHVlOwogICAgICAgICB9CkBAIC0xNzYsNyArMTc2
LDcgQEAgcHJvdGVjdGVkOgogICAgIFNWR1Byb3BlcnR5Um9sZSBtX3JvbGU7CiAgICAgUHJvcGVy
dHlUeXBlKiBtX3ZhbHVlOwogICAgIFZlY3RvcjxXZWFrUHRyPFNWR1Byb3BlcnR5VGVhck9mZkJh
c2U+PiBtX2NoaWxkVGVhck9mZnM7Ci0gICAgYm9vbCBtX3ZhbHVlSXNDb3B5IDogMTsKKyAgICBi
b29sIG1fb3duc1ZhbHVlIDogMTsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300078</attachid>
            <date>2017-01-29 17:31:42 -0800</date>
            <delta_ts>2017-01-29 19:59:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150388-20170129172934.patch</filename>
            <type>text/plain</type>
            <size>90682</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExMDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2MyOTdkNGY4N2MzNzM1
MDVlOTA5MTRiZjc3MWRkNDdjYWU0ZWRkYi4uMzNlNzUzZDFlYTY3NGRjNWJjODcyMmMxNTBmMmQy
OGYwZDY1YjQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NCBAQAorMjAxNy0wMS0yOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNWRyBB
bmltYXRpb24gKFNNSUwpIG9uIFhNTCBhbmltYXRpbmcgcHJvcGVydGllcyBkb2Vzbid0IHdvcmsg
b24gc2Vjb25kIHJ1bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlIHByb2JsZW0gaGFwcGVucyB3aGVuIGFuaW1hdGluZyBhbiBYTUxBbmltYXRpb24g
YXR0cmlidXRlIHdpdGggbXVsdGlwbGUKKyAgICAgICAgU1ZHQW5pbWF0aW9uRWxlbWVudHMuIFRo
ZSBhbmltYXRpb25TdGFydGVkKCkgb2YgdGhlIFRlYXJPZmYgb2JqZWN0IHdpbGwgYmUKKyAgICAg
ICAgY2FsbGVkIG9ubHkgb25jZSB3aXRoIHRoZSB2YWx1ZSBzdG9yZWQgYnkgdGhlIG1fYW5pbWF0
ZWRUeXBlIG9mIHRoZSBmaXJzdAorICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50LiBUaGlzIG1l
YW5zIG5vIG1hdHRlciBob3cgbWFueSBTVkdBbmltYXRpb25FbGVtZW50cyBhcmUKKyAgICAgICAg
YWN0aW5nIG9uIHRoZSBzYW1lIGF0dHJpYnV0ZSwgY2hhbmdpbmcgb25seSBvbmUgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6bV9hbmltYXRlZFByb3BlcnR5CisgICAgICAgIHRocm91Z2ggU1ZHQW5pbWF0
aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uKCkgY2FuIGFmZmVjdCB0aGUgbGF5b3V0IG9mCisg
ICAgICAgIHRoZSBTVkdFbGVtZW50LiBUaGlzIGRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIHByb2Nl
c3NpbmcgdGhlIFNWR0FuaW1hdGlvbkVsZW1lbnRzCisgICAgICAgIGJ5IFNNSUxUaW1lQ29udGFp
bmVyOjp1cGRhdGVBbmltYXRpb25zKCkuIFRoZSBmaXJzdCBTVkdBbmltYXRpb25FbGVtZW50Cisg
ICAgICAgIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgcmVzdWx0RWxlbWVudCBpbiBTTUlMVGltZUNv
bnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucygpLgorICAgICAgICBTbyBpZiB0aGUgZmlyc3QgU1ZH
QW5pbWF0aW9uRWxlbWVudCBoYXBwZW5zIHRvIGJlIHRoZSBmaXJzdCBvbmUgdGhhdCBwb2ludHMK
KyAgICAgICAgb2YgdGhlIHNhbWUgQW5pbWF0ZWRUeXBlIHdoaWNoIHRoZSBTVkdFbGVtZW50IHBy
b3BlcnR5IFRlYXJPZmYgb2JqZWN0IHBvaW50cworICAgICAgICB0bywgdGhlbiB0aGUgYXR0cmli
dXRlIHdpbGwgYmUgYW5pbWF0ZWQuIE90aGVyd2lzZSBub3RoaW5nIHdpbGwgaGFwcGVuLgorCisg
ICAgICAgIFRoZSBmaXggc2hvdWxkIGJlIHRoZSBmb2xsb3dpbmcuIFRoZSBtX2FuaW1hdGVkUHJv
cGVydHkgb2YgYWxsIHRoZSBTVkdBbmltYXRpb25FbGVtZW50cworICAgICAgICBzaG91bGQgcG9p
bnQgdG8gdGhlIHNhbWUgU1ZHQW5pbWF0ZWRUeXBlIG9iamVjdCB3aGljaCBpcyBhbHNvIHBvaW50
ZWQgdG8gYnkKKyAgICAgICAgdGhlIFRlYXJPZmYgb2JqZWN0IG9mIHRoZSBhdHRyaWJ1dGUgb2Yg
dGhlIFNWR0VsZW1lbnQuIFRoaXMgY2FuIGJlIGRvbmUgaWYKKyAgICAgICAgU1ZHQW5pbWF0ZWRU
eXBlQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21CYXNlVmFsdWUoKSBjcmVhdGVzIGEgbmV3IEFuaW1h
dGVkVHlwZQorICAgICAgICBmcm9tIGN1cnJlbnRCYXNlVmFsdWUoKSBvbmx5IGlmIHRoZSBUZWFy
T2ZmIG9iamVjdCBpcyBub3QgYW5pbWF0aW5nLiBPdGhlcndpc2UKKyAgICAgICAgaXQgcmV1c2Vz
IHRoZSBjdXJyZW50QmFzZVZhbHVlKCkuCisKKyAgICAgICAgVGVzdHM6IHN2Zy9hbmltYXRpb25z
L3NtaWwtbXVsdGlwbGUtYW5pbWF0ZS1saXN0LnN2ZworCisgICAgICAgICogc3ZnL1NWR0FuaW1h
dGVkQW5nbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRBbmdsZUFuaW1hdG9y
Ojpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkQW5n
bGVBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6YWRkQW5pbWF0ZWRUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgor
ICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1h
dGlvbik6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAg
ICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlZEVudW1lcmF0aW9uQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9yOjpzdGFydEFu
aW1WYWxBbmltYXRpb24pOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmNvbnN0cnVjdEZy
b21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6
OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbik6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkSW50ZWdl
ck9wdGlvbmFsSW50ZWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZEludGVn
ZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6c3Rh
cnRBbmltVmFsQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkSW50ZWdl
ck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjphZGRBbmltYXRlZFR5cGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpjYWxjdWxh
dGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRMZW5ndGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMZW5ndGhBbmltYXRvcjo6Y29uc3RydWN0RnJv
bVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExlbmd0aEFuaW1hdG9yOjpz
dGFydEFuaW1WYWxBbmltYXRpb24pOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZExlbmd0aExp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0QW5pbWF0b3I6
OmNvbnN0cnVjdEZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMZW5n
dGhMaXN0QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbik6CisgICAgICAgICogc3ZnL1NW
R0FuaW1hdGVkTnVtYmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTnVtYmVy
QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZWROdW1iZXJBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKToKKyAgICAgICAgKiBz
dmcvU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRp
b24pOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXJBbmltYXRv
cjo6Y29uc3RydWN0RnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZE51
bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OmFk
ZEFuaW1hdGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWROdW1iZXJPcHRp
b25hbE51bWJlckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKiBz
dmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUGF0
aEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkUGF0aEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24pOgorICAgICAgICAqIHN2
Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
ZFBvaW50TGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbik6
CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6Y29u
c3RydWN0RnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByZXNlcnZl
QXNwZWN0UmF0aW9BbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKToKKyAgICAgICAgKiBz
dmcvU1ZHQW5pbWF0ZWRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUmVj
dEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkUmVjdEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24pOgorICAgICAgICAqIHN2
Zy9TVkdBbmltYXRlZFN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFN0
cmluZ0FuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkU3RyaW5nQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbik6CisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZFRyYW5zZm9ybUxpc3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RBbmltYXRvcjo6c3RhcnRB
bmltVmFsQW5pbWF0aW9uKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6flNWR0FuaW1hdGVkVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnN1cHBvcnRzQW5pbVZhbCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZWRUeXBlOjp2YWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkVHlwZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
ZFR5cGU6OlNWR0FuaW1hdGVkVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlZFR5cGU6OmNyZWF0ZUFuZ2xlQW5kRW51bWVyYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVCb29sZWFuKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVFbnVtZXJhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVJbnRl
Z2VyT3B0aW9uYWxJbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlTGVuZ3RoTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlckxpc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJPcHRpb25hbE51bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVBhdGgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQb2lu
dExpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVh
dGVQcmVzZXJ2ZUFzcGVjdFJhdGlvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlZFR5cGU6OmNyZWF0ZVN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZFR5cGU6OmNyZWF0ZVRyYW5zZm9ybUxpc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHN2Zy9TVkdBbmltYXRlZFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6YW5nbGVBbmRF
bnVtZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmJvb2xlYW4p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmVudW1lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVkVHlwZTo6aW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
ZFR5cGU6OmludGVnZXJPcHRpb25hbEludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZWRUeXBlOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjps
ZW5ndGhMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6bnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6bnVtYmVyTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6Om51bWJlck9wdGlvbmFsTnVtYmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZFR5cGU6OnBvaW50TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
ZFR5cGU6OnByZXNlcnZlQXNwZWN0UmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWRUeXBlOjpyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6c3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6dHJhbnNmb3JtTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OlNWR0FuaW1hdGVkVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVkVHlwZTo6dHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0FuaW1h
dGVkVHlwZUFuaW1hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGVBbmlt
YXRvcjo6Y29uc3RydWN0RnJvbUJhc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlZFR5cGVBbmltYXRvcjo6Y29uc3RydWN0RnJvbUJhc2VWYWx1ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I6OnJlc2V0RnJvbUJhc2VWYWx1ZXMpOgorICAg
ICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOjpjdXJyZW50
QW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eVRlYXJPZmYuaDoKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFN0YXRp
Y1Byb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRTdGF0aWNQ
cm9wZXJ0eVRlYXJPZmY6OmN1cnJlbnRBbmltYXRlZFZhbHVlKToKKwogMjAxNy0wMS0yNCAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBhbHdh
eXMgdHJ1ZSBzZWxlY3Rpb25JbmNsdWRlc0FsdEltYWdlVGV4dCBzZXR0aW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRBbmdsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZWRBbmdsZS5jcHAKaW5kZXggYzU3MzI1NWVjMDFkNDNlMzQyMGM0NjFj
NjIxMzExMDZmM2Q1MjMwMS4uNzkyZWIzOTZhODAyMWI4NmQ5MjQ5YzQzNDBmOGM2ZGY3ZjgwZWJj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQW5nbGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcApAQCAtMzIsMjIgKzMy
LDIyIEBAIFNWR0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6U1ZHQW5pbWF0ZWRBbmdsZUFuaW1hdG9y
KFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlvCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmlt
YXRlZFR5cGU+IFNWR0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlQW5nbGVBbmRFbnVtZXJhdGlvbihzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6
cGFpcjxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4+KCkpOworICAgIGF1dG8gYW5pbWF0ZWRUeXBl
ID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmdsZVZhbHVl
PigpLCBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkPigpKTsKICAgICBhdXRvJiBhbmltYXRlZFBh
aXIgPSBhbmltYXRlZFR5cGUtPmFuZ2xlQW5kRW51bWVyYXRpb24oKTsKIAogICAgIFNWR0FuZ2xl
VmFsdWUgYW5nbGU7CiAgICAgU1ZHTWFya2VyT3JpZW50VHlwZSBvcmllbnRUeXBlID0gU1ZHUHJv
cGVydHlUcmFpdHM8U1ZHTWFya2VyT3JpZW50VHlwZT46OmZyb21TdHJpbmcoc3RyaW5nLCBhbmds
ZSk7CiAgICAgaWYgKG9yaWVudFR5cGUgPiAwKQotICAgICAgICBhbmltYXRlZFBhaXIuc2Vjb25k
ID0gb3JpZW50VHlwZTsKKyAgICAgICAgKmFuaW1hdGVkUGFpci5zZWNvbmQgPSBvcmllbnRUeXBl
OwogICAgIGlmIChvcmllbnRUeXBlID09IFNWR01hcmtlck9yaWVudEFuZ2xlKQotICAgICAgICBh
bmltYXRlZFBhaXIuZmlyc3QgPSBhbmdsZTsKKyAgICAgICAgKmFuaW1hdGVkUGFpci5maXJzdCA9
IGFuZ2xlOwogCiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRBbmdsZUFuaW1hdG9yOjpzdGFydEFuaW1WYWxB
bmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5
cGVzKQogewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUFuZ2xlQW5kRW51bWVy
YXRpb24oY29uc3RydWN0RnJvbUJhc2VWYWx1ZXM8U1ZHQW5pbWF0ZWRBbmdsZSwgU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbj4oYW5pbWF0ZWRUeXBlcykpOworICAgIHJldHVybiBjb25zdHJ1Y3RGcm9t
QmFzZVZhbHVlczxTVkdBbmltYXRlZEFuZ2xlLCBTVkdBbmltYXRlZEVudW1lcmF0aW9uPihhbmlt
YXRlZFR5cGVzKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3I6OnN0b3BBbmlt
VmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0
ZWRUeXBlcykKQEAgLTc4LDExICs3OCwxMSBAQCB2b2lkIFNWR0FuaW1hdGVkQW5nbGVBbmltYXRv
cjo6YWRkQW5pbWF0ZWRUeXBlcyhTVkdBbmltYXRlZFR5cGUqIGZyb20sIFNWR0FuaW1hdAogICAg
IGNvbnN0IGF1dG8mIGZyb21BbmdsZUFuZEVudW1lcmF0aW9uID0gZnJvbS0+YW5nbGVBbmRFbnVt
ZXJhdGlvbigpOwogICAgIGF1dG8mIHRvQW5nbGVBbmRFbnVtZXJhdGlvbiA9IHRvLT5hbmdsZUFu
ZEVudW1lcmF0aW9uKCk7CiAgICAgLy8gT25seSByZXNwZWN0IGJ5IGFuaW1hdGlvbnMsIGlmIGZy
b20gYW5kIGJ5IGFyZSBib3RoIHNwZWNpZmllZCBpbiBhbmdsZXMgKGFuZCBub3QgZWcuICdhdXRv
JykuCi0gICAgaWYgKGZyb21BbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCAhPSB0b0FuZ2xlQW5k
RW51bWVyYXRpb24uc2Vjb25kIHx8IGZyb21BbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCAhPSBT
VkdNYXJrZXJPcmllbnRBbmdsZSkKKyAgICBpZiAoKmZyb21BbmdsZUFuZEVudW1lcmF0aW9uLnNl
Y29uZCAhPSAqdG9BbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCB8fCAqZnJvbUFuZ2xlQW5kRW51
bWVyYXRpb24uc2Vjb25kICE9IFNWR01hcmtlck9yaWVudEFuZ2xlKQogICAgICAgICByZXR1cm47
Ci0gICAgY29uc3QgYXV0byYgZnJvbUFuZ2xlID0gZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uZmly
c3Q7Ci0gICAgYXV0byYgdG9BbmdsZSA9IHRvQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdDsKLSAg
ICB0b0FuZ2xlLnNldFZhbHVlKHRvQW5nbGUudmFsdWUoKSArIGZyb21BbmdsZS52YWx1ZSgpKTsK
KyAgICBjb25zdCBhdXRvKiBmcm9tQW5nbGUgPSBmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJz
dDsKKyAgICBhdXRvKiB0b0FuZ2xlID0gdG9BbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0OworICAg
IHRvQW5nbGUtPnNldFZhbHVlKHRvQW5nbGUtPnZhbHVlKCkgKyBmcm9tQW5nbGUtPnZhbHVlKCkp
OwogfQogCiB2b2lkIFNWR0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRW
YWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHQW5pbWF0ZWRU
eXBlKiBmcm9tLCBTVkdBbmltYXRlZFR5cGUqIHRvLCBTVkdBbmltYXRlZFR5cGUqIHRvQXRFbmRP
ZkR1cmF0aW9uLCBTVkdBbmltYXRlZFR5cGUqIGFuaW1hdGVkKQpAQCAtOTUsNDMgKzk1LDQzIEBA
IHZvaWQgU1ZHQW5pbWF0ZWRBbmdsZUFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZs
b2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkCiAgICAgYXV0byYgdG9BdEVuZE9mRHVyYXRpb25Bbmds
ZUFuZEVudW1lcmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24tPmFuZ2xlQW5kRW51bWVyYXRpb24o
KTsKICAgICBhdXRvJiBhbmltYXRlZEFuZ2xlQW5kRW51bWVyYXRpb24gPSBhbmltYXRlZC0+YW5n
bGVBbmRFbnVtZXJhdGlvbigpOwogCi0gICAgaWYgKGZyb21BbmdsZUFuZEVudW1lcmF0aW9uLnNl
Y29uZCAhPSB0b0FuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kKSB7CisgICAgaWYgKCpmcm9tQW5n
bGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgIT0gKnRvQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQp
IHsKICAgICAgICAgLy8gRGlzY3JldGUgYW5pbWF0aW9uIC0gbm8gbGluZWFyIGludGVycG9sYXRp
b24gcG9zc2libGUgYmV0d2VlbiB2YWx1ZXMgKGUuZy4gYXV0byB0byBhbmdsZSkuCiAgICAgICAg
IGlmIChwZXJjZW50YWdlIDwgMC41ZikgewotICAgICAgICAgICAgYW5pbWF0ZWRBbmdsZUFuZEVu
dW1lcmF0aW9uLnNlY29uZCA9IGZyb21BbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZDsKLSAgICAg
ICAgICAgIGlmIChmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPT0gU1ZHTWFya2VyT3Jp
ZW50QW5nbGUpCi0gICAgICAgICAgICAgICAgYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLmZp
cnN0ID0gZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3Q7CisgICAgICAgICAgICAqYW5pbWF0
ZWRBbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9ICpmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5z
ZWNvbmQ7CisgICAgICAgICAgICBpZiAoKmZyb21BbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9
PSBTVkdNYXJrZXJPcmllbnRBbmdsZSkKKyAgICAgICAgICAgICAgICAqYW5pbWF0ZWRBbmdsZUFu
ZEVudW1lcmF0aW9uLmZpcnN0ID0gKmZyb21BbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0OwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlv
bi5maXJzdC5zZXRWYWx1ZSgwKTsKKyAgICAgICAgICAgICAgICBhbmltYXRlZEFuZ2xlQW5kRW51
bWVyYXRpb24uZmlyc3QtPnNldFZhbHVlKDApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPSB0b0FuZ2xl
QW5kRW51bWVyYXRpb24uc2Vjb25kOwotICAgICAgICBpZiAodG9BbmdsZUFuZEVudW1lcmF0aW9u
LnNlY29uZCA9PSBTVkdNYXJrZXJPcmllbnRBbmdsZSkKLSAgICAgICAgICAgIGFuaW1hdGVkQW5n
bGVBbmRFbnVtZXJhdGlvbi5maXJzdCA9IHRvQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdDsKKyAg
ICAgICAgKmFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPSAqdG9BbmdsZUFuZEVu
dW1lcmF0aW9uLnNlY29uZDsKKyAgICAgICAgaWYgKCp0b0FuZ2xlQW5kRW51bWVyYXRpb24uc2Vj
b25kID09IFNWR01hcmtlck9yaWVudEFuZ2xlKQorICAgICAgICAgICAgKmFuaW1hdGVkQW5nbGVB
bmRFbnVtZXJhdGlvbi5maXJzdCA9ICp0b0FuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3Q7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdC5z
ZXRWYWx1ZSgwKTsKKyAgICAgICAgICAgIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJz
dC0+c2V0VmFsdWUoMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoZnJvbUFu
Z2xlQW5kRW51bWVyYXRpb24uc2Vjb25kID09IFNWR01hcmtlck9yaWVudEFuZ2xlKSB7CisgICAg
aWYgKCpmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPT0gU1ZHTWFya2VyT3JpZW50QW5n
bGUpIHsKICAgICAgICAgLy8gUmVndWxhciBmcm9tIGFuZ2xlIHRvIGFuZ2xlIGFuaW1hdGlvbiwg
d2l0aCBzdXBwb3J0IGZvciBzbW9vdGggaW50ZXJwb2xhdGlvbiwgYW5kIGFkZGl0aXZlIGFuZCBh
Y2N1bXVsYXRlZCBhbmltYXRpb24uCi0gICAgICAgIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlv
bi5zZWNvbmQgPSBTVkdNYXJrZXJPcmllbnRBbmdsZTsKKyAgICAgICAgKmFuaW1hdGVkQW5nbGVB
bmRFbnVtZXJhdGlvbi5zZWNvbmQgPSBTVkdNYXJrZXJPcmllbnRBbmdsZTsKIAotICAgICAgICBh
dXRvJiBhbmltYXRlZFNWR0FuZ2xlID0gYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0
OwotICAgICAgICBjb25zdCBhdXRvJiB0b0F0RW5kT2ZEdXJhdGlvblNWR0FuZ2xlID0gdG9BdEVu
ZE9mRHVyYXRpb25BbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0OwotICAgICAgICBmbG9hdCBhbmlt
YXRlZEFuZ2xlID0gYW5pbWF0ZWRTVkdBbmdsZS52YWx1ZSgpOwotICAgICAgICBtX2FuaW1hdGlv
bkVsZW1lbnQtPmFuaW1hdGVBZGRpdGl2ZU51bWJlcihwZXJjZW50YWdlLCByZXBlYXRDb3VudCwg
ZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3QudmFsdWUoKSwgdG9BbmdsZUFuZEVudW1lcmF0
aW9uLmZpcnN0LnZhbHVlKCksIHRvQXRFbmRPZkR1cmF0aW9uU1ZHQW5nbGUudmFsdWUoKSwgYW5p
bWF0ZWRBbmdsZSk7Ci0gICAgICAgIGFuaW1hdGVkU1ZHQW5nbGUuc2V0VmFsdWUoYW5pbWF0ZWRB
bmdsZSk7CisgICAgICAgIGF1dG8qIGFuaW1hdGVkU1ZHQW5nbGUgPSBhbmltYXRlZEFuZ2xlQW5k
RW51bWVyYXRpb24uZmlyc3Q7CisgICAgICAgIGNvbnN0IGF1dG8qIHRvQXRFbmRPZkR1cmF0aW9u
U1ZHQW5nbGUgPSB0b0F0RW5kT2ZEdXJhdGlvbkFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3Q7Cisg
ICAgICAgIGZsb2F0IGFuaW1hdGVkQW5nbGUgPSBhbmltYXRlZFNWR0FuZ2xlLT52YWx1ZSgpOwor
ICAgICAgICBtX2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGVBZGRpdGl2ZU51bWJlcihwZXJjZW50
YWdlLCByZXBlYXRDb3VudCwgZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3QtPnZhbHVlKCks
IHRvQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdC0+dmFsdWUoKSwgdG9BdEVuZE9mRHVyYXRpb25T
VkdBbmdsZS0+dmFsdWUoKSwgYW5pbWF0ZWRBbmdsZSk7CisgICAgICAgIGFuaW1hdGVkU1ZHQW5n
bGUtPnNldFZhbHVlKGFuaW1hdGVkQW5nbGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgLy8gYXV0bywgYXV0by1zdGFydC1yZXZlcnNlLCBvciB1bmtub3duLgotICAgIGFuaW1hdGVk
QW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdC5zZXRWYWx1ZSgwKTsKKyAgICBhbmltYXRlZEFuZ2xl
QW5kRW51bWVyYXRpb24uZmlyc3QtPnNldFZhbHVlKDApOwogCi0gICAgaWYgKGZyb21BbmdsZUFu
ZEVudW1lcmF0aW9uLnNlY29uZCA9PSBTVkdNYXJrZXJPcmllbnRBdXRvIHx8IGZyb21BbmdsZUFu
ZEVudW1lcmF0aW9uLnNlY29uZCA9PSBTVkdNYXJrZXJPcmllbnRBdXRvU3RhcnRSZXZlcnNlKQot
ICAgICAgICBhbmltYXRlZEFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kID0gZnJvbUFuZ2xlQW5k
RW51bWVyYXRpb24uc2Vjb25kOworICAgIGlmICgqZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vj
b25kID09IFNWR01hcmtlck9yaWVudEF1dG8gfHwgKmZyb21BbmdsZUFuZEVudW1lcmF0aW9uLnNl
Y29uZCA9PSBTVkdNYXJrZXJPcmllbnRBdXRvU3RhcnRSZXZlcnNlKQorICAgICAgICAqYW5pbWF0
ZWRBbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9ICpmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5z
ZWNvbmQ7CiAgICAgZWxzZQotICAgICAgICBhbmltYXRlZEFuZ2xlQW5kRW51bWVyYXRpb24uc2Vj
b25kID0gU1ZHTWFya2VyT3JpZW50VW5rbm93bjsKKyAgICAgICAgKmFuaW1hdGVkQW5nbGVBbmRF
bnVtZXJhdGlvbi5zZWNvbmQgPSBTVkdNYXJrZXJPcmllbnRVbmtub3duOwogfQogCiBmbG9hdCBT
VkdBbmltYXRlZEFuZ2xlQW5pbWF0b3I6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYg
ZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkQm9vbGVhbi5jcHAKaW5kZXggZWMwODQyYTczY2UzNmI3YzE0Y2RiNWQxZDk5N2Y4
MTZjZTU0NWIxOC4uMjBkMDY1MDA2ZmE5MWE4OTZjYWYwNGFhODkyZTg5OWQxNWFhMDRkYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQm9vbGVhbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQm9vbGVhbi5jcHAKQEAgLTMxLDE0ICszMSwx
NCBAQCBTVkdBbmltYXRlZEJvb2xlYW5BbmltYXRvcjo6U1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0
b3IoU1ZHQW5pbWF0aW9uRWxlbWVudCogYW5pbQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBTVkdBbmltYXRlZEJvb2xlYW5BbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlQm9vbGVhbihzdGQ6Om1ha2VfdW5pcXVlPGJvb2w+KCkpOworICAgIGF1
dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1
ZTxib29sPigpKTsKICAgICBhbmltYXRlZFR5cGUtPmJvb2xlYW4oKSA9IChzdHJpbmcgPT0gInRy
dWUiKTsgLy8gd2F0PwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CiAKIHN0ZDo6dW5pcXVl
X3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkQm9vbGVhbkFuaW1hdG9yOjpzdGFydEFu
aW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmlt
YXRlZFR5cGVzKQogewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUJvb2xlYW4o
Y29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRlZEJvb2xlYW4+KGFuaW1hdGVkVHlwZXMp
KTsKKyAgICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRlZEJvb2xlYW4+
KGFuaW1hdGVkVHlwZXMpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVkQm9vbGVhbkFuaW1hdG9yOjpz
dG9wQW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3Qm
IGFuaW1hdGVkVHlwZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWRDb2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRDb2xvci5jcHAKaW5k
ZXggMTY3MGZmYmFiMzU2NmNmOTFjOWVhNWY5YmNjNDA1MzRhMzRhMzc5YS4uMDgzZTkwOGZhMmM1
MDdhMzdlYmFhZmYwYjFjMzA0ZjllNjY4NjJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlZENvbG9yLmNwcApAQCAtMzMsNyArMzMsNyBAQCBTVkdBbmltYXRlZENvbG9yQW5pbWF0b3I6
OlNWR0FuaW1hdGVkQ29sb3JBbmltYXRvcihTVkdBbmltYXRpb25FbGVtZW50JiBhbmltYXRpbwog
CiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZENvbG9yQW5pbWF0
b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgcmV0
dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQ29sb3Ioc3RkOjptYWtlX3VuaXF1ZTxDb2xvcj4o
Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKHN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKSkpKTsKKyAgICBy
ZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxDb2xvcj4oQ1NT
UGFyc2VyOjpwYXJzZUNvbG9yKHN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKSkpKTsKIH0KIAogdm9p
ZCBTVkdBbmltYXRlZENvbG9yQW5pbWF0b3I6OmFkZEFuaW1hdGVkVHlwZXMoU1ZHQW5pbWF0ZWRU
eXBlKiBmcm9tLCBTVkdBbmltYXRlZFR5cGUqIHRvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkRW51bWVyYXRpb24uY3BwCmluZGV4IDgxOWQyNTdlNjQ1OWM2MWZlYWY4MjQ5ODYw
MTk0MTcyZGIyNWIyMmQuLmUxZDU3NTRmYzA5M2ExZDAwOTBiNDk2ODViZTEwYzMyYTQ1MjhiMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAKQEAg
LTEwOSwxNCArMTA5LDE0IEBAIFNWR0FuaW1hdGVkRW51bWVyYXRpb25BbmltYXRvcjo6U1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9yKFNWR0FuaW1hdGlvbkVsZW1lCiBzdGQ6OnVuaXF1ZV9w
dHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZEVudW1lcmF0aW9uQW5pbWF0b3I6OmNvbnN0
cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgQVNTRVJUKG1fYW5p
bWF0aW9uRWxlbWVudCk7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6
OmNyZWF0ZUVudW1lcmF0aW9uKHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQ+KCkpOworICAgIGF1
dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1
ZTx1bnNpZ25lZD4oKSk7CiAgICAgYW5pbWF0ZWRUeXBlLT5lbnVtZXJhdGlvbigpID0gZW51bWVy
YXRpb25WYWx1ZUZvclRhcmdldEF0dHJpYnV0ZShtX2FuaW1hdGlvbkVsZW1lbnQtPnRhcmdldEVs
ZW1lbnQoKSwgbV9hbmltYXRpb25FbGVtZW50LT5hdHRyaWJ1dGVOYW1lKCksIHN0cmluZyk7CiAg
ICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRp
b24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQog
ewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUVudW1lcmF0aW9uKGNvbnN0cnVj
dEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4oYW5pbWF0ZWRUeXBlcykpOwor
ICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+
KGFuaW1hdGVkVHlwZXMpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVkRW51bWVyYXRpb25BbmltYXRv
cjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlM
aXN0JiBhbmltYXRlZFR5cGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkSW50ZWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2Vy
LmNwcAppbmRleCBjM2Y4YzhlNzgxNTgxY2EwNWQ2OGU0ZjBiYTMwNjkwZDhhMjQ1MTE3Li5hMDZh
ZTFhOWM1ZjgyMjNjZjUzMjFmYjI3YTQ1N2FmMTViMTBlNGQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcApAQCAtMzMsMTQgKzMzLDE0IEBAIFNWR0FuaW1hdGVk
SW50ZWdlckFuaW1hdG9yOjpTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcihTVkdBbmltYXRpb25F
bGVtZW50KiBhbmltCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1h
dGVkSW50ZWdlckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVJ
bnRlZ2VyKHN0ZDo6bWFrZV91bmlxdWU8aW50PigpKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9
IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8aW50PigpKTsKICAgICBh
bmltYXRlZFR5cGUtPmludGVnZXIoKSA9IHN0cmluZy50b0ludFN0cmljdCgpOwogICAgIHJldHVy
biBhbmltYXRlZFR5cGU7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNW
R0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZH
RWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogewotICAgIHJldHVy
biBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXIoY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxT
VkdBbmltYXRlZEludGVnZXI+KGFuaW1hdGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0
RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRlZEludGVnZXI+KGFuaW1hdGVkVHlwZXMpOwogfQogCiB2
b2lkIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpzdG9wQW5pbVZhbEFuaW1hdGlvbihjb25z
dCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVn
ZXIuY3BwCmluZGV4IDViNTY3ZWQyYTk5ZTFmZDgxMzIwY2NiZjk0OWQ0ZmVlMzM4NzJkNjQuLjhm
OTMzYjRmNjg2YTFmNjA5ZWNiMDA1Y2I3Y2Y4NWMzMmI2MTBmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuY3Bw
CkBAIC0zMywyMyArMzMsMjMgQEAgU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5p
bWF0b3I6OlNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW0KIAogc3RkOjp1bmlx
dWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2Vy
QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0g
ICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXJPcHRp
b25hbEludGVnZXIoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OnBhaXI8aW50LCBpbnQ+PigpKTsKLSAg
ICBzdGQ6OnBhaXI8aW50LCBpbnQ+JiBhbmltYXRlZEludGVnZXIgPSBhbmltYXRlZFR5cGUtPmlu
dGVnZXJPcHRpb25hbEludGVnZXIoKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8aW50PigpLCBzdGQ6Om1ha2VfdW5pcXVl
PGludD4oKSk7CisgICAgYXV0byYgYW5pbWF0ZWRJbnRlZ2VyID0gYW5pbWF0ZWRUeXBlLT5pbnRl
Z2VyT3B0aW9uYWxJbnRlZ2VyKCk7CiAgICAgZmxvYXQgZmlyc3ROdW1iZXIgPSAwOwogICAgIGZs
b2F0IHNlY29uZE51bWJlciA9IDA7CiAgICAgaWYgKCFwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVy
KHN0cmluZywgZmlyc3ROdW1iZXIsIHNlY29uZE51bWJlcikpIHsKLSAgICAgICAgYW5pbWF0ZWRJ
bnRlZ2VyLmZpcnN0ID0gMDsKLSAgICAgICAgYW5pbWF0ZWRJbnRlZ2VyLnNlY29uZCA9IDA7Cisg
ICAgICAgICphbmltYXRlZEludGVnZXIuZmlyc3QgPSAwOworICAgICAgICAqYW5pbWF0ZWRJbnRl
Z2VyLnNlY29uZCA9IDA7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYW5pbWF0ZWRJbnRlZ2VyLmZp
cnN0ID0gc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoZmlyc3ROdW1iZXIpKTsKLSAgICAgICAgYW5p
bWF0ZWRJbnRlZ2VyLnNlY29uZCA9IHN0YXRpY19jYXN0PGludD4ocm91bmRmKHNlY29uZE51bWJl
cikpOworICAgICAgICAqYW5pbWF0ZWRJbnRlZ2VyLmZpcnN0ID0gc3RhdGljX2Nhc3Q8aW50Pihy
b3VuZGYoZmlyc3ROdW1iZXIpKTsKKyAgICAgICAgKmFuaW1hdGVkSW50ZWdlci5zZWNvbmQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihzZWNvbmROdW1iZXIpKTsKICAgICB9CiAgICAgcmV0dXJu
IGFuaW1hdGVkVHlwZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZH
QW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1h
dGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMp
CiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdlck9wdGlvbmFsSW50
ZWdlcihjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlczxTVkdBbmltYXRlZEludGVnZXIsIFNWR0FuaW1h
dGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcykpOworICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tQmFz
ZVZhbHVlczxTVkdBbmltYXRlZEludGVnZXIsIFNWR0FuaW1hdGVkSW50ZWdlcj4oYW5pbWF0ZWRU
eXBlcyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0
b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5
TGlzdCYgYW5pbWF0ZWRUeXBlcykKQEAgLTc3LDExICs3NywxMSBAQCB2b2lkIFNWR0FuaW1hdGVk
SW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjphZGRBbmltYXRlZFR5cGVzKFNWR0FuaW1h
dGVkVHlwZQogICAgIEFTU0VSVChmcm9tLT50eXBlKCkgPT0gQW5pbWF0ZWRJbnRlZ2VyT3B0aW9u
YWxJbnRlZ2VyKTsKICAgICBBU1NFUlQoZnJvbS0+dHlwZSgpID09IHRvLT50eXBlKCkpOwogCi0g
ICAgY29uc3Qgc3RkOjpwYWlyPGludCwgaW50PiYgZnJvbUludGVnZXJQYWlyID0gZnJvbS0+aW50
ZWdlck9wdGlvbmFsSW50ZWdlcigpOwotICAgIHN0ZDo6cGFpcjxpbnQsIGludD4mIHRvSW50ZWdl
clBhaXIgPSB0by0+aW50ZWdlck9wdGlvbmFsSW50ZWdlcigpOworICAgIGNvbnN0IGF1dG8mIGZy
b21JbnRlZ2VyUGFpciA9IGZyb20tPmludGVnZXJPcHRpb25hbEludGVnZXIoKTsKKyAgICBhdXRv
JiB0b0ludGVnZXJQYWlyID0gdG8tPmludGVnZXJPcHRpb25hbEludGVnZXIoKTsKIAotICAgIHRv
SW50ZWdlclBhaXIuZmlyc3QgKz0gZnJvbUludGVnZXJQYWlyLmZpcnN0OwotICAgIHRvSW50ZWdl
clBhaXIuc2Vjb25kICs9IGZyb21JbnRlZ2VyUGFpci5zZWNvbmQ7CisgICAgKnRvSW50ZWdlclBh
aXIuZmlyc3QgKz0gKmZyb21JbnRlZ2VyUGFpci5maXJzdDsKKyAgICAqdG9JbnRlZ2VyUGFpci5z
ZWNvbmQgKz0gKmZyb21JbnRlZ2VyUGFpci5zZWNvbmQ7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWRJ
bnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxv
YXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNWR0FuaW1hdGVkVHlwZSogZnJv
bSwgU1ZHQW5pbWF0ZWRUeXBlKiB0bywgU1ZHQW5pbWF0ZWRUeXBlKiB0b0F0RW5kT2ZEdXJhdGlv
biwgU1ZHQW5pbWF0ZWRUeXBlKiBhbmltYXRlZCkKQEAgLTg5LDEzICs4OSwxMyBAQCB2b2lkIFNW
R0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRl
ZFZhbHVlKGZsb2F0IHBlcgogICAgIEFTU0VSVChtX2FuaW1hdGlvbkVsZW1lbnQpOwogICAgIEFT
U0VSVChtX2NvbnRleHRFbGVtZW50KTsKIAotICAgIGNvbnN0IHN0ZDo6cGFpcjxpbnQsIGludD4m
IGZyb21JbnRlZ2VyUGFpciA9IG1fYW5pbWF0aW9uRWxlbWVudC0+YW5pbWF0aW9uTW9kZSgpID09
IFRvQW5pbWF0aW9uID8gYW5pbWF0ZWQtPmludGVnZXJPcHRpb25hbEludGVnZXIoKSA6IGZyb20t
PmludGVnZXJPcHRpb25hbEludGVnZXIoKTsKLSAgICBjb25zdCBzdGQ6OnBhaXI8aW50LCBpbnQ+
JiB0b0ludGVnZXJQYWlyID0gdG8tPmludGVnZXJPcHRpb25hbEludGVnZXIoKTsKLSAgICBjb25z
dCBzdGQ6OnBhaXI8aW50LCBpbnQ+JiB0b0F0RW5kT2ZEdXJhdGlvbkludGVnZXJQYWlyID0gdG9B
dEVuZE9mRHVyYXRpb24tPmludGVnZXJPcHRpb25hbEludGVnZXIoKTsKLSAgICBzdGQ6OnBhaXI8
aW50LCBpbnQ+JiBhbmltYXRlZEludGVnZXJQYWlyID0gYW5pbWF0ZWQtPmludGVnZXJPcHRpb25h
bEludGVnZXIoKTsKKyAgICBjb25zdCBhdXRvJiBmcm9tSW50ZWdlclBhaXIgPSBtX2FuaW1hdGlv
bkVsZW1lbnQtPmFuaW1hdGlvbk1vZGUoKSA9PSBUb0FuaW1hdGlvbiA/IGFuaW1hdGVkLT5pbnRl
Z2VyT3B0aW9uYWxJbnRlZ2VyKCkgOiBmcm9tLT5pbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKCk7Cisg
ICAgY29uc3QgYXV0byYgdG9JbnRlZ2VyUGFpciA9IHRvLT5pbnRlZ2VyT3B0aW9uYWxJbnRlZ2Vy
KCk7CisgICAgY29uc3QgYXV0byYgdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyUGFpciA9IHRvQXRF
bmRPZkR1cmF0aW9uLT5pbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKCk7CisgICAgYXV0byYgYW5pbWF0
ZWRJbnRlZ2VyUGFpciA9IGFuaW1hdGVkLT5pbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKCk7CiAKLSAg
ICBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRJbnRlZ2VyKG1f
YW5pbWF0aW9uRWxlbWVudCwgcGVyY2VudGFnZSwgcmVwZWF0Q291bnQsIGZyb21JbnRlZ2VyUGFp
ci5maXJzdCwgdG9JbnRlZ2VyUGFpci5maXJzdCwgdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyUGFp
ci5maXJzdCwgYW5pbWF0ZWRJbnRlZ2VyUGFpci5maXJzdCk7Ci0gICAgU1ZHQW5pbWF0ZWRJbnRl
Z2VyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkSW50ZWdlcihtX2FuaW1hdGlvbkVsZW1lbnQs
IHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBmcm9tSW50ZWdlclBhaXIuc2Vjb25kLCB0b0ludGVn
ZXJQYWlyLnNlY29uZCwgdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyUGFpci5zZWNvbmQsIGFuaW1h
dGVkSW50ZWdlclBhaXIuc2Vjb25kKTsKKyAgICBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6
Y2FsY3VsYXRlQW5pbWF0ZWRJbnRlZ2VyKG1fYW5pbWF0aW9uRWxlbWVudCwgcGVyY2VudGFnZSwg
cmVwZWF0Q291bnQsICpmcm9tSW50ZWdlclBhaXIuZmlyc3QsICp0b0ludGVnZXJQYWlyLmZpcnN0
LCAqdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyUGFpci5maXJzdCwgKmFuaW1hdGVkSW50ZWdlclBh
aXIuZmlyc3QpOworICAgIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpjYWxjdWxhdGVBbmlt
YXRlZEludGVnZXIobV9hbmltYXRpb25FbGVtZW50LCBwZXJjZW50YWdlLCByZXBlYXRDb3VudCwg
KmZyb21JbnRlZ2VyUGFpci5zZWNvbmQsICp0b0ludGVnZXJQYWlyLnNlY29uZCwgKnRvQXRFbmRP
ZkR1cmF0aW9uSW50ZWdlclBhaXIuc2Vjb25kLCAqYW5pbWF0ZWRJbnRlZ2VyUGFpci5zZWNvbmQp
OwogfQogCiBmbG9hdCBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6
Y2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZExlbmd0aC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZWRMZW5ndGguY3BwCmluZGV4IGFiNThmMTgzMTQ1MTUzMTVlMzBj
Nzc5YjcwODA3Y2MxOGIwYTQyMGUuLjM0NTE3MGU3NDIxYjZiODEwYWY3ZjkyNTUwZDVhZmNlYzVm
Njk4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZExlbmd0aC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoLmNwcApAQCAtMzQs
MTIgKzM0LDEyIEBAIFNWR0FuaW1hdGVkTGVuZ3RoQW5pbWF0b3I6OlNWR0FuaW1hdGVkTGVuZ3Ro
QW5pbWF0b3IoU1ZHQW5pbWF0aW9uRWxlbWVudCogYW5pbWF0CiAKIHN0ZDo6dW5pcXVlX3B0cjxT
VkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTGVuZ3RoQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21T
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlTGVuZ3RoKHN0ZDo6bWFrZV91bmlxdWU8U1ZHTGVuZ3RoVmFsdWU+KG1fbGVuZ3Ro
TW9kZSwgc3RyaW5nKSk7CisgICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6
bWFrZV91bmlxdWU8U1ZHTGVuZ3RoVmFsdWU+KG1fbGVuZ3RoTW9kZSwgc3RyaW5nKSk7CiB9CiAK
IHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTGVuZ3RoQW5pbWF0
b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0
eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3Jl
YXRlTGVuZ3RoKGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRMZW5ndGg+KGFuaW1h
dGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRl
ZExlbmd0aD4oYW5pbWF0ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWRMZW5ndGhBbmlt
YXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVy
dHlMaXN0JiBhbmltYXRlZFR5cGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRM
ZW5ndGhMaXN0LmNwcAppbmRleCA5NWZmYjZhODFjMDQzZDQ1ZDBlYWFkMDk1YzVhMjIzN2VmODAz
ZWRjLi5lYTAxZTVhOTJhNDdiM2NhYjRhNTY5MzgwM2RmMmFmNDYyYWMyZTM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmNwcApAQCAtMzMsMTQgKzMzLDE0
IEBAIFNWR0FuaW1hdGVkTGVuZ3RoTGlzdEFuaW1hdG9yOjpTVkdBbmltYXRlZExlbmd0aExpc3RB
bmltYXRvcihTVkdBbmltYXRpb25FbGVtZW50CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRl
ZFR5cGU+IFNWR0FuaW1hdGVkTGVuZ3RoTGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5p
bWF0ZWRUeXBlOjpjcmVhdGVMZW5ndGhMaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHTGVuZ3RoTGlz
dFZhbHVlcz4oKSk7CisgICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNy
ZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0xlbmd0aExpc3RWYWx1ZXM+KCkpOwogICAgIGFuaW1h
dGVkVHlwZS0+bGVuZ3RoTGlzdCgpLnBhcnNlKHN0cmluZywgbV9sZW5ndGhNb2RlKTsKICAgICBy
ZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBTVkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNv
bnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKIHsKLSAg
ICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVMZW5ndGhMaXN0KGNvbnN0cnVjdEZyb21C
YXNlVmFsdWU8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0PihhbmltYXRlZFR5cGVzKSk7CisgICAgcmV0
dXJuIGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0PihhbmltYXRl
ZFR5cGVzKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRvcjo6c3RvcEFu
aW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmlt
YXRlZFR5cGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVt
YmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlci5jcHAKaW5kZXgg
NGYxZWE5YThkNGUwOTBkZmMwMjFjMTA4ZWNiY2ZkYWM4NzQ4MTRmMy4uOTJkZWZiMWU1YzdmOGIx
Y2Y3ZGM1MTU4OTM0NTdhOWJhYWZlZjEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkTnVtYmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWROdW1iZXIuY3BwCkBAIC0zMiw3ICszMiw3IEBAIFNWR0FuaW1hdGVkTnVtYmVyQW5pbWF0b3I6
OlNWR0FuaW1hdGVkTnVtYmVyQW5pbWF0b3IoU1ZHQW5pbWF0aW9uRWxlbWVudCogYW5pbWF0CiAK
IHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTnVtYmVyQW5pbWF0
b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0
byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlcihzdGQ6Om1ha2Vf
dW5pcXVlPGZsb2F0PigpKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8ZmxvYXQ+KCkpOwogICAgIGZsb2F0JiBhbmltYXRl
ZE51bWJlciA9IGFuaW1hdGVkVHlwZS0+bnVtYmVyKCk7CiAgICAgaWYgKCFwYXJzZU51bWJlckZy
b21TdHJpbmcoc3RyaW5nLCBhbmltYXRlZE51bWJlcikpCiAgICAgICAgIGFuaW1hdGVkTnVtYmVy
ID0gMDsKQEAgLTQxLDcgKzQxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
U1ZHQW5pbWF0ZWROdW1iZXJBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZygKIAogc3RkOjp1
bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWROdW1iZXJBbmltYXRvcjo6c3Rh
cnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYg
YW5pbWF0ZWRUeXBlcykKIHsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1i
ZXIoY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRlZE51bWJlcj4oYW5pbWF0ZWRUeXBl
cykpOworICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1hdGVkTnVtYmVy
PihhbmltYXRlZFR5cGVzKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZE51bWJlckFuaW1hdG9yOjpz
dG9wQW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3Qm
IGFuaW1hdGVkVHlwZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWROdW1iZXJMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlckxp
c3QuY3BwCmluZGV4IDg3Zjk3M2ExYmEyZDM0OTJiMWYyZGIwZDA3M2NjMzU5ZDY2Y2I1N2QuLjM4
ODc1Y2FiMmIzMmJkOTRjYTAyOThhMzQ5NjJjMDA1YmE1MWQ3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwCkBAIC0zMiwxNCArMzIsMTQgQEAgU1ZH
QW5pbWF0ZWROdW1iZXJMaXN0QW5pbWF0b3I6OlNWR0FuaW1hdGVkTnVtYmVyTGlzdEFuaW1hdG9y
KFNWR0FuaW1hdGlvbkVsZW1lbnQKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
U1ZHQW5pbWF0ZWROdW1iZXJMaXN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZU51bWJlckxpc3Qoc3RkOjptYWtlX3VuaXF1ZTxTVkdOdW1iZXJMaXN0VmFsdWVz
PigpKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0
ZDo6bWFrZV91bmlxdWU8U1ZHTnVtYmVyTGlzdFZhbHVlcz4oKSk7CiAgICAgYW5pbWF0ZWRUeXBl
LT5udW1iZXJMaXN0KCkucGFyc2Uoc3RyaW5nKTsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwog
fQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJlckxp
c3RBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRl
ZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKIHsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVOdW1iZXJMaXN0KGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRO
dW1iZXJMaXN0PihhbmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZyb21CYXNl
VmFsdWU8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0PihhbmltYXRlZFR5cGVzKTsKIH0KIAogdm9pZCBT
VkdBbmltYXRlZE51bWJlckxpc3RBbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3Qg
U1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3Bw
CmluZGV4IDNjNGNhODY0ZDIzMmNkMzhkNzQxYjMzNGU1NDlhODkyYzg4MWQwOGUuLmIwZTgxZDZj
MDMzNWQ1N2I1OWYzZTI4YTcxMDk2NjE2ODM3ZGRmNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHAKQEAgLTMzLDE4
ICszMywxOCBAQCBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OlNWR0Fu
aW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXJBbmltYXRvcgogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OmNv
bnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmlt
YXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0
ZDo6bWFrZV91bmlxdWU8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+KCkpOwotICAgIHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+JiBhbmltYXRlZE51bWJlciA9IGFuaW1hdGVkVHlwZS0+bnVtYmVyT3B0
aW9uYWxOdW1iZXIoKTsKLSAgICBpZiAoIXBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5n
LCBhbmltYXRlZE51bWJlci5maXJzdCwgYW5pbWF0ZWROdW1iZXIuc2Vjb25kKSkgewotICAgICAg
ICBhbmltYXRlZE51bWJlci5maXJzdCA9IDA7Ci0gICAgICAgIGFuaW1hdGVkTnVtYmVyLnNlY29u
ZCA9IDA7CisgICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShz
dGQ6Om1ha2VfdW5pcXVlPGZsb2F0PigpLCBzdGQ6Om1ha2VfdW5pcXVlPGZsb2F0PigpKTsKKyAg
ICBhdXRvJiBhbmltYXRlZE51bWJlciA9IGFuaW1hdGVkVHlwZS0+bnVtYmVyT3B0aW9uYWxOdW1i
ZXIoKTsKKyAgICBpZiAoIXBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nLCAqYW5pbWF0
ZWROdW1iZXIuZmlyc3QsICphbmltYXRlZE51bWJlci5zZWNvbmQpKSB7CisgICAgICAgICphbmlt
YXRlZE51bWJlci5maXJzdCA9IDA7CisgICAgICAgICphbmltYXRlZE51bWJlci5zZWNvbmQgPSAw
OwogICAgIH0KICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6
OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxp
c3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRl
TnVtYmVyT3B0aW9uYWxOdW1iZXIoY29uc3RydWN0RnJvbUJhc2VWYWx1ZXM8U1ZHQW5pbWF0ZWRO
dW1iZXIsIFNWR0FuaW1hdGVkTnVtYmVyPihhbmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNv
bnN0cnVjdEZyb21CYXNlVmFsdWVzPFNWR0FuaW1hdGVkTnVtYmVyLCBTVkdBbmltYXRlZE51bWJl
cj4oYW5pbWF0ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51
bWJlckFuaW1hdG9yOjpzdG9wQW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0
ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkBAIC03MiwxMSArNzIsMTEgQEAgdm9pZCBT
VkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OmFkZEFuaW1hdGVkVHlwZXMo
U1ZHQW5pbWF0ZWRUeXBlKgogICAgIEFTU0VSVChmcm9tLT50eXBlKCkgPT0gQW5pbWF0ZWROdW1i
ZXJPcHRpb25hbE51bWJlcik7CiAgICAgQVNTRVJUKGZyb20tPnR5cGUoKSA9PSB0by0+dHlwZSgp
KTsKIAotICAgIGNvbnN0IHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+JiBmcm9tTnVtYmVyUGFpciA9
IGZyb20tPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7Ci0gICAgc3RkOjpwYWlyPGZsb2F0LCBmbG9h
dD4mIHRvTnVtYmVyUGFpciA9IHRvLT5udW1iZXJPcHRpb25hbE51bWJlcigpOworICAgIGNvbnN0
IGF1dG8mIGZyb21OdW1iZXJQYWlyID0gZnJvbS0+bnVtYmVyT3B0aW9uYWxOdW1iZXIoKTsKKyAg
ICBhdXRvJiB0b051bWJlclBhaXIgPSB0by0+bnVtYmVyT3B0aW9uYWxOdW1iZXIoKTsKIAotICAg
IHRvTnVtYmVyUGFpci5maXJzdCArPSBmcm9tTnVtYmVyUGFpci5maXJzdDsKLSAgICB0b051bWJl
clBhaXIuc2Vjb25kICs9IGZyb21OdW1iZXJQYWlyLnNlY29uZDsKKyAgICAqdG9OdW1iZXJQYWly
LmZpcnN0ICs9ICpmcm9tTnVtYmVyUGFpci5maXJzdDsKKyAgICAqdG9OdW1iZXJQYWlyLnNlY29u
ZCArPSAqZnJvbU51bWJlclBhaXIuc2Vjb25kOwogfQogCiB2b2lkIFNWR0FuaW1hdGVkTnVtYmVy
T3B0aW9uYWxOdW1iZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJj
ZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHQW5pbWF0ZWRUeXBlKiBmcm9tLCBTVkdB
bmltYXRlZFR5cGUqIHRvLCBTVkdBbmltYXRlZFR5cGUqIHRvQXRFbmRPZkR1cmF0aW9uLCBTVkdB
bmltYXRlZFR5cGUqIGFuaW1hdGVkKQpAQCAtODQsMTMgKzg0LDEzIEBAIHZvaWQgU1ZHQW5pbWF0
ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZs
b2F0IHBlcmNlCiAgICAgQVNTRVJUKG1fYW5pbWF0aW9uRWxlbWVudCk7CiAgICAgQVNTRVJUKG1f
Y29udGV4dEVsZW1lbnQpOwogCi0gICAgY29uc3Qgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4mIGZy
b21OdW1iZXJQYWlyID0gbV9hbmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gVG9B
bmltYXRpb24gPyBhbmltYXRlZC0+bnVtYmVyT3B0aW9uYWxOdW1iZXIoKSA6ICBmcm9tLT5udW1i
ZXJPcHRpb25hbE51bWJlcigpOwotICAgIGNvbnN0IHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+JiB0
b051bWJlclBhaXIgPSB0by0+bnVtYmVyT3B0aW9uYWxOdW1iZXIoKTsKLSAgICBjb25zdCBzdGQ6
OnBhaXI8ZmxvYXQsIGZsb2F0PiYgdG9BdEVuZE9mRHVyYXRpb25OdW1iZXJQYWlyID0gdG9BdEVu
ZE9mRHVyYXRpb24tPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7Ci0gICAgc3RkOjpwYWlyPGZsb2F0
LCBmbG9hdD4mIGFuaW1hdGVkTnVtYmVyUGFpciA9IGFuaW1hdGVkLT5udW1iZXJPcHRpb25hbE51
bWJlcigpOworICAgIGNvbnN0IGF1dG8mIGZyb21OdW1iZXJQYWlyID0gbV9hbmltYXRpb25FbGVt
ZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24gPyBhbmltYXRlZC0+bnVtYmVyT3B0
aW9uYWxOdW1iZXIoKSA6ICBmcm9tLT5udW1iZXJPcHRpb25hbE51bWJlcigpOworICAgIGNvbnN0
IGF1dG8mIHRvTnVtYmVyUGFpciA9IHRvLT5udW1iZXJPcHRpb25hbE51bWJlcigpOworICAgIGNv
bnN0IGF1dG8mIHRvQXRFbmRPZkR1cmF0aW9uTnVtYmVyUGFpciA9IHRvQXRFbmRPZkR1cmF0aW9u
LT5udW1iZXJPcHRpb25hbE51bWJlcigpOworICAgIGF1dG8mIGFuaW1hdGVkTnVtYmVyUGFpciA9
IGFuaW1hdGVkLT5udW1iZXJPcHRpb25hbE51bWJlcigpOwogCi0gICAgbV9hbmltYXRpb25FbGVt
ZW50LT5hbmltYXRlQWRkaXRpdmVOdW1iZXIocGVyY2VudGFnZSwgcmVwZWF0Q291bnQsIGZyb21O
dW1iZXJQYWlyLmZpcnN0LCB0b051bWJlclBhaXIuZmlyc3QsIHRvQXRFbmRPZkR1cmF0aW9uTnVt
YmVyUGFpci5maXJzdCwgYW5pbWF0ZWROdW1iZXJQYWlyLmZpcnN0KTsKLSAgICBtX2FuaW1hdGlv
bkVsZW1lbnQtPmFuaW1hdGVBZGRpdGl2ZU51bWJlcihwZXJjZW50YWdlLCByZXBlYXRDb3VudCwg
ZnJvbU51bWJlclBhaXIuc2Vjb25kLCB0b051bWJlclBhaXIuc2Vjb25kLCB0b0F0RW5kT2ZEdXJh
dGlvbk51bWJlclBhaXIuc2Vjb25kLCBhbmltYXRlZE51bWJlclBhaXIuc2Vjb25kKTsKKyAgICBt
X2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGVBZGRpdGl2ZU51bWJlcihwZXJjZW50YWdlLCByZXBl
YXRDb3VudCwgKmZyb21OdW1iZXJQYWlyLmZpcnN0LCAqdG9OdW1iZXJQYWlyLmZpcnN0LCAqdG9B
dEVuZE9mRHVyYXRpb25OdW1iZXJQYWlyLmZpcnN0LCAqYW5pbWF0ZWROdW1iZXJQYWlyLmZpcnN0
KTsKKyAgICBtX2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGVBZGRpdGl2ZU51bWJlcihwZXJjZW50
YWdlLCByZXBlYXRDb3VudCwgKmZyb21OdW1iZXJQYWlyLnNlY29uZCwgKnRvTnVtYmVyUGFpci5z
ZWNvbmQsICp0b0F0RW5kT2ZEdXJhdGlvbk51bWJlclBhaXIuc2Vjb25kLCAqYW5pbWF0ZWROdW1i
ZXJQYWlyLnNlY29uZCk7CiB9CiAKIGZsb2F0IFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1i
ZXJBbmltYXRvcjo6Y2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBhdGguY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUGF0aC5jcHAKaW5kZXggMjllMjQ5YmM4MWFk
MjE1ZjY0NmZjMTI5YTQ1NzE2N2ZlMDliYjc2Ny4uZjRjMmZmMTAyNGUxYTkzNDAyMDFjZTkwZGEx
NjBlZGRkNTRmZDBmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVk
UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUGF0aC5jcHAKQEAg
LTM1LDcgKzM1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0
ZWRQYXRoQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY28KIHsKICAgICBhdXRvIGJ5dGVT
dHJlYW0gPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR1BhdGhCeXRlU3RyZWFtPigpOwogICAgIGJ1aWxk
U1ZHUGF0aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKHN0cmluZywgKmJ5dGVTdHJlYW0sIFVuYWx0ZXJl
ZFBhcnNpbmcpOwotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVBhdGgoV1RGTW92
ZShieXRlU3RyZWFtKSk7CisgICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKFdURk1v
dmUoYnl0ZVN0cmVhbSkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBT
VkdBbmltYXRlZFBhdGhBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0Vs
ZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKQEAgLTQ1LDcgKzQ1LDcg
QEAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRQYXRoQW5pbWF0
b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbigKICAgICAvLyBCdWlsZCBpbml0aWFsIHBhdGggYnl0
ZSBzdHJlYW0uCiAgICAgYXV0byBieXRlU3RyZWFtID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdQYXRo
Qnl0ZVN0cmVhbT4oKTsKICAgICByZXNldEFuaW1WYWxUb0Jhc2VWYWwoYW5pbWF0ZWRUeXBlcywg
Ynl0ZVN0cmVhbS5nZXQoKSk7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUGF0
aChXVEZNb3ZlKGJ5dGVTdHJlYW0pKTsKKyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVh
dGUoV1RGTW92ZShieXRlU3RyZWFtKSk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWRQYXRoQW5pbWF0
b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5
TGlzdCYgYW5pbWF0ZWRUeXBlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZFBvaW50TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQb2lu
dExpc3QuY3BwCmluZGV4IDVmMDc4MGQ1MmM1NDYyYWQ0OTBjOGYyMWVmYjI0Y2FmYjU4YmYxNjMu
LjcyYWUxYzE3ZjMxZThiYzg5ODI4ZDY4ZTBhZGIwMjU0ZmUzMmVlNmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcApAQCAtMzQsMTQgKzM0LDE0IEBAIFNW
R0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3I6OlNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3Io
U1ZHQW5pbWF0aW9uRWxlbWVudCoKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
U1ZHQW5pbWF0ZWRQb2ludExpc3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlUG9pbnRMaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHUG9pbnRMaXN0VmFsdWVzPigp
KTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6
bWFrZV91bmlxdWU8U1ZHUG9pbnRMaXN0VmFsdWVzPigpKTsKICAgICBwb2ludHNMaXN0RnJvbVNW
R0RhdGEoYW5pbWF0ZWRUeXBlLT5wb2ludExpc3QoKSwgc3RyaW5nKTsKICAgICByZXR1cm4gYW5p
bWF0ZWRUeXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmlt
YXRlZFBvaW50TGlzdEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxl
bWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogewotICAgIHJldHVybiBT
VkdBbmltYXRlZFR5cGU6OmNyZWF0ZVBvaW50TGlzdChjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNW
R0FuaW1hdGVkUG9pbnRMaXN0PihhbmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVj
dEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRQb2ludExpc3Q+KGFuaW1hdGVkVHlwZXMpOwogfQog
CiB2b2lkIFNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9u
KGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0
aW8uY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRp
by5jcHAKaW5kZXggODAxMDI1YjQ1ZmE2MWI3ZWViNTA1OTBiM2FlODU3YTlhOWI2OWU5MS4uNTE5
YzVjODc1NzM3MGZiMWNkNGQ2OGJlNWQ2MjdjNzQwNDg1YTJkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKQEAgLTMx
LDE0ICszMSwxNCBAQCBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6U1ZH
QW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3IoUwogCiBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6
Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFu
aW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpbyhz
dGQ6Om1ha2VfdW5pcXVlPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4oKSk7CisgICAgYXV0
byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVl
PFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4oKSk7CiAgICAgYW5pbWF0ZWRUeXBlLT5wcmVz
ZXJ2ZUFzcGVjdFJhdGlvKCkucGFyc2Uoc3RyaW5nKTsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBl
OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFByZXNl
cnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0Vs
ZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKIHsKLSAgICByZXR1cm4g
U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvKGNvbnN0cnVjdEZyb21C
YXNlVmFsdWU8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPihhbmltYXRlZFR5cGVzKSk7
CisgICAgcmV0dXJuIGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFz
cGVjdFJhdGlvPihhbmltYXRlZFR5cGVzKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZFByZXNlcnZl
QXNwZWN0UmF0aW9BbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVu
dEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRSZWN0LmNwcAppbmRleCBiOTRhYmY1OWM3MDg0OGE2YmFjYjdiODA1Yjk4ZDk1ZjJi
OWVmN2YyLi4zMTNlMTUxMTA4YTM5MWFhNjdkZDUyMmRjZGE5Nzg4NTQ1OWRhZGZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0LmNwcApAQCAtMzIsMTQgKzMyLDE0IEBAIFNWR0Fu
aW1hdGVkUmVjdEFuaW1hdG9yOjpTVkdBbmltYXRlZFJlY3RBbmltYXRvcihTVkdBbmltYXRpb25F
bGVtZW50KiBhbmltYXRpb25FCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNW
R0FuaW1hdGVkUmVjdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVh
dGVSZWN0KHN0ZDo6bWFrZV91bmlxdWU8RmxvYXRSZWN0PigpKTsKKyAgICBhdXRvIGFuaW1hdGVk
VHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8RmxvYXRSZWN0
PigpKTsKICAgICBwYXJzZVJlY3Qoc3RyaW5nLCBhbmltYXRlZFR5cGUtPnJlY3QoKSk7CiAgICAg
cmV0dXJuIGFuaW1hdGVkVHlwZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlw
ZT4gU1ZHQW5pbWF0ZWRSZWN0QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBT
VkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0
dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUmVjdChjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNW
R0FuaW1hdGVkUmVjdD4oYW5pbWF0ZWRUeXBlcykpOworICAgIHJldHVybiBjb25zdHJ1Y3RGcm9t
QmFzZVZhbHVlPFNWR0FuaW1hdGVkUmVjdD4oYW5pbWF0ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZH
QW5pbWF0ZWRSZWN0QW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1l
bnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWRTdHJpbmcuY3BwCmluZGV4IDY5ODVlY2JlZGFkMWVmZWQ4ZDc0MjgxNTVhNzkw
N2ZiYTM3OTBkNzAuLmNmNjNjYzQ3YjhkNDAzNjlhMTg5NGZlZmUwN2Q0MDAwZTFiMTY0MmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkU3RyaW5nLmNwcApAQCAtMzEsMTQgKzMxLDE0
IEBAIFNWR0FuaW1hdGVkU3RyaW5nQW5pbWF0b3I6OlNWR0FuaW1hdGVkU3RyaW5nQW5pbWF0b3Io
U1ZHQW5pbWF0aW9uRWxlbWVudCogYW5pbWF0CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRl
ZFR5cGU+IFNWR0FuaW1hdGVkU3RyaW5nQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRl
ZFR5cGU6OmNyZWF0ZVN0cmluZyhzdGQ6Om1ha2VfdW5pcXVlPFN0cmluZz4oKSk7CisgICAgYXV0
byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVl
PFN0cmluZz4oKSk7CiAgICAgYW5pbWF0ZWRUeXBlLT5zdHJpbmcoKSA9IHN0cmluZzsKICAgICBy
ZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBTVkdBbmltYXRlZFN0cmluZ0FuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3Qg
U1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogewotICAgIHJl
dHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVN0cmluZyhjb25zdHJ1Y3RGcm9tQmFzZVZhbHVl
PFNWR0FuaW1hdGVkU3RyaW5nPihhbmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVj
dEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRTdHJpbmc+KGFuaW1hdGVkVHlwZXMpOwogfQogCiB2
b2lkIFNWR0FuaW1hdGVkU3RyaW5nQW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0
IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAKaW5kZXggMjAzNTZl
MGJiNmM1MjMxMzY3YjZiNmI5MjRjNTFjZmI0ZWY3MjQyOS4uZGZjZjc1MGQ0YjgwYWY0OWE1NTJi
NmUxN2FiY2Y2NTViZGQyMzQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVkVHJhbnNmb3JtTGlzdC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgU1ZHQW5pbWF0ZWRUcmFuc2Zv
cm1MaXN0QW5pbWF0b3I6OlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yKFNWR0FuaW1h
dGlvbkUKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVRy
YW5zZm9ybUxpc3Qoc3RkOjptYWtlX3VuaXF1ZTxTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzPigpKTsK
KyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFr
ZV91bmlxdWU8U1ZHVHJhbnNmb3JtTGlzdFZhbHVlcz4oKSk7CiAgICAgYW5pbWF0ZWRUeXBlLT50
cmFuc2Zvcm1MaXN0KCkucGFyc2UobV90cmFuc2Zvcm1UeXBlU3RyaW5nICsgc3RyaW5nICsgJykn
KTsKICAgICBBU1NFUlQoYW5pbWF0ZWRUeXBlLT50cmFuc2Zvcm1MaXN0KCkuc2l6ZSgpIDw9IDEp
OwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CkBAIC00OSw3ICs0OSw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpj
b25zdHJ1Y3RGcm9tCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1h
dGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZH
RWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogewotICAgIHJldHVy
biBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVRyYW5zZm9ybUxpc3QoY29uc3RydWN0RnJvbUJhc2VW
YWx1ZTxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KGFuaW1hdGVkVHlwZXMpKTsKKyAgICByZXR1
cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KGFuaW1h
dGVkVHlwZXMpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpz
dG9wQW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3Qm
IGFuaW1hdGVkVHlwZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuY3BwCmluZGV4
IDk2M2YyMjhhMDdjOWRiNGQyMDA1OTY5NTJjYjIwNGVjYWRhMmFjNTcuLjdmOTFiNTkxZmY2YzBi
MDY0ZDUyZDI1NWYzZjNjYzhkYmYxZjcxNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
ZFR5cGUuY3BwCkBAIC0xLDIwICsxLDI3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjIsMzA2ICsyOSwyNzMg
QEAKIAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIlNWR1BhdGhCeXRlU3RyZWFtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU1ZHQW5pbWF0ZWRUeXBlOjpTVkdBbmltYXRlZFR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVR5
cGUgdHlwZSkKLSAgICA6IG1fdHlwZSh0eXBlKQotewotfQotCiBTVkdBbmltYXRlZFR5cGU6On5T
VkdBbmltYXRlZFR5cGUoKQogewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBBbmlt
YXRlZEFuZ2xlOgotICAgICAgICBkZWxldGUgbV9kYXRhLmFuZ2xlQW5kRW51bWVyYXRpb247Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQW5pbWF0ZWRCb29sZWFuOgotICAgICAgICBkZWxldGUg
bV9kYXRhLmJvb2xlYW47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQW5pbWF0ZWRDb2xvcjoK
LSAgICAgICAgZGVsZXRlIG1fZGF0YS5jb2xvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBB
bmltYXRlZEVudW1lcmF0aW9uOgotICAgICAgICBkZWxldGUgbV9kYXRhLmVudW1lcmF0aW9uOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkSW50ZWdlcjoKLSAgICAgICAgZGVsZXRl
IG1fZGF0YS5pbnRlZ2VyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkSW50ZWdl
ck9wdGlvbmFsSW50ZWdlcjoKLSAgICAgICAgZGVsZXRlIG1fZGF0YS5pbnRlZ2VyT3B0aW9uYWxJ
bnRlZ2VyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkTGVuZ3RoOgotICAgICAg
ICBkZWxldGUgbV9kYXRhLmxlbmd0aDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbmltYXRl
ZExlbmd0aExpc3Q6Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEubGVuZ3RoTGlzdDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlcjoKLSAgICAgICAgZGVsZXRlIG1fZGF0YS5u
dW1iZXI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQW5pbWF0ZWROdW1iZXJMaXN0OgotICAg
ICAgICBkZWxldGUgbV9kYXRhLm51bWJlckxpc3Q7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
QW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlcjoKLSAgICAgICAgZGVsZXRlIG1fZGF0YS5udW1i
ZXJPcHRpb25hbE51bWJlcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbmltYXRlZFBhdGg6
Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEucGF0aDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBB
bmltYXRlZFBvaW50czoKLSAgICAgICAgZGVsZXRlIG1fZGF0YS5wb2ludExpc3Q7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOgotICAgICAgICBk
ZWxldGUgbV9kYXRhLnByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQW5pbWF0ZWRSZWN0OgotICAgICAgICBkZWxldGUgbV9kYXRhLnJlY3Q7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQW5pbWF0ZWRTdHJpbmc6Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEuc3Ry
aW5nOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkVHJhbnNmb3JtTGlzdDoKLSAg
ICAgICAgZGVsZXRlIG1fZGF0YS50cmFuc2Zvcm1MaXN0OwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEFuaW1hdGVkVW5rbm93bjoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVBbmdsZUFuZEVudW1lcmF0aW9uKHN0ZDo6dW5pcXVlX3B0
cjxzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+PiBhbmdsZUFuZEVudW1lcmF0aW9u
KQotewotICAgIEFTU0VSVChhbmdsZUFuZEVudW1lcmF0aW9uKTsKLSAgICBhdXRvIGFuaW1hdGVk
VHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZEFuZ2xlKTsK
LSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5hbmdsZUFuZEVudW1lcmF0aW9uID0gYW5nbGVBbmRF
bnVtZXJhdGlvbi5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKLX0KLQotc3Rk
Ojp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVCb29s
ZWFuKHN0ZDo6dW5pcXVlX3B0cjxib29sPiBib29sZWFuKQotewotICAgIEFTU0VSVChib29sZWFu
KTsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRU
eXBlPihBbmltYXRlZEJvb2xlYW4pOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmJvb2xlYW4g
PSBib29sZWFuLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQotCi1zdGQ6
OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUNvbG9y
KHN0ZDo6dW5pcXVlX3B0cjxDb2xvcj4gY29sb3IpCi17Ci0gICAgQVNTRVJUKGNvbG9yKTsKLSAg
ICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihB
bmltYXRlZENvbG9yKTsKLSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5jb2xvciA9IGNvbG9yLnJl
bGVhc2UoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUVudW1lcmF0aW9uKHN0ZDo6
dW5pcXVlX3B0cjx1bnNpZ25lZD4gZW51bWVyYXRpb24pCi17Ci0gICAgQVNTRVJUKGVudW1lcmF0
aW9uKTsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0
ZWRUeXBlPihBbmltYXRlZEVudW1lcmF0aW9uKTsKLSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5l
bnVtZXJhdGlvbiA9IGVudW1lcmF0aW9uLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRU
eXBlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZUludGVnZXIoc3RkOjp1bmlxdWVfcHRyPGludD4gaW50ZWdlcikKLXsKLSAgICBB
U1NFUlQoaW50ZWdlcik7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVl
PFNWR0FuaW1hdGVkVHlwZT4oQW5pbWF0ZWRJbnRlZ2VyKTsKLSAgICBhbmltYXRlZFR5cGUtPm1f
ZGF0YS5pbnRlZ2VyID0gaW50ZWdlci5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlw
ZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGVJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnBhaXI8
aW50LCBpbnQ+PiBpbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKQotewotICAgIEFTU0VSVChpbnRlZ2Vy
T3B0aW9uYWxJbnRlZ2VyKTsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlx
dWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIpOwotICAg
IGFuaW1hdGVkVHlwZS0+bV9kYXRhLmludGVnZXJPcHRpb25hbEludGVnZXIgPSBpbnRlZ2VyT3B0
aW9uYWxJbnRlZ2VyLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQorICAg
IGlmICghbV9vd25zVmFsdWUpCisgICAgICAgIHJldHVybjsKIAotc3RkOjp1bmlxdWVfcHRyPFNW
R0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVMZW5ndGgoc3RkOjp1bmlxdWVf
cHRyPFNWR0xlbmd0aFZhbHVlPiBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKGxlbmd0aCk7Ci0gICAg
YXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkVHlwZT4oQW5p
bWF0ZWRMZW5ndGgpOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmxlbmd0aCA9IGxlbmd0aC5y
ZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKKyAgICBXVEY6OnN3aXRjaE9uKG1f
dmFsdWUsCisgICAgICAgIFsmXShzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSosIHVuc2lnbmVkKj4g
YW5nbGVBbmRFbnVtZXJhdGlvbikgeworICAgICAgICAgICAgZGVsZXRlIGFuZ2xlQW5kRW51bWVy
YXRpb24uZmlyc3Q7CisgICAgICAgICAgICBkZWxldGUgYW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNv
bmQ7CisgICAgICAgIH0sCisgICAgICAgIFsmXShib29sKiBib29sZWFuKSB7CisgICAgICAgICAg
ICBkZWxldGUgYm9vbGVhbjsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKENvbG9yKiBjb2xvcikg
eworICAgICAgICAgICAgZGVsZXRlIGNvbG9yOworICAgICAgICB9LAorICAgICAgICBbJl0odW5z
aWduZWQqIGVudW1lcmF0aW9uKSB7CisgICAgICAgICAgICBkZWxldGUgZW51bWVyYXRpb247Cisg
ICAgICAgIH0sCisgICAgICAgIFsmXShpbnQqIGludGVnZXIpIHsKKyAgICAgICAgICAgIGRlbGV0
ZSBpbnRlZ2VyOworICAgICAgICB9LAorICAgICAgICBbJl0oc3RkOjpwYWlyPGludCosIGludCo+
IGludGVnZXJPcHRpb25hbEludGVnZXIpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBpbnRlZ2VyT3B0
aW9uYWxJbnRlZ2VyLmZpcnN0OworICAgICAgICAgICAgZGVsZXRlIGludGVnZXJPcHRpb25hbElu
dGVnZXIuc2Vjb25kOworICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHTGVuZ3RoVmFsdWUqIGxl
bmd0aCkgeworICAgICAgICAgICAgZGVsZXRlIGxlbmd0aDsKKyAgICAgICAgfSwKKyAgICAgICAg
WyZdKFNWR0xlbmd0aExpc3RWYWx1ZXMqIGxlbmd0aExpc3QpIHsKKyAgICAgICAgICAgIGRlbGV0
ZSBsZW5ndGhMaXN0OworICAgICAgICB9LAorICAgICAgICBbJl0oZmxvYXQqIG51bWJlcikgewor
ICAgICAgICAgICAgZGVsZXRlIG51bWJlcjsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKFNWR051
bWJlckxpc3RWYWx1ZXMqIG51bWJlckxpc3QpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBudW1iZXJM
aXN0OworICAgICAgICB9LAorICAgICAgICBbJl0oc3RkOjpwYWlyPGZsb2F0KiwgZmxvYXQqPiBu
dW1iZXJPcHRpb25hbE51bWJlcikgeworICAgICAgICAgICAgZGVsZXRlIG51bWJlck9wdGlvbmFs
TnVtYmVyLmZpcnN0OworICAgICAgICAgICAgZGVsZXRlIG51bWJlck9wdGlvbmFsTnVtYmVyLnNl
Y29uZDsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKFNWR1BhdGhCeXRlU3RyZWFtKiBwYXRoKSB7
CisgICAgICAgICAgICBkZWxldGUgcGF0aDsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKFNWR1Bv
aW50TGlzdFZhbHVlcyogcG9pbnRMaXN0KSB7CisgICAgICAgICAgICBkZWxldGUgcG9pbnRMaXN0
OworICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKiBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKSB7CisgICAgICAgICAgICBkZWxldGUgcHJlc2VydmVBc3BlY3RS
YXRpbzsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKEZsb2F0UmVjdCogcmVjdCkgeworICAgICAg
ICAgICAgZGVsZXRlIHJlY3Q7CisgICAgICAgIH0sCisgICAgICAgIFsmXShTdHJpbmcqIHN0cmlu
ZykgeworICAgICAgICAgICAgZGVsZXRlIHN0cmluZzsKKyAgICAgICAgfSwKKyAgICAgICAgWyZd
KFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXMqIHRyYW5zZm9ybUxpc3QpIHsKKyAgICAgICAgICAgIGRl
bGV0ZSB0cmFuc2Zvcm1MaXN0OworICAgICAgICB9CisgICAgKTsKIH0KIAotc3RkOjp1bmlxdWVf
cHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVMZW5ndGhMaXN0KHN0
ZDo6dW5pcXVlX3B0cjxTVkdMZW5ndGhMaXN0VmFsdWVzPiBsZW5ndGhMaXN0KQotewotICAgIEFT
U0VSVChsZW5ndGhMaXN0KTsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlx
dWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZExlbmd0aExpc3QpOwotICAgIGFuaW1hdGVkVHlw
ZS0+bV9kYXRhLmxlbmd0aExpc3QgPSBsZW5ndGhMaXN0LnJlbGVhc2UoKTsKLSAgICByZXR1cm4g
YW5pbWF0ZWRUeXBlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdB
bmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlcihzdGQ6OnVuaXF1ZV9wdHI8ZmxvYXQ+IG51bWJlcikK
LXsKLSAgICBBU1NFUlQobnVtYmVyKTsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFr
ZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZE51bWJlcik7Ci0gICAgYW5pbWF0ZWRU
eXBlLT5tX2RhdGEubnVtYmVyID0gbnVtYmVyLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gYW5pbWF0
ZWRUeXBlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRl
ZFR5cGU6OmNyZWF0ZU51bWJlckxpc3Qoc3RkOjp1bmlxdWVfcHRyPFNWR051bWJlckxpc3RWYWx1
ZXM+IG51bWJlckxpc3QpCi17Ci0gICAgQVNTRVJUKG51bWJlckxpc3QpOwotICAgIGF1dG8gYW5p
bWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVkTnVt
YmVyTGlzdCk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEubnVtYmVyTGlzdCA9IG51bWJlckxp
c3QucmVsZWFzZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Ci19Ci0KLXN0ZDo6dW5pcXVl
X3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVyT3B0aW9u
YWxOdW1iZXIoc3RkOjp1bmlxdWVfcHRyPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBudW1iZXJP
cHRpb25hbE51bWJlcikKLXsKLSAgICBBU1NFUlQobnVtYmVyT3B0aW9uYWxOdW1iZXIpOwotICAg
IGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFu
aW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIpOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLm51
bWJlck9wdGlvbmFsTnVtYmVyID0gbnVtYmVyT3B0aW9uYWxOdW1iZXIucmVsZWFzZSgpOwotICAg
IHJldHVybiBhbmltYXRlZFR5cGU7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5
cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUGF0aChzdGQ6OnVuaXF1ZV9wdHI8U1ZHUGF0aEJ5
dGVTdHJlYW0+IHBhdGgpCitib29sIFNWR0FuaW1hdGVkVHlwZTo6c3VwcG9ydHNBbmltVmFsKEFu
aW1hdGVkUHJvcGVydHlUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUKHBhdGgpOwotICAgIGF1dG8g
YW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVk
UGF0aCk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEucGF0aCA9IHBhdGgucmVsZWFzZSgpOwot
ICAgIHJldHVybiBhbmltYXRlZFR5cGU7CisgICAgLy8gQW5pbWF0ZWRDb2xvciBpcyBvbmx5IHVz
ZWQgZm9yIENTUyBwcm9wZXJ0eSBhbmltYXRpb25zLgorICAgIHJldHVybiB0eXBlICE9IEFuaW1h
dGVkVW5rbm93biAmJiB0eXBlICE9IEFuaW1hdGVkQ29sb3I7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUG9pbnRMaXN0KHN0ZDo6
dW5pcXVlX3B0cjxTVkdQb2ludExpc3RWYWx1ZXM+IHBvaW50TGlzdCkKK0FuaW1hdGVkUHJvcGVy
dHlUeXBlIFNWR0FuaW1hdGVkVHlwZTo6dHlwZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHBvaW50
TGlzdCk7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1h
dGVkVHlwZT4oQW5pbWF0ZWRQb2ludHMpOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLnBvaW50
TGlzdCA9IHBvaW50TGlzdC5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKLX0K
KyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLAorICAgICAgICBbIF0oc3RkOjpwYWly
PFNWR0FuZ2xlVmFsdWUqLCB1bnNpZ25lZCo+KSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0
ZWRBbmdsZTsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKGJvb2wqKSB7CisgICAgICAgICAgICBy
ZXR1cm4gQW5pbWF0ZWRCb29sZWFuOworICAgICAgICB9LAorICAgICAgICBbIF0oQ29sb3IqKSB7
CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWRDb2xvcjsKKyAgICAgICAgfSwKKyAgICAgICAg
WyBdKHVuc2lnbmVkKikgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVkRW51bWVyYXRpb247
CisgICAgICAgIH0sCisgICAgICAgIFsgXShpbnQqKSB7CisgICAgICAgICAgICByZXR1cm4gQW5p
bWF0ZWRJbnRlZ2VyOworICAgICAgICB9LAorICAgICAgICBbIF0oc3RkOjpwYWlyPGludCosIGlu
dCo+KSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2Vy
OworICAgICAgICB9LAorICAgICAgICBbIF0oU1ZHTGVuZ3RoVmFsdWUqKSB7CisgICAgICAgICAg
ICByZXR1cm4gQW5pbWF0ZWRMZW5ndGg7CisgICAgICAgIH0sCisgICAgICAgIFsgXShTVkdMZW5n
dGhMaXN0VmFsdWVzKikgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVkTGVuZ3RoTGlzdDsK
KyAgICAgICAgfSwKKyAgICAgICAgWyBdKGZsb2F0KikgeworICAgICAgICAgICAgcmV0dXJuIEFu
aW1hdGVkTnVtYmVyOworICAgICAgICB9LAorICAgICAgICBbIF0oU1ZHTnVtYmVyTGlzdFZhbHVl
cyopIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZE51bWJlckxpc3Q7CisgICAgICAgIH0s
CisgICAgICAgIFsgXShzdGQ6OnBhaXI8ZmxvYXQqLCBmbG9hdCo+KSB7CisgICAgICAgICAgICBy
ZXR1cm4gQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlcjsKKyAgICAgICAgfSwKKyAgICAgICAg
WyBdKFNWR1BhdGhCeXRlU3RyZWFtKikgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVkUGF0
aDsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKFNWR1BvaW50TGlzdFZhbHVlcyopIHsKKyAgICAg
ICAgICAgIHJldHVybiBBbmltYXRlZFBvaW50czsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSopIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRl
ZFByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgICAgIH0sCisgICAgICAgIFsgXShGbG9hdFJlY3Qq
KSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWRSZWN0OworICAgICAgICB9LAorICAgICAg
ICBbIF0oU3RyaW5nKikgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVkU3RyaW5nOworICAg
ICAgICB9LAorICAgICAgICBbIF0oU1ZHVHJhbnNmb3JtTGlzdFZhbHVlcyopIHsKKyAgICAgICAg
ICAgIHJldHVybiBBbmltYXRlZFRyYW5zZm9ybUxpc3Q7CisgICAgICAgIH0KKyAgICApOwogCi1z
dGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVBy
ZXNlcnZlQXNwZWN0UmF0aW8oc3RkOjp1bmlxdWVfcHRyPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZT4gcHJlc2VydmVBc3BlY3RSYXRpbykKLXsKLSAgICBBU1NFUlQocHJlc2VydmVBc3BlY3RS
YXRpbyk7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1h
dGVkVHlwZT4oQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKLSAgICBhbmltYXRlZFR5cGUt
Pm1fZGF0YS5wcmVzZXJ2ZUFzcGVjdFJhdGlvID0gcHJlc2VydmVBc3BlY3RSYXRpby5yZWxlYXNl
KCk7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKKyAgICByZXR1cm4gQW5pbWF0ZWRVbmtub3du
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6
OmNyZWF0ZVJlY3Qoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UmVjdD4gcmVjdCkKLXsKLSAgICBBU1NF
UlQocmVjdCk7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0Fu
aW1hdGVkVHlwZT4oQW5pbWF0ZWRSZWN0KTsKLSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5yZWN0
ID0gcmVjdC5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKLX0KLQotc3RkOjp1
bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVTdHJpbmco
c3RkOjp1bmlxdWVfcHRyPFN0cmluZz4gc3RyaW5nKQorU3RyaW5nIFNWR0FuaW1hdGVkVHlwZTo6
dmFsdWVBc1N0cmluZygpCiB7Ci0gICAgQVNTRVJUKHN0cmluZyk7Ci0gICAgYXV0byBhbmltYXRl
ZFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkVHlwZT4oQW5pbWF0ZWRTdHJpbmcp
OwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLnN0cmluZyA9IHN0cmluZy5yZWxlYXNlKCk7Ci0g
ICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKLX0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVUcmFuc2Zvcm1MaXN0KHN0ZDo6dW5pcXVlX3B0
cjxTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzPiB0cmFuc2Zvcm1MaXN0KQotewotICAgIEFTU0VSVCh0
cmFuc2Zvcm1MaXN0KTsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8
U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZFRyYW5zZm9ybUxpc3QpOwotICAgIGFuaW1hdGVkVHlw
ZS0+bV9kYXRhLnRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm1MaXN0LnJlbGVhc2UoKTsKLSAgICBy
ZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQorICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdmFsdWUs
CisgICAgICAgIFsmXShDb2xvciogY29sb3IpIHsKKyAgICAgICAgICAgIHJldHVybiBjb2xvci0+
c2VyaWFsaXplZCgpOworICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHTGVuZ3RoVmFsdWUqIGxl
bmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIGxlbmd0aC0+dmFsdWVBc1N0cmluZygpOworICAg
ICAgICB9LAorICAgICAgICBbJl0oU1ZHTGVuZ3RoTGlzdFZhbHVlcyogbGVuZ3RoTGlzdCkgewor
ICAgICAgICAgICAgcmV0dXJuIGxlbmd0aExpc3QtPnZhbHVlQXNTdHJpbmcoKTsKKyAgICAgICAg
fSwKKyAgICAgICAgWyZdKGZsb2F0KiBudW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmc6Om51bWJlcigqbnVtYmVyKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKEZsb2F0UmVjdCog
cmVjdCkgeworICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHJlY3QtPngoKSkgKyAn
ICcgKyBTdHJpbmc6Om51bWJlcihyZWN0LT55KCkpICsgJyAnICsgU3RyaW5nOjpudW1iZXIocmVj
dC0+d2lkdGgoKSkgKyAnICcgKyBTdHJpbmc6Om51bWJlcihyZWN0LT5oZWlnaHQoKSk7CisgICAg
ICAgIH0sCisgICAgICAgIFsmXShTdHJpbmcqIHN0cmluZykgeworICAgICAgICAgICAgcmV0dXJu
ICpzdHJpbmc7CisgICAgICAgIH0sCiAKLVN0cmluZyBTVkdBbmltYXRlZFR5cGU6OnZhbHVlQXNT
dHJpbmcoKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBBbmltYXRlZENvbG9y
OgotICAgICAgICBBU1NFUlQobV9kYXRhLmNvbG9yKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5j
b2xvci0+c2VyaWFsaXplZCgpOwotICAgIGNhc2UgQW5pbWF0ZWRMZW5ndGg6Ci0gICAgICAgIEFT
U0VSVChtX2RhdGEubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5sZW5ndGgtPnZhbHVl
QXNTdHJpbmcoKTsKLSAgICBjYXNlIEFuaW1hdGVkTGVuZ3RoTGlzdDoKLSAgICAgICAgQVNTRVJU
KG1fZGF0YS5sZW5ndGhMaXN0KTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5sZW5ndGhMaXN0LT52
YWx1ZUFzU3RyaW5nKCk7Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlcjoKLSAgICAgICAgQVNTRVJU
KG1fZGF0YS5udW1iZXIpOwotICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIoKm1fZGF0YS5u
dW1iZXIpOwotICAgIGNhc2UgQW5pbWF0ZWRSZWN0OgotICAgICAgICBBU1NFUlQobV9kYXRhLnJl
Y3QpOwotICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobV9kYXRhLnJlY3QtPngoKSkgKyAn
ICcgKyBTdHJpbmc6Om51bWJlcihtX2RhdGEucmVjdC0+eSgpKSArICcgJwotICAgICAgICAgICAg
ICsgU3RyaW5nOjpudW1iZXIobV9kYXRhLnJlY3QtPndpZHRoKCkpICsgJyAnICsgU3RyaW5nOjpu
dW1iZXIobV9kYXRhLnJlY3QtPmhlaWdodCgpKTsKLSAgICBjYXNlIEFuaW1hdGVkU3RyaW5nOgot
ICAgICAgICBBU1NFUlQobV9kYXRhLnN0cmluZyk7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLnN0
cmluZzsKKyAgICAgICAgLy8gVGhlc2UgdHlwZXMgZG9uJ3QgYXBwZWFyIGluIHRoZSB0YWJsZSBp
biBTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eVRvVHlwZU1hcCgpIGFuZCB0aHVzIGRvbid0IG5lZWQg
dmFsdWVBc1N0cmluZygpIHN1cHBvcnQuCisgICAgICAgIFsgXShzdGQ6OnBhaXI8U1ZHQW5nbGVW
YWx1ZSosIHVuc2lnbmVkKj4pIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9LAorICAgICAgICBbIF0oYm9v
bCopIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgICAgICB9LAorICAgICAgICBbIF0odW5zaWduZWQqKSB7CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKGludCopIHsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9LAor
ICAgICAgICBbIF0oc3RkOjpwYWlyPGludCosIGludCo+KSB7CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfSwK
KyAgICAgICAgWyBdKFNWR051bWJlckxpc3RWYWx1ZXMqKSB7CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfSwK
KyAgICAgICAgWyBdKHN0ZDo6cGFpcjxmbG9hdCosIGZsb2F0Kj4pIHsKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAg
ICB9LAorICAgICAgICBbIF0oU1ZHUGF0aEJ5dGVTdHJlYW0qKSB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAg
fSwKKyAgICAgICAgWyBdKFNWR1BvaW50TGlzdFZhbHVlcyopIHsKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9
LAorICAgICAgICBbIF0oU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKikgeworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgICAgIH0sCisgICAgICAgIFsgXShTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzKikgeworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgICAgIH0KKyAgICApOwogCi0gICAgLy8gVGhlc2UgdHlwZXMgZG9uJ3QgYXBwZWFyIGlu
IHRoZSB0YWJsZSBpbiBTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eVRvVHlwZU1hcCgpIGFuZCB0aHVz
IGRvbid0IG5lZWQgdmFsdWVBc1N0cmluZygpIHN1cHBvcnQuCi0gICAgY2FzZSBBbmltYXRlZEFu
Z2xlOgotICAgIGNhc2UgQW5pbWF0ZWRCb29sZWFuOgotICAgIGNhc2UgQW5pbWF0ZWRFbnVtZXJh
dGlvbjoKLSAgICBjYXNlIEFuaW1hdGVkSW50ZWdlcjoKLSAgICBjYXNlIEFuaW1hdGVkSW50ZWdl
ck9wdGlvbmFsSW50ZWdlcjoKLSAgICBjYXNlIEFuaW1hdGVkTnVtYmVyTGlzdDoKLSAgICBjYXNl
IEFuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXI6Ci0gICAgY2FzZSBBbmltYXRlZFBhdGg6Ci0g
ICAgY2FzZSBBbmltYXRlZFBvaW50czoKLSAgICBjYXNlIEFuaW1hdGVkUHJlc2VydmVBc3BlY3RS
YXRpbzoKLSAgICBjYXNlIEFuaW1hdGVkVHJhbnNmb3JtTGlzdDoKLSAgICBjYXNlIEFuaW1hdGVk
VW5rbm93bjoKLSAgICAgICAgLy8gT25seSBTVkcgRE9NIGFuaW1hdGlvbnMgdXNlIHRoZXNlIHBy
b3BlcnR5IHR5cGVzIC0gdGhhdCBtZWFucyB2YWx1ZUFzU3RyaW5nKCkgaXMgbmV2ZXIgdXNlZCBm
b3IgdGhvc2UuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsK
LSAgICB9CisgICAgLy8gT25seSBTVkcgRE9NIGFuaW1hdGlvbnMgdXNlIHRoZXNlIHByb3BlcnR5
IHR5cGVzIC0gdGhhdCBtZWFucyB2YWx1ZUFzU3RyaW5nKCkgaXMgbmV2ZXIgdXNlZCBmb3IgdGhv
c2UuCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQog
CiBib29sIFNWR0FuaW1hdGVkVHlwZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBzd2l0Y2ggKG1fdHlw
ZSkgewotICAgIGNhc2UgQW5pbWF0ZWRDb2xvcjoKLSAgICAgICAgQVNTRVJUKG1fZGF0YS5jb2xv
cik7Ci0gICAgICAgICptX2RhdGEuY29sb3IgPSBDU1NQYXJzZXI6OnBhcnNlQ29sb3IodmFsdWUu
c3RyaXBXaGl0ZVNwYWNlKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEFuaW1h
dGVkTGVuZ3RoOgotICAgICAgICBBU1NFUlQobV9kYXRhLmxlbmd0aCk7Ci0gICAgICAgIHJldHVy
biAhbV9kYXRhLmxlbmd0aC0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSwgU1ZHTGVuZ3RoVmFsdWU6
Omxlbmd0aE1vZGVGb3JBbmltYXRlZExlbmd0aEF0dHJpYnV0ZShhdHRyTmFtZSkpLmhhc0V4Y2Vw
dGlvbigpOwotICAgIGNhc2UgQW5pbWF0ZWRMZW5ndGhMaXN0OgotICAgICAgICBBU1NFUlQobV9k
YXRhLmxlbmd0aExpc3QpOwotICAgICAgICBtX2RhdGEubGVuZ3RoTGlzdC0+cGFyc2UodmFsdWUs
IFNWR0xlbmd0aFZhbHVlOjpsZW5ndGhNb2RlRm9yQW5pbWF0ZWRMZW5ndGhBdHRyaWJ1dGUoYXR0
ck5hbWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlcjoK
LSAgICAgICAgQVNTRVJUKG1fZGF0YS5udW1iZXIpOwotICAgICAgICBwYXJzZU51bWJlckZyb21T
dHJpbmcodmFsdWUsICptX2RhdGEubnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Y2FzZSBBbmltYXRlZFJlY3Q6Ci0gICAgICAgIEFTU0VSVChtX2RhdGEucmVjdCk7Ci0gICAgICAg
IHBhcnNlUmVjdCh2YWx1ZSwgKm1fZGF0YS5yZWN0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgY2FzZSBBbmltYXRlZFN0cmluZzoKLSAgICAgICAgQVNTRVJUKG1fZGF0YS5zdHJpbmcpOwot
ICAgICAgICAqbV9kYXRhLnN0cmluZyA9IHZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBib29sIHJlc3VsdCA9IHRydWU7CisgICAgCisgICAgV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLAor
ICAgICAgICBbJl0oQ29sb3IqIGNvbG9yKSB7CisgICAgICAgICAgICAqY29sb3IgPSBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IodmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCkpOworICAgICAgICB9LAorICAg
ICAgICBbJl0oU1ZHTGVuZ3RoVmFsdWUqIGxlbmd0aCkgeworICAgICAgICAgICAgcmVzdWx0ID0g
IWxlbmd0aC0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSwgU1ZHTGVuZ3RoVmFsdWU6Omxlbmd0aE1v
ZGVGb3JBbmltYXRlZExlbmd0aEF0dHJpYnV0ZShhdHRyTmFtZSkpLmhhc0V4Y2VwdGlvbigpOwor
ICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHTGVuZ3RoTGlzdFZhbHVlcyogbGVuZ3RoTGlzdCkg
eworICAgICAgICAgICAgbGVuZ3RoTGlzdC0+cGFyc2UodmFsdWUsIFNWR0xlbmd0aFZhbHVlOjps
ZW5ndGhNb2RlRm9yQW5pbWF0ZWRMZW5ndGhBdHRyaWJ1dGUoYXR0ck5hbWUpKTsKKyAgICAgICAg
fSwKKyAgICAgICAgWyZdKGZsb2F0KiBudW1iZXIpIHsKKyAgICAgICAgICAgIHBhcnNlTnVtYmVy
RnJvbVN0cmluZyh2YWx1ZSwgKm51bWJlcik7CisgICAgICAgIH0sCisgICAgICAgIFsmXShGbG9h
dFJlY3QqIHJlY3QpIHsKKyAgICAgICAgICAgIHBhcnNlUmVjdCh2YWx1ZSwgKnJlY3QpOworICAg
ICAgICB9LAorICAgICAgICBbJl0oU3RyaW5nKiBzdHJpbmcpIHsKKyAgICAgICAgICAgICpzdHJp
bmcgPSB2YWx1ZTsKKyAgICAgICAgfSwKIAotICAgIC8vIFRoZXNlIHR5cGVzIGRvbid0IGFwcGVh
ciBpbiB0aGUgdGFibGUgaW4gU1ZHRWxlbWVudDo6Y3NzUHJvcGVydHlUb1R5cGVNYXAoKSBhbmQg
dGh1cyBkb24ndCBuZWVkIHNldFZhbHVlQXNTdHJpbmcoKSBzdXBwb3J0LiAKLSAgICBjYXNlIEFu
aW1hdGVkQW5nbGU6Ci0gICAgY2FzZSBBbmltYXRlZEJvb2xlYW46Ci0gICAgY2FzZSBBbmltYXRl
ZEVudW1lcmF0aW9uOgotICAgIGNhc2UgQW5pbWF0ZWRJbnRlZ2VyOgotICAgIGNhc2UgQW5pbWF0
ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyOgotICAgIGNhc2UgQW5pbWF0ZWROdW1iZXJMaXN0Ogot
ICAgIGNhc2UgQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlcjoKLSAgICBjYXNlIEFuaW1hdGVk
UGF0aDoKLSAgICBjYXNlIEFuaW1hdGVkUG9pbnRzOgotICAgIGNhc2UgQW5pbWF0ZWRQcmVzZXJ2
ZUFzcGVjdFJhdGlvOgotICAgIGNhc2UgQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OgotICAgIGNhc2Ug
QW5pbWF0ZWRVbmtub3duOgotICAgICAgICAvLyBPbmx5IFNWRyBET00gYW5pbWF0aW9ucyB1c2Ug
dGhlc2UgcHJvcGVydHkgdHlwZXMgLSB0aGF0IG1lYW5zIHNldFZhbHVlQXNTdHJpbmcoKSBpcyBu
ZXZlciB1c2VkIGZvciB0aG9zZS4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICAgICAgLy8gVGhlc2Ug
dHlwZXMgZG9uJ3QgYXBwZWFyIGluIHRoZSB0YWJsZSBpbiBTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0
eVRvVHlwZU1hcCgpIGFuZCB0aHVzIGRvbid0IG5lZWQgdmFsdWVBc1N0cmluZygpIHN1cHBvcnQu
CisgICAgICAgIFsgXShzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSosIHVuc2lnbmVkKj4pIHsKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9LAorICAgICAgICBbIF0o
Ym9vbCopIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9LAor
ICAgICAgICBbIF0odW5zaWduZWQqKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKGludCopIHsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9LAorICAgICAgICBbIF0oc3RkOjpwYWlyPGludCosIGlu
dCo+KSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgWyBdKFNWR051bWJlckxpc3RWYWx1ZXMqKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKHN0ZDo6cGFpcjxmbG9hdCosIGZs
b2F0Kj4pIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9LAor
ICAgICAgICBbIF0oU1ZHUGF0aEJ5dGVTdHJlYW0qKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKFNWR1BvaW50TGlzdFZhbHVlcyop
IHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9LAorICAgICAg
ICBbIF0oU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKikgeworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0sCisgICAgICAgIFsgXShTVkdUcmFuc2Zvcm1MaXN0
VmFsdWVzKikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICApOwogCi1ib29sIFNWR0FuaW1hdGVkVHlwZTo6c3VwcG9ydHNBbmltVmFsKEFuaW1hdGVk
UHJvcGVydHlUeXBlIHR5cGUpCi17Ci0gICAgLy8gQW5pbWF0ZWRDb2xvciBpcyBvbmx5IHVzZWQg
Zm9yIENTUyBwcm9wZXJ0eSBhbmltYXRpb25zLgotICAgIHJldHVybiB0eXBlICE9IEFuaW1hdGVk
VW5rbm93biAmJiB0eXBlICE9IEFuaW1hdGVkQ29sb3I7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZS5o
CmluZGV4IGEwYzExYWQxZTRjMmE0ZDRlMzFjN2U0NmNlMjhmNjI4YWE5OTIyNzQuLmU2ZTkzNzc0
ZTZiMDhiMGViMWVmZTExZDkzODlhODE2MzFmZWRhZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZWRUeXBlLmgKQEAgLTEsMjAgKzEsMjcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCiAjcHJhZ21hIG9uY2UKQEAgLTI1LDExICszMiwxNCBAQAogI2lu
Y2x1ZGUgIlNWR0xlbmd0aExpc3RWYWx1ZXMuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhWYWx1ZS5o
IgogI2luY2x1ZGUgIlNWR051bWJlckxpc3RWYWx1ZXMuaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0
ZVN0cmVhbS5oIgogI2luY2x1ZGUgIlNWR1BvaW50TGlzdFZhbHVlcy5oIgogI2luY2x1ZGUgIlNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIlNWR1Byb3BlcnR5SW5mby5o
IgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3RWYWx1ZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9W
YXJpYW50Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHUGF0aEJ5dGVTdHJl
YW07CkBAIC0zNywyNjYgKzQ3LDE0NSBAQCBjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbTsKIGNsYXNz
IFNWR0FuaW1hdGVkVHlwZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgU1ZHQW5pbWF0ZWRUeXBlKEFuaW1hdGVkUHJvcGVydHlUeXBlKTsKICAgICB2aXJ0dWFs
IH5TVkdBbmltYXRlZFR5cGUoKTsKIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5p
bWF0ZWRUeXBlPiBjcmVhdGVBbmdsZUFuZEVudW1lcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxzdGQ6
OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+Pik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZUJvb2xlYW4oc3RkOjp1bmlxdWVfcHRyPGJvb2w+
KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlQ29s
b3Ioc3RkOjp1bmlxdWVfcHRyPENvbG9yPik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxT
VkdBbmltYXRlZFR5cGU+IGNyZWF0ZUVudW1lcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25l
ZD4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVJ
bnRlZ2VyKHN0ZDo6dW5pcXVlX3B0cjxpbnQ+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlSW50ZWdlck9wdGlvbmFsSW50ZWdlcihzdGQ6OnVuaXF1
ZV9wdHI8c3RkOjpwYWlyPGludCwgaW50Pj4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVMZW5ndGgoc3RkOjp1bmlxdWVfcHRyPFNWR0xlbmd0aFZh
bHVlPik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0
ZUxlbmd0aExpc3Qoc3RkOjp1bmlxdWVfcHRyPFNWR0xlbmd0aExpc3RWYWx1ZXM+KTsKLSAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlTnVtYmVyKHN0ZDo6
dW5pcXVlX3B0cjxmbG9hdD4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBjcmVhdGVOdW1iZXJMaXN0KHN0ZDo6dW5pcXVlX3B0cjxTVkdOdW1iZXJMaXN0VmFs
dWVzPik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0
ZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVh
dGVQYXRoKHN0ZDo6dW5pcXVlX3B0cjxTVkdQYXRoQnl0ZVN0cmVhbT4pOwotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVQb2ludExpc3Qoc3RkOjp1bmlx
dWVfcHRyPFNWR1BvaW50TGlzdFZhbHVlcz4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvKHN0ZDo6dW5pcXVlX3B0
cjxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlUmVjdChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRSZWN0
Pik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVN0
cmluZyhzdGQ6OnVuaXF1ZV9wdHI8U3RyaW5nPik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVRyYW5zZm9ybUxpc3Qoc3RkOjp1bmlxdWVfcHRyPFNW
R1RyYW5zZm9ybUxpc3RWYWx1ZXM+KTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FuaW1WYWwo
QW5pbWF0ZWRQcm9wZXJ0eVR5cGUpOwotCi0gICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotCi0gICAgLy8gTm9uLW11dGFibGUgYWNjZXNzb3Jz
LgotICAgIGNvbnN0IHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4mIGFuZ2xlQW5k
RW51bWVyYXRpb24oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmlt
YXRlZEFuZ2xlKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEuYW5nbGVBbmRFbnVtZXJhdGlvbjsK
LSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxUPiYmIHZhbHVlKQor
ICAgICAgICB7IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPihuZXcgU1ZH
QW5pbWF0ZWRUeXBlKFdURk1vdmUodmFsdWUpKSk7IH0KIAotICAgIGNvbnN0IGJvb2wmIGJvb2xl
YW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZEJvb2xl
YW4pOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5ib29sZWFuOwotICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBjcmVhdGUoVCYgdmFsdWUpCisgICAgICAgIHsgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+KG5ldyBTVkdBbmltYXRlZFR5cGUodmFsdWUpKTsgfQogCi0gICAgY29uc3Qg
Q29sb3ImIGNvbG9yKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5p
bWF0ZWRDb2xvcik7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLmNvbG9yOwotICAgIH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8VDE+JiYgdmFsdWUx
LCBzdGQ6OnVuaXF1ZV9wdHI8VDI+JiYgdmFsdWUyKQorICAgICAgICB7IHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPihuZXcgU1ZHQW5pbWF0ZWRUeXBlKFdURk1vdmUodmFs
dWUxKSwgV1RGTW92ZSh2YWx1ZTIpKSk7IH0KIAotICAgIGNvbnN0IHVuc2lnbmVkJiBlbnVtZXJh
dGlvbigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkRW51
bWVyYXRpb24pOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5lbnVtZXJhdGlvbjsKLSAgICB9Ci0K
LSAgICBjb25zdCBpbnQmIGludGVnZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBBbmltYXRlZEludGVnZXIpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5pbnRlZ2Vy
OwotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6cGFpcjxpbnQsIGludD4mIGludGVnZXJPcHRpb25h
bEludGVnZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRl
ZEludGVnZXJPcHRpb25hbEludGVnZXIpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5pbnRlZ2Vy
T3B0aW9uYWxJbnRlZ2VyOwotICAgIH0KLQotICAgIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiBsZW5n
dGgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZExlbmd0
aCk7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLmxlbmd0aDsKLSAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBjcmVhdGUoVDEmIHZhbHVlMSwgVDImIHZhbHVlMikKKyAgICAgICAgeyBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4obmV3IFNWR0FuaW1hdGVkVHlw
ZSh2YWx1ZTEsIHZhbHVlMikpOyB9CiAKLSAgICBjb25zdCBTVkdMZW5ndGhMaXN0VmFsdWVzJiBs
ZW5ndGhMaXN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0
ZWRMZW5ndGhMaXN0KTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEubGVuZ3RoTGlzdDsKLSAgICB9
Ci0KLSAgICBjb25zdCBmbG9hdCYgbnVtYmVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3R5cGUgPT0gQW5pbWF0ZWROdW1iZXIpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5udW1i
ZXI7Ci0gICAgfQotCi0gICAgY29uc3QgU1ZHTnVtYmVyTGlzdFZhbHVlcyYgbnVtYmVyTGlzdCgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkTnVtYmVyTGlz
dCk7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLm51bWJlckxpc3Q7Ci0gICAgfQotCi0gICAgY29u
c3Qgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4mIG51bWJlck9wdGlvbmFsTnVtYmVyKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51
bWJlcik7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLm51bWJlck9wdGlvbmFsTnVtYmVyOwotICAg
IH0KLQotICAgIGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtKiBwYXRoKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRQYXRoKTsKLSAgICAgICAgcmV0dXJuIG1f
ZGF0YS5wYXRoOwotICAgIH0KLQotICAgIGNvbnN0IFNWR1BvaW50TGlzdFZhbHVlcyYgcG9pbnRM
aXN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRQb2lu
dHMpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5wb2ludExpc3Q7Ci0gICAgfQotCi0gICAgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVj
dFJhdGlvKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEucHJlc2VydmVBc3BlY3RSYXRpbzsKLSAg
ICB9Ci0KLSAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFJlY3QpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5y
ZWN0OwotICAgIH0KKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FuaW1WYWwoQW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUpOwogCi0gICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFN0cmluZyk7Ci0gICAgICAgIHJldHVybiAq
bV9kYXRhLnN0cmluZzsKLSAgICB9CisgICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgdHlwZSgpIGNv
bnN0OwogCi0gICAgY29uc3QgU1ZHVHJhbnNmb3JtTGlzdFZhbHVlcyYgdHJhbnNmb3JtTGlzdCgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkVHJhbnNmb3Jt
TGlzdCk7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLnRyYW5zZm9ybUxpc3Q7Ci0gICAgfQorICAg
IC8vIE5vbi1tdXRhYmxlIGFjY2Vzc29ycy4KKyAgICBjb25zdCBzdGQ6OnBhaXI8U1ZHQW5nbGVW
YWx1ZSosIHVuc2lnbmVkKj4mIGFuZ2xlQW5kRW51bWVyYXRpb24oKSBjb25zdCB7IHJldHVybiB2
YWx1ZTxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4oKTsgfQorICAgIGNvbnN0IGJvb2wmIGJvb2xl
YW4oKSBjb25zdCB7IHJldHVybiAqdmFsdWU8Ym9vbD4oKTsgfQorICAgIGNvbnN0IENvbG9yJiBj
b2xvcigpIGNvbnN0IHsgcmV0dXJuICp2YWx1ZTxDb2xvcj4oKTsgfQorICAgIGNvbnN0IHVuc2ln
bmVkJiBlbnVtZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuICp2YWx1ZTx1bnNpZ25lZD4oKTsgfQor
ICAgIGNvbnN0IGludCYgaW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuICp2YWx1ZTxpbnQ+KCk7IH0K
KyAgICBjb25zdCBzdGQ6OnBhaXI8aW50KiwgaW50Kj4mIGludGVnZXJPcHRpb25hbEludGVnZXIo
KSBjb25zdCB7IHJldHVybiB2YWx1ZTxpbnQsIGludD4oKTsgfQorICAgIGNvbnN0IFNWR0xlbmd0
aFZhbHVlJiBsZW5ndGgoKSBjb25zdCB7IHJldHVybiAqdmFsdWU8U1ZHTGVuZ3RoVmFsdWU+KCk7
IH0KKyAgICBjb25zdCBTVkdMZW5ndGhMaXN0VmFsdWVzJiBsZW5ndGhMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gKnZhbHVlPFNWR0xlbmd0aExpc3RWYWx1ZXM+KCk7IH0KKyAgICBjb25zdCBmbG9hdCYg
bnVtYmVyKCkgY29uc3QgeyByZXR1cm4gKnZhbHVlPGZsb2F0PigpOyB9CisgICAgY29uc3QgU1ZH
TnVtYmVyTGlzdFZhbHVlcyYgbnVtYmVyTGlzdCgpIGNvbnN0IHsgcmV0dXJuICp2YWx1ZTxTVkdO
dW1iZXJMaXN0VmFsdWVzPigpOyB9CisgICAgY29uc3Qgc3RkOjpwYWlyPGZsb2F0KiwgZmxvYXQq
PiYgbnVtYmVyT3B0aW9uYWxOdW1iZXIoKSBjb25zdCB7IHJldHVybiB2YWx1ZTxmbG9hdCwgZmxv
YXQ+KCk7IH0KKyAgICBjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSogcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIHZhbHVlPFNWR1BhdGhCeXRlU3RyZWFtPigpOyB9CisgICAgY29uc3QgU1ZHUG9pbnRMaXN0
VmFsdWVzJiBwb2ludExpc3QoKSBjb25zdCB7IHJldHVybiAqdmFsdWU8U1ZHUG9pbnRMaXN0VmFs
dWVzPigpOyB9CisgICAgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gKnZhbHVlPFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZT4oKTsgfQorICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
ICp2YWx1ZTxGbG9hdFJlY3Q+KCk7IH0KKyAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0
IHsgcmV0dXJuICp2YWx1ZTxTdHJpbmc+KCk7IH0KKyAgICBjb25zdCBTVkdUcmFuc2Zvcm1MaXN0
VmFsdWVzJiB0cmFuc2Zvcm1MaXN0KCkgY29uc3QgeyByZXR1cm4gKnZhbHVlPFNWR1RyYW5zZm9y
bUxpc3RWYWx1ZXM+KCk7IH0KIAogICAgIC8vIE11dGFibGUgYWNjZXNzb3JzLgotICAgIHN0ZDo6
cGFpcjxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4mIGFuZ2xlQW5kRW51bWVyYXRpb24oKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZEFuZ2xlKTsKLSAgICAgICAgcmV0
dXJuICptX2RhdGEuYW5nbGVBbmRFbnVtZXJhdGlvbjsKLSAgICB9Ci0KLSAgICBib29sJiBib29s
ZWFuKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRCb29sZWFuKTsK
LSAgICAgICAgcmV0dXJuICptX2RhdGEuYm9vbGVhbjsKLSAgICB9Ci0KLSAgICBDb2xvciYgY29s
b3IoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZENvbG9yKTsKLSAg
ICAgICAgcmV0dXJuICptX2RhdGEuY29sb3I7Ci0gICAgfQotCi0gICAgdW5zaWduZWQmIGVudW1l
cmF0aW9uKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRFbnVtZXJh
dGlvbik7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLmVudW1lcmF0aW9uOwotICAgIH0KLQotICAg
IGludCYgaW50ZWdlcigpCi0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVk
SW50ZWdlcik7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLmludGVnZXI7Ci0gICAgfQotCi0gICAg
c3RkOjpwYWlyPGludCwgaW50PiYgaW50ZWdlck9wdGlvbmFsSW50ZWdlcigpCi0gICAgewotICAg
ICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlcik7Ci0g
ICAgICAgIHJldHVybiAqbV9kYXRhLmludGVnZXJPcHRpb25hbEludGVnZXI7Ci0gICAgfQotCi0g
ICAgU1ZHTGVuZ3RoVmFsdWUmIGxlbmd0aCgpCi0gICAgewotICAgICAgICBBU1NFUlQobV90eXBl
ID09IEFuaW1hdGVkTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEubGVuZ3RoOwotICAg
IH0KKyAgICBzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSosIHVuc2lnbmVkKj4mIGFuZ2xlQW5kRW51
bWVyYXRpb24oKSB7IHJldHVybiB2YWx1ZTxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4oKTsgfQor
ICAgIGJvb2wmIGJvb2xlYW4oKSB7IHJldHVybiAqdmFsdWU8Ym9vbD4oKTsgfQorICAgIENvbG9y
JiBjb2xvcigpIHsgcmV0dXJuICp2YWx1ZTxDb2xvcj4oKTsgfQorICAgIHVuc2lnbmVkJiBlbnVt
ZXJhdGlvbigpIHsgcmV0dXJuICp2YWx1ZTx1bnNpZ25lZD4oKTsgfQorICAgIGludCYgaW50ZWdl
cigpIHsgcmV0dXJuICp2YWx1ZTxpbnQ+KCk7IH0KKyAgICBzdGQ6OnBhaXI8aW50KiwgaW50Kj4m
IGludGVnZXJPcHRpb25hbEludGVnZXIoKSB7IHJldHVybiB2YWx1ZTxpbnQsIGludD4oKTsgfQor
ICAgIFNWR0xlbmd0aFZhbHVlJiBsZW5ndGgoKSB7IHJldHVybiAqdmFsdWU8U1ZHTGVuZ3RoVmFs
dWU+KCk7IH0KKyAgICBTVkdMZW5ndGhMaXN0VmFsdWVzJiBsZW5ndGhMaXN0KCkgeyByZXR1cm4g
KnZhbHVlPFNWR0xlbmd0aExpc3RWYWx1ZXM+KCk7IH0KKyAgICBmbG9hdCYgbnVtYmVyKCkgeyBy
ZXR1cm4gKnZhbHVlPGZsb2F0PigpOyB9CisgICAgU1ZHTnVtYmVyTGlzdFZhbHVlcyYgbnVtYmVy
TGlzdCgpIHsgcmV0dXJuICp2YWx1ZTxTVkdOdW1iZXJMaXN0VmFsdWVzPigpOyB9CisgICAgc3Rk
OjpwYWlyPGZsb2F0KiwgZmxvYXQqPiYgbnVtYmVyT3B0aW9uYWxOdW1iZXIoKSB7IHJldHVybiB2
YWx1ZTxmbG9hdCwgZmxvYXQ+KCk7IH0KKyAgICBTVkdQYXRoQnl0ZVN0cmVhbSogcGF0aCgpIHsg
cmV0dXJuIHZhbHVlPFNWR1BhdGhCeXRlU3RyZWFtPigpOyB9CisgICAgU1ZHUG9pbnRMaXN0VmFs
dWVzJiBwb2ludExpc3QoKSB7IHJldHVybiAqdmFsdWU8U1ZHUG9pbnRMaXN0VmFsdWVzPigpOyB9
CisgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkg
eyByZXR1cm4gKnZhbHVlPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4oKTsgfQorICAgIEZs
b2F0UmVjdCYgcmVjdCgpIHsgcmV0dXJuICp2YWx1ZTxGbG9hdFJlY3Q+KCk7IH0KKyAgICBTdHJp
bmcmIHN0cmluZygpIHsgcmV0dXJuICp2YWx1ZTxTdHJpbmc+KCk7IH0KKyAgICBTVkdUcmFuc2Zv
cm1MaXN0VmFsdWVzJiB0cmFuc2Zvcm1MaXN0KCkgeyByZXR1cm4gKnZhbHVlPFNWR1RyYW5zZm9y
bUxpc3RWYWx1ZXM+KCk7IH0KIAotICAgIFNWR0xlbmd0aExpc3RWYWx1ZXMmIGxlbmd0aExpc3Qo
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZExlbmd0aExpc3QpOwot
ICAgICAgICByZXR1cm4gKm1fZGF0YS5sZW5ndGhMaXN0OwotICAgIH0KLQotICAgIGZsb2F0JiBu
dW1iZXIoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZE51bWJlcik7
Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLm51bWJlcjsKLSAgICB9CisgICAgU3RyaW5nIHZhbHVl
QXNTdHJpbmcoKTsKKyAgICBib29sIHNldFZhbHVlQXNTdHJpbmcoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgU1ZHTnVtYmVyTGlzdFZhbHVlcyYgbnVtYmVyTGlz
dCgpCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgU1ZHQW5pbWF0ZWRU
eXBlKHN0ZDo6dW5pcXVlX3B0cjxUPiYmIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUu
cmVsZWFzZSgpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZE51bWJl
ckxpc3QpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5udW1iZXJMaXN0OwogICAgIH0KLQotICAg
IHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+JiBudW1iZXJPcHRpb25hbE51bWJlcigpCisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBTVkdBbmltYXRlZFR5cGUoVCYgdmFsdWUpCisg
ICAgICAgIDogbV92YWx1ZSgmdmFsdWUpCisgICAgICAgICwgbV9vd25zVmFsdWUoZmFsc2UpCiAg
ICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1i
ZXIpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5udW1iZXJPcHRpb25hbE51bWJlcjsKICAgICB9
CiAKLSAgICBTVkdQYXRoQnl0ZVN0cmVhbSogcGF0aCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyPgorICAgIFNWR0FuaW1hdGVkVHlwZShzdGQ6OnVuaXF1ZV9wdHI8VDE+
JiYgdmFsdWUxLCBzdGQ6OnVuaXF1ZV9wdHI8VDI+JiYgdmFsdWUyKQorICAgICAgICA6IG1fdmFs
dWUoc3RkOjpwYWlyPFQxKiwgVDIqPih2YWx1ZTEucmVsZWFzZSgpLCB2YWx1ZTIucmVsZWFzZSgp
KSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRQYXRoKTsKLSAgICAg
ICAgcmV0dXJuIG1fZGF0YS5wYXRoOwogICAgIH0KIAotICAgIFNWR1BvaW50TGlzdFZhbHVlcyYg
cG9pbnRMaXN0KCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgICAg
U1ZHQW5pbWF0ZWRUeXBlKFQxJiB2YWx1ZTEsIFQyJiB2YWx1ZTIpCisgICAgICAgIDogbV92YWx1
ZShzdGQ6OnBhaXI8VDEqLCBUMio+KCZ2YWx1ZTEsICZ2YWx1ZTIpKQorICAgICAgICAsIG1fb3du
c1ZhbHVlKGZhbHNlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFBv
aW50cyk7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLnBvaW50TGlzdDsKICAgICB9CiAKLSAgICBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8oKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogdmFsdWUoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8pOwotICAg
ICAgICByZXR1cm4gKm1fZGF0YS5wcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgICAgICBBU1NFUlQo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxUKj4obV92YWx1ZSkpOworICAgICAgICByZXR1cm4gV1RG
OjpnZXQ8VCo+KG1fdmFsdWUpOwogICAgIH0KLQotICAgIEZsb2F0UmVjdCYgcmVjdCgpCisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiB2YWx1ZSgpCiAgICAgewotICAgICAg
ICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkUmVjdCk7Ci0gICAgICAgIHJldHVybiAqbV9kYXRh
LnJlY3Q7CisgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFQqPihtX3ZhbHVl
KSk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxUKj4obV92YWx1ZSk7CiAgICAgfQogCi0gICAg
U3RyaW5nJiBzdHJpbmcoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4K
KyAgICBjb25zdCBzdGQ6OnBhaXI8VDEqLCBUMio+JiB2YWx1ZSgpIGNvbnN0CiAgICAgewotICAg
ICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuICpt
X2RhdGEuc3RyaW5nOworICAgICAgICBBU1NFUlQoKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3Rk
OjpwYWlyPFQxKiwgVDIqPj4obV92YWx1ZSkpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6Z2V0PHN0
ZDo6cGFpcjxUMSosIFQyKj4+KG1fdmFsdWUpOwogICAgIH0KLQotICAgIFNWR1RyYW5zZm9ybUxp
c3RWYWx1ZXMmIHRyYW5zZm9ybUxpc3QoKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQx
LCB0eXBlbmFtZSBUMj4KKyAgICBzdGQ6OnBhaXI8VDEqLCBUMio+JiB2YWx1ZSgpCiAgICAgewot
ICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkVHJhbnNmb3JtTGlzdCk7Ci0gICAgICAg
IHJldHVybiAqbV9kYXRhLnRyYW5zZm9ybUxpc3Q7CisgICAgICAgIEFTU0VSVCgoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxzdGQ6OnBhaXI8VDEqLCBUMio+PihtX3ZhbHVlKSkpOworICAgICAgICBy
ZXR1cm4gV1RGOjpnZXQ8c3RkOjpwYWlyPFQxKiwgVDIqPj4obV92YWx1ZSk7CiAgICAgfQogCi0g
ICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKTsKLSAgICBib29sIHNldFZhbHVlQXNTdHJpbmcoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYpOwotCi1wcml2YXRlOgotICAgIEFuaW1h
dGVkUHJvcGVydHlUeXBlIG1fdHlwZTsKLQotICAgIHVuaW9uIERhdGFVbmlvbiB7Ci0gICAgICAg
IERhdGFVbmlvbigpCi0gICAgICAgICAgICA6IGxlbmd0aChudWxscHRyKQotICAgICAgICB7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+KiBh
bmdsZUFuZEVudW1lcmF0aW9uOwotICAgICAgICBib29sKiBib29sZWFuOwotICAgICAgICBDb2xv
ciogY29sb3I7Ci0gICAgICAgIHVuc2lnbmVkKiBlbnVtZXJhdGlvbjsKLSAgICAgICAgaW50KiBp
bnRlZ2VyOwotICAgICAgICBzdGQ6OnBhaXI8aW50LCBpbnQ+KiBpbnRlZ2VyT3B0aW9uYWxJbnRl
Z2VyOwotICAgICAgICBTVkdMZW5ndGhWYWx1ZSogbGVuZ3RoOwotICAgICAgICBTVkdMZW5ndGhM
aXN0VmFsdWVzKiBsZW5ndGhMaXN0OwotICAgICAgICBmbG9hdCogbnVtYmVyOwotICAgICAgICBT
VkdOdW1iZXJMaXN0VmFsdWVzKiBudW1iZXJMaXN0OwotICAgICAgICBzdGQ6OnBhaXI8ZmxvYXQs
IGZsb2F0PiogbnVtYmVyT3B0aW9uYWxOdW1iZXI7Ci0gICAgICAgIFNWR1BhdGhCeXRlU3RyZWFt
KiBwYXRoOwotICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUqIHByZXNlcnZlQXNw
ZWN0UmF0aW87Ci0gICAgICAgIFNWR1BvaW50TGlzdFZhbHVlcyogcG9pbnRMaXN0OwotICAgICAg
ICBGbG9hdFJlY3QqIHJlY3Q7Ci0gICAgICAgIFN0cmluZyogc3RyaW5nOwotICAgICAgICBTVkdU
cmFuc2Zvcm1MaXN0VmFsdWVzKiB0cmFuc2Zvcm1MaXN0OwotICAgIH0gbV9kYXRhOworICAgIFZh
cmlhbnQ8CisgICAgICAgIHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlKiwgdW5zaWduZWQqPiwKKyAg
ICAgICAgYm9vbCosCisgICAgICAgIENvbG9yKiwKKyAgICAgICAgdW5zaWduZWQqLAorICAgICAg
ICBpbnQqLAorICAgICAgICBzdGQ6OnBhaXI8aW50KiwgaW50Kj4sCisgICAgICAgIFNWR0xlbmd0
aFZhbHVlKiwKKyAgICAgICAgU1ZHTGVuZ3RoTGlzdFZhbHVlcyosCisgICAgICAgIGZsb2F0KiwK
KyAgICAgICAgU1ZHTnVtYmVyTGlzdFZhbHVlcyosCisgICAgICAgIHN0ZDo6cGFpcjxmbG9hdCos
IGZsb2F0Kj4sCisgICAgICAgIFNWR1BhdGhCeXRlU3RyZWFtKiwKKyAgICAgICAgU1ZHUG9pbnRM
aXN0VmFsdWVzKiwKKyAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKiwKKyAgICAg
ICAgRmxvYXRSZWN0KiwKKyAgICAgICAgU3RyaW5nKiwKKyAgICAgICAgU1ZHVHJhbnNmb3JtTGlz
dFZhbHVlcyoKKyAgICA+IG1fdmFsdWU7CisgICAgCisgICAgYm9vbCBtX293bnNWYWx1ZSB7IHRy
dWUgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGVBbmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmgKaW5kZXggY2I3MzUyNjMyYWE1ZTA1NzRkZmNhMjI1
YzU1Mjc4NmE3M2E5Yjc4NS4uY2U1MzJlNDVmZTI2NjRlZWU3OTk0ZjY2ODFjMjVmZjE4YmMyZGM2
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmgKQEAg
LTYzLDE0ICs2MywxOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBIZWxwZXJzIGZvciBhbmltYXRv
cnMgdGhhdCBvcGVyYXRlIG9uIHNpbmdsZSB0eXBlcywgZWcuIGp1c3Qgb25lIFNWR0FuaW1hdGVk
SW50ZWdlci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBbmltVmFsVHlwZT4KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8dHlwZW5hbWUgQW5pbVZhbFR5cGU6OkNvbnRlbnRUeXBlPiBjb25zdHJ1Y3RGcm9t
QmFzZVZhbHVlKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRU
eXBlcykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjb25zdHJ1Y3RGcm9t
QmFzZVZhbHVlKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRU
eXBlcykKICAgICB7CiAgICAgICAgIEFTU0VSVChhbmltYXRlZFR5cGVzWzBdLnByb3BlcnRpZXMu
c2l6ZSgpID09IDEpOwotICAgICAgICBjb25zdCB0eXBlbmFtZSBBbmltVmFsVHlwZTo6Q29udGVu
dFR5cGUmIGFuaW1hdGVkVHlwZSA9IGNhc3RBbmltYXRlZFByb3BlcnR5VG9BY3R1YWxUeXBlPEFu
aW1WYWxUeXBlPihhbmltYXRlZFR5cGVzWzBdLnByb3BlcnRpZXNbMF0uZ2V0KCkpLT5jdXJyZW50
QmFzZVZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBjb25zdCBBbmltVmFsVHlwZSogcHJvcGVy
dHkgPSBjYXN0QW5pbWF0ZWRQcm9wZXJ0eVRvQWN0dWFsVHlwZTxBbmltVmFsVHlwZT4oYW5pbWF0
ZWRUeXBlc1swXS5wcm9wZXJ0aWVzWzBdLmdldCgpKTsKKyAgICAgICAgaWYgKHByb3BlcnR5LT5p
c0FuaW1hdGluZygpKQorICAgICAgICAgICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRl
KHByb3BlcnR5LT5jdXJyZW50QW5pbWF0ZWRWYWx1ZSgpKTsKIAotICAgICAgICBhdXRvIGNvcHkg
PSBzdGQ6Om1ha2VfdW5pcXVlPHR5cGVuYW1lIEFuaW1WYWxUeXBlOjpDb250ZW50VHlwZT4oYW5p
bWF0ZWRUeXBlKTsKLSAgICAgICAgZXhlY3V0ZUFjdGlvbjxBbmltVmFsVHlwZT4oU3RhcnRBbmlt
YXRpb25BY3Rpb24sIGFuaW1hdGVkVHlwZXMsIDAsIGNvcHkuZ2V0KCkpOwotICAgICAgICByZXR1
cm4gY29weTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8dHlwZW5hbWUg
QW5pbVZhbFR5cGU6OkNvbnRlbnRUeXBlPihwcm9wZXJ0eS0+Y3VycmVudEJhc2VWYWx1ZSgpKTsK
KworICAgICAgICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBlPihTdGFydEFuaW1hdGlvbkFjdGlv
biwgYW5pbWF0ZWRUeXBlcywgMCwgdmFsdWUuZ2V0KCkpOworICAgICAgICByZXR1cm4gU1ZHQW5p
bWF0ZWRUeXBlOjpjcmVhdGUoV1RGTW92ZSh2YWx1ZSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEFuaW1WYWxUeXBlPgpAQCAtMTA3LDMwICsxMTEsMzUgQEAgcHJvdGVjdGVkOgog
CiAgICAgLy8gSGVscGVycyBmb3IgYW5pbWF0b3JzIHRoYXQgb3BlcmF0ZSBvbiBwYWlyIHR5cGVz
LCBlZy4gYSBwYWlyIG9mIFNWR0FuaW1hdGVkSW50ZWdlcnMuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQW5pbVZhbFR5cGUxLCB0eXBlbmFtZSBBbmltVmFsVHlwZTI+Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPHN0ZDo6cGFpcjx0eXBlbmFtZSBBbmltVmFsVHlwZTE6OkNvbnRlbnRUeXBlLCB0eXBlbmFt
ZSBBbmltVmFsVHlwZTI6OkNvbnRlbnRUeXBlPj4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZXMoY29u
c3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNvbnN0cnVjdEZyb21CYXNlVmFsdWVzKGNv
bnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKICAgICB7
CiAgICAgICAgIEFTU0VSVChhbmltYXRlZFR5cGVzWzBdLnByb3BlcnRpZXMuc2l6ZSgpID09IDIp
OwotICAgICAgICBjb25zdCB0eXBlbmFtZSBBbmltVmFsVHlwZTE6OkNvbnRlbnRUeXBlJiBmaXJz
dFR5cGUgPSBjYXN0QW5pbWF0ZWRQcm9wZXJ0eVRvQWN0dWFsVHlwZTxBbmltVmFsVHlwZTE+KGFu
aW1hdGVkVHlwZXNbMF0ucHJvcGVydGllc1swXS5nZXQoKSktPmN1cnJlbnRCYXNlVmFsdWUoKTsK
LSAgICAgICAgY29uc3QgdHlwZW5hbWUgQW5pbVZhbFR5cGUyOjpDb250ZW50VHlwZSYgc2Vjb25k
VHlwZSA9IGNhc3RBbmltYXRlZFByb3BlcnR5VG9BY3R1YWxUeXBlPEFuaW1WYWxUeXBlMj4oYW5p
bWF0ZWRUeXBlc1swXS5wcm9wZXJ0aWVzWzFdLmdldCgpKS0+Y3VycmVudEJhc2VWYWx1ZSgpOwot
Ci0gICAgICAgIGF1dG8gY29weSA9IHN0ZDo6bWFrZV91bmlxdWU8c3RkOjpwYWlyPHR5cGVuYW1l
IEFuaW1WYWxUeXBlMTo6Q29udGVudFR5cGUsIHR5cGVuYW1lIEFuaW1WYWxUeXBlMjo6Q29udGVu
dFR5cGU+PihmaXJzdFR5cGUsIHNlY29uZFR5cGUpOwotICAgICAgICBleGVjdXRlQWN0aW9uPEFu
aW1WYWxUeXBlMT4oU3RhcnRBbmltYXRpb25BY3Rpb24sIGFuaW1hdGVkVHlwZXMsIDAsICZjb3B5
LT5maXJzdCk7Ci0gICAgICAgIGV4ZWN1dGVBY3Rpb248QW5pbVZhbFR5cGUyPihTdGFydEFuaW1h
dGlvbkFjdGlvbiwgYW5pbWF0ZWRUeXBlcywgMSwgJmNvcHktPnNlY29uZCk7Ci0gICAgICAgIHJl
dHVybiBjb3B5OworICAgICAgICAKKyAgICAgICAgY29uc3QgQW5pbVZhbFR5cGUxKiBmaXJzdFBy
b3BlcnR5ID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5cGU8QW5pbVZhbFR5cGUxPihh
bmltYXRlZFR5cGVzWzBdLnByb3BlcnRpZXNbMF0uZ2V0KCkpOworICAgICAgICBjb25zdCBBbmlt
VmFsVHlwZTIqIHNlY29uZFByb3BlcnR5ID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5
cGU8QW5pbVZhbFR5cGUyPihhbmltYXRlZFR5cGVzWzBdLnByb3BlcnRpZXNbMV0uZ2V0KCkpOwor
ICAgICAgICBpZiAoZmlyc3RQcm9wZXJ0eS0+aXNBbmltYXRpbmcoKSAmJiBzZWNvbmRQcm9wZXJ0
eS0+aXNBbmltYXRpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNy
ZWF0ZShmaXJzdFByb3BlcnR5LT5jdXJyZW50QW5pbWF0ZWRWYWx1ZSgpLCBzZWNvbmRQcm9wZXJ0
eS0+Y3VycmVudEFuaW1hdGVkVmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICBhdXRvIGZpcnN0
VmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPHR5cGVuYW1lIEFuaW1WYWxUeXBlMTo6Q29udGVudFR5
cGU+KGZpcnN0UHJvcGVydHktPmN1cnJlbnRCYXNlVmFsdWUoKSk7CisgICAgICAgIGF1dG8gc2Vj
b25kVmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPHR5cGVuYW1lIEFuaW1WYWxUeXBlMjo6Q29udGVu
dFR5cGU+KHNlY29uZFByb3BlcnR5LT5jdXJyZW50QmFzZVZhbHVlKCkpOworICAgICAgICAKKyAg
ICAgICAgZXhlY3V0ZUFjdGlvbjxBbmltVmFsVHlwZTE+KFN0YXJ0QW5pbWF0aW9uQWN0aW9uLCBh
bmltYXRlZFR5cGVzLCAwLCBmaXJzdFZhbHVlLmdldCgpKTsKKyAgICAgICAgZXhlY3V0ZUFjdGlv
bjxBbmltVmFsVHlwZTI+KFN0YXJ0QW5pbWF0aW9uQWN0aW9uLCBhbmltYXRlZFR5cGVzLCAxLCBz
ZWNvbmRWYWx1ZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0
ZShXVEZNb3ZlKGZpcnN0VmFsdWUpLCBXVEZNb3ZlKHNlY29uZFZhbHVlKSk7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQW5pbVZhbFR5cGUxLCB0eXBlbmFtZSBBbmltVmFsVHlwZTI+
Ci0gICAgdm9pZCByZXNldEZyb21CYXNlVmFsdWVzKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFBy
b3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcywgU1ZHQW5pbWF0ZWRUeXBlJiB0eXBlLCBzdGQ6OnBh
aXI8dHlwZW5hbWUgQW5pbVZhbFR5cGUxOjpDb250ZW50VHlwZSwgdHlwZW5hbWUgQW5pbVZhbFR5
cGUyOjpDb250ZW50VHlwZT4mIChTVkdBbmltYXRlZFR5cGU6OipnZXR0ZXIpKCkpCisgICAgdm9p
ZCByZXNldEZyb21CYXNlVmFsdWVzKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlz
dCYgYW5pbWF0ZWRUeXBlcywgU1ZHQW5pbWF0ZWRUeXBlJiB0eXBlLCBzdGQ6OnBhaXI8dHlwZW5h
bWUgQW5pbVZhbFR5cGUxOjpDb250ZW50VHlwZSosIHR5cGVuYW1lIEFuaW1WYWxUeXBlMjo6Q29u
dGVudFR5cGUqPiYgKFNWR0FuaW1hdGVkVHlwZTo6KmdldHRlcikoKSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChhbmltYXRlZFR5cGVzWzBdLnByb3BlcnRpZXMuc2l6ZSgpID09IDIpOwogICAgICAg
ICBBU1NFUlQodHlwZS50eXBlKCkgPT0gbV90eXBlKTsKIAotICAgICAgICBzdGQ6OnBhaXI8dHlw
ZW5hbWUgQW5pbVZhbFR5cGUxOjpDb250ZW50VHlwZSwgdHlwZW5hbWUgQW5pbVZhbFR5cGUyOjpD
b250ZW50VHlwZT4mIGFuaW1hdGVkVHlwZVZhbHVlID0gKHR5cGUuKmdldHRlcikoKTsKLSAgICAg
ICAgYW5pbWF0ZWRUeXBlVmFsdWUuZmlyc3QgPSBjYXN0QW5pbWF0ZWRQcm9wZXJ0eVRvQWN0dWFs
VHlwZTxBbmltVmFsVHlwZTE+KGFuaW1hdGVkVHlwZXNbMF0ucHJvcGVydGllc1swXS5nZXQoKSkt
PmN1cnJlbnRCYXNlVmFsdWUoKTsKLSAgICAgICAgYW5pbWF0ZWRUeXBlVmFsdWUuc2Vjb25kID0g
Y2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5cGU8QW5pbVZhbFR5cGUyPihhbmltYXRlZFR5
cGVzWzBdLnByb3BlcnRpZXNbMV0uZ2V0KCkpLT5jdXJyZW50QmFzZVZhbHVlKCk7CisgICAgICAg
IHN0ZDo6cGFpcjx0eXBlbmFtZSBBbmltVmFsVHlwZTE6OkNvbnRlbnRUeXBlKiwgdHlwZW5hbWUg
QW5pbVZhbFR5cGUyOjpDb250ZW50VHlwZSo+JiBhbmltYXRlZFR5cGVWYWx1ZSA9ICh0eXBlLipn
ZXR0ZXIpKCk7CisgICAgICAgICphbmltYXRlZFR5cGVWYWx1ZS5maXJzdCA9IGNhc3RBbmltYXRl
ZFByb3BlcnR5VG9BY3R1YWxUeXBlPEFuaW1WYWxUeXBlMT4oYW5pbWF0ZWRUeXBlc1swXS5wcm9w
ZXJ0aWVzWzBdLmdldCgpKS0+Y3VycmVudEJhc2VWYWx1ZSgpOworICAgICAgICAqYW5pbWF0ZWRU
eXBlVmFsdWUuc2Vjb25kID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5cGU8QW5pbVZh
bFR5cGUyPihhbmltYXRlZFR5cGVzWzBdLnByb3BlcnRpZXNbMV0uZ2V0KCkpLT5jdXJyZW50QmFz
ZVZhbHVlKCk7CiAKLSAgICAgICAgZXhlY3V0ZUFjdGlvbjxBbmltVmFsVHlwZTE+KFN0YXJ0QW5p
bWF0aW9uQWN0aW9uLCBhbmltYXRlZFR5cGVzLCAwLCAmYW5pbWF0ZWRUeXBlVmFsdWUuZmlyc3Qp
OwotICAgICAgICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBlMj4oU3RhcnRBbmltYXRpb25BY3Rp
b24sIGFuaW1hdGVkVHlwZXMsIDEsICZhbmltYXRlZFR5cGVWYWx1ZS5zZWNvbmQpOworICAgICAg
ICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBlMT4oU3RhcnRBbmltYXRpb25BY3Rpb24sIGFuaW1h
dGVkVHlwZXMsIDAsIGFuaW1hdGVkVHlwZVZhbHVlLmZpcnN0KTsKKyAgICAgICAgZXhlY3V0ZUFj
dGlvbjxBbmltVmFsVHlwZTI+KFN0YXJ0QW5pbWF0aW9uQWN0aW9uLCBhbmltYXRlZFR5cGVzLCAx
LCBhbmltYXRlZFR5cGVWYWx1ZS5zZWNvbmQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEFuaW1WYWxUeXBlMSwgdHlwZW5hbWUgQW5pbVZhbFR5cGUyPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2Zm
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZExpc3RQcm9wZXJ0
eVRlYXJPZmYuaAppbmRleCAwY2U5OTM3OTMxZDc2MTk4MDRmMWYzNDc1OWNiOTAxN2QwNTkxZTBk
Li5mMzQ5NDE3MDMzMDFhNzgxM2VhMGQ0ZTIzMjE4OTcyMDMyN2Q4YjllIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJP
ZmYuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmYuaApAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIExpc3RQ
cm9wZXJ0eTo6ZGV0YWNoTGlzdFdyYXBwZXJzQW5kUmVzaXplKCZtX3dyYXBwZXJzLCBuZXdMaXN0
U2l6ZSk7CiAgICAgfQogCi0gICAgUHJvcGVydHlUeXBlJiBjdXJyZW50QW5pbWF0ZWRWYWx1ZSgp
CisgICAgUHJvcGVydHlUeXBlJiBjdXJyZW50QW5pbWF0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoaXNBbmltYXRpbmcoKSk7CiAgICAgICAgIHJldHVybiBtX2FuaW1hdGVk
UHJvcGVydHktPnZhbHVlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmYuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmLmgKaW5kZXggZmM2MmM5ZGE0ZmEw
ZDVhOTU0MzcwODQ1MWM1N2JiNGMzYTZhNDgyNC4uNzE5NGYwZjEyODQyZjNlZDk4MGFlMGVmOGE4
Y2EwZWQzNjZhMmZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmYuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZi5oCkBAIC02OCw3ICs2OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fYW5pbVZhbCA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgUHJv
cGVydHlUeXBlJiBjdXJyZW50QW5pbWF0ZWRWYWx1ZSgpCisgICAgUHJvcGVydHlUeXBlJiBjdXJy
ZW50QW5pbWF0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNBbmltYXRp
bmcoKSk7CiAgICAgICAgIHJldHVybiBtX2FuaW1hdGVkUHJvcGVydHktPnByb3BlcnR5UmVmZXJl
bmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZi5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaAppbmRleCBjNWIyZmQ5MDY0NjYz
MDQ2ZmUxM2NmMGQzNTA0M2M4OTJhNzgyMGNjLi5iOWIwNjQyMTYyOWRiMjdhMDgzODBlYWVlMmIw
ZDhlZGY5OGY3ZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlUZWFyT2ZmLmgKQEAgLTU3LDcg
KzU3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdBbmltYXRl
ZFN0YXRpY1Byb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+KGNvbnRleHRFbGVtZW50LCBhdHRy
aWJ1dGVOYW1lLCBhbmltYXRlZFByb3BlcnR5VHlwZSwgcHJvcGVydHkpKTsKICAgICB9CiAKLSAg
ICBQcm9wZXJ0eVR5cGUmIGN1cnJlbnRBbmltYXRlZFZhbHVlKCkKKyAgICBQcm9wZXJ0eVR5cGUm
IGN1cnJlbnRBbmltYXRlZFZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0Fu
aW1hdGluZygpKTsKICAgICAgICAgcmV0dXJuICptX2FuaW1hdGVkUHJvcGVydHk7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
MmVhYTExZjNhN2U3MGVlZDhiMmFjMjFlN2Y5MjliZGMyNWI2N2I5OS4uNjA5NDFiNzE1OTAzOWJl
MjJlMzkxYjVmOTdjNDk4ZGZlOGM5ZmRlMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE3LTAx
LTI5ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAg
ICAgU1ZHIEFuaW1hdGlvbiAoU01JTCkgb24gWE1MIGFuaW1hdGluZyBwcm9wZXJ0aWVzIGRvZXNu
J3Qgd29yayBvbiBzZWNvbmQgcnVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTAzODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NtaWwtbXVsdGlwbGUtYW5pbWF0ZS1saXN0
LWV4cGVjdGVkLnN2ZzogQWRkZWQuCisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc21pbC1tdWx0
aXBsZS1hbmltYXRlLWxpc3Quc3ZnOiBBZGRlZC4KKwogMjAxNy0wMS0yNCAgUnlhbiBIYWRkYWQg
IDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBtb2Rlcm4tbWVkaWEtY29udHJvbHMg
TGF5b3V0VGVzdCBnYXJkZW5pbmcuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0
aW9ucy9zbWlsLW11bHRpcGxlLWFuaW1hdGUtbGlzdC1leHBlY3RlZC5zdmcgYi9MYXlvdXRUZXN0
cy9zdmcvYW5pbWF0aW9ucy9zbWlsLW11bHRpcGxlLWFuaW1hdGUtbGlzdC1leHBlY3RlZC5zdmcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGNmZjNmMTY5OTc1YzAxN2M4NjAzMDFiZjI4ODFkMTIwNTI3ODIwYQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NtaWwtbXVsdGlwbGUt
YW5pbWF0ZS1saXN0LWV4cGVjdGVkLnN2ZwpAQCAtMCwwICsxLDYgQEAKKzxzdmcgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KKyAgICA8dGV4dCBkb21pbmFudC1iYXNlbGluZT0i
aGFuZ2luZyIgeD0iMjAiIHk9IjE0MCIgZm9udC1zaXplPSI0NHB4Ij4KKyAgICAgICAgRm9vCisg
ICAgPC90ZXh0PgorICAgIDxsaW5lIHgxPSIxMDAiIHkxPSIxNjAiIHgyPSIyMDAiIHkyPSIxNjAi
IHN0cm9rZT0iZ3JlZW4iIHN0cm9rZS13aWR0aD0iMTAwIi8+Cis8L3N2Zz4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9z
bWlsLW11bHRpcGxlLWFuaW1hdGUtbGlzdC5zdmcgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9u
cy9zbWlsLW11bHRpcGxlLWFuaW1hdGUtbGlzdC5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA4MGJhMjJlOGJk
N2Q4MDUzMmM3ZGJmYmI4MzMxMTI4NDM0MTUxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N2Zy9hbmltYXRpb25zL3NtaWwtbXVsdGlwbGUtYW5pbWF0ZS1saXN0LnN2ZwpAQCAtMCww
ICsxLDU1IEBACis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CisgICAg
PHRleHQgZG9taW5hbnQtYmFzZWxpbmU9ImhhbmdpbmciIHg9IjIwIiB5PSI0MCIgZm9udC1zaXpl
PSI0NHB4Ij4KKyAgICAgICAgRm9vCisgICAgICAgIDxhbmltYXRlIGlkPSJkb3duMSIgYXR0cmli
dXRlTmFtZT0ieSIgZmlsbD0iZnJlZXplIiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVyPSIyMG1zIiB0
bz0iMTQwIi8+CisgICAgICAgIDxhbmltYXRlIGlkPSJ1cDEiIGF0dHJpYnV0ZU5hbWU9InkiIGZp
bGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5pdGUiIGR1cj0iMjBtcyIgdG89IjQwIi8+CisgICAg
PC90ZXh0PgorICAgIDxsaW5lIHgxPSIxMDAiIHkxPSI2MCIgeDI9IjIwMCIgeTI9IjYwIiBzdHJv
a2U9ImdyZWVuIiBzdHJva2Utd2lkdGg9IjEwMCI+CisgICAgICAgIDxhbmltYXRlIGlkPSJkb3du
MiIgYXR0cmlidXRlTmFtZT0ieTEiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5pdGUiIGR1
cj0iMjBtcyIgdG89IjE2MCIvPgorICAgICAgICA8YW5pbWF0ZSBpZD0idXAyIiBhdHRyaWJ1dGVO
YW1lPSJ5MSIgZmlsbD0iZnJlZXplIiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVyPSIyMG1zIiB0bz0i
NjAiLz4KKyAgICAKKyAgICAgICAgPGFuaW1hdGUgaWQ9ImRvd24zIiBhdHRyaWJ1dGVOYW1lPSJ5
MiIgZmlsbD0iZnJlZXplIiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVyPSIyMG1zIiB0bz0iMTYwIi8+
CisgICAgICAgIDxhbmltYXRlIGlkPSJ1cDMiIGF0dHJpYnV0ZU5hbWU9InkyIiBmaWxsPSJmcmVl
emUiIGJlZ2luPSJpbmRlZmluaXRlIiBkdXI9IjIwbXMiIHRvPSI2MCIvPgorICAgIDwvbGluZT4K
KyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgPCFbQ0RBVEFbCisgICAg
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVu
dGlsRG9uZSgpOworCisgICAgICAgIHZhciBncm91cHMgPSBbCisgICAgICAgICAgICB7IGRvd246
ICJkb3duMSIsIHVwOiAidXAxIiB9LAorICAgICAgICAgICAgeyBkb3duOiAiZG93bjIiLCB1cDog
InVwMiIgfSwKKyAgICAgICAgICAgIHsgZG93bjogImRvd24zIiwgdXA6ICJ1cDMiIH0sCisgICAg
ICAgIF07CisKKyAgICAgICAgdmFyIGRvd25Db3VudCA9IDA7CisgICAgICAgIHZhciB1cENvdW50
ID0gMDsKKworICAgICAgICBmb3IgKGxldCBncm91cCBvZiBncm91cHMpIHsKKyAgICAgICAgICAg
IGxldCBkb3duID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZ3JvdXAuZG93bik7CisgICAgICAg
ICAgICBsZXQgdXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChncm91cC51cCk7CisKKyAgICAg
ICAgICAgIGRvd24uYWRkRXZlbnRMaXN0ZW5lcigiZW5kRXZlbnQiLCAoKSA9PiB7CisgICAgICAg
ICAgICAgICAgaWYgKCsrZG93bkNvdW50IDw9IGdyb3Vwcy5sZW5ndGgpCisgICAgICAgICAgICAg
ICAgICAgIHRvZ2dsZSh1cCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAgICAgICAgICBpZiAoZG93bkNv
dW50ID09IGdyb3Vwcy5sZW5ndGggKiAyKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHVwLmFkZEV2ZW50TGlzdGVuZXIoImVuZEV2ZW50Iiwg
KCkgPT4geworICAgICAgICAgICAgICAgIGlmICgrK3VwQ291bnQgPD0gZ3JvdXBzLmxlbmd0aCkK
KyAgICAgICAgICAgICAgICAgICAgdG9nZ2xlKGRvd24pOworICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgIGRvd24uYmVnaW5FbGVtZW50KCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiB0b2dnbGUobmV3RWxlbWVudCkgeworICAgICAgICAgICAgbmV3RWxlbWVudC5iZWdpbkVs
ZW1lbnQoKTsKKyAgICAgICAgfQorICAgIF1dPgorICAgIDwvc2NyaXB0PgorPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300084</attachid>
            <date>2017-01-29 19:59:40 -0800</date>
            <delta_ts>2017-02-06 11:51:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150388-20170129195732.patch</filename>
            <type>text/plain</type>
            <size>94263</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExMDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2MyOTdkNGY4N2MzNzM1
MDVlOTA5MTRiZjc3MWRkNDdjYWU0ZWRkYi4uNWNlZTIzMzAyZTNiZGVjMzQzYzA1ZDJiNzgyYzVj
NDMxMDgwNDhjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBAQAorMjAxNy0wMS0yOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNWRyBB
bmltYXRpb24gKFNNSUwpIG9uIFhNTCBhbmltYXRpbmcgcHJvcGVydGllcyBkb2Vzbid0IHdvcmsg
b24gc2Vjb25kIHJ1bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlIHByb2JsZW0gaGFwcGVucyB3aGVuIGFuaW1hdGluZyBhbiBYTUxBbmltYXRpb24g
YXR0cmlidXRlIHdpdGggbXVsdGlwbGUKKyAgICAgICAgU1ZHQW5pbWF0aW9uRWxlbWVudHMuIFRo
ZSBhbmltYXRpb25TdGFydGVkKCkgb2YgdGhlIFRlYXJPZmYgb2JqZWN0IHdpbGwgYmUKKyAgICAg
ICAgY2FsbGVkIG9ubHkgb25jZSB3aXRoIHRoZSB2YWx1ZSBzdG9yZWQgYnkgdGhlIG1fYW5pbWF0
ZWRUeXBlIG9mIHRoZSBmaXJzdAorICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50LiBUaGlzIG1l
YW5zIG5vIG1hdHRlciBob3cgbWFueSBTVkdBbmltYXRpb25FbGVtZW50cyBhcmUKKyAgICAgICAg
YWN0aW5nIG9uIHRoZSBzYW1lIGF0dHJpYnV0ZSwgY2hhbmdpbmcgb25seSBvbmUgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6bV9hbmltYXRlZFByb3BlcnR5CisgICAgICAgIHRocm91Z2ggU1ZHQW5pbWF0
aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uKCkgY2FuIGFmZmVjdCB0aGUgbGF5b3V0IG9mCisg
ICAgICAgIHRoZSBTVkdFbGVtZW50LiBUaGlzIGRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIHByb2Nl
c3NpbmcgdGhlIFNWR0FuaW1hdGlvbkVsZW1lbnRzCisgICAgICAgIGJ5IFNNSUxUaW1lQ29udGFp
bmVyOjp1cGRhdGVBbmltYXRpb25zKCkuIFRoZSBmaXJzdCBTVkdBbmltYXRpb25FbGVtZW50Cisg
ICAgICAgIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgcmVzdWx0RWxlbWVudCBpbiBTTUlMVGltZUNv
bnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucygpLgorICAgICAgICBTbyBpZiB0aGUgZmlyc3QgU1ZH
QW5pbWF0aW9uRWxlbWVudCBoYXBwZW5zIHRvIGJlIHRoZSBmaXJzdCBvbmUgdGhhdCBwb2ludHMK
KyAgICAgICAgb2YgdGhlIHNhbWUgQW5pbWF0ZWRUeXBlIHdoaWNoIHRoZSBTVkdFbGVtZW50IHBy
b3BlcnR5IFRlYXJPZmYgb2JqZWN0IHBvaW50cworICAgICAgICB0bywgdGhlbiB0aGUgYXR0cmli
dXRlIHdpbGwgYmUgYW5pbWF0ZWQuIE90aGVyd2lzZSBubyBhbmltYXRpb24gd2lsbCBoYXBwZW4u
CisKKyAgICAgICAgVGhlIGZpeCBzaG91bGQgYmUgdGhlIGZvbGxvd2luZy4gVGhlIG1fYW5pbWF0
ZWRQcm9wZXJ0eSBvZiBhbGwgdGhlIFNWR0FuaW1hdGlvbkVsZW1lbnRzCisgICAgICAgIHNob3Vs
ZCBwb2ludCB0byB0aGUgc2FtZSBTVkdBbmltYXRlZFR5cGUgb2JqZWN0IHdoaWNoIGlzIGFsc28g
cG9pbnRlZCB0byBieQorICAgICAgICB0aGUgVGVhck9mZiBvYmplY3Qgb2YgdGhlIGF0dHJpYnV0
ZSBvZiB0aGUgU1ZHRWxlbWVudC4gVGhpcyBjYW4gYmUgZG9uZSBpZgorICAgICAgICBTVkdBbmlt
YXRlZFR5cGVBbmltYXRvcjo6Y29uc3RydWN0RnJvbUJhc2VWYWx1ZSgpIGNyZWF0ZXMgYSBuZXcg
QW5pbWF0ZWRUeXBlCisgICAgICAgIGZyb20gY3VycmVudEJhc2VWYWx1ZSgpIG9ubHkgaWYgdGhl
IFRlYXJPZmYgb2JqZWN0IGlzIG5vdCBhbmltYXRpbmcuIE90aGVyd2lzZQorICAgICAgICBpdCBy
ZXVzZXMgdGhlIGN1cnJlbnRCYXNlVmFsdWUoKS4KKworICAgICAgICAtLSBTVkdBbmltYXRlZFR5
cGUgaG9sZHMgaXRzIHZhbHVlIGFzIGEgVmFyaWFudCBpbnN0ZWFkIG9mIGEgdW5pb24KKyAgICAg
ICAgLS0gU1ZHQW5pbWF0ZWRUeXBlIGhhcyB0d28gdHlwZSBvZiBjb25zdHJ1Y3RvcnMuIFRoZSBm
aXJzdCBzZXQgdGFrZXMgdW5pcXVlX3B0cnMKKyAgICAgICAgICAgdG8gdGhlIGFuaW1hdGVkIHR5
cGUgYW5kIGl0IG93bnMgdGhlIHBvaW50ZXJzIHNvIGl0IGhhcyB0byBkZWxldGUgdGhlbSBpbgor
ICAgICAgICAgICBpdHMgZGVzdHJ1Y3Rvci4gVGhlIHNlY29uZCBzZXQgdGFrZXMgcmVmZXJlbmNl
cyB0byB0aGUgYW5pbWF0ZWQgdHlwZSBzbworICAgICAgICAgICBpdCBkb2VzIG5vdCBvd24gdGhl
bS4KKyAgICAgICAgLS0gU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21CYXNl
VmFsdWUoKSBhbmQgY29uc3RydWN0RnJvbUJhc2VWYWx1ZXMoKQorICAgICAgICAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gc2luY2UgYWxsIHRoZSBjYWxsZXJzIHVz
ZWQgdG8gdXNlCisgICAgICAgICAgIHRoZSByZXR1cm4gdmFsdWUgdG8gY3JlYXRlIGEgc3RkOjp1
bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4uIFRoZXNlIHR3bworICAgICAgICAgICBmdW5jdGlv
bnMgbm93IG1ha2UgdGhlIGRlY2lzaW9uIHdoZXRoZXIgdG8gY3JlYXRlIG5ldyBhbmltYXRlZCB0
eXBlIG9yIHRvCisgICAgICAgICAgIHJldXNlIHRoZSBjdXJyZW50QW5pbWF0ZWRWYWx1ZSgpIG9m
IHRoZSBUZWFyT2ZmIG9iamVjdC4KKworICAgICAgICBUZXN0czogc3ZnL2FuaW1hdGlvbnMvc21p
bC1tdWx0aXBsZS1hbmltYXRlLWxpc3Quc3ZnCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRB
bmdsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3I6OmNv
bnN0cnVjdEZyb21TdHJpbmcpOiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZSgpIHRha2VzIHR3byBw
b2ludGVycyBmb3IgdGhlIHBhaXIgYW5pbWF0ZWQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKTogU1ZHQW5pbWF0
ZWRUeXBlQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21CYXNlVmFsdWVzKCkgcmV0dXJucyBhIHN0ZDo6
dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+LgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWRBbmdsZUFuaW1hdG9yOjphZGRBbmltYXRlZFR5cGVzKTogU1ZHQW5pbWF0ZWRUeXBlOjptX3Zh
bHVlIGhvbGRzIHR3byBwb2ludGVycyBmb3IgdGhlIHBhaXIgYW5pbWF0ZWQgdHlwZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRW
YWx1ZSk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21T
dHJpbmcpOiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZSgpIGlzIG5vdyBhIHRlbXBsYXRlIGZ1bmN0
aW9uIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBhbGwgdHlwZXMuCisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZEJvb2xlYW5BbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKTogU1ZHQW5p
bWF0ZWRUeXBlQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21CYXNlVmFsdWUoKSByZXR1cm5zIGEgc3Rk
Ojp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVk
Q29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjpj
b25zdHJ1Y3RGcm9tU3RyaW5nKTogU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoKSBpcyBub3cgYSB0
ZW1wbGF0ZSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNlZCBmb3IgYWxsIHR5cGVzLgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkRW51bWVyYXRpb25BbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6IFNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlKCkgaXMgbm93IGEgdGVtcGxhdGUgZnVuY3Rpb24gd2hpY2ggY2Fu
IGJlIHVzZWQgZm9yIGFsbCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkRW51
bWVyYXRpb25BbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKTogU1ZHQW5pbWF0ZWRUeXBl
QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21CYXNlVmFsdWUoKSByZXR1cm5zIGEgc3RkOjp1bmlxdWVf
cHRyPFNWR0FuaW1hdGVkVHlwZT4uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y29uc3Ry
dWN0RnJvbVN0cmluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRJbnRl
Z2VyQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbik6IERpdHRvLgorICAgICAgICAqIHN2
Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OmNvbnN0cnVjdEZy
b21TdHJpbmcpOiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZSgpIHRha2VzIHR3byBwb2ludGVycyBm
b3IgdGhlIHBhaXIgYW5pbWF0ZWQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVk
SW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24pOiBT
VkdBbmltYXRlZFR5cGVBbmltYXRvcjo6Y29uc3RydWN0RnJvbUJhc2VWYWx1ZXMoKSByZXR1cm5z
IGEgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4uCisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6YWRkQW5pbWF0ZWRUeXBl
cyk6IFNWR0FuaW1hdGVkVHlwZTo6bV92YWx1ZSBob2xkcyB0d28gcG9pbnRlcnMgZm9yIHRoZSBw
YWlyIGFuaW1hdGVkIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZEludGVnZXJP
cHRpb25hbEludGVnZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZSk6IERpdHRvLgor
ICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZExlbmd0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZExlbmd0aEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogU1ZHQW5pbWF0
ZWRUeXBlOjpjcmVhdGUoKSBpcyBub3cgYSB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGljaCBjYW4gYmUg
dXNlZCBmb3IgYWxsIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMZW5ndGhB
bmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKTogU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I6
OmNvbnN0cnVjdEZyb21CYXNlVmFsdWUoKSByZXR1cm5zIGEgc3RkOjp1bmlxdWVfcHRyPFNWR0Fu
aW1hdGVkVHlwZT4uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRvcjo6Y29uc3RydWN0
RnJvbVN0cmluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbik6IERpdHRvLgorICAgICAgICAqIHN2
Zy9TVkdBbmltYXRlZE51bWJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZE51
bWJlckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZE51bWJlckFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24pOiBE
aXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZE51bWJlckxpc3RBbmlt
YXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTog
U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoKSBpcyBub3cgYSB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGlj
aCBjYW4gYmUgdXNlZCBmb3IgYWxsIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24pOiBT
VkdBbmltYXRlZFR5cGVBbmltYXRvcjo6Y29uc3RydWN0RnJvbUJhc2VWYWx1ZXMoKSByZXR1cm5z
IGEgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4uCisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OmFkZEFuaW1hdGVkVHlwZXMp
OiBTVkdBbmltYXRlZFR5cGU6Om1fdmFsdWUgaG9sZHMgdHdvIHBvaW50ZXJzIGZvciB0aGUgcGFp
ciBhbmltYXRlZCB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWROdW1iZXJPcHRp
b25hbE51bWJlckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKTogRGl0dG8uCisgICAg
ICAgICogc3ZnL1NWR0FuaW1hdGVkUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlZFBhdGhBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6IFNWR0FuaW1hdGVkVHlwZTo6
Y3JlYXRlKCkgaXMgbm93IGEgdGVtcGxhdGUgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIHVzZWQgZm9y
IGFsbCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUGF0aEFuaW1hdG9yOjpz
dGFydEFuaW1WYWxBbmltYXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRQ
b2ludExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQb2ludExpc3RBbmlt
YXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKCkgaXMg
bm93IGEgdGVtcGxhdGUgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGFsbCB0eXBlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3I6OnN0YXJ0QW5p
bVZhbEFuaW1hdGlvbik6IFNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tQmFz
ZVZhbHVlKCkgcmV0dXJucyBhIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+LgorICAg
ICAgICAqIHN2Zy9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OmNvbnN0cnVj
dEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJlc2Vy
dmVBc3BlY3RSYXRpb0FuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24pOiBEaXR0by4KKyAg
ICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkUmVjdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFJlY3RBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9u
KTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkU3RyaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkU3RyaW5nQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkU3RyaW5nQW5pbWF0b3I6OnN0
YXJ0QW5pbVZhbEFuaW1hdGlvbik6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1M
aXN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRp
b24pOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6flNWR0FuaW1hdGVkVHlwZSk6IERlbGV0ZSB0aGUg
YW5pbWF0ZWQgdmFsdWUgb25seSBpZiBtX293bnNWYWx1ZSBpcyB0cnVlLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpzdXBwb3J0c0FuaW1WYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRUeXBlOjp0eXBlKTogVXNlIHRoZSBXVEY6OnN3aXRjaE9uKCkgdG8gcmV0
dXJuIHRoZSB0eXBlIG9mIFNWR0FuaW1hdGVkVHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkVHlwZTo6dmFsdWVBc1N0cmluZyk6IFVzZSB0aGUgV1RGOjpzd2l0Y2hPbigpIHRvIHN3
aXRjaCBvbiB0aGUgdHlwZSBvZiB0aGUgVmFyaWFudCBtX3ZhbHVlLgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRUeXBlOjpzZXRWYWx1ZUFzU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OlNWR0FuaW1hdGVkVHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUFuZ2xlQW5kRW51bWVyYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVCb29s
ZWFuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRl
Q29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVh
dGVFbnVtZXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZUludGVnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWRUeXBlOjpjcmVhdGVJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTGVuZ3RoTGlzdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlckxpc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1i
ZXJPcHRpb25hbE51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
ZFR5cGU6OmNyZWF0ZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWRUeXBlOjpjcmVhdGVQb2ludExpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZWRUeXBlOjpjcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVN0cmluZyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVRyYW5zZm9ybUxpc3QpOiBE
ZWxldGVkLgorICAgICAgICBUaGVzZSBtZXRob2RzIGFyZSByZXBsYWNlZCBieSBhIHNpbmdsZSB0
ZW1wbGF0ZSBmdW5jdGlvbiBuYW1lZCBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZSgpLgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlZFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVk
VHlwZTo6Y3JlYXRlKTogQSB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgU1ZHQW5p
bWF0ZWRUeXBlIGdpdmVuIHRoZSB0eXBlIG9mIHRoZSBhbmltYXRlZCB2YWx1ZS4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6YW5nbGVBbmRFbnVtZXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZWRUeXBlOjpjb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5
cGU6OmVudW1lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6aW50
ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmludGVnZXJPcHRpb25h
bEludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpsZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpsZW5ndGhMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6bnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkVHlwZTo6bnVtYmVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
ZFR5cGU6Om51bWJlck9wdGlvbmFsTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkVHlwZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnBvaW50
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnByZXNlcnZlQXNwZWN0
UmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpyZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6c3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVkVHlwZTo6dHJhbnNmb3JtTGlzdCk6CisgICAgICAgIFRoZSBmdW5jdGlvbiB1
c2UgdGhlIHRlbXBsYXRlIGZ1bmN0aW9uIHZhbHVlKCkgZ2l2ZW4gdGhlIHR5cGUgb2YgdGhlIGFu
aW1hdGVkIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpTVkdBbmlt
YXRlZFR5cGUpOiBVc2UgcGFyYW1ldHJpemVkIGNvbnN0cnVjdG9ycyB0byBpbml0aWFsaXplIHRo
ZSBTVkdBbmltYXRlZFR5cGUuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnZh
bHVlKTogQSB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHRoZSBzdG9yZSBhbmltYXRl
ZCB2YWx1ZSBnaXZlbiBpdHMgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlw
ZTo6dHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGVBbmltYXRvcjo6Y29uc3RydWN0
RnJvbUJhc2VWYWx1ZSk6IFJldXNlIHRoZSBhbmltYXRlZCB0eXBlIHZhbHVlIHN0b3JlZCBpbiB0
aGUgVGVhck9mZiBvYmplY3QgaWYgaXQncyBhbmltYXRpbmcuIE90aGVyd2lzZSBjcmVhdGUgYSBu
ZXcgb25lLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I6OmNvbnN0
cnVjdEZyb21CYXNlVmFsdWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
ZFR5cGVBbmltYXRvcjo6cmVzZXRGcm9tQmFzZVZhbHVlcyk6IFNWR0FuaW1hdGVkVHlwZTo6bV92
YWx1ZSBob2xkcyB0d28gcG9pbnRlcnMgZm9yIHRoZSBwYWlyIGFuaW1hdGVkIHR5cGUuCisgICAg
ICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OmN1cnJlbnRB
bmltYXRlZFZhbHVlKTogTWFrZSBpdCBjb25zdC4KKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9T
VkdBbmltYXRlZFByb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWRQcm9wZXJ0eVRlYXJPZmY6OmN1cnJlbnRBbmltYXRlZFZhbHVlKTogRGl0dG8uCisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlUZWFyT2ZmOjpjdXJyZW50
QW5pbWF0ZWRWYWx1ZSk6IERpdHRvLgorCiAyMDE3LTAxLTI0ICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGFsd2F5cyB0cnVlIHNlbGVjdGlv
bkluY2x1ZGVzQWx0SW1hZ2VUZXh0IHNldHRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
ZEFuZ2xlLmNwcAppbmRleCBjNTczMjU1ZWMwMWQ0M2UzNDIwYzQ2MWM2MjEzMTEwNmYzZDUyMzAx
Li43OTJlYjM5NmE4MDIxYjg2ZDkyNDljNDM0MGY4YzZkZjdmODBlYmNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRBbmdsZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVkQW5nbGUuY3BwCkBAIC0zMiwyMiArMzIsMjIgQEAgU1ZHQW5pbWF0
ZWRBbmdsZUFuaW1hdG9yOjpTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3IoU1ZHQW5pbWF0aW9uRWxl
bWVudCogYW5pbWF0aW8KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5p
bWF0ZWRBbmdsZUFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVB
bmdsZUFuZEVudW1lcmF0aW9uKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjpwYWlyPFNWR0FuZ2xlVmFs
dWUsIHVuc2lnbmVkPj4oKSk7CisgICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuZ2xlVmFsdWU+KCksIHN0ZDo6bWFrZV91
bmlxdWU8dW5zaWduZWQ+KCkpOwogICAgIGF1dG8mIGFuaW1hdGVkUGFpciA9IGFuaW1hdGVkVHlw
ZS0+YW5nbGVBbmRFbnVtZXJhdGlvbigpOwogCiAgICAgU1ZHQW5nbGVWYWx1ZSBhbmdsZTsKICAg
ICBTVkdNYXJrZXJPcmllbnRUeXBlIG9yaWVudFR5cGUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdN
YXJrZXJPcmllbnRUeXBlPjo6ZnJvbVN0cmluZyhzdHJpbmcsIGFuZ2xlKTsKICAgICBpZiAob3Jp
ZW50VHlwZSA+IDApCi0gICAgICAgIGFuaW1hdGVkUGFpci5zZWNvbmQgPSBvcmllbnRUeXBlOwor
ICAgICAgICAqYW5pbWF0ZWRQYWlyLnNlY29uZCA9IG9yaWVudFR5cGU7CiAgICAgaWYgKG9yaWVu
dFR5cGUgPT0gU1ZHTWFya2VyT3JpZW50QW5nbGUpCi0gICAgICAgIGFuaW1hdGVkUGFpci5maXJz
dCA9IGFuZ2xlOworICAgICAgICAqYW5pbWF0ZWRQYWlyLmZpcnN0ID0gYW5nbGU7CiAKICAgICBy
ZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBT
VkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0
dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQW5nbGVBbmRFbnVtZXJhdGlvbihjb25zdHJ1Y3RG
cm9tQmFzZVZhbHVlczxTVkdBbmltYXRlZEFuZ2xlLCBTVkdBbmltYXRlZEVudW1lcmF0aW9uPihh
bmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZyb21CYXNlVmFsdWVzPFNWR0Fu
aW1hdGVkQW5nbGUsIFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KGFuaW1hdGVkVHlwZXMpOwogfQog
CiB2b2lkIFNWR0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29u
c3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpAQCAtNzgs
MTEgKzc4LDExIEBAIHZvaWQgU1ZHQW5pbWF0ZWRBbmdsZUFuaW1hdG9yOjphZGRBbmltYXRlZFR5
cGVzKFNWR0FuaW1hdGVkVHlwZSogZnJvbSwgU1ZHQW5pbWF0CiAgICAgY29uc3QgYXV0byYgZnJv
bUFuZ2xlQW5kRW51bWVyYXRpb24gPSBmcm9tLT5hbmdsZUFuZEVudW1lcmF0aW9uKCk7CiAgICAg
YXV0byYgdG9BbmdsZUFuZEVudW1lcmF0aW9uID0gdG8tPmFuZ2xlQW5kRW51bWVyYXRpb24oKTsK
ICAgICAvLyBPbmx5IHJlc3BlY3QgYnkgYW5pbWF0aW9ucywgaWYgZnJvbSBhbmQgYnkgYXJlIGJv
dGggc3BlY2lmaWVkIGluIGFuZ2xlcyAoYW5kIG5vdCBlZy4gJ2F1dG8nKS4KLSAgICBpZiAoZnJv
bUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kICE9IHRvQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNv
bmQgfHwgZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kICE9IFNWR01hcmtlck9yaWVudEFu
Z2xlKQorICAgIGlmICgqZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kICE9ICp0b0FuZ2xl
QW5kRW51bWVyYXRpb24uc2Vjb25kIHx8ICpmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQg
IT0gU1ZHTWFya2VyT3JpZW50QW5nbGUpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdCBhdXRv
JiBmcm9tQW5nbGUgPSBmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdDsKLSAgICBhdXRvJiB0
b0FuZ2xlID0gdG9BbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0OwotICAgIHRvQW5nbGUuc2V0VmFs
dWUodG9BbmdsZS52YWx1ZSgpICsgZnJvbUFuZ2xlLnZhbHVlKCkpOworICAgIGNvbnN0IGF1dG8q
IGZyb21BbmdsZSA9IGZyb21BbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0OworICAgIGF1dG8qIHRv
QW5nbGUgPSB0b0FuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3Q7CisgICAgdG9BbmdsZS0+c2V0VmFs
dWUodG9BbmdsZS0+dmFsdWUoKSArIGZyb21BbmdsZS0+dmFsdWUoKSk7CiB9CiAKIHZvaWQgU1ZH
QW5pbWF0ZWRBbmdsZUFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNl
bnRhZ2UsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBTVkdBbmltYXRlZFR5cGUqIGZyb20sIFNWR0Fu
aW1hdGVkVHlwZSogdG8sIFNWR0FuaW1hdGVkVHlwZSogdG9BdEVuZE9mRHVyYXRpb24sIFNWR0Fu
aW1hdGVkVHlwZSogYW5pbWF0ZWQpCkBAIC05NSw0MyArOTUsNDMgQEAgdm9pZCBTVkdBbmltYXRl
ZEFuZ2xlQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwg
dW5zaWduZWQKICAgICBhdXRvJiB0b0F0RW5kT2ZEdXJhdGlvbkFuZ2xlQW5kRW51bWVyYXRpb24g
PSB0b0F0RW5kT2ZEdXJhdGlvbi0+YW5nbGVBbmRFbnVtZXJhdGlvbigpOwogICAgIGF1dG8mIGFu
aW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbiA9IGFuaW1hdGVkLT5hbmdsZUFuZEVudW1lcmF0aW9u
KCk7CiAKLSAgICBpZiAoZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kICE9IHRvQW5nbGVB
bmRFbnVtZXJhdGlvbi5zZWNvbmQpIHsKKyAgICBpZiAoKmZyb21BbmdsZUFuZEVudW1lcmF0aW9u
LnNlY29uZCAhPSAqdG9BbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCkgewogICAgICAgICAvLyBE
aXNjcmV0ZSBhbmltYXRpb24gLSBubyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBwb3NzaWJsZSBiZXR3
ZWVuIHZhbHVlcyAoZS5nLiBhdXRvIHRvIGFuZ2xlKS4KICAgICAgICAgaWYgKHBlcmNlbnRhZ2Ug
PCAwLjVmKSB7Ci0gICAgICAgICAgICBhbmltYXRlZEFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25k
ID0gZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kOwotICAgICAgICAgICAgaWYgKGZyb21B
bmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9PSBTVkdNYXJrZXJPcmllbnRBbmdsZSkKLSAgICAg
ICAgICAgICAgICBhbmltYXRlZEFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3QgPSBmcm9tQW5nbGVB
bmRFbnVtZXJhdGlvbi5maXJzdDsKKyAgICAgICAgICAgICphbmltYXRlZEFuZ2xlQW5kRW51bWVy
YXRpb24uc2Vjb25kID0gKmZyb21BbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZDsKKyAgICAgICAg
ICAgIGlmICgqZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kID09IFNWR01hcmtlck9yaWVu
dEFuZ2xlKQorICAgICAgICAgICAgICAgICphbmltYXRlZEFuZ2xlQW5kRW51bWVyYXRpb24uZmly
c3QgPSAqZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3Q7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0LnNldFZhbHVl
KDApOworICAgICAgICAgICAgICAgIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdC0+
c2V0VmFsdWUoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgYW5p
bWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9IHRvQW5nbGVBbmRFbnVtZXJhdGlvbi5z
ZWNvbmQ7Ci0gICAgICAgIGlmICh0b0FuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kID09IFNWR01h
cmtlck9yaWVudEFuZ2xlKQotICAgICAgICAgICAgYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9u
LmZpcnN0ID0gdG9BbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0OworICAgICAgICAqYW5pbWF0ZWRB
bmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9ICp0b0FuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25k
OworICAgICAgICBpZiAoKnRvQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPT0gU1ZHTWFya2Vy
T3JpZW50QW5nbGUpCisgICAgICAgICAgICAqYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLmZp
cnN0ID0gKnRvQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdDsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0LnNldFZhbHVlKDApOworICAg
ICAgICAgICAgYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0LT5zZXRWYWx1ZSgwKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChmcm9tQW5nbGVBbmRFbnVtZXJhdGlv
bi5zZWNvbmQgPT0gU1ZHTWFya2VyT3JpZW50QW5nbGUpIHsKKyAgICBpZiAoKmZyb21BbmdsZUFu
ZEVudW1lcmF0aW9uLnNlY29uZCA9PSBTVkdNYXJrZXJPcmllbnRBbmdsZSkgewogICAgICAgICAv
LyBSZWd1bGFyIGZyb20gYW5nbGUgdG8gYW5nbGUgYW5pbWF0aW9uLCB3aXRoIHN1cHBvcnQgZm9y
IHNtb290aCBpbnRlcnBvbGF0aW9uLCBhbmQgYWRkaXRpdmUgYW5kIGFjY3VtdWxhdGVkIGFuaW1h
dGlvbi4KLSAgICAgICAgYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9IFNWR01h
cmtlck9yaWVudEFuZ2xlOworICAgICAgICAqYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLnNl
Y29uZCA9IFNWR01hcmtlck9yaWVudEFuZ2xlOwogCi0gICAgICAgIGF1dG8mIGFuaW1hdGVkU1ZH
QW5nbGUgPSBhbmltYXRlZEFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3Q7Ci0gICAgICAgIGNvbnN0
IGF1dG8mIHRvQXRFbmRPZkR1cmF0aW9uU1ZHQW5nbGUgPSB0b0F0RW5kT2ZEdXJhdGlvbkFuZ2xl
QW5kRW51bWVyYXRpb24uZmlyc3Q7Ci0gICAgICAgIGZsb2F0IGFuaW1hdGVkQW5nbGUgPSBhbmlt
YXRlZFNWR0FuZ2xlLnZhbHVlKCk7Ci0gICAgICAgIG1fYW5pbWF0aW9uRWxlbWVudC0+YW5pbWF0
ZUFkZGl0aXZlTnVtYmVyKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBmcm9tQW5nbGVBbmRFbnVt
ZXJhdGlvbi5maXJzdC52YWx1ZSgpLCB0b0FuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3QudmFsdWUo
KSwgdG9BdEVuZE9mRHVyYXRpb25TVkdBbmdsZS52YWx1ZSgpLCBhbmltYXRlZEFuZ2xlKTsKLSAg
ICAgICAgYW5pbWF0ZWRTVkdBbmdsZS5zZXRWYWx1ZShhbmltYXRlZEFuZ2xlKTsKKyAgICAgICAg
YXV0byogYW5pbWF0ZWRTVkdBbmdsZSA9IGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJz
dDsKKyAgICAgICAgY29uc3QgYXV0byogdG9BdEVuZE9mRHVyYXRpb25TVkdBbmdsZSA9IHRvQXRF
bmRPZkR1cmF0aW9uQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdDsKKyAgICAgICAgZmxvYXQgYW5p
bWF0ZWRBbmdsZSA9IGFuaW1hdGVkU1ZHQW5nbGUtPnZhbHVlKCk7CisgICAgICAgIG1fYW5pbWF0
aW9uRWxlbWVudC0+YW5pbWF0ZUFkZGl0aXZlTnVtYmVyKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50
LCBmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdC0+dmFsdWUoKSwgdG9BbmdsZUFuZEVudW1l
cmF0aW9uLmZpcnN0LT52YWx1ZSgpLCB0b0F0RW5kT2ZEdXJhdGlvblNWR0FuZ2xlLT52YWx1ZSgp
LCBhbmltYXRlZEFuZ2xlKTsKKyAgICAgICAgYW5pbWF0ZWRTVkdBbmdsZS0+c2V0VmFsdWUoYW5p
bWF0ZWRBbmdsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBhdXRvLCBhdXRv
LXN0YXJ0LXJldmVyc2UsIG9yIHVua25vd24uCi0gICAgYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0
aW9uLmZpcnN0LnNldFZhbHVlKDApOworICAgIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5m
aXJzdC0+c2V0VmFsdWUoMCk7CiAKLSAgICBpZiAoZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vj
b25kID09IFNWR01hcmtlck9yaWVudEF1dG8gfHwgZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vj
b25kID09IFNWR01hcmtlck9yaWVudEF1dG9TdGFydFJldmVyc2UpCi0gICAgICAgIGFuaW1hdGVk
QW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPSBmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNv
bmQ7CisgICAgaWYgKCpmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPT0gU1ZHTWFya2Vy
T3JpZW50QXV0byB8fCAqZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kID09IFNWR01hcmtl
ck9yaWVudEF1dG9TdGFydFJldmVyc2UpCisgICAgICAgICphbmltYXRlZEFuZ2xlQW5kRW51bWVy
YXRpb24uc2Vjb25kID0gKmZyb21BbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZDsKICAgICBlbHNl
Ci0gICAgICAgIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPSBTVkdNYXJrZXJP
cmllbnRVbmtub3duOworICAgICAgICAqYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLnNlY29u
ZCA9IFNWR01hcmtlck9yaWVudFVua25vd247CiB9CiAKIGZsb2F0IFNWR0FuaW1hdGVkQW5nbGVB
bmltYXRvcjo6Y2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHRvU3RyaW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkQm9vbGVhbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRCb29sZWFu
LmNwcAppbmRleCBlYzA4NDJhNzNjZTM2YjdjMTRjZGI1ZDFkOTk3ZjgxNmNlNTQ1YjE4Li4yMGQw
NjUwMDZmYTkxYTg5NmNhZjA0YWE4OTJlODk5ZDE1YWEwNGRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcApAQCAtMzEsMTQgKzMxLDE0IEBAIFNWR0FuaW1hdGVk
Qm9vbGVhbkFuaW1hdG9yOjpTVkdBbmltYXRlZEJvb2xlYW5BbmltYXRvcihTVkdBbmltYXRpb25F
bGVtZW50KiBhbmltCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1h
dGVkQm9vbGVhbkFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVC
b29sZWFuKHN0ZDo6bWFrZV91bmlxdWU8Ym9vbD4oKSk7CisgICAgYXV0byBhbmltYXRlZFR5cGUg
PSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPGJvb2w+KCkpOwogICAg
IGFuaW1hdGVkVHlwZS0+Ym9vbGVhbigpID0gKHN0cmluZyA9PSAidHJ1ZSIpOyAvLyB3YXQ/CiAg
ICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gU1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihj
b25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0g
ICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQm9vbGVhbihjb25zdHJ1Y3RGcm9tQmFz
ZVZhbHVlPFNWR0FuaW1hdGVkQm9vbGVhbj4oYW5pbWF0ZWRUeXBlcykpOworICAgIHJldHVybiBj
b25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1hdGVkQm9vbGVhbj4oYW5pbWF0ZWRUeXBlcyk7
CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0
aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZENvbG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZENvbG9yLmNwcAppbmRleCAxNjcwZmZiYWIzNTY2
Y2Y5MWM5ZWE1ZjliY2M0MDUzNGEzNGEzNzlhLi4wODNlOTA4ZmEyYzUwN2EzN2ViYWFmZjBiMWMz
MDRmOWU2Njg2MmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRD
b2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwCkBA
IC0zMyw3ICszMyw3IEBAIFNWR0FuaW1hdGVkQ29sb3JBbmltYXRvcjo6U1ZHQW5pbWF0ZWRDb2xv
ckFuaW1hdG9yKFNWR0FuaW1hdGlvbkVsZW1lbnQmIGFuaW1hdGlvCiAKIHN0ZDo6dW5pcXVlX3B0
cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkQ29sb3JBbmltYXRvcjo6Y29uc3RydWN0RnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVDb2xvcihzdGQ6Om1ha2VfdW5pcXVlPENvbG9yPihDU1NQYXJzZXI6OnBhcnNl
Q29sb3Ioc3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpKSkpOworICAgIHJldHVybiBTVkdBbmltYXRl
ZFR5cGU6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPENvbG9yPihDU1NQYXJzZXI6OnBhcnNlQ29s
b3Ioc3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpKSkpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVkQ29s
b3JBbmltYXRvcjo6YWRkQW5pbWF0ZWRUeXBlcyhTVkdBbmltYXRlZFR5cGUqIGZyb20sIFNWR0Fu
aW1hdGVkVHlwZSogdG8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbi5jcHAKaW5kZXggODE5ZDI1N2U2NDU5YzYxZmVhZjgyNDk4NjAxOTQxNzJkYjI1YjIyZC4u
ZTFkNTc1NGZjMDkzYTFkMDA5MGI0OTY4NWJlMTBjMzJhNDUyOGIzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcApAQCAtMTA5LDE0ICsxMDksMTQg
QEAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9yOjpTVkdBbmltYXRlZEVudW1lcmF0aW9u
QW5pbWF0b3IoU1ZHQW5pbWF0aW9uRWxlbWUKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5
cGU+IFNWR0FuaW1hdGVkRW51bWVyYXRpb25BbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBBU1NFUlQobV9hbmltYXRpb25FbGVtZW50KTsK
LSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlRW51bWVyYXRp
b24oc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZD4oKSk7CisgICAgYXV0byBhbmltYXRlZFR5cGUg
PSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkPigpKTsK
ICAgICBhbmltYXRlZFR5cGUtPmVudW1lcmF0aW9uKCkgPSBlbnVtZXJhdGlvblZhbHVlRm9yVGFy
Z2V0QXR0cmlidXRlKG1fYW5pbWF0aW9uRWxlbWVudC0+dGFyZ2V0RWxlbWVudCgpLCBtX2FuaW1h
dGlvbkVsZW1lbnQtPmF0dHJpYnV0ZU5hbWUoKSwgc3RyaW5nKTsKICAgICByZXR1cm4gYW5pbWF0
ZWRUeXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVt
ZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNW
R0FuaW1hdGVkVHlwZTo6Y3JlYXRlRW51bWVyYXRpb24oY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxT
VkdBbmltYXRlZEVudW1lcmF0aW9uPihhbmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0
cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4oYW5pbWF0ZWRUeXBlcyk7
CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9yOjpzdG9wQW5pbVZhbEFu
aW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlw
ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwCmluZGV4IGMzZjhj
OGU3ODE1ODFjYTA1ZDY4ZTRmMGJhMzA2OTBkOGEyNDUxMTcuLmEwNmFlMWE5YzVmODIyM2NmNTMy
MWZiMjdhNDU3YWYxNWIxMGU0ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZEludGVnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZElu
dGVnZXIuY3BwCkBAIC0zMywxNCArMzMsMTQgQEAgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6
OlNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yKFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW0KIAog
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0
b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0
byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXIoc3RkOjptYWtl
X3VuaXF1ZTxpbnQ+KCkpOworICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxpbnQ+KCkpOwogICAgIGFuaW1hdGVkVHlwZS0+aW50
ZWdlcigpID0gc3RyaW5nLnRvSW50U3RyaWN0KCk7CiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsK
IH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2Vy
QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQ
cm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlSW50ZWdlcihjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1hdGVkSW50ZWdl
cj4oYW5pbWF0ZWRUeXBlcykpOworICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNW
R0FuaW1hdGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWRJ
bnRlZ2VyQW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmlt
YXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHAKaW5kZXggNWI1
NjdlZDJhOTllMWZkODEzMjBjY2JmOTQ5ZDRmZWUzMzg3MmQ2NC4uOGY5MzNiNGY2ODZhMWY2MDll
Y2IwMDVjYjdjZjg1YzMyYjYxMGZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHAKQEAgLTMzLDIzICszMywy
MyBAQCBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6U1ZHQW5pbWF0
ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6Y29uc3Ry
dWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVk
VHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdlck9wdGlvbmFsSW50ZWdlcihzdGQ6
Om1ha2VfdW5pcXVlPHN0ZDo6cGFpcjxpbnQsIGludD4+KCkpOwotICAgIHN0ZDo6cGFpcjxpbnQs
IGludD4mIGFuaW1hdGVkSW50ZWdlciA9IGFuaW1hdGVkVHlwZS0+aW50ZWdlck9wdGlvbmFsSW50
ZWdlcigpOworICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUo
c3RkOjptYWtlX3VuaXF1ZTxpbnQ+KCksIHN0ZDo6bWFrZV91bmlxdWU8aW50PigpKTsKKyAgICBh
dXRvJiBhbmltYXRlZEludGVnZXIgPSBhbmltYXRlZFR5cGUtPmludGVnZXJPcHRpb25hbEludGVn
ZXIoKTsKICAgICBmbG9hdCBmaXJzdE51bWJlciA9IDA7CiAgICAgZmxvYXQgc2Vjb25kTnVtYmVy
ID0gMDsKICAgICBpZiAoIXBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nLCBmaXJzdE51
bWJlciwgc2Vjb25kTnVtYmVyKSkgewotICAgICAgICBhbmltYXRlZEludGVnZXIuZmlyc3QgPSAw
OwotICAgICAgICBhbmltYXRlZEludGVnZXIuc2Vjb25kID0gMDsKKyAgICAgICAgKmFuaW1hdGVk
SW50ZWdlci5maXJzdCA9IDA7CisgICAgICAgICphbmltYXRlZEludGVnZXIuc2Vjb25kID0gMDsK
ICAgICB9IGVsc2UgewotICAgICAgICBhbmltYXRlZEludGVnZXIuZmlyc3QgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHJvdW5kZihmaXJzdE51bWJlcikpOwotICAgICAgICBhbmltYXRlZEludGVnZXIuc2Vj
b25kID0gc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoc2Vjb25kTnVtYmVyKSk7CisgICAgICAgICph
bmltYXRlZEludGVnZXIuZmlyc3QgPSBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihmaXJzdE51bWJl
cikpOworICAgICAgICAqYW5pbWF0ZWRJbnRlZ2VyLnNlY29uZCA9IHN0YXRpY19jYXN0PGludD4o
cm91bmRmKHNlY29uZE51bWJlcikpOwogICAgIH0KICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwog
fQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZEludGVnZXJP
cHRpb25hbEludGVnZXJBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0Vs
ZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKIHsKLSAgICByZXR1cm4g
U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKGNvbnN0cnVjdEZy
b21CYXNlVmFsdWVzPFNWR0FuaW1hdGVkSW50ZWdlciwgU1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmlt
YXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZyb21CYXNlVmFsdWVzPFNWR0FuaW1h
dGVkSW50ZWdlciwgU1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzKTsKIH0KIAogdm9p
ZCBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6c3RvcEFuaW1WYWxB
bmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5
cGVzKQpAQCAtNzcsMTEgKzc3LDExIEBAIHZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJ
bnRlZ2VyQW5pbWF0b3I6OmFkZEFuaW1hdGVkVHlwZXMoU1ZHQW5pbWF0ZWRUeXBlCiAgICAgQVNT
RVJUKGZyb20tPnR5cGUoKSA9PSBBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIpOwogICAg
IEFTU0VSVChmcm9tLT50eXBlKCkgPT0gdG8tPnR5cGUoKSk7CiAKLSAgICBjb25zdCBzdGQ6OnBh
aXI8aW50LCBpbnQ+JiBmcm9tSW50ZWdlclBhaXIgPSBmcm9tLT5pbnRlZ2VyT3B0aW9uYWxJbnRl
Z2VyKCk7Ci0gICAgc3RkOjpwYWlyPGludCwgaW50PiYgdG9JbnRlZ2VyUGFpciA9IHRvLT5pbnRl
Z2VyT3B0aW9uYWxJbnRlZ2VyKCk7CisgICAgY29uc3QgYXV0byYgZnJvbUludGVnZXJQYWlyID0g
ZnJvbS0+aW50ZWdlck9wdGlvbmFsSW50ZWdlcigpOworICAgIGF1dG8mIHRvSW50ZWdlclBhaXIg
PSB0by0+aW50ZWdlck9wdGlvbmFsSW50ZWdlcigpOwogCi0gICAgdG9JbnRlZ2VyUGFpci5maXJz
dCArPSBmcm9tSW50ZWdlclBhaXIuZmlyc3Q7Ci0gICAgdG9JbnRlZ2VyUGFpci5zZWNvbmQgKz0g
ZnJvbUludGVnZXJQYWlyLnNlY29uZDsKKyAgICAqdG9JbnRlZ2VyUGFpci5maXJzdCArPSAqZnJv
bUludGVnZXJQYWlyLmZpcnN0OworICAgICp0b0ludGVnZXJQYWlyLnNlY29uZCArPSAqZnJvbUlu
dGVnZXJQYWlyLnNlY29uZDsKIH0KIAogdm9pZCBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbElu
dGVnZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1
bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHQW5pbWF0ZWRUeXBlKiBmcm9tLCBTVkdBbmltYXRlZFR5
cGUqIHRvLCBTVkdBbmltYXRlZFR5cGUqIHRvQXRFbmRPZkR1cmF0aW9uLCBTVkdBbmltYXRlZFR5
cGUqIGFuaW1hdGVkKQpAQCAtODksMTMgKzg5LDEzIEBAIHZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2Vy
T3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVy
CiAgICAgQVNTRVJUKG1fYW5pbWF0aW9uRWxlbWVudCk7CiAgICAgQVNTRVJUKG1fY29udGV4dEVs
ZW1lbnQpOwogCi0gICAgY29uc3Qgc3RkOjpwYWlyPGludCwgaW50PiYgZnJvbUludGVnZXJQYWly
ID0gbV9hbmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24gPyBh
bmltYXRlZC0+aW50ZWdlck9wdGlvbmFsSW50ZWdlcigpIDogZnJvbS0+aW50ZWdlck9wdGlvbmFs
SW50ZWdlcigpOwotICAgIGNvbnN0IHN0ZDo6cGFpcjxpbnQsIGludD4mIHRvSW50ZWdlclBhaXIg
PSB0by0+aW50ZWdlck9wdGlvbmFsSW50ZWdlcigpOwotICAgIGNvbnN0IHN0ZDo6cGFpcjxpbnQs
IGludD4mIHRvQXRFbmRPZkR1cmF0aW9uSW50ZWdlclBhaXIgPSB0b0F0RW5kT2ZEdXJhdGlvbi0+
aW50ZWdlck9wdGlvbmFsSW50ZWdlcigpOwotICAgIHN0ZDo6cGFpcjxpbnQsIGludD4mIGFuaW1h
dGVkSW50ZWdlclBhaXIgPSBhbmltYXRlZC0+aW50ZWdlck9wdGlvbmFsSW50ZWdlcigpOworICAg
IGNvbnN0IGF1dG8mIGZyb21JbnRlZ2VyUGFpciA9IG1fYW5pbWF0aW9uRWxlbWVudC0+YW5pbWF0
aW9uTW9kZSgpID09IFRvQW5pbWF0aW9uID8gYW5pbWF0ZWQtPmludGVnZXJPcHRpb25hbEludGVn
ZXIoKSA6IGZyb20tPmludGVnZXJPcHRpb25hbEludGVnZXIoKTsKKyAgICBjb25zdCBhdXRvJiB0
b0ludGVnZXJQYWlyID0gdG8tPmludGVnZXJPcHRpb25hbEludGVnZXIoKTsKKyAgICBjb25zdCBh
dXRvJiB0b0F0RW5kT2ZEdXJhdGlvbkludGVnZXJQYWlyID0gdG9BdEVuZE9mRHVyYXRpb24tPmlu
dGVnZXJPcHRpb25hbEludGVnZXIoKTsKKyAgICBhdXRvJiBhbmltYXRlZEludGVnZXJQYWlyID0g
YW5pbWF0ZWQtPmludGVnZXJPcHRpb25hbEludGVnZXIoKTsKIAotICAgIFNWR0FuaW1hdGVkSW50
ZWdlckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZEludGVnZXIobV9hbmltYXRpb25FbGVtZW50
LCBwZXJjZW50YWdlLCByZXBlYXRDb3VudCwgZnJvbUludGVnZXJQYWlyLmZpcnN0LCB0b0ludGVn
ZXJQYWlyLmZpcnN0LCB0b0F0RW5kT2ZEdXJhdGlvbkludGVnZXJQYWlyLmZpcnN0LCBhbmltYXRl
ZEludGVnZXJQYWlyLmZpcnN0KTsKLSAgICBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y2Fs
Y3VsYXRlQW5pbWF0ZWRJbnRlZ2VyKG1fYW5pbWF0aW9uRWxlbWVudCwgcGVyY2VudGFnZSwgcmVw
ZWF0Q291bnQsIGZyb21JbnRlZ2VyUGFpci5zZWNvbmQsIHRvSW50ZWdlclBhaXIuc2Vjb25kLCB0
b0F0RW5kT2ZEdXJhdGlvbkludGVnZXJQYWlyLnNlY29uZCwgYW5pbWF0ZWRJbnRlZ2VyUGFpci5z
ZWNvbmQpOworICAgIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRl
ZEludGVnZXIobV9hbmltYXRpb25FbGVtZW50LCBwZXJjZW50YWdlLCByZXBlYXRDb3VudCwgKmZy
b21JbnRlZ2VyUGFpci5maXJzdCwgKnRvSW50ZWdlclBhaXIuZmlyc3QsICp0b0F0RW5kT2ZEdXJh
dGlvbkludGVnZXJQYWlyLmZpcnN0LCAqYW5pbWF0ZWRJbnRlZ2VyUGFpci5maXJzdCk7CisgICAg
U1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkSW50ZWdlcihtX2Fu
aW1hdGlvbkVsZW1lbnQsIHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCAqZnJvbUludGVnZXJQYWly
LnNlY29uZCwgKnRvSW50ZWdlclBhaXIuc2Vjb25kLCAqdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2Vy
UGFpci5zZWNvbmQsICphbmltYXRlZEludGVnZXJQYWlyLnNlY29uZCk7CiB9CiAKIGZsb2F0IFNW
R0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpjYWxjdWxhdGVEaXN0YW5j
ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlZExlbmd0aC5jcHAKaW5kZXggYWI1OGYxODMxNDUxNTMxNWUzMGM3NzliNzA4MDdjYzE4YjBh
NDIwZS4uMzQ1MTcwZTc0MjFiNmI4MTBhZjdmOTI1NTBkNWFmY2VjNWY2OTg2ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRMZW5ndGguY3BwCkBAIC0zNCwxMiArMzQsMTIgQEAgU1ZH
QW5pbWF0ZWRMZW5ndGhBbmltYXRvcjo6U1ZHQW5pbWF0ZWRMZW5ndGhBbmltYXRvcihTVkdBbmlt
YXRpb25FbGVtZW50KiBhbmltYXQKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
U1ZHQW5pbWF0ZWRMZW5ndGhBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZykKIHsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVMZW5ndGgo
c3RkOjptYWtlX3VuaXF1ZTxTVkdMZW5ndGhWYWx1ZT4obV9sZW5ndGhNb2RlLCBzdHJpbmcpKTsK
KyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdM
ZW5ndGhWYWx1ZT4obV9sZW5ndGhNb2RlLCBzdHJpbmcpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRMZW5ndGhBbmltYXRvcjo6c3RhcnRBbmltVmFs
QW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRU
eXBlcykKIHsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVMZW5ndGgoY29uc3Ry
dWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRlZExlbmd0aD4oYW5pbWF0ZWRUeXBlcykpOworICAg
IHJldHVybiBjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1hdGVkTGVuZ3RoPihhbmltYXRl
ZFR5cGVzKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZExlbmd0aEFuaW1hdG9yOjpzdG9wQW5pbVZh
bEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVk
VHlwZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZExlbmd0aExpc3QuY3BwCmlu
ZGV4IDk1ZmZiNmE4MWMwNDNkNDVkMGVhYWQwOTVjNWEyMjM3ZWY4MDNlZGMuLmVhMDFlNWE5MmE0
N2IzY2FiNGE1NjkzODAzZGYyYWY0NjJhYzJlMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZExlbmd0aExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlZExlbmd0aExpc3QuY3BwCkBAIC0zMywxNCArMzMsMTQgQEAgU1ZHQW5pbWF0ZWRM
ZW5ndGhMaXN0QW5pbWF0b3I6OlNWR0FuaW1hdGVkTGVuZ3RoTGlzdEFuaW1hdG9yKFNWR0FuaW1h
dGlvbkVsZW1lbnQKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0
ZWRMZW5ndGhMaXN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0
ZUxlbmd0aExpc3Qoc3RkOjptYWtlX3VuaXF1ZTxTVkdMZW5ndGhMaXN0VmFsdWVzPigpKTsKKyAg
ICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFrZV91
bmlxdWU8U1ZHTGVuZ3RoTGlzdFZhbHVlcz4oKSk7CiAgICAgYW5pbWF0ZWRUeXBlLT5sZW5ndGhM
aXN0KCkucGFyc2Uoc3RyaW5nLCBtX2xlbmd0aE1vZGUpOwogICAgIHJldHVybiBhbmltYXRlZFR5
cGU7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTGVu
Z3RoTGlzdEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFu
aW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogewotICAgIHJldHVybiBTVkdBbmlt
YXRlZFR5cGU6OmNyZWF0ZUxlbmd0aExpc3QoY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmlt
YXRlZExlbmd0aExpc3Q+KGFuaW1hdGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnJv
bUJhc2VWYWx1ZTxTVkdBbmltYXRlZExlbmd0aExpc3Q+KGFuaW1hdGVkVHlwZXMpOwogfQogCiB2
b2lkIFNWR0FuaW1hdGVkTGVuZ3RoTGlzdEFuaW1hdG9yOjpzdG9wQW5pbVZhbEFuaW1hdGlvbihj
b25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyLmNwcAppbmRleCA0ZjFlYTlhOGQ0ZTA5MGRm
YzAyMWMxMDhlY2JjZmRhYzg3NDgxNGYzLi45MmRlZmIxZTVjN2Y4YjFjZjdkYzUxNTg5MzQ1N2E5
YmFhZmVmMTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1i
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlci5jcHAKQEAg
LTMyLDcgKzMyLDcgQEAgU1ZHQW5pbWF0ZWROdW1iZXJBbmltYXRvcjo6U1ZHQW5pbWF0ZWROdW1i
ZXJBbmltYXRvcihTVkdBbmltYXRpb25FbGVtZW50KiBhbmltYXQKIAogc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWROdW1iZXJBbmltYXRvcjo6Y29uc3RydWN0RnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9
IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVyKHN0ZDo6bWFrZV91bmlxdWU8ZmxvYXQ+KCkp
OworICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjpt
YWtlX3VuaXF1ZTxmbG9hdD4oKSk7CiAgICAgZmxvYXQmIGFuaW1hdGVkTnVtYmVyID0gYW5pbWF0
ZWRUeXBlLT5udW1iZXIoKTsKICAgICBpZiAoIXBhcnNlTnVtYmVyRnJvbVN0cmluZyhzdHJpbmcs
IGFuaW1hdGVkTnVtYmVyKSkKICAgICAgICAgYW5pbWF0ZWROdW1iZXIgPSAwOwpAQCAtNDEsNyAr
NDEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJl
ckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKAogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5p
bWF0ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJlckFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRp
b24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQog
ewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlcihjb25zdHJ1Y3RGcm9t
QmFzZVZhbHVlPFNWR0FuaW1hdGVkTnVtYmVyPihhbmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJu
IGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWROdW1iZXI+KGFuaW1hdGVkVHlwZXMp
OwogfQogCiB2b2lkIFNWR0FuaW1hdGVkTnVtYmVyQW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0
aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlckxpc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyTGlzdC5jcHAKaW5kZXggODdm
OTczYTFiYTJkMzQ5MmIxZjJkYjBkMDczY2MzNTlkNjZjYjU3ZC4uMzg4NzVjYWIyYjMyYmQ5NGNh
MDI5OGEzNDk2MmMwMDViYTUxZDdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkTnVtYmVyTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVkTnVtYmVyTGlzdC5jcHAKQEAgLTMyLDE0ICszMiwxNCBAQCBTVkdBbmltYXRlZE51bWJlckxp
c3RBbmltYXRvcjo6U1ZHQW5pbWF0ZWROdW1iZXJMaXN0QW5pbWF0b3IoU1ZHQW5pbWF0aW9uRWxl
bWVudAogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJl
ckxpc3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykK
IHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVy
TGlzdChzdGQ6Om1ha2VfdW5pcXVlPFNWR051bWJlckxpc3RWYWx1ZXM+KCkpOworICAgIGF1dG8g
YW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxT
VkdOdW1iZXJMaXN0VmFsdWVzPigpKTsKICAgICBhbmltYXRlZFR5cGUtPm51bWJlckxpc3QoKS5w
YXJzZShzdHJpbmcpOwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CiAKIHN0ZDo6dW5pcXVl
X3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpzdGFy
dEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBh
bmltYXRlZFR5cGVzKQogewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJl
ckxpc3QoY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRlZE51bWJlckxpc3Q+KGFuaW1h
dGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRl
ZE51bWJlckxpc3Q+KGFuaW1hdGVkVHlwZXMpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVkTnVtYmVy
TGlzdEFuaW1hdG9yOjpzdG9wQW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0
ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHAKaW5kZXggM2M0Y2E4NjRk
MjMyY2QzOGQ3NDFiMzM0ZTU0OWE4OTJjODgxZDA4ZS4uYjBlODFkNmMwMzM1ZDU3YjU5ZjNlMjhh
NzEwOTY2MTY4MzdkZGY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmNwcApAQCAtMzMsMTggKzMzLDE4IEBAIFNWR0Fu
aW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXJBbmltYXRvcjo6U1ZHQW5pbWF0ZWROdW1iZXJPcHRp
b25hbE51bWJlckFuaW1hdG9yCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNW
R0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXJBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RkOjptYWtlX3VuaXF1ZTxz
dGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4oKSk7Ci0gICAgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4m
IGFuaW1hdGVkTnVtYmVyID0gYW5pbWF0ZWRUeXBlLT5udW1iZXJPcHRpb25hbE51bWJlcigpOwot
ICAgIGlmICghcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcsIGFuaW1hdGVkTnVtYmVy
LmZpcnN0LCBhbmltYXRlZE51bWJlci5zZWNvbmQpKSB7Ci0gICAgICAgIGFuaW1hdGVkTnVtYmVy
LmZpcnN0ID0gMDsKLSAgICAgICAgYW5pbWF0ZWROdW1iZXIuc2Vjb25kID0gMDsKKyAgICBhdXRv
IGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8
ZmxvYXQ+KCksIHN0ZDo6bWFrZV91bmlxdWU8ZmxvYXQ+KCkpOworICAgIGF1dG8mIGFuaW1hdGVk
TnVtYmVyID0gYW5pbWF0ZWRUeXBlLT5udW1iZXJPcHRpb25hbE51bWJlcigpOworICAgIGlmICgh
cGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcsICphbmltYXRlZE51bWJlci5maXJzdCwg
KmFuaW1hdGVkTnVtYmVyLnNlY29uZCkpIHsKKyAgICAgICAgKmFuaW1hdGVkTnVtYmVyLmZpcnN0
ID0gMDsKKyAgICAgICAgKmFuaW1hdGVkTnVtYmVyLnNlY29uZCA9IDA7CiAgICAgfQogICAgIHJl
dHVybiBhbmltYXRlZFR5cGU7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+
IFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXJBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5p
bWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBl
cykKIHsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJPcHRpb25hbE51
bWJlcihjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlczxTVkdBbmltYXRlZE51bWJlciwgU1ZHQW5pbWF0
ZWROdW1iZXI+KGFuaW1hdGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VW
YWx1ZXM8U1ZHQW5pbWF0ZWROdW1iZXIsIFNWR0FuaW1hdGVkTnVtYmVyPihhbmltYXRlZFR5cGVz
KTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OnN0
b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYg
YW5pbWF0ZWRUeXBlcykKQEAgLTcyLDExICs3MiwxMSBAQCB2b2lkIFNWR0FuaW1hdGVkTnVtYmVy
T3B0aW9uYWxOdW1iZXJBbmltYXRvcjo6YWRkQW5pbWF0ZWRUeXBlcyhTVkdBbmltYXRlZFR5cGUq
CiAgICAgQVNTRVJUKGZyb20tPnR5cGUoKSA9PSBBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVy
KTsKICAgICBBU1NFUlQoZnJvbS0+dHlwZSgpID09IHRvLT50eXBlKCkpOwogCi0gICAgY29uc3Qg
c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4mIGZyb21OdW1iZXJQYWlyID0gZnJvbS0+bnVtYmVyT3B0
aW9uYWxOdW1iZXIoKTsKLSAgICBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiYgdG9OdW1iZXJQYWly
ID0gdG8tPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7CisgICAgY29uc3QgYXV0byYgZnJvbU51bWJl
clBhaXIgPSBmcm9tLT5udW1iZXJPcHRpb25hbE51bWJlcigpOworICAgIGF1dG8mIHRvTnVtYmVy
UGFpciA9IHRvLT5udW1iZXJPcHRpb25hbE51bWJlcigpOwogCi0gICAgdG9OdW1iZXJQYWlyLmZp
cnN0ICs9IGZyb21OdW1iZXJQYWlyLmZpcnN0OwotICAgIHRvTnVtYmVyUGFpci5zZWNvbmQgKz0g
ZnJvbU51bWJlclBhaXIuc2Vjb25kOworICAgICp0b051bWJlclBhaXIuZmlyc3QgKz0gKmZyb21O
dW1iZXJQYWlyLmZpcnN0OworICAgICp0b051bWJlclBhaXIuc2Vjb25kICs9ICpmcm9tTnVtYmVy
UGFpci5zZWNvbmQ7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlckFu
aW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVk
IHJlcGVhdENvdW50LCBTVkdBbmltYXRlZFR5cGUqIGZyb20sIFNWR0FuaW1hdGVkVHlwZSogdG8s
IFNWR0FuaW1hdGVkVHlwZSogdG9BdEVuZE9mRHVyYXRpb24sIFNWR0FuaW1hdGVkVHlwZSogYW5p
bWF0ZWQpCkBAIC04NCwxMyArODQsMTMgQEAgdm9pZCBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFs
TnVtYmVyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2UKICAgICBB
U1NFUlQobV9hbmltYXRpb25FbGVtZW50KTsKICAgICBBU1NFUlQobV9jb250ZXh0RWxlbWVudCk7
CiAKLSAgICBjb25zdCBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiYgZnJvbU51bWJlclBhaXIgPSBt
X2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1vZGUoKSA9PSBUb0FuaW1hdGlvbiA/IGFuaW1h
dGVkLT5udW1iZXJPcHRpb25hbE51bWJlcigpIDogIGZyb20tPm51bWJlck9wdGlvbmFsTnVtYmVy
KCk7Ci0gICAgY29uc3Qgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4mIHRvTnVtYmVyUGFpciA9IHRv
LT5udW1iZXJPcHRpb25hbE51bWJlcigpOwotICAgIGNvbnN0IHN0ZDo6cGFpcjxmbG9hdCwgZmxv
YXQ+JiB0b0F0RW5kT2ZEdXJhdGlvbk51bWJlclBhaXIgPSB0b0F0RW5kT2ZEdXJhdGlvbi0+bnVt
YmVyT3B0aW9uYWxOdW1iZXIoKTsKLSAgICBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiYgYW5pbWF0
ZWROdW1iZXJQYWlyID0gYW5pbWF0ZWQtPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7CisgICAgY29u
c3QgYXV0byYgZnJvbU51bWJlclBhaXIgPSBtX2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1v
ZGUoKSA9PSBUb0FuaW1hdGlvbiA/IGFuaW1hdGVkLT5udW1iZXJPcHRpb25hbE51bWJlcigpIDog
IGZyb20tPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7CisgICAgY29uc3QgYXV0byYgdG9OdW1iZXJQ
YWlyID0gdG8tPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7CisgICAgY29uc3QgYXV0byYgdG9BdEVu
ZE9mRHVyYXRpb25OdW1iZXJQYWlyID0gdG9BdEVuZE9mRHVyYXRpb24tPm51bWJlck9wdGlvbmFs
TnVtYmVyKCk7CisgICAgYXV0byYgYW5pbWF0ZWROdW1iZXJQYWlyID0gYW5pbWF0ZWQtPm51bWJl
ck9wdGlvbmFsTnVtYmVyKCk7CiAKLSAgICBtX2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGVBZGRp
dGl2ZU51bWJlcihwZXJjZW50YWdlLCByZXBlYXRDb3VudCwgZnJvbU51bWJlclBhaXIuZmlyc3Qs
IHRvTnVtYmVyUGFpci5maXJzdCwgdG9BdEVuZE9mRHVyYXRpb25OdW1iZXJQYWlyLmZpcnN0LCBh
bmltYXRlZE51bWJlclBhaXIuZmlyc3QpOwotICAgIG1fYW5pbWF0aW9uRWxlbWVudC0+YW5pbWF0
ZUFkZGl0aXZlTnVtYmVyKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBmcm9tTnVtYmVyUGFpci5z
ZWNvbmQsIHRvTnVtYmVyUGFpci5zZWNvbmQsIHRvQXRFbmRPZkR1cmF0aW9uTnVtYmVyUGFpci5z
ZWNvbmQsIGFuaW1hdGVkTnVtYmVyUGFpci5zZWNvbmQpOworICAgIG1fYW5pbWF0aW9uRWxlbWVu
dC0+YW5pbWF0ZUFkZGl0aXZlTnVtYmVyKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCAqZnJvbU51
bWJlclBhaXIuZmlyc3QsICp0b051bWJlclBhaXIuZmlyc3QsICp0b0F0RW5kT2ZEdXJhdGlvbk51
bWJlclBhaXIuZmlyc3QsICphbmltYXRlZE51bWJlclBhaXIuZmlyc3QpOworICAgIG1fYW5pbWF0
aW9uRWxlbWVudC0+YW5pbWF0ZUFkZGl0aXZlTnVtYmVyKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50
LCAqZnJvbU51bWJlclBhaXIuc2Vjb25kLCAqdG9OdW1iZXJQYWlyLnNlY29uZCwgKnRvQXRFbmRP
ZkR1cmF0aW9uTnVtYmVyUGFpci5zZWNvbmQsICphbmltYXRlZE51bWJlclBhaXIuc2Vjb25kKTsK
IH0KIAogZmxvYXQgU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOjpjYWxj
dWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcAppbmRleCAyOWUyNDliYzgxYWQyMTVmNjQ2ZmMxMjlhNDU3
MTY3ZmUwOWJiNzY3Li5mNGMyZmYxMDI0ZTFhOTM0MDIwMWNlOTBkYTE2MGVkZGQ1NGZkMGZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcApAQCAtMzUsNyArMzUsNyBAQCBz
dGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFBhdGhBbmltYXRvcjo6
Y29uc3RydWN0RnJvbVN0cmluZyhjbwogewogICAgIGF1dG8gYnl0ZVN0cmVhbSA9IHN0ZDo6bWFr
ZV91bmlxdWU8U1ZHUGF0aEJ5dGVTdHJlYW0+KCk7CiAgICAgYnVpbGRTVkdQYXRoQnl0ZVN0cmVh
bUZyb21TdHJpbmcoc3RyaW5nLCAqYnl0ZVN0cmVhbSwgVW5hbHRlcmVkUGFyc2luZyk7Ci0gICAg
cmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUGF0aChXVEZNb3ZlKGJ5dGVTdHJlYW0pKTsK
KyAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoV1RGTW92ZShieXRlU3RyZWFtKSk7
CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkUGF0aEFu
aW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJv
cGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpAQCAtNDUsNyArNDUsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFBhdGhBbmltYXRvcjo6c3RhcnRBbmltVmFs
QW5pbWF0aW9uKAogICAgIC8vIEJ1aWxkIGluaXRpYWwgcGF0aCBieXRlIHN0cmVhbS4KICAgICBh
dXRvIGJ5dGVTdHJlYW0gPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR1BhdGhCeXRlU3RyZWFtPigpOwog
ICAgIHJlc2V0QW5pbVZhbFRvQmFzZVZhbChhbmltYXRlZFR5cGVzLCBieXRlU3RyZWFtLmdldCgp
KTsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQYXRoKFdURk1vdmUoYnl0ZVN0
cmVhbSkpOworICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShXVEZNb3ZlKGJ5dGVT
dHJlYW0pKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZFBhdGhBbmltYXRvcjo6c3RvcEFuaW1WYWxB
bmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5
cGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUG9pbnRMaXN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5jcHAKaW5kZXgg
NWYwNzgwZDUyYzU0NjJhZDQ5MGM4ZjIxZWZiMjRjYWZiNThiZjE2My4uNzJhZTFjMTdmMzFlOGJj
ODk4MjhkNjhlMGFkYjAyNTRmZTMyZWU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZWRQb2ludExpc3QuY3BwCkBAIC0zNCwxNCArMzQsMTQgQEAgU1ZHQW5pbWF0ZWRQb2ludExp
c3RBbmltYXRvcjo6U1ZHQW5pbWF0ZWRQb2ludExpc3RBbmltYXRvcihTVkdBbmltYXRpb25FbGVt
ZW50KgogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFBvaW50
TGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQog
ewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQb2ludExp
c3Qoc3RkOjptYWtlX3VuaXF1ZTxTVkdQb2ludExpc3RWYWx1ZXM+KCkpOworICAgIGF1dG8gYW5p
bWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdQ
b2ludExpc3RWYWx1ZXM+KCkpOwogICAgIHBvaW50c0xpc3RGcm9tU1ZHRGF0YShhbmltYXRlZFR5
cGUtPnBvaW50TGlzdCgpLCBzdHJpbmcpOwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CiAK
IHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkUG9pbnRMaXN0QW5p
bWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9w
ZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6
Y3JlYXRlUG9pbnRMaXN0KGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRQb2ludExp
c3Q+KGFuaW1hdGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxT
VkdBbmltYXRlZFBvaW50TGlzdD4oYW5pbWF0ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0
ZWRQb2ludExpc3RBbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVu
dEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAppbmRleCA4MDEw
MjViNDVmYTYxYjdlZWI1MDU5MGIzYWU4NTdhOWE5YjY5ZTkxLi41MTljNWM4NzU3MzcwZmIxY2Q0
ZDY4YmU1ZDYyN2M3NDA0ODVhMmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcApAQCAtMzEsMTQgKzMxLDE0IEBAIFNW
R0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1hdG9yOjpTVkdBbmltYXRlZFByZXNlcnZl
QXNwZWN0UmF0aW9BbmltYXRvcihTCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+
IFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZH
QW5pbWF0ZWRUeXBlOjpjcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvKHN0ZDo6bWFrZV91bmlxdWU8
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPigpKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9
IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlPigpKTsKICAgICBhbmltYXRlZFR5cGUtPnByZXNlcnZlQXNwZWN0UmF0aW8o
KS5wYXJzZShzdHJpbmcpOwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CiAKIHN0ZDo6dW5p
cXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0Fu
aW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJv
cGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6
OmNyZWF0ZVByZXNlcnZlQXNwZWN0UmF0aW8oY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+KGFuaW1hdGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29u
c3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+KGFuaW1h
dGVkVHlwZXMpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1h
dG9yOjpzdG9wQW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0
eUxpc3QmIGFuaW1hdGVkVHlwZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3Bw
CmluZGV4IGI5NGFiZjU5YzcwODQ4YTZiYWNiN2I4MDViOThkOTVmMmI5ZWY3ZjIuLjMxM2UxNTEx
MDhhMzkxYWE2N2RkNTIyZGNkYTk3ODg1NDU5ZGFkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZFJlY3QuY3BwCkBAIC0zMiwxNCArMzIsMTQgQEAgU1ZHQW5pbWF0ZWRSZWN0QW5pbWF0
b3I6OlNWR0FuaW1hdGVkUmVjdEFuaW1hdG9yKFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlv
bkUKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRSZWN0QW5p
bWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAg
YXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJlY3Qoc3RkOjptYWtl
X3VuaXF1ZTxGbG9hdFJlY3Q+KCkpOworICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0
ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxGbG9hdFJlY3Q+KCkpOwogICAgIHBhcnNl
UmVjdChzdHJpbmcsIGFuaW1hdGVkVHlwZS0+cmVjdCgpKTsKICAgICByZXR1cm4gYW5pbWF0ZWRU
eXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFJl
Y3RBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRl
ZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKIHsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVSZWN0KGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRSZWN0Pihh
bmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5p
bWF0ZWRSZWN0PihhbmltYXRlZFR5cGVzKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZFJlY3RBbmlt
YXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVy
dHlMaXN0JiBhbmltYXRlZFR5cGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkU3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFN0cmlu
Zy5jcHAKaW5kZXggNjk4NWVjYmVkYWQxZWZlZDhkNzQyODE1NWE3OTA3ZmJhMzc5MGQ3MC4uY2Y2
M2NjNDdiOGQ0MDM2OWExODk0ZmVmZTA3ZDQwMDBlMWIxNjQyZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRTdHJpbmcuY3BwCkBAIC0zMSwxNCArMzEsMTQgQEAgU1ZHQW5pbWF0ZWRT
dHJpbmdBbmltYXRvcjo6U1ZHQW5pbWF0ZWRTdHJpbmdBbmltYXRvcihTVkdBbmltYXRpb25FbGVt
ZW50KiBhbmltYXQKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0
ZWRTdHJpbmdBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
ZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlU3Ry
aW5nKHN0ZDo6bWFrZV91bmlxdWU8U3RyaW5nPigpKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9
IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U3RyaW5nPigpKTsKICAg
ICBhbmltYXRlZFR5cGUtPnN0cmluZygpID0gc3RyaW5nOwogICAgIHJldHVybiBhbmltYXRlZFR5
cGU7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkU3Ry
aW5nQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0
ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVk
VHlwZTo6Y3JlYXRlU3RyaW5nKGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRTdHJp
bmc+KGFuaW1hdGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxT
VkdBbmltYXRlZFN0cmluZz4oYW5pbWF0ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWRT
dHJpbmdBbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1h
dGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcAppbmRleCAyMDM1NmUwYmI2YzUyMzEzNjdiNmI2
YjkyNGM1MWNmYjRlZjcyNDI5Li5kZmNmNzUwZDRiODBhZjQ5YTU1MmI2ZTE3YWJjZjY1NWJkZDIz
NDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1M
aXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
LmNwcApAQCAtNDEsNyArNDEsNyBAQCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RBbmltYXRvcjo6
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0QW5pbWF0b3IoU1ZHQW5pbWF0aW9uRQogCiBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RBbmltYXRv
cjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRv
IGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlVHJhbnNmb3JtTGlzdChzdGQ6
Om1ha2VfdW5pcXVlPFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXM+KCkpOworICAgIGF1dG8gYW5pbWF0
ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdUcmFu
c2Zvcm1MaXN0VmFsdWVzPigpKTsKICAgICBhbmltYXRlZFR5cGUtPnRyYW5zZm9ybUxpc3QoKS5w
YXJzZShtX3RyYW5zZm9ybVR5cGVTdHJpbmcgKyBzdHJpbmcgKyAnKScpOwogICAgIEFTU0VSVChh
bmltYXRlZFR5cGUtPnRyYW5zZm9ybUxpc3QoKS5zaXplKCkgPD0gMSk7CiAgICAgcmV0dXJuIGFu
aW1hdGVkVHlwZTsKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0QW5pbWF0b3I6OmNvbnN0cnVjdEZyb20KIAog
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQ
cm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlVHJhbnNmb3JtTGlzdChjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1hdGVk
VHJhbnNmb3JtTGlzdD4oYW5pbWF0ZWRUeXBlcykpOworICAgIHJldHVybiBjb25zdHJ1Y3RGcm9t
QmFzZVZhbHVlPFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4oYW5pbWF0ZWRUeXBlcyk7CiB9CiAK
IHZvaWQgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0QW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0
aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZS5jcHAKaW5kZXggOTYzZjIyOGEwN2M5ZGI0
ZDIwMDU5Njk1MmNiMjA0ZWNhZGEyYWM1Ny4uN2Y5MWI1OTFmZjZjMGIwNjRkNTJkMjU1ZjNmM2Nj
OGRiZjFmNzE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlw
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZS5jcHAKQEAgLTEs
MjAgKzEsMjcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0yMiwzMDYgKzI5LDI3MyBAQAogCiAjaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAi
U1ZHUGF0aEJ5dGVTdHJlYW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdBbmltYXRl
ZFR5cGU6OlNWR0FuaW1hdGVkVHlwZShBbmltYXRlZFByb3BlcnR5VHlwZSB0eXBlKQotICAgIDog
bV90eXBlKHR5cGUpCi17Ci19Ci0KIFNWR0FuaW1hdGVkVHlwZTo6flNWR0FuaW1hdGVkVHlwZSgp
CiB7Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEFuaW1hdGVkQW5nbGU6Ci0gICAg
ICAgIGRlbGV0ZSBtX2RhdGEuYW5nbGVBbmRFbnVtZXJhdGlvbjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBBbmltYXRlZEJvb2xlYW46Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEuYm9vbGVhbjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbmltYXRlZENvbG9yOgotICAgICAgICBkZWxldGUg
bV9kYXRhLmNvbG9yOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkRW51bWVyYXRp
b246Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEuZW51bWVyYXRpb247Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQW5pbWF0ZWRJbnRlZ2VyOgotICAgICAgICBkZWxldGUgbV9kYXRhLmludGVnZXI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2Vy
OgotICAgICAgICBkZWxldGUgbV9kYXRhLmludGVnZXJPcHRpb25hbEludGVnZXI7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQW5pbWF0ZWRMZW5ndGg6Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEu
bGVuZ3RoOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkTGVuZ3RoTGlzdDoKLSAg
ICAgICAgZGVsZXRlIG1fZGF0YS5sZW5ndGhMaXN0OwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEFuaW1hdGVkTnVtYmVyOgotICAgICAgICBkZWxldGUgbV9kYXRhLm51bWJlcjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlckxpc3Q6Ci0gICAgICAgIGRlbGV0ZSBtX2Rh
dGEubnVtYmVyTGlzdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlck9w
dGlvbmFsTnVtYmVyOgotICAgICAgICBkZWxldGUgbV9kYXRhLm51bWJlck9wdGlvbmFsTnVtYmVy
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkUGF0aDoKLSAgICAgICAgZGVsZXRl
IG1fZGF0YS5wYXRoOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkUG9pbnRzOgot
ICAgICAgICBkZWxldGUgbV9kYXRhLnBvaW50TGlzdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEucHJl
c2VydmVBc3BlY3RSYXRpbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbmltYXRlZFJlY3Q6
Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEucmVjdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBB
bmltYXRlZFN0cmluZzoKLSAgICAgICAgZGVsZXRlIG1fZGF0YS5zdHJpbmc7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OgotICAgICAgICBkZWxldGUgbV9k
YXRhLnRyYW5zZm9ybUxpc3Q7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQW5pbWF0ZWRVbmtu
b3duOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6
OmNyZWF0ZUFuZ2xlQW5kRW51bWVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPHN0ZDo6cGFpcjxTVkdB
bmdsZVZhbHVlLCB1bnNpZ25lZD4+IGFuZ2xlQW5kRW51bWVyYXRpb24pCi17Ci0gICAgQVNTRVJU
KGFuZ2xlQW5kRW51bWVyYXRpb24pOwotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtl
X3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVkQW5nbGUpOwotICAgIGFuaW1hdGVkVHlw
ZS0+bV9kYXRhLmFuZ2xlQW5kRW51bWVyYXRpb24gPSBhbmdsZUFuZEVudW1lcmF0aW9uLnJlbGVh
c2UoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUJvb2xlYW4oc3RkOjp1bmlxdWVf
cHRyPGJvb2w+IGJvb2xlYW4pCi17Ci0gICAgQVNTRVJUKGJvb2xlYW4pOwotICAgIGF1dG8gYW5p
bWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVkQm9v
bGVhbik7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEuYm9vbGVhbiA9IGJvb2xlYW4ucmVsZWFz
ZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQ29sb3Ioc3RkOjp1bmlxdWVfcHRy
PENvbG9yPiBjb2xvcikKLXsKLSAgICBBU1NFUlQoY29sb3IpOwotICAgIGF1dG8gYW5pbWF0ZWRU
eXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVkQ29sb3IpOwot
ICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmNvbG9yID0gY29sb3IucmVsZWFzZSgpOwotICAgIHJl
dHVybiBhbmltYXRlZFR5cGU7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+
IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlRW51bWVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPHVuc2ln
bmVkPiBlbnVtZXJhdGlvbikKLXsKLSAgICBBU1NFUlQoZW51bWVyYXRpb24pOwotICAgIGF1dG8g
YW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVk
RW51bWVyYXRpb24pOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmVudW1lcmF0aW9uID0gZW51
bWVyYXRpb24ucmVsZWFzZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Ci19Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdl
cihzdGQ6OnVuaXF1ZV9wdHI8aW50PiBpbnRlZ2VyKQotewotICAgIEFTU0VSVChpbnRlZ2VyKTsK
LSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBl
PihBbmltYXRlZEludGVnZXIpOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmludGVnZXIgPSBp
bnRlZ2VyLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXJP
cHRpb25hbEludGVnZXIoc3RkOjp1bmlxdWVfcHRyPHN0ZDo6cGFpcjxpbnQsIGludD4+IGludGVn
ZXJPcHRpb25hbEludGVnZXIpCi17Ci0gICAgQVNTRVJUKGludGVnZXJPcHRpb25hbEludGVnZXIp
OwotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5
cGU+KEFuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlcik7Ci0gICAgYW5pbWF0ZWRUeXBlLT5t
X2RhdGEuaW50ZWdlck9wdGlvbmFsSW50ZWdlciA9IGludGVnZXJPcHRpb25hbEludGVnZXIucmVs
ZWFzZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Ci19CisgICAgaWYgKCFtX293bnNWYWx1
ZSkKKyAgICAgICAgcmV0dXJuOwogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBT
VkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0aChzdGQ6OnVuaXF1ZV9wdHI8U1ZHTGVuZ3RoVmFs
dWU+IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQobGVuZ3RoKTsKLSAgICBhdXRvIGFuaW1hdGVkVHlw
ZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZExlbmd0aCk7Ci0g
ICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEubGVuZ3RoID0gbGVuZ3RoLnJlbGVhc2UoKTsKLSAgICBy
ZXR1cm4gYW5pbWF0ZWRUeXBlOworICAgIFdURjo6c3dpdGNoT24obV92YWx1ZSwKKyAgICAgICAg
WyZdKHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlKiwgdW5zaWduZWQqPiBhbmdsZUFuZEVudW1lcmF0
aW9uKSB7CisgICAgICAgICAgICBkZWxldGUgYW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdDsKKyAg
ICAgICAgICAgIGRlbGV0ZSBhbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZDsKKyAgICAgICAgfSwK
KyAgICAgICAgWyZdKGJvb2wqIGJvb2xlYW4pIHsKKyAgICAgICAgICAgIGRlbGV0ZSBib29sZWFu
OworICAgICAgICB9LAorICAgICAgICBbJl0oQ29sb3IqIGNvbG9yKSB7CisgICAgICAgICAgICBk
ZWxldGUgY29sb3I7CisgICAgICAgIH0sCisgICAgICAgIFsmXSh1bnNpZ25lZCogZW51bWVyYXRp
b24pIHsKKyAgICAgICAgICAgIGRlbGV0ZSBlbnVtZXJhdGlvbjsKKyAgICAgICAgfSwKKyAgICAg
ICAgWyZdKGludCogaW50ZWdlcikgeworICAgICAgICAgICAgZGVsZXRlIGludGVnZXI7CisgICAg
ICAgIH0sCisgICAgICAgIFsmXShzdGQ6OnBhaXI8aW50KiwgaW50Kj4gaW50ZWdlck9wdGlvbmFs
SW50ZWdlcikgeworICAgICAgICAgICAgZGVsZXRlIGludGVnZXJPcHRpb25hbEludGVnZXIuZmly
c3Q7CisgICAgICAgICAgICBkZWxldGUgaW50ZWdlck9wdGlvbmFsSW50ZWdlci5zZWNvbmQ7Cisg
ICAgICAgIH0sCisgICAgICAgIFsmXShTVkdMZW5ndGhWYWx1ZSogbGVuZ3RoKSB7CisgICAgICAg
ICAgICBkZWxldGUgbGVuZ3RoOworICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHTGVuZ3RoTGlz
dFZhbHVlcyogbGVuZ3RoTGlzdCkgeworICAgICAgICAgICAgZGVsZXRlIGxlbmd0aExpc3Q7Cisg
ICAgICAgIH0sCisgICAgICAgIFsmXShmbG9hdCogbnVtYmVyKSB7CisgICAgICAgICAgICBkZWxl
dGUgbnVtYmVyOworICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHTnVtYmVyTGlzdFZhbHVlcyog
bnVtYmVyTGlzdCkgeworICAgICAgICAgICAgZGVsZXRlIG51bWJlckxpc3Q7CisgICAgICAgIH0s
CisgICAgICAgIFsmXShzdGQ6OnBhaXI8ZmxvYXQqLCBmbG9hdCo+IG51bWJlck9wdGlvbmFsTnVt
YmVyKSB7CisgICAgICAgICAgICBkZWxldGUgbnVtYmVyT3B0aW9uYWxOdW1iZXIuZmlyc3Q7Cisg
ICAgICAgICAgICBkZWxldGUgbnVtYmVyT3B0aW9uYWxOdW1iZXIuc2Vjb25kOworICAgICAgICB9
LAorICAgICAgICBbJl0oU1ZHUGF0aEJ5dGVTdHJlYW0qIHBhdGgpIHsKKyAgICAgICAgICAgIGRl
bGV0ZSBwYXRoOworICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHUG9pbnRMaXN0VmFsdWVzKiBw
b2ludExpc3QpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwb2ludExpc3Q7CisgICAgICAgIH0sCisg
ICAgICAgIFsmXShTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUqIHByZXNlcnZlQXNwZWN0UmF0
aW8pIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgICAgICB9
LAorICAgICAgICBbJl0oRmxvYXRSZWN0KiByZWN0KSB7CisgICAgICAgICAgICBkZWxldGUgcmVj
dDsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKFN0cmluZyogc3RyaW5nKSB7CisgICAgICAgICAg
ICBkZWxldGUgc3RyaW5nOworICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHVHJhbnNmb3JtTGlz
dFZhbHVlcyogdHJhbnNmb3JtTGlzdCkgeworICAgICAgICAgICAgZGVsZXRlIHRyYW5zZm9ybUxp
c3Q7CisgICAgICAgIH0KKyAgICApOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRU
eXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0aExpc3Qoc3RkOjp1bmlxdWVfcHRyPFNW
R0xlbmd0aExpc3RWYWx1ZXM+IGxlbmd0aExpc3QpCi17Ci0gICAgQVNTRVJUKGxlbmd0aExpc3Qp
OwotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5
cGU+KEFuaW1hdGVkTGVuZ3RoTGlzdCk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEubGVuZ3Ro
TGlzdCA9IGxlbmd0aExpc3QucmVsZWFzZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Ci19
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3Jl
YXRlTnVtYmVyKHN0ZDo6dW5pcXVlX3B0cjxmbG9hdD4gbnVtYmVyKQotewotICAgIEFTU0VSVChu
dW1iZXIpOwotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmlt
YXRlZFR5cGU+KEFuaW1hdGVkTnVtYmVyKTsKLSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5udW1i
ZXIgPSBudW1iZXIucmVsZWFzZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Ci19Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTnVt
YmVyTGlzdChzdGQ6OnVuaXF1ZV9wdHI8U1ZHTnVtYmVyTGlzdFZhbHVlcz4gbnVtYmVyTGlzdCkK
LXsKLSAgICBBU1NFUlQobnVtYmVyTGlzdCk7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6
Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkVHlwZT4oQW5pbWF0ZWROdW1iZXJMaXN0KTsKLSAgICBh
bmltYXRlZFR5cGUtPm1fZGF0YS5udW1iZXJMaXN0ID0gbnVtYmVyTGlzdC5yZWxlYXNlKCk7Ci0g
ICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJPcHRpb25hbE51bWJlcihzdGQ6OnVu
aXF1ZV9wdHI8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IG51bWJlck9wdGlvbmFsTnVtYmVyKQot
ewotICAgIEFTU0VSVChudW1iZXJPcHRpb25hbE51bWJlcik7Ci0gICAgYXV0byBhbmltYXRlZFR5
cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkVHlwZT4oQW5pbWF0ZWROdW1iZXJPcHRp
b25hbE51bWJlcik7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEubnVtYmVyT3B0aW9uYWxOdW1i
ZXIgPSBudW1iZXJPcHRpb25hbE51bWJlci5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGFuaW1hdGVk
VHlwZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVQYXRoKHN0ZDo6dW5pcXVlX3B0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gcGF0aCkK
K2Jvb2wgU1ZHQW5pbWF0ZWRUeXBlOjpzdXBwb3J0c0FuaW1WYWwoQW5pbWF0ZWRQcm9wZXJ0eVR5
cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQocGF0aCk7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBz
dGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkVHlwZT4oQW5pbWF0ZWRQYXRoKTsKLSAgICBhbmlt
YXRlZFR5cGUtPm1fZGF0YS5wYXRoID0gcGF0aC5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGFuaW1h
dGVkVHlwZTsKKyAgICAvLyBBbmltYXRlZENvbG9yIGlzIG9ubHkgdXNlZCBmb3IgQ1NTIHByb3Bl
cnR5IGFuaW1hdGlvbnMuCisgICAgcmV0dXJuIHR5cGUgIT0gQW5pbWF0ZWRVbmtub3duICYmIHR5
cGUgIT0gQW5pbWF0ZWRDb2xvcjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlw
ZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQb2ludExpc3Qoc3RkOjp1bmlxdWVfcHRyPFNWR1Bv
aW50TGlzdFZhbHVlcz4gcG9pbnRMaXN0KQorQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgU1ZHQW5pbWF0
ZWRUeXBlOjp0eXBlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQocG9pbnRMaXN0KTsKLSAgICBhdXRv
IGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRl
ZFBvaW50cyk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEucG9pbnRMaXN0ID0gcG9pbnRMaXN0
LnJlbGVhc2UoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQorICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG1fdmFsdWUsCisgICAgICAgIFsgXShzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSos
IHVuc2lnbmVkKj4pIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZEFuZ2xlOworICAgICAg
ICB9LAorICAgICAgICBbIF0oYm9vbCopIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZEJv
b2xlYW47CisgICAgICAgIH0sCisgICAgICAgIFsgXShDb2xvciopIHsKKyAgICAgICAgICAgIHJl
dHVybiBBbmltYXRlZENvbG9yOworICAgICAgICB9LAorICAgICAgICBbIF0odW5zaWduZWQqKSB7
CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWRFbnVtZXJhdGlvbjsKKyAgICAgICAgfSwKKyAg
ICAgICAgWyBdKGludCopIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZEludGVnZXI7Cisg
ICAgICAgIH0sCisgICAgICAgIFsgXShzdGQ6OnBhaXI8aW50KiwgaW50Kj4pIHsKKyAgICAgICAg
ICAgIHJldHVybiBBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXI7CisgICAgICAgIH0sCisg
ICAgICAgIFsgXShTVkdMZW5ndGhWYWx1ZSopIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRl
ZExlbmd0aDsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKFNWR0xlbmd0aExpc3RWYWx1ZXMqKSB7
CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWRMZW5ndGhMaXN0OworICAgICAgICB9LAorICAg
ICAgICBbIF0oZmxvYXQqKSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWROdW1iZXI7Cisg
ICAgICAgIH0sCisgICAgICAgIFsgXShTVkdOdW1iZXJMaXN0VmFsdWVzKikgeworICAgICAgICAg
ICAgcmV0dXJuIEFuaW1hdGVkTnVtYmVyTGlzdDsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKHN0
ZDo6cGFpcjxmbG9hdCosIGZsb2F0Kj4pIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZE51
bWJlck9wdGlvbmFsTnVtYmVyOworICAgICAgICB9LAorICAgICAgICBbIF0oU1ZHUGF0aEJ5dGVT
dHJlYW0qKSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWRQYXRoOworICAgICAgICB9LAor
ICAgICAgICBbIF0oU1ZHUG9pbnRMaXN0VmFsdWVzKikgeworICAgICAgICAgICAgcmV0dXJuIEFu
aW1hdGVkUG9pbnRzOworICAgICAgICB9LAorICAgICAgICBbIF0oU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlKikgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVkUHJlc2VydmVBc3BlY3RS
YXRpbzsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKEZsb2F0UmVjdCopIHsKKyAgICAgICAgICAg
IHJldHVybiBBbmltYXRlZFJlY3Q7CisgICAgICAgIH0sCisgICAgICAgIFsgXShTdHJpbmcqKSB7
CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWRTdHJpbmc7CisgICAgICAgIH0sCisgICAgICAg
IFsgXShTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzKikgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1h
dGVkVHJhbnNmb3JtTGlzdDsKKyAgICAgICAgfQorICAgICk7CiAKLXN0ZDo6dW5pcXVlX3B0cjxT
VkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUHJlc2VydmVBc3BlY3RSYXRp
byhzdGQ6OnVuaXF1ZV9wdHI8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiBwcmVzZXJ2ZUFz
cGVjdFJhdGlvKQotewotICAgIEFTU0VSVChwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKLSAgICBhdXRv
IGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRl
ZFByZXNlcnZlQXNwZWN0UmF0aW8pOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLnByZXNlcnZl
QXNwZWN0UmF0aW8gPSBwcmVzZXJ2ZUFzcGVjdFJhdGlvLnJlbGVhc2UoKTsKLSAgICByZXR1cm4g
YW5pbWF0ZWRUeXBlOworICAgIHJldHVybiBBbmltYXRlZFVua25vd247CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUmVjdChzdGQ6
OnVuaXF1ZV9wdHI8RmxvYXRSZWN0PiByZWN0KQotewotICAgIEFTU0VSVChyZWN0KTsKLSAgICBh
dXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmlt
YXRlZFJlY3QpOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLnJlY3QgPSByZWN0LnJlbGVhc2Uo
KTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5p
bWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVN0cmluZyhzdGQ6OnVuaXF1ZV9wdHI8
U3RyaW5nPiBzdHJpbmcpCitTdHJpbmcgU1ZHQW5pbWF0ZWRUeXBlOjp2YWx1ZUFzU3RyaW5nKCkK
IHsKLSAgICBBU1NFUlQoc3RyaW5nKTsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFr
ZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZFN0cmluZyk7Ci0gICAgYW5pbWF0ZWRU
eXBlLT5tX2RhdGEuc3RyaW5nID0gc3RyaW5nLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gYW5pbWF0
ZWRUeXBlOwotfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRl
ZFR5cGU6OmNyZWF0ZVRyYW5zZm9ybUxpc3Qoc3RkOjp1bmlxdWVfcHRyPFNWR1RyYW5zZm9ybUxp
c3RWYWx1ZXM+IHRyYW5zZm9ybUxpc3QpCi17Ci0gICAgQVNTRVJUKHRyYW5zZm9ybUxpc3QpOwot
ICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+
KEFuaW1hdGVkVHJhbnNmb3JtTGlzdCk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEudHJhbnNm
b3JtTGlzdCA9IHRyYW5zZm9ybUxpc3QucmVsZWFzZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5
cGU7Ci19CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV92YWx1ZSwKKyAgICAgICAgWyZdKENv
bG9yKiBjb2xvcikgeworICAgICAgICAgICAgcmV0dXJuIGNvbG9yLT5zZXJpYWxpemVkKCk7Cisg
ICAgICAgIH0sCisgICAgICAgIFsmXShTVkdMZW5ndGhWYWx1ZSogbGVuZ3RoKSB7CisgICAgICAg
ICAgICByZXR1cm4gbGVuZ3RoLT52YWx1ZUFzU3RyaW5nKCk7CisgICAgICAgIH0sCisgICAgICAg
IFsmXShTVkdMZW5ndGhMaXN0VmFsdWVzKiBsZW5ndGhMaXN0KSB7CisgICAgICAgICAgICByZXR1
cm4gbGVuZ3RoTGlzdC0+dmFsdWVBc1N0cmluZygpOworICAgICAgICB9LAorICAgICAgICBbJl0o
ZmxvYXQqIG51bWJlcikgeworICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKCpudW1i
ZXIpOworICAgICAgICB9LAorICAgICAgICBbJl0oRmxvYXRSZWN0KiByZWN0KSB7CisgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIocmVjdC0+eCgpKSArICcgJyArIFN0cmluZzo6bnVt
YmVyKHJlY3QtPnkoKSkgKyAnICcgKyBTdHJpbmc6Om51bWJlcihyZWN0LT53aWR0aCgpKSArICcg
JyArIFN0cmluZzo6bnVtYmVyKHJlY3QtPmhlaWdodCgpKTsKKyAgICAgICAgfSwKKyAgICAgICAg
WyZdKFN0cmluZyogc3RyaW5nKSB7CisgICAgICAgICAgICByZXR1cm4gKnN0cmluZzsKKyAgICAg
ICAgfSwKIAotU3RyaW5nIFNWR0FuaW1hdGVkVHlwZTo6dmFsdWVBc1N0cmluZygpCi17Ci0gICAg
c3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEFuaW1hdGVkQ29sb3I6Ci0gICAgICAgIEFTU0VS
VChtX2RhdGEuY29sb3IpOwotICAgICAgICByZXR1cm4gbV9kYXRhLmNvbG9yLT5zZXJpYWxpemVk
KCk7Ci0gICAgY2FzZSBBbmltYXRlZExlbmd0aDoKLSAgICAgICAgQVNTRVJUKG1fZGF0YS5sZW5n
dGgpOwotICAgICAgICByZXR1cm4gbV9kYXRhLmxlbmd0aC0+dmFsdWVBc1N0cmluZygpOwotICAg
IGNhc2UgQW5pbWF0ZWRMZW5ndGhMaXN0OgotICAgICAgICBBU1NFUlQobV9kYXRhLmxlbmd0aExp
c3QpOwotICAgICAgICByZXR1cm4gbV9kYXRhLmxlbmd0aExpc3QtPnZhbHVlQXNTdHJpbmcoKTsK
LSAgICBjYXNlIEFuaW1hdGVkTnVtYmVyOgotICAgICAgICBBU1NFUlQobV9kYXRhLm51bWJlcik7
Ci0gICAgICAgIHJldHVybiBTdHJpbmc6Om51bWJlcigqbV9kYXRhLm51bWJlcik7Ci0gICAgY2Fz
ZSBBbmltYXRlZFJlY3Q6Ci0gICAgICAgIEFTU0VSVChtX2RhdGEucmVjdCk7Ci0gICAgICAgIHJl
dHVybiBTdHJpbmc6Om51bWJlcihtX2RhdGEucmVjdC0+eCgpKSArICcgJyArIFN0cmluZzo6bnVt
YmVyKG1fZGF0YS5yZWN0LT55KCkpICsgJyAnCi0gICAgICAgICAgICAgKyBTdHJpbmc6Om51bWJl
cihtX2RhdGEucmVjdC0+d2lkdGgoKSkgKyAnICcgKyBTdHJpbmc6Om51bWJlcihtX2RhdGEucmVj
dC0+aGVpZ2h0KCkpOwotICAgIGNhc2UgQW5pbWF0ZWRTdHJpbmc6Ci0gICAgICAgIEFTU0VSVCht
X2RhdGEuc3RyaW5nKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEuc3RyaW5nOworICAgICAgICAv
LyBUaGVzZSB0eXBlcyBkb24ndCBhcHBlYXIgaW4gdGhlIHRhYmxlIGluIFNWR0VsZW1lbnQ6OmNz
c1Byb3BlcnR5VG9UeXBlTWFwKCkgYW5kIHRodXMgZG9uJ3QgbmVlZCB2YWx1ZUFzU3RyaW5nKCkg
c3VwcG9ydC4KKyAgICAgICAgWyBdKHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlKiwgdW5zaWduZWQq
PikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgICAgIH0sCisgICAgICAgIFsgXShib29sKikgeworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgICAgIH0sCisgICAgICAgIFsgXSh1bnNpZ25lZCopIHsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9LAor
ICAgICAgICBbIF0oaW50KikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0sCisgICAgICAgIFsgXShzdGQ6
OnBhaXI8aW50KiwgaW50Kj4pIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9LAorICAgICAgICBbIF0oU1ZH
TnVtYmVyTGlzdFZhbHVlcyopIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9LAorICAgICAgICBbIF0oc3Rk
OjpwYWlyPGZsb2F0KiwgZmxvYXQqPikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0sCisgICAgICAgIFsg
XShTVkdQYXRoQnl0ZVN0cmVhbSopIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9LAorICAgICAgICBbIF0o
U1ZHUG9pbnRMaXN0VmFsdWVzKikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0sCisgICAgICAgIFsgXShT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUqKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgWyBdKFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXMqKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorICAg
ICk7CiAKLSAgICAvLyBUaGVzZSB0eXBlcyBkb24ndCBhcHBlYXIgaW4gdGhlIHRhYmxlIGluIFNW
R0VsZW1lbnQ6OmNzc1Byb3BlcnR5VG9UeXBlTWFwKCkgYW5kIHRodXMgZG9uJ3QgbmVlZCB2YWx1
ZUFzU3RyaW5nKCkgc3VwcG9ydC4KLSAgICBjYXNlIEFuaW1hdGVkQW5nbGU6Ci0gICAgY2FzZSBB
bmltYXRlZEJvb2xlYW46Ci0gICAgY2FzZSBBbmltYXRlZEVudW1lcmF0aW9uOgotICAgIGNhc2Ug
QW5pbWF0ZWRJbnRlZ2VyOgotICAgIGNhc2UgQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2Vy
OgotICAgIGNhc2UgQW5pbWF0ZWROdW1iZXJMaXN0OgotICAgIGNhc2UgQW5pbWF0ZWROdW1iZXJP
cHRpb25hbE51bWJlcjoKLSAgICBjYXNlIEFuaW1hdGVkUGF0aDoKLSAgICBjYXNlIEFuaW1hdGVk
UG9pbnRzOgotICAgIGNhc2UgQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOgotICAgIGNhc2Ug
QW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OgotICAgIGNhc2UgQW5pbWF0ZWRVbmtub3duOgotICAgICAg
ICAvLyBPbmx5IFNWRyBET00gYW5pbWF0aW9ucyB1c2UgdGhlc2UgcHJvcGVydHkgdHlwZXMgLSB0
aGF0IG1lYW5zIHZhbHVlQXNTdHJpbmcoKSBpcyBuZXZlciB1c2VkIGZvciB0aG9zZS4KLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAvLyBP
bmx5IFNWRyBET00gYW5pbWF0aW9ucyB1c2UgdGhlc2UgcHJvcGVydHkgdHlwZXMgLSB0aGF0IG1l
YW5zIHZhbHVlQXNTdHJpbmcoKSBpcyBuZXZlciB1c2VkIGZvciB0aG9zZS4KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIGJvb2wgU1ZHQW5pbWF0
ZWRUeXBlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBB
bmltYXRlZENvbG9yOgotICAgICAgICBBU1NFUlQobV9kYXRhLmNvbG9yKTsKLSAgICAgICAgKm1f
ZGF0YS5jb2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcih2YWx1ZS5zdHJpcFdoaXRlU3BhY2Uo
KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgQW5pbWF0ZWRMZW5ndGg6Ci0gICAg
ICAgIEFTU0VSVChtX2RhdGEubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuICFtX2RhdGEubGVuZ3Ro
LT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLCBTVkdMZW5ndGhWYWx1ZTo6bGVuZ3RoTW9kZUZvckFu
aW1hdGVkTGVuZ3RoQXR0cmlidXRlKGF0dHJOYW1lKSkuaGFzRXhjZXB0aW9uKCk7Ci0gICAgY2Fz
ZSBBbmltYXRlZExlbmd0aExpc3Q6Ci0gICAgICAgIEFTU0VSVChtX2RhdGEubGVuZ3RoTGlzdCk7
Ci0gICAgICAgIG1fZGF0YS5sZW5ndGhMaXN0LT5wYXJzZSh2YWx1ZSwgU1ZHTGVuZ3RoVmFsdWU6
Omxlbmd0aE1vZGVGb3JBbmltYXRlZExlbmd0aEF0dHJpYnV0ZShhdHRyTmFtZSkpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEFuaW1hdGVkTnVtYmVyOgotICAgICAgICBBU1NFUlQo
bV9kYXRhLm51bWJlcik7Ci0gICAgICAgIHBhcnNlTnVtYmVyRnJvbVN0cmluZyh2YWx1ZSwgKm1f
ZGF0YS5udW1iZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEFuaW1hdGVkUmVj
dDoKLSAgICAgICAgQVNTRVJUKG1fZGF0YS5yZWN0KTsKLSAgICAgICAgcGFyc2VSZWN0KHZhbHVl
LCAqbV9kYXRhLnJlY3QpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEFuaW1hdGVk
U3RyaW5nOgotICAgICAgICBBU1NFUlQobV9kYXRhLnN0cmluZyk7Ci0gICAgICAgICptX2RhdGEu
c3RyaW5nID0gdmFsdWU7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGJvb2wgcmVzdWx0ID0g
dHJ1ZTsKKyAgICAKKyAgICBXVEY6OnN3aXRjaE9uKG1fdmFsdWUsCisgICAgICAgIFsmXShDb2xv
ciogY29sb3IpIHsKKyAgICAgICAgICAgICpjb2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcih2
YWx1ZS5zdHJpcFdoaXRlU3BhY2UoKSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXShTVkdMZW5n
dGhWYWx1ZSogbGVuZ3RoKSB7CisgICAgICAgICAgICByZXN1bHQgPSAhbGVuZ3RoLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLCBTVkdMZW5ndGhWYWx1ZTo6bGVuZ3RoTW9kZUZvckFuaW1hdGVkTGVu
Z3RoQXR0cmlidXRlKGF0dHJOYW1lKSkuaGFzRXhjZXB0aW9uKCk7CisgICAgICAgIH0sCisgICAg
ICAgIFsmXShTVkdMZW5ndGhMaXN0VmFsdWVzKiBsZW5ndGhMaXN0KSB7CisgICAgICAgICAgICBs
ZW5ndGhMaXN0LT5wYXJzZSh2YWx1ZSwgU1ZHTGVuZ3RoVmFsdWU6Omxlbmd0aE1vZGVGb3JBbmlt
YXRlZExlbmd0aEF0dHJpYnV0ZShhdHRyTmFtZSkpOworICAgICAgICB9LAorICAgICAgICBbJl0o
ZmxvYXQqIG51bWJlcikgeworICAgICAgICAgICAgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKHZhbHVl
LCAqbnVtYmVyKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKEZsb2F0UmVjdCogcmVjdCkgewor
ICAgICAgICAgICAgcGFyc2VSZWN0KHZhbHVlLCAqcmVjdCk7CisgICAgICAgIH0sCisgICAgICAg
IFsmXShTdHJpbmcqIHN0cmluZykgeworICAgICAgICAgICAgKnN0cmluZyA9IHZhbHVlOworICAg
ICAgICB9LAogCi0gICAgLy8gVGhlc2UgdHlwZXMgZG9uJ3QgYXBwZWFyIGluIHRoZSB0YWJsZSBp
biBTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eVRvVHlwZU1hcCgpIGFuZCB0aHVzIGRvbid0IG5lZWQg
c2V0VmFsdWVBc1N0cmluZygpIHN1cHBvcnQuIAotICAgIGNhc2UgQW5pbWF0ZWRBbmdsZToKLSAg
ICBjYXNlIEFuaW1hdGVkQm9vbGVhbjoKLSAgICBjYXNlIEFuaW1hdGVkRW51bWVyYXRpb246Ci0g
ICAgY2FzZSBBbmltYXRlZEludGVnZXI6Ci0gICAgY2FzZSBBbmltYXRlZEludGVnZXJPcHRpb25h
bEludGVnZXI6Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlckxpc3Q6Ci0gICAgY2FzZSBBbmltYXRl
ZE51bWJlck9wdGlvbmFsTnVtYmVyOgotICAgIGNhc2UgQW5pbWF0ZWRQYXRoOgotICAgIGNhc2Ug
QW5pbWF0ZWRQb2ludHM6Ci0gICAgY2FzZSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86Ci0g
ICAgY2FzZSBBbmltYXRlZFRyYW5zZm9ybUxpc3Q6Ci0gICAgY2FzZSBBbmltYXRlZFVua25vd246
Ci0gICAgICAgIC8vIE9ubHkgU1ZHIERPTSBhbmltYXRpb25zIHVzZSB0aGVzZSBwcm9wZXJ0eSB0
eXBlcyAtIHRoYXQgbWVhbnMgc2V0VmFsdWVBc1N0cmluZygpIGlzIG5ldmVyIHVzZWQgZm9yIHRo
b3NlLgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQorICAgICAgICAvLyBUaGVzZSB0eXBlcyBkb24ndCBhcHBl
YXIgaW4gdGhlIHRhYmxlIGluIFNWR0VsZW1lbnQ6OmNzc1Byb3BlcnR5VG9UeXBlTWFwKCkgYW5k
IHRodXMgZG9uJ3QgbmVlZCB2YWx1ZUFzU3RyaW5nKCkgc3VwcG9ydC4KKyAgICAgICAgWyBdKHN0
ZDo6cGFpcjxTVkdBbmdsZVZhbHVlKiwgdW5zaWduZWQqPikgeworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0sCisgICAgICAgIFsgXShib29sKikgeworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0sCisgICAgICAgIFsgXSh1bnNp
Z25lZCopIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9LAor
ICAgICAgICBbIF0oaW50KikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0sCisgICAgICAgIFsgXShzdGQ6OnBhaXI8aW50KiwgaW50Kj4pIHsKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9LAorICAgICAgICBbIF0oU1ZHTnVt
YmVyTGlzdFZhbHVlcyopIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9LAorICAgICAgICBbIF0oc3RkOjpwYWlyPGZsb2F0KiwgZmxvYXQqPikgeworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0sCisgICAgICAgIFsgXShTVkdQ
YXRoQnl0ZVN0cmVhbSopIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9LAorICAgICAgICBbIF0oU1ZHUG9pbnRMaXN0VmFsdWVzKikgeworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0sCisgICAgICAgIFsgXShTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUqKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfSwKKyAgICAgICAgWyBdKFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXMqKSB7CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICk7CiAKLWJvb2wg
U1ZHQW5pbWF0ZWRUeXBlOjpzdXBwb3J0c0FuaW1WYWwoQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgdHlw
ZSkKLXsKLSAgICAvLyBBbmltYXRlZENvbG9yIGlzIG9ubHkgdXNlZCBmb3IgQ1NTIHByb3BlcnR5
IGFuaW1hdGlvbnMuCi0gICAgcmV0dXJuIHR5cGUgIT0gQW5pbWF0ZWRVbmtub3duICYmIHR5cGUg
IT0gQW5pbWF0ZWRDb2xvcjsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBl
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmgKaW5kZXggYTBjMTFhZDFl
NGMyYTRkNGUzMWM3ZTQ2Y2UyOGY2MjhhYTk5MjI3NC4uZTZlOTM3NzRlNmIwOGIwZWIxZWZlMTFk
OTM4OWE4MTYzMWZlZGFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVkVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuaApAQCAt
MSwyMCArMSwyNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKICNwcmFnbWEgb25jZQpAQCAtMjUsMTEgKzMyLDE0IEBACiAjaW5jbHVkZSAiU1ZHTGVuZ3Ro
TGlzdFZhbHVlcy5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aFZhbHVlLmgiCiAjaW5jbHVkZSAiU1ZH
TnVtYmVyTGlzdFZhbHVlcy5oIgorI2luY2x1ZGUgIlNWR1BhdGhCeXRlU3RyZWFtLmgiCiAjaW5j
bHVkZSAiU1ZHUG9pbnRMaXN0VmFsdWVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlLmgiCiAjaW5jbHVkZSAiU1ZHUHJvcGVydHlJbmZvLmgiCiAjaW5jbHVkZSAiU1ZH
VHJhbnNmb3JtTGlzdFZhbHVlcy5oIgogCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbTsKQEAgLTM3LDI2NiAr
NDcsMTQ1IEBAIGNsYXNzIFNWR1BhdGhCeXRlU3RyZWFtOwogY2xhc3MgU1ZHQW5pbWF0ZWRUeXBl
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTVkdBbmltYXRl
ZFR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVR5cGUpOwogICAgIHZpcnR1YWwgflNWR0FuaW1hdGVkVHlw
ZSgpOwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0
ZUFuZ2xlQW5kRW51bWVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPHN0ZDo6cGFpcjxTVkdBbmdsZVZh
bHVlLCB1bnNpZ25lZD4+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gY3JlYXRlQm9vbGVhbihzdGQ6OnVuaXF1ZV9wdHI8Ym9vbD4pOwotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVDb2xvcihzdGQ6OnVuaXF1ZV9w
dHI8Q29sb3I+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
Y3JlYXRlRW51bWVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVkPik7Ci0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZUludGVnZXIoc3RkOjp1bmlx
dWVfcHRyPGludD4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBjcmVhdGVJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnBhaXI8
aW50LCBpbnQ+Pik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+
IGNyZWF0ZUxlbmd0aChzdGQ6OnVuaXF1ZV9wdHI8U1ZHTGVuZ3RoVmFsdWU+KTsKLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlTGVuZ3RoTGlzdChzdGQ6
OnVuaXF1ZV9wdHI8U1ZHTGVuZ3RoTGlzdFZhbHVlcz4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVOdW1iZXIoc3RkOjp1bmlxdWVfcHRyPGZsb2F0
Pik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZU51
bWJlckxpc3Qoc3RkOjp1bmlxdWVfcHRyPFNWR051bWJlckxpc3RWYWx1ZXM+KTsKLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlTnVtYmVyT3B0aW9uYWxO
dW1iZXIoc3RkOjp1bmlxdWVfcHRyPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+Pik7Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVBhdGgoc3RkOjp1bmlx
dWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFtPik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxT
VkdBbmltYXRlZFR5cGU+IGNyZWF0ZVBvaW50TGlzdChzdGQ6OnVuaXF1ZV9wdHI8U1ZHUG9pbnRM
aXN0VmFsdWVzPik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+
IGNyZWF0ZVByZXNlcnZlQXNwZWN0UmF0aW8oc3RkOjp1bmlxdWVfcHRyPFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZT4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRU
eXBlPiBjcmVhdGVSZWN0KHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFJlY3Q+KTsKLSAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlU3RyaW5nKHN0ZDo6dW5pcXVl
X3B0cjxTdHJpbmc+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlw
ZT4gY3JlYXRlVHJhbnNmb3JtTGlzdChzdGQ6OnVuaXF1ZV9wdHI8U1ZHVHJhbnNmb3JtTGlzdFZh
bHVlcz4pOwotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQW5pbVZhbChBbmltYXRlZFByb3BlcnR5
VHlwZSk7Ci0KLSAgICBBbmltYXRlZFByb3BlcnR5VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9Ci0KLSAgICAvLyBOb24tbXV0YWJsZSBhY2Nlc3NvcnMuCi0gICAgY29uc3Qgc3Rk
OjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPiYgYW5nbGVBbmRFbnVtZXJhdGlvbigpIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkQW5nbGUpOwotICAg
ICAgICByZXR1cm4gKm1fZGF0YS5hbmdsZUFuZEVudW1lcmF0aW9uOwotICAgIH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRU
eXBlPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFQ+JiYgdmFsdWUpCisgICAgICAgIHsgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+KG5ldyBTVkdBbmltYXRlZFR5cGUoV1RG
TW92ZSh2YWx1ZSkpKTsgfQogCi0gICAgY29uc3QgYm9vbCYgYm9vbGVhbigpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkQm9vbGVhbik7Ci0gICAgICAgIHJl
dHVybiAqbV9kYXRhLmJvb2xlYW47Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZShUJiB2YWx1
ZSkKKyAgICAgICAgeyByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4obmV3
IFNWR0FuaW1hdGVkVHlwZSh2YWx1ZSkpOyB9CiAKLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZENvbG9yKTsKLSAg
ICAgICAgcmV0dXJuICptX2RhdGEuY29sb3I7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQxLCB0eXBlbmFtZSBUMj4KKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxUMT4mJiB2YWx1ZTEsIHN0ZDo6dW5pcXVlX3B0
cjxUMj4mJiB2YWx1ZTIpCisgICAgICAgIHsgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmlt
YXRlZFR5cGU+KG5ldyBTVkdBbmltYXRlZFR5cGUoV1RGTW92ZSh2YWx1ZTEpLCBXVEZNb3ZlKHZh
bHVlMikpKTsgfQogCi0gICAgY29uc3QgdW5zaWduZWQmIGVudW1lcmF0aW9uKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbik7Ci0gICAg
ICAgIHJldHVybiAqbV9kYXRhLmVudW1lcmF0aW9uOwotICAgIH0KLQotICAgIGNvbnN0IGludCYg
aW50ZWdlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVk
SW50ZWdlcik7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLmludGVnZXI7Ci0gICAgfQotCi0gICAg
Y29uc3Qgc3RkOjpwYWlyPGludCwgaW50PiYgaW50ZWdlck9wdGlvbmFsSW50ZWdlcigpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkSW50ZWdlck9wdGlvbmFs
SW50ZWdlcik7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLmludGVnZXJPcHRpb25hbEludGVnZXI7
Ci0gICAgfQotCi0gICAgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGxlbmd0aCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkTGVuZ3RoKTsKLSAgICAgICAgcmV0
dXJuICptX2RhdGEubGVuZ3RoOwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDI+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNy
ZWF0ZShUMSYgdmFsdWUxLCBUMiYgdmFsdWUyKQorICAgICAgICB7IHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPihuZXcgU1ZHQW5pbWF0ZWRUeXBlKHZhbHVlMSwgdmFsdWUy
KSk7IH0KIAotICAgIGNvbnN0IFNWR0xlbmd0aExpc3RWYWx1ZXMmIGxlbmd0aExpc3QoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZExlbmd0aExpc3QpOwot
ICAgICAgICByZXR1cm4gKm1fZGF0YS5sZW5ndGhMaXN0OwotICAgIH0KLQotICAgIGNvbnN0IGZs
b2F0JiBudW1iZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmlt
YXRlZE51bWJlcik7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLm51bWJlcjsKLSAgICB9Ci0KLSAg
ICBjb25zdCBTVkdOdW1iZXJMaXN0VmFsdWVzJiBudW1iZXJMaXN0KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWROdW1iZXJMaXN0KTsKLSAgICAgICAgcmV0
dXJuICptX2RhdGEubnVtYmVyTGlzdDsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnBhaXI8Zmxv
YXQsIGZsb2F0PiYgbnVtYmVyT3B0aW9uYWxOdW1iZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyKTsKLSAgICAgICAg
cmV0dXJuICptX2RhdGEubnVtYmVyT3B0aW9uYWxOdW1iZXI7Ci0gICAgfQotCi0gICAgY29uc3Qg
U1ZHUGF0aEJ5dGVTdHJlYW0qIHBhdGgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBBbmltYXRlZFBhdGgpOwotICAgICAgICByZXR1cm4gbV9kYXRhLnBhdGg7Ci0gICAg
fQotCi0gICAgY29uc3QgU1ZHUG9pbnRMaXN0VmFsdWVzJiBwb2ludExpc3QoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFBvaW50cyk7Ci0gICAgICAgIHJl
dHVybiAqbV9kYXRhLnBvaW50TGlzdDsKLSAgICB9Ci0KLSAgICBjb25zdCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8oKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8pOwotICAgICAg
ICByZXR1cm4gKm1fZGF0YS5wcmVzZXJ2ZUFzcGVjdFJhdGlvOwotICAgIH0KLQotICAgIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09
IEFuaW1hdGVkUmVjdCk7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLnJlY3Q7Ci0gICAgfQorICAg
IHN0YXRpYyBib29sIHN1cHBvcnRzQW5pbVZhbChBbmltYXRlZFByb3BlcnR5VHlwZSk7CiAKLSAg
ICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90
eXBlID09IEFuaW1hdGVkU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEuc3RyaW5nOwot
ICAgIH0KKyAgICBBbmltYXRlZFByb3BlcnR5VHlwZSB0eXBlKCkgY29uc3Q7CiAKLSAgICBjb25z
dCBTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzJiB0cmFuc2Zvcm1MaXN0KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0KTsKLSAgICAgICAg
cmV0dXJuICptX2RhdGEudHJhbnNmb3JtTGlzdDsKLSAgICB9CisgICAgLy8gTm9uLW11dGFibGUg
YWNjZXNzb3JzLgorICAgIGNvbnN0IHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlKiwgdW5zaWduZWQq
PiYgYW5nbGVBbmRFbnVtZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHZhbHVlPFNWR0FuZ2xlVmFs
dWUsIHVuc2lnbmVkPigpOyB9CisgICAgY29uc3QgYm9vbCYgYm9vbGVhbigpIGNvbnN0IHsgcmV0
dXJuICp2YWx1ZTxib29sPigpOyB9CisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gKnZhbHVlPENvbG9yPigpOyB9CisgICAgY29uc3QgdW5zaWduZWQmIGVudW1lcmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gKnZhbHVlPHVuc2lnbmVkPigpOyB9CisgICAgY29uc3QgaW50JiBp
bnRlZ2VyKCkgY29uc3QgeyByZXR1cm4gKnZhbHVlPGludD4oKTsgfQorICAgIGNvbnN0IHN0ZDo6
cGFpcjxpbnQqLCBpbnQqPiYgaW50ZWdlck9wdGlvbmFsSW50ZWdlcigpIGNvbnN0IHsgcmV0dXJu
IHZhbHVlPGludCwgaW50PigpOyB9CisgICAgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuICp2YWx1ZTxTVkdMZW5ndGhWYWx1ZT4oKTsgfQorICAgIGNvbnN0IFNW
R0xlbmd0aExpc3RWYWx1ZXMmIGxlbmd0aExpc3QoKSBjb25zdCB7IHJldHVybiAqdmFsdWU8U1ZH
TGVuZ3RoTGlzdFZhbHVlcz4oKTsgfQorICAgIGNvbnN0IGZsb2F0JiBudW1iZXIoKSBjb25zdCB7
IHJldHVybiAqdmFsdWU8ZmxvYXQ+KCk7IH0KKyAgICBjb25zdCBTVkdOdW1iZXJMaXN0VmFsdWVz
JiBudW1iZXJMaXN0KCkgY29uc3QgeyByZXR1cm4gKnZhbHVlPFNWR051bWJlckxpc3RWYWx1ZXM+
KCk7IH0KKyAgICBjb25zdCBzdGQ6OnBhaXI8ZmxvYXQqLCBmbG9hdCo+JiBudW1iZXJPcHRpb25h
bE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIHZhbHVlPGZsb2F0LCBmbG9hdD4oKTsgfQorICAgIGNv
bnN0IFNWR1BhdGhCeXRlU3RyZWFtKiBwYXRoKCkgY29uc3QgeyByZXR1cm4gdmFsdWU8U1ZHUGF0
aEJ5dGVTdHJlYW0+KCk7IH0KKyAgICBjb25zdCBTVkdQb2ludExpc3RWYWx1ZXMmIHBvaW50TGlz
dCgpIGNvbnN0IHsgcmV0dXJuICp2YWx1ZTxTVkdQb2ludExpc3RWYWx1ZXM+KCk7IH0KKyAgICBj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8oKSBj
b25zdCB7IHJldHVybiAqdmFsdWU8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPigpOyB9Cisg
ICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gKnZhbHVlPEZsb2F0UmVj
dD4oKTsgfQorICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKnZhbHVl
PFN0cmluZz4oKTsgfQorICAgIGNvbnN0IFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXMmIHRyYW5zZm9y
bUxpc3QoKSBjb25zdCB7IHJldHVybiAqdmFsdWU8U1ZHVHJhbnNmb3JtTGlzdFZhbHVlcz4oKTsg
fQogCiAgICAgLy8gTXV0YWJsZSBhY2Nlc3NvcnMuCi0gICAgc3RkOjpwYWlyPFNWR0FuZ2xlVmFs
dWUsIHVuc2lnbmVkPiYgYW5nbGVBbmRFbnVtZXJhdGlvbigpCi0gICAgewotICAgICAgICBBU1NF
UlQobV90eXBlID09IEFuaW1hdGVkQW5nbGUpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5hbmds
ZUFuZEVudW1lcmF0aW9uOwotICAgIH0KLQotICAgIGJvb2wmIGJvb2xlYW4oKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZEJvb2xlYW4pOwotICAgICAgICByZXR1cm4g
Km1fZGF0YS5ib29sZWFuOwotICAgIH0KLQotICAgIENvbG9yJiBjb2xvcigpCi0gICAgewotICAg
ICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkQ29sb3IpOwotICAgICAgICByZXR1cm4gKm1f
ZGF0YS5jb2xvcjsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCYgZW51bWVyYXRpb24oKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZEVudW1lcmF0aW9uKTsKLSAgICAgICAg
cmV0dXJuICptX2RhdGEuZW51bWVyYXRpb247Ci0gICAgfQotCi0gICAgaW50JiBpbnRlZ2VyKCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRJbnRlZ2VyKTsKLSAgICAg
ICAgcmV0dXJuICptX2RhdGEuaW50ZWdlcjsKLSAgICB9Ci0KLSAgICBzdGQ6OnBhaXI8aW50LCBp
bnQ+JiBpbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5
cGUgPT0gQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKTsKLSAgICAgICAgcmV0dXJuICpt
X2RhdGEuaW50ZWdlck9wdGlvbmFsSW50ZWdlcjsKLSAgICB9Ci0KLSAgICBTVkdMZW5ndGhWYWx1
ZSYgbGVuZ3RoKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRMZW5n
dGgpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5sZW5ndGg7Ci0gICAgfQorICAgIHN0ZDo6cGFp
cjxTVkdBbmdsZVZhbHVlKiwgdW5zaWduZWQqPiYgYW5nbGVBbmRFbnVtZXJhdGlvbigpIHsgcmV0
dXJuIHZhbHVlPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPigpOyB9CisgICAgYm9vbCYgYm9vbGVh
bigpIHsgcmV0dXJuICp2YWx1ZTxib29sPigpOyB9CisgICAgQ29sb3ImIGNvbG9yKCkgeyByZXR1
cm4gKnZhbHVlPENvbG9yPigpOyB9CisgICAgdW5zaWduZWQmIGVudW1lcmF0aW9uKCkgeyByZXR1
cm4gKnZhbHVlPHVuc2lnbmVkPigpOyB9CisgICAgaW50JiBpbnRlZ2VyKCkgeyByZXR1cm4gKnZh
bHVlPGludD4oKTsgfQorICAgIHN0ZDo6cGFpcjxpbnQqLCBpbnQqPiYgaW50ZWdlck9wdGlvbmFs
SW50ZWdlcigpIHsgcmV0dXJuIHZhbHVlPGludCwgaW50PigpOyB9CisgICAgU1ZHTGVuZ3RoVmFs
dWUmIGxlbmd0aCgpIHsgcmV0dXJuICp2YWx1ZTxTVkdMZW5ndGhWYWx1ZT4oKTsgfQorICAgIFNW
R0xlbmd0aExpc3RWYWx1ZXMmIGxlbmd0aExpc3QoKSB7IHJldHVybiAqdmFsdWU8U1ZHTGVuZ3Ro
TGlzdFZhbHVlcz4oKTsgfQorICAgIGZsb2F0JiBudW1iZXIoKSB7IHJldHVybiAqdmFsdWU8Zmxv
YXQ+KCk7IH0KKyAgICBTVkdOdW1iZXJMaXN0VmFsdWVzJiBudW1iZXJMaXN0KCkgeyByZXR1cm4g
KnZhbHVlPFNWR051bWJlckxpc3RWYWx1ZXM+KCk7IH0KKyAgICBzdGQ6OnBhaXI8ZmxvYXQqLCBm
bG9hdCo+JiBudW1iZXJPcHRpb25hbE51bWJlcigpIHsgcmV0dXJuIHZhbHVlPGZsb2F0LCBmbG9h
dD4oKTsgfQorICAgIFNWR1BhdGhCeXRlU3RyZWFtKiBwYXRoKCkgeyByZXR1cm4gdmFsdWU8U1ZH
UGF0aEJ5dGVTdHJlYW0+KCk7IH0KKyAgICBTVkdQb2ludExpc3RWYWx1ZXMmIHBvaW50TGlzdCgp
IHsgcmV0dXJuICp2YWx1ZTxTVkdQb2ludExpc3RWYWx1ZXM+KCk7IH0KKyAgICBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8oKSB7IHJldHVybiAqdmFsdWU8
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPigpOyB9CisgICAgRmxvYXRSZWN0JiByZWN0KCkg
eyByZXR1cm4gKnZhbHVlPEZsb2F0UmVjdD4oKTsgfQorICAgIFN0cmluZyYgc3RyaW5nKCkgeyBy
ZXR1cm4gKnZhbHVlPFN0cmluZz4oKTsgfQorICAgIFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXMmIHRy
YW5zZm9ybUxpc3QoKSB7IHJldHVybiAqdmFsdWU8U1ZHVHJhbnNmb3JtTGlzdFZhbHVlcz4oKTsg
fQogCi0gICAgU1ZHTGVuZ3RoTGlzdFZhbHVlcyYgbGVuZ3RoTGlzdCgpCi0gICAgewotICAgICAg
ICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkTGVuZ3RoTGlzdCk7Ci0gICAgICAgIHJldHVybiAq
bV9kYXRhLmxlbmd0aExpc3Q7Ci0gICAgfQotCi0gICAgZmxvYXQmIG51bWJlcigpCi0gICAgewot
ICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkTnVtYmVyKTsKLSAgICAgICAgcmV0dXJu
ICptX2RhdGEubnVtYmVyOwotICAgIH0KKyAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpOworICAg
IGJvb2wgc2V0VmFsdWVBc1N0cmluZyhjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5n
Jik7CiAKLSAgICBTVkdOdW1iZXJMaXN0VmFsdWVzJiBudW1iZXJMaXN0KCkKK3ByaXZhdGU6Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBTVkdBbmltYXRlZFR5cGUoc3RkOjp1bmlxdWVf
cHRyPFQ+JiYgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZS5yZWxlYXNlKCkpCiAgICAg
ewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkTnVtYmVyTGlzdCk7Ci0gICAgICAg
IHJldHVybiAqbV9kYXRhLm51bWJlckxpc3Q7CiAgICAgfQotCi0gICAgc3RkOjpwYWlyPGZsb2F0
LCBmbG9hdD4mIG51bWJlck9wdGlvbmFsTnVtYmVyKCkKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIFNWR0FuaW1hdGVkVHlwZShUJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVl
KCZ2YWx1ZSkKKyAgICAgICAgLCBtX293bnNWYWx1ZShmYWxzZSkKICAgICB7Ci0gICAgICAgIEFT
U0VSVChtX3R5cGUgPT0gQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlcik7Ci0gICAgICAgIHJl
dHVybiAqbV9kYXRhLm51bWJlck9wdGlvbmFsTnVtYmVyOwogICAgIH0KIAotICAgIFNWR1BhdGhC
eXRlU3RyZWFtKiBwYXRoKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+
CisgICAgU1ZHQW5pbWF0ZWRUeXBlKHN0ZDo6dW5pcXVlX3B0cjxUMT4mJiB2YWx1ZTEsIHN0ZDo6
dW5pcXVlX3B0cjxUMj4mJiB2YWx1ZTIpCisgICAgICAgIDogbV92YWx1ZShzdGQ6OnBhaXI8VDEq
LCBUMio+KHZhbHVlMS5yZWxlYXNlKCksIHZhbHVlMi5yZWxlYXNlKCkpKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFBhdGgpOwotICAgICAgICByZXR1cm4gbV9kYXRh
LnBhdGg7CiAgICAgfQogCi0gICAgU1ZHUG9pbnRMaXN0VmFsdWVzJiBwb2ludExpc3QoKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KKyAgICBTVkdBbmltYXRlZFR5cGUo
VDEmIHZhbHVlMSwgVDImIHZhbHVlMikKKyAgICAgICAgOiBtX3ZhbHVlKHN0ZDo6cGFpcjxUMSos
IFQyKj4oJnZhbHVlMSwgJnZhbHVlMikpCisgICAgICAgICwgbV9vd25zVmFsdWUoZmFsc2UpCiAg
ICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkUG9pbnRzKTsKLSAgICAgICAg
cmV0dXJuICptX2RhdGEucG9pbnRMaXN0OwogICAgIH0KIAotICAgIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbygpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBjb25zdCBUKiB2YWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV90
eXBlID09IEFuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbyk7Ci0gICAgICAgIHJldHVybiAqbV9k
YXRhLnByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFQqPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxUKj4obV92YWx1
ZSk7CiAgICAgfQotCi0gICAgRmxvYXRSZWN0JiByZWN0KCkKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIFQqIHZhbHVlKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUg
PT0gQW5pbWF0ZWRSZWN0KTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEucmVjdDsKKyAgICAgICAg
QVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VCo+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIFdURjo6Z2V0PFQqPihtX3ZhbHVlKTsKICAgICB9CiAKLSAgICBTdHJpbmcmIHN0cmluZygp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorICAgIGNvbnN0IHN0ZDo6
cGFpcjxUMSosIFQyKj4mIHZhbHVlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5
cGUgPT0gQW5pbWF0ZWRTdHJpbmcpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5zdHJpbmc7Cisg
ICAgICAgIEFTU0VSVCgoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnBhaXI8VDEqLCBUMio+
PihtX3ZhbHVlKSkpOworICAgICAgICByZXR1cm4gV1RGOjpnZXQ8c3RkOjpwYWlyPFQxKiwgVDIq
Pj4obV92YWx1ZSk7CiAgICAgfQotCi0gICAgU1ZHVHJhbnNmb3JtTGlzdFZhbHVlcyYgdHJhbnNm
b3JtTGlzdCgpCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgor
ICAgIHN0ZDo6cGFpcjxUMSosIFQyKj4mIHZhbHVlKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X3R5cGUgPT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0KTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEu
dHJhbnNmb3JtTGlzdDsKKyAgICAgICAgQVNTRVJUKChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHN0
ZDo6cGFpcjxUMSosIFQyKj4+KG1fdmFsdWUpKSk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxz
dGQ6OnBhaXI8VDEqLCBUMio+PihtX3ZhbHVlKTsKICAgICB9CiAKLSAgICBTdHJpbmcgdmFsdWVB
c1N0cmluZygpOwotICAgIGJvb2wgc2V0VmFsdWVBc1N0cmluZyhjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgU3RyaW5nJik7Ci0KLXByaXZhdGU6Ci0gICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUg
bV90eXBlOwotCi0gICAgdW5pb24gRGF0YVVuaW9uIHsKLSAgICAgICAgRGF0YVVuaW9uKCkKLSAg
ICAgICAgICAgIDogbGVuZ3RoKG51bGxwdHIpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4qIGFuZ2xlQW5kRW51bWVyYXRp
b247Ci0gICAgICAgIGJvb2wqIGJvb2xlYW47Ci0gICAgICAgIENvbG9yKiBjb2xvcjsKLSAgICAg
ICAgdW5zaWduZWQqIGVudW1lcmF0aW9uOwotICAgICAgICBpbnQqIGludGVnZXI7Ci0gICAgICAg
IHN0ZDo6cGFpcjxpbnQsIGludD4qIGludGVnZXJPcHRpb25hbEludGVnZXI7Ci0gICAgICAgIFNW
R0xlbmd0aFZhbHVlKiBsZW5ndGg7Ci0gICAgICAgIFNWR0xlbmd0aExpc3RWYWx1ZXMqIGxlbmd0
aExpc3Q7Ci0gICAgICAgIGZsb2F0KiBudW1iZXI7Ci0gICAgICAgIFNWR051bWJlckxpc3RWYWx1
ZXMqIG51bWJlckxpc3Q7Ci0gICAgICAgIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+KiBudW1iZXJP
cHRpb25hbE51bWJlcjsKLSAgICAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0qIHBhdGg7Ci0gICAgICAg
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSogcHJlc2VydmVBc3BlY3RSYXRpbzsKLSAgICAg
ICAgU1ZHUG9pbnRMaXN0VmFsdWVzKiBwb2ludExpc3Q7Ci0gICAgICAgIEZsb2F0UmVjdCogcmVj
dDsKLSAgICAgICAgU3RyaW5nKiBzdHJpbmc7Ci0gICAgICAgIFNWR1RyYW5zZm9ybUxpc3RWYWx1
ZXMqIHRyYW5zZm9ybUxpc3Q7Ci0gICAgfSBtX2RhdGE7CisgICAgVmFyaWFudDwKKyAgICAgICAg
c3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUqLCB1bnNpZ25lZCo+LAorICAgICAgICBib29sKiwKKyAg
ICAgICAgQ29sb3IqLAorICAgICAgICB1bnNpZ25lZCosCisgICAgICAgIGludCosCisgICAgICAg
IHN0ZDo6cGFpcjxpbnQqLCBpbnQqPiwKKyAgICAgICAgU1ZHTGVuZ3RoVmFsdWUqLAorICAgICAg
ICBTVkdMZW5ndGhMaXN0VmFsdWVzKiwKKyAgICAgICAgZmxvYXQqLAorICAgICAgICBTVkdOdW1i
ZXJMaXN0VmFsdWVzKiwKKyAgICAgICAgc3RkOjpwYWlyPGZsb2F0KiwgZmxvYXQqPiwKKyAgICAg
ICAgU1ZHUGF0aEJ5dGVTdHJlYW0qLAorICAgICAgICBTVkdQb2ludExpc3RWYWx1ZXMqLAorICAg
ICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUqLAorICAgICAgICBGbG9hdFJlY3QqLAor
ICAgICAgICBTdHJpbmcqLAorICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzKgorICAgID4g
bV92YWx1ZTsKKyAgICAKKyAgICBib29sIG1fb3duc1ZhbHVlIHsgdHJ1ZSB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkVHlwZUFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBl
QW5pbWF0b3IuaAppbmRleCBjYjczNTI2MzJhYTVlMDU3NGRmY2EyMjVjNTUyNzg2YTczYTliNzg1
Li5jZTUzMmU0NWZlMjY2NGVlZTc5OTRmNjY4MWMyNWZmMThiYzJkYzZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuaApAQCAtNjMsMTQgKzYzLDE4IEBA
IHByb3RlY3RlZDoKIAogICAgIC8vIEhlbHBlcnMgZm9yIGFuaW1hdG9ycyB0aGF0IG9wZXJhdGUg
b24gc2luZ2xlIHR5cGVzLCBlZy4ganVzdCBvbmUgU1ZHQW5pbWF0ZWRJbnRlZ2VyLgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEFuaW1WYWxUeXBlPgotICAgIHN0ZDo6dW5pcXVlX3B0cjx0eXBlbmFt
ZSBBbmltVmFsVHlwZTo6Q29udGVudFR5cGU+IGNvbnN0cnVjdEZyb21CYXNlVmFsdWUoY29uc3Qg
U1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQorICAgIHN0ZDo6
dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNvbnN0cnVjdEZyb21CYXNlVmFsdWUoY29uc3Qg
U1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGFuaW1hdGVkVHlwZXNbMF0ucHJvcGVydGllcy5zaXplKCkgPT0gMSk7Ci0g
ICAgICAgIGNvbnN0IHR5cGVuYW1lIEFuaW1WYWxUeXBlOjpDb250ZW50VHlwZSYgYW5pbWF0ZWRU
eXBlID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5cGU8QW5pbVZhbFR5cGU+KGFuaW1h
dGVkVHlwZXNbMF0ucHJvcGVydGllc1swXS5nZXQoKSktPmN1cnJlbnRCYXNlVmFsdWUoKTsKKyAg
ICAgICAgCisgICAgICAgIGNvbnN0IEFuaW1WYWxUeXBlKiBwcm9wZXJ0eSA9IGNhc3RBbmltYXRl
ZFByb3BlcnR5VG9BY3R1YWxUeXBlPEFuaW1WYWxUeXBlPihhbmltYXRlZFR5cGVzWzBdLnByb3Bl
cnRpZXNbMF0uZ2V0KCkpOworICAgICAgICBpZiAocHJvcGVydHktPmlzQW5pbWF0aW5nKCkpCisg
ICAgICAgICAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUocHJvcGVydHktPmN1cnJl
bnRBbmltYXRlZFZhbHVlKCkpOwogCi0gICAgICAgIGF1dG8gY29weSA9IHN0ZDo6bWFrZV91bmlx
dWU8dHlwZW5hbWUgQW5pbVZhbFR5cGU6OkNvbnRlbnRUeXBlPihhbmltYXRlZFR5cGUpOwotICAg
ICAgICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBlPihTdGFydEFuaW1hdGlvbkFjdGlvbiwgYW5p
bWF0ZWRUeXBlcywgMCwgY29weS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBjb3B5OworICAgICAg
ICBhdXRvIHZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTx0eXBlbmFtZSBBbmltVmFsVHlwZTo6Q29u
dGVudFR5cGU+KHByb3BlcnR5LT5jdXJyZW50QmFzZVZhbHVlKCkpOworCisgICAgICAgIGV4ZWN1
dGVBY3Rpb248QW5pbVZhbFR5cGU+KFN0YXJ0QW5pbWF0aW9uQWN0aW9uLCBhbmltYXRlZFR5cGVz
LCAwLCB2YWx1ZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0
ZShXVEZNb3ZlKHZhbHVlKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQW5pbVZh
bFR5cGU+CkBAIC0xMDcsMzAgKzExMSwzNSBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBIZWxwZXJz
IGZvciBhbmltYXRvcnMgdGhhdCBvcGVyYXRlIG9uIHBhaXIgdHlwZXMsIGVnLiBhIHBhaXIgb2Yg
U1ZHQW5pbWF0ZWRJbnRlZ2Vycy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBbmltVmFsVHlwZTEs
IHR5cGVuYW1lIEFuaW1WYWxUeXBlMj4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpwYWlyPHR5
cGVuYW1lIEFuaW1WYWxUeXBlMTo6Q29udGVudFR5cGUsIHR5cGVuYW1lIEFuaW1WYWxUeXBlMjo6
Q29udGVudFR5cGU+PiBjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlcyhjb25zdCBTVkdFbGVtZW50QW5p
bWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCisgICAgc3RkOjp1bmlxdWVfcHRyPFNW
R0FuaW1hdGVkVHlwZT4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZXMoY29uc3QgU1ZHRWxlbWVudEFu
aW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGFuaW1hdGVkVHlwZXNbMF0ucHJvcGVydGllcy5zaXplKCkgPT0gMik7Ci0gICAgICAgIGNvbnN0
IHR5cGVuYW1lIEFuaW1WYWxUeXBlMTo6Q29udGVudFR5cGUmIGZpcnN0VHlwZSA9IGNhc3RBbmlt
YXRlZFByb3BlcnR5VG9BY3R1YWxUeXBlPEFuaW1WYWxUeXBlMT4oYW5pbWF0ZWRUeXBlc1swXS5w
cm9wZXJ0aWVzWzBdLmdldCgpKS0+Y3VycmVudEJhc2VWYWx1ZSgpOwotICAgICAgICBjb25zdCB0
eXBlbmFtZSBBbmltVmFsVHlwZTI6OkNvbnRlbnRUeXBlJiBzZWNvbmRUeXBlID0gY2FzdEFuaW1h
dGVkUHJvcGVydHlUb0FjdHVhbFR5cGU8QW5pbVZhbFR5cGUyPihhbmltYXRlZFR5cGVzWzBdLnBy
b3BlcnRpZXNbMV0uZ2V0KCkpLT5jdXJyZW50QmFzZVZhbHVlKCk7Ci0KLSAgICAgICAgYXV0byBj
b3B5ID0gc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OnBhaXI8dHlwZW5hbWUgQW5pbVZhbFR5cGUxOjpD
b250ZW50VHlwZSwgdHlwZW5hbWUgQW5pbVZhbFR5cGUyOjpDb250ZW50VHlwZT4+KGZpcnN0VHlw
ZSwgc2Vjb25kVHlwZSk7Ci0gICAgICAgIGV4ZWN1dGVBY3Rpb248QW5pbVZhbFR5cGUxPihTdGFy
dEFuaW1hdGlvbkFjdGlvbiwgYW5pbWF0ZWRUeXBlcywgMCwgJmNvcHktPmZpcnN0KTsKLSAgICAg
ICAgZXhlY3V0ZUFjdGlvbjxBbmltVmFsVHlwZTI+KFN0YXJ0QW5pbWF0aW9uQWN0aW9uLCBhbmlt
YXRlZFR5cGVzLCAxLCAmY29weS0+c2Vjb25kKTsKLSAgICAgICAgcmV0dXJuIGNvcHk7CisgICAg
ICAgIAorICAgICAgICBjb25zdCBBbmltVmFsVHlwZTEqIGZpcnN0UHJvcGVydHkgPSBjYXN0QW5p
bWF0ZWRQcm9wZXJ0eVRvQWN0dWFsVHlwZTxBbmltVmFsVHlwZTE+KGFuaW1hdGVkVHlwZXNbMF0u
cHJvcGVydGllc1swXS5nZXQoKSk7CisgICAgICAgIGNvbnN0IEFuaW1WYWxUeXBlMiogc2Vjb25k
UHJvcGVydHkgPSBjYXN0QW5pbWF0ZWRQcm9wZXJ0eVRvQWN0dWFsVHlwZTxBbmltVmFsVHlwZTI+
KGFuaW1hdGVkVHlwZXNbMF0ucHJvcGVydGllc1sxXS5nZXQoKSk7CisgICAgICAgIGlmIChmaXJz
dFByb3BlcnR5LT5pc0FuaW1hdGluZygpICYmIHNlY29uZFByb3BlcnR5LT5pc0FuaW1hdGluZygp
KQorICAgICAgICAgICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKGZpcnN0UHJvcGVy
dHktPmN1cnJlbnRBbmltYXRlZFZhbHVlKCksIHNlY29uZFByb3BlcnR5LT5jdXJyZW50QW5pbWF0
ZWRWYWx1ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gZmlyc3RWYWx1ZSA9IHN0ZDo6bWFr
ZV91bmlxdWU8dHlwZW5hbWUgQW5pbVZhbFR5cGUxOjpDb250ZW50VHlwZT4oZmlyc3RQcm9wZXJ0
eS0+Y3VycmVudEJhc2VWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBzZWNvbmRWYWx1ZSA9IHN0ZDo6
bWFrZV91bmlxdWU8dHlwZW5hbWUgQW5pbVZhbFR5cGUyOjpDb250ZW50VHlwZT4oc2Vjb25kUHJv
cGVydHktPmN1cnJlbnRCYXNlVmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICBleGVjdXRlQWN0
aW9uPEFuaW1WYWxUeXBlMT4oU3RhcnRBbmltYXRpb25BY3Rpb24sIGFuaW1hdGVkVHlwZXMsIDAs
IGZpcnN0VmFsdWUuZ2V0KCkpOworICAgICAgICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBlMj4o
U3RhcnRBbmltYXRpb25BY3Rpb24sIGFuaW1hdGVkVHlwZXMsIDEsIHNlY29uZFZhbHVlLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKFdURk1vdmUoZmlyc3RW
YWx1ZSksIFdURk1vdmUoc2Vjb25kVmFsdWUpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBBbmltVmFsVHlwZTEsIHR5cGVuYW1lIEFuaW1WYWxUeXBlMj4KLSAgICB2b2lkIHJlc2V0
RnJvbUJhc2VWYWx1ZXMoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmlt
YXRlZFR5cGVzLCBTVkdBbmltYXRlZFR5cGUmIHR5cGUsIHN0ZDo6cGFpcjx0eXBlbmFtZSBBbmlt
VmFsVHlwZTE6OkNvbnRlbnRUeXBlLCB0eXBlbmFtZSBBbmltVmFsVHlwZTI6OkNvbnRlbnRUeXBl
PiYgKFNWR0FuaW1hdGVkVHlwZTo6KmdldHRlcikoKSkKKyAgICB2b2lkIHJlc2V0RnJvbUJhc2VW
YWx1ZXMoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVz
LCBTVkdBbmltYXRlZFR5cGUmIHR5cGUsIHN0ZDo6cGFpcjx0eXBlbmFtZSBBbmltVmFsVHlwZTE6
OkNvbnRlbnRUeXBlKiwgdHlwZW5hbWUgQW5pbVZhbFR5cGUyOjpDb250ZW50VHlwZSo+JiAoU1ZH
QW5pbWF0ZWRUeXBlOjoqZ2V0dGVyKSgpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFuaW1hdGVk
VHlwZXNbMF0ucHJvcGVydGllcy5zaXplKCkgPT0gMik7CiAgICAgICAgIEFTU0VSVCh0eXBlLnR5
cGUoKSA9PSBtX3R5cGUpOwogCi0gICAgICAgIHN0ZDo6cGFpcjx0eXBlbmFtZSBBbmltVmFsVHlw
ZTE6OkNvbnRlbnRUeXBlLCB0eXBlbmFtZSBBbmltVmFsVHlwZTI6OkNvbnRlbnRUeXBlPiYgYW5p
bWF0ZWRUeXBlVmFsdWUgPSAodHlwZS4qZ2V0dGVyKSgpOwotICAgICAgICBhbmltYXRlZFR5cGVW
YWx1ZS5maXJzdCA9IGNhc3RBbmltYXRlZFByb3BlcnR5VG9BY3R1YWxUeXBlPEFuaW1WYWxUeXBl
MT4oYW5pbWF0ZWRUeXBlc1swXS5wcm9wZXJ0aWVzWzBdLmdldCgpKS0+Y3VycmVudEJhc2VWYWx1
ZSgpOwotICAgICAgICBhbmltYXRlZFR5cGVWYWx1ZS5zZWNvbmQgPSBjYXN0QW5pbWF0ZWRQcm9w
ZXJ0eVRvQWN0dWFsVHlwZTxBbmltVmFsVHlwZTI+KGFuaW1hdGVkVHlwZXNbMF0ucHJvcGVydGll
c1sxXS5nZXQoKSktPmN1cnJlbnRCYXNlVmFsdWUoKTsKKyAgICAgICAgc3RkOjpwYWlyPHR5cGVu
YW1lIEFuaW1WYWxUeXBlMTo6Q29udGVudFR5cGUqLCB0eXBlbmFtZSBBbmltVmFsVHlwZTI6OkNv
bnRlbnRUeXBlKj4mIGFuaW1hdGVkVHlwZVZhbHVlID0gKHR5cGUuKmdldHRlcikoKTsKKyAgICAg
ICAgKmFuaW1hdGVkVHlwZVZhbHVlLmZpcnN0ID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVh
bFR5cGU8QW5pbVZhbFR5cGUxPihhbmltYXRlZFR5cGVzWzBdLnByb3BlcnRpZXNbMF0uZ2V0KCkp
LT5jdXJyZW50QmFzZVZhbHVlKCk7CisgICAgICAgICphbmltYXRlZFR5cGVWYWx1ZS5zZWNvbmQg
PSBjYXN0QW5pbWF0ZWRQcm9wZXJ0eVRvQWN0dWFsVHlwZTxBbmltVmFsVHlwZTI+KGFuaW1hdGVk
VHlwZXNbMF0ucHJvcGVydGllc1sxXS5nZXQoKSktPmN1cnJlbnRCYXNlVmFsdWUoKTsKIAotICAg
ICAgICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBlMT4oU3RhcnRBbmltYXRpb25BY3Rpb24sIGFu
aW1hdGVkVHlwZXMsIDAsICZhbmltYXRlZFR5cGVWYWx1ZS5maXJzdCk7Ci0gICAgICAgIGV4ZWN1
dGVBY3Rpb248QW5pbVZhbFR5cGUyPihTdGFydEFuaW1hdGlvbkFjdGlvbiwgYW5pbWF0ZWRUeXBl
cywgMSwgJmFuaW1hdGVkVHlwZVZhbHVlLnNlY29uZCk7CisgICAgICAgIGV4ZWN1dGVBY3Rpb248
QW5pbVZhbFR5cGUxPihTdGFydEFuaW1hdGlvbkFjdGlvbiwgYW5pbWF0ZWRUeXBlcywgMCwgYW5p
bWF0ZWRUeXBlVmFsdWUuZmlyc3QpOworICAgICAgICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBl
Mj4oU3RhcnRBbmltYXRpb25BY3Rpb24sIGFuaW1hdGVkVHlwZXMsIDEsIGFuaW1hdGVkVHlwZVZh
bHVlLnNlY29uZCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQW5pbVZhbFR5cGUx
LCB0eXBlbmFtZSBBbmltVmFsVHlwZTI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oCmluZGV4
IDBjZTk5Mzc5MzFkNzYxOTgwNGYxZjM0NzU5Y2I5MDE3ZDA1OTFlMGQuLmYzNDk0MTcwMzMwMWE3
ODEzZWEwZDRlMjMyMTg5NzIwMzI3ZDhiOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5o
CkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAgICAgTGlzdFByb3BlcnR5OjpkZXRhY2hM
aXN0V3JhcHBlcnNBbmRSZXNpemUoJm1fd3JhcHBlcnMsIG5ld0xpc3RTaXplKTsKICAgICB9CiAK
LSAgICBQcm9wZXJ0eVR5cGUmIGN1cnJlbnRBbmltYXRlZFZhbHVlKCkKKyAgICBQcm9wZXJ0eVR5
cGUmIGN1cnJlbnRBbmltYXRlZFZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c0FuaW1hdGluZygpKTsKICAgICAgICAgcmV0dXJuIG1fYW5pbWF0ZWRQcm9wZXJ0eS0+dmFsdWVz
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFByb3BlcnR5VGVhck9mZi5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRQcm9wZXJ0eVRlYXJPZmYuaAppbmRleCBmYzYyYzlkYTRmYTBkNWE5NTQzNzA4NDUxYzU3
YmI0YzNhNmE0ODI0Li43MTk0ZjBmMTI4NDJmM2VkOTgwYWUwZWY4YThjYTBlZDM2NmEyZmYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3Bl
cnR5VGVhck9mZi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGVkUHJvcGVydHlUZWFyT2ZmLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgbV9hbmltVmFsID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBQcm9wZXJ0eVR5cGUmIGN1cnJl
bnRBbmltYXRlZFZhbHVlKCkKKyAgICBQcm9wZXJ0eVR5cGUmIGN1cnJlbnRBbmltYXRlZFZhbHVl
KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0FuaW1hdGluZygpKTsKICAgICAgICAg
cmV0dXJuIG1fYW5pbWF0ZWRQcm9wZXJ0eS0+cHJvcGVydHlSZWZlcmVuY2UoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkU3RhdGljUHJvcGVy
dHlUZWFyT2ZmLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFN0
YXRpY1Byb3BlcnR5VGVhck9mZi5oCmluZGV4IGM1YjJmZDkwNjQ2NjMwNDZmZTEzY2YwZDM1MDQz
Yzg5MmE3ODIwY2MuLmI5YjA2NDIxNjI5ZGIyN2EwODM4MGVhZWUyYjBkOGVkZjk4ZjdlNDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkU3RhdGlj
UHJvcGVydHlUZWFyT2ZmLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlU
ZWFyT2ZmPFByb3BlcnR5VHlwZT4oY29udGV4dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIGFuaW1h
dGVkUHJvcGVydHlUeXBlLCBwcm9wZXJ0eSkpOwogICAgIH0KIAotICAgIFByb3BlcnR5VHlwZSYg
Y3VycmVudEFuaW1hdGVkVmFsdWUoKQorICAgIFByb3BlcnR5VHlwZSYgY3VycmVudEFuaW1hdGVk
VmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQW5pbWF0aW5nKCkpOwogICAg
ICAgICByZXR1cm4gKm1fYW5pbWF0ZWRQcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyZWFhMTFmM2E3ZTcwZWVk
OGIyYWMyMWU3ZjkyOWJkYzI1YjY3Yjk5Li5kMTVhMDljOGE2OWU4MDA0NjY4NjhkMDVkMDI1YTkw
ZmY5MjY5YWM1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMDEtMjkgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBTVkcgQW5pbWF0aW9u
IChTTUlMKSBvbiBYTUwgYW5pbWF0aW5nIHByb3BlcnRpZXMgZG9lc24ndCB3b3JrIG9uIHNlY29u
ZCBydW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDM4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
a2Ugc3VyZSBhcHBseWluZyBtdWx0aXBsZSA8YW5pbWF0ZT4gb24gdGhlIHNhbWUgYXR0cmlidXRl
IHdpbGwKKyAgICAgICAgYW5pbWF0ZSB0aGUgYXR0cmlidXRlIGFzIGV4cGVjdGVkLgorCisgICAg
ICAgICogc3ZnL2FuaW1hdGlvbnMvc21pbC1tdWx0aXBsZS1hbmltYXRlLWxpc3QtZXhwZWN0ZWQu
c3ZnOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9zbWlsLW11bHRpcGxlLWFuaW1h
dGUtbGlzdC5zdmc6IEFkZGVkLgorCiAyMDE3LTAxLTI0ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRk
YWRAYXBwbGUuY29tPgogCiAgICAgICAgIG1vZGVybi1tZWRpYS1jb250cm9scyBMYXlvdXRUZXN0
IGdhcmRlbmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NtaWwt
bXVsdGlwbGUtYW5pbWF0ZS1saXN0LWV4cGVjdGVkLnN2ZyBiL0xheW91dFRlc3RzL3N2Zy9hbmlt
YXRpb25zL3NtaWwtbXVsdGlwbGUtYW5pbWF0ZS1saXN0LWV4cGVjdGVkLnN2ZwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wY2ZmM2YxNjk5NzVjMDE3Yzg2MDMwMWJmMjg4MWQxMjA1Mjc4MjBhCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc21pbC1tdWx0aXBsZS1hbmltYXRlLWxp
c3QtZXhwZWN0ZWQuc3ZnCkBAIC0wLDAgKzEsNiBAQAorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciPgorICAgIDx0ZXh0IGRvbWluYW50LWJhc2VsaW5lPSJoYW5naW5nIiB4
PSIyMCIgeT0iMTQwIiBmb250LXNpemU9IjQ0cHgiPgorICAgICAgICBGb28KKyAgICA8L3RleHQ+
CisgICAgPGxpbmUgeDE9IjEwMCIgeTE9IjE2MCIgeDI9IjIwMCIgeTI9IjE2MCIgc3Ryb2tlPSJn
cmVlbiIgc3Ryb2tlLXdpZHRoPSIxMDAiLz4KKzwvc3ZnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NtaWwtbXVsdGlw
bGUtYW5pbWF0ZS1saXN0LnN2ZyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NtaWwtbXVs
dGlwbGUtYW5pbWF0ZS1saXN0LnN2ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDgwYmEyMmU4YmQ3ZDgwNTMyYzdk
YmZiYjgzMzExMjg0MzQxNTFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2Fu
aW1hdGlvbnMvc21pbC1tdWx0aXBsZS1hbmltYXRlLWxpc3Quc3ZnCkBAIC0wLDAgKzEsNTUgQEAK
KzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KKyAgICA8dGV4dCBkb21p
bmFudC1iYXNlbGluZT0iaGFuZ2luZyIgeD0iMjAiIHk9IjQwIiBmb250LXNpemU9IjQ0cHgiPgor
ICAgICAgICBGb28KKyAgICAgICAgPGFuaW1hdGUgaWQ9ImRvd24xIiBhdHRyaWJ1dGVOYW1lPSJ5
IiBmaWxsPSJmcmVlemUiIGJlZ2luPSJpbmRlZmluaXRlIiBkdXI9IjIwbXMiIHRvPSIxNDAiLz4K
KyAgICAgICAgPGFuaW1hdGUgaWQ9InVwMSIgYXR0cmlidXRlTmFtZT0ieSIgZmlsbD0iZnJlZXpl
IiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVyPSIyMG1zIiB0bz0iNDAiLz4KKyAgICA8L3RleHQ+Cisg
ICAgPGxpbmUgeDE9IjEwMCIgeTE9IjYwIiB4Mj0iMjAwIiB5Mj0iNjAiIHN0cm9rZT0iZ3JlZW4i
IHN0cm9rZS13aWR0aD0iMTAwIj4KKyAgICAgICAgPGFuaW1hdGUgaWQ9ImRvd24yIiBhdHRyaWJ1
dGVOYW1lPSJ5MSIgZmlsbD0iZnJlZXplIiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVyPSIyMG1zIiB0
bz0iMTYwIi8+CisgICAgICAgIDxhbmltYXRlIGlkPSJ1cDIiIGF0dHJpYnV0ZU5hbWU9InkxIiBm
aWxsPSJmcmVlemUiIGJlZ2luPSJpbmRlZmluaXRlIiBkdXI9IjIwbXMiIHRvPSI2MCIvPgorICAg
IAorICAgICAgICA8YW5pbWF0ZSBpZD0iZG93bjMiIGF0dHJpYnV0ZU5hbWU9InkyIiBmaWxsPSJm
cmVlemUiIGJlZ2luPSJpbmRlZmluaXRlIiBkdXI9IjIwbXMiIHRvPSIxNjAiLz4KKyAgICAgICAg
PGFuaW1hdGUgaWQ9InVwMyIgYXR0cmlidXRlTmFtZT0ieTIiIGZpbGw9ImZyZWV6ZSIgYmVnaW49
ImluZGVmaW5pdGUiIGR1cj0iMjBtcyIgdG89IjYwIi8+CisgICAgPC9saW5lPgorICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICA8IVtDREFUQVsKKyAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CisKKyAgICAgICAgdmFyIGdyb3VwcyA9IFsKKyAgICAgICAgICAgIHsgZG93bjogImRvd24xIiwg
dXA6ICJ1cDEiIH0sCisgICAgICAgICAgICB7IGRvd246ICJkb3duMiIsIHVwOiAidXAyIiB9LAor
ICAgICAgICAgICAgeyBkb3duOiAiZG93bjMiLCB1cDogInVwMyIgfSwKKyAgICAgICAgXTsKKwor
ICAgICAgICB2YXIgZG93bkNvdW50ID0gMDsKKyAgICAgICAgdmFyIHVwQ291bnQgPSAwOworCisg
ICAgICAgIGZvciAobGV0IGdyb3VwIG9mIGdyb3VwcykgeworICAgICAgICAgICAgbGV0IGRvd24g
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChncm91cC5kb3duKTsKKyAgICAgICAgICAgIGxldCB1
cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGdyb3VwLnVwKTsKKworICAgICAgICAgICAgZG93
bi5hZGRFdmVudExpc3RlbmVyKCJlbmRFdmVudCIsICgpID0+IHsKKyAgICAgICAgICAgICAgICBp
ZiAoKytkb3duQ291bnQgPD0gZ3JvdXBzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgdG9n
Z2xlKHVwKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkb3duQ291bnQgPT0gZ3Jv
dXBzLmxlbmd0aCAqIDIpCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgdXAuYWRkRXZlbnRMaXN0ZW5lcigiZW5kRXZlbnQiLCAoKSA9PiB7Cisg
ICAgICAgICAgICAgICAgaWYgKCsrdXBDb3VudCA8PSBncm91cHMubGVuZ3RoKQorICAgICAgICAg
ICAgICAgICAgICB0b2dnbGUoZG93bik7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
ZG93bi5iZWdpbkVsZW1lbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRvZ2ds
ZShuZXdFbGVtZW50KSB7CisgICAgICAgICAgICBuZXdFbGVtZW50LmJlZ2luRWxlbWVudCgpOwor
ICAgICAgICB9CisgICAgXV0+CisgICAgPC9zY3JpcHQ+Cis8L3N2Zz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300745</attachid>
            <date>2017-02-06 11:51:39 -0800</date>
            <delta_ts>2019-04-02 12:02:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150388-20170206114918.patch</filename>
            <type>text/plain</type>
            <size>92420</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTczNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1OCBAQAorMjAxNy0wMi0wNiAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNWRyBBbmlt
YXRpb24gKFNNSUwpIG9uIFhNTCBhbmltYXRpbmcgcHJvcGVydGllcyBkb2Vzbid0IHdvcmsgb24g
c2Vjb25kIHJ1bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIHByb2JsZW0gaGFwcGVucyB3aGVuIGFuaW1hdGluZyBhbiBYTUxBbmltYXRpb24gYXR0
cmlidXRlIHdpdGggbXVsdGlwbGUKKyAgICAgICAgU1ZHQW5pbWF0aW9uRWxlbWVudHMuIFRoZSBh
bmltYXRpb25TdGFydGVkKCkgb2YgdGhlIFRlYXJPZmYgb2JqZWN0IHdpbGwgYmUKKyAgICAgICAg
Y2FsbGVkIG9ubHkgb25jZSB3aXRoIHRoZSB2YWx1ZSBzdG9yZWQgYnkgdGhlIG1fYW5pbWF0ZWRU
eXBlIG9mIHRoZSBmaXJzdAorICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50LiBUaGlzIG1lYW5z
IG5vIG1hdHRlciBob3cgbWFueSBTVkdBbmltYXRpb25FbGVtZW50cyBhcmUKKyAgICAgICAgYWN0
aW5nIG9uIHRoZSBzYW1lIGF0dHJpYnV0ZSwgY2hhbmdpbmcgb25seSBvbmUgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6bV9hbmltYXRlZFByb3BlcnR5CisgICAgICAgIHRocm91Z2ggU1ZHQW5pbWF0aW9u
RWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uKCkgY2FuIGFmZmVjdCB0aGUgbGF5b3V0IG9mCisgICAg
ICAgIHRoZSBTVkdFbGVtZW50LiBUaGlzIGRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIHByb2Nlc3Np
bmcgdGhlIFNWR0FuaW1hdGlvbkVsZW1lbnRzCisgICAgICAgIGJ5IFNNSUxUaW1lQ29udGFpbmVy
Ojp1cGRhdGVBbmltYXRpb25zKCkuIFRoZSBmaXJzdCBTVkdBbmltYXRpb25FbGVtZW50CisgICAg
ICAgIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgcmVzdWx0RWxlbWVudCBpbiBTTUlMVGltZUNvbnRh
aW5lcjo6dXBkYXRlQW5pbWF0aW9ucygpLgorICAgICAgICBTbyBpZiB0aGUgZmlyc3QgU1ZHQW5p
bWF0aW9uRWxlbWVudCBoYXBwZW5zIHRvIGJlIHRoZSBmaXJzdCBvbmUgdGhhdCBwb2ludHMKKyAg
ICAgICAgb2YgdGhlIHNhbWUgQW5pbWF0ZWRUeXBlIHdoaWNoIHRoZSBTVkdFbGVtZW50IHByb3Bl
cnR5IFRlYXJPZmYgb2JqZWN0IHBvaW50cworICAgICAgICB0bywgdGhlbiB0aGUgYXR0cmlidXRl
IHdpbGwgYmUgYW5pbWF0ZWQuIE90aGVyd2lzZSBubyBhbmltYXRpb24gd2lsbCBoYXBwZW4uCisK
KyAgICAgICAgVGhlIGZpeCBzaG91bGQgYmUgdGhlIGZvbGxvd2luZy4gVGhlIG1fYW5pbWF0ZWRQ
cm9wZXJ0eSBvZiBhbGwgdGhlIFNWR0FuaW1hdGlvbkVsZW1lbnRzCisgICAgICAgIHNob3VsZCBw
b2ludCB0byB0aGUgc2FtZSBTVkdBbmltYXRlZFR5cGUgb2JqZWN0IHdoaWNoIGlzIGFsc28gcG9p
bnRlZCB0byBieQorICAgICAgICB0aGUgVGVhck9mZiBvYmplY3Qgb2YgdGhlIGF0dHJpYnV0ZSBv
ZiB0aGUgU1ZHRWxlbWVudC4gVGhpcyBjYW4gYmUgZG9uZSBpZgorICAgICAgICBTVkdBbmltYXRl
ZFR5cGVBbmltYXRvcjo6Y29uc3RydWN0RnJvbUJhc2VWYWx1ZSgpIGNyZWF0ZXMgYSBuZXcgQW5p
bWF0ZWRUeXBlCisgICAgICAgIGZyb20gY3VycmVudEJhc2VWYWx1ZSgpIG9ubHkgaWYgdGhlIFRl
YXJPZmYgb2JqZWN0IGlzIG5vdCBhbmltYXRpbmcuIE90aGVyd2lzZQorICAgICAgICBpdCByZXVz
ZXMgdGhlIGN1cnJlbnRCYXNlVmFsdWUoKS4KKworICAgICAgICAtLSBTVkdBbmltYXRlZFR5cGUg
aG9sZHMgaXRzIHZhbHVlIGFzIGEgVmFyaWFudCBpbnN0ZWFkIG9mIGEgdW5pb24KKyAgICAgICAg
LS0gU1ZHQW5pbWF0ZWRUeXBlIGhhcyB0d28gdHlwZSBvZiBjb25zdHJ1Y3RvcnMuIFRoZSBmaXJz
dCBzZXQgdGFrZXMgdW5pcXVlX3B0cnMKKyAgICAgICAgICAgdG8gdGhlIGFuaW1hdGVkIHR5cGUg
YW5kIGl0IG93bnMgdGhlIHBvaW50ZXJzIHNvIGl0IGhhcyB0byBkZWxldGUgdGhlbSBpbgorICAg
ICAgICAgICBpdHMgZGVzdHJ1Y3Rvci4gVGhlIHNlY29uZCBzZXQgdGFrZXMgcmVmZXJlbmNlcyB0
byB0aGUgYW5pbWF0ZWQgdHlwZSBzbworICAgICAgICAgICBpdCBkb2VzIG5vdCBvd24gdGhlbS4K
KyAgICAgICAgLS0gU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21CYXNlVmFs
dWUoKSBhbmQgY29uc3RydWN0RnJvbUJhc2VWYWx1ZXMoKQorICAgICAgICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gc2luY2UgYWxsIHRoZSBjYWxsZXJzIHVzZWQg
dG8gdXNlCisgICAgICAgICAgIHRoZSByZXR1cm4gdmFsdWUgdG8gY3JlYXRlIGEgc3RkOjp1bmlx
dWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4uIFRoZXNlIHR3bworICAgICAgICAgICBmdW5jdGlvbnMg
bm93IG1ha2UgdGhlIGRlY2lzaW9uIHdoZXRoZXIgdG8gY3JlYXRlIG5ldyBhbmltYXRlZCB0eXBl
IG9yIHRvCisgICAgICAgICAgIHJldXNlIHRoZSBjdXJyZW50QW5pbWF0ZWRWYWx1ZSgpIG9mIHRo
ZSBUZWFyT2ZmIG9iamVjdC4KKworICAgICAgICBUZXN0czogc3ZnL2FuaW1hdGlvbnMvc21pbC1t
dWx0aXBsZS1hbmltYXRlLWxpc3Quc3ZnCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRBbmds
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3I6OmNvbnN0
cnVjdEZyb21TdHJpbmcpOiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZSgpIHRha2VzIHR3byBwb2lu
dGVycyBmb3IgdGhlIHBhaXIgYW5pbWF0ZWQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkQW5nbGVBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKTogU1ZHQW5pbWF0ZWRU
eXBlQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21CYXNlVmFsdWVzKCkgcmV0dXJucyBhIHN0ZDo6dW5p
cXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+LgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRB
bmdsZUFuaW1hdG9yOjphZGRBbmltYXRlZFR5cGVzKTogU1ZHQW5pbWF0ZWRUeXBlOjptX3ZhbHVl
IGhvbGRzIHR3byBwb2ludGVycyBmb3IgdGhlIHBhaXIgYW5pbWF0ZWQgdHlwZS4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1
ZSk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRCb29sZWFuQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJp
bmcpOiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZSgpIGlzIG5vdyBhIHRlbXBsYXRlIGZ1bmN0aW9u
IHdoaWNoIGNhbiBiZSB1c2VkIGZvciBhbGwgdHlwZXMuCisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlZEJvb2xlYW5BbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKTogU1ZHQW5pbWF0
ZWRUeXBlQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21CYXNlVmFsdWUoKSByZXR1cm5zIGEgc3RkOjp1
bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkQ29s
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjpjb25z
dHJ1Y3RGcm9tU3RyaW5nKTogU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoKSBpcyBub3cgYSB0ZW1w
bGF0ZSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNlZCBmb3IgYWxsIHR5cGVzLgorICAgICAgICAq
IHN2Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkRW51bWVyYXRpb25BbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6IFNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlKCkgaXMgbm93IGEgdGVtcGxhdGUgZnVuY3Rpb24gd2hpY2ggY2FuIGJl
IHVzZWQgZm9yIGFsbCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkRW51bWVy
YXRpb25BbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKTogU1ZHQW5pbWF0ZWRUeXBlQW5p
bWF0b3I6OmNvbnN0cnVjdEZyb21CYXNlVmFsdWUoKSByZXR1cm5zIGEgc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y29uc3RydWN0
RnJvbVN0cmluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRJbnRlZ2Vy
QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbik6IERpdHRvLgorICAgICAgICAqIHN2Zy9T
VkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21T
dHJpbmcpOiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZSgpIHRha2VzIHR3byBwb2ludGVycyBmb3Ig
dGhlIHBhaXIgYW5pbWF0ZWQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkSW50
ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24pOiBTVkdB
bmltYXRlZFR5cGVBbmltYXRvcjo6Y29uc3RydWN0RnJvbUJhc2VWYWx1ZXMoKSByZXR1cm5zIGEg
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4uCisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6YWRkQW5pbWF0ZWRUeXBlcyk6
IFNWR0FuaW1hdGVkVHlwZTo6bV92YWx1ZSBob2xkcyB0d28gcG9pbnRlcnMgZm9yIHRoZSBwYWly
IGFuaW1hdGVkIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZEludGVnZXJPcHRp
b25hbEludGVnZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZSk6IERpdHRvLgorICAg
ICAgICAqIHN2Zy9TVkdBbmltYXRlZExlbmd0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlZExlbmd0aEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogU1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGUoKSBpcyBub3cgYSB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNl
ZCBmb3IgYWxsIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMZW5ndGhBbmlt
YXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKTogU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I6OmNv
bnN0cnVjdEZyb21CYXNlVmFsdWUoKSByZXR1cm5zIGEgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1h
dGVkVHlwZT4uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExlbmd0aExpc3RBbmltYXRvcjo6Y29uc3RydWN0RnJv
bVN0cmluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0
QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbik6IERpdHRvLgorICAgICAgICAqIHN2Zy9T
VkdBbmltYXRlZE51bWJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZE51bWJl
ckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlZE51bWJlckFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24pOiBEaXR0
by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5n
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZE51bWJlckxpc3RBbmltYXRv
cjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FuaW1h
dGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogU1ZH
QW5pbWF0ZWRUeXBlOjpjcmVhdGUoKSBpcyBub3cgYSB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGljaCBj
YW4gYmUgdXNlZCBmb3IgYWxsIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRO
dW1iZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24pOiBTVkdB
bmltYXRlZFR5cGVBbmltYXRvcjo6Y29uc3RydWN0RnJvbUJhc2VWYWx1ZXMoKSByZXR1cm5zIGEg
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4uCisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OmFkZEFuaW1hdGVkVHlwZXMpOiBT
VkdBbmltYXRlZFR5cGU6Om1fdmFsdWUgaG9sZHMgdHdvIHBvaW50ZXJzIGZvciB0aGUgcGFpciBh
bmltYXRlZCB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25h
bE51bWJlckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKTogRGl0dG8uCisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVkUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
ZFBhdGhBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyk6IFNWR0FuaW1hdGVkVHlwZTo6Y3Jl
YXRlKCkgaXMgbm93IGEgdGVtcGxhdGUgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGFs
bCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUGF0aEFuaW1hdG9yOjpzdGFy
dEFuaW1WYWxBbmltYXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRQb2lu
dExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQb2ludExpc3RBbmltYXRv
cjo6Y29uc3RydWN0RnJvbVN0cmluZyk6IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKCkgaXMgbm93
IGEgdGVtcGxhdGUgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGFsbCB0eXBlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3I6OnN0YXJ0QW5pbVZh
bEFuaW1hdGlvbik6IFNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tQmFzZVZh
bHVlKCkgcmV0dXJucyBhIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+LgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OmNvbnN0cnVjdEZy
b21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJlc2VydmVB
c3BlY3RSYXRpb0FuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24pOiBEaXR0by4KKyAgICAg
ICAgKiBzdmcvU1ZHQW5pbWF0ZWRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkUmVjdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlZFJlY3RBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKTog
RGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkU3RyaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVkU3RyaW5nQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkU3RyaW5nQW5pbWF0b3I6OnN0YXJ0
QW5pbVZhbEFuaW1hdGlvbik6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24p
OiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6flNWR0FuaW1hdGVkVHlwZSk6IERlbGV0ZSB0aGUgYW5p
bWF0ZWQgdmFsdWUgb25seSBpZiBtX293bnNWYWx1ZSBpcyB0cnVlLgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRUeXBlOjpzdXBwb3J0c0FuaW1WYWwpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZWRUeXBlOjp0eXBlKTogVXNlIHRoZSBXVEY6OnN3aXRjaE9uKCkgdG8gcmV0dXJu
IHRoZSB0eXBlIG9mIFNWR0FuaW1hdGVkVHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkVHlwZTo6dmFsdWVBc1N0cmluZyk6IFVzZSB0aGUgV1RGOjpzd2l0Y2hPbigpIHRvIHN3aXRj
aCBvbiB0aGUgdHlwZSBvZiB0aGUgVmFyaWFudCBtX3ZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZWRUeXBlOjpzZXRWYWx1ZUFzU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFR5cGU6OlNWR0FuaW1hdGVkVHlwZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUFuZ2xlQW5kRW51bWVyYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVCb29sZWFu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQ29s
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVF
bnVtZXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6
OmNyZWF0ZUludGVnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTGVuZ3RoTGlzdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlckxpc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJP
cHRpb25hbE51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVQb2ludExpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZWRUeXBlOjpjcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVN0cmluZyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVRyYW5zZm9ybUxpc3QpOiBEZWxl
dGVkLgorICAgICAgICBUaGVzZSBtZXRob2RzIGFyZSByZXBsYWNlZCBieSBhIHNpbmdsZSB0ZW1w
bGF0ZSBmdW5jdGlvbiBuYW1lZCBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZSgpLgorICAgICAgICAq
IHN2Zy9TVkdBbmltYXRlZFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlKTogQSB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgU1ZHQW5pbWF0
ZWRUeXBlIGdpdmVuIHRoZSB0eXBlIG9mIHRoZSBhbmltYXRlZCB2YWx1ZS4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6YW5nbGVBbmRFbnVtZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZWRUeXBlOjpjb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6
OmVudW1lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6aW50ZWdl
cik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OmludGVnZXJPcHRpb25hbElu
dGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpsZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpsZW5ndGhMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6bnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkVHlwZTo6bnVtYmVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5
cGU6Om51bWJlck9wdGlvbmFsTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVk
VHlwZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnBvaW50TGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnByZXNlcnZlQXNwZWN0UmF0
aW8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpyZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6c3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkVHlwZTo6dHJhbnNmb3JtTGlzdCk6CisgICAgICAgIFRoZSBmdW5jdGlvbiB1c2Ug
dGhlIHRlbXBsYXRlIGZ1bmN0aW9uIHZhbHVlKCkgZ2l2ZW4gdGhlIHR5cGUgb2YgdGhlIGFuaW1h
dGVkIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpTVkdBbmltYXRl
ZFR5cGUpOiBVc2UgcGFyYW1ldHJpemVkIGNvbnN0cnVjdG9ycyB0byBpbml0aWFsaXplIHRoZSBT
VkdBbmltYXRlZFR5cGUuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnZhbHVl
KTogQSB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHRoZSBzdG9yZSBhbmltYXRlZCB2
YWx1ZSBnaXZlbiBpdHMgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6
dHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGVBbmltYXRvcjo6Y29uc3RydWN0RnJv
bUJhc2VWYWx1ZSk6IFJldXNlIHRoZSBhbmltYXRlZCB0eXBlIHZhbHVlIHN0b3JlZCBpbiB0aGUg
VGVhck9mZiBvYmplY3QgaWYgaXQncyBhbmltYXRpbmcuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcg
b25lLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I6OmNvbnN0cnVj
dEZyb21CYXNlVmFsdWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5
cGVBbmltYXRvcjo6cmVzZXRGcm9tQmFzZVZhbHVlcyk6IFNWR0FuaW1hdGVkVHlwZTo6bV92YWx1
ZSBob2xkcyB0d28gcG9pbnRlcnMgZm9yIHRoZSBwYWlyIGFuaW1hdGVkIHR5cGUuCisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OmN1cnJlbnRBbmlt
YXRlZFZhbHVlKTogTWFrZSBpdCBjb25zdC4KKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdB
bmltYXRlZFByb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQ
cm9wZXJ0eVRlYXJPZmY6OmN1cnJlbnRBbmltYXRlZFZhbHVlKTogRGl0dG8uCisgICAgICAgICog
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlUZWFyT2ZmOjpjdXJyZW50QW5p
bWF0ZWRWYWx1ZSk6IERpdHRvLgorCiAyMDE3LTAyLTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXNvdXJjZSB1c2FnZSBvdmVybGF5IHNo
b3VsZCBpZ25vcmUgbW91c2UgZXZlbnRzIG91dHNpZGUgYm91bmRzIGJ5IGRlZmF1bHQKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRBbmdsZS5jcHAJKHJldmlzaW9uIDIxMTczNykK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMjIgKzMyLDIyIEBAIFNWR0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6U1ZHQW5pbWF0
ZWRBbmcKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRBbmds
ZUFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewot
ICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVBbmdsZUFuZEVu
dW1lcmF0aW9uKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjpwYWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2ln
bmVkPj4oKSk7CisgICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0
ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuZ2xlVmFsdWU+KCksIHN0ZDo6bWFrZV91bmlxdWU8dW5z
aWduZWQ+KCkpOwogICAgIGF1dG8mIGFuaW1hdGVkUGFpciA9IGFuaW1hdGVkVHlwZS0+YW5nbGVB
bmRFbnVtZXJhdGlvbigpOwogCiAgICAgU1ZHQW5nbGVWYWx1ZSBhbmdsZTsKICAgICBTVkdNYXJr
ZXJPcmllbnRUeXBlIG9yaWVudFR5cGUgPSBTVkdQcm9wZXJ0eVRyYWl0czxTVkdNYXJrZXJPcmll
bnRUeXBlPjo6ZnJvbVN0cmluZyhzdHJpbmcsIGFuZ2xlKTsKICAgICBpZiAob3JpZW50VHlwZSA+
IDApCi0gICAgICAgIGFuaW1hdGVkUGFpci5zZWNvbmQgPSBvcmllbnRUeXBlOworICAgICAgICAq
YW5pbWF0ZWRQYWlyLnNlY29uZCA9IG9yaWVudFR5cGU7CiAgICAgaWYgKG9yaWVudFR5cGUgPT0g
U1ZHTWFya2VyT3JpZW50QW5nbGUpCi0gICAgICAgIGFuaW1hdGVkUGFpci5maXJzdCA9IGFuZ2xl
OworICAgICAgICAqYW5pbWF0ZWRQYWlyLmZpcnN0ID0gYW5nbGU7CiAKICAgICByZXR1cm4gYW5p
bWF0ZWRUeXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmlt
YXRlZEFuZ2xlQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50
QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlQW5nbGVBbmRFbnVtZXJhdGlvbihjb25zdHJ1Y3RGcm9tQmFzZVZh
bHVlczxTVkdBbmltYXRlZEFuZ2xlLCBTVkdBbmltYXRlZEVudW1lcmF0aW9uPihhbmltYXRlZFR5
cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZyb21CYXNlVmFsdWVzPFNWR0FuaW1hdGVkQW5n
bGUsIFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KGFuaW1hdGVkVHlwZXMpOwogfQogCiB2b2lkIFNW
R0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxl
bWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpAQCAtNzgsMTEgKzc4LDEx
IEBAIHZvaWQgU1ZHQW5pbWF0ZWRBbmdsZUFuaW1hdG9yOjphZGRBbmltYXQKICAgICBjb25zdCBh
dXRvJiBmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbiA9IGZyb20tPmFuZ2xlQW5kRW51bWVyYXRpb24o
KTsKICAgICBhdXRvJiB0b0FuZ2xlQW5kRW51bWVyYXRpb24gPSB0by0+YW5nbGVBbmRFbnVtZXJh
dGlvbigpOwogICAgIC8vIE9ubHkgcmVzcGVjdCBieSBhbmltYXRpb25zLCBpZiBmcm9tIGFuZCBi
eSBhcmUgYm90aCBzcGVjaWZpZWQgaW4gYW5nbGVzIChhbmQgbm90IGVnLiAnYXV0bycpLgotICAg
IGlmIChmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgIT0gdG9BbmdsZUFuZEVudW1lcmF0
aW9uLnNlY29uZCB8fCBmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgIT0gU1ZHTWFya2Vy
T3JpZW50QW5nbGUpCisgICAgaWYgKCpmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgIT0g
KnRvQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgfHwgKmZyb21BbmdsZUFuZEVudW1lcmF0aW9u
LnNlY29uZCAhPSBTVkdNYXJrZXJPcmllbnRBbmdsZSkKICAgICAgICAgcmV0dXJuOwotICAgIGNv
bnN0IGF1dG8mIGZyb21BbmdsZSA9IGZyb21BbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0OwotICAg
IGF1dG8mIHRvQW5nbGUgPSB0b0FuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3Q7Ci0gICAgdG9Bbmds
ZS5zZXRWYWx1ZSh0b0FuZ2xlLnZhbHVlKCkgKyBmcm9tQW5nbGUudmFsdWUoKSk7CisgICAgY29u
c3QgYXV0byogZnJvbUFuZ2xlID0gZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3Q7CisgICAg
YXV0byogdG9BbmdsZSA9IHRvQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdDsKKyAgICB0b0FuZ2xl
LT5zZXRWYWx1ZSh0b0FuZ2xlLT52YWx1ZSgpICsgZnJvbUFuZ2xlLT52YWx1ZSgpKTsKIH0KIAog
dm9pZCBTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxv
YXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNWR0FuaW1hdGVkVHlwZSogZnJv
bSwgU1ZHQW5pbWF0ZWRUeXBlKiB0bywgU1ZHQW5pbWF0ZWRUeXBlKiB0b0F0RW5kT2ZEdXJhdGlv
biwgU1ZHQW5pbWF0ZWRUeXBlKiBhbmltYXRlZCkKQEAgLTk1LDQzICs5NSw0MyBAQCB2b2lkIFNW
R0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6Y2FsY3VsYXRlCiAgICAgYXV0byYgdG9BdEVuZE9mRHVy
YXRpb25BbmdsZUFuZEVudW1lcmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24tPmFuZ2xlQW5kRW51
bWVyYXRpb24oKTsKICAgICBhdXRvJiBhbmltYXRlZEFuZ2xlQW5kRW51bWVyYXRpb24gPSBhbmlt
YXRlZC0+YW5nbGVBbmRFbnVtZXJhdGlvbigpOwogCi0gICAgaWYgKGZyb21BbmdsZUFuZEVudW1l
cmF0aW9uLnNlY29uZCAhPSB0b0FuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kKSB7CisgICAgaWYg
KCpmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgIT0gKnRvQW5nbGVBbmRFbnVtZXJhdGlv
bi5zZWNvbmQpIHsKICAgICAgICAgLy8gRGlzY3JldGUgYW5pbWF0aW9uIC0gbm8gbGluZWFyIGlu
dGVycG9sYXRpb24gcG9zc2libGUgYmV0d2VlbiB2YWx1ZXMgKGUuZy4gYXV0byB0byBhbmdsZSku
CiAgICAgICAgIGlmIChwZXJjZW50YWdlIDwgMC41ZikgewotICAgICAgICAgICAgYW5pbWF0ZWRB
bmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9IGZyb21BbmdsZUFuZEVudW1lcmF0aW9uLnNlY29u
ZDsKLSAgICAgICAgICAgIGlmIChmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPT0gU1ZH
TWFya2VyT3JpZW50QW5nbGUpCi0gICAgICAgICAgICAgICAgYW5pbWF0ZWRBbmdsZUFuZEVudW1l
cmF0aW9uLmZpcnN0ID0gZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3Q7CisgICAgICAgICAg
ICAqYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9ICpmcm9tQW5nbGVBbmRFbnVt
ZXJhdGlvbi5zZWNvbmQ7CisgICAgICAgICAgICBpZiAoKmZyb21BbmdsZUFuZEVudW1lcmF0aW9u
LnNlY29uZCA9PSBTVkdNYXJrZXJPcmllbnRBbmdsZSkKKyAgICAgICAgICAgICAgICAqYW5pbWF0
ZWRBbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0ID0gKmZyb21BbmdsZUFuZEVudW1lcmF0aW9uLmZp
cnN0OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFuaW1hdGVkQW5nbGVBbmRF
bnVtZXJhdGlvbi5maXJzdC5zZXRWYWx1ZSgwKTsKKyAgICAgICAgICAgICAgICBhbmltYXRlZEFu
Z2xlQW5kRW51bWVyYXRpb24uZmlyc3QtPnNldFZhbHVlKDApOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQg
PSB0b0FuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kOwotICAgICAgICBpZiAodG9BbmdsZUFuZEVu
dW1lcmF0aW9uLnNlY29uZCA9PSBTVkdNYXJrZXJPcmllbnRBbmdsZSkKLSAgICAgICAgICAgIGFu
aW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdCA9IHRvQW5nbGVBbmRFbnVtZXJhdGlvbi5m
aXJzdDsKKyAgICAgICAgKmFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPSAqdG9B
bmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZDsKKyAgICAgICAgaWYgKCp0b0FuZ2xlQW5kRW51bWVy
YXRpb24uc2Vjb25kID09IFNWR01hcmtlck9yaWVudEFuZ2xlKQorICAgICAgICAgICAgKmFuaW1h
dGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdCA9ICp0b0FuZ2xlQW5kRW51bWVyYXRpb24uZmly
c3Q7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlv
bi5maXJzdC5zZXRWYWx1ZSgwKTsKKyAgICAgICAgICAgIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJh
dGlvbi5maXJzdC0+c2V0VmFsdWUoMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kID09IFNWR01hcmtlck9yaWVudEFuZ2xl
KSB7CisgICAgaWYgKCpmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPT0gU1ZHTWFya2Vy
T3JpZW50QW5nbGUpIHsKICAgICAgICAgLy8gUmVndWxhciBmcm9tIGFuZ2xlIHRvIGFuZ2xlIGFu
aW1hdGlvbiwgd2l0aCBzdXBwb3J0IGZvciBzbW9vdGggaW50ZXJwb2xhdGlvbiwgYW5kIGFkZGl0
aXZlIGFuZCBhY2N1bXVsYXRlZCBhbmltYXRpb24uCi0gICAgICAgIGFuaW1hdGVkQW5nbGVBbmRF
bnVtZXJhdGlvbi5zZWNvbmQgPSBTVkdNYXJrZXJPcmllbnRBbmdsZTsKKyAgICAgICAgKmFuaW1h
dGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPSBTVkdNYXJrZXJPcmllbnRBbmdsZTsKIAot
ICAgICAgICBhdXRvJiBhbmltYXRlZFNWR0FuZ2xlID0gYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0
aW9uLmZpcnN0OwotICAgICAgICBjb25zdCBhdXRvJiB0b0F0RW5kT2ZEdXJhdGlvblNWR0FuZ2xl
ID0gdG9BdEVuZE9mRHVyYXRpb25BbmdsZUFuZEVudW1lcmF0aW9uLmZpcnN0OwotICAgICAgICBm
bG9hdCBhbmltYXRlZEFuZ2xlID0gYW5pbWF0ZWRTVkdBbmdsZS52YWx1ZSgpOwotICAgICAgICBt
X2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGVBZGRpdGl2ZU51bWJlcihwZXJjZW50YWdlLCByZXBl
YXRDb3VudCwgZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3QudmFsdWUoKSwgdG9BbmdsZUFu
ZEVudW1lcmF0aW9uLmZpcnN0LnZhbHVlKCksIHRvQXRFbmRPZkR1cmF0aW9uU1ZHQW5nbGUudmFs
dWUoKSwgYW5pbWF0ZWRBbmdsZSk7Ci0gICAgICAgIGFuaW1hdGVkU1ZHQW5nbGUuc2V0VmFsdWUo
YW5pbWF0ZWRBbmdsZSk7CisgICAgICAgIGF1dG8qIGFuaW1hdGVkU1ZHQW5nbGUgPSBhbmltYXRl
ZEFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3Q7CisgICAgICAgIGNvbnN0IGF1dG8qIHRvQXRFbmRP
ZkR1cmF0aW9uU1ZHQW5nbGUgPSB0b0F0RW5kT2ZEdXJhdGlvbkFuZ2xlQW5kRW51bWVyYXRpb24u
Zmlyc3Q7CisgICAgICAgIGZsb2F0IGFuaW1hdGVkQW5nbGUgPSBhbmltYXRlZFNWR0FuZ2xlLT52
YWx1ZSgpOworICAgICAgICBtX2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGVBZGRpdGl2ZU51bWJl
cihwZXJjZW50YWdlLCByZXBlYXRDb3VudCwgZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3Qt
PnZhbHVlKCksIHRvQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdC0+dmFsdWUoKSwgdG9BdEVuZE9m
RHVyYXRpb25TVkdBbmdsZS0+dmFsdWUoKSwgYW5pbWF0ZWRBbmdsZSk7CisgICAgICAgIGFuaW1h
dGVkU1ZHQW5nbGUtPnNldFZhbHVlKGFuaW1hdGVkQW5nbGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgLy8gYXV0bywgYXV0by1zdGFydC1yZXZlcnNlLCBvciB1bmtub3duLgotICAg
IGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdC5zZXRWYWx1ZSgwKTsKKyAgICBhbmlt
YXRlZEFuZ2xlQW5kRW51bWVyYXRpb24uZmlyc3QtPnNldFZhbHVlKDApOwogCi0gICAgaWYgKGZy
b21BbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9PSBTVkdNYXJrZXJPcmllbnRBdXRvIHx8IGZy
b21BbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9PSBTVkdNYXJrZXJPcmllbnRBdXRvU3RhcnRS
ZXZlcnNlKQotICAgICAgICBhbmltYXRlZEFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kID0gZnJv
bUFuZ2xlQW5kRW51bWVyYXRpb24uc2Vjb25kOworICAgIGlmICgqZnJvbUFuZ2xlQW5kRW51bWVy
YXRpb24uc2Vjb25kID09IFNWR01hcmtlck9yaWVudEF1dG8gfHwgKmZyb21BbmdsZUFuZEVudW1l
cmF0aW9uLnNlY29uZCA9PSBTVkdNYXJrZXJPcmllbnRBdXRvU3RhcnRSZXZlcnNlKQorICAgICAg
ICAqYW5pbWF0ZWRBbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZCA9ICpmcm9tQW5nbGVBbmRFbnVt
ZXJhdGlvbi5zZWNvbmQ7CiAgICAgZWxzZQotICAgICAgICBhbmltYXRlZEFuZ2xlQW5kRW51bWVy
YXRpb24uc2Vjb25kID0gU1ZHTWFya2VyT3JpZW50VW5rbm93bjsKKyAgICAgICAgKmFuaW1hdGVk
QW5nbGVBbmRFbnVtZXJhdGlvbi5zZWNvbmQgPSBTVkdNYXJrZXJPcmllbnRVbmtub3duOwogfQog
CiBmbG9hdCBTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3I6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0
IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3BwCShyZXZpc2lvbiAyMTE3MzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTQgKzMxLDE0IEBAIFNWR0FuaW1hdGVkQm9vbGVhbkFuaW1hdG9yOjpTVkdBbmlt
YXRlZEIKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRCb29s
ZWFuQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7
Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUJvb2xlYW4o
c3RkOjptYWtlX3VuaXF1ZTxib29sPigpKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8Ym9vbD4oKSk7CiAgICAgYW5pbWF0
ZWRUeXBlLT5ib29sZWFuKCkgPSAoc3RyaW5nID09ICJ0cnVlIik7IC8vIHdhdD8KICAgICByZXR1
cm4gYW5pbWF0ZWRUeXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBT
VkdBbmltYXRlZEJvb2xlYW5BbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNW
R0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKIHsKLSAgICByZXR1
cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVCb29sZWFuKGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8
U1ZHQW5pbWF0ZWRCb29sZWFuPihhbmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVj
dEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRCb29sZWFuPihhbmltYXRlZFR5cGVzKTsKIH0KIAog
dm9pZCBTVkdBbmltYXRlZEJvb2xlYW5BbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29u
c3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZENvbG9yLmNwcAkocmV2aXNpb24gMjExNzM3KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw3ICszMyw3IEBAIFNWR0FuaW1hdGVkQ29sb3JBbmltYXRvcjo6U1ZHQW5pbWF0ZWRD
b2wKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRDb2xvckFu
aW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAg
IHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUNvbG9yKHN0ZDo6bWFrZV91bmlxdWU8Q29s
b3I+KENTU1BhcnNlcjo6cGFyc2VDb2xvcihzdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkpKSk7Cisg
ICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8Q29sb3I+
KENTU1BhcnNlcjo6cGFyc2VDb2xvcihzdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkpKSk7CiB9CiAK
IHZvaWQgU1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjphZGRBbmltYXRlZFR5cGVzKFNWR0FuaW1h
dGVkVHlwZSogZnJvbSwgU1ZHQW5pbWF0ZWRUeXBlKiB0bykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAJKHJldmlzaW9uIDIxMTczNykKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDE0ICsxMDksMTQgQEAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkFuaW1hdG9y
OjpTVkdBbmltYQogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbkFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogewogICAgIEFTU0VSVChtX2FuaW1hdGlvbkVsZW1lbnQpOwotICAgIGF1dG8gYW5pbWF0
ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVFbnVtZXJhdGlvbihzdGQ6Om1ha2VfdW5p
cXVlPHVuc2lnbmVkPigpKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQ+KCkpOwogICAgIGFuaW1hdGVkVHlw
ZS0+ZW51bWVyYXRpb24oKSA9IGVudW1lcmF0aW9uVmFsdWVGb3JUYXJnZXRBdHRyaWJ1dGUobV9h
bmltYXRpb25FbGVtZW50LT50YXJnZXRFbGVtZW50KCksIG1fYW5pbWF0aW9uRWxlbWVudC0+YXR0
cmlidXRlTmFtZSgpLCBzdHJpbmcpOwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CiAKIHN0
ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkRW51bWVyYXRpb25Bbmlt
YXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3Bl
cnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKIHsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpj
cmVhdGVFbnVtZXJhdGlvbihjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1hdGVkRW51bWVy
YXRpb24+KGFuaW1hdGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1
ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihhbmltYXRlZFR5cGVzKTsKIH0KIAogdm9pZCBTVkdB
bmltYXRlZEVudW1lcmF0aW9uQW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNW
R0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwCShyZXZpc2lvbiAyMTE3MzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsMTQgKzMzLDE0IEBAIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpTVkdBbmlt
YXRlZEkKIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRl
Z2VyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7
Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXIo
c3RkOjptYWtlX3VuaXF1ZTxpbnQ+KCkpOworICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5p
bWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxpbnQ+KCkpOwogICAgIGFuaW1hdGVk
VHlwZS0+aW50ZWdlcigpID0gc3RyaW5nLnRvSW50U3RyaWN0KCk7CiAgICAgcmV0dXJuIGFuaW1h
dGVkVHlwZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0
ZWRJbnRlZ2VyQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50
QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdlcihjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1h
dGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcykpOworICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tQmFz
ZVZhbHVlPFNWR0FuaW1hdGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZH
QW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0Vs
ZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVn
ZXIuY3BwCShyZXZpc2lvbiAyMTE3MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjMgKzMz
LDIzIEBAIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG8KIAogc3RkOjp1
bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRl
Z2VyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7
Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXJP
cHRpb25hbEludGVnZXIoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OnBhaXI8aW50LCBpbnQ+PigpKTsK
LSAgICBzdGQ6OnBhaXI8aW50LCBpbnQ+JiBhbmltYXRlZEludGVnZXIgPSBhbmltYXRlZFR5cGUt
PmludGVnZXJPcHRpb25hbEludGVnZXIoKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8aW50PigpLCBzdGQ6Om1ha2VfdW5p
cXVlPGludD4oKSk7CisgICAgYXV0byYgYW5pbWF0ZWRJbnRlZ2VyID0gYW5pbWF0ZWRUeXBlLT5p
bnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKCk7CiAgICAgZmxvYXQgZmlyc3ROdW1iZXIgPSAwOwogICAg
IGZsb2F0IHNlY29uZE51bWJlciA9IDA7CiAgICAgaWYgKCFwYXJzZU51bWJlck9wdGlvbmFsTnVt
YmVyKHN0cmluZywgZmlyc3ROdW1iZXIsIHNlY29uZE51bWJlcikpIHsKLSAgICAgICAgYW5pbWF0
ZWRJbnRlZ2VyLmZpcnN0ID0gMDsKLSAgICAgICAgYW5pbWF0ZWRJbnRlZ2VyLnNlY29uZCA9IDA7
CisgICAgICAgICphbmltYXRlZEludGVnZXIuZmlyc3QgPSAwOworICAgICAgICAqYW5pbWF0ZWRJ
bnRlZ2VyLnNlY29uZCA9IDA7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYW5pbWF0ZWRJbnRlZ2Vy
LmZpcnN0ID0gc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoZmlyc3ROdW1iZXIpKTsKLSAgICAgICAg
YW5pbWF0ZWRJbnRlZ2VyLnNlY29uZCA9IHN0YXRpY19jYXN0PGludD4ocm91bmRmKHNlY29uZE51
bWJlcikpOworICAgICAgICAqYW5pbWF0ZWRJbnRlZ2VyLmZpcnN0ID0gc3RhdGljX2Nhc3Q8aW50
Pihyb3VuZGYoZmlyc3ROdW1iZXIpKTsKKyAgICAgICAgKmFuaW1hdGVkSW50ZWdlci5zZWNvbmQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihzZWNvbmROdW1iZXIpKTsKICAgICB9CiAgICAgcmV0
dXJuIGFuaW1hdGVkVHlwZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
U1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFu
aW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlw
ZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdlck9wdGlvbmFs
SW50ZWdlcihjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlczxTVkdBbmltYXRlZEludGVnZXIsIFNWR0Fu
aW1hdGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcykpOworICAgIHJldHVybiBjb25zdHJ1Y3RGcm9t
QmFzZVZhbHVlczxTVkdBbmltYXRlZEludGVnZXIsIFNWR0FuaW1hdGVkSW50ZWdlcj4oYW5pbWF0
ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5p
bWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3Bl
cnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKQEAgLTc3LDExICs3NywxMSBAQCB2b2lkIFNWR0FuaW1h
dGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuCiAgICAgQVNTRVJUKGZyb20tPnR5cGUoKSA9PSBB
bmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIpOwogICAgIEFTU0VSVChmcm9tLT50eXBlKCkg
PT0gdG8tPnR5cGUoKSk7CiAKLSAgICBjb25zdCBzdGQ6OnBhaXI8aW50LCBpbnQ+JiBmcm9tSW50
ZWdlclBhaXIgPSBmcm9tLT5pbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKCk7Ci0gICAgc3RkOjpwYWly
PGludCwgaW50PiYgdG9JbnRlZ2VyUGFpciA9IHRvLT5pbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKCk7
CisgICAgY29uc3QgYXV0byYgZnJvbUludGVnZXJQYWlyID0gZnJvbS0+aW50ZWdlck9wdGlvbmFs
SW50ZWdlcigpOworICAgIGF1dG8mIHRvSW50ZWdlclBhaXIgPSB0by0+aW50ZWdlck9wdGlvbmFs
SW50ZWdlcigpOwogCi0gICAgdG9JbnRlZ2VyUGFpci5maXJzdCArPSBmcm9tSW50ZWdlclBhaXIu
Zmlyc3Q7Ci0gICAgdG9JbnRlZ2VyUGFpci5zZWNvbmQgKz0gZnJvbUludGVnZXJQYWlyLnNlY29u
ZDsKKyAgICAqdG9JbnRlZ2VyUGFpci5maXJzdCArPSAqZnJvbUludGVnZXJQYWlyLmZpcnN0Owor
ICAgICp0b0ludGVnZXJQYWlyLnNlY29uZCArPSAqZnJvbUludGVnZXJQYWlyLnNlY29uZDsKIH0K
IAogdm9pZCBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6Y2FsY3Vs
YXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwg
U1ZHQW5pbWF0ZWRUeXBlKiBmcm9tLCBTVkdBbmltYXRlZFR5cGUqIHRvLCBTVkdBbmltYXRlZFR5
cGUqIHRvQXRFbmRPZkR1cmF0aW9uLCBTVkdBbmltYXRlZFR5cGUqIGFuaW1hdGVkKQpAQCAtODks
MTMgKzg5LDEzIEBAIHZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW4KICAg
ICBBU1NFUlQobV9hbmltYXRpb25FbGVtZW50KTsKICAgICBBU1NFUlQobV9jb250ZXh0RWxlbWVu
dCk7CiAKLSAgICBjb25zdCBzdGQ6OnBhaXI8aW50LCBpbnQ+JiBmcm9tSW50ZWdlclBhaXIgPSBt
X2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1vZGUoKSA9PSBUb0FuaW1hdGlvbiA/IGFuaW1h
dGVkLT5pbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKCkgOiBmcm9tLT5pbnRlZ2VyT3B0aW9uYWxJbnRl
Z2VyKCk7Ci0gICAgY29uc3Qgc3RkOjpwYWlyPGludCwgaW50PiYgdG9JbnRlZ2VyUGFpciA9IHRv
LT5pbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKCk7Ci0gICAgY29uc3Qgc3RkOjpwYWlyPGludCwgaW50
PiYgdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyUGFpciA9IHRvQXRFbmRPZkR1cmF0aW9uLT5pbnRl
Z2VyT3B0aW9uYWxJbnRlZ2VyKCk7Ci0gICAgc3RkOjpwYWlyPGludCwgaW50PiYgYW5pbWF0ZWRJ
bnRlZ2VyUGFpciA9IGFuaW1hdGVkLT5pbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKCk7CisgICAgY29u
c3QgYXV0byYgZnJvbUludGVnZXJQYWlyID0gbV9hbmltYXRpb25FbGVtZW50LT5hbmltYXRpb25N
b2RlKCkgPT0gVG9BbmltYXRpb24gPyBhbmltYXRlZC0+aW50ZWdlck9wdGlvbmFsSW50ZWdlcigp
IDogZnJvbS0+aW50ZWdlck9wdGlvbmFsSW50ZWdlcigpOworICAgIGNvbnN0IGF1dG8mIHRvSW50
ZWdlclBhaXIgPSB0by0+aW50ZWdlck9wdGlvbmFsSW50ZWdlcigpOworICAgIGNvbnN0IGF1dG8m
IHRvQXRFbmRPZkR1cmF0aW9uSW50ZWdlclBhaXIgPSB0b0F0RW5kT2ZEdXJhdGlvbi0+aW50ZWdl
ck9wdGlvbmFsSW50ZWdlcigpOworICAgIGF1dG8mIGFuaW1hdGVkSW50ZWdlclBhaXIgPSBhbmlt
YXRlZC0+aW50ZWdlck9wdGlvbmFsSW50ZWdlcigpOwogCi0gICAgU1ZHQW5pbWF0ZWRJbnRlZ2Vy
QW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkSW50ZWdlcihtX2FuaW1hdGlvbkVsZW1lbnQsIHBl
cmNlbnRhZ2UsIHJlcGVhdENvdW50LCBmcm9tSW50ZWdlclBhaXIuZmlyc3QsIHRvSW50ZWdlclBh
aXIuZmlyc3QsIHRvQXRFbmRPZkR1cmF0aW9uSW50ZWdlclBhaXIuZmlyc3QsIGFuaW1hdGVkSW50
ZWdlclBhaXIuZmlyc3QpOwotICAgIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpjYWxjdWxh
dGVBbmltYXRlZEludGVnZXIobV9hbmltYXRpb25FbGVtZW50LCBwZXJjZW50YWdlLCByZXBlYXRD
b3VudCwgZnJvbUludGVnZXJQYWlyLnNlY29uZCwgdG9JbnRlZ2VyUGFpci5zZWNvbmQsIHRvQXRF
bmRPZkR1cmF0aW9uSW50ZWdlclBhaXIuc2Vjb25kLCBhbmltYXRlZEludGVnZXJQYWlyLnNlY29u
ZCk7CisgICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkSW50
ZWdlcihtX2FuaW1hdGlvbkVsZW1lbnQsIHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCAqZnJvbUlu
dGVnZXJQYWlyLmZpcnN0LCAqdG9JbnRlZ2VyUGFpci5maXJzdCwgKnRvQXRFbmRPZkR1cmF0aW9u
SW50ZWdlclBhaXIuZmlyc3QsICphbmltYXRlZEludGVnZXJQYWlyLmZpcnN0KTsKKyAgICBTVkdB
bmltYXRlZEludGVnZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRJbnRlZ2VyKG1fYW5pbWF0
aW9uRWxlbWVudCwgcGVyY2VudGFnZSwgcmVwZWF0Q291bnQsICpmcm9tSW50ZWdlclBhaXIuc2Vj
b25kLCAqdG9JbnRlZ2VyUGFpci5zZWNvbmQsICp0b0F0RW5kT2ZEdXJhdGlvbkludGVnZXJQYWly
LnNlY29uZCwgKmFuaW1hdGVkSW50ZWdlclBhaXIuc2Vjb25kKTsKIH0KIAogZmxvYXQgU1ZHQW5p
bWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZURpc3RhbmNlKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZExlbmd0aC5jcHAJKHJldmlzaW9uIDIxMTczNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZExlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEyICszNCwxMiBA
QCBTVkdBbmltYXRlZExlbmd0aEFuaW1hdG9yOjpTVkdBbmltYXRlZExlCiAKIHN0ZDo6dW5pcXVl
X3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTGVuZ3RoQW5pbWF0b3I6OmNvbnN0cnVj
dEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlTGVuZ3RoKHN0ZDo6bWFrZV91bmlxdWU8U1ZHTGVuZ3RoVmFsdWU+KG1f
bGVuZ3RoTW9kZSwgc3RyaW5nKSk7CisgICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRl
KHN0ZDo6bWFrZV91bmlxdWU8U1ZHTGVuZ3RoVmFsdWU+KG1fbGVuZ3RoTW9kZSwgc3RyaW5nKSk7
CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTGVuZ3Ro
QW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQ
cm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlw
ZTo6Y3JlYXRlTGVuZ3RoKGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRMZW5ndGg+
KGFuaW1hdGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdB
bmltYXRlZExlbmd0aD4oYW5pbWF0ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWRMZW5n
dGhBbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVk
UHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAJKHJldmlzaW9uIDIxMTczNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZExlbmd0aExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MywxNCArMzMsMTQgQEAgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0QW5pbWF0b3I6OlNWR0FuaW1hdAog
CiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZExlbmd0aExpc3RB
bmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAg
ICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTGVuZ3RoTGlzdChz
dGQ6Om1ha2VfdW5pcXVlPFNWR0xlbmd0aExpc3RWYWx1ZXM+KCkpOworICAgIGF1dG8gYW5pbWF0
ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdMZW5n
dGhMaXN0VmFsdWVzPigpKTsKICAgICBhbmltYXRlZFR5cGUtPmxlbmd0aExpc3QoKS5wYXJzZShz
dHJpbmcsIG1fbGVuZ3RoTW9kZSk7CiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZTsKIH0KIAogc3Rk
Ojp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0QW5pbWF0
b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0
eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3Jl
YXRlTGVuZ3RoTGlzdChjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1hdGVkTGVuZ3RoTGlz
dD4oYW5pbWF0ZWRUeXBlcykpOworICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNW
R0FuaW1hdGVkTGVuZ3RoTGlzdD4oYW5pbWF0ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0
ZWRMZW5ndGhMaXN0QW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1l
bnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyLmNwcAkocmV2aXNpb24gMjExNzM3KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsNyBAQCBTVkdBbmltYXRlZE51bWJlckFuaW1hdG9yOjpTVkdBbmltYXRlZE51CiAKIHN0
ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkTnVtYmVyQW5pbWF0b3I6
OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBh
bmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlcihzdGQ6Om1ha2VfdW5p
cXVlPGZsb2F0PigpKTsKKyAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6
Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8ZmxvYXQ+KCkpOwogICAgIGZsb2F0JiBhbmltYXRlZE51
bWJlciA9IGFuaW1hdGVkVHlwZS0+bnVtYmVyKCk7CiAgICAgaWYgKCFwYXJzZU51bWJlckZyb21T
dHJpbmcoc3RyaW5nLCBhbmltYXRlZE51bWJlcikpCiAgICAgICAgIGFuaW1hdGVkTnVtYmVyID0g
MDsKQEAgLTQxLDcgKzQxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZH
QW5pbQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJl
ckFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVk
UHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZU51bWJlcihjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1hdGVkTnVtYmVy
PihhbmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZH
QW5pbWF0ZWROdW1iZXI+KGFuaW1hdGVkVHlwZXMpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVkTnVt
YmVyQW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRl
ZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlZE51bWJlckxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwCShyZXZpc2lvbiAyMTE3MzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTQgKzMyLDE0IEBAIFNWR0FuaW1hdGVkTnVtYmVyTGlzdEFuaW1hdG9yOjpTVkdBbmltYXQK
IAogc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWROdW1iZXJMaXN0
QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0g
ICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlckxpc3Qo
c3RkOjptYWtlX3VuaXF1ZTxTVkdOdW1iZXJMaXN0VmFsdWVzPigpKTsKKyAgICBhdXRvIGFuaW1h
dGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U1ZHTnVt
YmVyTGlzdFZhbHVlcz4oKSk7CiAgICAgYW5pbWF0ZWRUeXBlLT5udW1iZXJMaXN0KCkucGFyc2Uo
c3RyaW5nKTsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJlckxpc3RBbmltYXRvcjo6c3RhcnRBbmlt
VmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0
ZWRUeXBlcykKIHsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJMaXN0
KGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0PihhbmltYXRlZFR5
cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWROdW1i
ZXJMaXN0PihhbmltYXRlZFR5cGVzKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZE51bWJlckxpc3RB
bmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJv
cGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmNwcAkocmV2aXNpb24gMjEx
NzM3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1i
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOCArMzMsMTggQEAgU1ZHQW5pbWF0ZWROdW1i
ZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOgogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRU
eXBlPiBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OmNvbnN0cnVjdEZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUg
PSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0ZDo6bWFrZV91
bmlxdWU8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+KCkpOwotICAgIHN0ZDo6cGFpcjxmbG9hdCwg
ZmxvYXQ+JiBhbmltYXRlZE51bWJlciA9IGFuaW1hdGVkVHlwZS0+bnVtYmVyT3B0aW9uYWxOdW1i
ZXIoKTsKLSAgICBpZiAoIXBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nLCBhbmltYXRl
ZE51bWJlci5maXJzdCwgYW5pbWF0ZWROdW1iZXIuc2Vjb25kKSkgewotICAgICAgICBhbmltYXRl
ZE51bWJlci5maXJzdCA9IDA7Ci0gICAgICAgIGFuaW1hdGVkTnVtYmVyLnNlY29uZCA9IDA7Cisg
ICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShzdGQ6Om1ha2Vf
dW5pcXVlPGZsb2F0PigpLCBzdGQ6Om1ha2VfdW5pcXVlPGZsb2F0PigpKTsKKyAgICBhdXRvJiBh
bmltYXRlZE51bWJlciA9IGFuaW1hdGVkVHlwZS0+bnVtYmVyT3B0aW9uYWxOdW1iZXIoKTsKKyAg
ICBpZiAoIXBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nLCAqYW5pbWF0ZWROdW1iZXIu
Zmlyc3QsICphbmltYXRlZE51bWJlci5zZWNvbmQpKSB7CisgICAgICAgICphbmltYXRlZE51bWJl
ci5maXJzdCA9IDA7CisgICAgICAgICphbmltYXRlZE51bWJlci5zZWNvbmQgPSAwOwogICAgIH0K
ICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OnN0YXJ0QW5p
bVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1h
dGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVyT3B0
aW9uYWxOdW1iZXIoY29uc3RydWN0RnJvbUJhc2VWYWx1ZXM8U1ZHQW5pbWF0ZWROdW1iZXIsIFNW
R0FuaW1hdGVkTnVtYmVyPihhbmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZy
b21CYXNlVmFsdWVzPFNWR0FuaW1hdGVkTnVtYmVyLCBTVkdBbmltYXRlZE51bWJlcj4oYW5pbWF0
ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW1h
dG9yOjpzdG9wQW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0
eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkBAIC03MiwxMSArNzIsMTEgQEAgdm9pZCBTVkdBbmltYXRl
ZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbQogICAgIEFTU0VSVChmcm9tLT50eXBlKCkgPT0gQW5p
bWF0ZWROdW1iZXJPcHRpb25hbE51bWJlcik7CiAgICAgQVNTRVJUKGZyb20tPnR5cGUoKSA9PSB0
by0+dHlwZSgpKTsKIAotICAgIGNvbnN0IHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+JiBmcm9tTnVt
YmVyUGFpciA9IGZyb20tPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7Ci0gICAgc3RkOjpwYWlyPGZs
b2F0LCBmbG9hdD4mIHRvTnVtYmVyUGFpciA9IHRvLT5udW1iZXJPcHRpb25hbE51bWJlcigpOwor
ICAgIGNvbnN0IGF1dG8mIGZyb21OdW1iZXJQYWlyID0gZnJvbS0+bnVtYmVyT3B0aW9uYWxOdW1i
ZXIoKTsKKyAgICBhdXRvJiB0b051bWJlclBhaXIgPSB0by0+bnVtYmVyT3B0aW9uYWxOdW1iZXIo
KTsKIAotICAgIHRvTnVtYmVyUGFpci5maXJzdCArPSBmcm9tTnVtYmVyUGFpci5maXJzdDsKLSAg
ICB0b051bWJlclBhaXIuc2Vjb25kICs9IGZyb21OdW1iZXJQYWlyLnNlY29uZDsKKyAgICAqdG9O
dW1iZXJQYWlyLmZpcnN0ICs9ICpmcm9tTnVtYmVyUGFpci5maXJzdDsKKyAgICAqdG9OdW1iZXJQ
YWlyLnNlY29uZCArPSAqZnJvbU51bWJlclBhaXIuc2Vjb25kOwogfQogCiB2b2lkIFNWR0FuaW1h
dGVkTnVtYmVyT3B0aW9uYWxOdW1iZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShm
bG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHQW5pbWF0ZWRUeXBlKiBm
cm9tLCBTVkdBbmltYXRlZFR5cGUqIHRvLCBTVkdBbmltYXRlZFR5cGUqIHRvQXRFbmRPZkR1cmF0
aW9uLCBTVkdBbmltYXRlZFR5cGUqIGFuaW1hdGVkKQpAQCAtODQsMTMgKzg0LDEzIEBAIHZvaWQg
U1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW0KICAgICBBU1NFUlQobV9hbmltYXRp
b25FbGVtZW50KTsKICAgICBBU1NFUlQobV9jb250ZXh0RWxlbWVudCk7CiAKLSAgICBjb25zdCBz
dGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiYgZnJvbU51bWJlclBhaXIgPSBtX2FuaW1hdGlvbkVsZW1l
bnQtPmFuaW1hdGlvbk1vZGUoKSA9PSBUb0FuaW1hdGlvbiA/IGFuaW1hdGVkLT5udW1iZXJPcHRp
b25hbE51bWJlcigpIDogIGZyb20tPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7Ci0gICAgY29uc3Qg
c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4mIHRvTnVtYmVyUGFpciA9IHRvLT5udW1iZXJPcHRpb25h
bE51bWJlcigpOwotICAgIGNvbnN0IHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+JiB0b0F0RW5kT2ZE
dXJhdGlvbk51bWJlclBhaXIgPSB0b0F0RW5kT2ZEdXJhdGlvbi0+bnVtYmVyT3B0aW9uYWxOdW1i
ZXIoKTsKLSAgICBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiYgYW5pbWF0ZWROdW1iZXJQYWlyID0g
YW5pbWF0ZWQtPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7CisgICAgY29uc3QgYXV0byYgZnJvbU51
bWJlclBhaXIgPSBtX2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1vZGUoKSA9PSBUb0FuaW1h
dGlvbiA/IGFuaW1hdGVkLT5udW1iZXJPcHRpb25hbE51bWJlcigpIDogIGZyb20tPm51bWJlck9w
dGlvbmFsTnVtYmVyKCk7CisgICAgY29uc3QgYXV0byYgdG9OdW1iZXJQYWlyID0gdG8tPm51bWJl
ck9wdGlvbmFsTnVtYmVyKCk7CisgICAgY29uc3QgYXV0byYgdG9BdEVuZE9mRHVyYXRpb25OdW1i
ZXJQYWlyID0gdG9BdEVuZE9mRHVyYXRpb24tPm51bWJlck9wdGlvbmFsTnVtYmVyKCk7CisgICAg
YXV0byYgYW5pbWF0ZWROdW1iZXJQYWlyID0gYW5pbWF0ZWQtPm51bWJlck9wdGlvbmFsTnVtYmVy
KCk7CiAKLSAgICBtX2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGVBZGRpdGl2ZU51bWJlcihwZXJj
ZW50YWdlLCByZXBlYXRDb3VudCwgZnJvbU51bWJlclBhaXIuZmlyc3QsIHRvTnVtYmVyUGFpci5m
aXJzdCwgdG9BdEVuZE9mRHVyYXRpb25OdW1iZXJQYWlyLmZpcnN0LCBhbmltYXRlZE51bWJlclBh
aXIuZmlyc3QpOwotICAgIG1fYW5pbWF0aW9uRWxlbWVudC0+YW5pbWF0ZUFkZGl0aXZlTnVtYmVy
KHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBmcm9tTnVtYmVyUGFpci5zZWNvbmQsIHRvTnVtYmVy
UGFpci5zZWNvbmQsIHRvQXRFbmRPZkR1cmF0aW9uTnVtYmVyUGFpci5zZWNvbmQsIGFuaW1hdGVk
TnVtYmVyUGFpci5zZWNvbmQpOworICAgIG1fYW5pbWF0aW9uRWxlbWVudC0+YW5pbWF0ZUFkZGl0
aXZlTnVtYmVyKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCAqZnJvbU51bWJlclBhaXIuZmlyc3Qs
ICp0b051bWJlclBhaXIuZmlyc3QsICp0b0F0RW5kT2ZEdXJhdGlvbk51bWJlclBhaXIuZmlyc3Qs
ICphbmltYXRlZE51bWJlclBhaXIuZmlyc3QpOworICAgIG1fYW5pbWF0aW9uRWxlbWVudC0+YW5p
bWF0ZUFkZGl0aXZlTnVtYmVyKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCAqZnJvbU51bWJlclBh
aXIuc2Vjb25kLCAqdG9OdW1iZXJQYWlyLnNlY29uZCwgKnRvQXRFbmRPZkR1cmF0aW9uTnVtYmVy
UGFpci5zZWNvbmQsICphbmltYXRlZE51bWJlclBhaXIuc2Vjb25kKTsKIH0KIAogZmxvYXQgU1ZH
QW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlckFuaW1hdG9yOjpjYWxjdWxhdGVEaXN0YW5jZShj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkUGF0aC5jcHAJKHJldmlzaW9uIDIxMTczNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlZFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW0KIHsKICAgICBhdXRvIGJ5dGVTdHJl
YW0gPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR1BhdGhCeXRlU3RyZWFtPigpOwogICAgIGJ1aWxkU1ZH
UGF0aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKHN0cmluZywgKmJ5dGVTdHJlYW0sIFVuYWx0ZXJlZFBh
cnNpbmcpOwotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVBhdGgoV1RGTW92ZShi
eXRlU3RyZWFtKSk7CisgICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKFdURk1vdmUo
Ynl0ZVN0cmVhbSkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdB
bmltYXRlZFBhdGhBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1l
bnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKQEAgLTQ1LDcgKzQ1LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbQogICAgIC8vIEJ1aWxkIGlu
aXRpYWwgcGF0aCBieXRlIHN0cmVhbS4KICAgICBhdXRvIGJ5dGVTdHJlYW0gPSBzdGQ6Om1ha2Vf
dW5pcXVlPFNWR1BhdGhCeXRlU3RyZWFtPigpOwogICAgIHJlc2V0QW5pbVZhbFRvQmFzZVZhbChh
bmltYXRlZFR5cGVzLCBieXRlU3RyZWFtLmdldCgpKTsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRU
eXBlOjpjcmVhdGVQYXRoKFdURk1vdmUoYnl0ZVN0cmVhbSkpOworICAgIHJldHVybiBTVkdBbmlt
YXRlZFR5cGU6OmNyZWF0ZShXVEZNb3ZlKGJ5dGVTdHJlYW0pKTsKIH0KIAogdm9pZCBTVkdBbmlt
YXRlZFBhdGhBbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFu
aW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZWRQb2ludExpc3QuY3BwCShyZXZpc2lvbiAyMTE3MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQb2ludExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCwxNCArMzQsMTQgQEAgU1ZHQW5pbWF0ZWRQb2ludExpc3RBbmltYXRvcjo6U1ZHQW5pbWF0
ZQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFBvaW50TGlz
dEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewot
ICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQb2ludExpc3Qo
c3RkOjptYWtlX3VuaXF1ZTxTVkdQb2ludExpc3RWYWx1ZXM+KCkpOworICAgIGF1dG8gYW5pbWF0
ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdQb2lu
dExpc3RWYWx1ZXM+KCkpOwogICAgIHBvaW50c0xpc3RGcm9tU1ZHRGF0YShhbmltYXRlZFR5cGUt
PnBvaW50TGlzdCgpLCBzdHJpbmcpOwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CiAKIHN0
ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0
b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0
eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3Jl
YXRlUG9pbnRMaXN0KGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRQb2ludExpc3Q+
KGFuaW1hdGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdB
bmltYXRlZFBvaW50TGlzdD4oYW5pbWF0ZWRUeXBlcyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZWRQ
b2ludExpc3RBbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFu
aW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJKHJldmlz
aW9uIDIxMTczNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFByZXNlcnZlQXNw
ZWN0UmF0aW8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMTQgQEAgU1ZHQW5pbWF0
ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OgogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5p
bWF0ZWRUeXBlPiBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6Y29uc3Ry
dWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVk
VHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpbyhzdGQ6Om1h
a2VfdW5pcXVlPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4oKSk7CisgICAgYXV0byBhbmlt
YXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4oKSk7CiAgICAgYW5pbWF0ZWRUeXBlLT5wcmVzZXJ2ZUFz
cGVjdFJhdGlvKCkucGFyc2Uoc3RyaW5nKTsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwogfQog
CiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFByZXNlcnZlQXNw
ZWN0UmF0aW9BbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRB
bmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKIHsKLSAgICByZXR1cm4gU1ZHQW5p
bWF0ZWRUeXBlOjpjcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvKGNvbnN0cnVjdEZyb21CYXNlVmFs
dWU8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPihhbmltYXRlZFR5cGVzKSk7CisgICAg
cmV0dXJuIGNvbnN0cnVjdEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJh
dGlvPihhbmltYXRlZFR5cGVzKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0
UmF0aW9BbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1h
dGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkUmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkUmVjdC5jcHAJKHJldmlzaW9uIDIxMTczNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAg
U1ZHQW5pbWF0ZWRSZWN0QW5pbWF0b3I6OlNWR0FuaW1hdGVkUmVjdAogCiBzdGQ6OnVuaXF1ZV9w
dHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFJlY3RBbmltYXRvcjo6Y29uc3RydWN0RnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9
IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUmVjdChzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0UmVjdD4o
KSk7CisgICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShzdGQ6
Om1ha2VfdW5pcXVlPEZsb2F0UmVjdD4oKSk7CiAgICAgcGFyc2VSZWN0KHN0cmluZywgYW5pbWF0
ZWRUeXBlLT5yZWN0KCkpOwogICAgIHJldHVybiBhbmltYXRlZFR5cGU7CiB9CiAKIHN0ZDo6dW5p
cXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkUmVjdEFuaW1hdG9yOjpzdGFydEFu
aW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmlt
YXRlZFR5cGVzKQogewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJlY3QoY29u
c3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRlZFJlY3Q+KGFuaW1hdGVkVHlwZXMpKTsKKyAg
ICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRlZFJlY3Q+KGFuaW1hdGVk
VHlwZXMpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVkUmVjdEFuaW1hdG9yOjpzdG9wQW5pbVZhbEFu
aW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlw
ZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRTdHJpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAJKHJldmlz
aW9uIDIxMTczNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwxNCBAQCBTVkdBbmltYXRlZFN0cmluZ0FuaW1h
dG9yOjpTVkdBbmltYXRlZFN0CiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNW
R0FuaW1hdGVkU3RyaW5nQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiB7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNy
ZWF0ZVN0cmluZyhzdGQ6Om1ha2VfdW5pcXVlPFN0cmluZz4oKSk7CisgICAgYXV0byBhbmltYXRl
ZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFN0cmluZz4o
KSk7CiAgICAgYW5pbWF0ZWRUeXBlLT5zdHJpbmcoKSA9IHN0cmluZzsKICAgICByZXR1cm4gYW5p
bWF0ZWRUeXBlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmlt
YXRlZFN0cmluZ0FuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVu
dEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogewotICAgIHJldHVybiBTVkdB
bmltYXRlZFR5cGU6OmNyZWF0ZVN0cmluZyhjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlPFNWR0FuaW1h
dGVkU3RyaW5nPihhbmltYXRlZFR5cGVzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZyb21CYXNl
VmFsdWU8U1ZHQW5pbWF0ZWRTdHJpbmc+KGFuaW1hdGVkVHlwZXMpOwogfQogCiB2b2lkIFNWR0Fu
aW1hdGVkU3RyaW5nQW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1l
bnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwCShyZXZpc2lvbiAyMTE3
MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RB
bmltYXRvcjo6U1ZHQW5pCiAKIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGVUcmFuc2Zvcm1MaXN0KHN0ZDo6bWFrZV91bmlxdWU8U1ZHVHJhbnNmb3JtTGlzdFZh
bHVlcz4oKSk7CisgICAgYXV0byBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0
ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXM+KCkpOwogICAgIGFuaW1h
dGVkVHlwZS0+dHJhbnNmb3JtTGlzdCgpLnBhcnNlKG1fdHJhbnNmb3JtVHlwZVN0cmluZyArIHN0
cmluZyArICcpJyk7CiAgICAgQVNTRVJUKGFuaW1hdGVkVHlwZS0+dHJhbnNmb3JtTGlzdCgpLnNp
emUoKSA8PSAxKTsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwpAQCAtNDksNyArNDksNyBAQCBz
dGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltCiAKIHN0ZDo6dW5pcXVlX3B0
cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpzdGFy
dEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBh
bmltYXRlZFR5cGVzKQogewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVRyYW5z
Zm9ybUxpc3QoY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+
KGFuaW1hdGVkVHlwZXMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZTxTVkdB
bmltYXRlZFRyYW5zZm9ybUxpc3Q+KGFuaW1hdGVkVHlwZXMpOwogfQogCiB2b2lkIFNWR0FuaW1h
dGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpzdG9wQW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdF
bGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcAkocmV2aXNpb24gMjExNzM3KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAg
KzEsMjcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCkBAIC0yMiwzMDYgKzI5LDI3MyBAQAogCiAjaW5jbHVkZSAiQ1NT
UGFyc2VyLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiU1ZH
UGF0aEJ5dGVTdHJlYW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdBbmltYXRlZFR5
cGU6OlNWR0FuaW1hdGVkVHlwZShBbmltYXRlZFByb3BlcnR5VHlwZSB0eXBlKQotICAgIDogbV90
eXBlKHR5cGUpCi17Ci19Ci0KIFNWR0FuaW1hdGVkVHlwZTo6flNWR0FuaW1hdGVkVHlwZSgpCiB7
Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEFuaW1hdGVkQW5nbGU6Ci0gICAgICAg
IGRlbGV0ZSBtX2RhdGEuYW5nbGVBbmRFbnVtZXJhdGlvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBBbmltYXRlZEJvb2xlYW46Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEuYm9vbGVhbjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbmltYXRlZENvbG9yOgotICAgICAgICBkZWxldGUgbV9k
YXRhLmNvbG9yOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkRW51bWVyYXRpb246
Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEuZW51bWVyYXRpb247Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQW5pbWF0ZWRJbnRlZ2VyOgotICAgICAgICBkZWxldGUgbV9kYXRhLmludGVnZXI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyOgot
ICAgICAgICBkZWxldGUgbV9kYXRhLmludGVnZXJPcHRpb25hbEludGVnZXI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQW5pbWF0ZWRMZW5ndGg6Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEubGVu
Z3RoOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkTGVuZ3RoTGlzdDoKLSAgICAg
ICAgZGVsZXRlIG1fZGF0YS5sZW5ndGhMaXN0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFu
aW1hdGVkTnVtYmVyOgotICAgICAgICBkZWxldGUgbV9kYXRhLm51bWJlcjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlckxpc3Q6Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEu
bnVtYmVyTGlzdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlck9wdGlv
bmFsTnVtYmVyOgotICAgICAgICBkZWxldGUgbV9kYXRhLm51bWJlck9wdGlvbmFsTnVtYmVyOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkUGF0aDoKLSAgICAgICAgZGVsZXRlIG1f
ZGF0YS5wYXRoOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFuaW1hdGVkUG9pbnRzOgotICAg
ICAgICBkZWxldGUgbV9kYXRhLnBvaW50TGlzdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBB
bmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGEucHJlc2Vy
dmVBc3BlY3RSYXRpbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbmltYXRlZFJlY3Q6Ci0g
ICAgICAgIGRlbGV0ZSBtX2RhdGEucmVjdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbmlt
YXRlZFN0cmluZzoKLSAgICAgICAgZGVsZXRlIG1fZGF0YS5zdHJpbmc7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OgotICAgICAgICBkZWxldGUgbV9kYXRh
LnRyYW5zZm9ybUxpc3Q7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQW5pbWF0ZWRVbmtub3du
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNy
ZWF0ZUFuZ2xlQW5kRW51bWVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPHN0ZDo6cGFpcjxTVkdBbmds
ZVZhbHVlLCB1bnNpZ25lZD4+IGFuZ2xlQW5kRW51bWVyYXRpb24pCi17Ci0gICAgQVNTRVJUKGFu
Z2xlQW5kRW51bWVyYXRpb24pOwotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3Vu
aXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVkQW5nbGUpOwotICAgIGFuaW1hdGVkVHlwZS0+
bV9kYXRhLmFuZ2xlQW5kRW51bWVyYXRpb24gPSBhbmdsZUFuZEVudW1lcmF0aW9uLnJlbGVhc2Uo
KTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5p
bWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUJvb2xlYW4oc3RkOjp1bmlxdWVfcHRy
PGJvb2w+IGJvb2xlYW4pCi17Ci0gICAgQVNTRVJUKGJvb2xlYW4pOwotICAgIGF1dG8gYW5pbWF0
ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVkQm9vbGVh
bik7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEuYm9vbGVhbiA9IGJvb2xlYW4ucmVsZWFzZSgp
OwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmlt
YXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlQ29sb3Ioc3RkOjp1bmlxdWVfcHRyPENv
bG9yPiBjb2xvcikKLXsKLSAgICBBU1NFUlQoY29sb3IpOwotICAgIGF1dG8gYW5pbWF0ZWRUeXBl
ID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVkQ29sb3IpOwotICAg
IGFuaW1hdGVkVHlwZS0+bV9kYXRhLmNvbG9yID0gY29sb3IucmVsZWFzZSgpOwotICAgIHJldHVy
biBhbmltYXRlZFR5cGU7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNW
R0FuaW1hdGVkVHlwZTo6Y3JlYXRlRW51bWVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVk
PiBlbnVtZXJhdGlvbikKLXsKLSAgICBBU1NFUlQoZW51bWVyYXRpb24pOwotICAgIGF1dG8gYW5p
bWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFuaW1hdGVkRW51
bWVyYXRpb24pOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmVudW1lcmF0aW9uID0gZW51bWVy
YXRpb24ucmVsZWFzZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Ci19Ci0KLXN0ZDo6dW5p
cXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlSW50ZWdlcihz
dGQ6OnVuaXF1ZV9wdHI8aW50PiBpbnRlZ2VyKQotewotICAgIEFTU0VSVChpbnRlZ2VyKTsKLSAg
ICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihB
bmltYXRlZEludGVnZXIpOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLmludGVnZXIgPSBpbnRl
Z2VyLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQotCi1zdGQ6OnVuaXF1
ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUludGVnZXJPcHRp
b25hbEludGVnZXIoc3RkOjp1bmlxdWVfcHRyPHN0ZDo6cGFpcjxpbnQsIGludD4+IGludGVnZXJP
cHRpb25hbEludGVnZXIpCi17Ci0gICAgQVNTRVJUKGludGVnZXJPcHRpb25hbEludGVnZXIpOwot
ICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+
KEFuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlcik7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2Rh
dGEuaW50ZWdlck9wdGlvbmFsSW50ZWdlciA9IGludGVnZXJPcHRpb25hbEludGVnZXIucmVsZWFz
ZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Ci19CisgICAgaWYgKCFtX293bnNWYWx1ZSkK
KyAgICAgICAgcmV0dXJuOwogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdB
bmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0aChzdGQ6OnVuaXF1ZV9wdHI8U1ZHTGVuZ3RoVmFsdWU+
IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQobGVuZ3RoKTsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9
IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZExlbmd0aCk7Ci0gICAg
YW5pbWF0ZWRUeXBlLT5tX2RhdGEubGVuZ3RoID0gbGVuZ3RoLnJlbGVhc2UoKTsKLSAgICByZXR1
cm4gYW5pbWF0ZWRUeXBlOworICAgIFdURjo6c3dpdGNoT24obV92YWx1ZSwKKyAgICAgICAgWyZd
KHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlKiwgdW5zaWduZWQqPiBhbmdsZUFuZEVudW1lcmF0aW9u
KSB7CisgICAgICAgICAgICBkZWxldGUgYW5nbGVBbmRFbnVtZXJhdGlvbi5maXJzdDsKKyAgICAg
ICAgICAgIGRlbGV0ZSBhbmdsZUFuZEVudW1lcmF0aW9uLnNlY29uZDsKKyAgICAgICAgfSwKKyAg
ICAgICAgWyZdKGJvb2wqIGJvb2xlYW4pIHsKKyAgICAgICAgICAgIGRlbGV0ZSBib29sZWFuOwor
ICAgICAgICB9LAorICAgICAgICBbJl0oQ29sb3IqIGNvbG9yKSB7CisgICAgICAgICAgICBkZWxl
dGUgY29sb3I7CisgICAgICAgIH0sCisgICAgICAgIFsmXSh1bnNpZ25lZCogZW51bWVyYXRpb24p
IHsKKyAgICAgICAgICAgIGRlbGV0ZSBlbnVtZXJhdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAg
WyZdKGludCogaW50ZWdlcikgeworICAgICAgICAgICAgZGVsZXRlIGludGVnZXI7CisgICAgICAg
IH0sCisgICAgICAgIFsmXShzdGQ6OnBhaXI8aW50KiwgaW50Kj4gaW50ZWdlck9wdGlvbmFsSW50
ZWdlcikgeworICAgICAgICAgICAgZGVsZXRlIGludGVnZXJPcHRpb25hbEludGVnZXIuZmlyc3Q7
CisgICAgICAgICAgICBkZWxldGUgaW50ZWdlck9wdGlvbmFsSW50ZWdlci5zZWNvbmQ7CisgICAg
ICAgIH0sCisgICAgICAgIFsmXShTVkdMZW5ndGhWYWx1ZSogbGVuZ3RoKSB7CisgICAgICAgICAg
ICBkZWxldGUgbGVuZ3RoOworICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHTGVuZ3RoTGlzdFZh
bHVlcyogbGVuZ3RoTGlzdCkgeworICAgICAgICAgICAgZGVsZXRlIGxlbmd0aExpc3Q7CisgICAg
ICAgIH0sCisgICAgICAgIFsmXShmbG9hdCogbnVtYmVyKSB7CisgICAgICAgICAgICBkZWxldGUg
bnVtYmVyOworICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHTnVtYmVyTGlzdFZhbHVlcyogbnVt
YmVyTGlzdCkgeworICAgICAgICAgICAgZGVsZXRlIG51bWJlckxpc3Q7CisgICAgICAgIH0sCisg
ICAgICAgIFsmXShzdGQ6OnBhaXI8ZmxvYXQqLCBmbG9hdCo+IG51bWJlck9wdGlvbmFsTnVtYmVy
KSB7CisgICAgICAgICAgICBkZWxldGUgbnVtYmVyT3B0aW9uYWxOdW1iZXIuZmlyc3Q7CisgICAg
ICAgICAgICBkZWxldGUgbnVtYmVyT3B0aW9uYWxOdW1iZXIuc2Vjb25kOworICAgICAgICB9LAor
ICAgICAgICBbJl0oU1ZHUGF0aEJ5dGVTdHJlYW0qIHBhdGgpIHsKKyAgICAgICAgICAgIGRlbGV0
ZSBwYXRoOworICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHUG9pbnRMaXN0VmFsdWVzKiBwb2lu
dExpc3QpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwb2ludExpc3Q7CisgICAgICAgIH0sCisgICAg
ICAgIFsmXShTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUqIHByZXNlcnZlQXNwZWN0UmF0aW8p
IHsKKyAgICAgICAgICAgIGRlbGV0ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgICAgICB9LAor
ICAgICAgICBbJl0oRmxvYXRSZWN0KiByZWN0KSB7CisgICAgICAgICAgICBkZWxldGUgcmVjdDsK
KyAgICAgICAgfSwKKyAgICAgICAgWyZdKFN0cmluZyogc3RyaW5nKSB7CisgICAgICAgICAgICBk
ZWxldGUgc3RyaW5nOworICAgICAgICB9LAorICAgICAgICBbJl0oU1ZHVHJhbnNmb3JtTGlzdFZh
bHVlcyogdHJhbnNmb3JtTGlzdCkgeworICAgICAgICAgICAgZGVsZXRlIHRyYW5zZm9ybUxpc3Q7
CisgICAgICAgIH0KKyAgICApOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZUxlbmd0aExpc3Qoc3RkOjp1bmlxdWVfcHRyPFNWR0xl
bmd0aExpc3RWYWx1ZXM+IGxlbmd0aExpc3QpCi17Ci0gICAgQVNTRVJUKGxlbmd0aExpc3QpOwot
ICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+
KEFuaW1hdGVkTGVuZ3RoTGlzdCk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEubGVuZ3RoTGlz
dCA9IGxlbmd0aExpc3QucmVsZWFzZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Ci19Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRl
TnVtYmVyKHN0ZDo6dW5pcXVlX3B0cjxmbG9hdD4gbnVtYmVyKQotewotICAgIEFTU0VSVChudW1i
ZXIpOwotICAgIGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRl
ZFR5cGU+KEFuaW1hdGVkTnVtYmVyKTsKLSAgICBhbmltYXRlZFR5cGUtPm1fZGF0YS5udW1iZXIg
PSBudW1iZXIucmVsZWFzZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7Ci19Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlTnVtYmVy
TGlzdChzdGQ6OnVuaXF1ZV9wdHI8U1ZHTnVtYmVyTGlzdFZhbHVlcz4gbnVtYmVyTGlzdCkKLXsK
LSAgICBBU1NFUlQobnVtYmVyTGlzdCk7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNWR0FuaW1hdGVkVHlwZT4oQW5pbWF0ZWROdW1iZXJMaXN0KTsKLSAgICBhbmlt
YXRlZFR5cGUtPm1fZGF0YS5udW1iZXJMaXN0ID0gbnVtYmVyTGlzdC5yZWxlYXNlKCk7Ci0gICAg
cmV0dXJuIGFuaW1hdGVkVHlwZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlw
ZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVOdW1iZXJPcHRpb25hbE51bWJlcihzdGQ6OnVuaXF1
ZV9wdHI8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IG51bWJlck9wdGlvbmFsTnVtYmVyKQotewot
ICAgIEFTU0VSVChudW1iZXJPcHRpb25hbE51bWJlcik7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUg
PSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkVHlwZT4oQW5pbWF0ZWROdW1iZXJPcHRpb25h
bE51bWJlcik7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEubnVtYmVyT3B0aW9uYWxOdW1iZXIg
PSBudW1iZXJPcHRpb25hbE51bWJlci5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGFuaW1hdGVkVHlw
ZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGVQYXRoKHN0ZDo6dW5pcXVlX3B0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gcGF0aCkKK2Jv
b2wgU1ZHQW5pbWF0ZWRUeXBlOjpzdXBwb3J0c0FuaW1WYWwoQW5pbWF0ZWRQcm9wZXJ0eVR5cGUg
dHlwZSkKIHsKLSAgICBBU1NFUlQocGF0aCk7Ci0gICAgYXV0byBhbmltYXRlZFR5cGUgPSBzdGQ6
Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkVHlwZT4oQW5pbWF0ZWRQYXRoKTsKLSAgICBhbmltYXRl
ZFR5cGUtPm1fZGF0YS5wYXRoID0gcGF0aC5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGFuaW1hdGVk
VHlwZTsKKyAgICAvLyBBbmltYXRlZENvbG9yIGlzIG9ubHkgdXNlZCBmb3IgQ1NTIHByb3BlcnR5
IGFuaW1hdGlvbnMuCisgICAgcmV0dXJuIHR5cGUgIT0gQW5pbWF0ZWRVbmtub3duICYmIHR5cGUg
IT0gQW5pbWF0ZWRDb2xvcjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQb2ludExpc3Qoc3RkOjp1bmlxdWVfcHRyPFNWR1BvaW50
TGlzdFZhbHVlcz4gcG9pbnRMaXN0KQorQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgU1ZHQW5pbWF0ZWRU
eXBlOjp0eXBlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQocG9pbnRMaXN0KTsKLSAgICBhdXRvIGFu
aW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZFBv
aW50cyk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEucG9pbnRMaXN0ID0gcG9pbnRMaXN0LnJl
bGVhc2UoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQorICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKG1fdmFsdWUsCisgICAgICAgIFsgXShzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSosIHVu
c2lnbmVkKj4pIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZEFuZ2xlOworICAgICAgICB9
LAorICAgICAgICBbIF0oYm9vbCopIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZEJvb2xl
YW47CisgICAgICAgIH0sCisgICAgICAgIFsgXShDb2xvciopIHsKKyAgICAgICAgICAgIHJldHVy
biBBbmltYXRlZENvbG9yOworICAgICAgICB9LAorICAgICAgICBbIF0odW5zaWduZWQqKSB7Cisg
ICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWRFbnVtZXJhdGlvbjsKKyAgICAgICAgfSwKKyAgICAg
ICAgWyBdKGludCopIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZEludGVnZXI7CisgICAg
ICAgIH0sCisgICAgICAgIFsgXShzdGQ6OnBhaXI8aW50KiwgaW50Kj4pIHsKKyAgICAgICAgICAg
IHJldHVybiBBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXI7CisgICAgICAgIH0sCisgICAg
ICAgIFsgXShTVkdMZW5ndGhWYWx1ZSopIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZExl
bmd0aDsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKFNWR0xlbmd0aExpc3RWYWx1ZXMqKSB7Cisg
ICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWRMZW5ndGhMaXN0OworICAgICAgICB9LAorICAgICAg
ICBbIF0oZmxvYXQqKSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWROdW1iZXI7CisgICAg
ICAgIH0sCisgICAgICAgIFsgXShTVkdOdW1iZXJMaXN0VmFsdWVzKikgeworICAgICAgICAgICAg
cmV0dXJuIEFuaW1hdGVkTnVtYmVyTGlzdDsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKHN0ZDo6
cGFpcjxmbG9hdCosIGZsb2F0Kj4pIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZE51bWJl
ck9wdGlvbmFsTnVtYmVyOworICAgICAgICB9LAorICAgICAgICBbIF0oU1ZHUGF0aEJ5dGVTdHJl
YW0qKSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWRQYXRoOworICAgICAgICB9LAorICAg
ICAgICBbIF0oU1ZHUG9pbnRMaXN0VmFsdWVzKikgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1h
dGVkUG9pbnRzOworICAgICAgICB9LAorICAgICAgICBbIF0oU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlKikgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRp
bzsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKEZsb2F0UmVjdCopIHsKKyAgICAgICAgICAgIHJl
dHVybiBBbmltYXRlZFJlY3Q7CisgICAgICAgIH0sCisgICAgICAgIFsgXShTdHJpbmcqKSB7Cisg
ICAgICAgICAgICByZXR1cm4gQW5pbWF0ZWRTdHJpbmc7CisgICAgICAgIH0sCisgICAgICAgIFsg
XShTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzKikgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGVk
VHJhbnNmb3JtTGlzdDsKKyAgICAgICAgfQorICAgICk7CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpbyhz
dGQ6OnVuaXF1ZV9wdHI8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKQotewotICAgIEFTU0VSVChwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKLSAgICBhdXRvIGFu
aW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZFBy
ZXNlcnZlQXNwZWN0UmF0aW8pOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLnByZXNlcnZlQXNw
ZWN0UmF0aW8gPSBwcmVzZXJ2ZUFzcGVjdFJhdGlvLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gYW5p
bWF0ZWRUeXBlOworICAgIHJldHVybiBBbmltYXRlZFVua25vd247CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUmVjdChzdGQ6OnVu
aXF1ZV9wdHI8RmxvYXRSZWN0PiByZWN0KQotewotICAgIEFTU0VSVChyZWN0KTsKLSAgICBhdXRv
IGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRl
ZFJlY3QpOwotICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLnJlY3QgPSByZWN0LnJlbGVhc2UoKTsK
LSAgICByZXR1cm4gYW5pbWF0ZWRUeXBlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVN0cmluZyhzdGQ6OnVuaXF1ZV9wdHI8U3Ry
aW5nPiBzdHJpbmcpCitTdHJpbmcgU1ZHQW5pbWF0ZWRUeXBlOjp2YWx1ZUFzU3RyaW5nKCkKIHsK
LSAgICBBU1NFUlQoc3RyaW5nKTsKLSAgICBhdXRvIGFuaW1hdGVkVHlwZSA9IHN0ZDo6bWFrZV91
bmlxdWU8U1ZHQW5pbWF0ZWRUeXBlPihBbmltYXRlZFN0cmluZyk7Ci0gICAgYW5pbWF0ZWRUeXBl
LT5tX2RhdGEuc3RyaW5nID0gc3RyaW5nLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gYW5pbWF0ZWRU
eXBlOwotfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5
cGU6OmNyZWF0ZVRyYW5zZm9ybUxpc3Qoc3RkOjp1bmlxdWVfcHRyPFNWR1RyYW5zZm9ybUxpc3RW
YWx1ZXM+IHRyYW5zZm9ybUxpc3QpCi17Ci0gICAgQVNTRVJUKHRyYW5zZm9ybUxpc3QpOwotICAg
IGF1dG8gYW5pbWF0ZWRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZFR5cGU+KEFu
aW1hdGVkVHJhbnNmb3JtTGlzdCk7Ci0gICAgYW5pbWF0ZWRUeXBlLT5tX2RhdGEudHJhbnNmb3Jt
TGlzdCA9IHRyYW5zZm9ybUxpc3QucmVsZWFzZSgpOwotICAgIHJldHVybiBhbmltYXRlZFR5cGU7
Ci19CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV92YWx1ZSwKKyAgICAgICAgWyZdKENvbG9y
KiBjb2xvcikgeworICAgICAgICAgICAgcmV0dXJuIGNvbG9yLT5zZXJpYWxpemVkKCk7CisgICAg
ICAgIH0sCisgICAgICAgIFsmXShTVkdMZW5ndGhWYWx1ZSogbGVuZ3RoKSB7CisgICAgICAgICAg
ICByZXR1cm4gbGVuZ3RoLT52YWx1ZUFzU3RyaW5nKCk7CisgICAgICAgIH0sCisgICAgICAgIFsm
XShTVkdMZW5ndGhMaXN0VmFsdWVzKiBsZW5ndGhMaXN0KSB7CisgICAgICAgICAgICByZXR1cm4g
bGVuZ3RoTGlzdC0+dmFsdWVBc1N0cmluZygpOworICAgICAgICB9LAorICAgICAgICBbJl0oZmxv
YXQqIG51bWJlcikgeworICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKCpudW1iZXIp
OworICAgICAgICB9LAorICAgICAgICBbJl0oRmxvYXRSZWN0KiByZWN0KSB7CisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nOjpudW1iZXIocmVjdC0+eCgpKSArICcgJyArIFN0cmluZzo6bnVtYmVy
KHJlY3QtPnkoKSkgKyAnICcgKyBTdHJpbmc6Om51bWJlcihyZWN0LT53aWR0aCgpKSArICcgJyAr
IFN0cmluZzo6bnVtYmVyKHJlY3QtPmhlaWdodCgpKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZd
KFN0cmluZyogc3RyaW5nKSB7CisgICAgICAgICAgICByZXR1cm4gKnN0cmluZzsKKyAgICAgICAg
fSwKKworICAgICAgICAvLyBUaGVzZSB0eXBlcyBkb24ndCBhcHBlYXIgaW4gdGhlIHRhYmxlIGlu
IFNWR0VsZW1lbnQ6OmNzc1Byb3BlcnR5VG9UeXBlTWFwKCkgYW5kIHRodXMgZG9uJ3QgbmVlZCB2
YWx1ZUFzU3RyaW5nKCkgc3VwcG9ydC4KKyAgICAgICAgWyBdKHN0ZDo6cGFpcjxTVkdBbmdsZVZh
bHVlKiwgdW5zaWduZWQqPikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0sCisgICAgICAgIFsgXShib29s
KikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgICAgIH0sCisgICAgICAgIFsgXSh1bnNpZ25lZCopIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgICAgICB9LAorICAgICAgICBbIF0oaW50KikgeworICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0sCisg
ICAgICAgIFsgXShzdGQ6OnBhaXI8aW50KiwgaW50Kj4pIHsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9LAor
ICAgICAgICBbIF0oU1ZHTnVtYmVyTGlzdFZhbHVlcyopIHsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9LAor
ICAgICAgICBbIF0oc3RkOjpwYWlyPGZsb2F0KiwgZmxvYXQqPikgeworICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAg
IH0sCisgICAgICAgIFsgXShTVkdQYXRoQnl0ZVN0cmVhbSopIHsKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9
LAorICAgICAgICBbIF0oU1ZHUG9pbnRMaXN0VmFsdWVzKikgeworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0s
CisgICAgICAgIFsgXShTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUqKSB7CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgWyBdKFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXMqKSB7CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICAgICAgfQorICAgICk7CiAKLVN0cmluZyBTVkdBbmltYXRlZFR5cGU6OnZhbHVlQXNTdHJp
bmcoKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBBbmltYXRlZENvbG9yOgot
ICAgICAgICBBU1NFUlQobV9kYXRhLmNvbG9yKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5jb2xv
ci0+c2VyaWFsaXplZCgpOwotICAgIGNhc2UgQW5pbWF0ZWRMZW5ndGg6Ci0gICAgICAgIEFTU0VS
VChtX2RhdGEubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5sZW5ndGgtPnZhbHVlQXNT
dHJpbmcoKTsKLSAgICBjYXNlIEFuaW1hdGVkTGVuZ3RoTGlzdDoKLSAgICAgICAgQVNTRVJUKG1f
ZGF0YS5sZW5ndGhMaXN0KTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5sZW5ndGhMaXN0LT52YWx1
ZUFzU3RyaW5nKCk7Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlcjoKLSAgICAgICAgQVNTRVJUKG1f
ZGF0YS5udW1iZXIpOwotICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIoKm1fZGF0YS5udW1i
ZXIpOwotICAgIGNhc2UgQW5pbWF0ZWRSZWN0OgotICAgICAgICBBU1NFUlQobV9kYXRhLnJlY3Qp
OwotICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobV9kYXRhLnJlY3QtPngoKSkgKyAnICcg
KyBTdHJpbmc6Om51bWJlcihtX2RhdGEucmVjdC0+eSgpKSArICcgJwotICAgICAgICAgICAgICsg
U3RyaW5nOjpudW1iZXIobV9kYXRhLnJlY3QtPndpZHRoKCkpICsgJyAnICsgU3RyaW5nOjpudW1i
ZXIobV9kYXRhLnJlY3QtPmhlaWdodCgpKTsKLSAgICBjYXNlIEFuaW1hdGVkU3RyaW5nOgotICAg
ICAgICBBU1NFUlQobV9kYXRhLnN0cmluZyk7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLnN0cmlu
ZzsKLQotICAgIC8vIFRoZXNlIHR5cGVzIGRvbid0IGFwcGVhciBpbiB0aGUgdGFibGUgaW4gU1ZH
RWxlbWVudDo6Y3NzUHJvcGVydHlUb1R5cGVNYXAoKSBhbmQgdGh1cyBkb24ndCBuZWVkIHZhbHVl
QXNTdHJpbmcoKSBzdXBwb3J0LgotICAgIGNhc2UgQW5pbWF0ZWRBbmdsZToKLSAgICBjYXNlIEFu
aW1hdGVkQm9vbGVhbjoKLSAgICBjYXNlIEFuaW1hdGVkRW51bWVyYXRpb246Ci0gICAgY2FzZSBB
bmltYXRlZEludGVnZXI6Ci0gICAgY2FzZSBBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXI6
Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlckxpc3Q6Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlck9w
dGlvbmFsTnVtYmVyOgotICAgIGNhc2UgQW5pbWF0ZWRQYXRoOgotICAgIGNhc2UgQW5pbWF0ZWRQ
b2ludHM6Ci0gICAgY2FzZSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86Ci0gICAgY2FzZSBB
bmltYXRlZFRyYW5zZm9ybUxpc3Q6Ci0gICAgY2FzZSBBbmltYXRlZFVua25vd246Ci0gICAgICAg
IC8vIE9ubHkgU1ZHIERPTSBhbmltYXRpb25zIHVzZSB0aGVzZSBwcm9wZXJ0eSB0eXBlcyAtIHRo
YXQgbWVhbnMgdmFsdWVBc1N0cmluZygpIGlzIG5ldmVyIHVzZWQgZm9yIHRob3NlLgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIC8vIE9u
bHkgU1ZHIERPTSBhbmltYXRpb25zIHVzZSB0aGVzZSBwcm9wZXJ0eSB0eXBlcyAtIHRoYXQgbWVh
bnMgdmFsdWVBc1N0cmluZygpIGlzIG5ldmVyIHVzZWQgZm9yIHRob3NlLgogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogYm9vbCBTVkdBbmltYXRl
ZFR5cGU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEFu
aW1hdGVkQ29sb3I6Ci0gICAgICAgIEFTU0VSVChtX2RhdGEuY29sb3IpOwotICAgICAgICAqbV9k
YXRhLmNvbG9yID0gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHZhbHVlLnN0cmlwV2hpdGVTcGFjZSgp
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBBbmltYXRlZExlbmd0aDoKLSAgICAg
ICAgQVNTRVJUKG1fZGF0YS5sZW5ndGgpOwotICAgICAgICByZXR1cm4gIW1fZGF0YS5sZW5ndGgt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUsIFNWR0xlbmd0aFZhbHVlOjpsZW5ndGhNb2RlRm9yQW5p
bWF0ZWRMZW5ndGhBdHRyaWJ1dGUoYXR0ck5hbWUpKS5oYXNFeGNlcHRpb24oKTsKLSAgICBjYXNl
IEFuaW1hdGVkTGVuZ3RoTGlzdDoKLSAgICAgICAgQVNTRVJUKG1fZGF0YS5sZW5ndGhMaXN0KTsK
LSAgICAgICAgbV9kYXRhLmxlbmd0aExpc3QtPnBhcnNlKHZhbHVlLCBTVkdMZW5ndGhWYWx1ZTo6
bGVuZ3RoTW9kZUZvckFuaW1hdGVkTGVuZ3RoQXR0cmlidXRlKGF0dHJOYW1lKSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGNhc2UgQW5pbWF0ZWROdW1iZXI6Ci0gICAgICAgIEFTU0VSVCht
X2RhdGEubnVtYmVyKTsKLSAgICAgICAgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKHZhbHVlLCAqbV9k
YXRhLm51bWJlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgQW5pbWF0ZWRSZWN0
OgotICAgICAgICBBU1NFUlQobV9kYXRhLnJlY3QpOwotICAgICAgICBwYXJzZVJlY3QodmFsdWUs
ICptX2RhdGEucmVjdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgQW5pbWF0ZWRT
dHJpbmc6Ci0gICAgICAgIEFTU0VSVChtX2RhdGEuc3RyaW5nKTsKLSAgICAgICAgKm1fZGF0YS5z
dHJpbmcgPSB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBUaGVzZSB0eXBl
cyBkb24ndCBhcHBlYXIgaW4gdGhlIHRhYmxlIGluIFNWR0VsZW1lbnQ6OmNzc1Byb3BlcnR5VG9U
eXBlTWFwKCkgYW5kIHRodXMgZG9uJ3QgbmVlZCBzZXRWYWx1ZUFzU3RyaW5nKCkgc3VwcG9ydC4g
Ci0gICAgY2FzZSBBbmltYXRlZEFuZ2xlOgotICAgIGNhc2UgQW5pbWF0ZWRCb29sZWFuOgotICAg
IGNhc2UgQW5pbWF0ZWRFbnVtZXJhdGlvbjoKLSAgICBjYXNlIEFuaW1hdGVkSW50ZWdlcjoKLSAg
ICBjYXNlIEFuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlcjoKLSAgICBjYXNlIEFuaW1hdGVk
TnVtYmVyTGlzdDoKLSAgICBjYXNlIEFuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXI6Ci0gICAg
Y2FzZSBBbmltYXRlZFBhdGg6Ci0gICAgY2FzZSBBbmltYXRlZFBvaW50czoKLSAgICBjYXNlIEFu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzoKLSAgICBjYXNlIEFuaW1hdGVkVHJhbnNmb3JtTGlz
dDoKLSAgICBjYXNlIEFuaW1hdGVkVW5rbm93bjoKLSAgICAgICAgLy8gT25seSBTVkcgRE9NIGFu
aW1hdGlvbnMgdXNlIHRoZXNlIHByb3BlcnR5IHR5cGVzIC0gdGhhdCBtZWFucyBzZXRWYWx1ZUFz
U3RyaW5nKCkgaXMgbmV2ZXIgdXNlZCBmb3IgdGhvc2UuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAg
Ym9vbCByZXN1bHQgPSB0cnVlOworICAgIAorICAgIFdURjo6c3dpdGNoT24obV92YWx1ZSwKKyAg
ICAgICAgWyZdKENvbG9yKiBjb2xvcikgeworICAgICAgICAgICAgKmNvbG9yID0gQ1NTUGFyc2Vy
OjpwYXJzZUNvbG9yKHZhbHVlLnN0cmlwV2hpdGVTcGFjZSgpKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgWyZdKFNWR0xlbmd0aFZhbHVlKiBsZW5ndGgpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9ICFs
ZW5ndGgtPnNldFZhbHVlQXNTdHJpbmcodmFsdWUsIFNWR0xlbmd0aFZhbHVlOjpsZW5ndGhNb2Rl
Rm9yQW5pbWF0ZWRMZW5ndGhBdHRyaWJ1dGUoYXR0ck5hbWUpKS5oYXNFeGNlcHRpb24oKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgWyZdKFNWR0xlbmd0aExpc3RWYWx1ZXMqIGxlbmd0aExpc3QpIHsK
KyAgICAgICAgICAgIGxlbmd0aExpc3QtPnBhcnNlKHZhbHVlLCBTVkdMZW5ndGhWYWx1ZTo6bGVu
Z3RoTW9kZUZvckFuaW1hdGVkTGVuZ3RoQXR0cmlidXRlKGF0dHJOYW1lKSk7CisgICAgICAgIH0s
CisgICAgICAgIFsmXShmbG9hdCogbnVtYmVyKSB7CisgICAgICAgICAgICBwYXJzZU51bWJlckZy
b21TdHJpbmcodmFsdWUsICpudW1iZXIpOworICAgICAgICB9LAorICAgICAgICBbJl0oRmxvYXRS
ZWN0KiByZWN0KSB7CisgICAgICAgICAgICBwYXJzZVJlY3QodmFsdWUsICpyZWN0KTsKKyAgICAg
ICAgfSwKKyAgICAgICAgWyZdKFN0cmluZyogc3RyaW5nKSB7CisgICAgICAgICAgICAqc3RyaW5n
ID0gdmFsdWU7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gVGhlc2UgdHlwZXMgZG9uJ3QgYXBw
ZWFyIGluIHRoZSB0YWJsZSBpbiBTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eVRvVHlwZU1hcCgpIGFu
ZCB0aHVzIGRvbid0IG5lZWQgdmFsdWVBc1N0cmluZygpIHN1cHBvcnQuCisgICAgICAgIFsgXShz
dGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSosIHVuc2lnbmVkKj4pIHsKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9LAorICAgICAgICBbIF0oYm9vbCopIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9LAorICAgICAgICBbIF0odW5z
aWduZWQqKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfSwK
KyAgICAgICAgWyBdKGludCopIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9LAorICAgICAgICBbIF0oc3RkOjpwYWlyPGludCosIGludCo+KSB7CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyBdKFNWR051
bWJlckxpc3RWYWx1ZXMqKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgWyBdKHN0ZDo6cGFpcjxmbG9hdCosIGZsb2F0Kj4pIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9LAorICAgICAgICBbIF0oU1ZH
UGF0aEJ5dGVTdHJlYW0qKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgWyBdKFNWR1BvaW50TGlzdFZhbHVlcyopIHsKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9LAorICAgICAgICBbIF0oU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlKikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0sCisgICAgICAgIFsgXShTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzKikgeworICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICApOwogCi1ib29s
IFNWR0FuaW1hdGVkVHlwZTo6c3VwcG9ydHNBbmltVmFsKEFuaW1hdGVkUHJvcGVydHlUeXBlIHR5
cGUpCi17Ci0gICAgLy8gQW5pbWF0ZWRDb2xvciBpcyBvbmx5IHVzZWQgZm9yIENTUyBwcm9wZXJ0
eSBhbmltYXRpb25zLgotICAgIHJldHVybiB0eXBlICE9IEFuaW1hdGVkVW5rbm93biAmJiB0eXBl
ICE9IEFuaW1hdGVkQ29sb3I7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuaAkocmV2aXNp
b24gMjExNzM3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDIwICsxLDI3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAogI3ByYWdtYSBvbmNlCkBAIC0yNSwxMSArMzIsMTQgQEAKICNpbmNs
dWRlICJTVkdMZW5ndGhMaXN0VmFsdWVzLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoVmFsdWUuaCIK
ICNpbmNsdWRlICJTVkdOdW1iZXJMaXN0VmFsdWVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVT
dHJlYW0uaCIKICNpbmNsdWRlICJTVkdQb2ludExpc3RWYWx1ZXMuaCIKICNpbmNsdWRlICJTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCIKICNpbmNsdWRlICJTVkdQcm9wZXJ0eUluZm8uaCIK
ICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvVmFy
aWFudC5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNWR1BhdGhCeXRlU3RyZWFt
OwpAQCAtMzcsMjY2ICs0NywxNDUgQEAgY2xhc3MgU1ZHUGF0aEJ5dGVTdHJlYW07CiBjbGFzcyBT
VkdBbmltYXRlZFR5cGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIFNWR0FuaW1hdGVkVHlwZShBbmltYXRlZFByb3BlcnR5VHlwZSk7CiAgICAgdmlydHVhbCB+
U1ZHQW5pbWF0ZWRUeXBlKCk7CiAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1h
dGVkVHlwZT4gY3JlYXRlQW5nbGVBbmRFbnVtZXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpw
YWlyPFNWR0FuZ2xlVmFsdWUsIHVuc2lnbmVkPj4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVCb29sZWFuKHN0ZDo6dW5pcXVlX3B0cjxib29sPik7
Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZUNvbG9y
KHN0ZDo6dW5pcXVlX3B0cjxDb2xvcj4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBjcmVhdGVFbnVtZXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQ+
KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlSW50
ZWdlcihzdGQ6OnVuaXF1ZV9wdHI8aW50Pik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxT
VkdBbmltYXRlZFR5cGU+IGNyZWF0ZUludGVnZXJPcHRpb25hbEludGVnZXIoc3RkOjp1bmlxdWVf
cHRyPHN0ZDo6cGFpcjxpbnQsIGludD4+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNW
R0FuaW1hdGVkVHlwZT4gY3JlYXRlTGVuZ3RoKHN0ZDo6dW5pcXVlX3B0cjxTVkdMZW5ndGhWYWx1
ZT4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVM
ZW5ndGhMaXN0KHN0ZDo6dW5pcXVlX3B0cjxTVkdMZW5ndGhMaXN0VmFsdWVzPik7Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZU51bWJlcihzdGQ6OnVu
aXF1ZV9wdHI8ZmxvYXQ+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gY3JlYXRlTnVtYmVyTGlzdChzdGQ6OnVuaXF1ZV9wdHI8U1ZHTnVtYmVyTGlzdFZhbHVl
cz4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVO
dW1iZXJPcHRpb25hbE51bWJlcihzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpwYWlyPGZsb2F0LCBmbG9h
dD4+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRl
UGF0aChzdGQ6OnVuaXF1ZV9wdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+KTsKLSAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlUG9pbnRMaXN0KHN0ZDo6dW5pcXVl
X3B0cjxTVkdQb2ludExpc3RWYWx1ZXM+KTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNW
R0FuaW1hdGVkVHlwZT4gY3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpbyhzdGQ6OnVuaXF1ZV9wdHI8
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVJlY3Qoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UmVjdD4p
OwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVTdHJp
bmcoc3RkOjp1bmlxdWVfcHRyPFN0cmluZz4pOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVUcmFuc2Zvcm1MaXN0KHN0ZDo6dW5pcXVlX3B0cjxTVkdU
cmFuc2Zvcm1MaXN0VmFsdWVzPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0
cjxUPiYmIHZhbHVlKQorICAgICAgICB7IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0
ZWRUeXBlPihuZXcgU1ZHQW5pbWF0ZWRUeXBlKFdURk1vdmUodmFsdWUpKSk7IH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRl
ZFR5cGU+IGNyZWF0ZShUJiB2YWx1ZSkKKyAgICAgICAgeyByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4obmV3IFNWR0FuaW1hdGVkVHlwZSh2YWx1ZSkpOyB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8VDE+JiYgdmFsdWUx
LCBzdGQ6OnVuaXF1ZV9wdHI8VDI+JiYgdmFsdWUyKQorICAgICAgICB7IHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPihuZXcgU1ZHQW5pbWF0ZWRUeXBlKFdURk1vdmUodmFs
dWUxKSwgV1RGTW92ZSh2YWx1ZTIpKSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMj4KKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
Y3JlYXRlKFQxJiB2YWx1ZTEsIFQyJiB2YWx1ZTIpCisgICAgICAgIHsgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+KG5ldyBTVkdBbmltYXRlZFR5cGUodmFsdWUxLCB2YWx1
ZTIpKTsgfQorCiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBbmltVmFsKEFuaW1hdGVkUHJvcGVy
dHlUeXBlKTsKIAotICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICBBbmltYXRlZFByb3BlcnR5VHlwZSB0eXBlKCkgY29uc3Q7CiAKICAg
ICAvLyBOb24tbXV0YWJsZSBhY2Nlc3NvcnMuCi0gICAgY29uc3Qgc3RkOjpwYWlyPFNWR0FuZ2xl
VmFsdWUsIHVuc2lnbmVkPiYgYW5nbGVBbmRFbnVtZXJhdGlvbigpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkQW5nbGUpOwotICAgICAgICByZXR1cm4gKm1f
ZGF0YS5hbmdsZUFuZEVudW1lcmF0aW9uOwotICAgIH0KLQotICAgIGNvbnN0IGJvb2wmIGJvb2xl
YW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZEJvb2xl
YW4pOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5ib29sZWFuOwotICAgIH0KLQotICAgIGNvbnN0
IENvbG9yJiBjb2xvcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFu
aW1hdGVkQ29sb3IpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5jb2xvcjsKLSAgICB9Ci0KLSAg
ICBjb25zdCB1bnNpZ25lZCYgZW51bWVyYXRpb24oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBBbmltYXRlZEVudW1lcmF0aW9uKTsKLSAgICAgICAgcmV0dXJuICptX2Rh
dGEuZW51bWVyYXRpb247Ci0gICAgfQotCi0gICAgY29uc3QgaW50JiBpbnRlZ2VyKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRJbnRlZ2VyKTsKLSAgICAg
ICAgcmV0dXJuICptX2RhdGEuaW50ZWdlcjsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnBhaXI8
aW50LCBpbnQ+JiBpbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyKTsKLSAgICAg
ICAgcmV0dXJuICptX2RhdGEuaW50ZWdlck9wdGlvbmFsSW50ZWdlcjsKLSAgICB9Ci0KLSAgICBj
b25zdCBTVkdMZW5ndGhWYWx1ZSYgbGVuZ3RoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3R5cGUgPT0gQW5pbWF0ZWRMZW5ndGgpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5sZW5n
dGg7Ci0gICAgfQotCi0gICAgY29uc3QgU1ZHTGVuZ3RoTGlzdFZhbHVlcyYgbGVuZ3RoTGlzdCgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkTGVuZ3RoTGlz
dCk7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLmxlbmd0aExpc3Q7Ci0gICAgfQotCi0gICAgY29u
c3QgZmxvYXQmIG51bWJlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09
IEFuaW1hdGVkTnVtYmVyKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEubnVtYmVyOwotICAgIH0K
LQotICAgIGNvbnN0IFNWR051bWJlckxpc3RWYWx1ZXMmIG51bWJlckxpc3QoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZE51bWJlckxpc3QpOwotICAgICAg
ICByZXR1cm4gKm1fZGF0YS5udW1iZXJMaXN0OwotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+JiBudW1iZXJPcHRpb25hbE51bWJlcigpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIpOwotICAg
ICAgICByZXR1cm4gKm1fZGF0YS5udW1iZXJPcHRpb25hbE51bWJlcjsKLSAgICB9Ci0KLSAgICBj
b25zdCBTVkdQYXRoQnl0ZVN0cmVhbSogcGF0aCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQobV90eXBlID09IEFuaW1hdGVkUGF0aCk7Ci0gICAgICAgIHJldHVybiBtX2RhdGEucGF0aDsK
LSAgICB9Ci0KLSAgICBjb25zdCBTVkdQb2ludExpc3RWYWx1ZXMmIHBvaW50TGlzdCgpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkUG9pbnRzKTsKLSAgICAg
ICAgcmV0dXJuICptX2RhdGEucG9pbnRMaXN0OwotICAgIH0KLQotICAgIGNvbnN0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbygpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbyk7Ci0g
ICAgICAgIHJldHVybiAqbV9kYXRhLnByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgfQotCi0gICAg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5
cGUgPT0gQW5pbWF0ZWRSZWN0KTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEucmVjdDsKLSAgICB9
Ci0KLSAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQobV90eXBlID09IEFuaW1hdGVkU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEuc3Ry
aW5nOwotICAgIH0KLQotICAgIGNvbnN0IFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXMmIHRyYW5zZm9y
bUxpc3QoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFRy
YW5zZm9ybUxpc3QpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS50cmFuc2Zvcm1MaXN0OwotICAg
IH0KKyAgICBjb25zdCBzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSosIHVuc2lnbmVkKj4mIGFuZ2xl
QW5kRW51bWVyYXRpb24oKSBjb25zdCB7IHJldHVybiB2YWx1ZTxTVkdBbmdsZVZhbHVlLCB1bnNp
Z25lZD4oKTsgfQorICAgIGNvbnN0IGJvb2wmIGJvb2xlYW4oKSBjb25zdCB7IHJldHVybiAqdmFs
dWU8Ym9vbD4oKTsgfQorICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuICp2
YWx1ZTxDb2xvcj4oKTsgfQorICAgIGNvbnN0IHVuc2lnbmVkJiBlbnVtZXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuICp2YWx1ZTx1bnNpZ25lZD4oKTsgfQorICAgIGNvbnN0IGludCYgaW50ZWdlcigp
IGNvbnN0IHsgcmV0dXJuICp2YWx1ZTxpbnQ+KCk7IH0KKyAgICBjb25zdCBzdGQ6OnBhaXI8aW50
KiwgaW50Kj4mIGludGVnZXJPcHRpb25hbEludGVnZXIoKSBjb25zdCB7IHJldHVybiB2YWx1ZTxp
bnQsIGludD4oKTsgfQorICAgIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiAqdmFsdWU8U1ZHTGVuZ3RoVmFsdWU+KCk7IH0KKyAgICBjb25zdCBTVkdMZW5ndGhM
aXN0VmFsdWVzJiBsZW5ndGhMaXN0KCkgY29uc3QgeyByZXR1cm4gKnZhbHVlPFNWR0xlbmd0aExp
c3RWYWx1ZXM+KCk7IH0KKyAgICBjb25zdCBmbG9hdCYgbnVtYmVyKCkgY29uc3QgeyByZXR1cm4g
KnZhbHVlPGZsb2F0PigpOyB9CisgICAgY29uc3QgU1ZHTnVtYmVyTGlzdFZhbHVlcyYgbnVtYmVy
TGlzdCgpIGNvbnN0IHsgcmV0dXJuICp2YWx1ZTxTVkdOdW1iZXJMaXN0VmFsdWVzPigpOyB9Cisg
ICAgY29uc3Qgc3RkOjpwYWlyPGZsb2F0KiwgZmxvYXQqPiYgbnVtYmVyT3B0aW9uYWxOdW1iZXIo
KSBjb25zdCB7IHJldHVybiB2YWx1ZTxmbG9hdCwgZmxvYXQ+KCk7IH0KKyAgICBjb25zdCBTVkdQ
YXRoQnl0ZVN0cmVhbSogcGF0aCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlPFNWR1BhdGhCeXRlU3Ry
ZWFtPigpOyB9CisgICAgY29uc3QgU1ZHUG9pbnRMaXN0VmFsdWVzJiBwb2ludExpc3QoKSBjb25z
dCB7IHJldHVybiAqdmFsdWU8U1ZHUG9pbnRMaXN0VmFsdWVzPigpOyB9CisgICAgY29uc3QgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3QgeyBy
ZXR1cm4gKnZhbHVlPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4oKTsgfQorICAgIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuICp2YWx1ZTxGbG9hdFJlY3Q+KCk7IH0K
KyAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuICp2YWx1ZTxTdHJpbmc+
KCk7IH0KKyAgICBjb25zdCBTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzJiB0cmFuc2Zvcm1MaXN0KCkg
Y29uc3QgeyByZXR1cm4gKnZhbHVlPFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXM+KCk7IH0KIAogICAg
IC8vIE11dGFibGUgYWNjZXNzb3JzLgotICAgIHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlLCB1bnNp
Z25lZD4mIGFuZ2xlQW5kRW51bWVyYXRpb24oKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBBbmltYXRlZEFuZ2xlKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEuYW5nbGVBbmRFbnVt
ZXJhdGlvbjsKLSAgICB9Ci0KLSAgICBib29sJiBib29sZWFuKCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRCb29sZWFuKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEu
Ym9vbGVhbjsKLSAgICB9Ci0KLSAgICBDb2xvciYgY29sb3IoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBBbmltYXRlZENvbG9yKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEuY29s
b3I7Ci0gICAgfQotCi0gICAgdW5zaWduZWQmIGVudW1lcmF0aW9uKCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbik7Ci0gICAgICAgIHJldHVybiAq
bV9kYXRhLmVudW1lcmF0aW9uOwotICAgIH0KLQotICAgIGludCYgaW50ZWdlcigpCi0gICAgewot
ICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkSW50ZWdlcik7Ci0gICAgICAgIHJldHVy
biAqbV9kYXRhLmludGVnZXI7Ci0gICAgfQorICAgIHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlKiwg
dW5zaWduZWQqPiYgYW5nbGVBbmRFbnVtZXJhdGlvbigpIHsgcmV0dXJuIHZhbHVlPFNWR0FuZ2xl
VmFsdWUsIHVuc2lnbmVkPigpOyB9CisgICAgYm9vbCYgYm9vbGVhbigpIHsgcmV0dXJuICp2YWx1
ZTxib29sPigpOyB9CisgICAgQ29sb3ImIGNvbG9yKCkgeyByZXR1cm4gKnZhbHVlPENvbG9yPigp
OyB9CisgICAgdW5zaWduZWQmIGVudW1lcmF0aW9uKCkgeyByZXR1cm4gKnZhbHVlPHVuc2lnbmVk
PigpOyB9CisgICAgaW50JiBpbnRlZ2VyKCkgeyByZXR1cm4gKnZhbHVlPGludD4oKTsgfQorICAg
IHN0ZDo6cGFpcjxpbnQqLCBpbnQqPiYgaW50ZWdlck9wdGlvbmFsSW50ZWdlcigpIHsgcmV0dXJu
IHZhbHVlPGludCwgaW50PigpOyB9CisgICAgU1ZHTGVuZ3RoVmFsdWUmIGxlbmd0aCgpIHsgcmV0
dXJuICp2YWx1ZTxTVkdMZW5ndGhWYWx1ZT4oKTsgfQorICAgIFNWR0xlbmd0aExpc3RWYWx1ZXMm
IGxlbmd0aExpc3QoKSB7IHJldHVybiAqdmFsdWU8U1ZHTGVuZ3RoTGlzdFZhbHVlcz4oKTsgfQor
ICAgIGZsb2F0JiBudW1iZXIoKSB7IHJldHVybiAqdmFsdWU8ZmxvYXQ+KCk7IH0KKyAgICBTVkdO
dW1iZXJMaXN0VmFsdWVzJiBudW1iZXJMaXN0KCkgeyByZXR1cm4gKnZhbHVlPFNWR051bWJlckxp
c3RWYWx1ZXM+KCk7IH0KKyAgICBzdGQ6OnBhaXI8ZmxvYXQqLCBmbG9hdCo+JiBudW1iZXJPcHRp
b25hbE51bWJlcigpIHsgcmV0dXJuIHZhbHVlPGZsb2F0LCBmbG9hdD4oKTsgfQorICAgIFNWR1Bh
dGhCeXRlU3RyZWFtKiBwYXRoKCkgeyByZXR1cm4gdmFsdWU8U1ZHUGF0aEJ5dGVTdHJlYW0+KCk7
IH0KKyAgICBTVkdQb2ludExpc3RWYWx1ZXMmIHBvaW50TGlzdCgpIHsgcmV0dXJuICp2YWx1ZTxT
VkdQb2ludExpc3RWYWx1ZXM+KCk7IH0KKyAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUm
IHByZXNlcnZlQXNwZWN0UmF0aW8oKSB7IHJldHVybiAqdmFsdWU8U1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlPigpOyB9CisgICAgRmxvYXRSZWN0JiByZWN0KCkgeyByZXR1cm4gKnZhbHVlPEZs
b2F0UmVjdD4oKTsgfQorICAgIFN0cmluZyYgc3RyaW5nKCkgeyByZXR1cm4gKnZhbHVlPFN0cmlu
Zz4oKTsgfQorICAgIFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXMmIHRyYW5zZm9ybUxpc3QoKSB7IHJl
dHVybiAqdmFsdWU8U1ZHVHJhbnNmb3JtTGlzdFZhbHVlcz4oKTsgfQogCi0gICAgc3RkOjpwYWly
PGludCwgaW50PiYgaW50ZWdlck9wdGlvbmFsSW50ZWdlcigpCi0gICAgewotICAgICAgICBBU1NF
UlQobV90eXBlID09IEFuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlcik7Ci0gICAgICAgIHJl
dHVybiAqbV9kYXRhLmludGVnZXJPcHRpb25hbEludGVnZXI7Ci0gICAgfQotCi0gICAgU1ZHTGVu
Z3RoVmFsdWUmIGxlbmd0aCgpCi0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1h
dGVkTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEubGVuZ3RoOwotICAgIH0KLQotICAg
IFNWR0xlbmd0aExpc3RWYWx1ZXMmIGxlbmd0aExpc3QoKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBBbmltYXRlZExlbmd0aExpc3QpOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5s
ZW5ndGhMaXN0OwotICAgIH0KLQotICAgIGZsb2F0JiBudW1iZXIoKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZE51bWJlcik7Ci0gICAgICAgIHJldHVybiAqbV9kYXRh
Lm51bWJlcjsKLSAgICB9CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKTsKKyAgICBib29sIHNl
dFZhbHVlQXNTdHJpbmcoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYpOwogCi0g
ICAgU1ZHTnVtYmVyTGlzdFZhbHVlcyYgbnVtYmVyTGlzdCgpCitwcml2YXRlOgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgU1ZHQW5pbWF0ZWRUeXBlKHN0ZDo6dW5pcXVlX3B0cjxUPiYm
IHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUucmVsZWFzZSgpKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZE51bWJlckxpc3QpOwotICAgICAgICByZXR1cm4g
Km1fZGF0YS5udW1iZXJMaXN0OwogICAgIH0KLQotICAgIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+
JiBudW1iZXJPcHRpb25hbE51bWJlcigpCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBTVkdBbmltYXRlZFR5cGUoVCYgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSgmdmFsdWUp
CisgICAgICAgICwgbV9vd25zVmFsdWUoZmFsc2UpCiAgICAgewotICAgICAgICBBU1NFUlQobV90
eXBlID09IEFuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIpOwotICAgICAgICByZXR1cm4gKm1f
ZGF0YS5udW1iZXJPcHRpb25hbE51bWJlcjsKICAgICB9CiAKLSAgICBTVkdQYXRoQnl0ZVN0cmVh
bSogcGF0aCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorICAgIFNW
R0FuaW1hdGVkVHlwZShzdGQ6OnVuaXF1ZV9wdHI8VDE+JiYgdmFsdWUxLCBzdGQ6OnVuaXF1ZV9w
dHI8VDI+JiYgdmFsdWUyKQorICAgICAgICA6IG1fdmFsdWUoc3RkOjpwYWlyPFQxKiwgVDIqPih2
YWx1ZTEucmVsZWFzZSgpLCB2YWx1ZTIucmVsZWFzZSgpKSkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3R5cGUgPT0gQW5pbWF0ZWRQYXRoKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5wYXRoOwog
ICAgIH0KIAotICAgIFNWR1BvaW50TGlzdFZhbHVlcyYgcG9pbnRMaXN0KCkKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgICAgU1ZHQW5pbWF0ZWRUeXBlKFQxJiB2YWx1
ZTEsIFQyJiB2YWx1ZTIpCisgICAgICAgIDogbV92YWx1ZShzdGQ6OnBhaXI8VDEqLCBUMio+KCZ2
YWx1ZTEsICZ2YWx1ZTIpKQorICAgICAgICAsIG1fb3duc1ZhbHVlKGZhbHNlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFBvaW50cyk7Ci0gICAgICAgIHJldHVybiAq
bV9kYXRhLnBvaW50TGlzdDsKICAgICB9CiAKLSAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUmIHByZXNlcnZlQXNwZWN0UmF0aW8oKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
Y29uc3QgVCogdmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBB
bmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8pOwotICAgICAgICByZXR1cm4gKm1fZGF0YS5wcmVz
ZXJ2ZUFzcGVjdFJhdGlvOworICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxU
Kj4obV92YWx1ZSkpOworICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VCo+KG1fdmFsdWUpOwogICAg
IH0KLQotICAgIEZsb2F0UmVjdCYgcmVjdCgpCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBUKiB2YWx1ZSgpCiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1h
dGVkUmVjdCk7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLnJlY3Q7CisgICAgICAgIEFTU0VSVChX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPFQqPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBXVEY6
OmdldDxUKj4obV92YWx1ZSk7CiAgICAgfQogCi0gICAgU3RyaW5nJiBzdHJpbmcoKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KKyAgICBjb25zdCBzdGQ6OnBhaXI8VDEq
LCBUMio+JiB2YWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFu
aW1hdGVkU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuICptX2RhdGEuc3RyaW5nOworICAgICAgICBB
U1NFUlQoKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpwYWlyPFQxKiwgVDIqPj4obV92YWx1
ZSkpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6Z2V0PHN0ZDo6cGFpcjxUMSosIFQyKj4+KG1fdmFs
dWUpOwogICAgIH0KLQotICAgIFNWR1RyYW5zZm9ybUxpc3RWYWx1ZXMmIHRyYW5zZm9ybUxpc3Qo
KQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KKyAgICBzdGQ6
OnBhaXI8VDEqLCBUMio+JiB2YWx1ZSgpCiAgICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09
IEFuaW1hdGVkVHJhbnNmb3JtTGlzdCk7Ci0gICAgICAgIHJldHVybiAqbV9kYXRhLnRyYW5zZm9y
bUxpc3Q7CisgICAgICAgIEFTU0VSVCgoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnBhaXI8
VDEqLCBUMio+PihtX3ZhbHVlKSkpOworICAgICAgICByZXR1cm4gV1RGOjpnZXQ8c3RkOjpwYWly
PFQxKiwgVDIqPj4obV92YWx1ZSk7CiAgICAgfQogCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmco
KTsKLSAgICBib29sIHNldFZhbHVlQXNTdHJpbmcoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0
IFN0cmluZyYpOwotCi1wcml2YXRlOgotICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIG1fdHlwZTsK
LQotICAgIHVuaW9uIERhdGFVbmlvbiB7Ci0gICAgICAgIERhdGFVbmlvbigpCi0gICAgICAgICAg
ICA6IGxlbmd0aChudWxscHRyKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGQ6
OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+KiBhbmdsZUFuZEVudW1lcmF0aW9uOwotICAg
ICAgICBib29sKiBib29sZWFuOwotICAgICAgICBDb2xvciogY29sb3I7Ci0gICAgICAgIHVuc2ln
bmVkKiBlbnVtZXJhdGlvbjsKLSAgICAgICAgaW50KiBpbnRlZ2VyOwotICAgICAgICBzdGQ6OnBh
aXI8aW50LCBpbnQ+KiBpbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyOwotICAgICAgICBTVkdMZW5ndGhW
YWx1ZSogbGVuZ3RoOwotICAgICAgICBTVkdMZW5ndGhMaXN0VmFsdWVzKiBsZW5ndGhMaXN0Owot
ICAgICAgICBmbG9hdCogbnVtYmVyOwotICAgICAgICBTVkdOdW1iZXJMaXN0VmFsdWVzKiBudW1i
ZXJMaXN0OwotICAgICAgICBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiogbnVtYmVyT3B0aW9uYWxO
dW1iZXI7Ci0gICAgICAgIFNWR1BhdGhCeXRlU3RyZWFtKiBwYXRoOwotICAgICAgICBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUqIHByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgICAgIFNWR1Bv
aW50TGlzdFZhbHVlcyogcG9pbnRMaXN0OwotICAgICAgICBGbG9hdFJlY3QqIHJlY3Q7Ci0gICAg
ICAgIFN0cmluZyogc3RyaW5nOwotICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0VmFsdWVzKiB0cmFu
c2Zvcm1MaXN0OwotICAgIH0gbV9kYXRhOworICAgIFZhcmlhbnQ8CisgICAgICAgIHN0ZDo6cGFp
cjxTVkdBbmdsZVZhbHVlKiwgdW5zaWduZWQqPiwKKyAgICAgICAgYm9vbCosCisgICAgICAgIENv
bG9yKiwKKyAgICAgICAgdW5zaWduZWQqLAorICAgICAgICBpbnQqLAorICAgICAgICBzdGQ6OnBh
aXI8aW50KiwgaW50Kj4sCisgICAgICAgIFNWR0xlbmd0aFZhbHVlKiwKKyAgICAgICAgU1ZHTGVu
Z3RoTGlzdFZhbHVlcyosCisgICAgICAgIGZsb2F0KiwKKyAgICAgICAgU1ZHTnVtYmVyTGlzdFZh
bHVlcyosCisgICAgICAgIHN0ZDo6cGFpcjxmbG9hdCosIGZsb2F0Kj4sCisgICAgICAgIFNWR1Bh
dGhCeXRlU3RyZWFtKiwKKyAgICAgICAgU1ZHUG9pbnRMaXN0VmFsdWVzKiwKKyAgICAgICAgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKiwKKyAgICAgICAgRmxvYXRSZWN0KiwKKyAgICAgICAg
U3RyaW5nKiwKKyAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdFZhbHVlcyoKKyAgICA+IG1fdmFsdWU7
CisgICAgCisgICAgYm9vbCBtX293bnNWYWx1ZSB7IHRydWUgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGVBbmlt
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGVB
bmltYXRvci5oCShyZXZpc2lvbiAyMTE3MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZWRUeXBlQW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTQgKzYzLDE4IEBAIHBy
b3RlY3RlZDoKIAogICAgIC8vIEhlbHBlcnMgZm9yIGFuaW1hdG9ycyB0aGF0IG9wZXJhdGUgb24g
c2luZ2xlIHR5cGVzLCBlZy4ganVzdCBvbmUgU1ZHQW5pbWF0ZWRJbnRlZ2VyLgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEFuaW1WYWxUeXBlPgotICAgIHN0ZDo6dW5pcXVlX3B0cjx0eXBlbmFtZSBB
bmltVmFsVHlwZTo6Q29udGVudFR5cGU+IGNvbnN0cnVjdEZyb21CYXNlVmFsdWUoY29uc3QgU1ZH
RWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQorICAgIHN0ZDo6dW5p
cXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNvbnN0cnVjdEZyb21CYXNlVmFsdWUoY29uc3QgU1ZH
RWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGFuaW1hdGVkVHlwZXNbMF0ucHJvcGVydGllcy5zaXplKCkgPT0gMSk7Ci0gICAg
ICAgIGNvbnN0IHR5cGVuYW1lIEFuaW1WYWxUeXBlOjpDb250ZW50VHlwZSYgYW5pbWF0ZWRUeXBl
ID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5cGU8QW5pbVZhbFR5cGU+KGFuaW1hdGVk
VHlwZXNbMF0ucHJvcGVydGllc1swXS5nZXQoKSktPmN1cnJlbnRCYXNlVmFsdWUoKTsKKyAgICAg
ICAgCisgICAgICAgIGNvbnN0IEFuaW1WYWxUeXBlKiBwcm9wZXJ0eSA9IGNhc3RBbmltYXRlZFBy
b3BlcnR5VG9BY3R1YWxUeXBlPEFuaW1WYWxUeXBlPihhbmltYXRlZFR5cGVzWzBdLnByb3BlcnRp
ZXNbMF0uZ2V0KCkpOworICAgICAgICBpZiAocHJvcGVydHktPmlzQW5pbWF0aW5nKCkpCisgICAg
ICAgICAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGUocHJvcGVydHktPmN1cnJlbnRB
bmltYXRlZFZhbHVlKCkpOwogCi0gICAgICAgIGF1dG8gY29weSA9IHN0ZDo6bWFrZV91bmlxdWU8
dHlwZW5hbWUgQW5pbVZhbFR5cGU6OkNvbnRlbnRUeXBlPihhbmltYXRlZFR5cGUpOwotICAgICAg
ICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBlPihTdGFydEFuaW1hdGlvbkFjdGlvbiwgYW5pbWF0
ZWRUeXBlcywgMCwgY29weS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBjb3B5OworICAgICAgICBh
dXRvIHZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTx0eXBlbmFtZSBBbmltVmFsVHlwZTo6Q29udGVu
dFR5cGU+KHByb3BlcnR5LT5jdXJyZW50QmFzZVZhbHVlKCkpOworCisgICAgICAgIGV4ZWN1dGVB
Y3Rpb248QW5pbVZhbFR5cGU+KFN0YXJ0QW5pbWF0aW9uQWN0aW9uLCBhbmltYXRlZFR5cGVzLCAw
LCB2YWx1ZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShX
VEZNb3ZlKHZhbHVlKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQW5pbVZhbFR5
cGU+CkBAIC0xMDcsMzAgKzExMSwzNSBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBIZWxwZXJzIGZv
ciBhbmltYXRvcnMgdGhhdCBvcGVyYXRlIG9uIHBhaXIgdHlwZXMsIGVnLiBhIHBhaXIgb2YgU1ZH
QW5pbWF0ZWRJbnRlZ2Vycy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBbmltVmFsVHlwZTEsIHR5
cGVuYW1lIEFuaW1WYWxUeXBlMj4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpwYWlyPHR5cGVu
YW1lIEFuaW1WYWxUeXBlMTo6Q29udGVudFR5cGUsIHR5cGVuYW1lIEFuaW1WYWxUeXBlMjo6Q29u
dGVudFR5cGU+PiBjb25zdHJ1Y3RGcm9tQmFzZVZhbHVlcyhjb25zdCBTVkdFbGVtZW50QW5pbWF0
ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR0Fu
aW1hdGVkVHlwZT4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZXMoY29uc3QgU1ZHRWxlbWVudEFuaW1h
dGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFu
aW1hdGVkVHlwZXNbMF0ucHJvcGVydGllcy5zaXplKCkgPT0gMik7Ci0gICAgICAgIGNvbnN0IHR5
cGVuYW1lIEFuaW1WYWxUeXBlMTo6Q29udGVudFR5cGUmIGZpcnN0VHlwZSA9IGNhc3RBbmltYXRl
ZFByb3BlcnR5VG9BY3R1YWxUeXBlPEFuaW1WYWxUeXBlMT4oYW5pbWF0ZWRUeXBlc1swXS5wcm9w
ZXJ0aWVzWzBdLmdldCgpKS0+Y3VycmVudEJhc2VWYWx1ZSgpOwotICAgICAgICBjb25zdCB0eXBl
bmFtZSBBbmltVmFsVHlwZTI6OkNvbnRlbnRUeXBlJiBzZWNvbmRUeXBlID0gY2FzdEFuaW1hdGVk
UHJvcGVydHlUb0FjdHVhbFR5cGU8QW5pbVZhbFR5cGUyPihhbmltYXRlZFR5cGVzWzBdLnByb3Bl
cnRpZXNbMV0uZ2V0KCkpLT5jdXJyZW50QmFzZVZhbHVlKCk7Ci0KLSAgICAgICAgYXV0byBjb3B5
ID0gc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OnBhaXI8dHlwZW5hbWUgQW5pbVZhbFR5cGUxOjpDb250
ZW50VHlwZSwgdHlwZW5hbWUgQW5pbVZhbFR5cGUyOjpDb250ZW50VHlwZT4+KGZpcnN0VHlwZSwg
c2Vjb25kVHlwZSk7Ci0gICAgICAgIGV4ZWN1dGVBY3Rpb248QW5pbVZhbFR5cGUxPihTdGFydEFu
aW1hdGlvbkFjdGlvbiwgYW5pbWF0ZWRUeXBlcywgMCwgJmNvcHktPmZpcnN0KTsKLSAgICAgICAg
ZXhlY3V0ZUFjdGlvbjxBbmltVmFsVHlwZTI+KFN0YXJ0QW5pbWF0aW9uQWN0aW9uLCBhbmltYXRl
ZFR5cGVzLCAxLCAmY29weS0+c2Vjb25kKTsKLSAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgICAg
IAorICAgICAgICBjb25zdCBBbmltVmFsVHlwZTEqIGZpcnN0UHJvcGVydHkgPSBjYXN0QW5pbWF0
ZWRQcm9wZXJ0eVRvQWN0dWFsVHlwZTxBbmltVmFsVHlwZTE+KGFuaW1hdGVkVHlwZXNbMF0ucHJv
cGVydGllc1swXS5nZXQoKSk7CisgICAgICAgIGNvbnN0IEFuaW1WYWxUeXBlMiogc2Vjb25kUHJv
cGVydHkgPSBjYXN0QW5pbWF0ZWRQcm9wZXJ0eVRvQWN0dWFsVHlwZTxBbmltVmFsVHlwZTI+KGFu
aW1hdGVkVHlwZXNbMF0ucHJvcGVydGllc1sxXS5nZXQoKSk7CisgICAgICAgIGlmIChmaXJzdFBy
b3BlcnR5LT5pc0FuaW1hdGluZygpICYmIHNlY29uZFByb3BlcnR5LT5pc0FuaW1hdGluZygpKQor
ICAgICAgICAgICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKGZpcnN0UHJvcGVydHkt
PmN1cnJlbnRBbmltYXRlZFZhbHVlKCksIHNlY29uZFByb3BlcnR5LT5jdXJyZW50QW5pbWF0ZWRW
YWx1ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gZmlyc3RWYWx1ZSA9IHN0ZDo6bWFrZV91
bmlxdWU8dHlwZW5hbWUgQW5pbVZhbFR5cGUxOjpDb250ZW50VHlwZT4oZmlyc3RQcm9wZXJ0eS0+
Y3VycmVudEJhc2VWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBzZWNvbmRWYWx1ZSA9IHN0ZDo6bWFr
ZV91bmlxdWU8dHlwZW5hbWUgQW5pbVZhbFR5cGUyOjpDb250ZW50VHlwZT4oc2Vjb25kUHJvcGVy
dHktPmN1cnJlbnRCYXNlVmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICBleGVjdXRlQWN0aW9u
PEFuaW1WYWxUeXBlMT4oU3RhcnRBbmltYXRpb25BY3Rpb24sIGFuaW1hdGVkVHlwZXMsIDAsIGZp
cnN0VmFsdWUuZ2V0KCkpOworICAgICAgICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBlMj4oU3Rh
cnRBbmltYXRpb25BY3Rpb24sIGFuaW1hdGVkVHlwZXMsIDEsIHNlY29uZFZhbHVlLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlKFdURk1vdmUoZmlyc3RWYWx1
ZSksIFdURk1vdmUoc2Vjb25kVmFsdWUpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBBbmltVmFsVHlwZTEsIHR5cGVuYW1lIEFuaW1WYWxUeXBlMj4KLSAgICB2b2lkIHJlc2V0RnJv
bUJhc2VWYWx1ZXMoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRl
ZFR5cGVzLCBTVkdBbmltYXRlZFR5cGUmIHR5cGUsIHN0ZDo6cGFpcjx0eXBlbmFtZSBBbmltVmFs
VHlwZTE6OkNvbnRlbnRUeXBlLCB0eXBlbmFtZSBBbmltVmFsVHlwZTI6OkNvbnRlbnRUeXBlPiYg
KFNWR0FuaW1hdGVkVHlwZTo6KmdldHRlcikoKSkKKyAgICB2b2lkIHJlc2V0RnJvbUJhc2VWYWx1
ZXMoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzLCBT
VkdBbmltYXRlZFR5cGUmIHR5cGUsIHN0ZDo6cGFpcjx0eXBlbmFtZSBBbmltVmFsVHlwZTE6OkNv
bnRlbnRUeXBlKiwgdHlwZW5hbWUgQW5pbVZhbFR5cGUyOjpDb250ZW50VHlwZSo+JiAoU1ZHQW5p
bWF0ZWRUeXBlOjoqZ2V0dGVyKSgpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFuaW1hdGVkVHlw
ZXNbMF0ucHJvcGVydGllcy5zaXplKCkgPT0gMik7CiAgICAgICAgIEFTU0VSVCh0eXBlLnR5cGUo
KSA9PSBtX3R5cGUpOwogCi0gICAgICAgIHN0ZDo6cGFpcjx0eXBlbmFtZSBBbmltVmFsVHlwZTE6
OkNvbnRlbnRUeXBlLCB0eXBlbmFtZSBBbmltVmFsVHlwZTI6OkNvbnRlbnRUeXBlPiYgYW5pbWF0
ZWRUeXBlVmFsdWUgPSAodHlwZS4qZ2V0dGVyKSgpOwotICAgICAgICBhbmltYXRlZFR5cGVWYWx1
ZS5maXJzdCA9IGNhc3RBbmltYXRlZFByb3BlcnR5VG9BY3R1YWxUeXBlPEFuaW1WYWxUeXBlMT4o
YW5pbWF0ZWRUeXBlc1swXS5wcm9wZXJ0aWVzWzBdLmdldCgpKS0+Y3VycmVudEJhc2VWYWx1ZSgp
OwotICAgICAgICBhbmltYXRlZFR5cGVWYWx1ZS5zZWNvbmQgPSBjYXN0QW5pbWF0ZWRQcm9wZXJ0
eVRvQWN0dWFsVHlwZTxBbmltVmFsVHlwZTI+KGFuaW1hdGVkVHlwZXNbMF0ucHJvcGVydGllc1sx
XS5nZXQoKSktPmN1cnJlbnRCYXNlVmFsdWUoKTsKKyAgICAgICAgc3RkOjpwYWlyPHR5cGVuYW1l
IEFuaW1WYWxUeXBlMTo6Q29udGVudFR5cGUqLCB0eXBlbmFtZSBBbmltVmFsVHlwZTI6OkNvbnRl
bnRUeXBlKj4mIGFuaW1hdGVkVHlwZVZhbHVlID0gKHR5cGUuKmdldHRlcikoKTsKKyAgICAgICAg
KmFuaW1hdGVkVHlwZVZhbHVlLmZpcnN0ID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5
cGU8QW5pbVZhbFR5cGUxPihhbmltYXRlZFR5cGVzWzBdLnByb3BlcnRpZXNbMF0uZ2V0KCkpLT5j
dXJyZW50QmFzZVZhbHVlKCk7CisgICAgICAgICphbmltYXRlZFR5cGVWYWx1ZS5zZWNvbmQgPSBj
YXN0QW5pbWF0ZWRQcm9wZXJ0eVRvQWN0dWFsVHlwZTxBbmltVmFsVHlwZTI+KGFuaW1hdGVkVHlw
ZXNbMF0ucHJvcGVydGllc1sxXS5nZXQoKSktPmN1cnJlbnRCYXNlVmFsdWUoKTsKIAotICAgICAg
ICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBlMT4oU3RhcnRBbmltYXRpb25BY3Rpb24sIGFuaW1h
dGVkVHlwZXMsIDAsICZhbmltYXRlZFR5cGVWYWx1ZS5maXJzdCk7Ci0gICAgICAgIGV4ZWN1dGVB
Y3Rpb248QW5pbVZhbFR5cGUyPihTdGFydEFuaW1hdGlvbkFjdGlvbiwgYW5pbWF0ZWRUeXBlcywg
MSwgJmFuaW1hdGVkVHlwZVZhbHVlLnNlY29uZCk7CisgICAgICAgIGV4ZWN1dGVBY3Rpb248QW5p
bVZhbFR5cGUxPihTdGFydEFuaW1hdGlvbkFjdGlvbiwgYW5pbWF0ZWRUeXBlcywgMCwgYW5pbWF0
ZWRUeXBlVmFsdWUuZmlyc3QpOworICAgICAgICBleGVjdXRlQWN0aW9uPEFuaW1WYWxUeXBlMj4o
U3RhcnRBbmltYXRpb25BY3Rpb24sIGFuaW1hdGVkVHlwZXMsIDEsIGFuaW1hdGVkVHlwZVZhbHVl
LnNlY29uZCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQW5pbVZhbFR5cGUxLCB0
eXBlbmFtZSBBbmltVmFsVHlwZTI+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuaAko
cmV2aXNpb24gMjExNzM3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcg
QEAgcHVibGljOgogICAgICAgICBMaXN0UHJvcGVydHk6OmRldGFjaExpc3RXcmFwcGVyc0FuZFJl
c2l6ZSgmbV93cmFwcGVycywgbmV3TGlzdFNpemUpOwogICAgIH0KIAotICAgIFByb3BlcnR5VHlw
ZSYgY3VycmVudEFuaW1hdGVkVmFsdWUoKQorICAgIFByb3BlcnR5VHlwZSYgY3VycmVudEFuaW1h
dGVkVmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQW5pbWF0aW5nKCkpOwog
ICAgICAgICByZXR1cm4gbV9hbmltYXRlZFByb3BlcnR5LT52YWx1ZXMoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eVRlYXJPZmYuaAkocmV2aXNpb24gMjExNzM3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmYuaAkod29ya2luZyBjb3B5KQpAQCAt
NjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2FuaW1WYWwgPSBudWxscHRyOwog
ICAgIH0KIAotICAgIFByb3BlcnR5VHlwZSYgY3VycmVudEFuaW1hdGVkVmFsdWUoKQorICAgIFBy
b3BlcnR5VHlwZSYgY3VycmVudEFuaW1hdGVkVmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKGlzQW5pbWF0aW5nKCkpOwogICAgICAgICByZXR1cm4gbV9hbmltYXRlZFByb3BlcnR5
LT5wcm9wZXJ0eVJlZmVyZW5jZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9m
Zi5oCShyZXZpc2lvbiAyMTE3MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3
ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHQW5pbWF0
ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPihjb250ZXh0RWxlbWVudCwgYXR0
cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHByb3BlcnR5KSk7CiAgICAgfQogCi0g
ICAgUHJvcGVydHlUeXBlJiBjdXJyZW50QW5pbWF0ZWRWYWx1ZSgpCisgICAgUHJvcGVydHlUeXBl
JiBjdXJyZW50QW5pbWF0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNB
bmltYXRpbmcoKSk7CiAgICAgICAgIHJldHVybiAqbV9hbmltYXRlZFByb3BlcnR5OwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjExNzM3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMDItMDYgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBTVkcgQW5pbWF0aW9uIChTTUlMKSBvbiBY
TUwgYW5pbWF0aW5nIHByb3BlcnRpZXMgZG9lc24ndCB3b3JrIG9uIHNlY29uZCBydW4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM4OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2Ugc3VyZSBhcHBs
eWluZyBtdWx0aXBsZSA8YW5pbWF0ZT4gb24gdGhlIHNhbWUgYXR0cmlidXRlIHdpbGwKKyAgICAg
ICAgYW5pbWF0ZSB0aGUgYXR0cmlidXRlIGFzIGV4cGVjdGVkLgorCisgICAgICAgICogc3ZnL2Fu
aW1hdGlvbnMvc21pbC1tdWx0aXBsZS1hbmltYXRlLWxpc3QtZXhwZWN0ZWQuc3ZnOiBBZGRlZC4K
KyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9zbWlsLW11bHRpcGxlLWFuaW1hdGUtbGlzdC5zdmc6
IEFkZGVkLgorCiAyMDE3LTAyLTA2ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMTE3MjIuCkluZGV4OiBMYXlv
dXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zbWlsLW11bHRpcGxlLWFuaW1hdGUtbGlzdC1leHBlY3Rl
ZC5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc21pbC1tdWx0
aXBsZS1hbmltYXRlLWxpc3QtZXhwZWN0ZWQuc3ZnCShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL3N2Zy9hbmltYXRpb25zL3NtaWwtbXVsdGlwbGUtYW5pbWF0ZS1saXN0LWV4cGVjdGVkLnN2
Zwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcgQEAKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIj4KKyAgICA8dGV4dCBkb21pbmFudC1iYXNlbGluZT0iaGFuZ2luZyIg
eD0iMjAiIHk9IjE0MCIgZm9udC1zaXplPSI0NHB4Ij4KKyAgICAgICAgRm9vCisgICAgPC90ZXh0
PgorICAgIDxyZWN0IHg9IjIwMCIgeT0iMTEwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmls
bD0iZ3JlZW4iLz4KKyAgICA8cmVjdCB4PSI0NTAiIHk9IjExMCIgd2lkdGg9IjEwMCIgaGVpZ2h0
PSIxMDAiIGZpbGw9ImdyZWVuIi8+Cis8L3N2Zz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zbWlsLW11bHRpcGxlLWFuaW1hdGUt
bGlzdC5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc21pbC1t
dWx0aXBsZS1hbmltYXRlLWxpc3Quc3ZnCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3N2
Zy9hbmltYXRpb25zL3NtaWwtbXVsdGlwbGUtYW5pbWF0ZS1saXN0LnN2Zwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYyIEBACis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyI+CisgICAgPHRleHQgZG9taW5hbnQtYmFzZWxpbmU9ImhhbmdpbmciIHg9IjIwIiB5PSI0MCIg
Zm9udC1zaXplPSI0NHB4Ij4KKyAgICAgICAgRm9vCisgICAgICAgIDxhbmltYXRlIGlkPSJkb3du
MSIgYXR0cmlidXRlTmFtZT0ieSIgZmlsbD0iZnJlZXplIiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVy
PSIyMG1zIiB0bz0iMTQwIi8+CisgICAgICAgIDxhbmltYXRlIGlkPSJ1cDEiIGF0dHJpYnV0ZU5h
bWU9InkiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5pdGUiIGR1cj0iMjBtcyIgdG89IjQw
Ii8+CisgICAgPC90ZXh0PgorICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI2MCIgeDI9IjMwMCIgeTI9
IjYwIiBzdHJva2U9ImdyZWVuIiBzdHJva2Utd2lkdGg9IjEwMCI+CisgICAgICAgIDxhbmltYXRl
IGlkPSJkb3duMiIgYXR0cmlidXRlTmFtZT0ieTEiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVm
aW5pdGUiIGR1cj0iMjBtcyIgdG89IjE2MCIvPgorICAgICAgICA8YW5pbWF0ZSBpZD0idXAyIiBh
dHRyaWJ1dGVOYW1lPSJ5MSIgZmlsbD0iZnJlZXplIiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVyPSIy
MG1zIiB0bz0iNjAiLz4KKyAgICAKKyAgICAgICAgPGFuaW1hdGUgaWQ9ImRvd24zIiBhdHRyaWJ1
dGVOYW1lPSJ5MiIgZmlsbD0iZnJlZXplIiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVyPSIyMG1zIiB0
bz0iMTYwIi8+CisgICAgICAgIDxhbmltYXRlIGlkPSJ1cDMiIGF0dHJpYnV0ZU5hbWU9InkyIiBm
aWxsPSJmcmVlemUiIGJlZ2luPSJpbmRlZmluaXRlIiBkdXI9IjIwbXMiIHRvPSI2MCIvPgorICAg
IDwvbGluZT4KKyAgICA8bWFya2VyIGlkPSJSZWN0YW5nbGUiIHZpZXdCb3g9IjAgMCAxMDAgMTAw
IiByZWZYPSIxMDAiIHJlZlk9IjUwIiBtYXJrZXJXaWR0aD0iMTAwIiBtYXJrZXJIZWlnaHQ9IjEw
MCIgb3JpZW50PSIwZGVnIj4KKyAgICAgICAgPHJlY3Qgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAi
IGZpbGw9ImdyZWVuIi8+CisgICAgICAgIDxhbmltYXRlIGlkPSJkb3duNCIgYXR0cmlidXRlTmFt
ZT0ib3JpZW50IiBmaWxsPSJmcmVlemUiIGJlZ2luPSJpbmRlZmluaXRlIiBkdXI9IjIwbXMiIGZy
b209IjBkZWciIHRvPSIxODBkZWciLz4KKyAgICAgICAgPGFuaW1hdGUgaWQ9InVwNCIgYXR0cmli
dXRlTmFtZT0ib3JpZW50IiBmaWxsPSJmcmVlemUiIGJlZ2luPSJpbmRlZmluaXRlIiBkdXI9IjIw
bXMiIGZyb209IjE4MGRlZyIgdG89IjBkZWciLz4KKyAgICA8L21hcmtlcj4KKyAgICA8bGluZSB4
MT0iNDAwIiB5MT0iMTYwIiB4Mj0iNDUwIiB5Mj0iMTYwIiBzdHJva2Utd2lkdGg9IjEiIHN0cm9r
ZT0id2hpdGUiICBtYXJrZXItZW5kPSJ1cmwoI1JlY3RhbmdsZSkiLz4KKyAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgPCFbQ0RBVEFbCisgICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworCisg
ICAgICAgIHZhciBncm91cHMgPSBbCisgICAgICAgICAgICB7IGRvd246ICJkb3duMSIsIHVwOiAi
dXAxIiB9LAorICAgICAgICAgICAgeyBkb3duOiAiZG93bjIiLCB1cDogInVwMiIgfSwKKyAgICAg
ICAgICAgIHsgZG93bjogImRvd24zIiwgdXA6ICJ1cDMiIH0sCisgICAgICAgICAgICB7IGRvd246
ICJkb3duNCIsIHVwOiAidXA0IiB9LAorICAgICAgICBdOworCisgICAgICAgIHZhciBkb3duQ291
bnQgPSAwOworICAgICAgICB2YXIgdXBDb3VudCA9IDA7CisKKyAgICAgICAgZm9yIChsZXQgZ3Jv
dXAgb2YgZ3JvdXBzKSB7CisgICAgICAgICAgICBsZXQgZG93biA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGdyb3VwLmRvd24pOworICAgICAgICAgICAgbGV0IHVwID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoZ3JvdXAudXApOworCisgICAgICAgICAgICBkb3duLmFkZEV2ZW50TGlzdGVuZXIo
ImVuZEV2ZW50IiwgKCkgPT4geworICAgICAgICAgICAgICAgIGlmICgrK2Rvd25Db3VudCA8PSBn
cm91cHMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICB0b2dnbGUodXApOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGRvd25Db3VudCA9PSBncm91cHMubGVuZ3RoICogMikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICB1cC5h
ZGRFdmVudExpc3RlbmVyKCJlbmRFdmVudCIsICgpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAo
Kyt1cENvdW50IDw9IGdyb3Vwcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHRvZ2dsZShk
b3duKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBkb3duLmJlZ2luRWxlbWVudCgp
OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdG9nZ2xlKG5ld0VsZW1lbnQpIHsKKyAg
ICAgICAgICAgIG5ld0VsZW1lbnQuYmVnaW5FbGVtZW50KCk7CisgICAgICAgIH0KKyAgICBdXT4K
KyAgICA8L3NjcmlwdD4KKzwvc3ZnPgo=
</data>
<flag name="review"
          id="322596"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>300746</attachid>
            <date>2017-02-06 11:55:52 -0800</date>
            <delta_ts>2017-02-06 11:55:52 -0800</delta_ts>
            <desc>test case (line + text + marker)</desc>
            <filename>test197.svg</filename>
            <type>image/svg+xml</type>
            <size>2783</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgPHRleHQgZG9taW5h
bnQtYmFzZWxpbmU9ImhhbmdpbmciIHg9IjIwIiB5PSIxNDAiIGZvbnQtc2l6ZT0iNDRweCIgZmls
bD0icmVkIj4KICAgICAgICBGb28KICAgIDwvdGV4dD4KICAgIDxyZWN0IHg9IjIwMCIgeT0iMTEw
IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0icmVkIi8+CiAgICA8cmVjdCB4PSI0NTAi
IHk9IjExMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9InJlZCIvPgoKICAgIDx0ZXh0
IGRvbWluYW50LWJhc2VsaW5lPSJoYW5naW5nIiB4PSIyMCIgeT0iNDAiIGZvbnQtc2l6ZT0iNDRw
eCI+CiAgICAgICAgRm9vCiAgICAgICAgPGFuaW1hdGUgaWQ9ImRvd24xIiBhdHRyaWJ1dGVOYW1l
PSJ5IiBmaWxsPSJmcmVlemUiIGJlZ2luPSJpbmRlZmluaXRlIiBkdXI9IjJzIiB0bz0iMTQwIi8+
CiAgICAgICAgPGFuaW1hdGUgaWQ9InVwMSIgYXR0cmlidXRlTmFtZT0ieSIgZmlsbD0iZnJlZXpl
IiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVyPSIycyIgdG89IjQwIi8+CiAgICA8L3RleHQ+CiAgICA8
bGluZSB4MT0iMjAwIiB5MT0iNjAiIHgyPSIzMDAiIHkyPSI2MCIgc3Ryb2tlPSJncmVlbiIgc3Ry
b2tlLXdpZHRoPSIxMDAiPgogICAgICAgIDxhbmltYXRlIGlkPSJkb3duMiIgYXR0cmlidXRlTmFt
ZT0ieTEiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5pdGUiIGR1cj0iMnMiIHRvPSIxNjAi
Lz4KICAgICAgICA8YW5pbWF0ZSBpZD0idXAyIiBhdHRyaWJ1dGVOYW1lPSJ5MSIgZmlsbD0iZnJl
ZXplIiBiZWdpbj0iaW5kZWZpbml0ZSIgZHVyPSIycyIgdG89IjYwIi8+CiAgICAKICAgICAgICA8
YW5pbWF0ZSBpZD0iZG93bjMiIGF0dHJpYnV0ZU5hbWU9InkyIiBmaWxsPSJmcmVlemUiIGJlZ2lu
PSJpbmRlZmluaXRlIiBkdXI9IjJzIiB0bz0iMTYwIi8+CiAgICAgICAgPGFuaW1hdGUgaWQ9InVw
MyIgYXR0cmlidXRlTmFtZT0ieTIiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5pdGUiIGR1
cj0iMnMiIHRvPSI2MCIvPgogICAgPC9saW5lPgogICAgPG1hcmtlciBpZD0iUmVjdGFuZ2xlIiB2
aWV3Qm94PSIwIDAgMTAwIDEwMCIgcmVmWD0iMTAwIiByZWZZPSI1MCIgbWFya2VyV2lkdGg9IjEw
MCIgbWFya2VySGVpZ2h0PSIxMDAiIG9yaWVudD0iMGRlZyI+CiAgICAgICAgPHJlY3Qgd2lkdGg9
IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9ImdyZWVuIi8+CiAgICAgICAgPGFuaW1hdGUgaWQ9ImRv
d240IiBhdHRyaWJ1dGVOYW1lPSJvcmllbnQiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5p
dGUiIGR1cj0iMnMiIGZyb209IjBkZWciIHRvPSIxODBkZWciLz4KICAgICAgICA8YW5pbWF0ZSBp
ZD0idXA0IiBhdHRyaWJ1dGVOYW1lPSJvcmllbnQiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVm
aW5pdGUiIGR1cj0iMnMiIGZyb209IjE4MGRlZyIgdG89IjBkZWciLz4KICAgIDwvbWFya2VyPgog
ICAgPGxpbmUgeDE9IjQwMCIgeTE9IjE2MCIgeDI9IjQ1MCIgeTI9IjE2MCIgc3Ryb2tlLXdpZHRo
PSIxIiBzdHJva2U9IndoaXRlIiAgbWFya2VyLWVuZD0idXJsKCNSZWN0YW5nbGUpIi8+CiAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICA8IVtDREFUQVsKICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCiAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OwoKICAgICAgICB2YXIgZ3JvdXBzID0gWwogICAgICAgICAgICB7IGRvd246ICJkb3duMSIsIHVw
OiAidXAxIiB9LAogICAgICAgICAgICB7IGRvd246ICJkb3duMiIsIHVwOiAidXAyIiB9LAogICAg
ICAgICAgICB7IGRvd246ICJkb3duMyIsIHVwOiAidXAzIiB9LAogICAgICAgICAgICB7IGRvd246
ICJkb3duNCIsIHVwOiAidXA0IiB9LAogICAgICAgIF07CgogICAgICAgIHZhciBkb3duQ291bnQg
PSAwOwogICAgICAgIHZhciB1cENvdW50ID0gMDsKCiAgICAgICAgZm9yIChsZXQgZ3JvdXAgb2Yg
Z3JvdXBzKSB7CiAgICAgICAgICAgIGxldCBkb3duID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Z3JvdXAuZG93bik7CiAgICAgICAgICAgIGxldCB1cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGdyb3VwLnVwKTsKCiAgICAgICAgICAgIGRvd24uYWRkRXZlbnRMaXN0ZW5lcigiZW5kRXZlbnQi
LCAoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoKytkb3duQ291bnQgPD0gZ3JvdXBzLmxlbmd0
aCkKICAgICAgICAgICAgICAgICAgICB0b2dnbGUodXApOwogICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CiAgICAgICAgICAgICAgICAg
ICAgaWYgKGRvd25Db3VudCA9PSBncm91cHMubGVuZ3RoICogMikKICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgdXAuYWRkRXZlbnRMaXN0ZW5lcigiZW5k
RXZlbnQiLCAoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoKyt1cENvdW50IDw9IGdyb3Vwcy5s
ZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlKGRvd24pOwogICAgICAgICAgICB9KTsK
CiAgICAgICAgICAgIGRvd24uYmVnaW5FbGVtZW50KCk7CiAgICAgICAgfQoKICAgICAgICBmdW5j
dGlvbiB0b2dnbGUobmV3RWxlbWVudCkgewogICAgICAgICAgICBuZXdFbGVtZW50LmJlZ2luRWxl
bWVudCgpOwogICAgICAgIH0KICAgIF1dPgogICAgPC9zY3JpcHQ+Cjwvc3ZnPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366517</attachid>
            <date>2019-04-02 12:02:50 -0700</date>
            <delta_ts>2019-04-02 17:26:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>150388.patch</filename>
            <type>text/plain</type>
            <size>4448</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxNWJiYTU0OGJmYS4uYTNjY2E1Y2FlYmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAor
MjAxOS0wNC0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgor
CisgICAgICAgIFNWRyBBbmltYXRpb24gKFNNSUwpIG9uIDx0ZXh0PiBvciA8dHNwYW4+IGRvZXNu
J3Qgd29yayBvbiBzZWNvbmQgcnVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTAzODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgYnVnIGlzIGZpeGVkIGJ5IHJlbW92aW5nIHRoZSBTVkcgdGVhciBv
ZmYgb2JqZWN0cy4gU2VlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTEyMzcuCisKKyAgICAgICAgV2UgbmVlZCB0byBhZGQgYSBsYXlvdXQgdGVzdCB0
byBlbnN1cmUgdGhhdCBubyBjb2RlIGNoYW5nZSB3aWxsIGJyZWFrCisgICAgICAgIHRoaXMgc2Nl
bmFyaW8gaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NtaWwtbXVs
dGlwbGUtYW5pbWF0ZS1saXN0LWV4cGVjdGVkLnN2ZzogQWRkZWQuCisgICAgICAgICogc3ZnL2Fu
aW1hdGlvbnMvc21pbC1tdWx0aXBsZS1hbmltYXRlLWxpc3Quc3ZnOiBBZGRlZC4KKwogMjAxOS0w
NC0wMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSB0aGUgU1ZHIHRlYXIgb2ZmIG9iamVjdHMgZm9yIFNWR01hdHJpeCwgU1ZHVHJh
bnNmcm9tLCBTVkdUcmFuc2Zvcm1MaXN0IGFuZCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NtaWwtbXVsdGlwbGUtYW5pbWF0
ZS1saXN0LWV4cGVjdGVkLnN2ZyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NtaWwtbXVs
dGlwbGUtYW5pbWF0ZS1saXN0LWV4cGVjdGVkLnN2ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMjc5NzI1ZjQzMzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9zdmcvYW5pbWF0aW9ucy9zbWlsLW11bHRpcGxlLWFuaW1hdGUtbGlzdC1leHBlY3RlZC5zdmcK
QEAgLTAsMCArMSw3IEBACis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+
CisgICAgPHRleHQgZG9taW5hbnQtYmFzZWxpbmU9ImhhbmdpbmciIHg9IjIwIiB5PSIxNDAiIGZv
bnQtc2l6ZT0iNDRweCI+CisgICAgICAgIEZvbworICAgIDwvdGV4dD4KKyAgICA8cmVjdCB4PSIy
MDAiIHk9IjExMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9ImdyZWVuIi8+CisgICAg
PHJlY3QgeD0iNDUwIiB5PSIxMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiBmaWxsPSJncmVl
biIvPgorPC9zdmc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc21pbC1tdWx0aXBsZS1hbmltYXRlLWxpc3Quc3ZnIGIv
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc21pbC1tdWx0aXBsZS1hbmltYXRlLWxpc3Quc3Zn
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NDFjZWQ0MWQ4NwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NtaWwtbXVsdGlwbGUt
YW5pbWF0ZS1saXN0LnN2ZwpAQCAtMCwwICsxLDYyIEBACis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyI+CisgICAgPHRleHQgZG9taW5hbnQtYmFzZWxpbmU9Imhhbmdpbmci
IHg9IjIwIiB5PSI0MCIgZm9udC1zaXplPSI0NHB4Ij4KKyAgICAgICAgRm9vCisgICAgICAgIDxh
bmltYXRlIGlkPSJkb3duMSIgYXR0cmlidXRlTmFtZT0ieSIgZmlsbD0iZnJlZXplIiBiZWdpbj0i
aW5kZWZpbml0ZSIgZHVyPSIyMG1zIiB0bz0iMTQwIi8+CisgICAgICAgIDxhbmltYXRlIGlkPSJ1
cDEiIGF0dHJpYnV0ZU5hbWU9InkiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5pdGUiIGR1
cj0iMjBtcyIgdG89IjQwIi8+CisgICAgPC90ZXh0PgorICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI2
MCIgeDI9IjMwMCIgeTI9IjYwIiBzdHJva2U9ImdyZWVuIiBzdHJva2Utd2lkdGg9IjEwMCI+Cisg
ICAgICAgIDxhbmltYXRlIGlkPSJkb3duMiIgYXR0cmlidXRlTmFtZT0ieTEiIGZpbGw9ImZyZWV6
ZSIgYmVnaW49ImluZGVmaW5pdGUiIGR1cj0iMjBtcyIgdG89IjE2MCIvPgorICAgICAgICA8YW5p
bWF0ZSBpZD0idXAyIiBhdHRyaWJ1dGVOYW1lPSJ5MSIgZmlsbD0iZnJlZXplIiBiZWdpbj0iaW5k
ZWZpbml0ZSIgZHVyPSIyMG1zIiB0bz0iNjAiLz4KKworICAgICAgICA8YW5pbWF0ZSBpZD0iZG93
bjMiIGF0dHJpYnV0ZU5hbWU9InkyIiBmaWxsPSJmcmVlemUiIGJlZ2luPSJpbmRlZmluaXRlIiBk
dXI9IjIwbXMiIHRvPSIxNjAiLz4KKyAgICAgICAgPGFuaW1hdGUgaWQ9InVwMyIgYXR0cmlidXRl
TmFtZT0ieTIiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5pdGUiIGR1cj0iMjBtcyIgdG89
IjYwIi8+CisgICAgPC9saW5lPgorICAgIDxtYXJrZXIgaWQ9IlJlY3RhbmdsZSIgdmlld0JveD0i
MCAwIDEwMCAxMDAiIHJlZlg9IjEwMCIgcmVmWT0iNTAiIG1hcmtlcldpZHRoPSIxMDAiIG1hcmtl
ckhlaWdodD0iMTAwIiBvcmllbnQ9IjBkZWciPgorICAgICAgICA8cmVjdCB3aWR0aD0iMTAwIiBo
ZWlnaHQ9IjEwMCIgZmlsbD0iZ3JlZW4iLz4KKyAgICAgICAgPGFuaW1hdGUgaWQ9ImRvd240IiBh
dHRyaWJ1dGVOYW1lPSJvcmllbnQiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5pdGUiIGR1
cj0iMjBtcyIgZnJvbT0iMGRlZyIgdG89IjE4MGRlZyIvPgorICAgICAgICA8YW5pbWF0ZSBpZD0i
dXA0IiBhdHRyaWJ1dGVOYW1lPSJvcmllbnQiIGZpbGw9ImZyZWV6ZSIgYmVnaW49ImluZGVmaW5p
dGUiIGR1cj0iMjBtcyIgZnJvbT0iMTgwZGVnIiB0bz0iMGRlZyIvPgorICAgIDwvbWFya2VyPgor
ICAgIDxsaW5lIHgxPSI0MDAiIHkxPSIxNjAiIHgyPSI0NTAiIHkyPSIxNjAiIHN0cm9rZS13aWR0
aD0iMSIgc3Ryb2tlPSJ3aGl0ZSIgIG1hcmtlci1lbmQ9InVybCgjUmVjdGFuZ2xlKSIvPgorICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICA8IVtDREFUQVsKKyAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7CisKKyAgICAgICAgdmFyIGdyb3VwcyA9IFsKKyAgICAgICAgICAgIHsgZG93bjogImRv
d24xIiwgdXA6ICJ1cDEiIH0sCisgICAgICAgICAgICB7IGRvd246ICJkb3duMiIsIHVwOiAidXAy
IiB9LAorICAgICAgICAgICAgeyBkb3duOiAiZG93bjMiLCB1cDogInVwMyIgfSwKKyAgICAgICAg
ICAgIHsgZG93bjogImRvd240IiwgdXA6ICJ1cDQiIH0sCisgICAgICAgIF07CisKKyAgICAgICAg
dmFyIGRvd25Db3VudCA9IDA7CisgICAgICAgIHZhciB1cENvdW50ID0gMDsKKworICAgICAgICBm
b3IgKGxldCBncm91cCBvZiBncm91cHMpIHsKKyAgICAgICAgICAgIGxldCBkb3duID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoZ3JvdXAuZG93bik7CisgICAgICAgICAgICBsZXQgdXAgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZChncm91cC51cCk7CisKKyAgICAgICAgICAgIGRvd24uYWRkRXZl
bnRMaXN0ZW5lcigiZW5kRXZlbnQiLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKCsrZG93
bkNvdW50IDw9IGdyb3Vwcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHRvZ2dsZSh1cCk7
CisKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGRvd25Db3VudCA9PSBncm91cHMubGVuZ3RoICogMikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB1cC5hZGRFdmVudExpc3RlbmVyKCJlbmRF
dmVudCIsICgpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAoKyt1cENvdW50IDw9IGdyb3Vwcy5s
ZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHRvZ2dsZShkb3duKTsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICBkb3duLmJlZ2luRWxlbWVudCgpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gdG9nZ2xlKG5ld0VsZW1lbnQpIHsKKyAgICAgICAgICAgIG5ld0VsZW1lbnQu
YmVnaW5FbGVtZW50KCk7CisgICAgICAgIH0KKyAgICBdXT4KKyAgICA8L3NjcmlwdD4KKzwvc3Zn
Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>